Author Archives: Armin

Back to bits

b100

* Miscellaneous

Removed option to save as a GCA4 character file, since there are too many features within characters that have no way to downgrade gracefully to something supported by GCA4.

Fixed a bug where trying to Copy Modifiers when the traits had no modifiers would result in a crash message.

Noticed that somewhere along the line, the skill types for skills and spells had been lost from the display in the character lists. Rather than build it into the default DisplayName of the trait, I added a column for it in the character lists.

Updated the character trait lists in Unified and Classic Views to better respond/resize when an item is being word-wrapped, and its length changes (such as when adding or removing modifiers).

Now post a little message in the Info pane on startup about beta testing.

* Updater

I have updated the Updater within GCA, and the corresponding tools used for updates. This should allow for updating all the system files that don’t require an actual installer. The process used for library updates no longer works as it did, but the new system should fully encapsulate it, as well as adding the needed support for updating other things.

The ‘updates available’ notice should be a bit smarter in how it compiles the message to the user, and now actually supports using RTF messages as originally intended.

Added support for some additional stuff in the Updater code, which helps me in testing but may not ever be needed otherwise: update info xml files can be in a secure area; can have different update channels (currently compiled into GCA, so it supports only a single specific channel in a released build).

Modified things so that the code for accessing/using the login dialog was a bit more reusable, so I could reuse it.

Added the ability to include commands in the Updater information, to run before and/or after the general files are copied. No actual commands have been defined yet, however.

Fixed a bug in comparing version info.

* Pasting

Some of the work done previously to catch and correct for lost parent or child items resulted in the system losing its ability to paste traits that had parent-child relationships; the relationships would be removed, because all parents and children would have unmatching keys at various points in the process, before GCA had a chance to fix up all the references. I have addressed this issue, so that such traits should now insert correctly again.

I have added a snippet of code to allow for some unrelated garbage text before the opening XML tags when pasting XML into GCA. This should add a bit of robustness when pasting into GCA traits copied from elsewhere, such as a forum post, when the cutting of the XML wasn’t precise and some other text was included.

* Controls and Plugins

Since my development environment was rebuilt after my crash, my third-party controls and various other files were updated or otherwise different from the ones used before. As a result, my plug-ins have been rebuilt, and yours may need to be as well. (Plugins that are compiled by GCA on startup should be just fine.)

A Pause for Effects

I just wanted to post a quick note to folks, letting those concerned know that things are in a temporary lull right now due to my having to move house. Since I work from home, this also means moving office.

The majority of the move is now finished, but I can’t set up my work space yet because I’m still waiting for my new appliances to be delivered, and I have to leave room to maneuver for the installers.

I’m working on my laptop for now, but it’s cramped and limited, so I don’t really expect work to proceed with any sort of verve until next week.

Sorry about the slow down from what’s mostly been a decent pace this year, but it should be temporary.

Tiny bit of an update

b99

* Miscellaneous

A post on the forums caused me to look at some old code, which brought to light an issue with custom skill cost progressions that had more than ten levels of costs. Everything worked fine except for the routine in skill calculations that assigned the trait’s level based on the points spent; that was a bit dodgey, hardcoding a limit of ten possible cost steps, which effectively imposed an arbitrary limit. I already had a routine in GCA5’s SkillCosts object to handle things correctly, I just hadn’t used it, so the old code was still being used. I have fixed that. (Doesn’t help GCA4 users, unfortunately.)

Updated some other code related to using skill types, to improve readability and reduce lookups.

Consolidated some routines related to skill types that were basically duplicates between the GCATrait and GCACharacter objects.

* Unified View

I have added a button to the front of the Unified View specific toolbar. This is the Vertical Page Override button. When you press this button, Unified View will force all boxes to fill the display width, and to flow only vertically, overriding the other settings, and making the display more of a single long page view. This does not change any of the settings, so toggling the button off again will restore your usual display.

Hooked up the gear icon for the attack table boxes. Only option currently there is for toggling double width display.

Updated drawing code on the attack table boxes to correct for display issues that could happen with multiline items, as was done in last build for trait boxes.

