Category Archives: Build Notes

Excerpts from the change log and other notes related to new builds.

Combinatobits (b166)


The Combination Editor in the Edit Traits dialog for a combination had some broken colors. That has been fixed.

A logic error in the Combination Editor caused all skills after the first targeted attack found to appear to also be targeted attacks. That has been fixed.

* Fencing Weapons

When I added support for the fencingweapon(char::enclevel) tag, I didn’t fully consider the actual application as it would work for weapons that can be used with either a fencing skill (where the penalty applies) or a non-fencing skill (where the penalty does not apply).

I have updated the code to be a bit smarter based on the mode data. If a weapon has an F flag in the parry() for a mode, indicating that it is used as a fencing weapon, GCA will create the fencingweapon() tag if it doesn’t exist and update the trait links (so that changing encumbrance will cause the mode to get updated). If the tag already exists, GCA won’t bother with that bit.

Now, when calculating modes, the fencing penalty will only apply to those modes where the parry() has the F flag.

* TagDefs.XML

Updated the entry for the ‘fencingweapon’ tag to reflect actual usage.

* Data Files (Released 2022 January 4)

Dungeon Fantasy RPG.gdf: Bug fixes.

Bits of imprecision (b165)


Stupid bug fixed. Back when the BasicDamageList was changed to use List rather than Collection, the Solver’s routines for @baseswdice() and @basethdice() were not updated to account for the shift in base from 1 to 0, so GCA crashed when the given ST exceeded the last entry in the BasicDamage data (100).

Added some accessibility alt-text to the Campaign Settings dialog.

An issue related to double precision values when checking for fractional results during the calculating of modifiers has resulted in some edge cases incorrectly pushing a result to the next higher integer, when that’s clearly the wrong result (example: Level 5 Magery = 50 points, +10% modifer = 55 points; but GCA was showing 56 points). I’ve changed how the intermediate tier results are finished (rounding to 4 decimal places), which I think should compensate for the floating point precision issue.

Added a tag for equipment items to allow for changing the number of decimals kept during calculation of modifiers, allowing items to override the normal 2 digits kept for equipment. Because of other issues in modifier calculation, 4 decimal places is still the max, but you can specify a value from 0 (the default is 2 places) to 4. This may help in certain cases. The tag is decimalplaces(<num>) where <num> is an integer value from 0 to 4. (I may decide to add a GCA option for this in the future.)

* Data Files (Released 2021 December 30)

Dungeon Fantasy RPG.gdf: More updates, edits, and consolidations of weapons.

* Data Files (Released 2021 December 19)

GURPS Basic Set 4th Ed.–Characters.gdf, GURPS Martial Arts 4e.gdf, and GURPS Power-Ups 2 Perks 4e.gdf have all had some 0-point traits moved into the Features section.

Dungeon Fantasy RPG.gdf: Various updates, edits, and consolidations of weapons.

Used bits of uses (b164)


When randomly making selections from a ChoiceList dialog, GCA should no longer select an item that appears to be empty.

Swapped Languages and Cultures/Cultural Familiarities in the order they’re displayed on the Points Bar and in the Classic View tabs.

When deleting a trait, it should now be removed properly from all Transforms as well.

Due to some convolutions in how Body objects are used and assigned, the Default Body that a GCA Character maintains was only being recalculated and refreshed when the Protection window was accessed. Within GCA, this didn’t matter much because they’re always accessed through a Loadout, but it is an issue when reading the save file, or when trying to access the default body in a sheet. So, GCA now assigns that default body directly to the All Unassigned Items loadout when recalculating the character, which was how it should have worked, and which should now fix the issue.

* Uses

The mode tags uses() and uses_sections() are now able to specify more complex math (if desired) by forcing the use of the Solver. If desired, just begin the text of the uses() or uses_sections() tags with an ‘=’ sign, such as ‘=me::score*2’. Note: Don’t mix ‘count’ and ‘=’ because the simple replacement method of ‘count’ with a value may conflict with the Solver’s ability to find trait references if ‘count’ was incorrectly replaced with a value inside of such a reference.

Messed about a bit with how used uses are tracked/handled, so that switching between tracking by section and not tracking by section is less likely to discard used uses.

Changed how the uses controls are initialized, so the program can set a larger box size automatically if using the largest zoom. (This can still be overridden by the settings for a particular uses() control.)

The boxes are now specifically drawn, instead of using a checked or unchecked image. The tick-mark image is then placed on the box afterward for used uses.

There are now a small number of built-in ‘styles’ of checkboxes, which can be specified for use in the new altbox() tag within the uses_settings() tag. The default style name is ‘black’, and there are also ‘red’, ‘orange’, ‘yellow’, ‘gold’, ‘magenta’, ‘green’, and ‘blue’ styles. Each of these styles specifies the color of the box, the interior of the box, the tick used to check the box, and a couple other bits. Right now, I’ve defined all that with these default built-ins, but some day it should be customizable somewhere.

