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:
60
docs/data/live-entities-2026-08-26.txt
Normal file
60
docs/data/live-entities-2026-08-26.txt
Normal 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
|
||||
BIN
docs/re/captures/entities-live-working.png
Normal file
BIN
docs/re/captures/entities-live-working.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
70
docs/re/entity-readout-working.md
Normal file
70
docs/re/entity-readout-working.md
Normal 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_0000–0xBE00_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 000–20 000 movers in it, and the unmodified
|
||||
tool produces a typed, positioned, oriented entity list.
|
||||
Reference in New Issue
Block a user