Bit do what? (b207)

b207

* Appearance / Biographical Data

Added some error trapping for mismatched parens and braces.

Adjusted the window construction to allow for the error lister.

Changed ‘Build’ field to use the ‘bio_build’ character tag.

Added fields for ‘Eye Color’ and ‘Hair Color’ as character tags ‘bio_eyecolor’ and ‘bio_haircolor’, respectively.

Changed the ‘Appearance’ option on the Character menu to ‘Appearance / Biographical Data’.

* Armor

Armor items so far have denoted if they are flexible in the same way the books have: with a * at the end of the DR value. Now we have more options.

There is now support for the new flexible() tag, that can be used to denote whether the armor is flexible or not. Any of flexible(0)flexible(no), or flexible(false) will cause the armor to be marked as NOT flexible, while any other value will cause the armor to be marked as flexible (but using flexible(yes) or flexible(true) is recommended for clarity). Using this tag will override any existing * marker.

To apply bonuses to ‘flexible’, apply a string bonus to flexible$ of “no” or “false” to turn flexible off, or “yes” or “true” to turn flexible on. You can also target any positive adder bonus to turn flexible on, or any negative adder bonus to turn flexible off. The string bonus overrides the adder bonus if both are present.

GCA will calculate a charflexible() tag based on the * marker or the flexible() tag, and any bonuses targeted at ‘flexible’. If the armor is determined to NOT be flexible, charflexible() will NOT exist and will be deleted if it did exist. Likewise, GCA will add the * to the end of the DR value if flexible, and remove it if not flexible.

As with all other calculated character-specific calculated features, exporters and sheets will want to use charflexible() if they need it for something, but any flexible armors will still be marked with the * for user reference, so if those values are also used, you may need to remove the * from the end.

* TL

When creating the tl() for equipment items, GCA wouldn’t always preserve the special suffix for some items (such as ^) when setting that item to the character’s TL. Now it should.

I’ve also created the NumericTL() as Integer function on GCATrait, which returns an integer version of the TL for the trait. This can be retrieved through TagItem or :: as ‘numerictl’. In descending order of priority, this function will check the item’s tl(), then techlvl(), and lastly the character’s TL; then remove any suffix, and finally try Solving for a numeric value.

* #ForceNeeds

GCA’s usual behavior when processing templates is to *not* allow auto-adding of needs() items to the character. This is because that behavior may conflict with things the template has yet to finish doing, and could easily result in duplicate traits being added to the character when that is not intended.

You can now use the special directive #ForceNeeds in an adds(), addsorincreases(), or creates() tag to specify that the trait being added should override GCA’s usualy behavior and allow the needs() auto-add system to be employed.

As with #NoNeeds and #DoNotOwn you should include #ForceNeeds in the main clause of the tag data, before any ‘respond’ or ‘with’ portion, else it be considered part of the other clauses and not work correctly; sticking it into the name section is best.

* Build Campaign Book

I’m trying to rebuild this dialog to actually display properly for users in Windows 11. This is my second attempt, since I was rather unhappy with the previous one, whether it worked or not.

The dialog has now been restructured and arranges the window elements differently.

* TagDefs.xml

Updated to include flexible() and charflexible().

 

Probably no December release

It looks like I’m going to miss the release for December that I had planned on. I’m trying to fix a dialog display issue that appears to be the result of Windows 11 interactions, but I don’t have Windows 11 myself. So it’s going very slowly.

I’m continuing to fix new bugs as people find them. I’m continuing to add support for new things. I’m just not going to make this particular informally intended release date.

Although I should probably point out that I had always intended to release updates quarterly, at the fastest. They have occurred more often than that so far due to various crash-bugs that kept coming up. If those are mostly trapped at this point, the release pace should continue to be a bit slower in the future.

(Package updates, for books and sheets, available through the Check for Updates package manager, will continue to happen whenever they need to happen, as quickly as they need to happen.)

Package Updates

* Core Supplemental (Official Character Sheet)

Updated to use newer drawing routines for the protection image.

* Package Updater

Updated to show GCA version number in the top text block.

When the Details button for an update is clicked, the text has been updated to show all details when both updated files and obsolete files are involved.

Biographical imperial bug bits (b206)

b206

* Bug Fixes

When reading a book file, if the last character of content in the file was a line-continuation character, GCA could get stuck in an infinite loop. Fixed.