The altbox() tag allows you to specify the box style, and with which box number that style begins. Styles apply starting at the specified box and continuing on from there until either the boxes end or another is defined. For example, altbox(green, 10, red, 20) would start with the default boxes until box 10, where they change to green, and stay green until box 20, where they become red. Note that some of these colors are kind of hard to differentiate, especially on a white background.

* Official Character Sheet (Released 2021 December 4)

The displayed block scores for shields were not always correct, because they didn’t include any block bonuses. I fixed the sheet to refer to the skill used, and get the block level from that, instead of what was being done.

* Data Files (Released 2021 November 13)

Dungeon Fantasy RPG: Removed the Equipment section, which was from GURPS DF, and rebuilt a new one with the boxed set info. Integrated Emily’s DFRPG Equipment file, which I believe had all the weapon and armor stuff. Changed all page refs throughout to DFRPG:Axxx. I didn’t understand Scrolls, so that’s the old versions. Still missing Other Items from the Magic Items section, and enchantments for Magic Weapons and Armor.

* bookcodes.xml (Released 2021 November 13)

Updated with DFRPG:A for Dungeon Fantasy RPG: Adventurers.

* Official Character Sheet (Released 2021 November 6)

Restored the missing Basic Speed and Move to the top-left attributes block.

* Official Character Sheet (Released 2021 October 31)

The Points Summary was not including the costs of Languages or Cultural Familiarities. Now it is.

* Official Character Sheet (Released 2021 October 28)

When languages don’t come in levels (such as in Dungeon Fantasy RPG) the sheet now just displays a checkmark in the Spoken or Written column as appropriate.

Fixed a button that read ‘Packages’ instead of ‘Templates’.

Fixed an issue with the attributes button on the optional Additional Attributes block that could throw an exception when that block is selected (even if it doesn’t get displayed).

There is now an option to print the character portrait on page 1. If you activate this option, then the portrait is printed in the top right corner of page 1, under the general info, in the area where languages, DR, TL, cultural familiarities, active defenses, and reaction modifiers usually get printed. Those items will be bumped to page 2 where the Character Notes usually gets printed, unless there isn’t enough room there (or it was sacrificed for the weapon blocks), in which case they bump to the start of the overflow pages. If you don’t have a character portrait, the space for it is left blank, and the other items are still bumped.

Barely bits (b163)


In Sheet Options, when the options are contained within option boxes, doing a Reset To Defaults would wipe out all the box titles. That is now fixed.

Fixed a rogue indent pusher that was causing some status messages to end up displaying as if they had blank lines ahead of them.

Two bits (b162)


Adjusted the way chosen attributes, skills, and spells are displayed in a MultiType Select() dialog (that is, when more than one type of trait may be chosen in the same selection dialog, such as selecting between various Attributes and Skills). This change should now allow for displaying the current score or skill level with the name of the trait in the Character list, instead of that information not being available when in a mixed selection dialog.

I’ve added a right-click menu to the Edit Modes grid. This should help smooth out copying and pasting entire modes since it’s easy to forget the shortcut keys for that. I’ve also added the option to duplicate the currently selected mode.

Bits selected and directed (b161)


Fixed a bug in addsorincreases() handling that would stop handling the list of items upon finding one that wasn’t an actual trait (such as an empty slot caused by an extra comma), instead of just moving on to the next item, which is what it does now.

Fixed a bug in #BuildLibraryItemList.

I’ve created a couple new objects and a couple functions to consolidate/replace the handling of the standard trait selection by tag syntax ( where [ is | isnot | includes | excludes | listincludes | listexcludes ] ). I am now using this new code to handle the selecting of character or library traits from #BuildSelectList, #BuildCharItemList, and #BuildLibraryItemList. This consolidation allows for cleaner code in routines using the syntax and allows for updating the code in a single place when changes or upgrades my be needed. I’ll update any other places that may use the syntax as needed in the future.

I disabled what should be a redundant call to recalculate character values when checking a character tag. I think things are already robust enough to not have any calculation issues as a result, but having that call there left the door open to stack overflows when trying to get the value for a character tag (which triggered calculation of the character tags, which triggered calculation of traits that referenced character tags, and so on forever).

* SelectX()/Select()

Added some support for using attributes in a Select. You can use the %score variable in #codes() for list items that are attributes to reflect the current score of the trait. If you’re limiting upto and/or downto, you’ll have to be explicit about the downto having a floor of the current %score, otherwise GCA will allow lowering the attribute below the pre-existing score (if the trait itself allows that). So, to allow a score to be increased one level only, you’d use #codes(upto %score+1, downto %score). You can *not* currently limit attributes by points using #codes().

* Package Updater (Now v.1.0.4)

Reading font values from the instructions file now caps the font size to 0 on the small end ( < 8.25; zero means no scaling is performed) or 24 on the large end (> 24).

Surprise regional bit (b160)


* Region & Culture Issues

When GCA5 was ‘fixed’ to always use decimal points and thousands separators in the US fashion (periods as decimal points and commas as thousands separators) back in b154, I suspected that some oddities may pop up somewhere. One popped up in an unexpected place, which was the interaction between GCA and the Updater system. The PackageUpdater wasn’t adjusted in the same way, so the one numeric value it cared about, font size (to support zoom modes), was being affected in an unexpected way, which made the font size jump into the hundreds or thousands. That’s huge, and mostly made the Updater window appear to be empty.

