Gattsu's Vassal Engine Insights

I started to create Vassal Module somewhere in the mid of 2019. On my way to work I am spending a lot of time on a train. So I started to design and create my own Vassal Modules. Some of them are public available and some of those are not. You will find them in my geek list: https://boardgamegeek.com/geeklist/272805/gattsus-vassal-modules During my updates I shared a lot of Vassal Engine insights. So for a better viewability I will start posting blog entries filled with my hard learned Vassal Knowledge. If you want to support me consider to buymecoffee https://www.buymeacoffee.com/Gattsu

1 , 2  Next »  

Recommend
7 
 Thumb up
 tip
 Hide

How To - Create Stateful Zones

Christoph Prenner
Austria
Vienna
Austria
flag msg tools
badge
Vassal Engine Engineer
Avatar
Microbadge: Altar Quest fanMicrobadge: Brook City fanMicrobadge: Mage Knight Board Game fanMicrobadge: Dawn of the Zeds 3rd EditionMicrobadge: I create Vassal modules
In my Gloomhaven Vassal module and in my Lost Ruins of Arnak Vassal Module I needed a way to find out if a zone is empty or not. This is needed if you bring back a card into your hand or if your game has e.g., a market and a new card should fill an empty space. I will describe my approach on my latest Vassal Module implementation for Lost ruins of Arnak. The module got permission to publish from CGE, that is great so you can check out the magic by yourself.

Before I jump into the Vassal details, I will explain how the market of cards is handled in the Lost Ruins of Arnak. The available Cards are displayed on the board in that way.
From gallery of gattsu

Whenever one of the cards are bought all cards from the left/right (depending on the card type left->Artifacts / right->Items) are moved to fill the gap. Afterwards the last empty space is filled with a new card.
From gallery of gattsu

The procedure in Vassal is theoretically straight forward. If the player buys an Item. Move all cards on the right side of the empty space on space to the left. This will leave the rightmost space empty and there a new card is placed.

The first step is to add “Zones” for the Card row, so each space is identifiable. Those spaces can be Zones or one Zone with a rectangular grid plus grid naming. I have created an individual Zone for each Card in the row and named them 11->16. Then I added a Global Property for each Card space with the value 1 (this property will be used to keep track if a space is empty or not -> 1 if a card is in the space and 0 if the space is empty).
From gallery of gattsu

Next let us take a look at the Item Properties. There are only two important Traits for this feature. First the “Send to Location”-Trait “Move Item to Space (12-16)” if this Trait is triggered the card is sent to the appropriated Space. The “Set Global Property”-Trait is the 2nd important Trait and it will set the Global Property for a certain space to 1 (this means this space is not empty anymore).
From gallery of gattsu

That’s for the Item Cards itself. Now let us switch to the Main Board where the Card Row is located. There I added a Global Key Command “Refill” clicking on this button in the toolbar will trigger the “Refill” Key command targeting all pieces on the board. Furthermore, I added an invisible piece to the different Card Zones I12->I16. Each of those pieces contain 3 Traits that are all listening for the “Refill” Command (Traits that are triggered by a certain key command are worked off from the bottom to the top)
From gallery of gattsu

First the “Set Global Property”-Trait is triggered and the Property for this space is set to empty by setting the Card Row Global Property to the value “0”.
From gallery of gattsu

Then a Global Key Command sends the “SetFilledI” Key Command to only this Zone. If a card is currently in that space the Global Property for this space is set to 1 (Space is not empty).
From gallery of gattsu

Finally, the third GKC-Trait sends a Global Key Command to the Card Zone on the right side of the Card Row. But only effects the Card in that space if the Global Property for the move destination space is set to “0” (meaning the space is empty).
From gallery of gattsu

Those Traits are worked through one by one for each Card Row Zone (12->15). The last Zone is drawing a card from the deck if empty.

From gallery of gattsu

After clicking the Refill Button:
From gallery of gattsu


I guess that’s it and I described the basic stuff for this feature. In the Lost Ruins of Arnak there needs to be handled a lot more. Because depending on the turn Items or Artifacts are filled only up the Moon Staff. So, the number of Artifacts and Items varies each turn. Furthermore, the move direction is different for Artifacts and Items. But those details I will leave for you to explore by yourself.
Twitter Facebook
0 Comments
Thu Dec 2, 2021 3:06 pm
Post Rolls
  • [+] Dice rolls
