VASSAL 3.1.0 released

The VASSAL Team is happy to announce the release of VASSAL 3.1.0.


For Linux: …

For Mac OS X: … macosx.dmg

For Windows: … indows.exe

For other operating systems: …

Source code: …

New Features in 3.1.0

  • Improved room management: Invite and kick players from locked rooms.

  • Improved installation: For Windows, a real Windows installer/uninstaller.
    For Macs, a single-file disk image. Download, click, and install.

  • File associations: Files with .vmod, .vsav, and .vlog extensions are
    now associated with VASSAL (on Windows and Macs). Double-click a module
    to load it in VASSAL!

  • New Module Manager frontend: The Module Manager displays all of your
    modules and save/log files, giving you a convenient way to organize
    them all.

  • Improved memory management: VASSAL now uses significantly less memory
    for various graphics-related tasks. Heap sizes may be set from within
    VASSAL via the Preferences.

  • Improved zooming: Zoom your maps to whatever size you want.

  • Aide de Camp 2 module importer: Convert any ADC2 module to a VASSAL
    module with one click.

  • Many, many other minor improvements, and scores of bug fixes.

Changes since 3.0.17:

  • Launch from VASSAL.exe on Windows

  • Native Windows installer

  • Native MacOS X bundle

  • File associations for Windows and MacOS X

  • Upgraded SVG library from Batik 1.6 to Batik 1.7

  • New module library interface

  • Welcome Wizard can be turned off

  • 10x faster Server Status lookups

  • Generation and storage of GamePiece ID’s (gpid’s)

  • ADC2 module importer

  • TurnTracker improvements

  • Spanish translation

  • Adjustable map background color

  • New VASSAL application icon.

  • Less ugly Windows installer theme.

  • Die-roll sorting.

  • Invite, kick players from locked rooms

  • Suggest .vsav instead of .sav as the save extension.

  • Updated JRE download URL to fetch current JRE 1.6.0_6u12.

  • Improved error messages when loading an invalid module.

  • RFE 2373999: Module Manager to have access to Global preferences

  • RFE 2193791: Pieces in palette to show correct dynamic property values.

  • RFE 1633152: Simplify adjusting Maximum Memory requirements

  • RFE 1566177: Implement JAI tiled images to reduce memory usage

  • RFE 1565958: Zooming to larger than 100%

  • Bug 2536324: Memory mapped and Scaling prefs missing

  • Bug 2527705: NPE in SelectionHiglighter.addHighlighter()

  • Bug 2522301: NPE when loading broken PNGs

  • Bug 2521503: Bug Dialog Show Details does not repack dialog correctly

  • Bug 2514834: OutOfMemoryError should not be reported as a bug

  • Bug 2503662: NPE on connection with a newly created module

  • Bug 2502717: NPE in

  • Bug 2501338: IllegalStateException if cannot create extensions directory

  • Bug 2499980: User Profile display reverting to pre 3.1 version

  • Bug 2499446: NPE when extension directory does not exist

  • Bug 2499238: Return to Deck stacking issue

  • Bug 2498607: Edit extension from another module generates bug report

  • Bug 2497564: No GamePieceImage items when piece first created

  • Bug 2495248: NPE in Replace.replacePiece()

  • Bug 2493325: Don’t add Preferences to Module Manager File menu on MacOS X

  • Bug 2489325: SocketException in ModuleManager$

  • Bug 2486596: NPE in SequenceEncoder.appendEscapedString()

  • Bug 2476838: IllegalArgumentException in BundleHelper.getString()

  • Bug 2475197: Chat classes call Swing methods off the EDT

  • Bug 2446130: Better handling for ModuleManager socket errors

  • Bug 2442887: Exception if no Layer levels and type new level name

  • Bug 2432774: ClassCastException: PrototypeDefinition$Config$Definer$Plain
    cannot be cast to VASSAL.counters.Decorator

  • Bug 2431468: NumberFormatException in StackMetrics.setAttribute()

  • Bug 2418907: NPE When SendToLocation sends to Region that does not exist

  • Bug 2418813: NPE Sending PrivateMsg to person who is ‘Ignoring’ you

  • Bug 2415632: NPE in DeckGlobalKeyCommand.encode()

  • Bug 2393526: Cache requests not marked as failed when Errors occured

  • Bug 2393130: Zoom menu not initialized at time of Zoomer creation

  • Bug 2390630: Connecting to server blocks GUI when server is down

  • Bug 2381419: NPE in RegionGrid.Config.EditRegionAction.windowClosed()

  • Bug 2380245: FileNotFoundException not being caught during image loading

  • Bug 2373956: NPE in child ImageOp when parent fails

  • Bug 2373491: StackOverflowError due to infinite Send-to-location loop

  • Bug 2372199: NPE in PieceSlot.updateGpId()

  • Bug 2358673: Piece transparency in LOS looks weird at non 100% zoom

  • Bug 2346899: file chooser fails with null owner window in Java 1.5

  • Bug 2344403: gpidSupport not set on pieces coming from PieceDefiner

  • Bug 2340311: Edit All pieces, no change, should not update pieces

  • Bug 2339611: Try to load PNGs with bad metadata anyway

  • Bug 2319018: Triggering multiple ‘Move Fixed Distance’ traits doesn’t work

  • Bug 2316022: ArithmeticException in PropertySheet.TickLabel.mouseClicked

  • Bug 2315230: ConnectException in HttpRequestWrapper.doGet()

  • Bug 2311318: Setting Label length to 0 in Turn Tracker changes to Fixed

  • Bug 2309593: Move Fixed Distance auto-report never turns off

  • Bug 2306908: Default option for ‘Auto-Report Moves’ should be Always

  • Bug 2306873: Not a Number when referencing DiceButton value in Edit mode

  • Bug 2305254: Chart Maps not Visible if Main map undocked

  • Bug 2301594: LoadExtensionException trying to open an Extension

  • Bug 2300943: Module names with apostrophes don’t appear in Server Status

  • Bug 2296067: InvalidDnDOperationException in PieceMover.DragHandler

  • Bug 2294041: Bad Image generates IOException instead of Bad Data report

  • Bug 2292450: Corrupted Color Preference causing NoSuchElement Exception

  • Bug 2290225: Cancel when setting a Dynamic/Global Property sets to null

  • Bug 2286888: NPE in FileChooser$NativeFileChooser.awt_file_dialog_init

  • Bug 2286774: Problems playing modules from folders with ‘!’ in pathname

  • Bug 2286742: Exception loading tutorial while constructing Welcome Wizard

  • Bug 2285925: NPE in FileChooser.NativeFileChooser.awt_file_dialog_init()

  • Bug 2282205: ArrayIndexOutOfBoundsException in ZoomMenu.initZoomItems()

  • Bug 2280943: Delete key no longer deletes elements in Edit Mode

  • Bug 2280253: NPE if no Key Command specified

  • Bug 2273032: NPE in PlaceMarker.placeMarker()

  • Bug 2265820: Prevent StackOverflowErrors due to LaunchButton loops

  • Bug 2261405: Unable to move region in irregular grid

  • Bug 2259361: NPE in FreeRotator.mouseReleased()

  • Bug 2254357: StringIndexOutOfBoundsException in FormattedStringConfigurer

  • Bug 2250058: NPE when adding a Place Marker to a prototype.

  • Bug 2248313: NoSuchElementException in ColorConfigurer.stringToColor()

  • Bug 2225711: Fixed ConcurrentModificationException in SavedGameUpdater

  • Bug 2219448: Can Synchronize with players in Locked Rooms

  • Bug 2202296: Hang when moving trait up

  • Bug 2199683: NPE in GameState.addPiece()

  • Bug 2199032: NPE in FileChooser.NativeFileChooser.awt_file_dialog_init()

  • Bug 2198485: NPE in PlaceMarker.updateGpId()

  • Bug 2198485: NPE in PlaceMarker.updateGpId()

  • Bug 2194826: ArithmeticException in HexGrid.HexGridEditor.check()

  • Bug 2191296: HTML not working in Text Label traits

  • Bug 2189633: NPE in Footprint.redraw()

  • Bug 2187303: IllegalArgumentException in SavedGameUpdaterDialog

  • Bug 2186983: EmptyStackException in ModuleManagerWindow.GameFolderInfo

  • Bug 2180966: Only allow valid module files to be opened or edited

  • Bug 2179397: Poor performance for counters with multiple Text Labels

  • Bug 2176712: NPE in SetupStack.StackConfigurer.actionPerformed()

  • Bug 2176550: NumberFormatException in PositionOption.setValue()

  • Bug 2175571: NoSuchElementException in ColorConfigurer.stringToColor()

  • Bug 2174283: SymbolSet$SymbolData.getImage() creates 0-width image

  • Bug 2172904: NPE in StackMetrics.merge()

  • Bug 2172556: Synchronize on shared SAXSVGDocumentFactory

  • Bug 2169452: Don’t raise a dialog for missing images

  • Bug 2162266: NPE in HybridClient.setDelegate()

  • Bug 2146393: No zoom levels in zoom menu

  • Bug 2129550: UnknownHostException in HttpRequestWrapper.doGet()

  • Bug 2124682: Synchronize on shared SAXSVGDocumentFactor

  • Bug 2107274: GeneralFilter gets images with wrong data type

  • Bug 2099742: NullPointerException in Deck

  • Bug 2087474: NullPointerException in PolygonEditor

  • Bug 2087474: ArrayIndexOutOfBoundsException in PolygonEditor

  • Bug 2078197: NullPointerException in RemovePiece

  • Bug 2074670: NullPointerException in AreaOfEffect

  • Bug 2043946: NullPointerException in Footprint

  • Bug 2042928: NullPointerException in Deck

  • Bug 2038103: NullPointerException in BoardPicker

  • Bug 1926512: Updated Private notes not written to save file

  • Bug 1877899: Return To Deck Stacking Problem

  • Bug 1866161: Exception when deleting initial elements from tabs

  • Bug 1860941: Do not prompt to start new logfile when already recording

  • Bug 1716080: Piece traits editor allows removal of BasicPiece trait

  • Bug 1716071: Multiple selection isn’t drawn in drag ghosts

  • Bug: Main Room must not be lockable

  • Bug: Tooltip for dice button was completely broken.

  • Bug: Canonicalize $0 in case is being invoked via a symbolic link

  • Bug: Restricted Access trait works again

  • Bug: Must recalculate bounding box for rotation when inner piece changes

  • Bug: Check that child port is in [0,65535] when launching Player or Editor

  • Bug: Problem when adding a Place Marker to a Place Marker definition

  • Bug: Transparent SVG has an opaque black background

  • Bug: Some transparent PNGs not loaded properly by ImageIO

  • Bug: Added missing Cancel button, close window handling to several dialogs

  • Bug: Zooming now correctly maintains view center

  • Bug: Fixed player name bug which falsely reported empty player

  • Bug: LaunchButton return focus to previous focus owner

  • Bug: ReturnToDeck would not prompt user for deck if there was a draw pile
    that had the empty string as a name

  • Bug: Disable main selection highlighter if thickness is set to 0

  • Bug: Disable Undo at the start of a new log

  • Bug: Fix PropertyExpressoin to correctly compare 2 properties

  • Bug: Two bugs in HexGridNumbering.getCenterPoint()

  • Bug: Can’t display a Global Property in a Text Label of a piece that has
    a Set Global Property trait defined.

  • Bug: Report movement of Invisible pieces (? moves ? to ?)

  • Bug: Offset of dragged piece from Deck with maximum # of pieces to show

  • Bug: Offset of dragged piece from Deck with large number of showing pieces

  • Bug: Fix bug in RestrictCommands not re-enabling commands

  • Bug: Properly handle px units in width and height of SVG images

  • Bug: Fixed bug in SendToLocation when using offsets.

  • Bug: SpecialDiceButton use correct format for text/window-title

Please report all bugs, even if they are bugs which you’ve already reported
against other versions. We take your bug reports very seriously—they’re
the reason we’re able to find and fix bugs.

Help us test

Should you find any problems/oddities/bugs, please tell us so that we can
fix them for the next release of VASSAL.

Report bugs here in the Technical Support & Bugs category at the VASSAL

or by email to


Joel Uckelman, for The VASSAL Team