Monthly Archives: February 2021

Some bits friendlier (b131)


The warning panel in Classic view that advises a resync when Character categories don’t match Library categories was appearing on all tabs even when the categories in that tab actually matched. That has been fixed.

Adjusted the Advanced Edit dialog’s tag info to honor the minimum RTF size.

Shoehorned in the ability to add a description to a Body. The old code for loading a Body and tracking BodyParts in the Library needs to be updated to better reflect how things are done now, but until then, I’ve just made it so you can add and track descriptions for the Body. To add a description, just put a line into the Body data like this: description(This is the description).

There were some legacy values GCA5 was tracking and filling for backward compatibility with GCA4 save files. These values were related to DR and PD for body parts such as feet and hands, which don’t exist on all body types. GCA trying to store those values was crashing the program. Since I no longer write GCA4 files, those compatibility values are no longer needed. Rather than trapping for the missing bits, I have removed the related code. Should I later decide to try writing a backward compatible save file, those features can easily be replicated through other means.

* FastLoad

FastLoad files will be rebuilt because I changed some of the data being tracked related to Body.

* Uses

I have built a new control to allow tracking of how many uses a trait may have, and how many may be used. This supports the uses() tag that the Phoenix sheet supports, and will likely add some additional support tags, such as uses_used(). *Not yet integrated into GCA.*

* ModeManager

Added two new functions MeleeAttackModes() As ModeManager and RangedAttackModes() As ModeManager. Each returns a ModeManager that contains the subset of the trait’s modes related to that type of attack. Remember that some traits may use features with modes that are not types of attacks.

* LoadOut

Added the function ProtectingLocation(Location As String) As Collection, which returns a collection of GCATraits that provide protection to the specified Location (aka BodyPart). Only returns traits that are *applied* in the current loadout!

* Body

Added functions AllLocations() and AllBodyPartNames(), both of which return a Collection of Strings which is all the body parts (aka Locations) in that Body.

Added functions AllVisibleLocations() and AllVisibleBodyPartNames(), which are the same as above, but only include body parts that are displayed on the body diagram.

Changed the Add(BodyPart) routine to not use an optional Key (it always uses the BodyPart CollectionKey now).

Added the CollectionKey property to the BodyPart object, to match most other objects, which returns the CollectionKey for the object (in this case, the lowercase Name).

Added a Contains(Location) function to return True if the location is one contained in the body.

Added properties for both Name, so the body can know itself, and Description, so the user might know more about it.

* GCA5 Changes.GDF

Updated to include a couple body types with dummy description() tags for testing.

* GCA5.xsd

Updated to reflect changes to Body.

Sweeping up the bits (b130)


Updated the code for pasting modifiers and tags into traits to ensure that the targets are marked dirty and will redraw immediately.

Updated the code for saving traits to save the recently added tags within the normal structure, rather than in the Extended tags block.

You can now use drag-n-drop in the Attributes list (on the left side) of the Attributes pane of Classic view to rearrange the mainwin() order of the attributes by dragging them to new positions.

Added a new option to the right-click menu for traits on the Attributes pane of Classic view, and to the gear menu on the Attributes box in Unified view: Create New Attribute. This will create a new attribute with a few possible options, but the user will have to do most of the editing to fully flesh out the attribute they want. This works by injecting a simple “new attribute wizard” into the system. The wizard is effectively a system trait, but attributes have no system lists to pick from.

Added a button to the bottom of the center section of the Attributes pane of Classic view to also add a new attribute.

Added a new section to data files which allows for creating system wizards using data file features. This section is called [Wizards] and must have a specific format where each category in the section is a particular trait type, such as . If this ever gets used for anything else, different trait names within each trait-type category would likely serve as the names of the various wizards for that type of trait.

GCA now reads the [Wizards] block and stores the data in the Library. This block is library specific, and is never saved within the character data. Support of this new section requires new FastLoad files, so those will be rebuilt as you use your libraries. NOTE: At this time, only the Create New Attribute wizard uses this data, and it currently uses only the first Attribute-specific wizard it finds, regardless of name.

Added a setting in the Options dialog for the preferred minimum font size for the RTF text displays.

Added an explainer to the Resync dialog, and adjusted the text at the bottom of the window.

* GCA5 Changes.GDF

Updated to include the new [Wizards] block with a copy of the built-in Attribute wizard for reference or replacement in your files.

