Author Archives: Armin

Bits of conditional fencing

b76

* Various

Trying out copies of the TL/Speed/Dodge/damage blocks from Classic Attributes on the General Information box in Unified.

Changed output of Windows version in the startup log.

If GCA finds gca5.prefs in its home folder, it will run in “portable” mode.

Added UI for changing User Folders (aka the various Bins) to Options.

Added an option to Options to allow/disallow auto-setting of Tablet mode when GCA starts up.

Added an option to the main window’s View menu to force Tablet Mode on or off. If on, auto-setting on startup is ignored.

Fixed a bug in the code that sets up trickle-thru calculations.

Updated the error messages related to plugins.

* Fencing Weapon

Added support for a fencingweapon() tag. (Maybe it should be lightweapon() instead?) The value for this tag, for current testing purposes, should be ‘char::enclevel’ such as fencingweapon(char::enclevel) because that will force GCA to create an association between the character and the trait, to ensure it’s recalculated when GCA’s encumbrance level changes. The given value of the tag is not used.

When this tag exists, and the character’s encumbrance level is above 0, GCA will create a charfencingpenalty(-X) tag, and add an item to the bonus list for encumbrance level affecting fencing weapon attacks and parries.

GCA will then use the charfencingpenalty() value to reduce the charskillscore() for the weapon. It then adds that value *back* before calculating the charparryscore() based on charskillscore(), and then reduces charparryscore() by that amount.

Net result: charskillscore() is reduced by EncLevel for the attack tables, and charparryscore() is reduced by EncLevel for the attack tables, and charparryscore() is not affected by ‘double dipping’ the encumbrance penalty.

* Conditional Select()

Added support for the new conditional() tag in the Select() structure. The conditional(), if it exists, must evaluate to True (a non-zero result) in order for the Select() to be processed.

	triggers(_
		select(_
			text("Select with Conditional. You'll never see this one."),
			conditional(@sametext("alpha", "bravo")),
			itemswanted(atleast 1),
			list(_
				DI:Alcoholism, 
				DI:Stubbornness, 
				DI:Workaholic_
				)_
			)_
		)

In this example, @sametext(“alpha”, “bravo”) evaluates to 0, so it would not be shown. Conditional() is, obviously, math enabled, so it supports the full Solver functionality to determine if the conditional() applies.

A bit of a grab bag

b75

* Bug Fixes

In some peculiar circumstances, certain updates of the lists in the Classic View were throwing exceptions. I have rearranged the order of operations in the code a little bit to address this issue.

When Print Previewing a sheet, the flag telling the sheet whether or not it was in Sheet View should now be set correctly.

* Other

Added a Traits dialog. This is currently available from any trait list box in Unified view via the gear icon drop-down menu.

Changed the way some things worked in the Classic trait lists, so that they could be re-used in the Traits dialog.

Added support for a new PermanentButton ActionType in Sheet View, which allows for creating buttons on the character sheet that remain active and usable at all times.

* Data Files

Updated to include Eric’s current update batch.

* ColorBlockSheet

Updated to make use of the new PermanentButton ActionType. This now puts buttons into the Header to call up the Traits dialog for the specified type of trait.

* Plug-ins

I have updated the third-party controls. This breaks sheet plug-ins, which will have to be re-compiled against the new versions. All included plug-ins have been updated.

From past experience, updating the third-party controls can also lead to strange behavior in GCA if some things are a little incompatible. This might affect the tab controls, the grids in Advanced Edit and maybe a couple other things.

It appears the updated controls also have more dependencies on other libraries from the vendor, which has increased the installation size some.

Grab bag of bits and bugs

b74

* Bug fixes

Addressed an issue related to extremely large numbers being returned using exponential notation, and GCA not handling that correctly internally when dealing with those values within an expression.

Hitting Enter in the editable column of the classic trait Attribute lists will now commit the entered value.

Addressed a bug that didn’t restore modifier bonuses correctly when canceling out of the Edit Traits window.

