Category Archives: Build Notes

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

Bits selected and directed (b161)

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)

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.

Fix flag bits? (b158)

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.

* GCA5.XSD

Added element ‘flagoverspentskills’ to GCACharacter settings block.

Flag fix bit (b157)

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).

A hodgepodge of bits and templates (b156)

b156

The image caption sheet option that I kludged together last build is now a bit smarter in sizing the image, allows larger images, and now supports aligning left, top, right, or bottom.

The Sheet Options dialog will now open with the currently active sheet profile’s options selected and loaded.

More type conversions.

The expanded $if() function had a bug if you used ‘elseif’. Fixed it.

Added some error traps for some more situations with template command handling.

Adds() and Creates() should be slightly less stupid now about empty items as a result of extra commas.

I’ve added the addsorincreases() tag for templates. It works somewhat like adds() or sets(), but actually looks first for the trait on the character, and if found, *increases* it by the set value; if not found, GCA tries to add the trait to the character at the given value like adds(). This has aliases: addorincrease(), addsorsets(), and addorset() because I couldn’t settle on the name. This works inside triggers() or is processed in the standard tag list after adds(). NOTE: Given that known attributes always exist, you’d use this with attributes as ‘increase by this amount’, so to add 1 to ST you’d use ST:ST=1.

Added the message() tag, which works like the #Message directive, but in a tag. Works in triggers() or is processed in the standard tag list last, just before cleaning up directives, before item calculations begin on newly created items. This is primarily meant for use in triggers() since it can only handle a single message, but it works if you just need one at the end.

Added the new directive #BuildLibraryItemList. This works exactly the same as the #BuildCharItemList, except it operates on the character’s Library items to select from to build the list. Bear in mind that nothing you tag to character items will be the same in the Library items: that’s just book data as loaded from the files. (I keep thinking that I already added this directive years ago, and keep finding that it’s not there, so now it definitely is.)

Addressed some issues with the money fields in the Campaign Log dialog.

* SelectX()/Select()

Random selections in Select dialogs for templates were not working correctly if Refuse Dupes was turned off for the item types in question. That has now been fixed.

Fixed an icon in Select dialogs to match the explainer.

The special case variables for previous SelectX() selections are now used in a few more places, so you can now use them in the conditional() and text() tags.

You can now use recommended() as one of the tags of the SelectX() to recommend traits to the user. This should specify one or more traits in a list, with prefixes, and enclosed in quotes or braces when necessary. If any of the traits specified here are found in the library trait list provided to the user, then they will be marked with a ‘favorites’ gold star on the right side of the listing, indicating their recommended status.

The colors on the dialog should be fixed now.

* Plugins

I changed the names of a bunch of routines in GCACharacter related to directives, in order to make them more consistent across functions. These were all routines that nobody but me is likely to use, but they are Public, so the change may affect the profile of the interface, which may make compiled plugins no longer compatible. As a result, you may need to change your Reference to GCA5Engine to this new version in order to get your plugin to compile.

* Data Files (Released 2021 September 19)

Dungeon Fantasy RPG.gdf: All cases of ‘Shield Wall Training’ changed to ‘Shield-Wall Training’

* Data Files (Released 2021 September 15)

Dungeon Fantasy RPG.gdf: All cases of ‘Armoury’ changed to ‘Armory’

* Data Files (Released 2021 September 2)

GURPS Action 1 – Heroes.gdf: Updated the Assassin, Medic, Wheel Man, and Wire Rat templates.
GURPS Basic Set 4th Ed.–Characters.gdf: Just added units() to Basic Lift.
GURPS Ultra-Tech 4e.gdf: Fixed the Encoding=UTF-8 at the top of the file and fixed the Android (Ultra-Tech) template.

A bit of regional concern (b154)

b154

When calculating the weight capacity for items, if weightcapacityunits() is not specified, it now defaults to the item’s units() instead of ‘lb’.

* Region & Culture Issues

One of the Beta Preview testers found what looks like an insidious issue related to regional settings, but one not dependent upon the decimal separator, which so many of our regional settings issues have been related to in the past.

I have now tracked this down to one of the library routines, IsNumeric(), that I use initially in the Solver to ensure that we simply return a numeric value as the result, without having to take any additional steps. IsNumeric() doesn’t work “properly” in some regions; that is, it decides something isn’t numeric based on regional settings but doesn’t seem to take into account the decimal and thousands separators individually.

I have two options: 1) write my own IsNumeric(); 2) apply a culture to GCA so that it always runs with the decimal point as a period and using commas for thousands separators.

Option (2) is the route I’ve taken, since I already basically require that to be the case. I’ve currently set it to keep the user’s default culture settings, and only force the issue with the separators. This means that other settings, such as date formats, will stay consistent for the user.