I have adjusted the reading and writing of the instructions file to write the fontsize as an integer (font size * 100) which is then read in and converted back to a single (read value / 100). That should fix this miscommunication and make sure that zooming can still be honored.

* Package Updater (Now v.1.0.3)

Updated as mentioned above.

Smarter bits (b159)


GCA should be a little smarter about handling situations with portraits when the portrait is embedded in the character file and may not actually exist as a file on the disk. Notably, the Portrait window should no longer clear the portrait in such situations, and now has an expanded warning about it.

I think I have made gains bonuses slightly smarter without breaking anything.

I’ve added ‘level’ and ‘score’ to the tags that GCACharacter.TagItem() will return a value for, and in this case that value is always 1.

Traits that may reference campaign log values through char:: should now be updated more reliably.

Attack boxes weren’t drawing the Selected color with preference over the Dirty color. That is fixed.

I’ve added the Dirty color to those a user can set for the various trait types. The default is the same orange it has been, but with a darker orange border (which is usually hard to see, but helps when a lot of dirty traits are displayed in a block) and black text. This should always have been something that could be set because the defaults may not agree with some folks or with their preferred color scheme. This is most helpful when using colors that are obviously different from the standard ones. (If you aren’t aware, ‘dirty’ is when a trait has just changed, and this allows you to see traits that are affected by another trait you just changed. It’s not perfect, but it can be helpful.You can turn this feature on/off using the “Show Dirty” button (the lightning-bolt with magnifying glass icon) on the toolbar, next to the Components check button.)

Trait boxes in Unified now have a new option in their gear menu: Double-Click Opens Trait Dialog. This is *off* by default, because this is non-standard behavior. Also, since each trait box is a separate instance, if you want to turn this on, you’ll have to turn it on separately per-box. When this option is on, double-clicking the gear button will open the associated trait dialog for the traits in the box. Note that the pop-up menu will still appear for the click on the button, but will disappear after the double-click finishes.

The Campaign Log window should now be a bit smarter in how it adjusts to being zoomed, and in how it adjusts the splitter when being resized.

* Official Character Sheet

Updated to use the character portrait image from within the character, rather than loading it from the file reference. (This allows it to work with portrait images that might be saved in the character file but otherwise not found on the disk.)

* Data Files

GURPS Basic Set 4th Ed.–Characters.gdf: Modified Innate Attack (%TypeList%) and Burning Attack advantages to change “bu” to “burn” for damage types.

GURPS Magic 4e.gdf: Modified several ~Flaming and ~Lightning modifiers in to change “bu” to “burn” for damage types.

Discworld RPG.gdf: Modified several Burning Attack advantages to change “bu” to “burn” for damage types.

Fix flag bits? (b158)


New characters, those just created that have NOT been loaded from a save file, were not getting their event handlers set correctly. This prevented a variety of things from working correctly, include #ChoiceList. That is now fixed.

I found that I had some code in skill level calculations related to upto() that didn’t seem to make any sense. It was applying Level limits even if only a Point limit had been set. I removed the apparently erroneous code.

At some point, the code that checked whether a trait was being mitigated, and therefore whether taboos should be checked, became broken, so that traits that *were not* being mitigated were no longer being checked for taboos at all during normal operation.

Adjusted Select windows so that the ‘green flag’ overspent points icon will display next to, not on top of, the pin icon for ‘your character has this already’.

The character sheet should now get correctly updated after you close the Protection dialog after changing Block or Parry.

The Campaign Log window’s minimum size has been increased slightly. In addition, there is now an active splitter bar between the two halves of the window, so you can size things more to your preference. Each half has a minimum size, so at the smallest window size there is very little wiggle room, but there’s a lot to work with at larger sizes.

* Green Flags

Fixed the ‘green flags on default’ issue with a super simple check of a value I shouldn’t have left out but did, damnit.

This new setting should now actually be saved/loaded with the character.


Added element ‘flagoverspentskills’ to GCACharacter settings block.

Flag fix bit (b157)


As a result of the info text in the System Colors dialog not sizing correctly for larger zoom levels, I noticed an issue in the control, so I have implemented a change to the sizing code for that version of auto-sizing label. This should help ensure it sizes correctly, but if not, it may result in labels that are taller than they need to be. I haven’t seen this happen yet, but there are a lot of dialogs in GCA that may size differently based on system settings and GCA zoom settings. I suppose if that’s the case, taller is better than shorter.

GCA will now flag a skill that has more points invested than necessary for its current level. Hopefully this will help you to return to skills where extra points have been invested for additional study or training. Such skills are marked with a green flag icon on the right side of the trait list. If you don’t like this, you can turn this off in Options.

* FastLoad

I updated the FastLoad version, so unfortunately all FastLoads have to be rebuilt.

* Official Character Sheet (posted via Updater on 2021 September 20)

Included a background page for the character portrait and the description and notes stuff, plus some options to turn bits on and off. All of it is included by default (if present on the character).