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.
Help us test
This is a beta release, and may still contain some rough edges. Should
you find any problems/oddities/bugs, please tell us so that we can fix
them before VASSAL 3.1.0 is released. Also, if you’ve had problems with
3.0.x, please check and let us know if those problems are resolved in
3.1.0-beta1.
Report bugs here in the Technical Support & Bugs category at the VASSAL
forums:
Dear Joel,
thanks for the great work.
I have also a question concerning the conversion of ADC2 moduls.
Is that the menu “import mdoule”??
What file from the ADC2 directory do I have to choose ?
The file dialog will ask to you choose a file. Go to the directory for the ADC2 module you want to import. You should see a bunch of files that end in .OPS. Click on the one you want (the one that you would choose if you were using ADC2). If there are multiple .OPS files, that means that there are several configurations or scenarios for that module, but you still have to pick the one you want.
The only other things you can import are the map itself, which just gives you the map (not very interesting, although for many modules, this means a lot more than just transferring a bitmap to VASSAL) or the counter set. Those options don’t really have a purpose other than that they have separate files in ADC2.
Click on File->Import. You should get a file dialog with the default extension mask “.OPS”. Click on a module, wait a few seconds and then the editor will come up. Click on the save button and save the module. The main VASSAL screen should now have the new saved VASSAL module in its list. If you double click on that module, your module should start.
If you close VASSAL and run it again, the new module should still be in the list. You can also click on File->Open Module and click on the file that you saved the module as. If you click on the original .OPS file at this stage you’ll get a strange error (I get an error dialog that doesn’t say anything – that’s a bug). You have to click on the file that you saved – whatever you called it. The standard now appears to be to have the filename end in .vmod.
If you saved over the original .OPS file, it means you no longer have the original ADC2 module. But you will be able to load it as a VASSAL module (I think).
Under no circumstances should you be getting a NullPointerException – that’s bad. Send us the errorLog and we’ll sort it out.
– OS Windows Vista
– Java version 1.6.0_05
– VASSAL version 3.1.0-beta1
– VASSAL instance 513102124
[513102124]
java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at VASSAL.launch.AbstractLaunchAction$LaunchTask.doInBackground(AbstractLaunchAction.java:141)
at VASSAL.launch.AbstractLaunchAction$LaunchTask.doInBackground(AbstractLaunchAction.java:125)
at org.jdesktop.swingworker.SwingWorker$1.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at org.jdesktop.swingworker.SwingWorker.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
[513102124]
java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at VASSAL.launch.AbstractLaunchAction$LaunchTask.doInBackground(AbstractLaunchAction.java:154)
at VASSAL.launch.AbstractLaunchAction$LaunchTask.doInBackground(AbstractLaunchAction.java:125)
at org.jdesktop.swingworker.SwingWorker$1.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at org.jdesktop.swingworker.SwingWorker.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
– OS Windows Vista
– Java version 1.6.0_05
– VASSAL version 3.1.0-beta1
– VASSAL instance 1023998434
[Fatal Error] :6415:105: Character reference “” is an invalid XML character.
[1023998434]
java.lang.IllegalArgumentException
at VASSAL.launch.BasicModule.build(BasicModule.java:110)
at VASSAL.build.GameModule.init(GameModule.java:756)
at VASSAL.launch.Player.launch(Player.java:96)
at VASSAL.launch.Launcher.extractResourcesAndLaunch(Launcher.java:114)
at VASSAL.launch.Launcher$1.run(Launcher.java:102)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
[513102124]
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at VASSAL.launch.CommandClient.request(CommandClient.java:39)
at VASSAL.launch.AbstractLaunchAction.shutDown(AbstractLaunchAction.java:95)
at VASSAL.launch.ModuleManagerWindow$1.actionPerformed(ModuleManagerWindow.java:160)
at VASSAL.launch.ModuleManagerWindow$2.windowClosing(ModuleManagerWindow.java:177)
at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)
at java.awt.Window.processWindowEvent(Unknown Source)
at javax.swing.JFrame.processWindowEvent(Unknown Source)
at java.awt.Window.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
[1023998434]
java.lang.NullPointerException
at VASSAL.build.GameModule.shutDown(GameModule.java:650)
at VASSAL.launch.Player$PlayerCommandServer.reply(Player.java:70)
at VASSAL.launch.CommandServer.run(CommandServer.java:51)
at java.lang.Thread.run(Unknown Source)
Playing around with the beta on my machine at work, which recently got changed out. The upshot is that I don’t have some old ‘fiddling around’ stuff set up yet. I ended up pointing the MM at the zipped version of a module, just to see what it does.
It gave me an error box with the red “stop” sign, and no text next to it. Under that lack of message is the “Do not show this dialog again” message, and the Ok button. However, after that, I get an hourglass anytime I’m hovering over the Vassal window (but not the title bar–I can use the close ‘X’ button just fine).
I also just actually test-opened my F&E module, and it was pretty darn quick. I’ll be benchmarking my home system soon.
Edit: and here’s the error log from trying to open a zip as if it were a module:
– OS Windows XP
– Java version 1.6.0_05
– VASSAL version 3.1.0-beta1
– VASSAL instance 911897588
[911897588]
java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at VASSAL.launch.AbstractLaunchAction$LaunchTask.doInBackground(AbstractLaunchAction.java:141)
at VASSAL.launch.AbstractLaunchAction$LaunchTask.doInBackground(AbstractLaunchAction.java:125)
at org.jdesktop.swingworker.SwingWorker$1.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at org.jdesktop.swingworker.SwingWorker.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
[911897588]
java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at VASSAL.launch.AbstractLaunchAction$LaunchTask.doInBackground(AbstractLaunchAction.java:154)
at VASSAL.launch.AbstractLaunchAction$LaunchTask.doInBackground(AbstractLaunchAction.java:125)
at org.jdesktop.swingworker.SwingWorker$1.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at org.jdesktop.swingworker.SwingWorker.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
VASSAL: File ‘C:\Archive\F&E 0.93.zip’ of unknown type
[911897588]
java.util.concurrent.ExecutionException: java.io.EOFException
at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.jdesktop.swingworker.SwingWorker.get(Unknown Source)
at VASSAL.launch.AbstractLaunchAction$LaunchTask.done(AbstractLaunchAction.java:221)
at VASSAL.launch.Player$LaunchAction$1.done(Player.java:168)
at org.jdesktop.swingworker.SwingWorker$5.run(Unknown Source)
at org.jdesktop.swingworker.SwingWorker$DoSubmitAccumulativeRunnable.run(Unknown Source)
at org.jdesktop.swingworker.AccumulativeRunnable.run(Unknown Source)
at org.jdesktop.swingworker.SwingWorker$DoSubmitAccumulativeRunnable.actionPerformed(Unknown Source)
at javax.swing.Timer.fireActionPerformed(Unknown Source)
at javax.swing.Timer$DoPostEvent.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.io.EOFException
at java.io.DataInputStream.readInt(Unknown Source)
at VASSAL.launch.AbstractLaunchAction$LaunchTask.doInBackground(AbstractLaunchAction.java:201)
at VASSAL.launch.AbstractLaunchAction$LaunchTask.doInBackground(AbstractLaunchAction.java:125)
at org.jdesktop.swingworker.SwingWorker$1.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at org.jdesktop.swingworker.SwingWorker.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
I know what the problem is—LaunchRequest is bailing out because it
can’t read any metadata from the file which isn’t a module. I’ll fix
this for beta2.
Actually, F&E doesn’t have that big a map, and I have 2GB of memory. And the load time is all processor lockout. It’s just a huge module overall, and the bulk of those load times seems to be all the counters that F&E uses.
There’s another thing which I’m eventually going to look into regarding
load times (and memory usage): There are a lot of copies of the same
string that end up floating around in memory as a result of loading
many counters (especially ones which use prototypes) which should be
intern()'ed.
There’s been several comments on the Star Fleet Games board to the tune of ‘I like the Vassal module better than the Cyberboard module, but it takes too long to load.’ And I couldn’t blame them. It was just way out of hand.
If you want, I can provide you with a module that’s great for testing counter loading… And there’s a good number of prototypes running around.