Recommend
1 
 Thumb up
 tip
 Hide

How To - Scan Cards

Christoph Prenner
Austria
Vienna
Austria
flag msg tools
badge
Vassal Engine Engineer
Avatar
Microbadge: Altar Quest fanMicrobadge: Brook City fanMicrobadge: Mage Knight Board Game fanMicrobadge: Dawn of the Zeds 3rd EditionMicrobadge: I create Vassal modules
In my first entry of this blog, I wrote about how to get Assets for a Vassal Engine Module. One part of this blog entry wrote about scanning the components by myself. A little recap I used so far, the Canon Scanner MX 435 and scanned in 9 Cards at once. However, this solution needed a lot of afterwork. Those scanned in sheets needed to be cut into the individual cards afterward and sometimes the alignment needed to be fixed. Overall, a ton of work with mediocre output. So, I always dreamed about a Scanner where I put in a stack of cards and a few minutes later all of those cards are scanned in.

After some intense time researching, I have not found anything useful. But then changed my search pattern from poker cards to credit cards. In the end I had two candidates:

1 - Canon p-208ii
2 - Plustek MobileOffice S602

and I have chosen the Canon p-208ii. Still this is not the solution I have dreamed of but it is a huge improvement.

Here is a little comparison between my old Scanner, the new one and a Image provided by the publisher (as reference).

From gallery of gattsu

Quality - 300 Dpi
Speed - Super fast less than one second per card.
Scanner - Canon p-208ii
From gallery of gattsu

Quality - 400Dpi
Speed - Takes a few seconds till a card is done
Scanner - Canon p-208ii
From gallery of gattsu

Quality - 600Dpi
Speed – I have not taken exact times but there seems no difference regarding speed vs 400 Dpi
Scanner - Canon p-208ii
From gallery of gattsu

Quality – better Brightness
Speed – maybe 15-30 seconds per A4 sheet
Scanner - Canon MX435
From gallery of gattsu

Original provided by game publisher (for reference)

Summary
400dpi vs 600dpi
I see not a real huge difference neither speed nor quality (size differes).
300dpi vs 400/600Dpi
300dpi is super fast but the quality is at max okish. However if I have to scan 1000+ cards this might be the way to go.
p-208ii vs MX435
The main difference is the brightness. p-208ii is a bit too dark and the MX435 is a bit too bright. This might be fixable with photoshop? Please reach out to me if you have any idea how to improve the quality of such a scanned in image.

I have scanned all those cards with sleeves. I was really worried about damaged cards after the scan process. But only in the 300dpi mode the sleeves got a bit squeezed if not scanned diagonally. I think I will scan the cards without sleeves in the future.

From gallery of gattsu
Twitter Facebook
0 Comments
Tue Nov 2, 2021 12:10 pm
Post Rolls
  • [+] Dice rolls
Recommend
10 
 Thumb up
0.25
 tip
 Hide

How To - Auto rotate a Token

Christoph Prenner
Austria
Vienna
Austria
flag msg tools
badge
Vassal Engine Engineer
Avatar
Microbadge: Altar Quest fanMicrobadge: Brook City fanMicrobadge: Mage Knight Board Game fanMicrobadge: Dawn of the Zeds 3rd EditionMicrobadge: I create Vassal modules
I like Thunder Alley and Grand Prix but playing the games on Vassal is really a pain because of the constant need to rotate the cars. In my Rallyman GT Vassal Module I started to create round tokens so there is no need to rotate them. However, I really wanted to implement something much more convenient in the Apocalypse Road Vassal Module.

Every space on the map holds a “global property” with a number of the needed rotation facing. The cars can have 12 different facings. For easier maintaining I called every zone like the needed rotation facing. Then I added a Zone Global Property called ”RotState“ with the needed facing as number. Beside that I added either a “Rectangular Grid” in the case that a zone contains more than one space or a “Irregular Grid” for single Space Zones. This will result in a nice snap on effect for the cars.
From gallery of gattsu

I won’t lie to you this has been a tremendous amount of work and I only did this for one map. Next the car tokens need a “Can Rotate”-Trait. I think that is pretty much self-explaining. But be aware to give this trait a Rotator name otherwise you won't be able to retrieve the properties like the facing state.
From gallery of gattsu

