A bit more protection (b148)

b148

GCA was not honoring the user’s startup preference (new character, last session, or nothing) when returning from a check for updates. Now it does.

I’ve adjusted how the General Info data is processed, both to help cut down on window flashing and to trigger the character’s dirty state when values are changed. Values are now updated only when leaving the field.

Fixed an issue where closing GCA from the file menu after closing a character could cause an exception.

Found and adjusted a bunch more of the modal dialog calls (so GCA should no longer fall behind all other open windows when returning from them).

Added display of shields to the Protection box, and fixed the display of DR notes.

Made some adjustments to how lists are displayed on the Protection dialog, and also fixed display of DR notes there.

* b147

Forgotten in last build’s notes, I started a panel for Links on the Edit dialog.

My aching brain bits (b147)

b147

Made a slight change to the weight capacity calculations to try and account for variances in double precision values.

Updated saves to save various known tags in the normal xml blocks rather than end up as extended tag blocks.

Adjusted how most of the modal dialogs are called so GCA should no longer fall behind all other open windows when returning from them.

Made some minor drawing and labeling adjustments to the new Attack Mode boxes. Also added a GuideBoxes option that draws dotted boxes around the data cells, instead of just drawing a line between rows of them.

I decided that I liked a different way of showing an item’s used capacity, so I switched to that. The new way draws a bar across the bottom of an item’s display line on the trait list (not including the icon columns), and shows the filled percentage as a darker segment of that line. If the item’s capacity has been exceeded, the entire line is filled red, otherwise it is green or blue.

* Calculations, Text Functions, and NoBase

The NoBase keyword for a bonus was not supported as part of a conditional operation in a bonus, rather it was the unconditional point of a particular bonus. It was always processed first, before anything else, and then other bonus parts were applied to that ‘clean slate’. This may have been unclear, or was forgotten over time, and a number of bonuses started using nobase as a possible return option to clear certain values when various conditions applied. This was a great idea, but it didn’t actually work correctly in GCA 4 or 5, and instead cleared all modes of the targeted tag of all values in all cases.

Since this was a good idea, I have now adjusted GCA5 so that it will process Text Functions at the top of the process of evaluating and calculating bonuses to some tags (currently only reach()). This should enable the use of NoBase in a conditional operation as it already exists in all the cases that I’ve found so far.

* Links

Added a new type of relationship between two traits: linked(IDKey) and linkedfrom(IDKey). These are instantiated during adds() or creates() using a links(yes) tag on the source trait, which is the one doing the adding or creating.

The linked(IDKey) tag on the target trait (the one that was added or created) will get the IDKey of the source trait. It is assumed that this target trait depends on the source trait for some data that it needs.

The linkedfrom(IDKey) tag will be added to the source trait (the one that did the adding or creating), so that it will know that it’s being linked to from another trait and can update that trait when it changes.

Linkedfrom() can have many different IDKeys in a comma-separated list, but linked() can be only a single IDKey value.

The destination trait can then depend on having current data, and can refer back to the linked() trait in formulas using “linked::”, much as you can refer to parents with “parent::” or modifier owners with “owner::”.

You can not have links(yes) and owns(yes) on the same source trait; owns() will take precedence and links() will not be applied.

GCA will also create these related supporting tags: linkedname() and linkedfromnames(), which are the names of the traits related to the IDKeys in the linked() and linkedfrom() tags, respectively; and brokenlinks() which contains the IDKeys from linked() or linkedfrom() that can no longer be found.

* Simple Text Export

Made a minor change to how it exports components.

* Data Files

New version of Payload.

Updated some fencing weapons to use fencingweaspon().

Updated a bunch of containers to include weightcapacity() or countcapacity().

A few other bug fixes.

* TagDefs.XML

Updated with info for these tags: brokenlinks(), linked(), linkedfrom(), linkedfromnames(), linkedname(), links().

* GCA5.XSD

Added brokenlinks, linked, linkedfrom, linkedfromnames, linkedname elements to the ‘ref’ block of GCATrait
Added weightcapacity, weightcapacitylevel, overweightcapacity, overweightcapacityby elements to the ‘ref’ block of GCATrait
Added countcapacity, countcapacitylevel, overcountcapacity, overcountcapacityby elements to the ‘ref’ block of GCATrait
Added countasneed, ident elements to the ‘ref’ block of GCATrait
Added displaynameformula, vars elements to the main block of GCATrait
Added drnotes element to the ‘armordata’ block of GCATrait

Bits of sheets and boxes (b146)

b146

A parent item that was copied and pasted without its children would incorrectly still have cost/weight values that reflected those with the children that it no longer had. That has been fixed.

