Package Updates

2022 May 16

GURPS Dungeon Fantasy 3 – Next Level.gdf

Basic Air Move
basevalue() formula changed to include AD:Animal Flight and simplified using OR for various traits with same base values.

GURPS Dungeon Fantasy 5 – Allies.gdf

Giant Eagle
SK:Flight needs() changed AD:Eagle Flight to AD:Animal Flight

Package Updates

2022 May 9

DO NOT install the sheet updates if you are NOT running 5.0.183!

Go to Warehouse 23, go to your Downloads page, download, and run the setup program it contains! That will update your GCA to the newest version and will not affect your personal data. THEN you can install the sheet updates.

If you don’t have 5.0.183, some of your sheets will not load after this update (they will appear to disappear from inside GCA) because these updates require features that the older GCA releases don’t support.

* Official Character Sheet

!!! WARNING: Some of these changes require GCAA 5.0.183. Do not install this update if you haven’t updated GCA to 5.0.183, or the sheet will stop working! !!!

Updated the attack selection criteria so that hidden traits that have Show Hidden for their list type turned On will be valid.

The optional message about including shield DB scores in active defenses changes based on the character option related to including DB in all active defense scores by default.

The attack tables now show the GCA-calculated block score for shields if you have turned on the option to include block score instead of having ‘No’ in the Pry field of the Lvl(Pry) column.

* Spring Bandit Sheet

!!! WARNING: Some of these changes require GCAA 5.0.183. Do not install this update if you haven’t updated GCA to 5.0.183, or the sheet will stop working! !!!

Updated the attack selection criteria so that hidden traits that have Show Hidden for their list type turned On will be valid.

The optional message about including shield DB scores in active defenses changes based on the character option related to including DB in all active defense scores by default.

The attack tables now show the GCA-calculated block score for shields if you have turned on the option to include block score instead of having ‘No’ in the Pry field of the Lvl(Pry) column.

The Active Defenses grid now shows the shield’s block score *if* you’re showing shields from the active loadout.

The Protection grid now shows the Block score for shields in addition to their DB/DR values.

Added options and support for including page numbers in the trait names on the trait lists.

* Color Block Sheet

Updated the attack selection criteria so that hidden traits that have Show Hidden for their list type turned On will be valid.

* Package Updater

If the package for the Package Updater has been updated, then the Updater should now update itself first, before any other packages. Once it’s updated, it will then re-run itself using the newer version.

Package Updater should now support packages that have a required version (or later) of GCA. If the version of GCA that you’re running is not the specified version or higher, then the package won’t be updated. You must update GCA to the specified version (or later) in order to update such packages.

Some minor updates to BBCodeEngine.

Version Released

GURPS Character Assistant has been released. Get the updated installer from your Warehouse 23 downloads page.

This update squashes a few bugs and includes some new features, which you can read about in the build notes below if you like.

Note: You get the updated installer by re-downloading from your Warehouse 23 account, and running the gca5setup_5.0.183.release.exe program that it contains. There is no separate update-only installer, you have to download and reinstall the program. It will not overwrite your personal data, it will overwrite your installation of GCA with the new and updated version.


A bit of a bother (b182)


Added support for shields to calculate the character’s block level (the charblockscore() tag) based on the skill used with it. Charblockscore() is a mode-tag, so it will appear in the Mode editor and is found per-mode for the shield. You can target bonuses specific to it using the ‘blockscore’ target tag. The item must have a db() tag to trigger calculation of charblockscore(), and the shield’s DB value (the chardb() tag) will be included in the final level.

Added support for having your best equipped and ready (applied on an arm arc) shield DB added to all active defenses. I worked it so that you will be able so see bonuses to the Block, Dodge, or Parry attributes from ‘shield DB’ when applicable, since those attribute scores represent the ‘global’ bonus to those defenses. Those attribute scores are then picked up by the more specific trait calculated defense scores. When this option is enabled, the best applicable DB will be used, and that will also override a shield’s DB value in the calculated block level for a shield.

Added options to Default Character Options and Character Options to support the new option for applying DB across all active defenses.

The Protection box in Unified View will now display a line for DB/DR/Block information for shields in the shields list.

Added an option to the Melee Attacks block in Unified View to show a shield’s block score in the Pry field of the Lvl(Pry) column. Since shields usually show ‘No’ for a parry, this option is now On by default, as block seems a more useful value.

* Weapon Calculations

GCA normally calculates ST based requirements in weapons based on Striking ST. However, Striking ST may not exist, which obviously can be a problem. GCA now uses this order to fill the blank: Striking ST, One Arm Striking ST, and finally ST.

