Category Archives: Build Notes

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

Signifibits

* $If() should now support ElseIf blocks.

* Updated verbose data file logging a bit.

* Select()/SelectX() handling will now support use of mixedtype(yes) as synonym for multitype(yes).

* GCA will now reject #newitem() command in Select()/SelectX() that don’t include proper prefix tags.

* Triggers() processing of the various sub-tags now supports initial $function processing of each tag’s contents. This means, for example, that you could use an $if() function to dynamically allow for different possible versions of the same tag, based on other values.

* Triggers() processing of the various sub-tags now supports #BuildSelectList processing of each tag’s contents. In most cases, #BuildSelectList isn’t necessary, or even makes no sense at all. However, it does allow for one way of dynamically changing the intended content of trigger tags based on previous activity in the triggers() tag sequence.

* Added an option to the View > Zoom menu that makes the toolbar icons jumbo sized to better support touch screens. If this looks promising, I’ll expand it out to jumbo-sizing other features as well.

* In support of the jumbo icons, I’ve been moving most toolbar and button icons to the newer image sets that I have, which support larger sizes and alpha channels. Unfortunately, I don’t have the exact same icons in some cases, so some images will look different from what they have been. And I don’t have a 48×48 shield icon at all, so it’s going to look blocky compared to the other icons.

* Added and improved some stuff on the Protection window.

* Traits may now have the location() tag targeted. GCA will currently only create a charlocation() tag if there are bonuses being applied to location(). However, this does allow us to make the Partial: Location modifiers for Damage Resistance more functional, because now their gives could be changed to something like this one for Partial: Arms:

gives(=-Owner::Level to DR, =+owner::level to owner::dr, =arms+nobase to owner::location$)

which will allow GCA to correctly apply the location-specific DR to the correct locations on the paper doll, and will allow the Protection window to display these limited forms in the From Other Sources listing.

* GCA will no longer automatically upscale the Body part coordinates when reading them from data files.

* GCA will now save/load the body part info for the Body corresponding to the “All unassigned items” locations.

* GCA now supports assigning custom images for body types. You can set these in the data files using the [BodyImages] block, where each section in the block corresponds to a body type, and each line in each section corresponds to an image file to use for the body type. GCA will currently use the first image reference it finds, even if it’s invalid (any invalid image will result in GCA using the default image). We’ll expand things in the future to allow the user to select from multiple options, if available. A BodyImages block might look like this:

[BodyImages]
<Humanoid>
test.txt
<Humanoid Expanded>
image_body_locations.png

Note that valid image types are BMP and PNG and whatever else .Net supports natively. (The test.txt in this example was to provoke an error for testing purposes; text files are not valid images.)

GCA will search for the images in the following order: 1) using any fully qualified path that is specified; 2) using any specified path using the standard shortcut variables (%app%, %sys%, %user%, %userbase%); 3) in the System image bin (%sys%\images\); 4) in the User image bin (%user%\images\).

This will also be expanded in the future to allow for removing images for the specified body types.

Complibits

* Random SelectX processing will now support the possibility of incrementing the level of leveled items, and will remove items that fail taboo checks.

* Bonuses now support the ability to declare an exception to the bonus, so that items can exclude themselves from receiving the bonus if they fall under the exception’s parameters.

Create the exception using the new “unless” keyword, which should fall between the “upto” and “when” keywords in the full structure. The full bonus structure now looks kinda like this (order is important!):

‘+2 to SK:Skill [ upto 10][ unless TARGET::tag = 0][ when “running from danger”][ listas “Some bonus text”]

(with appropriate adjustments for types and targets and whatnot.)

Note that the TARGET keyword is also required if you’re looking to create the exception based on the value of one of the bonus receiver’s tags. The Unless block should solve down to a True or False value, much like the If part of the @if() function. The Unless block is fully Solver enabled.

As an example, the bonus for Jack of All Trades might now be written like this:

gives(+1 to skills unless target::points > 0)

(Note that I don’t know off the top of my head if the Jack of All Trades bonus is supposed to apply to all defaults, like the bonus here, or only to defaults from attributes, in which case this example would need additional work.)

I believe every place that gathers bonus information for a trait currently supports these new exceptions, but I may have missed something if it has special handling.

