Package Updates

Dungeon Fantasy RPG.gdf
[Modifiers]
<Crossbow Quality>
group added

<Climber>
group added.

[Equipment]
Composite Bow (ST %choice%)
Longbow (ST %choice%)
Regular Bow (ST %choice%)
Short Bow (ST %choice%)
added ‘Bow Quality’ to mods()

Blowpipe
Composite Crossbow (ST %choice%)
Crossbow (ST %choice%)
Pistol Crossbow (ST %choice%)
Prodd (ST %choice%)
added ‘Crossbow Quality’ to mods()

Hatchet (tool)
Hatchet
Hatchet (Throwing Handle)
Jutte
Pick
Sai
Sickle
Tonfa
Axe
Kama
Small Axe
Small Throwing Axe
Small Throwing Axe (Throwing Handle)
Throwing Axe
Throwing Axe (Throwing Handle)
added ‘Climber’ to mods()
NOTE: You must Resychronize existing characters’ Bonus Classes for this modifier to work properly for them, otherwise it won’t limit the bonus to +1 if you have more than one such weapon.

[BonusClasses]
Climber, stacks no upto 1
added

Package Updates

GURPS Basic Set 4th Ed.–Characters.gdf
[Skills]
Body Language
Diagnosis
First Aid
Physician
Pressure Points
Pressure Secrets
Surgery
x()
removed to remove required specialization
usernotes()
added for Physiology modifiers.

Hypnotism
x()
removed to remove required specialization

First Aid ([Race])
Diagnosis ([Race])
Hypnotism ([Race])
Physician ([Race])
Physiology ([Race])
Surgery ([Race])
removed

GURPS Action 1 – Heroes.gdf
[LISTS]
<SecuritySkills>
SK:Body Language (Human)
SK:First Aid (Human)
removed (Human)

<LawEnforcementSkills>
<MilitarySkills>
SK:First Aid (Human)
removed Human

<IntelligenceSkills>
<JournalistSkills>
SK:Psychology (Human)
removed Human

[Templates]
Investigator (Action)
select5()
select8()
select9()
list()
removed (Human) from Body Language
select8()
list()
removed (Human) from SK:Psychology

Medic (Action)
adds()
SK:Diagnosis
SK:First Aid
SK:Physician
SK:Surgery
SK:Psychology (Human)
removed (Human)

Face Man (Action)
adds()
SK:Psychology (Human)
removed (Human)

GURPS Action 4 – Specialists.gdf
[Templates]
Medicine – Medic (Action)
x()
removed to remove required specialization
adds()
SK:Diagnosis
SK:First Aid
SK:Surgery
removed ‘respond “[SPECIES]”‘

Medicine – Doctor (Action)
x()
removed to remove required specialization
adds()
SK:Diagnosis
SK:Physician
SK:Surgery
removed ‘respond “[SPECIES]”‘

GURPS Action – Pyramid 3-53 – Extended Action.gdf
[Templates]
Horseman (Action)
adds()
SK:First Aid (Human)
removed (Human)

GURPS Dungeon Fantasy 1 – Adventurers.gdf
[Templates]
Cleric (Dungeon Fantasy)
x()
removed #InputReplace to remove required specialization
adds()
SK:Diagnosis
SK:First Aid
SK:Surgery
removed ‘([Race])’

GURPS Fantasy – Portal Realms.gdf
New file added. Thanks to David Trimboli.

GURPS Infinite Worlds 4e.gdf
Global change of ‘Proector’ to ‘Projector’

GURPS Monster Hunters 1 – Champions.gdf
[Templates]
Psi (Monster Hunters)
adds()
SK:Psychology
removed (Human)

GURPS Mysteries 4e.gdf
[Templates]
Medical Examiner (Mysteries)
adds()
SK:Diagnosis
SK:Physician
SK:Surgery
removed (Human)

