* 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()