If you set damagebasedon(), GCA will use that value even if you pick something that doesn’t exist. Same with minstbasedon() if you set that.

This fix applies to calculating range for muscle-powered weapons, calculating effective ST with the weapon, and calculating the min ST penalties to effective level. It also applies to calculating damage using the damage functions if bonuses are applicable to ‘effectiveST’.

This fix includes the new GCACharacter function ActualStrikingSTAttributeUsed() which returns the name (without prefix-tag) of the attribute that is being used for this purpose in the calculations.

* FastLoad

FastLoad file version updated, fastload files will be rebuilt.

* TagDefs.xml

Updated to include charblockscore.

* GCA5.xsd

Updated to include charblockscore in GCAAttackMode block, and applydbtoactivedefenses in GCACharacter settings.

That’s a bit much (b181)


Added greyscale (mostly black) versions of the trait icons (such as the ‘prerequisites missing’ and ‘defaulted’ icons) to the resources so that they’ll be available to sheets. Each is named like the original resource but with a “_bw” appended to the name.

Added some temporary (not saved) properties to the BodyItem object, to help in using the output of the new GetProtectionBodyGraphic() routine (see below) in the Protection box of Unified View (or other possible places). These are Glow, GlowBorderExtension, GlowBorderColor, and GlowBorderMaxTransparency. Setting Glow to True will cause that item to be drawn with a ‘glow’ around the box (if the item is printed). The others set the size of the glow’s extension beyond the border, the base color of the glow, and the maximum level of transparency (max 255).

I have tried to standardize the default sizes of the location boxes across the Protection dialog and the new drawing routines. This will apply to any box which has not had its size set (usually by the user resizing it). As with all sizes, this will then be adjusted by scaling and a minimum usable size for the font being used.

Fixed an improperly colored border section in the header area of the Encumbrance & Move box.

* GroupedTraitListManager

Had to adjust things slightly to allow TraitTypes.None as a valid ItemType. This allows me to better support things like Transforms which include many different types of traits, by setting the value to None, and not getting the Grouping Options set for Advantages or whatever.

* Protection box (Unified View)

This now uses the same drawing routines as is newly available to sheets in GetProtectionBodyGraphic() (see below). This allows for a display with graphical elements like those in the Protection dialog. This also ensures that the image is more likely to be similar when comparing Unified with a printed sheet (if the sheet uses the new function). Be aware that due to font differences and image scaling, it’s nearly impossible to get an exact match.

Should no longer have an odd little bit of space to the left of the Armor list.

Fixed the Copy to Clipboard option on the gear menu.

Added the “Expand Locations to Fit Values” option to the gear menu. This allows the location boxes to extend downward to fit long values (most likely to occur when using Layering). If this option is turned on, the boxes may grow well beyond the height you may have set, and may obscure other boxes or disappear off of the display area.

Both the new “Expand Locations to Fit Values” option and the existing “Do Not Show Locations of DR 0” option are now plugged into the Plugin Options system, so these settings will now persist across GCA sessions.

* For Plugins

NOTE: The existing GetProtectionPaperDoll() function, currently used by any sheets that include the protection graphic, is ‘defective’ in that it only uses the default body image, not the one set in the current Loadout. It was written that way before the ability to change images was included in loadouts, and unfortunately never updated.

I have now created an alternative to the GetProtectionPaperDoll() function for plugins:

GetProtectionBodyGraphic(Settings As ProtectionBodyImageSettings) As Drawing.Bitmap

This returns a bitmap that starts with the body image set in the loadout, and then has body location graphics that more closely match those used in the Protection dialog. I’ve left the old GetProtectionPaperDoll() routine alone so that any existing sheets will continue to function as they already do.

Because creating the graphic often results in a different size image than the one used in Protection, where you may have adjusted the location boxes, GCA will try to scale the boxes to match the scaled image size, so that the boxes should better approximate the sizes and locations that you see in Protection. However, because fonts and font sizing will be very different between the two, you may see very different versions of what fits inside the boxes. GCA also tries to ensure that each box always has at least a couple lines of space for text (title and DR text), so a larger font may result in taller boxes than you’d expect.

This new function uses new Settings object as well. Here are some of the new properties:

Public Property LoadOut As LoadOut = Nothing

The loadout to use. If left as Nothing, GCA will attempt to set it to the character’s currently active loadout, or All Unassigned Items if none.

Public Property ColorSettings As BoxSettingsTraits = Nothing