Only time for a few bits this week

b98

* Miscellaneous

Fixed display bug that could cut off itemnotes text in the Simple Edit attack tables when zoomed.

Fixed issue with #ChoiceList dialog listbox not selecting properly when clicking directly on the checkbox.

Fixed what I hope is the last of the drawing issues in the Unified trait boxes when multi-line user items is on.

When using in-list entry on the Character traits lists in Classic view, you should now be able to enter a decimal point.

Added support to GCATrait for the drnotes() tag. This is not mode enabled, and not managed by the Mode object, but otherwise works just like itenmotes() support does for modes, just on the trait level.

* Party Console

Added an explainer.

Adjusted the look of the default attributes block a tad.

Added support to the trait lists so that clicking on a trait displays info in the Info pane, as it does elsewhere in GCA.

* Books & Data

Included Eric’s book and image data updates.

Still summer, still more bits

b97

* Miscellaneous

Itemnotes() support now implemented for attack mode boxes on Unified View.

Noticed some unexpected/unwanted color changes in the attack mode boxes in Simple Edit, so I fixed that. Then made some visual changes in the display of modes and itemnotes and such.

Fixed the tooltip for the Export button on the File toolbar.

Adjusted how the PendingChildKeyList() tag is handled, so it should no longer stick around past its intended lifetime.

Made some slight changes to how child handling is processed when loading characters, which reduces file loading times for characters that have traits with many child items.

I’m trying out a restructured version of the RecalculateAll routine, which results in far fewer recalculations of parent items and commonly referenced traits. It is significantly faster, and appears to still work properly, but it’s so much faster that I’m just not sure something isn’t being missed. Be alert for issues, especially for newly loaded characters.

* #ChoiceList dialog

Made various adjustments to the components and design of the dialog.

Fixed a bug that resulted in the dialog not correctly disabling the OK button again once it had been enabled.

Implemented a FIFO (first in/first out) selection process to keep selections at the maximum picks, if set, by deselecting earlier picks as later ones are made. If the list is in this mode, the check boxes on the list will be round instead of square.

* Official Character Sheet

Removed the CreateItemNotes() routine I added last build, since I have now included that routine as part of the GCA5Engine. The sheet was updated to use the engine routine, instead.

Fixed bug that would lose overflowing entries from weapon tables if there were itemnotes.

* Color Block Sheet

Added first draft of support for end-notes style itemnotes() to weapon tables.

Summer bits

b96

* Miscellaneous

Added an Option to allow for multiple rows of Trait Tabs in Classic View, should the display area be narrow enough that some of the tabs would end up on the overflow drop-down list.

Removed the unused Edit menu from the main menu.

Updated the dialog version of Attributes to use the correct colors for the new general information box.

Fixed the Colors & Layout dialog to support the addition of Features.

Bulk is now correctly part of the new mode-handling system,

In #ChoiceList, totalcost(), picksallowed(), and the values for default() are now math-enabled, so can be given formulas. Since parsing within those tags is done on spaces, you should enclose the formulas in quotes or braces.

* Print Preview

Made some changes to how the Print Preview dialog is created, to adjust for some weirdness caused by the control vender.

Moved the Export PDF… button next to the Print button, and renamed it PDF.

Added an Exit button.

Adjusted the auto-sizing of the sheets drop-down a little bit.

* Official Character Sheet

Updated to handle Features, and to upgrade existing settings because of Features.

Updated to actually print Templates.

Added first draft of support for end-notes style itemnotes() to weapon tables.

Updated to reflect ‘gurps logo.bmp’ is now in \images\ rather than \graphics\ folder.

Added an option to not print the GURPS logo on page 2 (active by default), for a cleaner look with more room for the Hand Weapons table content.

* Books & Data

Included Eric’s book and image data updates.

Fixed the missing ‘minoccurs’ for Features in GCA5.XSD.

Moved ‘gurps logo.bmp’ to \images\ rather than the old \graphics\ folder.

Feature bits

b95

* Miscellaneous

