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
| Setting | Value |
|---|---|
| Max players per queue | 4 |
| Min players to start | 1 |
| Default countdown | 15 seconds |
| Full queue countdown | 5 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
| Remote | Direction | Purpose |
|---|---|---|
showQueueUI | Server → Client | Open queue pane |
joinQueue | Client → Server | Join a queue |
leaveQueue | Client → Server | Leave current queue |
setPlayerCount | Client → Server | Host sets target |
startGame | Client → Server | Host starts early |