The color profile to use when drawing the image. Leave it as Nothing to use GCA settings for Character Equipment. The function uses BorderColor and BackColor for the box; Title colors or Header colors for the header area; Trait colors for the DR text; and AltTrait colors for DB text (if printed).

Public Property AlwaysShowDB As Boolean = False

Set this to TRUE to always include the DB line (if the box will be printed anyway). Otherwise DB is only shown if it has a value. Default is FALSE.

Public Property IncludeStackingMessage As Boolean = True

When TRUE, if the character settings are set to allow stacking of DR or DB values, a text message will be printed at the bottom of the image to this effect. Default is TRUE. This makes the image slightly taller to make room at the bottom for the message without any possibility of interfering with the body image or the shield values inset image. If you are a sheet writer, you are encouraged to check for these values yourself and set this property to False; you can then print a message in the appropriate sheet font without it being unnecessarily scaled by the image scaling done to the graphic when it is printed.

Public Property AllowRedForLayersIssues As Boolean = True

When TRUE, any locations that have stacked layers will be drawn with Red borders and header backgrounds. When FALSE, normal colors are always used.

Public Property AllowRedForStackingIssues As Boolean = True

When TRUE, any locations that have stacked Fortify or Deflect (when not allowed) will have the sidebar drawn in light red. When FALSE, the Alt line shading is used (as with DB lines).

Public Property AllowGrowToFit As Boolean = True

Set to TRUE to allow the location boxes to grow (downward) to fully fit their contents. This may well cause overlaps the user didn’t expect, or boxes to extend off-screen.

Public Property NoSpecialEllipses As Boolean = False

When values don’t fit, GCA prints an ellipses in white-on-gray to make it more obvious that there’s more that didn’t fit. Set this to TRUE to prevent that, and just print the ellipses normally.

This bit (b180)


Added some code to better support prerequisite checking that relies on traits in groups. These prerequisites should now be checked, and the red P set or cleared, more reliably as you add and remove traits from the character.

* GroupedTraitListManager

Updated how GroupedTraitListManager handles GroupingOptions. This is now Nothing before BuildGroupTraits has been called, and after that call it is set to the options that were used to build the grouping, which are either the default character options or those set with OverrideGroupingOptions.

Added the TreatAsList option to GroupingOptions, which allows for treating a selected grouping tag as a list, much like categories are done. This allows for breaking the items within the tag into discrete grouping groups, instead of treating the entire tag value as one group.

* Sheet Options

When using an option of type GCA5Engine.OptionType.Caption, if you begin the UserPrompt with “[bb]” or “[bbcode]” GCA will substitute the BBCode enabled version of the caption control instead of the usual plain text only version. BBCode support is limited and should be documented somewhere (but I don’t think it is right now). Note that the control does have some glitches, so always try to include a space before any [p] marker (I think that avoids the worst annoying little glitch I haven’t fixed yet).

If all you need is the [p] marker and otherwise need plain text, note that the standard caption will now replace [p] with CR+LF. (Also be aware that the BBCode version of the control adds an extra half-line between paragraphs, but the standard caption control does not.)

* GCA5.xsd

Added the ‘treataslist’ element to GCAGroupingOptions

A little bit closer now (b179)


Created a new option type for sheets: ListSelectedOrdered.

* Book Processing

When loading a book file, a line beginning with a # was automatically perceived as a file command. This was a problem because certain #directives could also be the first thing on a line in a file. Now, GCA will check to see if the # starting the line is a directive before trying to process the line as a command.

* Campaign Log

Selected Log Entry Notes. I’ve now changed the Campaign Log so that when you enter the Notes field, the Accept button is turned off, and when you leave the Notes field it’s turned on again. That allows users to use the Enter key as expected within the Notes field without closing the dialog by inadvertently clicking the OK button.

* GroupedTraitListBuilder

The GroupedTraitListBuilder object has been updated:

Public Sub BuildGroupedTraits(Optional ByVal ReplacementList As SortedTraitCollection = Nothing, Optional ByVal OverrideGroupingOptions As TraitListGroupingOptions = Nothing)

This routine now optionally accepts a replacement list of traits as a SortedTraitCollection which allows you to group a collection of traits that are not specifically the character’s trait list.

It also now optionally accepts a replacement set of grouping options, which can override those contained in the character. This allows you to group a list differently than the user has specified and is intended primarily for when using the ReplacementList. Note that you must specify all applicable options here; no options are copied internally from the character settings, so if you want all the same options except for one change, you must still set them all yourself.

Transforms transformed a bit (b178)


Removed another redundant gathering of unassigned items in the character calculations, and set that to use the already gathered unassigned items loadout instead.

