Monthly Archives: September 2013

Body of bits

* Done long ago, but probably not mentioned: the prefix tags for Cultural Familiarities and Languages are CU: and LA:, respectively

* Made some adjustments to bonus handling:

(1) Added support for granting bonuses “to Cultures” or “to Languages”
(2) Added support for granting bonuses to a Cultural Familiarity or Language based on their category using “to CUCAT:<X>” or “to LACAT:<X>”.

* Moved a prefix-tag related routine to a different module.

* You can now save your customized Body Type (locations and image) to a data file from the Locations tab in the Protection window.

* You can now select between the available paperdoll body images on the Locations tab of the Protection window, if the associations have been set in the data files.

* The first draft of the user-ordered armor layering system is now working. This is available from the Layers button on the Protection window. This will allow you to arrange the order in which DR is applied, and will result in the DR values on the paperdoll image being listed out individually, rather than having GCA do its best to combine them into a single value. There’s currently no system in place to show what armor item each layer value comes from on the paperdoll; that’s still something I have to figure out.

* The display of the paperdoll image in the Compact view and when printed now more closely reflects the sizes of the boxes shown in the Protection window. However, the display of the data has also been improved to make better use of the space, which should help when there are a lot of layer values to display:

(1) The “DR:” label is now only shown when DB is also being printed
(2) Content will now wrap within the content area of the box.
(3) The box will allow one additional line of height if needed to display all the content.


* $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:

<Humanoid Expanded>

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.