re: the live entity readout works end-to-end; "0 movers" was a state

Fresh run, unmodified tools: entities2.py self 0x130 returns 74-101 typed live
entities with positions and speeds, a player entity, and the orientation matrix at
pos-0x70 with 16-byte stride -- exactly the documented layout.  Artifact committed
as docs/data/live-entities-2026-08-26.txt.

Last iteration's "zero moving triples across 357 MB" does not reproduce: sampled
seven times 4s apart, the whole map gives 47k-123k movers and the committed
ENT_VA window 10k-20k.  So the window is populated and the tooling is sound; what
differed between the sessions is NOT determined and is recorded as open, since the
earlier zero persisted for minutes across several commands.  Practical rule added:
check movers are non-zero before concluding anything from a memory probe.

New open discrepancy: the vtable scan reports 42 instances (20 turrets) while the
+0x130 method reports 101 (82 turrets), most of the excess moving at ~375/s -- and
a turret is a fixed emplacement.  Likely projectiles typed as their shooter, but
explicitly NOT asserted: no test here separates a projectile from a fast craft.
This commit is contained in:
Sylpheed RE agent
2026-08-26 21:54:23 +00:00
parent f59c4e595c
commit cc6d088573
3 changed files with 130 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
# 14 unit definitions
# 13448 moving triples
# 101 typed live entities (delta +0x130)
82 UN_e007_ADAN_Turret
12 UN_e010_ADAN_Attacker_S
7 UN_f001_TCAF_DeltaSaber_T
0xbdbd4d80 UN_e007_ADAN_Turret ( -605.1, -2016.4, -775.8) 299.3/s
0xbdbe2d80 UN_e007_ADAN_Turret ( +8818.7, +1982.0, -4660.9) 168.1/s
0xbdbe4d80 UN_e007_ADAN_Turret ( +4682.1, +3982.3, -7616.4) 375.0/s
0xbdbe6d80 UN_e007_ADAN_Turret ( +4171.4, -2063.5, +8598.7) 375.0/s
0xbdbe8d80 UN_e007_ADAN_Turret ( -1138.1, +3241.2, -7444.5) 375.0/s
0xbdbead80 UN_e007_ADAN_Turret ( +1751.2, +1308.4, -2255.7) 375.0/s
0xbdbecd80 UN_e007_ADAN_Turret ( -3669.7, +2318.9, -6596.7) 375.0/s
0xbdbeed80 UN_e007_ADAN_Turret ( +3197.8, -1249.1, +1957.7) 375.0/s
0xbdbf0d80 UN_e007_ADAN_Turret ( -1532.0, -3657.4, +290.2) 347.1/s
0xbdbf2d80 UN_e007_ADAN_Turret ( +4686.9, +5035.6, -2863.0) 375.0/s
0xbdbf4d80 UN_e007_ADAN_Turret ( -1024.5, -1406.1, -1883.5) 328.2/s
0xbdbf6d80 UN_e007_ADAN_Turret ( -236.1, -3491.9, -1077.0) 278.8/s
0xbdbf8d80 UN_e007_ADAN_Turret ( -960.5, -2582.1, -2389.4) 316.2/s
0xbdbfad80 UN_e007_ADAN_Turret ( +287.3, -2096.9, -2341.1) 245.6/s
0xbdbfcd80 UN_e007_ADAN_Turret ( -1248.2, -1280.8, -758.2) 299.9/s
0xbdbfed80 UN_e007_ADAN_Turret ( +1062.3, -3333.9, -730.9) 342.4/s
0xbdc00d80 UN_e007_ADAN_Turret ( -338.6, -3061.5, -2715.1) 348.0/s
0xbdc02d80 UN_e007_ADAN_Turret ( +27.6, -3003.5, -809.7) 321.9/s
0xbdc04d80 UN_e007_ADAN_Turret ( -1045.8, -1654.2, -930.4) 299.3/s
0xbdc06d80 UN_e007_ADAN_Turret ( +4054.3, +486.8, +5380.5) 373.6/s
0xbdc08d80 UN_e007_ADAN_Turret ( -5261.1, -2998.9, -5941.8) 327.2/s
0xbdc0ad80 UN_e007_ADAN_Turret ( +6785.0, -1521.2, +2765.6) 374.7/s
0xbdc0cd80 UN_e007_ADAN_Turret ( +9635.8, +1875.9, -3655.4) 220.1/s
0xbdc0ed80 UN_e007_ADAN_Turret ( +6063.5, -7579.2, +2960.0) 364.3/s
0xbdc10d80 UN_e007_ADAN_Turret ( -5245.4, -3028.1, -3107.8) 374.4/s
0xbdc12d80 UN_e007_ADAN_Turret ( +6466.4, -3998.9, -1019.7) 373.8/s
0xbdc14d80 UN_e007_ADAN_Turret ( +8835.2, +175.4, +1871.9) 367.2/s
0xbdc16d80 UN_e007_ADAN_Turret ( +3185.0, -7015.6, -4185.3) 364.7/s
0xbdc18d80 UN_e007_ADAN_Turret ( +12196.1, +555.9, +6471.6) 300.0/s
0xbdc1ad80 UN_e007_ADAN_Turret ( +12058.9, +665.9, +6394.6) 300.0/s
0xbdc1cd80 UN_e007_ADAN_Turret ( +12099.5, +669.0, +6590.4) 300.0/s
0xbdc1ed80 UN_e007_ADAN_Turret ( +9985.9, +2220.1, +5345.4) 300.0/s
0xbdc20d80 UN_e007_ADAN_Turret ( +9885.2, +2326.6, +5261.3) 300.0/s
0xbdc22d80 UN_e007_ADAN_Turret ( +10205.0, +2303.1, +5403.2) 300.0/s
0xbdc24d80 UN_e007_ADAN_Turret ( +9599.2, +2361.0, +8476.8) 300.0/s
0xbdc26d80 UN_e007_ADAN_Turret ( +9433.6, +2480.4, +8610.1) 300.0/s
0xbdc28d80 UN_e007_ADAN_Turret ( +9406.3, +2475.7, +8412.1) 300.0/s
0xbdc32d80 UN_e007_ADAN_Turret ( -5666.9, -5665.0, +9063.5) 298.3/s
0xbdc34d80 UN_e007_ADAN_Turret ( -5422.2, -4971.4, +9487.5) 300.0/s
0xbdc36d80 UN_e007_ADAN_Turret ( -5651.5, -5393.7, +10621.7) 300.0/s
0xbdc38d80 UN_e007_ADAN_Turret ( -8119.5, -4529.7, +10533.8) 298.2/s
0xbdc3ad80 UN_e007_ADAN_Turret ( -7652.0, -4195.3, +11353.5) 300.0/s
0xbdc3cd80 UN_e007_ADAN_Turret ( -7303.3, -4020.6, +10925.0) 300.0/s
0xbdc3ed80 UN_e007_ADAN_Turret ( -4539.1, -4088.6, +11803.4) 300.0/s
0xbdc40d80 UN_e007_ADAN_Turret ( -4438.1, -3976.8, +11817.8) 300.0/s
0xbdc42d80 UN_e007_ADAN_Turret ( -4656.3, -4005.1, +11835.4) 300.0/s
0xbdc44d80 UN_e007_ADAN_Turret ( -495.8, -5629.6, -6268.1) 300.0/s
0xbdc46d80 UN_e007_ADAN_Turret ( -521.1, -5533.7, -6370.2) 300.0/s
0xbdc48d80 UN_e007_ADAN_Turret ( -431.5, -5516.7, -6164.9) 300.0/s
0xbdc4ad80 UN_e007_ADAN_Turret ( -1704.3, -4324.1, -7845.7) 300.0/s
0xbdc4cd80 UN_e007_ADAN_Turret ( -2149.5, -4295.1, -7971.3) 300.0/s
0xbdc4ed80 UN_e007_ADAN_Turret ( -3408.0, -4492.4, -7841.5) 300.0/s
0xbdc50d80 UN_e007_ADAN_Turret ( -2291.3, -4375.4, -4873.9) 300.0/s
0xbdc52d80 UN_e007_ADAN_Turret ( -3566.3, -4475.6, -4845.7) 300.0/s

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -0,0 +1,70 @@
# ✅ The live entity readout works end-to-end — and "0 movers" was a state, not a defect
Measured 2026-08-26, fresh boot, save slot 01, Stage 01, live HUD.
Artifact: [`../data/live-entities-2026-08-26.txt`](../data/live-entities-2026-08-26.txt).
## The readout
`entities2.py self 0x130`, unmodified, with its committed VA window:
```
# 14 unit definitions
# 9142 moving triples
# 74 typed live entities (delta +0x130)
# player entity: pos va 0xbdb3bd80 UN_f001_TCAF_DeltaSaber_T
# pos (-2012.3,-2267.7,-1968.4) speed 51.6/s
# orthonormal 3x3 blocks inside the player object: 4
pos-0x0070 stride 16: (-0.013,-0.202,+0.979) (-0.149,+0.969,+0.198) (-0.989,-0.143,-0.043)
```
Position, speed, and the orientation matrix at **`pos 0x70` with 16-byte
stride** — exactly what [`autopilot-memory-driven.md`](autopilot-memory-driven.md)
documents. Nothing needed fixing.
## ✅ "0 movers" is a STATE, not a tool defect
[Last iteration](entity-position-anchor-refuted.md) recorded zero moving triples
across the whole 357 MB mapping, repeatedly, while the mission visibly ran. Same
mission, same tools, same window, fresh run — sampled seven times, 4 s apart:
| round | movers, whole map | movers in `0xBD00_00000xBE00_0000` |
|---|---|---|
| 0 | 111 105 | 16 396 |
| 1 | 122 919 | 10 266 |
| 3 | 75 268 | 10 627 |
| 6 | 47 206 | 10 406 |
So the committed window is populated and the tooling is sound. **What differed
between the two runs is not determined** — the earlier session's zero persisted
for minutes across several commands, so it was not a sampling artifact either.
Recorded as an open question rather than explained away: something about that
session's state held the simulation while the renderer kept drawing.
**Practical rule:** before concluding anything from a memory probe here, check
that movers are non-zero. It is a one-line precondition and it would have saved
this corpus two iterations.
## ❔ The two enumerations disagree, and the difference is not noise
| method | total | `e007_Turret` | `DeltaSaber_T` |
|---|---|---|---|
| `INST_VTABLE` scan ([roster](entities-live-roster.md)) | 42 | 20 | 6 |
| moving triple + def ptr at `+0x130` | **101** | **82** | 7 |
Most of the excess is "turrets" moving at **~375/s** — several of them at exactly
`375.0/s`, and a turret is a fixed emplacement. 🟡 The likely reading is that
these are **projectiles**, carrying the definition pointer of whatever fired
them, so the `+0x130` method types a shot as its shooter. That is consistent with
the note in `autopilot-memory-driven.md` about separating "20-odd real combatants
from ~30 000 moving particles" — the same hazard, one layer up.
❌ Not asserted as fact: no test here distinguishes a projectile from a fast-moving
craft. The clean check is whether these objects have a hull value at `+0x154` and
whether they persist for more than a few seconds.
## Withdrawn claims, now positively disproved
Both "tool defects" reported two iterations ago are dead, and this run is the
positive evidence rather than merely the absence of the negative:
`entities2.py`'s window returns 10 00020 000 movers in it, and the unmodified
tool produces a typed, positioned, oriented entity list.