How to Play

Use Twitch chat commands to interact with the system. Every command below shows both the placeholder form (e.g. !start <station> <location>) and a concrete example (e.g. !start station1 ATL).

You will need a Nvidia Gamestream client to play on UMVC3247 stations. The recommended program is Moonlight. See this guide for a rough reference on how to install and use Moonlight.

IMPORTANT NOTE: Allow 10-20 minutes for a station to completely boot after starting. Do not assume something has gone wrong until the station has still not become ready after 20 minutes.

Station and Cost Model

There are two station types:

Stations cost money to run, so they do not stay up forever.

Public and private stations are billed differently:

Public stations may shut down automatically after sitting idle for too long, and all stations may shut down when the relevant balance is exhausted.

Queue Model

Public stations use a queue-based matching system where players wait their turn to play. The queue structure is important to understand:

Only challengers need to use !accept to start a match. The incumbent does not need to accept - they are automatically in the match and waiting for a challenger.

When a challenger is called, they have a liminted time window to type !accept to confirm the match. If they don't accept in time, they go to the back of the queue and the next challenger is called.

Public Stations

The public stations are:

The important difference between them is mainly which queue you are entering. Each station is its own separate public line, active match, and machine session. Each station runs its own winner-stays rotation independently.

You should think of them like four different arcade cabinets.

The stream overlay should say the current status of each of these stations, and if they are online, the region it is deployed on.

Basic public-station flow

  1. Choose a station. They may be all offline, in which case you will need to start one:
    • !start <station> <location> — e.g. !start station1 ATL
  2. Use !queue <station> to see the line — e.g. !queue station1.
  3. Use !join <station> to enter that station's queue — e.g. !join station1.
  4. Wait until you are called (you'll see a message like "You have been called to challenge @incumbent").
  5. Only challengers need to use !accept — when called, type !accept to confirm your match.
  6. Use !status <station> to get the station's IP address — e.g. !status station1.
  7. Open Moonlight, click the + button, and enter the IP address from the command output.
  8. Click on the station in Moonlight to initiate the connection. You will get a prompt asking for a PIN.
  9. Enter the pairing PIN in chat:
    • !pin <code> — e.g. !pin 1234
    • If you need to target a specific station, use !pin <station> <code> — e.g. !pin station1 1234
  10. After successful pairing, click on the station again in Moonlight. Important: Select "Desktop" when prompted, NOT "Steam Big Picture".
  11. Play. If you run into connection problems, see the Help & Troubleshooting page.
  12. Connection issues: If you encounter errors or "connection closed" messages in Moonlight, keep trying - this is a flaky issue that usually resolves after a few attempts.
  13. If you win, use !won and stay on for the next challenger. If you lose, you can use !forfeit and move to the back of the queue.
  14. Use !leave when you are done participating in the queue.
  15. If no one else is using the station, use !terminate <station> to prevent it from sitting idle and burning balance — e.g. !terminate station1.

Important: Match timeout: AFK protection

If both players go AFK during a match without calling !won or !forfeit, the match will automatically time out after a configured time.

This exists to prevent "ghost" matches from running forever and burning community balance on an abandoned session. When the timeout fires:

What to do: If you see a message in chat like "@username has been called to challenge @username. Waiting for !accept. They have until 1:28:39 AM to accept" while you are still in a match and no one has typed !won or !forfeit, this means the 45-minute idle timeout has triggered. To resume the match:

  1. Type !accept to rejoin the match.
  2. Enter a PIN with !pin <code> (e.g., !pin 1234) — this can be any number, it doesn't matter what code you use.
  3. This puts the queue back into "match in progress" state, which prevents the idle timeout from starting.

You will not lose your place in line. The match resumes after both players complete these steps.

Station state transitions and timeouts

This section applies to public stations only. Public stations use queue-state timeouts for AFK prevention and to stop a cabinet from draining community balance forever when nobody is really playing. Private stations do not follow these public queue semantics, do not use these queue timeouts, and do not auto-terminate just because they reached the public idle queue state.

The usual public-station flow looks like this:

Idle
  |
  | first player joins
  v
Waiting for Challenger
  |
  | second player joins
  v
Waiting for Accept
  |
  | called challenger types !accept
  v
Waiting for PIN
  |
  | pairing completes with !pin
  v
Match in Progress
  |
  | !won / !forfeit / moderation / timeout
  v
Waiting for Challenger   or   Idle

Timeouts move the state machine like this:

Waiting for Challenger
  timeout
  -> Idle

Waiting for Accept
  timeout
  -> Waiting for Challenger (if incumbent remains)
  -> Idle (if nobody remains)
  -> or next queued player is called

Waiting for PIN
  timeout
  -> Waiting for Challenger (if incumbent remains)
  -> Idle (if nobody remains)
  -> or next queued player is called

Match in Progress
  timeout
  -> Waiting for Accept, recalling the same challenger

Preventing timeouts

If you want to keep a station alive, you need to keep it out of the states that are about to expire. In practice that means:

The only state that triggers public auto-termination is Idle: nobody in queue, nobody being called, and no match active.

Private Stations

Private stations are different from public stations in two ways:

A private station is started with an owner, and that owner has extra authority over that station. For example, the owner can use commands like !kickall, !terminate, and !resetmachine on their own private station.

Private stations are useful when:

A single user can start multiple private stations. This is particularly useful for tournaments, where one actor can provision multiple private stations at a time to run different tournament matches simultaneously.

Basic private-station flow

  1. Start a station:
    • !start <station> <location> — e.g. !start myroom ATL
    • Do not use the public station names like station1 through station4. Avoid names starting with "station" altogether.
  2. Once the station is created, you become that station's owner, and your balance is metered. Check that it came up with !status <station> — e.g. !status myroom.
  3. Use !status <station> to get the station's IP address — e.g. !status myroom.
  4. Have players open Moonlight, click the + button, and enter the IP address from the command output.
  5. Have players click on the station in Moonlight to initiate the connection. They will get a prompt asking for a PIN.
  6. The station owner authorizes connections by entering the pairing PIN:
    • !pin <code> — e.g. !pin 1234
    • If the owner is managing multiple stations or wants to target a private station explicitly, use !pin <station> <code> — e.g. !pin myroom 1234.
    • In other words, you connect people to the station by having the owner submit the pairing PIN for them.
  7. After successful pairing, players should click on the station again in Moonlight. Important: Select "Desktop" when prompted, NOT "Steam Big Picture".
  8. Connection issues: If you encounter errors or "connection closed" messages in Moonlight, keep trying - this is a flaky issue that usually resolves after a few attempts.
  9. Revoke access from authorized connections:
    • !resetmachine <station> — e.g. !resetmachine myroom
    • !kickall <station> — e.g. !kickall myroom
  10. End the station when you are done:
    • !terminate <station> — e.g. !terminate myroom
  11. Verify the station is gone by checking your owned stations:
    • !ownedstatus — e.g. !ownedstatus
    • Live stations will continue to burn your balance.