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