Monthly Archives: August 2013


* 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.


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).

Loadouts & Protection

How loadouts are handled is being seriously upgraded in GCA5, allowing you to change the active loadout and see the changes to encumbrance and protection reflected immediately (see our first post, on Compact View, where you can see the dropdowns for Loadout in the Encumbrance and Protection boxes). This helps make GCA a bit more useful in play, which is something I’m trying to improve.

The big changes in internal handling required the Loadout Manager to be pretty much completely rewritten from scratch, so I took the opportunity to upgrade its features a bit as well.


GCA5’s new Loadout Manager

Now, you can see all your equipment and all your loadouts in one grid, which more easily allows you to assign gear to whatever various loadouts you may want to use. (However, equipment contained inside a parent item is not shown; only the parent will be shown.) You can more easily see which items haven’t been assigned to any loadout yet, and you can sort the various columns of the grid as well.

The new loadouts system is integrated with the protection system, so assigning armor is based on the loadout that contains the armor or shield in question. That’s what those little shield icons in the grid mean—the armor on that row is currently being used to provide protection for that loadout.

So, GCA5 links your protection (armor and shields) to the loadout you’re using. That means you need to be able to assign protection based on loadouts, and that’s what the updated Protection window does.

Protection window

Protection window

This window is mostly an update from the existing one, although things have been rearranged a bit. Plus, as you can see in the top left corner of the window, you can switch between loadouts and assign the armor and shields you want to use in each.

GCA5 is a bit smarter in trying to parse down and integrate different armor values into simpler numbers, but we still haven’t yet attempted the more advanced armor system we’ve talked about in years past. That’s still up in the air as to whether I’ll be tackling it for the initial release.

And, for those folks who hate loadouts and don’t use them, your basic GCA4 style functionality is still there for All Unassigned Items, if you need it.

So, there’s a quick overview of Loadouts and Protection in GCA5. I hope you like it.

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.