KB: reconcile the context system with the day's work
- decomp-reference.md: the binary ATTRIBUTE-TABLE section -- 16-byte
{id,name,off+1,0} row format (alignment warning), the walker technique,
and the three recovered tables (Mech ids 21-56 incl the corrected
EyepointRotation@0x360 / RearFiring@0x410 / DistanceToMissile@0x400
labels; HeatSink 3-12; Torso 3-15; the weapon RearFiring 'b' marker).
- combat-damage.md: the REAR-FIRE + look-view system (roster survey: the
Blackhawk's ERMLaser_2/3 are the game's only rear weapons; every missile
rack forward), the missile mount-frame launch truth, and the BANKED
full Missile flight-model decode (three performances, proximity fuse).
- wintesla-port.md: post-Phase-4 closures (instability model live, F14
static filter baked, the footstep warm-up bug + its trace-cap lesson);
deferred list trimmed to F21/HRTF.
- AUDIO_FIDELITY.md: status block -- F14 FIXED, warm-up bug noted.
- open-questions.md: "which mechs used rear fire" answered from data;
remaining look-view key bindings noted.
checkctx: CLEAN.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
ebdfa40d95
commit
224092aaff
@@ -148,6 +148,35 @@ port's external camera exposes it, so the arc is gated on the **torso twist rang
|
||||
(`BT_FIRE_ARC`, a labeled PORT presentation param). Beams fire from the mech's real gun-port SITE
|
||||
segments (siterugunport etc.) resolved via `GetSegment(name)→segmentToEntity×localToWorld`. [T2]
|
||||
|
||||
## REAR-FIRE + look views (task #68, 2026-07-16) [T1]
|
||||
The pod had a rear arsenal + a five-state LOOK-VIEW system (all reconstructed + live):
|
||||
- **weapon.rearFiring @0x334** = the MOUNT SEGMENT page name contains 'b' (ctor marker @0x511aa2;
|
||||
the back ports `sitelbgunport`/`siterbgunport`). Roster survey: **the Blackhawk's ERMLaser_2/3
|
||||
are the ONLY rear weapons in the game** (both loadout variants; the Owens model HAS back ports
|
||||
but mounts nothing on them; every missile rack is forward).
|
||||
- **mech.rearFiring @0x410** = OR of the weapons' flags (ctor part_012.c:10220).
|
||||
- The mapper look machine (part_013.c:396-459; modes 0=fwd 1=left 2=right 3=BACK 4=down from the
|
||||
look buttons): on change it writes **EyepointRotation (mech+0x360)** — side yaw = the authored
|
||||
per-mech look angles (model rec +0x50-0x5c → mech 0x564-0x570), look-back = yaw π + lookBackAngle
|
||||
pitch — and re-arms each weapon's **viewFireEnable @0x3E0** (fwd = !rear, back = rear, else 0).
|
||||
0x3E0 is the fire gate (the Loaded→Firing transition, part_013.c:7689 — the old
|
||||
`useConfiguredPip` label) AND selects the HUD pips: the reticle registers each pip in group
|
||||
1(front)/2(rear) from the RearFiring attr (part_014.c:5429-34) and draws the group in the mech's
|
||||
reticleElementMask low bits (mech+0x390: fwd |1&~2, back |2&~1, part_013.c:5588-95).
|
||||
- Port: keyboard **HOLD 'V' = look back**; side/down looks not yet key-bound. `[rearfire]`/
|
||||
`[look]` traces under BT_PROJ_LOG/BT_KEY_LOG.
|
||||
- Missile LAUNCH direction: rounds leave along the **mount segment's world frame** (the binary
|
||||
spawns the missile with the full muzzle-segment AffineMatrix, fire builder @0x4bcc60:8762-64,
|
||||
authored MuzzleVelocity composed with z NEGATED + the mech's own velocity) — was the
|
||||
"missiles fire out of his back" torso-twist bug (launch followed the LEGS while the muzzle
|
||||
followed the twist).
|
||||
- BANKED for the full Missile-entity revival (decoded, not yet ported — commit ab6ea83): the three
|
||||
authentic performances — Seeker 0x4be9a0 (aim = target-frame offset / 100u-ahead-of-own-frame
|
||||
dumb + loft/lead 0x4beae4), Thruster 0x4be474 (quaternion-slerp BODY turn toward the aim at
|
||||
turnRate°/s), MoveAndCollide 0x4bef78 (velocity aerodynamically aligned to thrust via
|
||||
signed-square per-axis gains, ballistic droop as fuel burns, PROXIMITY FUSE on seeker
|
||||
rangeToTarget, max-range + altitude-floor retire).
|
||||
|
||||
## Weapon fire is a PORT reconstruction (the dpl_* beam layer is unported)
|
||||
`Emitter::FireWeapon` builds a muzzle→target beam but the `dpl_*` beam renderable was never ported →
|
||||
the beam is drawn by `BTPushBeam`/`BTDrawBeams` (L4VIDEO — an additive quad / the real `ermlaser.bgf`
|
||||
|
||||
@@ -127,6 +127,35 @@ valid for reading the decomp, NOT for our compiled layout (see [[reconstruction-
|
||||
|
||||
`mech+0x100` (a subsystem-view of localOrigin.linearPosition): `.x@+0x100, .z@+0x108`. [T1]
|
||||
|
||||
### Binary ATTRIBUTE TABLES (2026-07-16, walked from the image) [T1]
|
||||
|
||||
**Row format: 16-byte `{id, namePtr, memberOffset+1, 0}`** (MIND THE ALIGNMENT — an 8-off walk
|
||||
invents a fake one-slot shift; verified against the live-tested ConfigureActivePress row
|
||||
@0x50de54). Walker: find the attr NAME string in DATA, find the pointer to it, decode ±16-byte
|
||||
rows until sanity fails (`python + struct`, see the session commits `cc2b109`/`21378ec`).
|
||||
|
||||
- **Mech entity table @0x50c0xx, ids 21–56**: MaxAcceleration@0x344 (=forwardCycleRate),
|
||||
CurrentSpeed@0x348 (=legCycleSpeed), MaxRunSpeed@0x34c (=run-cycle avg = the mapper's demand
|
||||
multiplier), Collision{State,Normal,Speed,MaterialType}@0x450/0x4a8/0x4b4/0x4a4,
|
||||
EyepointRotation@0x360 (the eye renderable's view rotation — the old `mechName@0x360` label is a
|
||||
MISREAD), TargetReticle@0x36c, FootStep@0x394, AnimationState@0x39c, ReplicantAnimationState
|
||||
@0x714, LinearSpeed/AngularSpeed/ClimbRate/AccelerationLastFrame@0x81c/0x824/0x828/0x82c (the
|
||||
15-sample-ring velocity means + the accel snapshot), damage levels @0x354-0x35c, TestButton1-6
|
||||
@0x328-0x33c, ReduceButton@0x340, Radar{Range,LinearPosition,AngularPosition}@0x404-0x40c,
|
||||
**RearFiring@0x410** (OR of the weapons' rear flags; old `stateFlags` label was wrong),
|
||||
RequestDuckAnimation@0x398, UnstablePercentage@0x3f0, SuperStop@0x3f4, DuckState@0x3f8,
|
||||
IncomingLock@0x3fc, DistanceToMissile@0x400 (FLT_MAX far default; old `maxSpeed` label wrong).
|
||||
- **HeatSink table @0x50e438, ids 3–12**: HeatSink@0x164, CurrentTemperature@0x114,
|
||||
Degradation/FailureTemperature@0x118/0x11c, Normalized/DegradationPressure@0x120/0x124,
|
||||
CoolantCapacity@0x128, CoolantMass@0x12c, CoolantMassLeakRate@0x130, **ReportLeak@0x138**
|
||||
(= coolantActive, the leak hysteresis flag). Confirms every port heat binding.
|
||||
- **Torso table, ids 3–15**: RotationOfTorsoVertical/Horizontal@0x1e4/0x1d8, HorizontalLimit
|
||||
R/L@0x1dc/0x1e0, SpeedOfTorsoVertical/Horizontal@0x1ec/0x1e8 (|rate|, abs'd),
|
||||
StickPosition@0x1f0, TorsoUp/Down/Left/Right/Center@0x1f8-0x208, MotionState@0x20c
|
||||
(statusFlags; ==2 = the limit-hit frame).
|
||||
- **MechWeapon rows**: RearFiring id 0x1B @0x334 = "the mount segment page name contains 'b'"
|
||||
(marker @0x511aa2 — the back gun ports `sitelbgunport`/`siterbgunport`; ctor part_013.c:6913-30).
|
||||
|
||||
---
|
||||
|
||||
## 4. Damage delivery
|
||||
|
||||
@@ -24,6 +24,10 @@ authentic path scoped.
|
||||
software path is notch-free [T1, [[pod-hardware]]], but the gait SM's walk/run dead band
|
||||
([[locomotion]]) only makes sense if the hardware discouraged parking the lever mid-band —
|
||||
"5 speeds" pod lore suggests physical notches. Status: OPEN.
|
||||
- ~~Which mechs used rear fire~~ **ANSWERED from data (2026-07-16, task #68)**: the Blackhawk's
|
||||
ERMLaser_2/3 (back gun ports) are the only rear weapons in the roster; see [[combat-damage]].
|
||||
Remaining: bind the side/down look views to keys (only 'V' look-back is bound); pod look-button
|
||||
mappings for Phase 8.
|
||||
|
||||
## BINARY-COVERAGE AUDIT discoveries (2026-07-13, 6-agent decomp census) [T1 verified-uncited]
|
||||
New unaccounted functionality no prior list knew (addresses verified absent from game/+context/+docs):
|
||||
|
||||
@@ -113,10 +113,20 @@ on top of it. Full detail: `docs/PROGRESS_LOG.md §5b, §8`.
|
||||
watchers extract |linearMotion|, motionValue=3); localAcceleration.linear = d(published
|
||||
velocity)/dt (binary part_012.c:15186-15195); the mech2.cpp step broadcast is REMOVED.
|
||||
**attrnull count = 0** — every authored audio attribute binds a real member.
|
||||
- Still deferred: UnstablePercentage@0x3F0 (needs the gyro sway/overspeed model — its live
|
||||
writer is unexported), F21 attack velocity/time (all captured events were default 1),
|
||||
per-zone static filter fc/Q baking (F14 residue), F22 HRTF (user has 2 speakers; enable
|
||||
via alsoft.ini `hrtf=true` for headphones).
|
||||
- **Post-Phase-4 closures (2026-07-16):** UnstablePercentage is LIVE (the instability model
|
||||
@0x3F0 byte-decoded + reconstructed — accel-sway² + gun-the-engine + turn-in-place terms,
|
||||
feeds gyro swayBias + the audio alarm; commit c51d64a). The F14 per-zone static resonant
|
||||
low-pass is BAKED (RBJ biquad at the AWE 100–8000 Hz curve, float pipeline + peak
|
||||
normalization; 232 zones incl the LaserLoaded charge hum fc=57 Q=87; c581553). The
|
||||
**footstep 10–20 s warm-up bug** is fixed (a11a697): an idle source's watcher chain executes
|
||||
only at Start attempts and each hop is audio-frame-gated, so the authored fill-0 N=30
|
||||
smoothers starved behind the 0.3 transient drop gate — fixes: AudioScaleOf sends EVERY poll
|
||||
(the bitwise change-gate froze on our deterministic gait floats), recursive gate-free
|
||||
Component::PrimeWatchers(30) on every transient Start request (AUDREND), and
|
||||
localAcceleration via the binary's exact 15-sample ring buffers. LESSON: trace caps
|
||||
saturate early and fake "per-stride" rates — always timestamp before inferring cadence.
|
||||
- Still deferred: F21 attack velocity/time (all captured events were default 1), F22 HRTF
|
||||
(user has 2 speakers; enable via alsoft.ini `hrtf=true` for headphones).
|
||||
- **L4 HAL on Windows + the VS build system: DONE.** [T1]
|
||||
- **Red Planet game logic: COMPLETE & buildable** — `VTV/VTVMPPR/WEAPSYS/...`. RP is at/near playable. [T1]
|
||||
- **Multiplayer: the DOS `NETNUB` driver is already replaced by a ~3.5k-line WinSock2 TCP
|
||||
|
||||
@@ -2,11 +2,13 @@
|
||||
|
||||
> **STATUS (2026-07-16): Phases 1-4 SHIPPED** (commits fc7f311, 691e885, 0ca7d26,
|
||||
> cc2b109..0e2401f). Fixed: F1-F5, F7, F9-F13, F15, F16, F18-F20, F23, KB items;
|
||||
> F6 fixed (ReportLeak -> coolantActive@0x138, binary table [T1]); F14 partial
|
||||
> (attenuation baked; static fc/Q deferred); F17 FIXED (CollisionSpeed +
|
||||
> ReduceButton real; UnstablePercentage live -- the instability model @0x3F0 is
|
||||
> byte-decoded and reconstructed, task #66);
|
||||
> F6 fixed (ReportLeak -> coolantActive@0x138, binary table [T1]); F14 FIXED
|
||||
> (attenuation + the static resonant fc/Q low-pass both baked, c581553);
|
||||
> F17 FIXED (CollisionSpeed + ReduceButton real; UnstablePercentage live --
|
||||
> the instability model @0x3F0 is byte-decoded and reconstructed, task #66);
|
||||
> F8/F21/F22 open (voice budget unhit / attack polish / HRTF option).
|
||||
> Post-audit: the footstep cold-start warm-up bug (idle watcher chains +
|
||||
> fill-0 smoothers vs the transient drop gate) fixed in a11a697.
|
||||
> attrnull = 0: every authored audio attribute binds a real member.
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user