While fixing the issue above, I noticed that Recalculate All was not actually recalculating everything. I fixed that issue. This adds a slight amount to the total calculation times compared to what it was, but everything should now be getting recalculated correctly. This should have no impact on normal operation as it only applies when doing a Recalc All. (GCA calls for one when loading a character, but not normally otherwise).

Changed copying traits slightly. When you are copying traits with children, GCA will now ask if you want to copy the children also. If you do, great, if you don’t, then only the ones already explicitly selected are copied.

Consolidated some duplicate procedures.

* Attack Modes boxes

You can now hit Enter to launch Edit for the selected item.

The Notes text at the bottom was still sometimes getting cut off, and some weirdness was definitely happening with sizing it, so I replaced those bits with other bits.

* Trait boxes

I’ve made the right-click context menu available to the “No traits to display” label, so that you can Paste from there.

I made an adjustment to the routine that sizes the boxes to hopefully fix an intermittent but long-standing issue where the list box makes itself only a single item high, even though the trait box knows it should be larger than that.

* Sheet View

You should now be able to right-click on a trait’s edit field (when it is highlighted but not actually in active edit mode) to get the pop-up menu for traits.

* Official Character Sheet

Updated with options and support to enable/disable the on-sheet edit features and the buttons that call the trait dialogs.

* Data Files

Corrected some text in a couple _New Disadvantage traits, and removed one that was in an Advantages list.

Safety bits? (b145)

b145

If you start GCA in Safe Mode by holding down CTRL+SHIFT when launching, GCA will now mention that in the Log and Info panes.

When loading GCA for the first time, or in Safe Mode, the Info/Logging pane on the right should now ensure that it is wide enough to see the text it contains.

If you started GCA in Safe Mode, then GCA should warn you if you might overwrite your saved preferences with the ones from the Safe Mode session, and let you avoid doing so. This may happen when you use Options or when you close GCA after starting in Safe Mode.

I have added a trap for the Sheet View pane raising an exception and not instantiating. I have also added support to allow GCA to continue running without that pane being operational.

If starting up GCA in Sheet View, it should no longer reset the sheet’s zoom to the minimum size, and instead should correctly reset to the zoom you were using when you shut down.

Sheet View will now terminate object editing if the user clicks somewhere else on the sheet.

Sheet View on-sheet editor buttons now get tooltips.

Added a CollapseChangeButton to the SheetActionField SheetAction Enum, which allows collapsing/expanding child lists.

* Official Character Sheet

I’ve added support for editing things on-sheet in Sheet View. Let me know what you want to be able to edit if it’s not here yet.

Bit of rapid rebuild (b144)

b144

I have rewritten a large chunk of the Attack Modes box to be able to better adjust to smaller sizes where all the fields may not be able to show up in the display area. The box will now dynamically wrap the contents to fit the space, and put mini-headers in-line with the wrapped data so it’s still possible to determine what fields are what data. This should significantly improve the experience for those folks that don’t like the double-width display and don’t otherwise like large columns.

Also added an option to the box to allow dotted guide lines to be drawn between the rows.

And addressed an issue where sometimes the Notes text at the bottom would get cut off.

If this works out, I’ll clean it up a bit and then make a version available as the sample plugin.

For a few bits more (b143)

b143

Fixed a minor drawing issue on the Reaction Modifiers box.

Fixed a text issue I introduced last build to the General Info box when I was messing around with things.

If you edit a trait, but Cancel out so that no changes are kept, GCA will no longer consider the character Dirty (which is what prompts for saving before closing).

If no characters appear to be Dirty, GCA will no longer ask to save them before Updating.

Setting a body using the bodytype() tag in a template stopped setting the body because of the changes in GCA5. That now works again.

Templates can now set the desired default hit location table reference for a character using the hittable() tag. Specifying the name of the table in the tag will look up that table and set it as the default, if it is found. This goes along with the existing bodytype() tag that sets the desired body type.

It is now possible to save a character as a racial template or meta-trait. I didn’t like the user experience when I started it as an Export sheet, so I built it in instead. It’s available from File > Save as Template.

* Other

Added some additional helper functions and classes in various places to simplify Save as Template and future tasks.

A few more rapid fire bits (b142)

b142

Added some error traps to the startup process that creates the default folders in the user’s Documents folder. Hopefully this will catch the issue where the user has Controlled Program Access turned on. GCA will tell the user of the problem accessing Documents, that it might be due to that, and then end.

On the General Information boxes, Speed is now Basic Speed; Basic Thrust and Basic Swing are now Thrust and Swing; and I’ve added Basic Lift to the front of the bottom row.

Resynchronize Body will now resync all the bodies for the character’s loadouts.

I have created a new box for Unified view: the Reaction Modifiers box. Since it didn’t exist before, it will appear as the last box.