* GCA now supports the triggers() tag. This is a wrapper/processor tag that contains all of the various “command” tags, or tags that are “triggered” by an item being added to a character. This new tag allows for all of those trigger tags to be included and processed in the order desired. Plus, you may include any number of each tag that you may wish. That means you could include an adds() then a removes() and then another adds(). You may also include select() tags, which no longer need to be numbered sequentially; they’ll be processed in the order they’re included within the triggers() tag, as they’re encountered. (If you do number them, GCA will ignore the numbers and still process them in the order listed.)

The syntax for each of the trigger tags within triggers() remains exactly the same.

The existing system for the trigger tags still remains, and still works in the exact same fashion it always has, with the exact same processing order, and the same limitation of one tag of each type. (And for that system, you must still use the sequentially numbered SelectX() tags, as well.) The new triggers() tag contents will be processed first, before any of the old system tags are processed.

Here are all the trigger tags currently recognized by GCA:

addmods(), adds(), bodytype(), charheight(), charweight(), childof(), creates(), mergetags(), parentof(), race(), removemods(), removes(), removesbytag(), replacetags(), selectX(), select(), sets()

Short Bits

* Fixed a display bug in the simple edit area.

* Made some adjustments to the new Resync internals.

* I stuffed in a simpl(e|istic) way to create random characters based on templates. This is basically a simple wrapper and a couple shims that allows for the simple auto-choosing of items in Select dialogs. The Select dialogs will flash on-screen as the process is being done (assuming the user picks a template that actually has selections to be made). This is pretty simplistic in that it doesn’t even have the ability to try different levels of leveled items, will allow taboo items, and so forth. But it’s working. I also stuck a little Random button on the Select dialog, so folks can randomly select options in a particular Select without randomly choosing the others. The Random Character and New Random Character options are in the Tools menu.

Bits

From the beta list post for the newest build:

* Fixed a typo and some sizing things on Loadout Manager.

* Added the ability to turn on and off the display of the toolbars, in the View menu.

* GCA will now remember the border widths, flow direction, and column widths set in the Colors & Layout window.

* Fixed a refresh bug in attack mode boxes.

* Added support for the where() tag (‘Where It’s Kept’) in the Simple Edit dialog for Equipment, for those who like to detail out where each item is placed on their characters.

* Did adjust a couple things in the FastLoad files to see if that would speed up the threaded processing a bit more.

* Mucked about with some stuff on the Classic view trait lists, including something I’m just trying out.

* Mucked about with the Campaign Log window a bit. The window now supports reversing the display order of the log entries, and you can now search through the log entries for a text string (currently very simple searching only, although you can restrict it to only captions or only notes using the prefixes “caption:” or “notes:”, respectively).

* Fixed an issue where clicking on the non-trait-list boxes in the new set of Compact View boxes would cause an exception.

* The Resynchronize function has now been restored. Access the Resync window from the Character menu. I’ve changed some of how the internals work from the way GCA4 did it, which will hopefully allow for more flexibility. I do have some thoughts on additional features that might be nice, so there is a disabled portion of the window (that I may or may not hook up later).

New bits

From the beta list post for the newest build:

* Fixed a bug in saved XML data that didn’t preserve the owns() value.

* Fixed a bug that called up Combinations editor for non-editable traits.

* Fixed issue with modifiers not being pasteable in Classic View.

* Fixed bug preventing $ functions from being solved from the Solver.

* Zooming the form will now also zoom the menu fonts.

* Removed the main menu from the toolstrip container.

* Added a couple threads to FastLoad loading. Makes a minor improvement to loading times.

* GCA5 is more restrictive in what it considers a numeric value. For this reason, a fair number of incorrectly written expressions worked as if they were valid in GCA4, but fail in GCA5. I have inserted a ‘shim’ into the Solver for GCA5 that checks for one such case: % values being offered in functions/expressions as numeric values. Technically, this isn’t allowed, but GCA returned the value without the % sign anyway, while GCA5 would return 0. This shim should allow returning the value without the % sign as GCA4 did.

* Trying out new trait lists in Compact View that are based on standard list boxes. I’d thought this would save time and effort when making improvements and adjustments down the line, but it looks like this way has it’s own issues, too, so I’m not sure it saves me anything in the end.

