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

*********************
Download
*********************

For Linux:

  http://downloads.sourceforge.net/vassalengine/VASSAL-3.1.0-linux.zip

For Mac OS X:

  http://downloads.sourceforge.net/vassalengine/VASSAL-3.1.0-macosx.dmg

For Windows:

  http://downloads.sourceforge.net/vassalengine/VASSAL-3.1.0-windows.exe

For other operating systems:

  http://downloads.sourceforge.net/vassalengine/VASSAL-3.1.0-other.zip

Source code:

  http://downloads.sourceforge.net/vassalengine/VASSAL-3.1.0-src.zip


*********************
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 PrefsEditor.save()
* 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$SocketListener.run()
* 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 VASSAL.sh 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
forums:

http://vassalengine.org/forums/viewforum.php?f=3

or by email to uckelman@nomic.net.


Cheers,

Joel Uckelman, for the VASSAL Team