I noticed the mental_16.png symbol image had a bit of a ‘white halo’ effect from transparency issues when highlighted or on a dark background, so I adjusted the transparency around the image and included the adjusted image. (You won’t notice the change on existing characters unless you resync the symbols, since the images are stored in the character.)

While adding support for Features, noticed Languages and Cultural Familiarities were missing from a small section in Needs code, so addressed that.

Added code to the character trait lists in Classic View so that a newly added trait will no long be considered ‘in view’ unless a whole row is within the viewable area.

In the Folder Locations dialog for Options, displayed folder locations should now show & characters correctly.

Also in the Folder Locations dialog, if one of the Other Folders does not exist, and you click the Browse button, you should no longer have to drill down from the very top of the folder system structure anymore. If the Base Folder is valid, clicking Browse should now start you from that folder.

Added ability to delete a property from a section in my settings manager.

Added ability to delete an Option from SheetOptionsManager. (This is helpful if you completely change how something is handled, and want to remove the old options from the saved file when upgrading the options to the new format.)

* Features

Removed previous, partial Features support.

Features are now traits, and handled by the trait system. There are now trait tabs and boxes in Classic and Unified Views.

Updated code in many places to support the addition of Features to the trait types.

The Prefix tag code for Features is ‘FE’. The GDF block for them is [Features], and they’re functionally advantage-type traits.

Because Features have been inserted into the types of traits (internally, they’re between Quirks and Skills), the FastLoad files version has been updated, and they’ll have to be rebuilt.

Added support for Features in the custom tab names part of Current Character Options.

For now, the features() tag on templates will act like a creates() to create a new Feature as a component trait of the template.

* Books & Data

Included updated *and new* book files from Eric, since new ones were overlooked last time. (But I haven’t included the 3rd Edition files.)

Updated GCA5 Changes.gdf with a _New Feature item.

* Sheets

Note: You probably need to update/recompile your sheets to support the addition of Features.

Updated ColorBlockSheet to handle Features, to upgrade settings because of Features, and to change how various trait-type-block settings are stored/referenced to make them more robust.

Cleaning up and polishing of various bits continues

b94

* Miscellaneous

In Classic View, in system and character trait lists, when using type-to-search, traits beyond the bottom of the viewable list area would often be found and selected, but would be considered ‘in view’ even if only a fraction of the trait’s name box was actually within the viewable area. Clearly, that’s not ideal. This has been fixed so that a whole row should scroll into view, at least.

In Unified and Sheet Views, the library list type-to-search has also been fixed as above.

When points are changed in the Campaign Settings dialog, the points bar should now update values correctly when the dialog is closed.

The Library items in Classic View didn’t have subheads, so added those. I don’t think we really needed them for most tabs, but for Equipment they seemed helpful, and having them on all tabs keeps the look consistent.

Widened the Cost column on the Library side of the Equipment tab of Classic View a bit.

Various places (including Campaign Log and some lists) were touched to show money values as $ rather than “Currency”, because “Currency” uses localized values, which is not correct for GURPS $.

* Manage Your Library

Added a buttom to allow duplicating the currently selected library.

Added a button to allow for browsing to a different User Books Folder.

Bits of Of and Except and Images

b93

* Miscellaneous

Made a small visual change to the Save Body Type dialog.

GCA is now saving and loading the character’s body image to the character file (if it’s actually set to something other than the built-in default) as Base64 encoded data.

Updated Protection box in Unified View to work with embedded character body images.

Updated GetProtectionPaperDoll() routine for sheets to work with embedded character body images.

* Protection Dialog

Corrected a tooltip on the Locations tab.

Changed the Save To… button to Save Body… on the Locations tab.

Added a browse button for the Body Image on the Locations tab, allowing you to load a custom image directly.

* #any, #best, and #worst

In places that support the special directives #any, #best, and #worst in name extensions (currently GetItemVal, GetItemTextVal, @ItemHasMod, and Needs), I have expanded support to include the #none directive, to explicitly look only for traits with no specified name extension.

