Skip to main content

Lobby & Queue System

The lobby is where players select their Quirkymal, form parties, and queue for runs.

Queue Flow

Player touches queue zone
→ showQueueUI remote fires
→ Player joins queue (joinQueue)
→ Host can set target count (1-4)
→ Countdown starts (15s default, 5s when full)
→ startGame → TeleportAsync to game server

Configuration

SettingValue
Max players per queue4
Min players to start1
Default countdown15 seconds
Full queue countdown5 seconds

Queue Service (queue-service.ts)

  • Manages multiple queue zones (up to 4 in Workspace.GameFolder.Lobby.Queues)
  • Touch detection for entry/exit
  • First player becomes host
  • Host controls target count and can start early
  • Countdown decrements each second, resets if players leave below minimum

Teleport

const teleportOptions = new Instance("TeleportOptions");
TeleportService.TeleportAsync(GAME_PLACE_ID, playersArray, teleportOptions);

Teleport data includes { gameStart: true } so the receiving server knows to spawn players at GameStart instead of Lobby.

Client UI

QueueController follows the existing GuiBase pattern:

  • Reactive state via queue-atoms.ts
  • Shows queue status, player count, countdown
  • Hidden by default, shown on queue entry

Remotes

RemoteDirectionPurpose
showQueueUIServer → ClientOpen queue pane
joinQueueClient → ServerJoin a queue
leaveQueueClient → ServerLeave current queue
setPlayerCountClient → ServerHost sets target
startGameClient → ServerHost starts early