What is Vassal and its core function?

So what is Vassal and what is it supposed to do?
Vassal is a system intended to allow people to recreate their favourite table top game for playing that game on line with other people, across the world, Vassal also allows people to create their games for the same end result.
Vassal achieves this aim with alacrity. Versatile it surely is. I, for one, am extremely unlikely to play a table top game anymore (some exceptions apply).
So, where does Vassal fail?
Maths, or anything that requires more than +, -, * and/or /.
Why? Java, in particular the bastardised version inappropriately called ‘beanshell’. A more correct name could be ‘how can I make your computational life more difficult’.
Let’s get back to the AIM. Does all those workarounds you need to do within the beanshell environment help to achieve that? My vote is a resounding NO.
I have proposed on numerous occasions that Vassal should do what it does best, an environment to recreate your games. What Vassal should NOT do is provide an extremely sub standard mathematical environment for the computations that are necessary for your Vassal game to succeed. With the minimum effort.
Workarounds are not workarounds. They are inherent faults with the system.
Why the F would you need 19 GPs and 8 DPs when any reasonable spreadsheet can use access data in a table with HLOOKUP and VLOOKUP. I do not know if Vassal needs COS/SIN and a large bunch of other functions READILY available with a spreadsheet, But I do know that beanshell totally SUCKS.
Vassal developers. Get over your dependance on what you have got. Draw a box and think outside that box. I do not give a twats gnat what Vassal 4 and even 3.6.8 will ‘deliver’ while you steadfastly refuse to consider alternative options that WILL vastly improve users to develop great Vassal Games.
Leverage existing software. There are basic spreadsheets out there. They may not equal excel, but who cares. They provide functionality, performance, access to many functions not available with (or well hidden for us with beanshell) java/beanshell. And so more intuitive, with good help (F1). They do not just deal with integers. Link leads to a (extremely simple) excel SS. Think about the ‘Global Properties’ sheet. To help me populate that sheet I had to open 44 GPs. To edit each GP within Vassal means having to open each one. Double clicking, double clicking ad nauseum. With a SS I can edit the GPs in 1 location, and can view every GP from a single point. If I wanted to change all those 0’s to a 1 I can do it in a SS in a moment. With Vassal I need to open 32 GPs to do that.
So, let us do away with fn workarounds. Let us work more efficiently and computational ease. Let us work with something that allows really complex maths without all that damn complex Math.x stuff (and the need for really complicated nested ()).
So, get a grip and adopt a system that harnesses Vassal’s great ability for users to develop their games, but leave the maths to a fully integrated SS.

You won’t find anybody advocating for the way things are now. It’s an odd, idiosyncratic contraption. I reluctantly concluded that all of this needed to be junked a decade ago.

Here’s what I wrote on the topic in 2020:

All of this applies to fixing bugs as well. You saw exactly what I’m talking about here play out with the grid numbering problem.

More, from 2020:

We’ve mostly arrived there now, though when I wrote this I was expecting 3.5 to be the destination instead of 3.6.

Responding specifically to your request for a spreadsheet component in V3:

  • I don’t know of any Swing-based spreadsheet components. Building the GUI for one from scratch starting from a JTable would be a huge job.
  • You’d need an expression evaluator, and the most obvious candidate for that is Beanshell. Writing an expression evaluator from scratch is likewise a huge job.
  • You’d need a way to refer to properties, and that couldn’t differ much from the way they are referred to now.

What you’re asking for would be a major time commitment, and developer time is a finite and precious resource. I try to spend my own development time on things which will push back the day when we can no longer keep V3 working or bring forward the day that V4 will be usable. Adding a spreadsheet feature to V3 won’t do either of those things. I won’t work on it.

Maybe you can convince someone else to try; I’d argue that’s throwing good time after bad. If you want C-style arithmetical expressions and natural syntax for direct property access, that can be had essentially for free with JavaScript as the scripting language, which is where we’re headed with V4. That, and a human-readable file format, is what will cut through the mess you’ve described.


I have to admit that, having the ability to associate a spreadsheet and all the functionality that implies with pieces/boards/etc. would be pretty amazing. Also, I like how you just go straight for Utopia regardless of the current state of affairs…definitely unconstrained thinking.

If I could offer you some encouragement, I would point you to the below link. What this says to me is “this particular Utopian dream may be feasible in V4.”