Now that a car can be rotated, and a zone can tell the token the rotation facing. A trigger Action will then rotate the token till the rotation facing is equal to the number of the zone global property.
From gallery of gattsu

Finally, the map will call the “Tigger Action”-SetRot after moving the car token on the map. This results in always the correct rotation. Well almost, as sometimes spaces are intersections but I for now I am satisfied with my solution
From gallery of gattsu
Twitter Facebook
0 Comments
Fri Mar 5, 2021 8:30 pm
Post Rolls
  • [+] Dice rolls
Recommend
5 
 Thumb up
 tip
 Hide

How To – Integrate Final Scoring

Christoph Prenner
Austria
Vienna
Austria
flag msg tools
badge
Vassal Engine Engineer
Avatar
Microbadge: Altar Quest fanMicrobadge: Brook City fanMicrobadge: Mage Knight Board Game fanMicrobadge: Dawn of the Zeds 3rd EditionMicrobadge: I create Vassal modules
How To – Integrate Final Scoring

I backed Euthia when it came to Kickstarter and I really wasn’t sure if it is something for me. First it was designed for competitive play and the solo mode has been added later. Second it is a kind of action selection with a dice role combat mechanic. My impression has been that the game seemed to be quite luck based without much decision making. Luckily the publisher created a TTS mod and so I start to work with those assets on a vassal module. Ok, enough prelude. At the end of Euthia Game players calculate their final scoring. Beside a lot of Hero Board calculations, the numbers of Tokens on the main board are needed. And this post will write exactly how to get those numbers.

The final Map is filled with shield, interaction and trade tokens of different players. I really struggled at the end of the game to count all the tokens. For the final Scoring more calculations are needed but I only implemented this basic version. However, this basic idea could easily be upgraded to an advanced Final Scoring. This is the final map.
From gallery of gattsu

After clicking “Final Scoring” a report will show the exact numbers of tokens on the board.
From gallery of gattsu

The mechanic behind this reporting is pretty simple. All relevant tokens on the main map increase a dynamic property by one. Afterwards the final numbers are reported into the chat window. This reporting could as well on the main board displayed as Text Trait via a calculated property. That way it would be a real live reporting. But back then when I designed this feature my vassal knowledge wasn’t that advanced.

Each player has its own set of 4 tokens (Shield, Mining, Elemental and Trade) that are placed on the main board. I added to those tokens a “Set Global Property”-Trait that increments the corresponding Global Property eg AelShield.
From gallery of gattsu

The final counting is triggered by the Toolbar Global Key Command “Final Counting”. Each Player has a Single Piece that will be triggered by this “Final Counting” GKC.
From gallery of gattsu

First there is a Trigger Action that will trigger first the counting and reporting. Afterwards the Reset is triggered to make sure that all Global Properties of the player are set to zero. Otherwise, the reporting would only work once. The Global Key Commands send a Key Command to all Player tokens that will then increment the number of the Global Property (see the image of the player token traits “Set Global Property”). Afterwards the Report Action is triggered, and this will report the Global Property Numbers into the Chat window. Finally, a “Set Global Property”-Trait resets the Global Property back to zero.
From gallery of gattsu
Twitter Facebook
0 Comments
Sat Feb 27, 2021 4:51 am
Post Rolls
  • [+] Dice rolls
Recommend
8 
 Thumb up
0.25
 tip
 Hide

How To – Stack and DeStack a Stack without Double Click

Christoph Prenner
Austria
Vienna
Austria
flag msg tools
badge
Vassal Engine Engineer
Avatar
Microbadge: Altar Quest fanMicrobadge: Brook City fanMicrobadge: Mage Knight Board Game fanMicrobadge: Dawn of the Zeds 3rd EditionMicrobadge: I create Vassal modules
Ok this might be quite odd for a lot of Vassal Players because you can easily DeStack a Stack by double clicking it. However, I am playing often my Vassal Modules on my Surface go without mouse but with a stylus. Double clicking with a stylus is on a surface go a nightmare. I now avoid it as much as possible. Even right clicking is a pain. I want to have my Vassal modules as convenient as possible. So, I have the guideline as few double clicks, right clicks as possible and I do not implement a lot of keyboard short cuts.

