Designing a VASSAL Module to be “Future Proof”
v1.0 – September 2023

Websites Related to VASSAL Module Graphical Design

SNAPHEX (https://snaphex.com/snap_counter) – A very nice counter designing website with a bunch of options. The inspiration for my own counter designer.

HEXGRID (http://hamhambone.github.io/hexgrid/) – A very nice hexgrid designing website. Very useful to use in redrawing a wargame map into a digital copy for use in VASSAL.

Wargame Counter Generator (v1.0) – My own attempt at coding a counter designer, inspired by SNAPHEX. This is something I worked on primarily in September 2023 to help develop counter images for VASSAL modules; so that it is easier for the “average” user to quickly develop a consistent visual style for their counter artwork, without having to download/install/purchase/learn graphic editing programs or search for artwork to use.

Let's examine a few hypothetical use cases for a VASSAL Module, to help us as we lay out specifications for our own module:

EXAMPLE GAME MAP DIMENSIONS

DISPLAY SIZES AND MAP IMAGE SIZES

Below are two tables to give you an idea of what you can expect from future displays:

Display Constrained to a Constant 100 PPI

NOTE: This is the resolution of a 23” HDTV Monitor which displays very little visible pixels to a computer operator at 8 inch viewing distances.

Resolution

Screen Size (Diagonal)

Area

HDTV – 1980 x 1080

23”

226 in2

4K – 3840 x 2160

43”

790 in2

8K – 7680 x 4320

85”

3,087 in2

16K – 15360 x 8640

175”

13,070 in2

Display Constrained to a Constant 50 inches (1,068 in²)

Resolution

PPI

HDTV – 1980 x 1080

44

4K – 3840 x 2160

88

8K – 7680 x 4320

176

16K – 15360 x 8640

352

From studying the above, it appears that aiming for a minimum map resolution of 200 PPI will "future proof" your VASSAL module.

The big issue then becomes one of “how far do we want to look ahead?” – and when you look at map sizes, it becomes ugly fast:

John Prados' Third Reich (25.5" x 22") Map

PPI

File Dimensions

File Size (1 Layer)

200 DPI

5100 x 4400

85.6 MB

300 DPI

7650 x 6600

192.6 MB

400 DPI

10200 x 8800

342.4 MB

Barbarossa: Army Group Center, 1941 (68" x 44") Map

PPI

File Dimensions

File Size (1 Layer)

200 DPI

13600 x 8800

456.5 MB

300 DPI

20400 x 13200

1 GB

400 DPI

27200 x 17600

1.8 GB

It's clear that for smaller games, you can go up in resolution while not affecting file size too much; but for “monster” games, you become constrained very fast.

Remember that Java Virtual Machines by default generally only can access about 900 MB of RAM; so, so... 10K by 10K pixels (400~ MB) is roughly as big as your map can get for VASSAL, before you start hitting RAM issues.

Also, you're going to need at least four times that memory if you're editing the map, so that you can have multiple layers in photoshop – that's 1.6 GB of RAM – you're getting very close to the 2 GB per process limit that older 32-bit programs have – not all of us can afford the latest 64-bit graphics programs.

COUNTER SIZES

For game counters, we're not as constrained, as shown by the table below:

1/2 Inch (12.7mm) Counters (3W Games)

PPI

File Dimensions

File Size (1 Layer)

200 DPI

100 x 100

40 KB

300 DPI

150 x 150

89 KB

400 DPI

200 x 200

157 KB

5/8 Inch (15.875mm) Counters (Schutze Games)

PPI

File Dimensions

File Size (1 Layer)

200 DPI

125 x 125

62 KB

300 DPI

188 x 188

139 KB

400 DPI

250 x 250

246 KB

3/4 Inch (19.05mm) Counters

PPI

File Dimensions

File Size (1 Layer)

200 DPI

150 x 150

90 KB

300 DPI

225 x 225

200 KB

400 DPI

300 x 300

353 KB

Honestly, I would go to 400 x 400 (626 KB) or 500 x 500 (1 MB) counter sizes; because we only need to make one copy of each counter – we don't need to have 25 copies of Infantry 1-1 chits like with a physical game.

Which would you rather have in a VASSAL game?



The smaller one (75x75) is perfectly adequate for current (1920x1080) monitors, particularly at 100 PPI resolution, but will become increasingly constrained as PPI inches upwards, and won't look as good when “stack zoom” is used in VASSAL.