Card Permissions

Hello,

I was wondering if it was possible to quickly modify a module file so that one player can hand out cards and the player it is handed to can flip them? To prevent cheating…For example, for secret objectives, anyone but the current player can deal a card but cannot look at it. Only the current player can flip. Thoughts?

Thanks in advance,

Ryan

Possible? I am going to guess yes, though I haven’t tried my recommendations below. Quickly? Probably not. Here are the complications:

  1. The mask trait cannot currently be set up so that one player flips the card, and the second player can unflip it. When a player flips a card, they are the only one who can unflip it.
  2. There is no builtin way to dynamically Restrict Access to a card. You cannot, for example, restrict drag-and-drop access to a card based on the CurrentZone of the card.

I would try one of two things:

  1. Use a Layer instead of Mask. Use the card back as the layer, and use the ‘Restrict Commands’ trait to restrict the ‘activate’ command when:
    _Active = true && playerSide != <current_player_property>

(a) Put a face-down deck in each player’s play area, with cards drawn face-down
(b) Define a zone on each deck, including the side name in the zone name - like ‘P1_SecretObjectives’
(c) When the card is drag-and-dropped anywhere, check if OldZone != $playerSide$_SecretObjectives.
(d) If they don’t match, the wrong player is trying to grab the card, and you should Return To Deck.
This would also require setting up ‘Apply keystroke to all pieces ending movement on this map’ on every map in your modules - but I think this should be done in every module anyway.

Obviously the first method is simpler to set up, but perhaps there are cases where it would interfere with other traits - I can’t think of any, but there you go.

Cheers,
Seth

See the discussion in this thread:

[url]https://forum.vassalengine.org/t/cards-and-masking/4672/1]

What I ended up doing is:

  1. Set up a “Covered” layer showing the card back (I put also a “NEW” label on it to quickly identify newly dealt cards);

  2. Have the dealer deal cards from the deck with a deck global key command (for example) which triggers
    a) sending it to the right location for the destination player
    b) un-masking it (that’s right)
    c) activating the “Covered” layer

  3. Then add an action button covering the whole surface of the card, restricted to only the playerSide “owning”
    the particular map window (or location on the game board) which triggers
    a) removing the “Covered” layer
    b) masking the card

Ahah, that’s where I stole that from. I thought the problem sounded awfully familiar. Thanks again for this elegant solution, Barbanera!

-Seth

Thanks for the detailed responses. I will try your technique!

regards,

Ryan

How do you set up a global command that sends just one random card from a deck?

Thanks in advance…

Ryan

First of all you need to add a send to location trait on all your cards (put it in a prototype) to move to the required location. Let’s say this is associated to CTRL-A.

Then it depends on how you want the dealer to deal cards. A first possibility is to have the dealer right click on the deck (which is face down, reshuffle always) and select a “deal card” command. To do this just add a DECK GLOBAL KEY COMMAND on the deck which will issue CTRL-A on the first card in the deck (Fixed number of pieces → 1).

Another possibility is to have a piece acting like some sort of push me button somewhere on your game board, maybe next to the deck itself. Then add an action button trait on this piece to cover the entire gif with command key CTRL-A, say, and global key command on the same piece which fires on CTRL-A and issues CTRL-A with property expression set at "DeckName = " and Fixed Number of pieces ->1).

Finally, you can also make the above piece invisible and unselectable (do not stack: never, never) and add instead a global key command to your map with associated key command CTRL-A and matching properties "BasicName=). In this case you will then have a button on your map’s toolbar which, when pushed, will deal the random card out.

Thanks barbanera, this was really helpful.