* Options dialog

In the Characters box, the option ‘Show all status messages when processing templates’ makes more sense as a book-processing option since the output is for debugging. That option has been moved to the Book Processing box.

* Metric and Unit Conversions

Since GCA attempts to perform automatic unit conversions when various values are in standard/metric and the character is set to the other, checking or unchecking the Metric checkbox on the General Information box should trigger a character recalculation so that items can be converted to match the new setting. That will now happen.

Previously, GCA’s automatic unit conversions only used the Game Metric values (p. B9). GCA now supports either Game Metric or Real Metric (p. B9). Game Metric uses simpler, ‘close-enough’ conversion constants while Real Metric uses more exact conversion constants (to 3 decimal places). This support is GCA-specific, not character-specific, so all loaded characters use the same conversion values.

You can change GCA between the available sets of conversion constants in the new Unit Auto-Conversions box in Options. This box also offers the option of turning automatic conversion off, and leaving units and values alone. Some traits have unit conversion built into their calculations, and these will still calculate themselves based on the Metric setting regardless of your setting for Unit Auto-Conversions.

* Per-Die result caps

You can now cap the results returned by the functions that return the dice for base swing (@baseswdice) and base thrust (@basethdice) damage. I believe the recommended dice cap is 7; any positive integer value is allowed. These functions are primarily used for giving per-die bonuses to Boxing, Brawling, and karate, but would also affect Weapon Master damage bonuses or any other such usages.

There are now default character options and character options to set these, in the respective Rules boxes.

Because these are new options settings that can be set by files, also, the FastLoad file version has been changed, and FastLoad files will be rebuilt. The book file settings are “CapDamageBonusPerDie=True” to turn capping on, and “CapDamageBonusPerDieAtXDice=X”, where X is the cap to set (default is 7).

These settings are now also included in Build Campaign Book.

* Appearance / Biographical Data

The Appearance dialog has been updated, and it is now called Appearance / Biographical Data. The updated dialog now has two tabs: Appearance, which contains everything from the existing dialog; and Biographical Data, which contains a grid of biographical data fields. The Biographical Data tab also includes everything from the Appearance tab, so if you prefer it, you can simply use this tab and won’t have to switch between them.

Biographical data includes a bunch of possible default fields which you can use. All of these are stored in the character’s tags (except for those fields also on the Appearance tab, which have custom data slots on the character). The character will also get a tag called ‘biodatacontrols’, which tracks what all of these tags are, whether they are visible, and what prompt is shown to the user if it isn’t the same as the tag name (which is the case for most of them since this system uses tag names such as ‘bio_dob’ for ‘Date of Birth’ and ‘bio_family’ for ‘Family’).

You can rearrange the order of entries on the grid using drag-and-drop. You can hide fields you have no interest in using the right-click menu. If you change your mind, you can also use Show Hidden on the right-click menu to see the hidden items, then select them and pick Show to unhide them.

I’ll probably also add the ability to create new fields to include here, but that’ll require another dialog for tag names and prompts and such, so probably not right away.

The defaults are currently created by GCA, but the show/hide settings are per-character. There’s currently no way to universally hide any of the fields to make them hidden by default on new characters.

 

Bits of requests fulfilled (b205)

b205

* Select(), SelectX()

Select() lists can now use the new #tags() directive for list items. This is used similarly to #codes(), in that it’s just tacked on to the name of a list item, and GCA will parse it out and extract the contents. If you use both #tags() and #codes() remember not to use a comma between them.

#tags() allows you to replace the contents of any tags on the library item being referenced, before the item is sent to the Select dialog. List all the tags desired inside the #tags() parens, bearing in mind the usual nesting requirements.

This new support allows you to customize items without having to use #newitem, if the item is one that can be easily based on an existing item. Replace name(), nameext(), initmods(), whatever you need–just remember that the tags must be Library tags because the items shown in Select are Library items until added to the character.

For example, if you have a Select() with a list() like this:

list(_
SK:Performance #tags(nameext(Singing), page(TESTING))#codes(upto 16, downto 10),_
SK:Photography #tags(name(Holography), page(TESTING))#codes(upto 16, downto 10)_
)_

the user will be presented with a list of options that includes “Performance (Singing)” and “Holography/TL” (because Photography is a /TL skill). Aside from the name change and the new TESTING page number, everything else for those two skills will be identical to Performance and Photography, respectively..