I have also added support for clauses to contract the acceptable pool of traits by the name extensions found, should you wish to do that. All the directives *excluding #none* support the new ‘of’ and ‘except’ clauses. ‘Of’ specifies the extensions that are valid, and only traits with one of those specified extensions will be considered. ‘Except’ specifies the extensions that are not valid, and only traits that don’t have a specified extension will be considered.

So, here’s a completely arbitrary and silly example of the needs() usage:

needs(SK:Animal Handling (#any of equines, big cats) = 12, SK:Animal Handling (#best) > 15, SK:Animal Handling (#worst except "raptors") < 8)

In this example, only the Animal Handling (Equines) or Animal Handling (Big Cats) skills will satisfy the need for an Animal Handling skill at 12 or higher, but any version at all will work to satisfy the need that some skill is over 15, and finally, the worst Animal Handling skill must be less than 8, but can’t be Animal Handling (Raptors) because that’s excluded.

The templates are like this:

#any [ of List ][ except List ]
#best [ of List ][ except List ]
#worst [ of List ][ except List ]
#none

List is a list of the applicable name extensions for that clause. Enclose individual list items within quotes or braces if they include a comma or one of the other keywords. The ‘of’ and ‘except’ clauses should never have any reason to be used at the same time, but should you do so, order isn’t important as long as the clauses always follow the #keyword.

If it’s not obvious, #none doesn’t support the new clauses because it retrieves only traits without extensions, so there’s nothing to check against from the new clauses.

* Books & Data

Included updated book files from Eric.

Added the ‘bodyimage’ element to the gca5.xsd file, for the character’s saved body image (used for the protection paper doll).

A little bit’s notta lot but it’s better than notta bit

b92

* Miscellaneous

Rewrote the routines for encrypting/decrypting the saved login creditials for getting updates. It now appears to work as intended, but your first new usage will still show messed up text (or nothing, if it was so messed up it caused an error in the new routine).

Added a ‘Force Update’ option to the Help menu, which will force GCA to see any available update as a new update, allowing you to effectively force a reinstall using the update system.

Standardized the round() tag a bit for more consistency across attributes and modifiers. You can now specify ‘up’ or ‘1’ for rounding up, ‘down’ or ‘-1’ for rounding down, and ‘no’, ‘0’, and ‘none’ for no rounding. Note, however, that modifiers only actually support rounding up or down, so any usage they see that isn’t ‘down’ or ‘-1’ is the same as ‘up’ or ‘1’.

Discovered that the default setting for rounding modifier calculations was different between traits and modifiers, when calculating modifiers that applied to the owner. For traits, default handling of modifiers was set to round up, while for modifiers, default handling of modifiers was set to round down. I have changed the default for modifier’s modifiers to be round up, as it was with traits. Of course, if there is a round() tag on the modifier, it will continue to honor that setting.

Fixed a bug that was causing trait symbols/flags to be lost when editing items from Unified View.

Fixed a display bug that was causing the trait edit buttons on a selected item in a Unified View box to continue to be displayed even when multiple items were selected.

* Substitutions

Added some robustness code to the Substitutions table creation routine.

Substitutions will now be seen as valid results in more places.

Hooked Substitutions into the Affects cross-linking system, which should allow for the same immediate results to be visible when making changes as there are normally. (Without this, for example, Trait A might find and base a Needs requirement on Trait S, which was found because it substitutes for the Trait B specified in Trait A’s needs() tag; but when Trait S is changed, Trait A wouldn’t be notified that something it depends on was changed.)

* Needs checking

I have added support for using the special directives #any, #best, and #worst in the name extensions in needs() items. These are supported for any traits that are properly identified with the correct prefix tags, and that have a valid base name.

GCA will assemble a list of all traits of the correct type that have the given base name, and then process them in this fashion:

  • #any – all traits will be evaluated and used to test the condition, but only until the first trait found that satisfies the given condition; or until all traits fail.
  • #best – all traits will be evaluated, and the one with the best (highest) value will be used to test the condition.
  • #worst – all traits will be evaluated, and the one with the worst (lowest) value will be used to test the condition.

Obviously, this only works for numeric values and conditions that evaluate numeric expressions. Inactive traits are not valid, and won’t be considered.