41fca98f8519446bfc1ecf01c906ad12d400a1ec
2
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
d2be54a3b9 |
BT410 5.3.106: MISSION REVIEW LINKS -- the playback app, the winners circle, and the last Fail() in main
BTL4PB.CPP reconstructed against its AUTHENTIC surviving header (BTL4PB.HPP) from the binary's 0x4d3b74-0x4d40d8 cluster, cross-checked against the surviving RP411 twin -- and the review/camera launch in BTL4.CPP's main() is real code now. btl4.lib 11 -> 12 members, link clean, zero unresolved: the linker pulled the entire playback chain for the first time. The launch decode closed on two identifications: The `if (spool_file)` guard in the decomp means the manager getter is GetStoredSpoolFile -- the empty-spool getter cannot fail, so a review pod with no recorded battle simply starts nothing, which is the right field behaviour. The camera app's ctor (FUN_0047c3fc) sits in the ENGINE range with the (ResourceFile*, ApplicationID) shape: the camera pod's recorder IS the engine's own L4SpoolingApplication -- restored one commit ago -- started with ApplicationID 1 == BTL4. BT shipped no camera app of its own. What the playback app does, all binary-anchored: BTSpoolerTask pumps recorded packets through DispatchPacket -> the client's own ReceiveNetworkPacket; RunMission synchronises the clock (timeBias = Now - the recorded run packet's stamp); the frame loop runs controls ONLY in interactive review (mode 2), then update/interest/renderer/intercom; and StopMission plays the WINNERS CIRCLE -- release the spool, park each player's mech on the dropzone named "win1".."winN" by finishing rank, freeze it (DoNothing performance), and tilt the camera up 45 degrees over the tableau. DOS-authentic ctor shape throughout: the binary's base call is (resource, 0x3eb, DefaultData) -- no windowing parameters ever existed in 4.10; the RP411 twin's HINSTANCE/HWND threading is port drift, dropped. Also fixed from 5.3.105's debt: L4PlaybackNetworkManager chains NetworkManager::DefaultData -- the 1995 header declares no statics of its own; the RP411 self-reference was drift too. One [T3] in source: the idle frame's renderer service (the descendant's ExecuteIdle) has no 1995 entry point; pre-egg the idle frame spins. RUNTIME TEST PENDING, stated plainly: exercising review needs a camera/review egg and a recorded spool on the rig (CAMERA-REVIEW-NOTES.md has the roles). The normal pod path regressed clean (mode gate untouched). The Fail() census moves: BTL4.CPP and SEQCTL.CPP are now stub-free; 22 stubs remain across 15 files. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
f85e5f5bcd |
BT410 5.3.105: L4SPLR restored -- the mission-review spool layer, back-dated from the surviving RP411 descendant
No 1995 L4SPLR.CPP survives, but its header does, and the direct descendant
source survives in the RP411 tree. This is that 741-line file back-dated
onto the 1995 engine APIs the header declares -- the BACKFILLS method -- and
the ENGINE COUNT MOVES: 181 -> 182 TUs, link clean, zero unresolved.
What the brick is: the whole mission-review spool layer --
SpoolingInterestManager every interest packet -> the spool
L4SpoolingNetworkManager normal connect + the spool PREAMBLE (app ID,
data version, per-host remote/local + HostID)
L4PlaybackNetworkManager "connect" FROM the spool: verify the preamble,
rebuild the host table with no wire, post Load
L4SpoolingApplication the recorder app -- renderless makers, deferred
stop (spool the ending exactly once), hand the
finished spool to the application manager
SpoolerTask the playback pump: egg packets while waiting,
interest packets while loading, then everything
doled out on recorded timestamps + GetTimeBias()
Back-dating deltas, each named in the header block: the HINSTANCE/HWND ctor
reverts to (ResourceFile*, ApplicationID); SOCKADDR_IN + two-arg
ResolveAddress revert to the 1995 unsigned-long address; L4Host construction
uses NullNetworkAddress/0 (L4NET.CPP's own idiom); PostQuitMessage becomes
Exit_Code = AbortExitCodeID (the loop gate ExecuteForeground already tests);
accessor-style statics revert to the header's static members; and the
later-era MakeGaugeRenderer/Shutdown parameters drop.
Two BC4.52 notes in source: the StopMissionMessage re-post carries an
explicit (Receiver::Message *) cast for the compiler's nested-scope upcast
quirk (NetworkClient derives Receiver, so the type IS right), and the
foreground tick casts to LBE4ControlsManager::Execute exactly as L4APP does
(the 1995 base ControlsManager has no Execute).
KNOWN DEBT, deliberately left: L4PlaybackNetworkManager::DefaultData is
referenced by its ctor but defined nowhere yet -- the linker does not pull
the member because nothing references the playback manager until BTL4PB.CPP
exists. That definition belongs with the playback app increment, which is
next. Regression run clean (same y-track terrain walk).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|