Roadmap for VASSAL 4

Thus spake Julien Cassignol:

Hey guys,

Yesterday we had an interesting talk with Uckelman (to which Tim added his
opinion later on but everyone was sleeping), and I thought that it’d be
worth talking here.

As to release planning and features delivery for V4, what would you prefer?

  1. “Rolling-release” like, that is implementing feature by feature then
    releasing that feature into main V4 when deemed stable enough
  2. Monolithic release, that is implementing all features and releasing when
    they’re all in

I prefer doing frequent releases for V4, with one caveat: We must be
careful to communicate to users what V4 releases are.

There will be many, many releases of V4 before it’s a replacement for
V3 for everyone. We don’t want users getting the idea that V4 is a V3
replacement before it actually is; that will lead to a lot of user
disappointment and frustration. I’m not sure how best to manage user
expectations here—my initial thought is that we call V4 releases
“demos” until there’s a V4 release which implements all of the V3
features.


J.

Thus spake Brent Easton:

  1. “Rolling-release” like, that is implementing feature by feature
    then
    releasing that feature into main V4 when deemed stable enough

This would be my choice, with the initial release being quite modest
e.g. to the level required to implement a relatively simple hex game
like Battle for Moscow.

It’s funny you picked that—it’s the game I used for the XML example
I posted yesterday.

As well as the structural design that is going on now, I would like to
see some thought to developing a list of game ‘mechanisms’, for want of
a better word, that must be supported. It is important that as we design
and build, these core ‘mechanisms’ must be supported. Things like piece
‘ownership’ and changing ownership (dealing etc.), information hiding
(masking, hidden).

We should start making a list.

The only mechanisms which I think will be difficult to support via
properties are ones involving hidden information, the difficulty having
nothing to do with the nature of hidden information.

I think the problem becomes clearer by dividing cases. If there’s hidden
information,

  1. a player cannot access that information unilaterally, or
  2. a player can access that information unilaterally
    a. where doing so will trigger notification of another party, or
    b. without anyone else knowing he has.

Secure systems, as when the player doesn’t have the hidden information
or has it, but it’s encrypted with a strong cipher, are in category 1.
A lot of browser-based games with hidden information are like this—
presumably the server does not hand out information to clients that they
are not permitted to see. Systems in category 2.a are things like ACTS,
if I understand it correctly: You can draw a card any time you want, but
your opponent will know that you have. Every virtual tabletop system I
know of is in category 2.b, though the amount of effort needed to access
the hidden information varies.

Which category makes sense for a game depends on both the game and the
players. Lots of games have no hidden information, so for those it
doesn’t matter. For other games, there’s a trade-off between trust and
convenience. Category 1 systems require player interaction if the
player triggering the revelation of some hidden information is not the
one who possesses the key to it. This can be acceptible for real-time
games, or for PBEM games where such revelation happens infrequently
(e.g., many games have secret victory conditions set at the start and
revealed at the end), but could become onerous for games where hidden
information is revealed often (e.g., think of a card game where one
player has the ability to steal a card from some other player every
turn, or a game which has sighting distances for units and real fog-of-
war).

Category 2.a systems don’t require intervention by other players to
reveal information, but also don’t have any protections against
information being revealed improperly. E.g., I can draw a card, and
everyone is notified that I drew a card, but there’s no way to undo
the revelation if I wasn’t supposed to draw a card. If mistakes are
not a problem (or not possible) then this kind of system is fine, and
could expedite PBEM play quite a bit.

Category 2.b systems rely on players not peeking at things they’re not
supposed to see. For me, this is fine when playing games with my
friends—it’s just like playing games face-to-face. I trust them not
to look at my cards when I leave the table to get a beer. But it’s not
so suitable if you’re running a PBEM tournament full of people who don’t
know each other. For that case, having a system in one of the other two
categories means that you don’t have to worry about playing against
cheaters, and you also don’t have to worry about being called a cheater
when you’ve guessed well or had an exceptional run of luck.