In Rifles in the Ardennes, you need to stack your troops to squads. But in the game, you need to roll often a dice for each token or remove it. Therefore, I added a function to a QCB (Quick Change Bar). I first had the idea to add such a dice in the Gloomhaven Vassal Module. Having to right click and select one of the dozen different options felt so tedious. So I added the most used features like adding or removing HP/XP to a Map Window with only Global Key Commands in the toolbar. Here is an image of the QCB in Rifles of the Ardennes. The last two icons DeStack and Stack selected tokens
From gallery of gattsu

DeStack a Stack
For DeStacking you will need a “At-Start Stack” with a Single Piece and a Deck. Both should not be visible on the Map so I normaly move them to the side with X and Y Positions of –1000.
From gallery of gattsu

Now comes the meaty part. The idea is to save the current position of the Stack then send all tokens to a deck and then place each token to the saved position, but each time increase the send to location. The Single Piece “Stack” in the image above contains those Traits.
From gallery of gattsu

The first Trigger Action that is triggered by the QCB - GKC “DeStack” (see first image)
From gallery of gattsu

There are 2 Commands that are repeated for each token in a Stack but once before “DeStackP” Trigger Action is triggered. The “DeStackP” is as well a Trigger Action that will set two Global Properties “X” and “Y” with the current XY Location of the Stack. Afterwards all Stack Tokens are sent to a Deck.
From gallery of gattsu

It is important that “Trigger Actions” have only a limited range and only affect the Single Piece. If you want those tiggered Key Command effect other Pieces GCK are needed. Those are as well part of the “Stack”- Single Piece and trigger different Key Commands attached to the tokens

The Global Key Commands of the The SetX, SetY and SendToStackDeck
From gallery of gattsu

Each Token has corresponding Traits with those Key Commands:
From gallery of gattsu

So far, the current Location is saved, and all tokens are sent to a Deck. Now the “DeStack”-Trigger Action sends a Key Command to the top token in the Stack Deck.

Left is the GCK that is triggered for each token in the Stack Deck and right is the Send to Location trait of the Token.
From gallery of gattsu

This combo sends the token back to the Location where the Stack has been. Afterwards a “Set Global Property”-Trait is triggered (UpdateX). This sets the X Global Property to its current Value plus a constant offset eg half the token width or the token width. After this has been done for each piece in the Stack deck the tokens are placed side by side and are no longer stacked.

Stack several Tokens
All from above but this time do not update the X Global Property.
Twitter Facebook
3 Comments
Sat Feb 20, 2021 5:46 am
Post Rolls
  • [+] Dice rolls
Recommend
4 
 Thumb up
 tip
 Hide

How To - Create a new Vassal Module - Part 3

Christoph Prenner
Austria
Vienna
Austria
flag msg tools
badge
Vassal Engine Engineer
Avatar
Microbadge: Altar Quest fanMicrobadge: Brook City fanMicrobadge: Mage Knight Board Game fanMicrobadge: Dawn of the Zeds 3rd EditionMicrobadge: I create Vassal modules
Welcome back to my 3rd post about how to create a Vassal Module. I am in the middle of creating a Vassal Module for Stilicho Last of the Roman. It is time to add all the missing tokens to the module. I created a “Game Piece Palette” with a “Tabbed Panel”. There I added several Panals containing the different tokens.
From gallery of gattsu

In the latest Vassal Engine Versions, it is possible to set the Image scale in those Game Piece Palettes. This is a huge improvement. So far, I have not created any Vassal Module without the zoom capability. Resizing maps mostly reduce the readability as well. But huge maps need huge tokens and without the scaling option those huge tokens lead to crowed Game Piece Palettes.

The last page of the rulebook is a player aid. I will add this one to the module as a “Chart” in a “Chart Window Menu”. The size of those charts is sometimes a hazel because if they are to huge, they will span over the whole window. But if they are too small you won't be able to read anything. I try to resize them as small as possible and with a width of 500.

I will now start my first game and write down all improvements I did add.

Ok that was fast, I missed that I will need some dice. There are several ways to add them to your game. I really prefer them to be in my main toolbar as a symbolic dice button.
From gallery of gattsu