The trait tag ‘chareffectivest’ was missing from the tags meant to be handled by the Modes system, and has been added.

* Other

Added an IsMetric function to Character, which returns True if the character has the ‘Metric’ attribute and its value is 1.

GCA’s displays should now show ‘kg’ or ‘m’ instead of ‘lbs’ or ‘yds’ when using the metric settings.

Updated the center column of the Classic View’s Attributes tab:

  • Redesigned to be more in line with the style used elsewhere in the program. This also allows for more responsive resizing.
  • Replaced the Encumbrance and Move sections with the Move box used elsewhere, since it’s already of the right style, and has been reworked to auto-size better.

Rebuilt the Move box used in Unified, Party, and now Classic views:

  • It will now dynamically resize the displayed columns to better fit the data.
  • If necessary, it will now drop columns if the data items are too large to allow everything to fit in the space available. This will not be noticeable to most people in most cases, but if a character has really large values for the Carry row, you’ll see it.
  • There should now be reduced ‘flashing’ during redraws.
  • The Carry row now displays formatted values, should they be large enough where that will matter.

Still improving Party bits

b73

* Party View

Made the entries in the History block two-rows each.

Added the ability to make rolls for traits in trait lists by clicking the new roll button next to each list entry.

Added a Roll History block to character cards to track the rolls that have been made (it will track the last 200 rolls made, if you never Reset them).

Added an Encumbrance & Move block to character cards.

Updated traits list block to allow for attributes in the lists, too.

Added ability for all rolls for the currently selected trait to be highlighted in the roll history.

Columns in the card designer can now be reordered by shifting them left or right using the new buttons for that purpose on the column headers.

Miscellaneous fixes and polishes.

* Other

Updated the text of the log messages slightly when checking for program and library updates.

A specific problem bit addressed

b72

* Party View

Fixed some drawing issues.

* Other

Touched a lot of forms and form-launchers to fix an issue apparently caused by the way Microsoft treats apps like GCA when running in Tablet Mode, which causes dialogs to appear behind the main form. That makes it extremely difficult to proceed with what you’re doing until you can get the dialog back on top. GCA will now recognize if it is launching in Tablet Mode, and will try to compensate for this issue when opening dialogs. It’s not perfect, but seems to work.

A little more GM bits work

b71

* Party View

Rebuilt most of how the Party View components work and are managed.

Redesigned and/or updated a bunch of the UI elements related to the Party View components.

Did a variety of other things related to making Party View work properly.

Added a new two-column option for Attributes blocks. (This is two internal columns within the one Attributes block, not an Attributes block that crosses two columns of blocks on the character card.)

Added a new option to allow a long, thin Attributes block at the top the character card, rather than only offering column block options. (This option is outside the structure that displays the columns of blocks, so it crosses columns in that fashion.)

Added a new option to allow an attack modes block at the bottom of the character card. (This option is outside the structure that displays the columns of blocks, so it crosses columns in that fashion.)

* Bug Fixes

Added space for the extra icon column at the end of the attack mode boxes in Unified View, given the recent change in how these boxes were handled.

* Other

Added a new Fine border width for blocks in Unified View and for blocks within character cards on Party View. Due to the way this is handled by GCA, this means your existing border widths will generally decrease by one category, and you’ll need to reset them if you don’t like that.

Made a slight change to how attack mode boxes triggered editing when double clicking items.

Made a slight change to how the header area is drawn on boxes for trait lists and attack modes in Unified and Party views, which should allow it to retain a cleaner look when using a zoom setting.

A little bit for GMs perhaps

b70

* Features

Added an initial draft of the all new Party View, which is kind of like GCA’s version of a GM control sheet. While it is set up as another character view, it does include data cards for all loaded characters. There is also a designer dialog to allow you to change the functionality and look of the character cards to better suit various needs. You can currently access the designer by clicking the gear icon in the upper right corner of the card title bar. (Note that design changes are currently not saved, and are character specific.)