* gca5.xsd

Updated for recently added tags.

* tagdefs.xml

Updated for recently added tags.

Mostly updating bits related to bits in the previous build (b129)


Updated the Traits menu, and the right-click menus for traits on the Classic and Unified views, to allow setting Highlight colors of yellow, pink, magenta, lime, cyan, red, green, or blue.

Updated the Traits menu, and the right-click menus for traits on the Classic and Unified views, to allow Collapse/Expand of parent traits.

Updated the UI to include expanded/collapsed indicators on the tree for parent/child items. You can currently only expand/collapse using the menu options, however.

I have updated Paste for traits so that you can now paste Tags that may be on the clipboard as XML (such as when you copy them using Copy Tags or CTRL+SHIFT+C in Advanced Edit). Pasting Tags in this way replaces any existing tags with the same names, and pastes to all selected traits.

I have updated drag-n-drop in the Attributes box in Unified to allow you to rearrange the mainwin() order of the attributes by dragging them to new positions. (This only works when you are not currently viewing a re-ordered list in the box.)

It is now possible to cut-n-paste attributes. Duplicate attributes are still not allowed, so pasting an attribute with a name that already exists will be refused.

Type-to-search in the Classic Attributes lists should now update the search buffer display on the toolbar as other trait lists do.

* Sheets

My print sheets have been updated with support for highlight colors and collapsed parents.

Bits of a variety pack (b128)


You can now delete attributes from a character. GCA will pop up a dialog that warns against it and asks for confirmation. The dialog will also tell you what other traits appear to be directly affected by that attribute, if any. You may then proceed to delete it if you wish.

The way that Attributes are Resynchronized has changed, so it’s a bit less of a special case than before. It first ensures that all attributes in the library exist on the character, and then it uses the standard system (as for the other traits) to resync all the attributes with the library. The standard system will then notify you of any traits that were not found. You can then keep or delete the unfound attributes as desired, depending on whether they’re unneeded or perhaps added by you.

GCA will no longer list all the traits that it’s examining as it does a Resync, but continues to list all the exceptions.

Toolbar now shows a full recycle bin when a trait has been deleted from the character.

Created and included an alternate image for the full recycle bin.

Added some additional procedure header docs to a bunch of routines in GCATrait, and added a couple new helpful properties.

I’ve updated the GCA UI code to support any predefined color as an option for the highlight() tag. GCA will use the name of the color to derive the highlight that is drawn, with a transparency value of 100 (out of 255). The predefined colors that can be used are shown here . If the tag is highlight(yes), GCA will pick yellow as the highlight color. I will be updating the UI soon to support picking the traditional highlight colors of yellow or pink, plus the additional options of red, blue, or green.

Added hideme() tag. This uses the Solver to return a numeric result. If zero, hide() is removed, otherwise hide(yes) is added to the trait.

Added highlightme() tag. This uses TextFunctionSolver to return a text result. If the result is empty (“”, nothing), the highlight() tag is removed, otherwise the result is placed into the highlight() tag.

Added collapse() tag for parents, to indicate if children are intended to be shown or not. This is currently a flag tag, but I’m wondering if there shouldn’t be values to show certain children for special cases. GCA currently supports the tag, but the UI currently does not provide any means to set/unset it.

Added collapseme() tag for parents. This uses TextFunctionSolver to return a text result. If the result is empty (“”, nothing), the collapse() tag is removed, otherwise the result is placed into the collapse() tag. Currently collapse() is a flag tag, but this uses the text functions in case I decide to add special cases later.

* Sheets

My sheets do not yet provide support for any of the new tag features, but I will be including it soon.

* Updater

I discovered that the licensing issue that caused me to have to reinstall all my ComponentOne tools affected the PackageUpdater, which I’d overlooked. I’ve rebuilt it, which should fix the issue. If the Updater crashes when trying to Unzip, you’ll have to update manually because you still have the impacted updater files.

* Basic Set

In the Basic Set file, the Brawling skill has an extra | in itemnotes() after the note for the Kick mode, which results in an unnecessary second Kick mode being added. I haved added a corrected version of Brawling to the GCA5 Changes.GDF file.

* Installer

Because of the way Windows handles permissions for the ProgramData directory, the setup program now alters the permissions for GCA’s specific ProgramData folder during installation.