Now there is a Red Die in the Toolbar and with a click on it, it will be rolled and you can directly see the result. Furthermore, the result is reported in the chat menu. You can add several dice in one Symbolic Dice Button and I might do that now. The advantage of this is that if you always need to roll two dice one click on this button can achieve this. And here we go:
From gallery of gattsu

Just played my 2nd Enemy Card and need once again have to adjust the Module. Some Cards need to be removed from the Game (send to a History Pile). A simple “Delete”-Trait might be enough but then the cards are gone, and I have no idea if there might be another card that tells me that I can retrieve a card from the History Pile. I just added another Map Window called History Pile with one History Pile Deck. I also added a Return to Deck-Trait to all Cards in the game. Now I can send every card to the History Pile. Alternatively, I could have added another Prototype for History Cards only to the correct cards. So only History Cards can be sent to the History Pile. But that’s a lot of tedious work with very few advantages.

I just realized that I always mess up the Enemy card count I have to play. Each Enemy Phase 3 cards are played one at the time. However, after one is resolved it is moved to the surge spaces. If a Surge occurs, I mostly have no clue which card has been played. Therefore, I change the Deck draw of the Enemy Deck to Face Down. Now I can deal 3 cards face down in a row and resolve them one by one by flipping them.

Oh gosh just lost the game on turn 4. I got executed by Olympius (what an a**). For now, my faith has been the same as the real Stilicho, but he at least had beat the goths. I better do not write where they hold their feast during my execution.

I think I am fine with the Vassal Module. I might add more Action Buttons for drawing Cards or a Button for a faster reshuffle but for now I will conclude this blog entry series.
From gallery of gattsu

I will now contact the publisher and might be able to share the Module soon.
Twitter Facebook
0 Comments
Sat Feb 13, 2021 4:55 am
Post Rolls
  • [+] Dice rolls
Recommend
7 
 Thumb up
0.25
 tip
 Hide

How To - Create a new Vassal Module - Part 2

Christoph Prenner
Austria
Vienna
Austria
flag msg tools
badge
Vassal Engine Engineer
Avatar
Microbadge: Altar Quest fanMicrobadge: Brook City fanMicrobadge: Mage Knight Board Game fanMicrobadge: Dawn of the Zeds 3rd EditionMicrobadge: I create Vassal modules
This is the 2nd Part of how I create a Vassal Module for Stilicho. So far, I have added tokens and zoning to the main board. Now I will continue with the Enemy and Roman Cards. The Rulebook includes a very nice Enemy Board so I will use this one as well in the Vassal Module. But let’s create a new Map Window called “Enemy Board”.
From gallery of gattsu

The window should be closeable and an own button in the Menu Bar. Therefore the “Include toolbar button to show/hide?” is checked. At some point in the past, I stopped using Text for the Buttons and switched to Icons with Tooltip Text. This really keeps the Toolbar clean. I normally also remove the “Mark unmoved button icon” by simple click the Select-Button and then abort it by closing the pop up. Most of the time I do not use this feature in my modules.

Then I copy/pasted the “Zoom capability” from the Main Map. I also remove the Image Capture Tool as I do not think this will be needed in this window. Time to add a Board to this Window (similar to the Main Map). This time a simple Rectangular Gird will be enough to keep the cards in their correct spaces. Speaking of cards let’s add them. I will add them directly to an Enemy Deck. This is what I am ended up so far. A deck with all Cards and a Discard Pile that lets you send all Cards back into the deck. Both Decks are always face down, draw cards face up and are shuffled automatically (btw I just changed that for the discard pile it now is always face up and never shuffles). All the cards share the “Enemy Card”-Prototype Trait. For now, I have only added two Traits there. One adds the back of the cards (Mask-Trait) and the other one lets you Discard the cards to the Discard Pile.
From gallery of gattsu

The Enemy Deck is later in the game seeded with Late War cards. For those I will add a Deck as well. But this Deck is not visible because I placed it with an offset of –500/-500. All those cards in this Deck have beside the Enemy Card Trait and additional Prototype Trait called “Enemy LW Card”.
From gallery of gattsu

Currently this Prototype only includes one Return to Deck Trait that sends the card to the Enemy Deck. A Global Key Command on the Enemy Board will send this “Return to Deck”-Key Command to all Cards in the Enemy LW Deck. So, hitting the Button on the Enemy Board sends all Enemy LW Cards to the Enemy Deck.
From gallery of gattsu

