I’m tinkering with a framework to implement board games in c# (similar to boardgame.io in JS) part of that is getting a handle on turn structures. (What is a round? what is a turn? who gets to go when? etc)

So I’ve gone through all my games and looked for recurring patterns and exceptions to them and here’s what I’ve collected so far:

  • There’s always at least one structure that handles how player act or “take turns”
    • the vast majority of games do traditional turns - one player does things, then then another,
      • usually in a fixed order maybe going forward some times and backward other times.
      • sometimes the order can change
      • also possible are:
        • turn order decks (you don’t know who goes next but know that everyone gets a turn)
        • action tracks (where whoever is furthest back gets to go next, possibly resulting in an uneven number of turns)
        • the next player is dependent on an action of the previous player
    • it’s also possible that players can play simultaneously
      • a complete free for all is pretty common
      • it’s also possible that players can act freely to some point, then have to wait for everyone else to catch up
    • another consideration, both for concurrent and sequential play is that sometimes some players are excluded (Codenames for example lets all guessers on a given team act concurrently but not the leaders or the other team)
    • there can be different rules at different times (like first picking a tile in sequence then everyone can place it simultaneously)
    • and there can be nested rules (like every player gets to run an auction but in every auction each player get’s to bid as well)
    • one relatively common special case is where certain actions on a player’s turn result in decisions being needed from other players (trades, attacks, “each player …” effects)
  • there are often structures that simply subdivide another structure
    • they can occur at any level. A game may be divided into “setup” and “play”, a round could be divided into different phases but a single player’s turn might also be divided into smaller steps.
    • these subdivision usually restrict / specify which actions are allowed in them
    • these subdivision often come with limits like: you can only do N actions
    • sometimes a player can “pass” sometimes they cannot

I’m wondering if anyone can think of an instance that is not covered by these “rules”.

  • Moghul@lemmy.world
    link
    fedilink
    English
    arrow-up
    5
    ·
    1 year ago

    I love Death in Space’s turn order style. One of the players goes first, then they decide which enemy goes next. Then when the enemy is done, they decide which player goes next. This repeats until one side is out of participants, and then the other team’s participants go in whatever order they like.

    This avoids any discussion for who goes next, and helps cut down on long winded strategy discussions because there’s no guarantee to the turn order. Gameplay becomes way more focused around taking advantage of the current situation, but you can still plan a strategy.

  • lichengeese@beehaw.org
    link
    fedilink
    English
    arrow-up
    3
    ·
    1 year ago

    Rather than trying to define abstractions for turns and rounds, maybe you could implement the game state (and possibly individual players) as a finite state machine.

    In this model, the way you set up the states and transitions for a particular game will capture its idiosyncracies in turn and round order.

    • Kempeth@feddit.deOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      1 year ago

      That’s what I’m currently doing. But I’m not yet sure if a straight FSM is such a great fit. There’s not good mapping for the concept of turns in a single level FSM. You can do it of course but if you have multiple such models or nested instances where each player gets to react to specific actions on each player’s regular turn, each of them is gonna push the the properties needed to manage that into the shared state.

      So I’m currently at nested state machines. This way the implementation details for alternating between players can be hidden from the higher level states.

  • myfavouritename@lemmy.world
    link
    fedilink
    English
    arrow-up
    3
    ·
    1 year ago

    In Galaxy Trucker, there is a “distance” or “race” track that manages turn order.

    Once all players have built a space ship (simultaneously picking and laying tiles), players place markers on a race track. The first player to finish building their ship is in first, the second player behind them, and so on. I believe there is one empty space between them all as well.

    The rest of the game is flipping over event cards one by one and resolving them. Some events are resolved by all players simultaneously. Others are resolved in the order on the race track. First player resolves part of the event. If there’s anything left to resolve, second player resolves part, and so on.

    Part of resolving an event might involve moving a certain number of steps up or down the race track, skipping over any occupied spaces.

    So turn order here would be complicated to work out, especially in a FSM. Effect cards may change turn order, but not always. There may be empty space between two players in the turn order that gets reduced or increased instead. I suppose you could model it with N real players and then X place-holder players that don’t actually take their turn.

    • Kempeth@feddit.deOP
      link
      fedilink
      English
      arrow-up
      4
      ·
      1 year ago

      Thanks! I have Galaxy Trucker too.

      In my current draft you can basically say “here is what one player get’s to do in their turn” and tell the framework to make a machine that let’s every player run through that in some kind of sequence. For now the sequence is fixed. But ultimately all that GT needs is a recalculation of the order after every card. That’s relatively simple to add with a post-action trigger.

  • ryathal@sh.itjust.works
    link
    fedilink
    English
    arrow-up
    2
    ·
    1 year ago

    Action selection games might ruin your idea, like in Race for the Galaxy, everyone picks actions and everyone gets to do all actions selected. Puerto Rico is similar, but actions are selected in turn order instead of simultaneously.

    Dominion has the possession card, which gives player A control over player B’s turn, and player A gets all cards acquired by player B. There’s also cards that grant extra turns, with varying conditions.

    Red Dragon Inn has a basic turn order, but every player have many cards that can be played anytime or in reaction to certain events. There’s also the gambling mechanic which gives everyone a turn in a mini game that doesn’t affect the main turns.

  • donio@feddit.de
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    1 year ago

    Looks quite comprehensive! Some cases that may or may not fit in already:

    • Turn order for the rest of the round determined by an early simultaneous step of the round: Gloomhaven, Undaunted, Khôra: Rise of an Empire
    • Player gets an immediate extra turn due to an action: Mottainai “Frog” card
    • Game ends immediately (mid-round) due to player action: Mottainai again.
    • Round ends immediately due to a player’s action skipping the other players’ turns: Cubirds
    • Parts of the round are timed: Bullet♥︎, Flatline
    • Kempeth@feddit.deOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      1 year ago

      Thanks a lot for those examples! Totally forgot about those “extra turn” effects. That’ll be fun.

      I had already considered a bunch of concepts about how a phase can end but not that it might be completely independent from any player action.

      The Gloomhaven scenario probably is the easiest of these since it is merely a variant of the general “player actions result in change of player order” case