diff --git a/context/wintesla-port.md b/context/wintesla-port.md index eb28f73..c459f5c 100644 --- a/context/wintesla-port.md +++ b/context/wintesla-port.md @@ -93,9 +93,30 @@ on top of it. Full detail: `docs/PROGRESS_LOG.md §5b, §8`. - **Published `localVelocity` smoothing is authentic** [T1]: `Mech::Execute` (FUN_004ab430) runs the localVelocity components through `AverageOf` running-average filters (part_012.c:15169-15179); the port's ~0.25 s exponential filter in `mech4.cpp` reconstructs it. - - Remaining (per `docs/AUDIO_FIDELITY.md` §5): EFX (authored low-pass fc/Q, reverb), F5 footstep - contact level, F19 remove the mech2.cpp step broadcast, F6/F7 ReportLeak + missile-lock attrs, - Torso attrs, F23 AnimationState numbering audit. + - **Phases 3+4 SHIPPED (2026-07-16, commits 0ca7d26..0e2401f).** Phase 3 EFX: `L4AUDEFX` + bridge — per-source lowpass (Dyn3D = highFreqCutoffScale×brightness UNGATED, Static/Direct = + brightness; AWE 100–8000 Hz → 5 kHz-ref gainhf [T3 curve]), one EAXReverb slot at + global_reverb_scale 0.3 (3D wet / cockpit Direct dry), Direct position-enum placement. + Phase 4 attributes (all [T1] from binary attribute tables, walked as 16-byte + {id,name,off+1,pad} rows): **HeatSink table @0x50e438 (ids 3..12)** confirms every heat + binding + adds ReportLeak id 12 @0x138 = coolantActive (serves all 19 leak watchers via + PoweredSubsystem⊂HeatSink); **Mech table @0x50c0xx (ids 21..56)**: IncomingLock@0x3fc / + DistanceToMissile@0x400 (real members, Missile::MoveAndCollide reports, PerformAndWatch + latches; old `maxSpeed@0x400` was a misread of the FLT_MAX far default), + CollisionSpeed@0x4B4 (=|impact velocity| at contact-arm), ReduceButton@0x340, + FootStep@0x394, RearFiring@0x410 (old `stateFlags` misread); **Torso table (ids 3..15)**: + full publish onto existing members (SpeedOfTorsoHorizontal=twistVelocity@0x1E8 abs'd, + MotionState=statusFlags@0x20C, ==2 = limit-hit frame). **F5 footStep = CONTACT LEVEL**: + (jointlocal.y <= *ANI hdr[2] threshold) per frame, states 0/1 retain (SelectSequence now + captures hdr[2]; the 150 ms pulse is retired). **F19**: the authored footstep volume = + LocalAcceleration |lin| [0,10]→ctl100 + LocalVelocity |lin| [0,0.6]→ctl101 (ALL motion + 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). - **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 diff --git a/docs/AUDIO_FIDELITY.md b/docs/AUDIO_FIDELITY.md index c4db007..d0338a2 100644 --- a/docs/AUDIO_FIDELITY.md +++ b/docs/AUDIO_FIDELITY.md @@ -1,5 +1,14 @@ # Audio Fidelity Audit — btl4.exe OpenAL Port vs. Original AWE32/HMI-SOS +> **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 partial (CollisionSpeed + +> ReduceButton real; UnstablePercentage deferred on the gyro sway model); +> F8/F21/F22 open (voice budget unhit / attack polish / HRTF option). +> attrnull = 0: every authored audio attribute binds a real member. + + **Date:** 2026-07-15 **Scope:** Full fidelity audit of the OpenAL audio reconstruction against the original 1995 semantics: the authored audio object streams (`content/audit_capture.log` traces), the WinTesla