VASSAL 3.5 Release Notes

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

= New Features =

Flare Command
A "Flare" command has been added, allowing you to draw an opponent's attention to a particular location on the map. By default this is by Alt + Left Click but it can be reconfigured by the module designer. A pulsing circle will appear at the target location on the maps of all other players.

This feature works both in online play and PBEM games being replayed from the log.



Performance Improvements for Global Key Commands


Global Key Commands now include "Fast Match" options which can be used to improve the performance of "slow" Global Key Commands by pre-matching the location and/or a single property value of the target piece. Essentially these run limited but much faster comparisons, to screen out some of the potentially hundreds of pieces needing to be checked for each Global Key Command. Fast Match expressions are optional in that the same comparisons can always be run in the standard "Additional matching expression" field. Judicious use of them, however, can improve the performance of a Global Key Command by 25-33%.

There is some necessary complexity involved with Fast Match, in order to achieve performance optimization. Any expressions supplied in Fast Match fields are immediately evaluated against the source (issuing) piece, but the results of those expressions are then matched to the target piece. For example if a Fast Match "by Property" is selected with the property name field filled with {"Status"} and the property value field is filled with {Rank + 1}, then the Rank property of the source piece will be read immediately, and a number one higher than it will be the value which is then compared to the value of the "Status" property in all potential target pieces. If instead of {"Status"} the property name field were filled with {"Status" + Type}, then the value of Type from the source piece would be used, and if it contained for example "Infantry" then the value of the property StatusInfantry would be checked on the target piece.





MouseoverStackViewer HTML Support and Additional Options
Many new features have been added to the configuration for Mouseover Stack Viewers:
 * A description field so that multiple Mouseover components are more easy to distinguish
 * HTML support and Quick Colors can now be turned on for text portions
 * More control provided over relative positioning, padding and centering of elements.
 * The Viewer can be set up to show more than one card from a deck (e.g. to show the entire discard pile)
 * The Viewer can be set up to show all pieces overlapping the mouse location (rather than only pieces precisely matching the location of the first piece found)



Chess Clocks
VASSAL now includes "Chess Clocks" which can be added to a module and used to facilitate timed online play. To add chess clocks to a module, right click on the main (top) module component in the editor and select "Add Chess Clock Control". Depending on the type of game, different modes of clock display can be selected.

Chess Clocks are not designed to facilitate timed PBEM games, as time usage in these situations cannot be verified in-game.



Editor can Search in Traits and Components
The Editor's "Search" function can now search into Traits and Components. Results from traits and components will appear in the chat log.



Ability to Deselect a Piece with a Key Command
Pieces can now be given a "Deselect" Trait. Activating the key command for this trait will cause the piece to be removed from the current selection (if it was present). Optionally the piece can also be removed from its current stack if desired. This can be useful in games where stacks frequently "drop pieces off".



Simpler Way to Display PDF Files from Help menu
Although it was possible to add a PDF file to earlier versions of VASSAL, it involved a considerable number of steps and "hoops to jump through". The process has now been vastly simplified.



Removing Unused Images From Modules
The Editor's Tools menu now has a "Remove Unused Images" feature, which will search for image files that are not referenced anywhere in the module and give you an option to remove them. Note that it is safe to launch this feature to take a look for unused files, because no images will actually be removed from the module file unless you then explicitly move them to the "Files to remove" column and then click the "Remove Files" button.

Note: The remove images tool will not be able to detect if an image is used by a "Custom Class" that does not register its image names with VASSAL. Custom classes can register their images by calling this method (available from either AbstractBuildable or Decorator):

public void addLocalImageNames(final Collection s)



Console Commands
Vassal 3.5 includes a new console command feature for the chat log, upon which we may expand in the future. Presently it includes commands related to the errorlog and for examining and setting the values of global properties. Console commands do not function in multiplayer games.

For a list of console commands, type "/help" in the chat log. 

= Interface Improvements =

Key Command fields split
Key Command configurers have been split into two fields. The "Command" field is now where you place Named Key Commands; the "Keystroke" field is for real keystrokes. In addition to improving clarity, this eliminates certain quirky behaviors of keystroke fields when typing in new values, and allows cut/pasting into the named command fields. 

Title Bar Shows Most Recent Save/Load
The VASSAL 3.5 window title bar now includes information on the most recent save, load, or logfile accessed. For those who keep multiple VASSAL sessions open at once, this should make it far easier to tell the windows apart. 

