Fixed some bugs in the new stuff for the Protection box in Compact View.
Protection box’s Copy to Clipboard option now copies the entire graphic area (except the buttons in the header).
The Protection box will now add a message between the paper doll and the armor list if the user has enabled Allow Deflect Stacking or Allow Fortify Stacking on the character.
Made attack modes a separately managed collection of objects within a trait. This has upsides and downsides, but obviously I feel the upsides outweigh the downsides. This means various places had to be updated or modified. For sheet authors, I tried to retain all previous methods of access as well as allowing for the new system. In addition to the old access methods, accessing mode data can now be handled through the ModeManager class that all traits now have (Modes as ModeManager), and individual mode data can be accessed through that or by getting a single mode as a Mode object.
Note: Because of the new Modes system, notes() and itemnotes() are explicitly mode enabled tags. This means a Mode will be created if a notes() or itemnotes() tag exists, even if no other mode data applies.
The ItemNotes system implemented last build no longer applies given the new Modes handling, so it has been removed. Equivalent functionality has been included in the Mode object.
Adjusted the Edit Trait dialog weapon mode displays; they now allow for setting DamageBasedOn individually within them, and will display ItemNotes() if present.
For the record, these are all the currently supported, GCA-handled Mode tags (also available from the ModeTags collection in GCACharacter):
- “mode”, “notes”, “itemnotes”, “damageistext”, “minstbasedon”, “damagebasedon”, “lc”
- “acc”, “armordivisor”, “break”, “damage”, “dmg”, “damtype”, “minst”, “parry”, “radius”, “rangehalfdam”, “rangemax”, “reach”, “rcl”, “rof”, “shots”, “skillused”
- “characc”, “chararmordivisor”, “charbreak”, “chardamage”, “chardamtype”, “charminst”, “charparry”, “charradius”, “charrangehalfdam”, “charrangemax”, “charreach”, “charrcl”, “charrof”, “charshots”, “charskillused”, “charskillscore”, “charparryscore”
Adjusted calculation of charlocation() so that there will now always be a charlocation() tag if there was also a location() tag.
Added code to handle partial coverage for armor items, finally making use of the coverage() tag. This system will use charlocation() and coverage() to generate new charcoverage() and locationcoverage() tags, and to rebuild the charlocation() tag if it had mulitiple entries for the same body part. The system takes tags that might look like this: “location(Skull, Face, Face, Face),coverage(1, 1/6, 2/6, 1/6*)” and should end up with something that looks like this: “charlocation(Skull, Face),charcoverage(1, 4/6*),locationcoverage(Skull, Face (4/6*))”. For technical reasons, coverage() may have values that are empty or are some other whole value to represent full coverage; any partial coverage should be in the form of X/6.
I also created a correction routine to fix location() values that may have partial coverage values within them. For example, location(Skull, Face (1/6)), which aren’t valid within GCA itself, but are generated by some of the existing armor builder items. GCA will see and fix these so that they are correctly formatted location() items without the partial coverage values. If a coverage() tag already exists, the coverage values in location() are discarded; if no coverage() exists, GCA creates it from the values in the location() tag.
Updated the Protection dialog, Layers dialog, and the Protection box to show the new locationcoverage() value where applicable.
Touched a lot more places to update code and strengthen type references.
Updated the FootnoteManager to allow for Alpha footnote markers. Also allows for optionally enclosing the marker in parens, braces, or brackets when returning the FootnoteWithMarker() or FootnoteBlock(). This did change the interfaces a bit, so plugins will need to be recompiled.
- Public Function FootnoteBlock(Optional ByVal Separator As String = vbCrLf, Optional ByVal MarkerEnclosure As FootnoteEnclosureStyle = FootnoteEnclosureStyle.None) As String
- Public Function FootnoteWithMarker(ByVal Index As Integer, Optional ByVal MarkerEnclosure As FootnoteEnclosureStyle = FootnoteEnclosureStyle.None) As String
Updated ColorBlockSheet to use LocationCoverage() in the Protection section.