diff --git a/docs/re/mission-phase-timers.md b/docs/re/mission-phase-timers.md index f6a82b08..26d58cc3 100644 --- a/docs/re/mission-phase-timers.md +++ b/docs/re/mission-phase-timers.md @@ -74,8 +74,46 @@ It also reframes the arrival timetable: the routes' `t=170` entry same kind of thing — **the mission is substantially a timeline**, with unit predicates deciding *what* happens at each scheduled point rather than *when*. +## ✅ Stage 02 phase 1, as a timeline — and what arms the clock + +Disassembling all 25 triggers in threshold order turns the phase into a script +you can read: + +``` +timer5 @ 0.0s fade in +timer5 @ 0.5s play_bgm(0x3ED) +timer5 @ 1.0s damage_unit(TCN131, 0) +timer5 @ 4.0s timer_set(1200, 180) ; timer_resume ; set_flag(0) <-- arms timer 0 +timer0 @ 1.0s radio 0x52, 0x53 +timer0 @ 30.0s deploy + move_order(TCN105 group) ; radio 0x55 +timer0 @ 60.0s radio 0x56 +timer0 @ 90.0s deploy + move_order(idx 0x08) ; radio 0x57 +timer0 @ 120.0s deploy + move_order(idx 0x43) + objective_marker ; radio 0x58, 0x59 +timer0 @ 170.0s deploy + move_order(idx 0x01 = ADN110) ; radio 0x5A, 0x5B +timer0 @ 210.0s deploy + move_order(idx 0x33) + objective_marker +timer0 @ 240.0s deploy + move_order(idx 0x19) +timer0 @ 270/300/330 s radio only +timer0 @ 1020/1080/1140/1170 s radio only +``` + +### ✅ What arms the clock — the open question, answered + +**`timer_set(1200, 180)` then `timer_resume`, at 4.0 s on the phase-intro +clock.** So timer 0 is started by the phase's own intro coroutine, with a +**1200-second limit**; timer 5 is already running when the phase begins. That +closes "which built-in arms or resets each timer" for the common case. + +### ✅ It independently confirms the arrival measurement + +The `timer0 @ 170.0s` trigger deploys **symbol index 0x01 = `ADN110`** — the +first of the three squadrons the phase-1 condition polls. The live run measured +those three flipping to *active* at roughly **155–165 s of mission time** +([mission-wave-arrivals](mission-wave-arrivals.md)), against a route table that +also says `170`. Three independent sources — the route table, this trigger +table, and the running game — agree. + ## 🟡 Not settled -* **Which built-in arms or resets each timer.** Indices 0 and 5 are named from - the `+= dt` accumulator and the threshold magnitudes, not from a writer. -* Whether a coroutine started this way can *re-arm* its own trigger. +* Whether a coroutine started this way can **re-arm** its own trigger. +* `timer_set`'s second argument (`180`) — a limit and a warning threshold is the + obvious reading, but it is **not** established.