Monthly Archives: August 2021

A bit of an event (b155)


Character event handlers were being set in a routine that worked fine for a single character load, but only worked for the last one loaded when loading them in a batch, such as a party load or multiple characters selected in Open. These handlers are now assigned in the routine that handles the post-load processing in the main UI form, where they should have been all along.

There is now a Favorite button on the Sheet View toolbar which allows you to set the current sheet profile as your favorite for the current character, which sets it as the default print sheet without having to go into Options to do that.

I have finally added the settings to format equipment costs and weights to the Options dialog.

I have once again gone through and converted a lot of implicit type conversions to explicit ones. In some cases, this may have unexpected consequences if I did things slightly differently than the implicit conversion did.

I shoehorned in a new version of a sheet option, which is a caption that supports displaying an image. This is currently handled automatically by GCA when you include an “[image]” code as the very first text in the UserPrompt of a Caption control. That triggers GCA to use the new image caption instead of the standard one. You can currently only align the image to the top or the left, and you do that within the [image] marker, such as [image align=top] or [image align=left]. The image is limited to 150px tall when at the top, and 250px wide when on the left, and will zoom inside the picture area to fit those limits. When on the left, the image is allowed a maximum scaled height of 300 px, and will scale down the allowed width if necessary to meet that cap. (As a side-effect of this being a new control, it makes use of my BBCode label, so the caption also supports limited bbcode, such as [b][/b] for bold and [i][/i] for italic.)

Reverted the change in b151 where UnassignedItemsAsLoadout() would return the loadout as fully functional. That wasn’t actually fully correct, and making it so was overkill for the primary purpose of UnassignedItemsAsLoadout(), which is just to see what items are not included elsewhere. The procedure that does do this is now a new function called UnassignedItemsAsLoadoutWithProtection(), which creates a complete loadout with the default body and hit table and fully calculated protection values.

I fixed some design issues with the Attack Modes box in Unified. It should refresh and update much more smoothly now. I also added an option to show/not show the symbol icons for the traits in the box.

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

Included an adjustment to fully activate and calculate the protection values of an All Unassigned Items loadout when we want to actually print those protection values.

A bit of regional concern (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)

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)


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


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”


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

Preset bits (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.