* Data Files

A whole lot of books were updated to update language references from AD: to LA:. This primarily affected Templates, because I forgot to finish updating things when I was doing the mass update before the Beta Preview release.

The Basic Set, Dungeon Fantasy RPG, and Discworld books, which all use the same basic Humanoid body, somehow lost the Vitals location from that body, so I added it back. Apparently I also lost the standardized body location names that use spaces in the names (such as Left Leg instead of LeftLeg). I’m not sure how that happened, but I fixed that, too.

More bits, rapid fire (b141)

b141

I’ve disabled the Help menu’s Contents, Index, and Search items because I haven’t written any help files yet.

I’ve removed the Tools menu’s Customize item because it’s not used.

In Current Character Options, the Trait List Grouping box was chopped off and unusable. That should be fixed.

* Bonuses

Possible breaking change! Please be alert to your bonuses!

For ages, GCA has treated a bonus with a value of zero as ‘not applicable’ and therefore not applied to a trait. This is technically true for additive bonuses, but technically false for multipliers. A multiplier of 1 should be effectively non-applicable, since it changes nothing.

GCA was using this value of 0 as being non-applicable to allow it to remove bonus relationships, such as when setting the granting trait to level 0, or when GCA wants to remove the bonus entirely from the system, such as when deleting the granting trait. This allows for easier cleanup and ensures no ‘ghost’ bonuses remain.

I have now implemented a change to how this works.

Bonuses now have an IgnoreMe flag, which is set to True when the granting trait drops to level 0 or when GCA wants to remove the bonus effects. Now GCA sets IgnoreMe to True where it previously set Value to 0. Now, GCA checks for IgnoreMe = True instead of Value <> 0 when it determines if a bonus should be included in bonuses applied to a trait.

This means a multiplier of 0 should work as you’d expect, and it is now possible to apply a *0 bonus to zero out a value, instead of having to try to subtract the base value or some other workaround.

Sometimes this type of change has unexpected consequences and unforeseen follow-on effects. I’ve done some testing, and things seem to be working, but my personal testing definitely doesn’t reach into all corners. And I just plain overlook things sometimes.

So, this is a bigger architectural change than I anticipated making at this point, but it’s one that I think should have been made long ago. So I made it.

It should just work, but please watch for weirdness.

* GURPS Dungeon Fantasy 1 – Adventurers.gdf

Removed “GURPS Power Ups 3 Talents.gdf” from the LoadAfter header line.

A few more li’l bits (b140)

b140

* Miscellaneous

Some menu items on the right-click menu for trait boxes in Unified were not available when they should be. That should be fixed.

* Parent capacity

How did we go so long without having any indication that certain parents, such as backpacks, might be over-weight? I had to triple check that I didn’t have support for it somewhere.

I’ve added two new base item tags: weightcapacity() which specifies the maximum amount of weight a parent can have in childrenweights(), and countcapacity() which specifies the maximum number of child items (including multiple counts of any children) a parent can have. Both only apply to Equipment items.

Checking/calculating capacity also generates some other tags: weightcapacitylevel() and countcapacitylevel() which show the percentage of weight or count capacity currently used (will be less than 100 if not full, over 100 if over-full); overweightcapacityby() and overcountcapacityby() which show the actual value of the amount over capacity, or are nothing if not over capacity; and overweightcapacity() and overcountcapacity() which simply say ‘yes’ if over weight or over count, and will be nothing if not so.

Trait lists in Unified and Classic will now display a ‘fill’ level in the rightmost icon column, which shows the box icon indicating a parent. If the item is over capacity, the background of that space will be filled with red; if the item is under capacity, it will fill from the bottom up as capacity is filled up, using green for weight or purplish for count, whichever is closer to full.

* Modifiers dialog

If a modifer has possible modifiers, GCA displays a tools icon in the first column. If the modifier is on a non-standard tier, the tier number is also displayed in the first column. It should now be easier to see the tier number in the column over the icon.

* Info Pane

GCA should now change the mouse pointer into a hand when it’s over a page link in the Info pane.

GCA now defaults to launching a page link with a single-click, with the option for a double-click.

* TagDefs.XML

Updated for new tags above.

A bit from feedback (b139)

b139

Added a Filter pane to the Library list used by Unified and Sheet views. This allows restricting the display of traits in the Library list based on text entered into the filter text box. The filter is applied based on the names of traits, and is case insensitive.

Added an option to the Library list gear menu to show/hide the filter pane.

* Data Files

Body types have been updated to include a Skin location group. All locations except Eyes belong to this group.

Updated Damage Resistance in Advantages and Templates to use the new Skin location, instead of the incorrect All location.