First, my apologies to those that felt they were maligned or otherwise alluded to disrespectful character. That was not what my “rant” was about. I was bitching about the inherent limitations of java/beanshell when it come to doing maths and Vassal’s added restrictions. Not having decimal numbers geez.
I also was most definitely not talking about Vassal 3.x. I was airing my views on what may/can be for Vassal 4. I got the ‘hint’ from Joel some time ago. Vassal 4 can be really great. How great? That is up to guys, never me because I really do not have anything to contribute apart from - can this be done? I pose questions, point out shortfalls and generally bitch about things. But if one thing I post results in a change of focus or ‘shite that’s something’ then I have succeeded.
Interesting links from HaraldFair. But sorry, my experience and competency eludes me there. Some of those javascripts look very interesting.
To the chase, java/beanshell allows only 2 arguments for a max decision. Got 5 variables! Need nested max’s. How archaic.
Yes Harald, indeed utopia. But at what cost? There is always a best fit. Not ideal, but good enough.
What about something like the current property sheet trait for GPs in V4? All GPs in one table. Surely that would be something to aim for.
Something about me. Electronics Engineer. Dabbled in machine code programming with 8086/8088/Z80A chips. Realised that there were far better programmers than I out there, so stopped. I used cassette tapes as a HDD. 64k RAM was the best we had. 1MB of RAM cost $200. Fun times indeed. A quality system auditor and an expert in a very specialised field of endeavor relating to the effects of RF energy on explosives. Inter alia.
I am also, being an engineer, a avid proponent for productive change that is really beneficial.
Anyhow, it has been a bitch for the last 2 weeks changing my modules because of a change via 3.6.7 that, as it turns out, was not even required (leading zeros). I was extremely frustrated and a tad p155ed off. Normal conversations may now resume. :slight_smile:

1 Like

I, for one, am VERY optimistic about V4. I see all the right calls being made and I know the devs are very conscious of the limitations of the current system and have their own visions of a better future driving them forward. The only down-side that I can see is that it will require lots of time and patience. I’m settling in for the long-haul. During that process I’ll be over here on the sidelines, filling the role of “ugliest cheerleader”. :grinning:

1 Like

You apparently completely missed my earlier reply (in another thread) when you made this claim. That change was not pointless, it was needed by other module developers. It coincidentally caused problems for your module and pawnpusher’s module, which was unfortunate, and, due to pawnpusher’s unique circumstances, he was able to clear the error with a simple setting change–that does not apply to anyone else!

I am sorry you were affected so badly. Butl the change was required and I have since been working on an opt-in fix that will revert to the previous behaviour but allow specific modules to handle the leading zeros in hex grids correctly. I will be releasing this for testing shortly. I have a full-time job plus a busy life and can’t turn around issues in the same timeframes as paid support staff.

Your rant about the current state of V3 and ‘fn’ this and ‘fn’ that and the highly charged accusative language you used I found highly offensive towards myself and the other developers. Just my interpretation I guess.

Please read the last quarter of this blog post:

The reality is there is little we can do about the current state of V3, it is what it is,warts and all.You can’t just grab any old ‘There are basic spreadsheets out there.’ and bung it into a custom Java application. That’s just not a realistic software development goal. As we have discussed many times before in these forums, it would take many man-years of work and the total de-stabilization of the code base (and the users experience) to do anything worthwhile in V3.

Respectful discussion about the design of V4 is more than welcome, please join us on Discord in the #version_4 channel or the Development forum. Nothing is being ruled out for V4.

Your concept of viewing all Global variables in a single form is a good one. It’s essentially a GUI editor issue, In V3, we are constrained to a certain extent by design issues made 20 years ago that are now difficult to walk back.

Beanshell is what it is. Embedding a scripting language into a piece of software is a huge task and we where severely constrained to what was available at the time. We will have more options to choose from for V4.

Hopefully we can put this behind us and move on to a better Vassal!



Agree. I fully realise that version 3x is a dead end re really innovative concepts and ideas. While I can never contribute to V4 development, I do aim to add my 2 cents worth. V4 can be so much more and I am more than willing to put forward potential candidates for consideration.
When working, I tried, very hard, to be a change agent. I tried, again very hard, to empower my people to also do this. In defence, this proves to be somewhat difficult. But we do what we can, when we can.

Not at all. V3 has suffered for years because too many people think this.

Taking part in design discussions, developing lists of game mechanisms that need to be included, trying out and commenting on prototypes, in-depth testing and feedback, developing and maintaining documentation, translation.

The are many, many ways that non-programmers will be able to be involved and assist with V4 development. The core development team can’t effectively (and in many cases shouldn’t) do many of these things.

1 Like

Very valid and cogent points there. Yes, there needs to be alpha/beta testers. I suspect you should not have any trouble getting those. Then, as stated in another discussion, people to take care of the necessary user documentation.
Even when testing my modules to check whether they work as I intended takes time. I also seem to miss a couple of attributes that only when playing the game with other people do they surface.

I can, perhaps, also help with an overview function. By that I mean review stuff for consistency and the like.
I may no next to nothing about modern (or even ancient) software development my engineering experience has stood me in good stead with analysing ‘things’. By way of an example. Oldest son at high school had this project, using C+ or something, to make a program to animate a simple character. He showed me what he had put together. I noticed that he had used a lot of replicating code. I suggested that he make a sub-routine for each of those replicating stuff and just call them when required. He learnt about sub-routines. His program became way smaller (and quicker to run). He got an award for that one.

1 Like


Indeed Harald. There are some significant gaps/omissions with that wiki. I have run across a few, but I was not aware that I could change it. Call me stupid.
Do I need system approval to make amendments? I would think that something of that ilk would be necessary to prevent anyone from making changes.

Do a thorough update to a page and “save” changes. That will trigger auto submission for moderation review and approval.


Will keep that in mind Thanks you.