Added a MessageBox instead of just a message in the log when GCA is unable to print or export due to no sheets being found.

Added a MessageBox when no sheet plugins (or no plugins at all) were found during startup.

Added the #Log data file command, which allows the author to send a message to the Logging pane. Syntax is #log [<color>] <message> where the <message> can be enclosed in quotes and <color> is optional from red, blue, green, or orange (not specified is black).

* Transforms

I realized that the same oversight that was recently fixed in loadouts that caused child items to be counted twice when part of All Unassigned Items also applied to Transforms. I fixed that. (This had no real effect on much of anything, since it doesn’t affect encumbrance or any other such mechanic.)

Also as with loadouts previously, I’ve removed the check that prevented empty transforms from being saved. If you want to create transforms with no traits in them, you now can.

Transforms have been updated to support including Features, Cultural Familiarites, Languages, Skills, and Spells. This should greatly increase the ease of creating ad-hoc ‘templates’ to switch between, and supports more types of characters. (Attributes can’t be deactivated, so the best you can do for those is a trait that applies modifiers to the attribute that is itself active or not.)

The change in supported traits that are available to Transforms greatly increases the number and type of traits in the Transforms dialog trait grid. In support of that, I’ve added a new first column that displayes the type of each of the included traits, and Skill and Spell names will be shown with their levels appended using “-XX” where XX is their level.


Package Updates

2022 April 8

GURPS Low Tech 4e.gdf

<Humanoid Expanded> changed to <Humanoid Expanded – Low Tech>
name(Front Groin)
name(Back Groin)
Updated to include ‘Torso, Abdomen’ in each group():

<Humanoid – Low Tech>
name(Chest), group(All, Skin, Full Suit, Body, Torso, Chest)
name(Abdomen), group(All, Skin, Full Suit, Body, Torso, Abdomen)
name(Groin), group(All, Skin, Full Suit, Body, Torso, Abdomen, Groin), display(-1), expanded(-1), posx(393), posy(449)
Added this additional version of the basic Humanoid body that supports the changed coverage of chest, abdomen, and groin.

I sometimes wonder how some bits are missed (b177)

b177 (b176 was used only for the last Release Version.)

Modified the output of the character’s QuickRulesOptionsCode() a bit: it now defaults to separating the pieces with commas; the dice+adds code is now ‘d+a’; the allows stacking for Deflect and Fortify codes now spell those out; added ‘-deffrom’ for when default level discounts are turned off; now outputs ‘n/a’ when no codes apply.

On the main window’s Traits menu the “Bonus Granting” option was changed to “Active/Inactive” to match right-click menus. I also added the “Loadout” options that were missing.

Changed how Options sizes the options panels, in an attempt to fix an issue with Windows 11 when high DPI scaling is turned off.

Added an error trap to the code when export sheets are run, to catch run-time errors in the export sheets.

The independent routine that returns the weight of all unassigned items wasn’t properly updated when the routine that returns all unassigned items was, so it was still double counting unassigned items that are chilren when totalling weights.

Since characters were changed some time ago to always recalculate the virtual ‘all unassigned items’ loadout (because that’s used as the default for various things), I have now changed the calculation code in the character to use the weight of that loadout for the character’s current load weight when using the unassigned items loadout. It was previously using the routine that just calculated the weight of all unassigned items separately, which is an unnecessary and redundant call in this situation, since we already know that value.

Character equipment lists now use an adjusted DisplayName that includes modifiers, as the various other traits do. This means you should now see the applied modifiers listed (in ‘short name, cost’ format) with the item. This will automatically flow through all lists and character sheets that use DisplayName when displaying the lists (all of my sheets use DisplayName). This *does not* apply to Attack Tables.

The Sheet Options dialog will now cap the sizing of the options blocks to prevent them from getting unreadably wide or unusably narrow.

The Sheet View toolbar should no longer be obscuring part of the Sheet View area.

* Campaign Settings

Campaign Settings should now honor Tablet Mode.

I’ve made some changes when initializing Campaign Settings to try to help adjust for issues with the sizing of the boxes in Windows 11 when high DPI scaling is turned off.

Campaign Settings has been changed to be a sizable window. This should help with better fitting everything as the user would like when the window is scaled in size.

Because of the change to a sizeable window, I’ve adjusted where the errors list appears when there are issues. This now appears inside the content area, under the panel displaying the info boxes. This will resize that flow panel, so when the errors list appears, the boxes may be re-flowed.

I’ve adjusted the checkboxes to help with accessibility. I’ve also left-aligned the various labels to fit in with the checbox change.