Well… the thing is, this is Vassal truncating the extension from the file name in the build file. Since Vassal did it originally, I figured it should be possible to know what logic did it in the first place. Moreover, since the module is presumably acting correctly as is, it should be possible to follow the same logic it currently does to arrive at the correct answer to re-working the build file.
But really, that wasn’t truly a serious suggestion, but an acknowledgment that fixing the module files here isn’t enough; there’s every copy of the current files, on every single user system to update. Not really workable, especially since some of them may not even modules that exist in the files here (so forcing a download of an updated module isn’t a solution either).
However, I would like to fix the F&E module (I am currently working on an update for it) so that it is not part of the problem anymore. However, there looks to be hundreds of images that are affected. I would like some sort of automated tool that would root through my build file and add “.gif” to any image reference that has no extension already. That should be safe in this case, I’d be willing to fix the handful of problems that might result.
Well… the thing is, this is Vassal truncating the extension from the
file name in the build file. Since Vassal did it originally, I figured
it should be possible to know what logic did it in the first place.
Moreover, since the module is presumably acting correctly as is, it
should be possible to follow the same logic it currently does to arrive
at the correct answer to re-working the build file.
Sadly, the information you need to restore the .gif extension in the
cases where it was truncated was lost at the time it happened.
However, I would like to fix the F&E module (I am currently working on
an update for it) so that it is not part of the problem anymore.
However, there looks to be hundreds of images that are affected. I would
like some sort of automated tool that would root through my build file
and add “.gif” to any image reference that has no extension already.
That should be safe in this case, I’d be willing to fix the handful of
problems that might result.
So long as you know that you have no images in the module whose
filenames actually have no extension, then that should be safe.
I don’t see any of my HexGridNumbering changes on the trunk. Have you
merged these in yet? I have now checked in some new features and would
love to see these in 3.2 if possible:
A Grid-Shearer capability for hex grids, that performs a
2-fixed-point shear on the grid, to properly align the game grid with
that printed on the board. The snap-to functions properly snap-to the
hex centre/edge/vertex of this sheared grid, and also properly snap-to
in the hex corners instead of approximatig the hex-grid with a
rectangular grid.
The hex-grid snap-to catch buckets for edges and vertices now use a
child grid, which can be displayed if desired. (Quite cool to look at
actually, especially in 50% transparent cyan and magenta, though I am
not sure when I would use it in a game.)
A utility class AbstractAttributeListConfigurable that can be
used instead of AbstractConfigurable, and automatically generates
the array-lists for Configurer on request. For an example of this look
at my implementations of RegularHexGridNumbering and AbstractUIHexGrid,
both of which decreased in size by about 150 lines (net) on conversion.
The attributes are stored in a single LinkedHashMap, as sub-classes of
AbstractAttribute based on type. Implementations of AbstractAttribute
for all the primitive types, as well as Color, FormattedString, and
Enum, are already supplied. These attributes are monads (implemented as
anonymous classes) referencing the base storage from the parent class,
and are type-safe.
These are currently al sitting in the branch pgeerkens, and are
currently written agaisnt 3.1.16; I am going to test them against 3.2
today and will let you know when that is complete.
This is all merged to trunk@8012 (up to 7930). New build uploaded. Sorry
for taking so long to work through this.
Do I still need to merge 7395 or 7943, or do I have everything now?
One thing I should point it is that the saving system will not remain
focused on the mod directory. If I use “Save As”, rather than the browse
box opening in the mod directory, it opens somewhere else and I always
have to browse to the mod directory.
Is this still happening for you with current builds (svn8082 or later)?
I can’t reproduce it.
I’m not sure if you want comments from the peanut gallery here, but I just downloaded 3.2 for the first time with svn8096. I think I had a similar move.gif error missing the .gif. I think this was a stock image, because it’s definitely one I didn’t add and it seems to be on all my boards.
I created my module in 3.16 or maybe even earlier. It would only load my base board and 1/10 of the prototypes and global properties.
I did a save as in 3.1.18. I could then open it fine.
You know what, I sometimes get random images disappearing in 3.2 as well, but I haven’t seen any pattern, and they seem to show up again next time I load the module. I didn’t think anything of it because my computer is CRAZY and does weird crap like that all the time. But anyhow, I guess I second this.
It may be more then just the moved problem. I tried creating a new module just to try out some of the 3.2 and crashed with this.
2012-03-13 21:20:59,594 [0-main] INFO VASSAL.launch.StartUp - Starting
2012-03-13 21:20:59,602 [0-main] INFO VASSAL.launch.StartUp - OS Mac OS X
2012-03-13 21:20:59,602 [0-main] INFO VASSAL.launch.StartUp - Java version 1.6.0_29
2012-03-13 21:20:59,602 [0-main] INFO VASSAL.launch.StartUp - VASSAL version 3.2.0-svn8096
2012-03-13 21:21:00,269 [0-AWT-EventQueue-0] INFO VASSAL.launch.ModuleManager - Manager
2012-03-13 21:21:16,194 [0-SwingWorker-pool-1366337104-thread-1] INFO VASSAL.launch.AbstractLaunchAction - Loading module file /Users/erik/Documents/Games/Arkham Horror/Vassal/Arkham Horror Automated
2012-03-13 21:21:16,248 [0-SwingWorker-pool-1366337104-thread-1] INFO VASSAL.launch.TilingHandler - No images to tile.
2012-03-13 21:21:16,248 [0-SwingWorker-pool-1366337104-thread-1] INFO VASSAL.launch.AbstractLaunchAction - Loading module Arkham Horror Automated
2012-03-13 21:21:16,281 [0-SwingWorker-pool-1366337104-thread-1] INFO VASSAL.tools.io.ProcessLauncher - launching /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -Xms256M -Xmx512M -DVASSAL.id=1 -DVASSAL.port=65249 -Duser.home=/Users/erik -cp /Applications/VASSAL-3.2.0-svn8096.app/Contents/Resources/Java/Vengine.jar -Xdock:name=Arkham Horror Automated -Xdock:icon=/Applications/VASSAL-3.2.0-svn8096.app/Contents/Resources/VASSAL.icns -Dapple.awt.graphics.UseQuartz=false VASSAL.launch.Player --load – /Users/erik/Documents/Games/Arkham Horror/Vassal/Arkham Horror Automated
2012-03-13 21:21:16,955 [1-main] INFO VASSAL.launch.StartUp - Starting
2012-03-13 21:21:16,965 [1-main] INFO VASSAL.launch.StartUp - OS Mac OS X
2012-03-13 21:21:16,965 [1-main] INFO VASSAL.launch.StartUp - Java version 1.6.0_29
2012-03-13 21:21:16,965 [1-main] INFO VASSAL.launch.StartUp - VASSAL version 3.2.0-svn8096
2012-03-13 21:21:16,965 [1-main] INFO VASSAL.launch.Launcher - Player
2012-03-13 21:21:18,921 [1-AWT-EventQueue-0] WARN VASSAL.launch.BasicModule - Arkham Horror Automated version 0.0
2012-03-13 21:21:25,019 [1-AWT-EventQueue-0] INFO VASSAL.build.GameModule - Exiting
2012-03-13 21:21:25,412 [0-IPC receiver for 1446107908] ERROR VASSAL.tools.ipc.IPCMessageReceiver -
java.io.EOFException: null
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2553) ~[na:1.6.0_29]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1296) ~[na:1.6.0_29]
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) ~[na:1.6.0_29]
at VASSAL.tools.ipc.IPCMessageReceiver.run(IPCMessageReceiver.java:34) ~[Vengine.jar:na]
at java.lang.Thread.run(Thread.java:680) [na:1.6.0_29]
2012-03-13 21:21:28,094 [0-SwingWorker-pool-1366337104-thread-2] INFO VASSAL.launch.AbstractLaunchAction - Loading module file /Users/erik/Documents/Games/Arkham Horror/Vassal/Arkham Horror Automated
2012-03-13 21:21:28,097 [0-SwingWorker-pool-1366337104-thread-2] INFO VASSAL.launch.TilingHandler - No images to tile.
2012-03-13 21:21:28,099 [0-SwingWorker-pool-1366337104-thread-2] INFO VASSAL.launch.AbstractLaunchAction - Loading module Arkham Horror Automated
2012-03-13 21:21:28,099 [0-SwingWorker-pool-1366337104-thread-2] INFO VASSAL.tools.io.ProcessLauncher - launching /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -Xms256M -Xmx512M -DVASSAL.id=3 -DVASSAL.port=65253 -Duser.home=/Users/erik -cp /Applications/VASSAL-3.2.0-svn8096.app/Contents/Resources/Java/Vengine.jar -Xdock:name=Arkham Horror Automated -Xdock:icon=/Applications/VASSAL-3.2.0-svn8096.app/Contents/Resources/VASSAL.icns -Dapple.awt.graphics.UseQuartz=false VASSAL.launch.Editor --edit – /Users/erik/Documents/Games/Arkham Horror/Vassal/Arkham Horror Automated
2012-03-13 21:21:28,749 [3-main] INFO VASSAL.launch.StartUp - Starting
2012-03-13 21:21:28,759 [3-main] INFO VASSAL.launch.StartUp - OS Mac OS X
2012-03-13 21:21:28,759 [3-main] INFO VASSAL.launch.StartUp - Java version 1.6.0_29
2012-03-13 21:21:28,759 [3-main] INFO VASSAL.launch.StartUp - VASSAL version 3.2.0-svn8096
2012-03-13 21:21:28,759 [3-main] INFO VASSAL.launch.Launcher - Editor
2012-03-13 21:21:30,340 [3-AWT-EventQueue-0] WARN VASSAL.launch.BasicModule - Arkham Horror Automated version 0.0
2012-03-13 21:21:36,191 [3-AWT-EventQueue-0] ERROR VASSAL.tools.ErrorDialog -
java.lang.NullPointerException: null
at VASSAL.build.module.map.PieceMover$AbstractDragHandler.beginDragging(PieceMover.java:1196) ~[Vengine.jar:na]
at VASSAL.build.module.map.PieceMover$AbstractDragHandler.dragGestureRecognized(PieceMover.java:1128) ~[Vengine.jar:na]
at VASSAL.build.module.map.PieceMover$DragHandler.dragGestureRecognized(PieceMover.java:1345) ~[Vengine.jar:na]
at VASSAL.build.module.Map$3.dragGestureRecognized(Map.java:651) ~[Vengine.jar:na]
at java.awt.dnd.DragGestureRecognizer.fireDragGestureRecognized(DragGestureRecognizer.java:339) ~[na:1.6.0_29]
at apple.awt.CMouseDragGestureRecognizer.mouseDragged(CMouseDragGestureRecognizer.java:132) ~[na:na]
at java.awt.AWTEventMulticaster.mouseDragged(AWTEventMulticaster.java:303) ~[na:1.6.0_29]
at java.awt.Component.processMouseMotionEvent(Component.java:6421) ~[na:1.6.0_29]
at javax.swing.JComponent.processMouseMotionEvent(JComponent.java:3285) ~[na:1.6.0_29]
at java.awt.Component.processEvent(Component.java:6142) ~[na:1.6.0_29]
at java.awt.Container.processEvent(Container.java:2085) ~[na:1.6.0_29]
at java.awt.Component.dispatchEventImpl(Component.java:4735) ~[na:1.6.0_29]
at java.awt.Container.dispatchEventImpl(Container.java:2143) ~[na:1.6.0_29]
at java.awt.Component.dispatchEvent(Component.java:4565) ~[na:1.6.0_29]
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4621) ~[na:1.6.0_29]
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4299) ~[na:1.6.0_29]
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4212) ~[na:1.6.0_29]
at java.awt.Container.dispatchEventImpl(Container.java:2129) ~[na:1.6.0_29]
at java.awt.Window.dispatchEventImpl(Window.java:2478) ~[na:1.6.0_29]
at java.awt.Component.dispatchEvent(Component.java:4565) ~[na:1.6.0_29]
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:679) ~[na:1.6.0_29]
at java.awt.EventQueue.access$000(EventQueue.java:85) ~[na:1.6.0_29]
at java.awt.EventQueue$1.run(EventQueue.java:638) ~[na:1.6.0_29]
at java.awt.EventQueue$1.run(EventQueue.java:636) ~[na:1.6.0_29]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.6.0_29]
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) ~[na:1.6.0_29]
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) ~[na:1.6.0_29]
at java.awt.EventQueue$2.run(EventQueue.java:652) ~[na:1.6.0_29]
at java.awt.EventQueue$2.run(EventQueue.java:650) ~[na:1.6.0_29]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.6.0_29]
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) ~[na:1.6.0_29]
at java.awt.EventQueue.dispatchEvent(EventQueue.java:649) ~[na:1.6.0_29]
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) [na:1.6.0_29]
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) [na:1.6.0_29]
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) [na:1.6.0_29]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) [na:1.6.0_29]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) [na:1.6.0_29]
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) [na:1.6.0_29]