Hard-Boiled Detective (Mysteries)
adds()
SK:First Aid
removed (Human)

Defense Attorney (Mysteries)
Fire Marshal (Mysteries)
Police Detective (Mysteries)
adds()
SK:Psychology
removed (Human)

GURPS Tales of the Solar Patrol 4e.gdf
[Templates]
Engineer
select5()
list()
removed ([Race]) from First Aid

Pirate
Belter
select6()
list()
removed ([Race]) from First Aid

GURPS Ultra-Tech 4e.gdf
Global change of ‘Proector’ to ‘Projector’

Package Updates

* Core Supplemental (Official Character Sheet)

UserNotes and Description tags for traits are now more consistantly RTF encoded, which we don’t currently support in this sheet, so they are now converted to plain text.

* Spring Bandit Sheet

UserNotes and Description tags for traits are now more consistantly RTF encoded, which we don’t currently support in this sheet, so they are now converted to plain text.

Package Updates

GURPS Dungeon Fantasy 3 – Next Level.gdf
[TEMPLATES]
<Racial Templates, Racial Templates – Dungeon Fantasy, Racial Templates – Dungeon Fantasy – DF3 Races>
Dwarf (Dungeon Fantasy)
removed incorrect “PE:Feature: Armor isn’t interchangeable with human armor.” line from creates() as it is correctly in features also.

GURPS Transhuman Space Changing Times 4e.gdf
Updated. Thanks to Phil Masters.

GURPS Transhuman Space Shell-Tech 4e.gdf
Updated. Thanks to Phil Masters.

Package Updates

* Export to Foundry VTT

Update includes Description (optionally, but on by default), User Notes, and VTT Notes in the export for traits. Description and User Notes are plain-texted. Cleaned up Options to remove all the unused ones.

Package Updates

* BookCodes.xml

Added GURPS Power-Ups 4: Enhancements.

* TagDefs.xml

Added ’round’ to the list of modifier tags. Adjusted the text slightly for ’round’ in trait tags.

GURPS Dungeon Fantasy 3 – Next Level.gdf
[ADVANTAGES]
<Racial Template Advantages>
#ReplaceTags in “AD:Minotaur Skull Damage Resistance”
gives() inside the initmods() replaced with gives(=skull+nobase to owner::location$)

GURPS Power-Ups 4 Enhancements.gdf
New file added. Thanks to Emily Smirle.

Pyramid 3-120 – The Fifth Attribute.gdf
New file added.

A bit tired (b203)

b203

* Bug fixes

There was a bug in the logic for calculating modifiers, so that rounding UP was restored if every modifier on a tier didn’t set it to DOWN. It’s supposed to set to DOWN if any modifier sets it to DOWN, and keep it that way for the tier. So, for a single modifier it worked correctly, but for cases where there were normal UP modifiers listed after a DOWN modifier, it would be wrong.

Some users have reported GCA crashing when one or more of the support files (usually an XSD file) is missing. GCA can still function without those files, so crashing is a pretty negative outcome. I have added checks to ensure those files exist before GCA tries to use them. GCA will now also send a message to the Log when it sees that such a file is missing, so that the user can try to Check for Updates to possibly restore it. (Of more concern is why those files are going missing. I suspect there may be a bug in the Updater that is deleting them but not updating them when it runs. I will be looking into that.)

When using Save as Template for saving a character as a template in a book file, GCA should now correctly *not* include traits that are already components of other traits that will be added. For example, if you included the Quadruped template on your character, and then saved it as a template, GCA would include Quadruped as an item to be added, and also include all the components of Quadruped as items to be added. That will no longer happen.

* Miscellaneous

Swapped the order of processing techlvl -> TL and TL -> TL to do TL first. This way, custom items can keep the standard techlvl() tag for when items of that type become available, and use tl() to set the TL of the specific item. GCA will no longer attempt the techlvl -> TL procedure if TL is already set for the item.