I’m also trying out a new method of creating and populating the Compact View boxes, which I hope to expand to allow more flexibility in the future. For now, every box being populated with this new method has a title that is prefixed with “TEST BOX”, and every such trait list is using the new list box based boxes. (The new trait list boxes also each have an ‘options’ box with gear icon in the top right corner, although it’s unpopulated at this time.)

The entire set of boxes in Compact View is currently displayed twice, once each with the new method and the old method.

More bits

From the beta list post for the newest build:

* Fixed Select dialog to resize its contents properly.

* Fixed drawing issue for library items in Select window related to experimental option.

* Fixed character tags not being initialized properly.

* Adjusted handling of #BuildList to support more than one instance of the %listitem% variable in the output template.

* Added support for the removes() tag for templates. Removes() specifies a list of traits to be removed from the character, separated by commas. Prefix tags are required. You may use the “all” keyword to specify that all variations of the skill should be removed, otherwise the name and name extension specified must match exactly. For example: removes(All SK:Guns, SK:Accounting, “SK:Animal Handling (Dogs)”) will remove every Guns skill, only the normal Accounting skill, and only the specialized Animal Handling for Dogs. Without the “all” keyword on SK:Guns, no specialized Guns skill would be removed.

* Added support for the removesbytag() tag for templates. RemovesByTag() includes one or more specifications (separated by commas) of the format

<Type> where <tag> [ is | isnot | includes | excludes | listincludes | listexcludes ] <tagvalue>

This is the same format as that used by the #BuildCharItemList directive, so see that for more information on how each of the comparison types works. Note that it is very dangerous to use ones that specify a non-match, because that means any trait without the specified tag will likely not match, and will be removed. RemovesByTag is intended to be used primarily in conjunction with tag values added during a SelectX() process, for further customizing templates with lenses later on, but data file authors will do as they will.

* Updated the report engine. Sheet plugins need to be rebuilt. (Included plugins were rebuilt.)

And more bits

From the beta list post for the newest build:

Added a very simple Groups viewer for the current character/library to the View menu.

Moved the character dialogs (Appearance, Campaign Log, etc.) from View menu to Character menu.

Made an adjustment to how characters are recalculated when loaded from saved file. This may increase loading time slightly.

Fixed an issue with some valid default options not being recognized.

Fixed an issue with defaulted skills with valid levels at 0pts getting no bonuses.

Fixed an issue where bonuses targeted to the $ value of a tag weren’t created correctly, so their bonuses were never being applied to the targets.

Addressed issue with the Edit Traits window not correctly updating the attack mode values when the Damage Based On combo box was changed.

Even more bits

From the beta list post for the newest build:

Found and squashed the issue that was causing unexpected exceptions to be raised when processing certain books, such as GURPS Low-Tech 4e.gdf.

Fixed issue that raised an exception when the last character was closed, but GCA was not closed.

Added an Option to prevent most of the book-processing messages from appearing in the Log.

Added UI for Character Rules options in Options.

Fixed bug that was causing defaulted skills to get point happy.

More bits

From the beta list post for the newest build:

Mucked about with some of the XML output and the schema.

GCA will toss an error into the log when it sees duplicate tags for traits in books that are being loaded. (I will add an option to enable/disable this later; for now it’s enabled.)

Libraries that are changed in the library manager, and are also currently active in GCA, will now be reloaded when the library manager is closed.

The Modifiers button should now work consistently.

Clicking in one of the icon columns of the Classic View character trait lists should no longer trigger an exception.

Fixed some issues related to the Experimental option.

Updated some of the right-click menu options and handling in Classic View character trait lists.

Enabled cut/copy/paste in text boxes of Classic Attributes and Compact General Info.

Fixed an issue that created a fatal exception if creating a character, and the creation failed for some reason. (Any underlying issue still remains unfixed so far; this just keeps GCA alive.)

Latest GCA5 bits

From the beta list post for the newest build:

Now supporting the direct editing/changing of certain values inside the Classic view character trait lists: points and level for skills and spells; qty for equipment; score for attributes (in the left-side listing).

The logging pane may now be placed on the right side of the main window, under the Info pane.

Print and Print Preview should now be working. Note that the Print/Preview Using… options have been removed from the File menu, as the Print Preview window allows for changing the current Sheet, which can then be printed. We will probably still allow for having characters specify preferred alternative sheets, so they can still quickly be selected and printed or previewed from the toolbar.