* Official Character Sheet (posted via Updater on 2021 August 8)

Added support for languages using levelnames() with | separators for split spoken|written levelnames.

Cleaned up language display to not include the level in the language name, since there’s a whole column for the level already.

* GURPS Basic Set 4th Ed.–Characters.gdf (posted via Updater on 2021 August 8)

[LANGUAGES]
Language – using literacy levels, 2/4
Language – Native – using literacy levels, 2/4
Added both of these to include support for languages using levelnames() with | separators for split spoken|written levelnames.
This was due to some users not liking the fact that written languages used literacy levels, but the full languages used the broken and accented terms.

A bit of weight (b153)

b153

* Weight

GCA will now attempt to automatically convert equipment weights to or from metric. This uses the units() tag to try and determine if the current item is metric, and if the character is set to metric (the Metric attribute score is 1). If there is no units() tag, it’s assumed to be ‘lb’. If the item’s units don’t match the character setting, GCA will try to convert the weight to the preferred units. (Default conversion is done using the standard GURPS conversions, which are not precise. If you want better precision for metric values use Metric versions of the data files.)

The units() tag may specify two different units separated by a |, with standard units first and metric second, such as units(kg|lb). If this is the case for an equipment item (and I’m not aware of any that do this), then GCA will not try to convert that item, since specifying both types of units already suggests that the item is aware of metric support and handling it automatically.

Notes:

1) Setting the character to metric will always affect some labels in some portions of the program (such as loadout weight labels), or on some sheets, even if the values may not be correctly calculated as metric due to the data not actually being written for metric;

2) GCA won’t auto-recalculate when you change the Metric attribute, so you must do a Recalc All to see the changes.

GCA will also try to convert weight capacity if an item has it. This requires the new weightcapacityunits() tag, and if that doesn’t exist, it is assumed to be ‘lb’.

GCA now adds/manages the charweightcapacity() tag for items that have a weightcapacity(). This is the same as the weightcapacity(), unless GCA is converting weights due a difference in the Metric setting and provided units, in which case it will be the converted value. GCA likewise manages the new charweightcapacityunits() tag, which should be the units the capacity is measured in, and will be the same as any weightcapacityunits() tag unless conversion is performed.

GCA will not attempt to convert weight capacity if it is not already converting weight.

* Miscellaneous

Updated drawing code for capacity gauges to use charweightcapacity().

Fixed an error in drawing the capacity gauges that would cause them to disappear when items were over capacity, instead of turning them red.

Character lists in Unified and Classic should now use the charunits() tag for labeling the units where applicable for weights.

These tags were specified in the GCA5.XSD as being saved in the ‘ref’ section of GCATrait, but GCA was not saving them there until now: “weightcapacity”, “weightcapacitylevel”, “overweightcapacity”, “overweightcapacityby”, “countcapacity”, “countcapacitylevel”, “overcountcapacity”, “overcountcapacityby”

* GCA5.XSD

These tags have been added to the ‘ref’ section of GCATrait: “charunits”, “weightcapacityunits”, “charweightcapacity”, “charweightcapacityunits”

Preset bits (b152)

b152

When modifiers are created from book data, having a group() tag in the modifier’s tag data was overriding the assignment of the group based on the subhead. When the group() tag was incorrect, this created a problem. Now, the subhead is always used to assign the group(). If Verbose logging is enabled while loading books, GCA will log a complaint when this happens.

It should now be possible to drag-and-drop an image onto the Protection dialog to set the body image for the current loadout.

Made a small change in the version testing of book files so that GCA now assumes an unreadable or non-existent version specification in a data file means that the file is older than the program version, instead of newer.

* Sheet Options – Presets

Sheet Options now supports preset options that can be set from a new Available Presets button. This button will appear only if preset options are found for the current sheet.

Sheet authors can include preset options by including saved profiles in a file called ‘presets.prefs’ in their plugin folder. GCA will check for that file when the user changes sheets in the Sheet Options dialog and gather up all the profiles in that file that are for the selected sheet.

When the user clicks the Available Presets button, they’ll get a dialog showing the available presets. If they select one, those settings will then be imported into the currently active profile.

The sheet plugin will be asked to upgrade options before the import, same as when the user uses the Import feature.

* Sheet Options – Checkboxes

Those sheet options that display a list of checkboxes for the user to check now have buttons to check all the boxes or to clear all the boxes.

* Data Files (posted via Updater on 2021 August 1)

GURPS Magic 4e.gdf updated modifiers for “One College Only (%College%)” and “One College Only (%College%)” to remove the group() tags.

* Official Character Sheet (posted via Updater on 2021 July 28)