Don't Forget To Start Logfile!
A longtime complaint has been "forgetting to start a log file" when beginning a new session. A preference "sort of" existed for this, but it wasn't working very well. VASSAL 3.5 now includes improved functionality to begin any new session (e.g. after starting a game, loading a save file, etc) by starting a logfile. There is a "Don't Prompt Again" button for those who do not care about logfiles (and this function can be toggled on the preferences screen). 

Feedback When Logging
A chat log message will confirm when logging has begun. 

Logfile Comments... They Actually Work Now!
Players previously mystified by the "enter logfile comments" prompt may want to give them another try -- logfile comments are now displayed prominently in the chat log when the file is loaded. The entry dialog has also been improved. 

Side-Switching is Reported
Previously there was no report given at the moment a player "switched sides". It is now reported in the chat log, in bold red text.

<br style="clear:both" />

Native file chooser on Linux
Choosing files on Linux will now use the native file chooser instead of the Java Swing file chooser. This should provide a smoother, more attractive experience. <br style="clear:both" />

Default Filename Extensions
VASSAL will now attempt to complete filenames with default filename extensions (e.g. ".vmod") based on the context.

<br style="clear:both" />

= Additional Preferences Added =
 * Drag-at-edge-of-map width
 * Help button added to Preferences dialog
 * Threshold for centering on opponents move is now configurable
 * Preference to turn off sounds
 * Moved Compatibility-related preferences on the General tab to a new Compatibility tab

<br style="clear:both" /> = Technical Improvements =
 * 13494: Expose version numbers and module strings to module as properties, $VassalVersionCreated$, $VassalVersionRunning$
 * 13314: Expose Module Version number as a Global Property $ModuleName$, $ModuleVersion$, $ModuleDescription$, $ModuleOther1$, $ModuleOther2$
 * 13363: buildFile renamed to buildFile.xml
 * 13219: Added KeyNamer for overriding key names

<br style="clear:both" />

= Miscellaneous Bug Fixes in 3.5 =
 * 13593: Global preferences weren't being written except when prefs dialog was closed
 * 13509: Save As in Editor, if it fails, complained about old filename instead of new filename
 * 13495: Wizard should now set the initial value for next save/load dialog
 * 13336: Fixed incorrect date format in SecretNotesController
 * 12946: Prevent top level required components from being deleted in Editor
 * 4779: Comparison operator >= incorrectly documented as =>

= Additional Improvements in 3.5.0-beta2 =
 * 13813: Simplified communication between Module Manager, Player, Editor
 * 13792: Combined save and log loading; Load Continuation moved from File to Tools menu
 * 13777: Improved workflow of zone editor
 * 13761: Refer to MacOS instead of MacOS X now that MacOS 11 is out

= Additional Fixes in 3.5.0-beta2 =
 * 13825: "Module from older version" check is too strict
 * 13823: Map/Module Global Key Command Description not being saved
 * 13821: SendToLocation does not create Movement Trail points
 * 13783: Non-rectangular trait should remember name of image that created it
 * 13782: Suffix/Prefix fields in Layer trait are not displayed correctly
 * 13781: Bad parameter in Editor.UniqueIdManager.more_than_one message
 * 13771: NPE after cutting/pasting piece palettes in Editor
 * 13755: Chess clock help file is misnamed
 * 4324: Antialiasing RenderingHints not set properly for drawing game components

= Additional Fixes in 3.5.0-beta3 =
 * 13900: MassPieceLoader trait editor was showing standard Embellishment trait editor instead of MPL-specific one
 * 13886: Reinstate removed TilingHandler ctor for VASL 6.6.1
 * 13879: NPE in DieManager ctor
 * 13876: NPE in AbstractMetaData.getVassalVersion
 * 13868: Added description field to (nearly) all traits
 * 13853: Toolbars were missing from non-dockable windows
 * 13811: NPE in DiceButton.setAttribute
 * 13810: Find all parentless Dialogs and JOptionPanes and give them a parent