I think we are now fine for the Enemy Board. Some tweaks might come up during playing the first game.

The next Cards I will add are the Roman Cards. I will add them to a Deck in the Player Hand. As Stilicho is a Solitaire Game there is no need for hiding information. Therefor a normal Map Window will be enough. The size of the Board are 2 rows and 4 Card Slots (1 Slot = 350x487). 6 Playing Cards for the Hand, 1 Deck and 1 Discard Pile. The Background is set to the same red as the red of the Roman Cards Back. I think this gives the Vassal Module a nice touch.

Finally, a Rectangular Grid will take card that all Cards stay in their Space.
From gallery of gattsu

Again, we will need a Roman Deck, Discard Pile and a Deck full of the Roman Late War Cards. All in all, it is the same what I just have done on the Enemy Board. I actually copy/pasted most of the stuff and just adapted names, tooltips and key commands.
From gallery of gattsu

I think I will stop for now and conclude the rest in my last post. In the next one I will add the rest of the tokens and the player aid. Then I start playing and fine tune all what’s still missing.
Twitter Facebook
0 Comments
Sat Feb 6, 2021 9:07 am
Post Rolls
  • [+] Dice rolls
Recommend
16 
 Thumb up
6.00
 tip
 Hide

How To - Create a new Vassal Module - Part 1

Christoph Prenner
Austria
Vienna
Austria
flag msg tools
badge
Vassal Engine Engineer
Avatar
Microbadge: Altar Quest fanMicrobadge: Brook City fanMicrobadge: Mage Knight Board Game fanMicrobadge: Dawn of the Zeds 3rd EditionMicrobadge: I create Vassal modules
Today I will start writing about how I am creating a new Vassal Module. I have recently bought Stilicho from Wargamevault. There are not many components so I guess it will be quite easy to implement. But as with most of my Vassal Modules I have not read the rules or watch any tutorial so far. But I have sorted all the stuff in different folders (cards, tokens, board, player aid). I resized all the components as well. For cards I normally choose 350x490 and for tokens something between 50x50 and 150x150. Ok let's open vassal and create a new Vassal Module.
From gallery of gattsu

First, I double click the Source Folder and name the Vassal Module. Afterwards I add a nice box cover image to the “About Module”. Size wise I normally choose something with 500x???. That should be fine for the most screens and not take too much window space on start up. This image will replace the standard image which is shown in the first Screen a player will see.

It is time to take a look into the rulebook....

In the meantime, I have renamed all the tokens and cards. Time to add a new Board to the Vassal Module. As there is only one Board, I will add the game board to the Main Map.
From gallery of gattsu

The whole board is still quite huge therefore a “Zoom capability” is the next thing to add. Most of the times .5 is the way to go and this is also the initial value I will choose. I also keep the original size this will be useful if text is on the board, I won't be able to read without the zoom. Additionally I add as well the zoom factor .4 ,.3 and .2.

It looks like there are some Trackers on the Main Map (Turn Tracker, Round Tracker, Stilicho Executed...). I really like to have my counters snap on those Trackers. Sometimes in the heat of the battle I cannot remember where I have last moved those counters. So, if then a Counter is between two numbers I have no clue where it should be. Furthermore, I want that the movement of the turn token will be reported. As there will be multiple different zones on the Main Board I will add exactly that to the Board. I will now guide you through the first one and then do the rest on my own.
From gallery of gattsu

The Zone needs a nice Name eg Turn and the “Location Format” (currently $name$) needs to be changed to $gridLocation$. This will change the movement reporting in the chat window from Turn to the correct number of the Turn Token. Youl will just see why in a second. Next we define the shape of the Zone by clicking the button and drag and drop the correct size of the zone.
From gallery of gattsu

So far this is only a zone. Adding a Rectangular Grid with Grid Numbering will add all the magic.
From gallery of gattsu

The Rectangular Grid is a bit of a pain to find out the correct numbers. I normally start with the actual size of the token 100x100 and enter those in the Cell Width/Height. Then I click on the Edit Grid and adapt the numbers. For the Grid Numbering the idea is that a movement of a token will report the Turn number like (T1-T2-T3 and so on). You need to play with those numbers above and find the correct ones. The good news this can be done with the board open. Just start a new game and move the token around. The numbers can be changed on the fly (no need to save anything or close the grid numbering). Just change them and see the effect.