You can now specify the image to use in the GURPS logo slot (upper left corner) of the sheet. You should be able to use most PNG, JPG, or BMP images. Note that the image will be sized to fit a space of 1.75 x 0.5625 (1 3/4 x 9/16) inches on the front, and a slightly smaller 1.625 x 0.5 (1 5/8 x 1/2) inches on the back. If your image isn’t exactly the right dimensions, it will be aligned to the top of the space, centered horizontally.

Added an option to include Extra Roll info in the trait lists, selected by list type. This is now Yes for all lists by default. This includes Roll To: text as a smaller-text additional line under the trait item, similar to how bonuses or notes are printed.

Added an option to include the Bonus and/or Conditional bonus text for traits, selected by list type. These are now Yes for all lists by default. The sheet was already printing these, but now you can turn that off.

Added an optional Encumbrance, Move, Dodge table to use in place of the default one. This alternate table is of the same design as the Encumbrance & Move box used on the Unified and Classic views, so it will show the movement rates for whatever active movement modes the character has. This option is No by default.

Smoothed out some issues with the printing of the Block values on the front page when using shields from the active loadout.

Now, for traits, only the bonus/conditional text is printed in the user-specified bonus text color. Description and extra roll text is printed in the sheet color, while user note text is printed in the user text color.

Added an option to print DR by hit location in the DR box. It will increase the size of the box by stealing space from Languages above and TL/Cultural Familiarities to the right, but the text will still be small. This is No by default.

The Feats of Strength box now includes labels for the weight and distance units.

Nothing but sheet bits

* Official Character Sheet

You can now specify the image to use in the GURPS logo slot (upper left corner) of the sheet. You should be able to use most PNG, JPG, or BMP images. Note that the image will be sized to fit a space of 1.75 x 0.5625 (1 3/4 x 9/16) inches on the front, and a slightly smaller 1.625 x 0.5 (1 5/8 x 1/2) inches on the back. If your image isn’t exactly the right dimensions, it will be aligned to the top of the space, centered horizontally.

Added an option to include Extra Roll info in the trait lists, selected by list type. This is now Yes for all lists by default. This includes Roll To: text as a smaller-text additional line under the trait item, similar to how bonuses or notes are printed.

Added an option to include the Bonus and/or Conditional bonus text for traits, selected by list type. These are now Yes for all lists by default. The sheet was already printing these, but now you can turn that off.

Added an optional Encumbrance, Move, Dodge table to use in place of the default one. This alternate table is of the same design as the Encumbrance & Move box used on the Unified and Classic views, so it will show the movement rates for whatever active movement modes the character has. This option is No by default.

Smoothed out some issues with the printing of the Block values on the front page when using shields from the active loadout.

Now, for traits, only the bonus/conditional text is printed in the user-specified bonus text color. Description and extra roll text is printed in the sheet color, while user note text is printed in the user text color.

Added an option to print DR by hit location in the DR box. It will increase the size of the box by stealing space from Languages above and TL/Cultural Familiarities to the right, but the text will still be small. This is No by default.

The Feats of Strength box now includes labels for the weight and distance units.

A bit more sheet (b151)

b151

Equipment lists in Unified and Classic always showed ‘lbs’ for equipment weights, even when the user had toggled the Metric stat. That is now fixed.

Added a missing word to the Protection Options explainer in the Protection dialog.

The UnassignedItemsAsLoadout() routine in the LoadOutManager didn’t return the All Unassigned Items loadout as a fully functional, ready to use loadout. Now it does.

* Official Character Sheet

Added an option to show a column for min ST on the Hand Weapons table. This is set to Yes by default and the column is labeled “ST”.

Added an option to include a Level and Parry score, instead of the Parry Adjustment, to the Hand Weapons table. This is now Yes by default, and the column is labeled “Lvl (Pry)”.

Added an option to include a Level column on the Ranged Weapons table. This is now Yes by default, and the column is labeled “Lvl”.

Added an option to have the “Lvl” and “Lvl (Pry)” columns printed as the first column after the name of the weapon. This is Yes by default.

Added options to highlight the new “Lvl” and “Lvl (Pry)” columns with a different background color and to set the desired color for the column. The default color is light sky blue but the default is to not highlight the columns.

Added an option to have shields in the Weapon tables print their Block score in the “(Pry)” slot instead of the usual ‘No’ for “(Pry)” since they block instead.

Added an option for the sheet to get the active shield (or two) from the current loadout, get the block score from that, and print that as the Block value on the first page. This is now the default behavior. Also added an option to print a diagram of the coverage arc for that shield next to the block value, which is also the default behavior.

Added an option to include a reminder message about adding DB to active defenses, which will appear under the Encumbrance/Move/Dodge and Parry/Block sections. This option is No by default.