VASSAL 3.6 Release Notes

This article will give you a quick tour of the new features in VASSAL 3.6, as well as listing some significant player-facing bug fixes.

(NB: The release notes will be fleshed out while 3.6 is in beta. More to come...)

= Major New Features =

Folders
The Editor now supports folders inside of most components that accept "children". When adding new subcomponents you can also choose to "Add Folder" which will make a folder into which any valid subcomponents of the parent can be placed. In the example shown, folders are used inside of the [Game Prototype Definitions] segment to organize the prototypes.



Drag and Drop
Components in the Editor window can now be "dragged and dropped" from one valid location to another.

Duplicate
You can now duplicate a component in the Editor, which will make a second identical copy of it at the same location in the tree. If you duplicate a folder or a component that has children (subcomponents), then all of the child items will be duplicated as well.

Insert
The Editor now allows you to Insert an item at the currently selected location (as opposed to the traditional Add which adds an item at the bottom of the current list of subcomponents). This can be useful for adding to the middle of a long list of pieces, prototypes, or other components.

Mats & Cargo
You can now add a "Mat" trait to a game piece to mark it as a piece that other pieces are placed upon. If those other pieces are marked with a "Mat Cargo" trait, then when you select the Mat the Mat Cargo pieces on it will also become selected--this means e.g. that if you drag the Mat around, then by default all the Mat Cargo pieces will come with it in the appropriate relative positions. Mats & Cargo can also be set to maintain relative facing (i.e. if you rotate the mat the cargo will be rotated as well).



Basic Name trait
You can now define the $BasicName$ property for a piece defined in a prototype by adding the new Basic Name trait -- this allows you to safely leave the Basic Piece member completely blank in an individual piece definition (e.g. in a Game Piece Palette, an At Start Stack, or a Place Marker trait or Replace With Other trait). The $BasicName$ property will be filled with the value from the Basic Name trait, ignoring any name (blank or otherwise) in Basic Piece. 

Scaling Factor for Layer and Non-Rectangular Traits
Both Layer traits (i.e. images) and Non-Rectangular traits now come with a built-in Scaling Factor field. This allows you to more easily adjust the relative sizes with which your various pieces are drawn, which can be particularly useful when boardgame companies supply source art that is not "in scale" with other parts of the game. 

Does Not Stack improvements (DOES stack!)
The "Does Not Stack" trait just got interesting... it can now be told that in fact it DOES stack! This allows the creation of pieces that take advantage of some of Does Not Stack's other features that have accumulated over the years (such as the ability to ignore the map grid) while retaining the standard VASSAL stacking behavior.

A description field is also provided, and you'll notice in the editor that the key features of an individual Does Not Stack trait are better summarized in the traits list for a piece. 

Mask Inset Improvements
The Mask trait has a new centered Image Inset option that makes the full face of the card or piece visible to the owning player, while insetting it slightly into the "masked" card back as a reminder that the card or piece is currently hidden from the other players.

Simply choose Image Inset in the Display Style combo box at the bottom of the Mask trait's definition. 

Rotate Directly To Facing/Angle
The Can Rotate trait now includes a key command to rotate the piece directly to a specific facing OR angle. Since the facing-or-angle is chosen via an expression, you can use a property in your expression to facilitate rotating however you like.

In the example shown at right, I set the ForceRotate Dynamic Property to where I want to rotate the piece, and then I issue the ForceRotate key command to tell the piece to rotate to that direction.



