Files
TeslaRel410/restoration/source410/MUNGA/ALARM.NOTES.md
T
CydandClaude Fable 5 9a4f1c293b Mech milestone: reconstruct AlarmIndicator (helper 1/3), compile-verified
First of the 3 missing Mech embedded-helper classes. AlarmIndicator is the
multi-level status indicator the Mech carries four of (master/heat/stability/
status). Reconstructed as a StateIndicator subclass: the shipped ctor
(@0041b9ec) is byte-for-byte the surviving StateIndicator(unsigned) ctor
(stateCount=oldState=currentState=count; 3 watcher sockets NULL) with a distinct
vtable, so a derived class reproduces it exactly and adds the level API
(SetLevel/GetLevel/GetLevelCount -> SetState/GetState/stateCount). Header-only
(StateIndicator's methods are in SIMULATE.CPP, already in munga.lib).

Compile-verified standalone under BC4.52 with the authentic build flags.
Evidence + placement in ALARM.NOTES.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 20:49:26 -05:00

40 lines
2.0 KiB
Markdown

# ALARM.HPP — reconstruction notes
**Status: RECONSTRUCTED, compile-verified under BC4.52. First of the 3 missing
Mech embedded-helper classes ([[MECH-LAYOUT]] step 1).**
`AlarmIndicator` — the multi-level status indicator the Mech carries four of
(masterAlarm 33 levels, heatAlarm 3, stabilityAlarm 2, statusAlarm 33). Absent
from the 4.10 archive (no ALARM/STATE variant survives it); reconstructed from
the shipped binary + the surviving StateIndicator source.
## Evidence
- Ctor decomp `FUN_0041b9ec(this, count)` (BT411 reference/decomp part_002.c):
base ctor, own vtable `&PTR_FUN_004e3440`, three watcher sockets initialised at
+6/+0xb/+0x10 via `FUN_0041c42c(_, 0)`, then `this[3]=this[4]=this[5]=count`.
- The surviving `StateIndicator::StateIndicator(unsigned max_states)` (CODE/RP/
MUNGA/SIMULATE.CPP:62) is **byte-for-byte identical**: `audioWatcherSocket(NULL),
videoWatcherSocket(NULL), gaugeWatcherSocket(NULL)` then `stateCount = oldState
= currentState = max_states`.
The only difference is the vtable ⇒ AlarmIndicator is a StateIndicator **subclass**
(same Node + 3 state words + 3 SChainOf watcher-socket layout, adds no data). A
derived class naturally gets its own vtable, reproducing `PTR_FUN_004e3440`.
## API
The Mech drives the alarms with `SetLevel(unsigned)` / `GetLevel()` (and reads
`GetLevelCount()`). These map to StateIndicator's `SetState` / `GetState` /
`stateCount` — a level IS a state, so a level change notifies the audio/video/
gauge watchers exactly as SetState does. (BT411's `ReconAlarm` proxy exposed a
raw `level` member; that was a proxy artifact — the real class stores it as
`currentState`.)
## Placement
The 1995 source filename for AlarmIndicator is unknown (BT411 handled it via the
mechrecon.hpp proxy; nothing survives in CODE). Filed as MUNGA/ALARM.HPP; the
Mech includes it. StateIndicator's out-of-line methods live in SIMULATE.CPP
(already in munga.lib), so no new .CPP is needed — AlarmIndicator is header-only.