So finally, it looks like this in game:
From gallery of gattsu

I will now copy paste this zone and adapt it for the other Trackers. But be aware sometimes you need to save and restart the module before you can work with those copied zones. So far, I have those Zones added:
From gallery of gattsu

I might add more zones for the different Spaces like Home Spaces, Siege Spaces and so on but for now I am fine.

Next some tokens need to be placed on the board. I will take “At the Start Stacks” for the Turn and Round Markers and place them in the Starting Spaces. The 12 Comitatenses I added as well into a “at the Start Stack” but each token has the same “Prototype”-Trait. In this Prototype a “Mask”-Trait addes the back of the Token (“Garrison”) and I add as well a “does not stack"-trait and keep the the standart settings for this trait. This will take care that I do not need to double click those tokens if I want to select only one. Beside those Army markers, Leader token need to be placed on the board. Both markers are placed initial in the Unactivated Space on the main board. Adding as well a Prototype Trait to the Leaders. This will improve the possibility to change them easily in the future. Token-wise I finished the setup of the main board:
From gallery of gattsu

And here a little snapshot from the current prototype traits:
From gallery of gattsu

So far there I just have added stuff to the Vassal Module. I will continue with the cards in my next post. Afterwards it is time to actually start playing the game and add functionality. But for now let's take a look at the board.
From gallery of gattsu

Some additional notes. The Mouse-over Stack Viewer does not include non-stacking pieces. Adding the "Does not stack"-Trait excludes them from the standart settings. But you can easily change that by double click the Mouse-Over Stack Viewer on the Main Board and check the option "Include non-stacking pieces".
As well standart is a Game Piece Palette that is docked to the main menu bar. Double clicking and check "Hidden?" hides this Button. I normaly do not like to have them there and add if neede another "Game Piece Palette" that is drag and dropable.
Twitter Facebook
12 Comments
Sun Jan 31, 2021 4:58 am
Post Rolls
  • [+] Dice rolls
Recommend
9 
 Thumb up
 tip
 Hide

How to – Play cards or pieces in a row

Christoph Prenner
Austria
Vienna
Austria
flag msg tools
badge
Vassal Engine Engineer
Avatar
Microbadge: Altar Quest fanMicrobadge: Brook City fanMicrobadge: Mage Knight Board Game fanMicrobadge: Dawn of the Zeds 3rd EditionMicrobadge: I create Vassal modules
I first saw this in SpaceCorp and Tank Duel. Both are great games with awesome Vassal Modules. In both Modules Cards are played into a row and each next card is played beside the previous card without drag and drop. Each card has a play card context menu option that sends the card to another player board to the correct space. In never thought about this till I started to work on my Marvel United Vassal Module. There all Action Cards are played next to the previous one and this is done till the end of the game.

This post will write about:
- Global Property Implementation
- Move fixed distance Implementation
- Stacking Implementation

Global Property Implementation:
For a better understanding of this topic an image from the Marvel United Vassal Module.
From gallery of gattsu

Each player has her own hand of cards and triggering the Play Context Menu will send the card to the next free space in the row.

So how is this done. First a card will need a “Send to Location”-Trait. Playing to a X/Y Position on a certain map. In my case the Y Position is always the same due to the linear play of the cards. But then I want to have each card played into another X Position. The send to X Position is not a constant number but the variable $PlayX$.
From gallery of gattsu

PlayX is again a Global Property which can be set dynamically. This is done each time after a card is send to the board. After the “Send to Location”-Trait is triggered. The “Set Global Property”-Trait is as well triggered and sets the PlayX Global Property to a new Value. In this case the current value of PlayX plus 350. That’s exactly the width of a card.
From gallery of gattsu

Without the need to ever reset my X Position this is straightforward. However, as I just implemented a counter that is triggered by playing the card via the “Send to Location”-Trait things can get messy if you ever drag and drop cards to the Action Card Line.

Move fixed distance Implementation:
This is a different approach for another gameplay need. In Buddy Cop you will fill your board at the start of your player turn by moving a card to the left to fill the board. Hitting the marked button will move all cards in the line to left and reveal a new card from the deck.
From gallery of gattsu

