3.6.6 and warning messages

What are the odds that the version mismatch will be shown because of a corrupted download or because of simply loading a different mix of extensions? There is no way for the user to know which file is affected, or even if there is any file affected or if they simply chose a different extension mix. Instead of making VASSAL more user-friendly this basically tells users: VASSAL is scary and complicated and if you don’t know why you got this dialog don’t use it!

You could include a CRC checksum in the header file for each vmod and vmdx based on the game data file at the time of save in the module editor and VASSAL would be able to properly check each file and also tell the user something useful instead of scary.

What would that be, though?

The problem here is that you’re trying to patch symptoms rather than properly fix the core issue. VASSAL is not capable of properly detecting if a file is corrupted from download, and the single checksum for combined module + extensions is not enough information to make a proper judgement on. imo the cure now is worse than the disease. To detect corrupted downloads (which I have seen happen in the past) you should create and save a checksum of the file inside the zip archive based on the game data file. That way VASSAL knows immediately which file is corrupted and that it is corrupted. Once you know the mismatch is not a corrupted file you need to split up the module and extensions and show what doesn’t exactly match. The dialog as it is now is also scary as hell. Anyone who is just coming to play a game and is not a VASSAL developer or module designer is unlikely to even know about the existence of checksums or what they are for. And this dialog uses so much scary language.

  1. Distinguish detection of corrupted file vs mismatched versions.
  2. Split up mismatch detection between each individual file instead of the whole thing as a package.
  3. Don’t make this dialog as serious and dramatic as it is, rather than tell the user “Windows crashed because of 0x97316439” like that is something useful to them, be more warm and actually explain what it’s about.

it may very well be not possible to implement it this way with the design limitations of v3. But then imo it’d be better to admit defeat and design it better for v4, rather than this which will just scare users away for sure.

Edit: Additionally the way modules and extensions work it’s very difficult for VASSAL to know if a mismatched extension is actually important or not. I don’t know yet how you would solve that, for v3 or v4. VASSAL already puts a warning in the log messages if the extensions loaded don’t match. This dialog showing because I have 6 more maps that I could potentially use in other unrelated games is definitely overkill.

It’s not very difficult—it’s impossible. There is no way to tell programmatically what effect an extension will have.

An example for my module for Memoir '44:
The vmod module file contains ALL content necessary to play any game. The extensions just add various scenario setups – and image preview files which make them rather large, hence separate files. Only one of the sides needs to have an extension to initiate a game, everyone with (the same) module can play just fine. But in 3.6.6 it’ll throw this “Invalid Configuration Detected” dialog every time. There is no way for me to mark my extensions to tell VASSAL: “don’t worry about it if these are missing”.

One way is to have a way of attributes or other conditional methods for the module/extension designer to set to tell VASSAL how important the file is. Is it missing? No problem. Maybe it just needs to be same version or newer? There are a number of things you could think of. That way it’s no longer impossible for VASSAL to know. But all this makes things a lot more complicated again of course, and none of these exist for v3. So it may be too much work to make it worthwhile. But if this dialog should be done properly you’d need something along these lines.

VASSAL as it was pre 3.6.6 is an open extensible design. You can have a module, and then anyone can make additions with extensions. That is great. But by their very nature extensions are optional content, because otherwise it’d be in the main module file. And optional content means not everyone is going to have all the same stuff. You are more likely to find people not having the same set of extensions than do. Which means this scary dialog all the time. Having this dialog based on this single checksum makes extensions a liability. What it is saying is don’t make extensions or users will not play your module. They are incompatible design priorities – having open extensibility and having exact knowledge of compatibility between user’s modules.

I ran into folks again freaking out as I was watched their game because we had 3 people in the room with 3 different versions of Vassal, and I was the only one with the most current.

The problems this message is tackling, is it as dire as the message implies?

Sadly, I have only entered one game (my friend and I) where don’t get that message. We are both-up-to-date, but I watch lots of ASL, CC, and a bunch of Simotich games, and I never encounter folks up-to-date.

Wow, people use extensions far differently than I imagined; I’ve programmed a single extension for the module I’m working on (Terraforming Mars), and that was to implement an expansion to the base game–if anyone is using the extension, obviously everyone has to be using the extension (and the same version of the extension, too), so a checksum mismatch is an easy way to show that there’s definitely a problem.

It never even occurred to me that extensions might be used for stuff that’s completely optional per player! And allowing that seems like an open invitation for cheating, if you care about that… .

What if one player has the expansion and extension but another has not, is that not optional content specific to each player? The user should close the module and enable/disable the extension and then reload depending on who they find to play against?

There are tons of ways to cheat in VASSAL if you are so inclined. You can easily do it without extensions.

When you make an open system like VASSAL then people are going to use that in every which way. No-one has ever told me before I make modules ‘wrong’.

Umm, yes. If the player who starts the game has the extension enabled and any other player doesn’t, that is pretty much guaranteed to cause problems with the game!

I didn’t say it was wrong; just not something that had occurred to me.

By having all game components in the base module it means every player (with the same version) can play any game started by anyone else. The extensions are merely containers for scenario setups (and a little related content) to initiate a game. This game has too many expansions which will mix together in setups in such ways that it makes little sense to split it up.

When I introduce a new player to it on VASSAL I say: just get the base module, it’s enough to play my game with me, since I have the extensions already. The module is 131MB and the extensions 244MB so it gets us started faster.

So, to summarize, we’re using extensions differently. In my use case, mis-matched checksums indicate there is definitely a problem that needs to be looked at, so having VASSAL compare them is very useful. In your use case, checksums are pretty much completely useless, since you expect everyone to have a different combination of extensions.

I suppose that means the best solution may be to have a per-module option (in Global Options, probably) to enable or disable checksum comparisons.

imo I would switch this new feature off entirely and go back to the drawing board. Look at implementing some of the suggestions I posted above to do this more comprehensively so it can cover more use cases in a better way. Since I expect it would be too much effort to add all these changes into v3 I would keep this feature for v4 and just keep v3 as it’s always been in this regard.

So, now you seem to be saying that I’m using extensions wrong, since I just said that the checksum comparison is very useful for me! Sigh.

What I am saying is that everyone is using VASSAL in different ways and this feature is not covering everything VASSAL does and can do. Adding such a feature should not be done haphazardly but with a good analysis overall.

May I ask what your reasons are for making a module-changing extension instead of a separate module that includes the expanded content?

Because the latter would be a nightmare to maintain? I really don’t want to have to make the same changes to multiple modules when I fix a bug or add a new feature to the base module, thanks all the same.

I imagined it was probably maintenance. As I understand it (after some thinking) is that essentially your extension turns your module into a different game (throw the expansion into the main game box). Creating two modules would solve the checksum problem because players would be in different lobbies, no way to get mixed up. But then you are doing a lot of double maintenance.

Unless there’d be a way in the module designer to tell VASSAL that the extension wants to modify the game ID of the module. It’d be a different solution to the dialog. And one which doesn’t require a new user setting. When you set the extension ID you can check a box and say “append this to the module ID”. That way you could have multiple extensions mixed in different ways and still have it work (assuming those extensions are compatible together). Loading the module with the extension would then change the ID so it would get its own lobby, just like a different module. But without the maintenance headache.