I’ve extended the #any and #none keyword support for name extensions to bonus targeting. So you can now target a bonus to a trait with a name extension of (#any) to target any variant of that name, and (#none) to exclude any that have a name extension. As with other such uses, you can use ‘of’ and ‘except’ clauses as well, so you could target a bonus to any Animal Handling specialty except Big Cats by using gives(+1 to SK:Animal Handling (#any except “big cats”)), or you could target only Big Cats by using gives(+1 to SK:Animal Handling (#none except “big cats”)). This extension also works with Conditionals.

Added ‘displaycost’ to the list of tags removed from trait tags when they’re being created from system tags or being resynced.

I’ve added the ability to change the order of your character’s log entries on the Campaign Log. You can now drag entries to new positions in the list, or you can use Ctrl+Up or Ctrl+Down to move the current entry up or down a position.

* BookCodes.xml

Added GURPS Power-Ups 4: Enhancements.

* TagDefs.xml

Added ’round’ to the list of modifier tags. Adjusted the text slightly for ’round’ in trait tags.

Version 5.0.202 Released

GURPS Character Assistant 5.0.202.0 has been released. Get the updated installer from your Warehouse 23 downloads page.

This update includes all the changes mentioned in Build Notes posts since the last Release.

Note: You get the updated installer by re-downloading GURPS_Character_Assistant.zip from your Warehouse 23 account, and running the gca5setup_5.0.202.release.exe program that it contains. There is no separate update-only installer, you have to download and reinstall the program. It will not overwrite your personal data, it will overwrite your installation of GCA with the new and updated version.

Functionally more bits (b201)

b201

You can now check if the character is currently processing a randomized template by checking char::random or char::randomized. It will return “1” if it is and “0” if it is not.

* Book Processing

I found a number of checks for duplicate values that were being done inside the check for Verbose status for error reporting. Those checks needed to happen outside that check since only the reporting matters for Verbose, not the safety of the data and avoiding a crash. Fixed the ones I found, which were related to duplicate hit location tables or duplicate notes within those tables.

* TL

GCA did not assign a TL to equipment items. These items had a techlvl() tag showing when they typically became available, but GCA didn’t create a TL tag for them when taken by the character. Now it does. The tl() assigned will be the techlvl() if its higher than the character’s TL, or the character’s TL if it’s higher than the techlvl() (as it is assumed to be a product of the character’s TL). This shouldn’t affect much of anything within GCA itself, but may affect malf numbers for a small number of items where GCA calculates those. (If the character’s TL is easily determinable as a numeric value, that numeric value is used for comparison, if not, it’s simply assigned to the tl() because GCA can’t do any of the other checks.)

With the change to always try to generate TL for equipment items, this would also result in the default Display Name routine always appending /TLx to every equipment item. That’s likely far more annoying than useful, since most characters use items manufactured for their TL. I have therefore added an option to show the /TLx appendix on equipment names, and it is Off by default. You can turn it on in Options on the Lists panel of the the Program Options tab.

* Bonuses

Gains bonuses (+X to me from Y) had an issue where any ‘from’ reference that didn’t use a prefix type and was not found, such as “+1 to me from hell”, would result in a bonus of +1. That should now be fixed.

I have added support to Gains bonuses for ‘from’ references of ‘char’ for the character itself, and of ‘parent’ for children and/or template components.

Gains bonuses should now be able to gain bonuses from the tags of ‘from’ references, such as points, level, or whatever. For example: gives(+1 to me from char::example) would give a bonus equal to the value of the ‘example’ tag on the character (or 1 if it is not a numeric tag value, while a char:: tag that is empty or doesn’t exist would result in a bonus of 0). You can also use this with traits, such as gives(+1 to me from SK:Acrobatics::points), which would give a bonus of +1 per point spent in the Acrobatics skill to the trait. Same for using a ‘from parent’ construction, such as gives(+1 to me from parent::points) which would give +1 per point spent on the parent trait.

