Monthly Archives: December 2016

Bits of confusion


* Various

Added an options menu (gear icon) to the library panel (used in the Unified and Sheet views) in the title bar of the library pane. Right now, the only option is Reload Library, which will do that.

Also added a Reload This Library option to the Library button on the toolbar.

Hooked up and enabled the Modifiers and Edit buttons for the currently selected traits in the Select Items dialog.

Added a CollectionKey property to the Category object. Changed all calls in the program using a key for a category to use it.

When GCA can’t find one of the files in a specified library, the dialog it puts up to let the user specify the replacement file should now actually be a useful file browser.

* #ChoiceList

Expanded the number of altXlist() up to alt9list().

Added the new tag autoaccept() to the list of tags for #ChoiceList. If autoaccept() has any content, then GCA will simply accept the default values for the #ChoiceList without bothering to show the dialog to the user.

* Files

Finally incorporated into GCA 5 Changes.GDF the changes Emily made to various Damage Resistance modifiers to make them compliant with targeted locations for the DR.

Some bits compiled, some bits not


* Various

Alt Attacks panel elements in Simple Edit should not be randomly visible at inappropriate times any longer.

Fixed @HasMod, @ItemHasMod, and @OwnerHasMod functions, so that they’ll look for modifiers that have name extensions using either the old “name (name ext)” format, or the newer “name, name ext” format that modifiers display with now.

Added FullNameOldStyle property to GCAModifier, which returns the full name of the modifier in the old style of “name (name ext)”.

When building the list of applicable symbol images for a trait, the trait should no longer allow the same symbol to be added more than once. (Allowing that to happen was an oversight.) This is based on the given symbol name, not the image used.

When looking for body images created by data files, if full path info isn’t given, GCA will now look for them in the user image bin first, before the system image bin.

SystemTraits now implement ITaggedObject.

* Flag Symbols

AKA those little icons marking supernatural, exotic, etc.

Greatly expanded support for how these can specify criteria, which required creating a new system to handle it. That should now be working.

The basic specification for symbols in data files is the same as it was:

name of symbol , image file , criteria

The criteria support has greatly improved. Where before criteria would be structured like this:

traittype where tag comparison tagvalue

such as

Ads where cat listincludes Mental

allowing only for a single comparison statement after the ‘where’ keyword, you can now specify as many comparisons as you need to be specific, even using and/or symbols and grouping parens if necessary. The TraitType declaration is fixed, however.

So, now you can expand everything after the ‘where’ keyword, so you could have that portion of the criteria be something like this, for example:

tag compare tagvalue | tag compare tagvalue , tag compare tagvalue , ( tag compare tagvalue | tag compare tagvalue )

Basically, it’s handled like Needs, where it’s designed to break apart criteria on OR markers first, so if you want to do a simple OR selection among a list of AND items, enclose them in parens as you’d do in a Needs.

In the pseudo-example above, GCA would see the example as two major OR blocks, either of which couuld be True for the symbol to be applied. They are:

tag compare tagvalue OR
tag compare tagvalue , tag compare tagvalue , ( tag compare tagvalue | tag compare tagvalue )

Notice that the second is much longer, and includes a sub-clause OR in parens.

You can also use & or + as the AND symbols, instead of just commas, in case you might prefer that. Sometimes that might be more clear. Unfortunately, the | is the only symbol for OR, and you can NOT use the words AND or OR instead of the symbols. So, the above example could also be written like this:

tag compare tagvalue | tag compare tagvalue & tag compare tagvalue & ( tag compare tagvalue | tag compare tagvalue )

In addition to the expanded structure in general, the comparisons that are allowed have been expanded as well, so you can now use any of the comparisons shown here:

tag { = | > | < | <> | >= | <= | is | isnot | includes | excludes | listincludes | listexcludes } tagvalue

Remember the usual rules, and enclose tagvalue in quotes or braces if it includes commas or spaces.

* Equipment

Addressed a crash-bug related to equipment costs and modifiers that use those costs to grant bonuses to other things.

Equipment items have a couple of new tags available, which might not be necessary, but seemed potentially useful:

* preformulacost() and preformulaweight() include the cost and weight of an item as calculated up to the point just before any given costformula() or weightformula() is evaluated.

* prechildrencost() and prechildrenweight() contain the cost and weight values for an item before any children are calculated and included into the cost and weight.

* postformulacost() and postformulaweight() contain the cost and weight values for an item after any existing formulas for those values may have been evaluated. Right now, this amounts to exactly the same values as prechildrencost() and prechildrenweight().

* Loadouts

Added two new functions to LoadOutManager:

Public Function UnassignedItems(OwnerChar As GCACharacter) As Collection
Public Function UnassignedItemsAsLoadout(OwnerChar As GCACharacter) As LoadOut

These do similar things, just the first returns a simple Collection containing all unassigned items and the second returns a basic LoadOut that contains all unassigned items (named “All unassigned items”), Note that the LoadOut returned in this case is not considered ‘owned’ by LoadOutManager, and is therefore not managed by it; you can’t use LoadOutManager functions to work with it, although you can of course use the functions of the LoadOut itself.

* Plugins

The first draft of support for ‘compilable’ plugins is now working. This will take a source code file, and compile an assembly from it in memory, from which it will then create an instance of the related plugin. This will allow for shipping a plugin as a source file (and an XML file that gives more info to the compiler), which can then be compiled on the user machine when loading plugins at startup. (NOTE: After testing of the release build, an exception gets thrown related to being unable to write the DLL, which is supposed to be in memory, so that’s odd. However, switching things to write the DLL to disk does appear to work, so that’s now being done; the DLL is saved in the appdata\plugins folder. It will still re-compile such plugins every time GCA starts.)

Compilation itself seems to go pretty quickly, so I don’t forsee a speed issue. It also appears to work fine on my non-administrator test account.

If things seem to work out with this in larger scale testing, I’m really hoping this will allow for shipping sheet plugins that don’t have to be recompiled every damn time I update the ComponentOne report engine that I use for printing.

An example of this is included in the installed GCA plugins folder, in the \testOfficialCharacterSheet\ folder. This has two source code files and a compile.xml file. If things are working, GCA will load these, compile them, and you’ll see an additional character sheet called “TESTING GURPS 4th Edition Official Character Sheet” available for use. It’s exactly the same as the standard official sheet, except for name (and version is 1.0.1.x) and how it was created. (Note that the source code has some additional Imports statements added at the top, because they seemed to be required to make things work during the process.)

The \testOfficialCharacterSheet\ sheet will be replaced as soon as possible with a more useful new sheet.

* Files

Incorporated the entirety of Eric’s GCA5 Symbols library into the \images\ folder. [Eric added to art credits.]

Included Eric’s GCA5 Symbols.GDF and the updated GCA5 Changes.GDF files into \books\.