Best way to implement a once per game reactionary action
Posted: 27 August 2020, 20:48
I'm looking for the best way to implement a certain rule on BGA.
In the game, the active player deals a card to every other player (in any order they choose). Every player has the ability to refuse the card they were just given, sending it to the discard pile instead. They must do so immediately and can only do it once per game. Most of the time, this ability won't be used until the last moment, if the card would cause the receiving player to immediately lose the game (the game has player elimination). In this last case, it will be a mandatory move in my implementation.
However, I'm struggling to find a good way to allow a player to use this ability at any point in the game. Some options I've considered:
1) The "naïve" way, using an extra activeplayer state. Every time a player receives a card, they must choose to accept or refuse it, after which the next card can be dealt. This would greatly slow down the game, which is supposed to be fast paced.
2) A variant of 1, using a client-side player preference to "automatically accept a card unless eliminated", which would be enabled by default but can be toggled at any point during the game. This would remove some of the downtime, but a player would need to make the choice to disable the preference ahead of time. Also, I'm not sure this could work on turn-based tables.
3) Add "refusing" the card as a possible action on every activeplayer state. The action can be used by the player who last received a card, without being the active player. The action would remain valid until another player received a card. I think this is similar to SOLO! where you can play a card out of turn if it matches the previous card.
4) Something something multipleactiveplayer state.
I think that option 3, the SOLO way, might be the best one, but I wonder if there's a better way, or some games I could look at as an example.
In the game, the active player deals a card to every other player (in any order they choose). Every player has the ability to refuse the card they were just given, sending it to the discard pile instead. They must do so immediately and can only do it once per game. Most of the time, this ability won't be used until the last moment, if the card would cause the receiving player to immediately lose the game (the game has player elimination). In this last case, it will be a mandatory move in my implementation.
However, I'm struggling to find a good way to allow a player to use this ability at any point in the game. Some options I've considered:
1) The "naïve" way, using an extra activeplayer state. Every time a player receives a card, they must choose to accept or refuse it, after which the next card can be dealt. This would greatly slow down the game, which is supposed to be fast paced.
2) A variant of 1, using a client-side player preference to "automatically accept a card unless eliminated", which would be enabled by default but can be toggled at any point during the game. This would remove some of the downtime, but a player would need to make the choice to disable the preference ahead of time. Also, I'm not sure this could work on turn-based tables.
3) Add "refusing" the card as a possible action on every activeplayer state. The action can be used by the player who last received a card, without being the active player. The action would remain valid until another player received a card. I think this is similar to SOLO! where you can play a card out of turn if it matches the previous card.
4) Something something multipleactiveplayer state.
I think that option 3, the SOLO way, might be the best one, but I wonder if there's a better way, or some games I could look at as an example.