Miscellaneous Minor Improvements

 * Better trait one-line summaries in editor (auto-populates with information from trait's major fields)
 * Folder summary in Editor automatically includes its description field
 * While double-clicking to open component in Editor, holding Alt, Shift, and/or Ctrl affects the location the new window opens
 * The Action Button trait includes an option to have the button open the piece's right-click context menu
 * Report Action trait has a checkbox to override Global Key Command suppression of individual reports
 * Return-to-Deck trait allows target deck to be specified as an expression
 * Send-to-Location trait has new options for sending to pieces-selected-by-properties: cycle and nearest
 * Send-to-Location trait "To Grid Location" option now includes offset options
 * Added $numericTotal$ and $result#$ options to standard Dice Button report format
 * Mouseover Stack Viewer now allows layer filters to be combined with Property Match filters. (Before it was one or the other)
 * Newly added Layer traits will now default to 'Always active'
 * A Map window's "Mark Unmoved" button now accepts a hotkey and a report format
 * Game Piece Palette allows setting of default width for "docked" Game Piece Palette
 * When editing an IrregularGrid (e.g. in a Zone), start the map view somewhere near the grid or its parent Zone
 * Expression audit trails preference - improved error reporting/debugging when Beanshell expressions fail.
 * Default UI font size can be overridden in preferences
 * Preference to reverse left-to-right order counters are shown in Mouseover Stack Viewer
 * Added Global property MapName_isVisible for each Map to allow checking if Map is currently open
 * Deck Sort Key Command component to allow sorting of cards in a Deck by properties via menu or hotkey.
 * CountStack added to beanshell to count pieces in current Stack

Native Builds
There are now native builds for 64-bit ARM Windows and 64-bit ARM MacOS. For best performance, we recommend using a native build for your system and architecture if one is available.

If you were experiencing poor rendering performance with an Apple Silicon Mac, you should see improved performance with the 64-bit ARM build.

Removed & Deprecated Code
Some code which has been deprecated for more than a year has been removed. On loading a module containing custom code which uses removed or deprecated code, a warning dialog is now displayed immediately (instead of at the point when the deprecated code is used, as in 3.5).

= Changes in 3.6.0-beta1 =

Feature Additions

 * 10276: Expose property if we're currently drawing Counter Detail Viewer
 * 10273: Mat Cargo can be set to detect mats way from their exact center
 * 10248: Invisible trait - Option to disable auto-report of moves
 * 10075: Scaling factors for Layers and Non-Rectangular
 * 10066: Mats & Cargo - Cargo pieces stay attached to Mat piece when moving.
 * 10034: Added option to Mass Piece Loader to not create empty levels in layers when there is no matching image
 * 10021: Added sub-folders to group components under Module, Maps, Decks, At-Start Stacks, Prototypes and Global Properties folders
 * 10002: Add Hotkeys to hide and show map windows. Existing show/hide hotkey field is now always visible. Allow changes to hide/show Map button settings without needing Editor restart
 * 10001: Inventory window allows a hotkey for Refresh
 * 9998: Editor now has Drag and Drop support
 * 9997: Can duplicate and insert components in Editor, not just add to bottom
 * 9988: CountStack added to beanshell to count pieces in current Stack
 * 9987: ReportState checkbox overrides Global Key Command suppression of individual reports
 * 9979: Add Deck Sort Key Command component to allow sorting of cards in a Deck by properties via menu or hotkey. Add Deck Send Key Command component to provide additional commands to send contents of one Deck to another via menu or hotkey.
 * 9973: Deck supports configurable strings for Draw Multiple, Draw Specific, Face Up, Face Down
 * 9972: Ability to specify Return-to-Deck target as an expression
 * 9917: Global Options can be configured to let toolbar items on closed windows accept global hotkeys
 * 9912: Add Global property MapName_isVisible for each Map to allow checking if Map is currently open
 * 9901: Preference to reverse left-to-right order counters are shown in Mouseover Stack Viewer
 * 9864: Improved translation features (Global Translatable Message component, Translatable Message trait, exposing current language/locale as property)
 * 9549: Default UI font size can be overridden in preferences
 * 4542: Added 'Stack Normally' option to 'Does Not Stack' trait
 * 4533: Make grid center dot display independent of grid display

Bug fixes

 * 10326: Add option to disable OpenGL FBOs on Macs
 * 10301: Double max heap and retry when image tiler runs out of memory
 * 10294: Can Rotate traits no longer lose any pre-defined starting rotation when editing a Piece Slot
 * 10187: Duplicate key and menu item for Editor menu
 * 9993: DeckPosition was reporting 1 higher than the actual position
 * 9884: Fix and improve module validity checking
 * 6130: Grid Numbering dialog can appear blank when grid size is very large

Other improvements

 * 10286: Add removal/deprecation checker and remove anything deprecated a year ago
 * 10277: When editing an IrregularGrid, start the map view somewhere near the grid or its parent Zone
 * 10272: Don't auto-name new regions a long string
 * 10259: 64-bit ARM builds for Windows and Macs; switched bundled Java to Zulu
 * 10228: Upgrade to Launch4j 3.14
 * 10041: Newly added Layer traits will now default to 'Always active'
 * 10015: Remove ?s from checkbox preference strings
 * 10011: Add Scrollbars to Prefs Dialog when needed
 * 9999: First 'advanced search' on a module defaults to all boxes prechecked
 * 9992: Removed ignored 'button tooltip' field from Turn Tracker config
 * 9989: Less verbose window titles for sub-windows
 * 9975: Deck reports now suppressed during GKC report suppresssion
 * 9913: Increase number of default zoom levels in new Map Zoom Capability
 * 9254: Expression audit trails preference - Improve error reporting when Beanshell expressions fail. Suppress 'Bad Data in Module' errors generated by counters in Game Piece Palette.

= Changes in 3.6.0-beta2 =

Bug fixes

 * 10390: NPE in GameModule.getProperty after deleting the Map from the owning Map widget
 * 10387: 'Centre on Opponents Moves' functionality should ignore movement by Invisible units
 * 10386: Audit Trail reporting is not reporting trait or piece information for Return to Deck trait when invalid Deck specified
 * 10381: Replaying a log step can cause Deck to become corrupted
 * 10375: NPE in EnumeratedPropertyPrompt.getNewValue
 * 10371: Reset the Zone Editor title to match the Zone being edited
 * 10359: ClassCastException: DeckGlobalCommand cannot be cast to Auditable
 * 10357: Return To Deck Deck name can be lost when pre 3.6 module is edited using 3.6
 * 10351: Checkbox preference default value is ignored
 * 10341: Symbolic Dice Button tooltip is overwritten by description text
 * 10226: Force Game Piece Image names to be valid file names ending in .png
 * 10095: Definition of Player Sides - Retire/Switch Button image not showing in editor

Other improvements

 * 10392: HTTP requests for server status should follow redirects
 * 10383: Update all site URLs for new site and HTTPS
 * 10337: Bring Reference Manual up to date

= Changes in 3.6.0-beta3 =

New features

 * 10486: Better obscurable option for insetting
 * 10484: Mats have more deselection options; double-clicking delesects cargo
 * 10468: Refresh Counters support for Mats and Cargo
 * 10454: Game Piece Palette allows setting of default width for "docked" Game Piece Palette
 * 10412: Double the max heap for modules which run out of memory during loading
 * 10394: Add a Key Command to Can Rotate trait to rotate directly to a facing specified by an expression

Bug fixes

 * 10476: Editor: Inserting text into middle of Key Command doesn't work
 * 10474: Movement traits need to update cargo's mat after movement before applying apply-on-move keystroke
 * 10405: Log replay of delete command behaves differently after load of sebsequent log file
 * 10402: NPE when trying to create new P2P Network
 * 10400: Custom preferences in Global Options incorrectly use property name, not description
 * 10404: Catch FileNotFoundException when reading prefs files
 * 10399: ThrowableUtils.throwAncestor throws wrong object; throwMe uses wrong constructor

Other improvements

 * 10466: Reference manual missing description of restrict counters to Deck option
 * 10446: Removed more items deprecated for over a year
 * 10445: Improved browser launch support
 * 10432: Store the tile cache in %LOCALAPPDATA% instead of %APPDATA% on Windows
 * 10430: Upgrade to Java 17 for Windows, Mac packages

= Changes in 3.6.0-beta4 -

New features

 * 10584: Map "Mark Unmoved" button now accepts a hotkey and a report format
 * 10582: Basic Name trait - facilitates creating pieces entirely in prototype (alternative way to fill BasicName property)
 * 10576: Send-to-Location new options for pieces-selected-by-properties: cycle and nearest
 * 10558: Added Current Mat GKC FastMatch option
 * 10552: CounterDetailViewer - can combine layer filters with property match expression
 * 10551: Action Button option to open right-click context menu
 * 10509: Add $numericTotal$ and $result#$ options to standard Dice Button report format
 * 10505: Enable Offset options to work with the Grid option in SendToLocation

Bug fixes

 * 10607: P2P address book entries with spaces in address cause StringIndexOutOfBoundsException
 * 10604: Match blank passwords less eagerly
 * 10603: Action Buttons should not respond to Shift+Click, Ctrl+Click, Alt+Click, Cmd+Click
 * 10602: Don't unselect piece about to get context menu with Ctrl+RightClick
 * 10601: Flares weren't responding to Cmd key on MacOS
 * 10599: map can be null during GameRefresher
 * 10596: Protect CounterDetailViewer from designers who set the drawing scale to 0.0
 * 10595: Fix crash ending logfiles- beginningState shouldn't be allowed to be non-null when outputfile is null
 * 10594: Fix crash when copying Toolbar Menu to a newly created map
 * 10592: Corner case boardpicker exception with multiple boards being moved around
 * 10591: Protect from GKCs that get sent when no game ever started
 * 10589: Fix Mat send-to-location bug (which created problems in Undo & multiplayer)
 * 10585: Movement Trail "initial visibility" and bounding box caching bugs
 * 10572: Fix Drag Threshold preference to work correctly
 * 10563: Trait editor Paste button is now always enabled
 * 10555: Fix mat save/load to reconnect mats and cargo
 * 10504: Text label shape, bounding box doesn't resepect rotated labels
 * 8949: IllegalArgumentException in GameState.getRestorePiecesCommand due to bad compartor

Other improvements

 * 10597: Selection Highlighter expressions now found by search
 * 10593: Add description to Prototype Definition
 * 10590: Better ConfigureTree summary on PieceSlot containing a BasicName-using piece
 * 10587: Description field & better auto-summary for Does Not Stack
 * 10586: Better defaults for Send To Location offsets
 * 10578: MatCargo now provides OldMatOffsetX and OldMatOffsetY properties
 * 10569: Better trait one-line summaries in editor; Folder summary includes description
 * 10565: While double-clicking to open component in Editor, holding Alt, Shift, and/or Ctrl affects the location the new window opens
 * 10557: Added MatCargo to manually attach/detach from mats
 * 10547: Bring fastmatch $$ variable handling into line with standard Global Key Command match expression handling
 * 10543: Initialise OldMat related properties in a Placed marker
 * 10519: Improve Mat Movement
 * 10510: More robust Java version check for Linux