* Functions

GCA will now remember the last value returned for the @Roll, @Random, and $RollValues functions. Bear in mind that these saved results will change each time these functions are called, so they’re only really useful inside the same operation, such as in an @if, and only reliable even then if you only use one of that function in the evaluation.

Note that all of these saved values are universal to GCA, *not* to the character or the trait.

To get the last returned value, use one of these functions. Note that they don’t have parameters, but you still must include the ().

@LastRoll()

Returns the last value returned by the @Roll() function.

@LastRandom()

Returns the last value returned by the @Random() function.

$LastRollValues()

Returns the last value returned by the $RollValues() function.

@NamedRandom(name, value1 [, value2] )
@NamedRoll(name, number [, sides] )
$NamedRollValues(name, number [, sides] )

These functions each work the same as their unnamed counterparts. The only difference is that you can name the roll by specifying the name as the first parameter. By using these functions and specifying unique names, you can retrieve them later by name and be less concerned that another use of the unnamed functions will overwrite the values.

These named versions do *not* place their results into the the LastX values used by the unnamed functions, so you can’t retrieve a value generated here with the LastX() functions (but you can with the LastNamedX functions). This allows you to use named results for longer storage and unnamed ones for transitory values without one messing up the other.

Note that all of these named results and their stored values are universal to GCA, *not* to the character or the trait.

@LastNamedRoll( name )

Returns the last stored/returned result for the given name. Returns 0 if there is no such name.

@LastNamedRandom( name )

Returns the last stored/returned result for the given name. Returns 0 if there is no such name.

$LastNamedRollValues( name )

Returns the last stored/returned result for the given name. Returns “0” if there is no such name.

@HasModIncludesText( text )

Searches the item’s modifiers (name and name extesion only, and each is checked separately) for all those that include the text specified, and returns the highest level among those that include it. Returns 0 if none found.

@HasModIncludesTextMin( text )

Searches the item’s modifiers (name and name extesion only, and each is checked separately) for all those that include the text specified, and returns the lowest level among those that include it. Returns 0 if none found.

@HasModWithTag( tagname [, tagvalue] )

Searches the item’s modifiers for all those that include the tag specified, and returns the highest level among those that match the tagvalue given (ignoring case as usual). If no tagvalue is given, any value for the tag counts as a match. Returns 0 if none found. (This performs text matching, so “0” matches “0” but does *not* match “0.0” or any other variation that would match numerically. See also @HasModWithTagValue.)

@HasModWithTagMin( tagname [, tagvalue] )

Searches the item’s modifiers for all those that include the tag specified, and returns the lowest level among those that match the tagvalue given (ignoring case as usual). If no tagvalue is given, any value for the tag counts as a match. Returns 0 if none found. (This performs text matching, so “0” matches “0” but does *not* match “0.0” or any other variation that would match numerically. See also @HasModWithTagValueMin.)

@HasModWithTagValue( tagname [, tagvalue] )

Searches the item’s modifiers for all those that include the tag specified, and returns the highest level among those that match the tagvalue given. If no tagvalue is given, any non-zero value for the tag counts as a match. Returns 0 if none found. (This matches tagvalue with candidate tag values numerically, so all values will be converted to numbers before comparisons are made. Tags with non-numerical values will evaluate to zero. This is a direct conversion, not a math-enabled Solver evaluation. See also @HasModWithTag.)

@HasModWithTagValueMin( tagname [, tagvalue] )

Searches the item’s modifiers for all those that include the tag specified, and returns the lowest level among those that match the tagvalue given. If no tagvalue is given, any non-zero value for the tag counts as a match. Returns 0 if none found. (This matches tagvalue with candidate tag values numerically, so all values will be converted to numbers before comparisons are made. Tags with non-numerical values will evaluate to zero. This is a direct conversion, not a math-enabled Solver evaluation. See also @HasModWithTagMin.)