* Interactive Character Sheets

Added support for two missing ActionTypes for interactive sheets: SheetAction.ChangeScoreInteger and SheetAction.ChangeScoreDecimal. Integer is for skill and spell levels, and Decimal is if you need decimal values, such as for certain attribute scores. This currently uses a standard text box as the data entry element, so entering bad data is possible, but GCA will just ignore the requested change in that case. After data is entered, GCA uses the SetScoreTo method to set the score or level as requested (or to the closest allowed value).

Added support for hitting Enter in text fields (including ChangeScoreInteger/Decimal) to end editing.

* Bug fixes

Addressed some issues with sheets resetting their position to the origin, and resetting zoom level, when editing data in Sheet View.

Fixed how some program settings were being saved/restored. This may affect you depending on your open/closed explainer boxes.

* ColorBlockSheet

Updated to support changing skill levels, spell levels, and attribute scores, using the new sheet action types.

So few bits, so much time

b69

* Other

Created a Library Settings object that will take settings that are set in books, and hold them for applying to characters. (** This is still a work in progress. **) This changeover will take some settings that were universal to GCA and make them character-specific instead, although not all of these options can currently be set separately through character options.

The boxes for melee and ranged attacks in Unified View are now interactive. They’re now based on listboxes, like the trait boxes are. Not much you can do with the new clickability yet, but you can double-click to edit the trait that has the attack mode you double-clicked.

Added a window for when an update is available, rather than cramming info into a message box.

* Build Campaign Book window

Added tabs to allow for dealing with more types of data than just Traits. (Although they’re NOT hooked up yet.)

You can now filter the displayed traits on the Traits tab in the Filter pane using the “ [ = | > | < | <> | >= | <= | is | isnot | includes | excludes | listincludes | listexcludes ] [ , repeat as needed ]” format, which should look familiar, but allows for the chaining of multiple specs separated by commas and adds some comparisons (note tha “=” and “is” are identical in use, as are “<>” and “isnot”. Of course, the data should be in quotes if it includes a comma or space. (Additional filters add additional requirements a trait must fulfill to be displayed.)

* Bug fixes

Fixed text for “Hide the Select Export Sheet dialog explainer” text in Options that was incorrectly displaying as a copy of the text for the option above it.

When adding a new character along with choosing a library, closing the Library Manager with the close box will now abort adding a character entirely.

In the Mismatched Libraries dialog, clicking “Cancel loading this character.” was not actually doing that. Now it does.

Changes in data types being used in calculations due to the new platform result in more decimal places being used in some calculations, which means that some places where math is done no longer automatically round off certain types of division due to limited precision, which affects some things oddly. I have made an adjustment to the modifiers calculation code to address one such instance that was returning unexpected results.

Some bits are more complicated than they look

b68

* Updater

The first draft of the update checker should now be working. It can check for updates to the program and to data files. GCA will do initial processing, but will then shut down and run the GCA5Updater.exe app with elevated permissions to actually do the data updates. GCA5Updater will also run any setup program downloads. Once finished, the updater will re-launch GCA.

Added stuff to Options to support the update checker.

Added a menu option to the Help menu to check for updates regardless of the update checker settings.

* Bug stomping

Fixed a bug related to not removing items correctly from OrderBy lists in the SortedTraitCollection. I believe this will fix the serious parent/child issue that was being encountered.

* Other stuff

Added a few more error traps and validity checks in various places.

Internal plugin reference adjusted slightly to store running versions.

Another teeny little bit

b67

Fixed some drag-n-drop drawing/updating issues resulting from support for multi-line trait items in Unified and Classic views. This only affected drawing indicators and such, not the functionality itself.

Added the initial infrastructure for possible auto-update-checking in the future.

Added some more checks to AddChild/RemoveChild to be much more verbose any time anything unusual happens after loading, in a continuing attempt to track down weirdness.