Skip to content

CTF (Single-Flag)

189th's custom single-flag capture-the-flag mode. One neutral flag in the middle of the map; teams race to capture it back to their base. Built in TypeScript against the Portal runtime, with map layouts authored in Godot and converted to Portal spatial JSON.

Maps

Map Internal name
Abbasid MP_Abbasid
Hagental MP_Hagental
Outskirts MP_Outskirts
Subsurface MP_Subsurface

Each map has its own Godot scene and exported spatial JSON. The TypeScript code is map-agnostic; map-specific data (flag position, base positions, team-switch station positions) comes from the spatial JSON.

Sections

  • Design — flag flow, scoring, post-capture cooldown, scoreboard.
  • Team Switch Stations — runtime-spawned interaction points for swapping teams mid-match.

Key features

  • Single neutral flag (not symmetric two-flag)
  • Post-capture cooldown — after a successful capture, the flag stays at base briefly before respawning at center
  • Per-player scoreboard with custom columns
  • Player name announcements for flag pickup, drop, and capture (added in v4.5.9–v4.5.11)
  • Buried CapturePoint minimap marker — the flag location pings on the minimap (gotcha: this required a workaround discovered via Mike on the BFPortal Discord)
  • Clan info embed with the Discord invite URL, shown in the round preamble
  • Team switch stations — interactable props (ComputerMonitor) at each base that let players swap to the other team