Finally, there’s the issue of data recovery with encrypted category 1
systems. People will loose their passwords. If they’ve chosen good
passwords (not “12345” and “password”) and we’re using strong
encryption, then even government-level efforts will not get their
data back from the cyphertext. This might be solvable simply by making
it easy for players to store their data unencrypted locally, and only
encrypt the data in files meant to be sent to others.

That doesn’t help in the case where you need to recover the data after
a player vanishes. This can be a big, big problem in long multi-player
games. E.g, what do you do if all of the force size data is encrypted
and one of your Empires in Arms players stops responding and needs to
be replaced? There is forunately a way around this using public key
crypto, in that you can encrypt the data so that it can be decrypted by
some number of other players acting in concert, but not by fewer
players—the idea being that, say, if the remaining six players in your
EiA game agree it’s ok to release the remaining player’s secret
information, then it’s for a good reason.

So, this issue is rather complex. I think there are at least three
scenarios here we should support:

A) encrypted hidden information stored in saved games
B) unencrypted hidden information stored in saved games
C) hidden information stored in the game server


J.

I will note that the current VASL module is a combination of 1 and 2.a. There is a preference that has to be set to allow other people to reveal your concealed units. Without that, only the owner can reveal.

Thus spake Rindis:

I will note that the current VASL module is a combination of 1 and 2.a.
There is a preference that has to be set to allow other people to reveal
your concealed units. Without that, only the owner can reveal.

That’s not accurate. VASL is 2.b. With sufficient knowledge of the file
format and some work, you can read everything.


J.

Well, I was speaking more of the theory. Since, in theory, you shouldn’t be able to do that. The point is, by design, who is allowed to get at what is variable by settings. I also think it could be a good thing to support in general so Vassal can accommodate both PBeM simplicity and tournament enforcement at the same time.

Since you mentioned games with cards, and most of my module building time has been devoted to coming up ways to accomplish fairly ordinary card-related tasks that can only be done in VASSAL 3 with cringe-inducing rat’s nests of triggers, STLs, GKCs, and so on…