The implementation is quite easy. You move a card with a Key Command a certain distance to the left. In this case it is a movement of –390 to the right (which results to a movement of 390 to the left). However, with a Discard pile on the same map this Key Command must not send to the Discard pile. With the restriction of ‘DeckName !=”Discard”’ the Discard pile is excluded and no card in there will be affected.
From gallery of gattsu

Stacking Implementation:

There is a way to display Cards next to each other out of the Box. In Vassal you can use the Player Hand Window that will display all Player Hand Cards next to each other. As far as I understand this is achieved by the Stacking Option be activated and Pieces are expanded even when they are stacked. Honestly, I have not used this option so far and it comes with a few drawbacks I dislike. Stacking tokens on the cards is no longer possible, and all cards are played in a row and cannot be allocated on two different rows. Also everything is affected by this Stacking Option. So you cannot have this play row as a subelement of another map window.
Twitter Facebook
2 Comments
Sun Jan 24, 2021 8:01 am
Post Rolls
  • [+] Dice rolls
Recommend
3 
 Thumb up
 tip
 Hide

How to – Display Token information

Christoph Prenner
Austria
Vienna
Austria
flag msg tools
badge
Vassal Engine Engineer
Avatar
Microbadge: Altar Quest fanMicrobadge: Brook City fanMicrobadge: Mage Knight Board Game fanMicrobadge: Dawn of the Zeds 3rd EditionMicrobadge: I create Vassal modules
I am mostly playing Vassal Modules on my train to work with a Surface Go. So, my display is pretty limited, and I really do not like to switch windows during gameplay. The most played Vassal Module I use is Gloomhaven. Playing this beast solo needs to handle 2 Heroes. This means I need the dungeon board, 2 Hand Windows, 2 Hero board windows and the Monster Board. My final arrangement is that I had the dungeon board on the left side of my window and the two hand windows on the right side. After choosing all my player cards I opened the two player boards and start resolving the played cards. In the end I never had enough space for the enemy board. I thought about how I could get rid of the enemy board and finally stored all information of the enemy token in “Dynamic Property”-Traits.
From gallery of gattsu


This post will write about:
- “Dynamic Property”-Trait
- “Calculated Property”-Trait
- “Marker”-Trait
- Mouse-over Stack Viewer

All in all, this is pretty simple and easy to implement however for a monster like Gloomhaven this has been a tremendous amount of work. I created a Prototype for each kind of monster elite and normal a “Dynamic Property”-Trait. For each Level I added a Key Command that sets the correct Stats.
From gallery of gattsu

Sending the Key Command “SetL1” will then set the Stats for all Enemy Tokens.

But for Gloomhaven the Enemy Stats is not enough. Furthermore, you need to know the current Enemy Card. The idea is that a drawn enemy card sets a Global Property. I solved that with the Drag and Drop feature on the Enemy Board Map.
From gallery of gattsu

This Setting will then trigger always the Key Command “SetCardValue” when an Enemy Card is drawn.
This Key Command will set the Text of an Enemy Card as Value in a Global Property.
From gallery of gattsu

And finally, this Global Property will be applied with a “Calculated Property”-Trait to the token.
From gallery of gattsu

All together will set a lot of Text Values to different Properties but to view all the Text another Setting is needed in the Mouse-Over Stacking Viewer. The mentioned Properties will be displayed by display a Text above and below a token.
From gallery of gattsu

This example is pretty puffed up because Gloomhaven needs a lot. But I did something straighter for Rifles in the Ardennes. Furthermore, it shows how flexible the Mouse Over Stack Viewer is.

This is the Mouse-Over Stack Viewer:
From gallery of gattsu

For Troop Tokens a player can set a Value in a Property Sheet (Equipment). This Text will then be displayed above a Troop Token.
From gallery of gattsu

The Token Values will be displayed below a Troop Token and is defined upfront in a “Marker”-Trait
From gallery of gattsu

In the End for a Player a Troop Token displays all needed information and the continues switching to a reference sheet is no longer needed
From gallery of gattsu
Twitter Facebook
0 Comments
Sun Jan 17, 2021 8:31 am
Post Rolls
  • [+] Dice rolls

1 , 2  Next »  

Subscribe

Categories

Contributors