= Additional Bug Fixes in 3.5.1 =


 * 14035: Multi Action Button and Toolbar Menu lose last item in Menu Entry list
 * 14034: Prevent concurrent updates to preferences
 * 14033: Fast Match forgets fields when added to Maps and Module
 * 14032: Fast Match was picking wrong number of cards from decks
 * 14026: GameRefresher incorrectly deletes off map pieces
 * 14024: NumberFormatException when private server port is empty
 * 14023: Advanced Search displays "hit lists" properly for names/types of prototypes & configurables
 * 14018: Refresh Predefined Setup incorrectly clones at start stacks
 * 14012: Die Roll 'Prompt for values when button pushed' dialog is broken
 * 14008: Unused Images Tool was suggesting some in-use GIFs for deletion
 * 14007: NPE when adding dockable PieceWindow from module extension
 * 14000: OverlappingFileLockException when attempting to write preferences
 * 13999: Fast-Match wasn't working for "Moved" property
 * 13997: Chat log should start display on bottom line even with larger monitors
 * 13996: Sanitize temp file basenames to escape illegal characters
 * 13995: Don't try to write a logfile without having started one
 * 13993: IllegalBuildException on gpIdChecker when using GameRefresher
 * 13992: NPE in Embellishment.addLocalImageNames
 * 13991: NPE when using Game Refresher on predefined setups
 * 13988: ExecutionException when opening a moved or renamed module file
 * 13987: ChessClock buttons with icons had inappropriate height/width
 * 13984: NPE in BugUtils when involved from the Module Manager
 * 13981: NoSuchElementException using Edit All Contained Pieces
 * 13975: ArrayIndexOutOfBoundsException using Edit All Contained Pieces
 * 13973: Missing message for failure to write file
 * 13971: Cannot create new module extensions
 * 13970: DiceButton icons and Mask images incorrectly suggested for removal by unneeded-file-remover
 * 13968: NPE in HelpFile.addLocalImageNames
 * 13967: Search wasn't searching into PieceSlots ("Single Piece" items in Setup Stacks, etc.)
 * 13965: MouseoverStackViewer should not show face-down cards in decks, should not unnecessarily clip underneath text, and should not run off left edge of screen in an overzealous attempt to center-on-cursor
 * 13964: Module extension file extension incorrectly listed as .vext instead of .vmdx
 * 13960: MouseoverStackViewer mis-centering if "draw pieces" wasn't selected
 * 13959: Loads from wizard should add filename to window title
 * 13958: ExecutionException when cancelling a screenshot
 * 13954: Alt-click, Shift+Ctrl-click should not change selection
 * 13944: NPE when loading second game in modules using deprecated Map.mainWindowDock

= 3.5.1 Improvements =


 * 14040: Reference Manual cleanup
 * 14039: Improved/Repaired some tables in online docs
 * 14022: Upgrade bundled Java to 15.0.2+7
 * 14019: Remove confusing Vassal Version column from MM, show based on preference
 * 14015: Added infinite loop protection to PlaceMarker
 * 14011: Search now pre-selects contents of search field when restoring/remembering the previous contents
 * 14009: Standardize remaining dialogs
 * 13977: Alt+Shift now an option for band selection of Does Not Stack pieces
 * 13974: Better window title bars (filename-first like most apps)
 * 13930: Added infinite loop protection to TurnTracker
 * 13742: Action Button trait should arm when pressed, fire on release

= 3.5.2 Bug fixes =


 * 14104: Removing Image from BasicPiece stores image name as '(No Image)'
 * 14086: Fix Alt key for selecting on maps
 * 14078: Undo causes standard counter to become unstacked
 * 14076: SetGlobalProperty editor has incorrect label for maximum value field
 * 14075: BoardPicker and LOS_Thread could sometimes intercept commands for wrong objects
 * 14074: Flares sometimes not appearing on opponent's map (in log replay, or online)
 * 14065: Show OS Specific cut/paste key descriptions in Piece Definer
 * 14061: ArrayIndexOutOfBoundsException in StringArrayConfigurer.entryChanged
 * 14047: Prevent versions <= 3.2 from clobbering the 3.5 module list
 * 14046: Nested ExecutionException when cancelling a screenshot
 * 14043: Help button on Flare, Chess Clock, Deselect had broken link
 * 14041: Prevent race when creating GlobalPrefs
 * 14116: Incorrect module sort order in Module Manager
 * 14111: Incorrect description for Dynamic Property initial value

= 3.5.2 Other improvements =


 * 14098: Player includes module version number in window title
 * 14077: Include '(pixels)' in Turn Counter Label Display Length Label
 * 14070: Array Configurers: Add button moves focus to newly created entry
 * 14068: Key Command editor: Change return arrow icon to Tango undo icon
 * 14064: Add Refresh Predefined Setups in ExtensionEditor + (remove warning on pieces without parent)
 * 14059: Show better descriptions for Marker traits in Piece Definer
 * 14057: Piece Definer should give piece image a little breathing space on left and right by default
 * 14056: Search now covers initial/min/max values in property traits
 * 14053: Canceling Welcome Wizard closes the Player (unless "show wizard at startup" has been unchecked)
 * 14055: Set Global Property: include name/expression of property in trait list