re: the timer message's consumer is a runtime registry, not a tag compare
The move I flagged last iteration -- "0xAB03E5BA is built once, so
nothing consumes it" -- is refuted by its own control: 25 of the 40
distinct 0xAB03xxxx tags in the image are built exactly once (62.5 %),
and no 4-aligned word anywhere in the image begins 0xAB03, so tags are
never stored statically.
What does stand:
* sub_82175C20(bus+4, &msg) is a ring-buffer PUSH, not a dispatch.
* The message class has a one-method vtable {scalar deleting dtor}
with an MSVC RTTI locator at vtable[-1] -- no handler of its own.
* The bus at [0x828F35DC] has a map at +8216, looked up via
sub_82254A08 from sub_823001E8, whose only caller is the per-frame
pump sub_8230C398.
So the item is NOT settled: the insert path into bus+8216 is unread,
and whether running out of time ends the mission is still unknown.
Docs only; ISL artefacts regenerate byte-identical.
This commit is contained in:
@@ -336,6 +336,34 @@ unknown, what evidence exists, and what the first step would be. Move an item in
|
||||
unread, as is what B reaching zero does, and whether all 170 `timer_stop` sites
|
||||
are phase teardown.
|
||||
|
||||
* 🔎🔴 **(2026-08-27) THE TIMER MESSAGE'S CONSUMER: LOCATED, NOT READ — and the
|
||||
argument I was about to make is REFUTED BY ITS OWN CONTROL.
|
||||
[structures/isl-mission-timer](structures/isl-mission-timer.md).**
|
||||
The tempting move was "`0xAB03E5BA` is built at exactly one site, so nothing
|
||||
consumes the timer message". **The control kills it: 25 of the 40 distinct
|
||||
`0xAB03xxxx` tags in the image are built exactly once (62.5 %)** — single-site
|
||||
construction is the *majority*, not an anomaly. And the tag appears **nowhere
|
||||
in the image as a 4-byte word** — in fact **no 4-aligned word anywhere begins
|
||||
`0xAB03`** — so there is no static table of subscribed tags to find either.
|
||||
✅ **Two structural reads that do stand.** (1) The post is a **queue push, not a
|
||||
dispatch**: `sub_82175C20(bus+4, &msg)` is a ring-buffer append (capacity `+8`,
|
||||
head `+12`, count `+16`, array `+4`, grown via `sub_8228E208`) and never looks
|
||||
at the message. (2) The message class has a **one-method vtable**:
|
||||
`0x820A8D18`–`0x820A8DA0` is a run of 2-word records
|
||||
`{ sub_82301C20, 0x8210Exxx }`; the timer message's vptr `0x820A8D68` gives
|
||||
`vtable[0] = sub_82301C20` (a scalar deleting destructor — stores `0x820A7014`
|
||||
over the vptr, conditionally frees) and `vtable[-1] = 0x8210E288`, an **MSVC
|
||||
RTTI locator** (`0,0,0, &typeDesc 0x8289D094, &classHierarchy 0x8210E29C`,
|
||||
`numBaseClasses = 3`) — data, not code, and below `sylpheed.db`'s `0x82150000`
|
||||
floor. **So the message carries no handler of its own**, and dispatch is neither
|
||||
a literal compare nor virtual on the message.
|
||||
🟡 **Located:** the bus at `[0x828F35DC]` carries a **map at `+8216`**, looked
|
||||
up through `sub_82254A08` from **`sub_823001E8`**, whose only caller is
|
||||
`sub_8230C398` — the per-frame message pump, called from the frame loop
|
||||
(`0x821A6544`) with the frame `dt`. So the question reduces to **what inserts
|
||||
into `bus+8216` and with which key**. That path is unread, so **the item is NOT
|
||||
settled**: whether running out of time ends the mission is still unknown.
|
||||
|
||||
## ✅✅ SOLVED — the mission freeze was a modal sign-in dialog (2026-08-26)
|
||||
|
||||
`XamShowSigninUI` opens a modal dialog and `xeXamDispatchDialog` blocks the
|
||||
|
||||
Reference in New Issue
Block a user