Here are some basic functions that should be available out-of-the-box:

  • Dealing cards. The way I’m doing it is pretty hairy, especially for a game with 6 player sides!
  • Discarding random cards (or items in general, from Player Hands or Private Windows).
  • Giving a random card to another player
  • Giving a specific card to another player (probably something you could enable/disable with a module-level preference depending on whether or not the game allows this
  • Some way of doing “Take the top X cards from the deck, choose some number of them, return/discard the rest”. This shouldn’t require the player to actually pull all the cards into his hand first, it would need some sort of picker and send things to the right places according to the player choices.
  • More flexible player hand windows. Sometimes a game might benefit from being able to set up a non-standard layout, or always make sure new cards get added on the left or right, etc. I don’t have fully-formed ideas on this, but suspect the current way is a constraint on some games.

There are probably lots more just on the topic of card handling, but these are the ones I’ve thought about based on what I’ve found difficult (or impossible) to do in VASSAL 3.

Thus spake JoelCFC25:

I would like to see some thought to developing a list of game
‘mechanisms’, for want of a better word, that must be supported.

Since you mentioned games with cards, and most of my module building
time has been devoted to coming up ways to accomplish fairly ordinary
card-related tasks that can only be done in VASSAL 3 with
cringe-inducing rat’s nests of triggers, STLs, GKCs, and so on…

Here are some basic functions that should be available out-of-the-box:

  • Dealing cards. The way I’m doing it is pretty hairy, especially for
    a game with 6 player sides!
  • Discarding random cards (or items in general, from Player Hands or
    Private Windows).
  • Giving a random card to another player
  • Giving a specific card to another player (probably something you
    could enable/disable with a module-level preference depending on whether
    or not the game allows this
  • Some way of doing “Take the top X cards from the deck, choose some
    number of them, return/discard the rest”. This shouldn’t require the
    player to actually pull all the cards into his hand first, it would need
    some sort of picker and send things to the right places according to the
    player choices.

These five all look to me like things which could be done by setting
the appropriate properties on the cards.

  • More flexible player hand windows. Sometimes a game might benefit
    from being able to set up a non-standard layout, or always make sure new
    cards get added on the left or right, etc. I don’t have fully-formed
    ideas on this, but suspect the current way is a constraint on some
    games.

For this one, it’s less clear to me where the separation is between
what the game requires formally and what’s presentation.


J.

Hello,

I would like to join the development of VASSAL Version 4. I’m especially interested in seeing vassal become available on tables.
This involves that the GUI can be adapted to touch as well as the relative small screen size these devices offer.

One further point that I would love to see is the ability to play asynchronously, i.e., the move or game states are stored on a custom server. This would allow one player to make her moves and quit the application and the other player can than do his moves when he has the time.

The information I could not find so far are:

  • where is the current source code?
  • where are the ‘design’ documents?
  • where should I register as a potential developer?

Thank you for read and hopefully for responding

Thus spake DragonGame:

One further point that I would love to see is the ability to play
asynchronously, i.e., the move or game states are stored on a custom
server. This would allow one player to make her moves and quit the
application and the other player can than do his moves when he has the
time.

This is part of the plan, yes.

The information I could not find so far are:

  • where is the current source code?

The current source for the V4 demo is here:

git.code.sf.net/p/vassalengine/vassal4-demo

You’re not going to have an easy time with it, though, as it’s presently
in an intermediate state—I have quite a few changes locally which need
to be checked in first.

  • where are the ‘design’ documents?

I’m planning to produce these during May.

  • where should I register as a potential developer?

Here. Once I’m a bit further along, I’ll make an announcement about
getting organized for V4 development.


J.

I’m going to apologize in advance for not reading all 18 pages of posts on this topic. While I joined the forum back in 2010, which surprised me when I tried to create my account today, I’ve done nothing with it. Until now…

After having worked on my first Vassal Module, and having a difficult time while doing so, I decided to get involved with this project. Your initial posts re: the issues with Vassal 3 are spot on and the obstacles that you’re encountering happen to almost all software projects. As I’ve had to wrestle with similar code and organization issues in the past, I’d like to help if I may.

By way of introduction, I’m a Principal Software Engineer and have been writing code for over 30 years. While I’m not an expert in Java, I have toyed with it, having written some adaptive data compression classes and a Mersenne Twister pseudo-random number generator in the language. Throughout my career, I’ve been able to read and analyze other people’s code and become quite proficient quickly.

My resume is here.

Let me know if and how I can be of service.

Is there a ‘sign up’ page on helping out with converting VASL 5.10.0 to the V4 standard?

I get it that V4 has to exist first, but I’d like to get a hand on what is need to make the VASL module compatible and maintainable with V4.

The closet info I have is what Joel posted on GS.

I looked here (and would have to relook and find) but the git repos for V4 from sourceforge are not as friendly nor understandable as GitHub is. GitHub is pretty easy to use, fork, clone, fetch and push with. But when I go here:

http://vassalengine.git.sourceforge.net/git/gitweb.cgi?p=vassalengine/vassal4-demo;a=summary

I don’t see anything on how to fork/clone this repo locally. I tried use the command line tools I have (both Git Shell and Git Bash) but to no avail.

Anyway. Thoughts, tips, ideas or what am I doing wrong?

I don’t know much about VASL, but I’m wondering why it continues to exist
as a separate branch. Shouldn’t it instead be converted to a standard
module that complies with V4?

  • M.

On 9 May 2013 08:38, zov66 dlazov@comcast.net wrote:

Is there a ‘sign up’ page on helping out with converting VASL 5.10.0 to
the V4 standard?

I get it that V4 has to exist first, but I’d like to get a hand on what
is need to make the VASL module compatible and maintainable with V4.

The closet info I have is what Joel posted on GS.

  1. VASSAL will be moving to C++ for V4. This is for the game engine.
    This has nothing to do with modules. Custom module code will neither
    need to be, nor even be able to be, in C++. There is no question of
    VASL, or any other module, needing custom C++ for V4. Module scripting
    is likely to be in Python (though that’s not settled presently, due to
    one particular technical issue).

  2. If VASL is going to exist for V4 at all, then it will have to be
    recreated. This will not be nearly as much work as you might think,
    because firstly, it’s not the same as recreating VASL from scratch,
    and secondly, recoding the custom bits will be dramatically simpler.
    VASL is only about 10k lines of code as it is, so is not actually that
    large. You’re rapidly reaching the point where the current codebase is
    unmaintainable anyway, in part because there are no tests and in part
    because all of the display logic is comingled with the game logic.
    Both of these could be rectified with V4.

Additionally:

  1. The VASSAL devs would very much like to have anyone interested in
    converting VASL to V4 working with us to determine requirements from
    as early a point in the design process as possible. VASL is one of the
    “deep” modules, and you guys have a wealth of experience regarding
    what you need and how things should work.

I looked here (and would have to relook and find) but the git repos for
V4 from sourceforge are not as friendly nor understandable as GitHub is.
GitHub is pretty easy to use, fork, clone, fetch and push with. But when
I go here:

vassalengine.git.sourceforge.net/git/gitweb.
cgi?p=vassalengine/vassal4-**demo;a=summaryhttp://vassalengine.git.sourceforge.net/git/gitweb.cgi?p=vassalengine/vassal4-demo;a=summary

I don’t see anything on how to fork/clone this repo locally. I tried use
the command line tools I have (both Git Shell and Git Bash) but to no
avail.

Anyway. Thoughts, tips, ideas or what am I doing wrong?

_____________**
Read this topic online here:
vassalengine.org/**forum/vie … 6#**p40126<Roadmap for VASSAL 4 - #267 by DonLazov

_____________**
messages mailing list
messages@vassalengine.org
vassalengine.org/**mailman/listinfo/messageshttp://www.vassalengine.org/mailman/listinfo/messages

Thus spake Michael Kiefte:

I don’t know much about VASL, but I’m wondering why it continues to exist
as a separate branch. Shouldn’t it instead be converted to a standard
module that complies with V4?

I’m supposing that you mean V3.2 here. VASL is a standard module, it
just happens to contain a great deal of custom code (similar to TS, in
that regard), and this code lives in our repo for lack of a better
place. It’s been years since the current version of VASL was a stand-
alone app.


J.

Thus spake zov66:

Is there a ‘sign up’ page on helping out with converting VASL 5.10.0 to
the V4 standard?

There’s not one yet. One of my projects for May is to set up a place for
the V4 design work to happen, and to type up my notes as a point from
which to start. I’ll let you know once that’s happened.


J.

I’m supposing that you mean V3.2 here. VASL is a standard module, it
just happens to contain a great deal of custom code (similar to TS, in
that regard), and this code lives in our repo for lack of a better
place. It’s been years since the current version of VASL was a stand-
alone app.

I think one of the goals for V4 should be to incorporate the features that
VASL and TS needed to do in custom code. I know I’ve gotten a bunch of
requests for that. Some are very obvious (dealing hands, card counts in
the toolbar, new zoom class for hands, etc.)

It would be good for someone intimately familiar with VASL to help out with
that. I would include Combat Commander in that list as well as I believe
there’s a fair bit of custom code in that as well.

  • M.

I believe Joel envisions the bulk of the VASL code being replaced by capabilities inherent in the new architecture. The map stuff might be tricky. Anything that requires the boards to be changed would be a tall order given the amount of TLC that goes into them.

I’m trying to resurrect the VASL LOS code and am wondering if anything that complex could be done via scripting.

-David

I know my $0.02 has very little sway here, but will VASSAL 4 require Java in some form? Reason I ask is that there have been so many zero day exploits regarding Java the last few years that I’m very leery of installing it on any of my machines when I do clean installs.

Thus spake MKSheppard:

I know my $0.02 has very little sway here, but will VASSAL 4 require
Java in some form? Reason I ask is that there have been so many zero day
exploits regarding Java the last few years that I’m very leery of
installing it on any of my machines when I do clean installs.

One of my goals is to never use Java again myself in a non-work project.
The reference desktop client we produce for V4 will not use Java in any
way.


J.

Have you started at some point programming VASSAL 4 ? (long thread that spread from 2011 to 2013)

Thus spake Grummore:

Have you started at some point programming VASSAL 4 ? (long thread that
spread from 2011 to 2013)

Yes, I’m doing prototype work now.


J.