Comparing Properties Between Game Pieces

I need to have a piece issue a GKC to other pieces that have a matching property.

The Module Designer’s Guide has an example in which a counter has a GKC command with matching properties that includes “nation = $nation$”.

This works correctly, comparing the property nation on the counter receiving the GKC, to the property $nation$ on the counter sending the GKC.

I need to make a more complex set of comparisons and therefore need to use a Beanshell Expression. I cannot come up with any method to compare property values between two pieces in a Beanshell Expression. I tried:

{nation = $nation$}
{nation = "$nation$}

Can anyone advise how to compare property values between two pieces using a Beanshell Expression?

Thank you,


Off the top of my head, I believe it would just be


The use of $ (dollar signs) to signify variables is a Vassal tool that is not recognized by beanshell but, if you use that syntax, clicking the Expression Builder button should convert Vassal syntax to a Beanshell compatible expression.

It seems unlikely that the same name would correctly refer to different objects without any kind of qualifier though.

Malnorma is correct.

Even though converting nation=$nation$ by clicking on the Expression Builder button does yield {nation==nation},

{nation==nation} is always true because they do NOT refer to different objects – this compares nation to itself.

Anyone have a solution? I do need to compare properties between two different game pieces using beanshell.

Comparing properties between two pieces is a bit tricky in Beanshell expressions. The old-style expressions had special coding which handled each side of the == differently.

As far as I can remember, you should be able to use $…$ inside a beanshell expression to force it to be evaluated on the source piece before being tested against the destination piece:


You original example above would have failed due to using = instead of == and no closing " (though that may be just typos when you where writing it up).