List items can now also use the new #note() directive to specify a special note to include on the Library list itself. This special note will be displayed directly under the trait name on the list, and that list entry will be taller to accommodate it.

* Functions

Added the @sumlist() function, which returns the sum of the values in a comma separated list. Each value in the list may be a fenced Solver-enabled expression.

Added the $modifiers() function, which returns a list of the modifiers applied to the trait. This is probably only useful with displaynameformula(), but that’s why I added it. Use $modifiers() without parameters to get the usual captions (shortnames), but *without* values, enclosed in parentheses. Use a comma separated list of parameters to modify this behavior: ‘captions’ explicitly sets captions (the default) while ‘fullnames’ sets fullnames instead; ‘values’ will include the values of the modifiers; and ‘noparens’ will turn off the enclosing parens. (Note that if there are no modifiers for the trait, the return value will be empty, not a set of empty parens.) Example: $modifiers(values, fullnames) will return the full names of the modifiers along with their values.

* Adds(), AddsOrIncreases()

When a trait is being added, and no name extension is provided, and GCA looks for versions with name extensions included, and finds some, it will pop up a dialog asking the user to choose which one they want. GCA does this even if only one option is found. Now, GCA will automatically add the found selection if only one is found.

* Options

Added some additional error traps to try and catch weird cases where something is crashing GCA because some option is set wrong or maybe missing.

Damage mini-modes were supposed to be On by default, but were actually Off by default. They are now On by default, as intended. If you want them disabled, you’ll have to go into Options, Experimental Features, and turn them off again.

* Edit Traits

If displaynameformula() is being used, a section near the top, just above applied modifiers, should be displayed showing the current Display Name and the current displaynameformula(). You can edit the displaynameformula() there. You will need to Add Tag displaynameformula() or turn on ‘Show all fields’ to show the display name fields if they’re not visible.

Bit of a party (b204)

b204

GCA had a helper function called PlainText() to return plain text from RTF. However, it was not robust enough, so I’ve updated it to use the newer RTFtoPlainText() function which is more robust.

When dragging and dropping a parent item within a trait list, GCA was not correctly preventing the user from dropping onto a child or grandchild, which would cause GCA to crash. That should now be fixed and the move will not happen.

When dragging items within a trait list, GCA should now use a red insertion point indicator, instead of the usual black one, to indicate when the drop location is not valid due to one or more of the dragged items being ancestors of the item at that point. Dropping anyway will have no effect and the dragged items will not move.

I think I’ve restored the ability of the Info pane to deal with user notes or descriptions of traits that have embeded RTF codes without being full RTF blocks. This should allow for those fields in book files to use bold or italics, for example, without having to embed a complete RTF header along with it.

* Party View

You can now copy and paste character card designs. Added to the bottom of the gear menu on each card are two new options: Copy Card Design and Paste Card Design. Copy Card Design will copy the card design elements into an XML text string, which you can then paste elsewhere, send to a friend, or paste it into another card using Paste Card Design. Paste Card Design will only be enabled if the clipboard contains XML text that looks like it might contain card design data, and if so, you can select it to paste the design in. Once pasted, the card will replace it’s current design with the one contained in the XML.

* Build Campaign Book

I’m trying to rebuild this dialog to actually display properly for users in Windows 11. Since I don’t have a Windows 11 development machine, this is problematic. However, my first attempt is now done.

Having the option enabled to display an LC column in Equipment lists caused the program to crash when switching to the Equipment.list. That is now fixed.

The Library list for Equipment should also now honor the formatted display of costs and/or weights, if that option is turned on.

The list headers should now display subheads/column headers for each list.

Package Updates

GURPS Low-Tech 4e – Armor & Protection.gdf
Added to \Variants\.
NOTE: This file is just the armor and body information from Low-Tech. It is everything removed from the ‘GURPS Low-Tech 4e – Everything NOT Armor & Protection.gdf’ file, and allows for a full Low-Tech file-equivalent when used in conjunction with that file instead of using ‘GURPS Low-Tech 4e.gdf’ itself.

GURPS Low-Tech 4e – Everything NOT Armor & Protection.gdf
Added to \Variants\.
NOTE: This file is Low-Tech with all the armor and body information pulled out. This allows you to use everything else from Low-Tech with other books that use the Basic Set compatible armor coverage.