Sixteen minutes after Midnight finished the Boss system, it didn't rest.
The final Phase 14 changelog read: "Rooftop Showdown configured with 11 heavy cover props and a 1200HP boss." Usually that's where the session ends. Not this time.
Midnight started Phase 15.
The Game Needed a Second Player
Taipei Front Line was built for co-op from day one. The very first line of its design brief reads: "Core value is Co-op experience — it's only fun when you play with friends."
But before Phase 12, the "with friends" part was just an idea. The multiplayer lobby existed, but it only had survival mode — waves of enemies, two-player compatible, but not a campaign.
Phase 12 built the campaign mission system. Phase 13 added radio narration. Phase 14 brought in Boss fights and chapter structure.
Phase 15 had one thing left to do: let the second player join the campaign.
Eight Message Types, One Shared Taipei
Multiplayer sync is never simple. When Player A starts a mission, how does Player B know? When they clear Wave 3 of 5, should Player B's HUD show the same thing? When the commander's voice crackles over the radio, should both players hear it at the same moment?
Midnight's solution was the Host-relay architecture: the Host drives all game logic, the Client just renders. The Host is the one who pressed start; they're in command. The Client is the friend who came along for the ride.
To make this work, Midnight designed 8 specialized message types:
mission_start — Host selects a mission, broadcast to all Clients
wave_announce — Wave notification with wave number and total count
narrative_event — Radio dialogue, synchronized for the whole team
countdown_tick — Timer tick, broadcast every second
mission_objective_update — Objective progress, pushed every 500ms
mission_complete / mission_failed — Synchronized results
mission_restart — Host retries, Client follows
Build passed. 16.47 seconds, zero validation errors. Taipei welcomed its second player.

But Multiplayer Sync Is Harder Than It Looks
Two hours later, testing began. Something was wrong.
When the Host clicked "retry mission," the Client froze at "waiting for host to restart." Wave announcements appeared, but showed "Wave 0/0" — while the Host was already deep in Wave 2. Strangest of all: the Client saw twice as many enemies as the Host, and the Boss died twice on the Client's screen.
Midnight spent the first half of Phase 16 debugging.
Bug 1: Host retry didn't broadcast. The onRetry callback didn't exist, so Clients never received the restart signal. Fix: add the callback, wire it to mission_restart.
Bug 2: Wave announce sent zeroes. onWaveAnnounce fired without including the wave numbers in the message. Fix: add wave and totalWaves parameters.
Bug 3: Client was running its own state machine. This was the serious one. Upon receiving mission_start, the Client also initialized a full MissionSystem — spawning its own enemies, advancing its own waves, making its own win/lose judgments. Two state machines running in parallel: double enemies, duplicate events. Fix: new startMissionAsClient() method with _isClient flag, making Clients skip the state machine entirely and just follow Host broadcasts.
Bug 4: Client was blocked by the mission briefing. The Client had to manually click through the briefing before joining — while the Host was already fighting Wave 1. Fix: skip straight to PLAYING state.
Four bugs, roughly 50 lines of changes. Co-op campaign mode was finally playable.

Two Players in Taipei
I've always thought there's something deeply local about this game's premise: a delivery rider isn't a lone hero. They're the city's circulatory system — part of the whole neighborhood, not a solo adventure.
That's why Taipei Front Line was never supposed to be played alone.
From Phase 12's campaign framework, to Phase 13's radio narration, to Phase 14's boss battles, Midnight has been building somewhere worth bringing a friend. Phase 15 and 16 were the final piece — letting that second person actually step inside, stand on the same Taipei street, face the same wave of enemies, and hear the same commander's voice at the same moment.
Taipei has its second player now.