From d9b34ddc63ffbcec15a31ddc3be74bc54de93f9a Mon Sep 17 00:00:00 2001 From: Cyd Date: Sun, 19 Jul 2026 07:58:26 -0500 Subject: [PATCH] source410: THE WHOLE 4.10 TREE COMPILES - 11/11 under the fleet's BC++ 4.52 All 10 surviving original TUs plus the reconstructed BTL4APP.CPP pilot build clean with the authentic OPT.MAK flags (compile410.sh --sweep). First time the 4.10 BattleTech source has compiled since 1996. - layout_probe.cpp: the period compiler measures 1995 layouts from the surviving headers; validated 3/3 against binary alloc sizes (BTMission 0xFC, BTL4ModeManager 0xC, BTRegistry 0x10). Base boundary: Simulation 0xD0 / Entity 0x1C4 / Mover 0x300 / JointedMover 0x328 => Mech-own region 0x328-0x854 (MECH-LAYOUT.md staging worksheet). - 13 staged headers close the family ([T3] reserved[]-parked layouts; interfaces PROVEN by the surviving consumers): MECH, MECHSUB, HEAT, POWERSUB, MECHWEAP, EMITTER, MECHMPPR, BTPLAYER (BTPlayer__MakeMessage = Player's 8 args + roleName/teamName [T1 via BTREG]), PROJTILE, MISSILE, BTL4MPPR, BTL4VID + the round-2 BTCNSL/BTSCNRL. - compile410.sh: PCH gate retired (bt.hpp/mungal4.hpp full include sets), DPL SDK roots on the include line. - BTL4APP.CPP: appmgr include + GetApplicationManager()->GetFrameRate() + ResourceDescription:: scoping; Fail() held at its recorded line 400. - Evidence ledgers: STAGED-HEADERS.NOTES.md, MECH-LAYOUT.md, BACKFILLS, BTCNSL (binary-recovered console wire IDs), BTSCNRL. Remaining for a linkable BTL4OPT: the ~40 missing TU bodies (917-function manifest) - the header skeleton they grow into now exists and compiles. Co-Authored-By: Claude Fable 5 --- restoration/source410/BT/BTPLAYER.HPP | 116 +++++++++ restoration/source410/BT/EMITTER.HPP | 113 +++++++++ restoration/source410/BT/HEAT.HPP | 97 ++++++++ restoration/source410/BT/MECH-LAYOUT.md | 66 +++++ restoration/source410/BT/MECH.HPP | 235 ++++++++++++++++++ restoration/source410/BT/MECHMPPR.HPP | 78 ++++++ restoration/source410/BT/MECHSUB.HPP | 132 ++++++++++ restoration/source410/BT/MECHWEAP.HPP | 125 ++++++++++ restoration/source410/BT/MISSILE.HPP | 73 ++++++ restoration/source410/BT/POWERSUB.HPP | 100 ++++++++ restoration/source410/BT/PROJTILE.HPP | 73 ++++++ .../source410/BT/STAGED-HEADERS.NOTES.md | 39 +++ restoration/source410/BT_L4/BTL4APP.CPP | 12 +- restoration/source410/BT_L4/BTL4MPPR.HPP | 121 +++++++++ restoration/source410/BT_L4/BTL4VID.HPP | 47 ++++ restoration/source410/README.md | 10 +- restoration/source410/compile410.sh | 4 +- restoration/source410/layout_probe.cpp | 31 +++ 18 files changed, 1459 insertions(+), 13 deletions(-) create mode 100644 restoration/source410/BT/BTPLAYER.HPP create mode 100644 restoration/source410/BT/EMITTER.HPP create mode 100644 restoration/source410/BT/HEAT.HPP create mode 100644 restoration/source410/BT/MECH-LAYOUT.md create mode 100644 restoration/source410/BT/MECH.HPP create mode 100644 restoration/source410/BT/MECHMPPR.HPP create mode 100644 restoration/source410/BT/MECHSUB.HPP create mode 100644 restoration/source410/BT/MECHWEAP.HPP create mode 100644 restoration/source410/BT/MISSILE.HPP create mode 100644 restoration/source410/BT/POWERSUB.HPP create mode 100644 restoration/source410/BT/PROJTILE.HPP create mode 100644 restoration/source410/BT/STAGED-HEADERS.NOTES.md create mode 100644 restoration/source410/BT_L4/BTL4MPPR.HPP create mode 100644 restoration/source410/BT_L4/BTL4VID.HPP create mode 100644 restoration/source410/layout_probe.cpp diff --git a/restoration/source410/BT/BTPLAYER.HPP b/restoration/source410/BT/BTPLAYER.HPP new file mode 100644 index 00000000..17c5cd8c --- /dev/null +++ b/restoration/source410/BT/BTPLAYER.HPP @@ -0,0 +1,116 @@ +//===========================================================================// +// File: btplayer.hpp // +// Project: BattleTech // +// Contents: Implementation details for the BT player // +//---------------------------------------------------------------------------// +// Date Who Modification // +// -------- --- ---------------------------------------------------------- // +// // +//---------------------------------------------------------------------------// +// Copyright (C) 1995, Virtual World Entertainment, Inc. // +// All Rights reserved worldwide // +// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // +//===========================================================================// + +#if !defined(BTPLAYER_HPP) +# define BTPLAYER_HPP + +# if !defined(PLAYER_HPP) +# include +# endif + +//##################### Forward Class Declarations ####################### + class Mech; + class BTTeam; + +//########################################################################### +//####################### BTPlayer Make Message ######################### +//########################################################################### + + class BTPlayer__MakeMessage: + public Player__MakeMessage + { + public: + CString roleName; + CString teamName; + + BTPlayer__MakeMessage( + Receiver::MessageID message_ID, + size_t length, + Entity::ClassID class_ID, + const EntityID &owner_ID, + ResourceDescription::ResourceID resource_ID, + LWord instance_flags, + const Origin &origin, + int player_bitmap_index, + CString role_name, + CString team_name + ): + Player__MakeMessage( + message_ID, + length, + class_ID, + owner_ID, + resource_ID, + instance_flags, + origin, + player_bitmap_index + ) + { + roleName = role_name; + teamName = team_name; + } + }; + +//########################################################################### +//############################# BTPlayer ################################ +//########################################################################### + + class BTPlayer: + public Player + { + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Shared Data Support + // + public: + static Derivation ClassDerivations; + static SharedData DefaultData; + + static const HandlerEntry + MessageHandlerEntries[]; + static MessageHandlerSet + MessageHandlers; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Construction and Destruction + // + public: + typedef BTPlayer__MakeMessage MakeMessage; + + static BTPlayer* + Make(MakeMessage *creation_message); + + BTPlayer( + MakeMessage *creation_message, + SharedData &shared_data = DefaultData + ); + ~BTPlayer(); + + Logical + TestInstance() const; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Experience support + // + public: + Enumeration + GetExperienceLevel(); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Local Data + // + protected: + int reserved[38]; + }; + +#endif diff --git a/restoration/source410/BT/EMITTER.HPP b/restoration/source410/BT/EMITTER.HPP new file mode 100644 index 00000000..94ccec70 --- /dev/null +++ b/restoration/source410/BT/EMITTER.HPP @@ -0,0 +1,113 @@ +//===========================================================================// +// File: emitter.hpp // +// Project: BattleTech // +// Contents: Implementation details for energy weapon emitters // +//---------------------------------------------------------------------------// +// Date Who Modification // +// -------- --- ---------------------------------------------------------- // +// // +//---------------------------------------------------------------------------// +// Copyright (C) 1995, Virtual World Entertainment, Inc. // +// All Rights reserved worldwide // +// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // +//===========================================================================// + +#if !defined(EMITTER_HPP) +# define EMITTER_HPP + +# if !defined(MECHWEAP_HPP) +# include +# endif + +//##################### Forward Class Declarations ####################### + class Mech; + +//########################################################################### +//####################### Emitter Model Resource ######################## +//########################################################################### + + struct Emitter__SubsystemResource: + public MechWeapon::SubsystemResource + { + Scalar seekVoltage[5]; + Scalar dischargeTime; + }; + +//########################################################################### +//############################## Emitter ################################ +//########################################################################### + + class Emitter: + public MechWeapon + { + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Shared Data Support + // + public: + static Derivation ClassDerivations; + static SharedData DefaultData; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Attribute Support + // + public: + enum { + ChargeLevelAttributeID = Subsystem::NextAttributeID, + NextAttributeID + }; + + static const IndexEntry AttributePointers[]; + static AttributeIndexSet AttributeIndex; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Test Class Support + // + public: + static Logical + TestClass(Mech &); + Logical + TestInstance() const; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Construction and Destruction + // + public: + typedef Emitter__SubsystemResource SubsystemResource; + + Emitter( + Mech *owner, + int subsystem_ID, + SubsystemResource *subsystem_resource, + SharedData &shared_data = DefaultData + ); + + ~Emitter(); + + static int + CreateStreamedSubsystem( + ResourceFile *resource_file, + NotationFile *model_file, + const char *model_name, + const char *subsystem_name, + SubsystemResource *subsystem_resource, + NotationFile *subsystem_file, + const ResourceDirectories *directories, + int passes = 1 + ); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Weapon interface + // + public: + void + FireWeapon(); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Local Data + // + protected: + Scalar chargeLevel; + Scalar dischargeTime; + }; + +#endif diff --git a/restoration/source410/BT/HEAT.HPP b/restoration/source410/BT/HEAT.HPP new file mode 100644 index 00000000..4de60307 --- /dev/null +++ b/restoration/source410/BT/HEAT.HPP @@ -0,0 +1,97 @@ +//===========================================================================// +// File: heat.hpp // +// Project: BattleTech // +// Contents: Implementation details for heatable subsystems // +//---------------------------------------------------------------------------// +// Date Who Modification // +// -------- --- ---------------------------------------------------------- // +// // +//---------------------------------------------------------------------------// +// Copyright (C) 1995, Virtual World Entertainment, Inc. // +// All Rights reserved worldwide // +// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // +//===========================================================================// + +#if !defined(HEAT_HPP) +# define HEAT_HPP + +# if !defined(MECHSUB_HPP) +# include +# endif + +//##################### Forward Class Declarations ####################### + class Mech; + +//########################################################################### +//################## HeatableSubsystem Model Resource ################### +//########################################################################### + + struct HeatableSubsystem__SubsystemResource: + public MechSubsystem::SubsystemResource + { + Scalar thermalMass; + Scalar degradeTemperature; + Scalar failTemperature; + int coolingLoop; + }; + +//########################################################################### +//######################## HeatableSubsystem ############################ +//########################################################################### + + class HeatableSubsystem: + public MechSubsystem + { + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Shared Data Support + // + public: + static Derivation ClassDerivations; + static SharedData DefaultData; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Test Class Support + // + public: + static Logical + TestClass(Mech &); + Logical + TestInstance() const; + void + ResetToInitialState(); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Construction and Destruction + // + public: + typedef HeatableSubsystem__SubsystemResource SubsystemResource; + + HeatableSubsystem( + Mech *owner, + int subsystem_ID, + SubsystemResource *subsystem_resource, + SharedData &shared_data = DefaultData + ); + + ~HeatableSubsystem(); + + static int + CreateStreamedSubsystem( + NotationFile *model_file, + const char *model_name, + const char *subsystem_name, + SubsystemResource *subsystem_resource, + NotationFile *subsystem_file, + const ResourceDirectories *directories, + int passes = 1 + ); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Local Data + // + protected: + Scalar currentTemperature; + Scalar heatLoad; + }; + +#endif diff --git a/restoration/source410/BT/MECH-LAYOUT.md b/restoration/source410/BT/MECH-LAYOUT.md new file mode 100644 index 00000000..c453663c --- /dev/null +++ b/restoration/source410/BT/MECH-LAYOUT.md @@ -0,0 +1,66 @@ +# MECH.HPP staging worksheet (opened 2026-07-19) + +The working ledger for growing the literal MECH.HPP alongside the mech-family TU +reconstructions. **The period compiler is the layout authority**: `../layout_probe.cpp` +compiled+run under BC4.52 with the authentic OPT.MAK flags (`-a4` alignment) measures the +1995 base-class sizes from the SURVIVING engine headers. + +## Probe results (2026-07-19) — methodology VALIDATED 3/3 + +| class | sizeof | validation | +|---|---|---| +| Simulation | 0x0D0 | | +| Entity | 0x1C4 | (⇒ Entity-own fields span 0x0D0–0x1C4: playerLink@0x190 ✓, subsystem roster @0x124/0x128 ✓) | +| Mover | 0x300 | (⇒ Mover-own 0x1C4–0x300: localOrigin@0x260 ✓) | +| **JointedMover** | **0x328** | **⇒ Mech's own region = 0x328–0x854 (0x52C bytes)** | +| Mission | 0x0E4 | BTMission's experienceLevel @+0xE4 = first BT member ✓ | +| BTMission | 0x0FC | **== the binary's `new(0xfc)`** (BTL4Mission alloc) ✓ | +| ModeManager / BTL4ModeManager | 0x00C | **== the binary's `new(0xc)`** ✓ | +| BTRegistry | 0x010 | **== the binary's `new(0x10)`** ✓ | + +Three independent allocation-size matches against the shipped binary ⇒ headers + compiler + +flags reproduce 1995 layout exactly. Any future header where the probe disagrees with a +binary alloc size is WRONG and must be fixed before use. + +## Consequences for MECH.HPP staging + +- Every binary offset **< 0x328 is a BASE-CLASS field**, not a Mech member. The port's + mech.hpp declares several pose members in that range (orientation@0xD0, bodyRotation@0x100, + turretBase@0x1C4, headPitch@0x1CC, torsoTwist@0x1DC, legAngle@0x1F4, hipAngle@0x200, + torsoAim*@0x298/0x2C8, netOrientation@0x2D4) — in the 1995 header these belong to + Simulation/Entity/Mover/JointedMover (or their equivalents) and must be RE-ATTRIBUTED by + checking the surviving engine headers' member lists at those offsets (probe with offsetof + where members are public). +- Mech-own members with binary offsets ≥ 0x328 (from the port/CLASSMAP, to be laid out with + `reserved[]` filler between mapped runs): reduceButton@0x340, forwardCycleRate@0x344, + legCycleSpeed@0x348, reverseStrideLength@0x34C, gimpStrideLength@0x350, mechName@0x360, + masterAlarm@0x39C(+legStateAlarm), legAnimationState@0x3B0, unstablePercentage@0x3F0, + airborne@0x3F4, radar block @0x3F8–0x40C, rearFiring@0x410, missionReview@0x414, + messageManager@0x434, torsoCache@0x438, lastInflictingID@0x43C, damageLookupTable@0x444, + weaponCount@0x448, collisionTemporaryState@0x44C, heatAlarm@0x450–0x464, throttleState@0x4A4, + fallDirection@0x4A8, fallScalar@0x4B4(+collisionSpeed), templateBottomLift@0x4B8, + stabilityAlarm@0x4C4–0x4D8, standing/duckedTemplateMaxY@0x518/0x51C (≡heatLevel/Capacity — + CONFLICT, resolve), gyroSubsystem@0x528, gait caps @0x52C–0x548, look angles @0x564–0x570, + turn rates @0x574/0x578, jump flags @0x580–0x588, motionEventName@0x598, motionEventArmed@0x5A4, + time scales @0x5A8–0x5B0, hudSubsystem@0x5B4, cycle rates @0x5B8–0x5C0, gyroRumbleTimer@0x5C4, + footStepRootJoint@0x5C8, animationClips@0x5CC(+namedClip alias @0x5E0, crash clips + @0x5D4–0x5DC), gimpBaseClip@0x64C, deathAnimationLatched@0x650, leg/bodyResetLatch@0x654/0x658, + legAnimation@0x65C, controllableSubsystems@0x65C(CONFLICT — one is a chain @0x65C, resolve), + bodyTargetSpeed@0x6B4, bodyCycleSpeed@0x6B8, bodyAnimation@0x6BC(≡watchedSubsystems CONFLICT), + statusAlarm/bodyStateAlarm@0x714, bodyAnimationState@0x728, deadband block @0x768–0x770, + creationTime@0x778, poseSyncLatch@0x77C, heatLevelSnapshot@0x780, unstable tuning @0x784–0x798, + reverseSpeedMax2@0x7A0, heatableSubsystems@0x7AC, weaponRoster@0x7BC, damageableSubsystems@0x7CC, + sensorSubsystem@0x7DC, telemetryFilter@0x7E0, linearSpeed@0x81C, resource names @0x844–0x84C, + deathHandler@0x850, end 0x854. +- The flagged CONFLICTs are port-side double-attributions to untangle against the decomp + before the first staged MECH.HPP is written. +- Real 1995 types to substitute for the port proxies: ReconChain→`ChainOf`? / + AlarmIndicator→the engine alarm type / ReconSeq→the SequenceController analog / BTVal→per + case — settle each against the surviving engine headers + sizes via the probe. + +## Next actions +1. Extend layout_probe.cpp with offsetof checks on public base members to re-attribute the + sub-0x328 pose fields to their true base classes. +2. Untangle the three offset CONFLICTs above (decomp reads). +3. Write the first staged MECH.HPP (interface + mapped runs + reserved[] filler) and + compile-verify sizeof(Mech)==0x854 with the probe. diff --git a/restoration/source410/BT/MECH.HPP b/restoration/source410/BT/MECH.HPP new file mode 100644 index 00000000..21e57713 --- /dev/null +++ b/restoration/source410/BT/MECH.HPP @@ -0,0 +1,235 @@ +//===========================================================================// +// File: mech.hpp // +// Project: BattleTech Brick: Entity Manager // +// Contents: Implementation details for the Mech entity // +//---------------------------------------------------------------------------// +// Date Who Modification // +// -------- --- ---------------------------------------------------------- // +// // +//---------------------------------------------------------------------------// +// Copyright (C) 1995, Virtual World Entertainment, Inc. // +// All Rights reserved worldwide // +// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // +//===========================================================================// + +#if !defined(MECH_HPP) +# define MECH_HPP + +# if !defined(JMOVER_HPP) +# include +# endif + +# if !defined(RETICLE_HPP) +# include +# endif + +//##################### Forward Class Declarations ####################### + class Mech; + class Subsystem; + class ControlsMapping; + class PlatformTool; + class MechControlsMapper; + class Mech__DamageZone; + +//########################################################################### +//######################### Mech Model Resource ######################### +//########################################################################### + + struct Mech__ModelResource: + public JointedMover::ModelResource + { + char animationPrefix[4]; + Scalar maxAcceleration; + Scalar superStopAcceleration; + Scalar throttleAdjustment; + Scalar lookLeftAngle; + Scalar lookRightAngle; + Scalar lookFrontAngle; + Scalar lookBackAngle; + Scalar walkingTurnRate; + Scalar runningTurnRate; + Scalar reticleX; + Scalar reticleY; + Scalar relativeMechValue; + int deathEffectResourceID; + Scalar deathSplashDamage; + Scalar deathSplashRadius; + Scalar maxUnstableAcceleration; + Scalar unstableAccelerationEffect; + Scalar unstableGunTheEngineEffect; + Scalar unstableSuperStopEffect; + Scalar unstableHighVelocityEffect; + Scalar unstableStopedTurnEffect; + Scalar updatePositionDiffrence; + Scalar updateTurnVelocityDiffrence; + Scalar updateTurnDegreeDiffrence; + Scalar timeDelay; + Vector3D cameraOffset; + char shadowJointName[20]; + }; + +//########################################################################### +//########################## Mech Make Message ########################## +//########################################################################### + + class Mech__MakeMessage: + public JointedMover::MakeMessage + { + public: + char resourceNameA[20]; + char resourceNameB[20]; + char resourceNameC[20]; + + Mech__MakeMessage( + Receiver::MessageID message_ID, + size_t length, + const EntityID &entity_ID, + Entity::ClassID class_ID, + const EntityID &owner_ID, + ResourceDescription::ResourceID resource_ID, + LWord instance_flags, + const Origin &origin, + const Motion &velocity, + const Motion &acceleration, + const char *badge, + const char *color, + const char *patch + ): + JointedMover::MakeMessage( + message_ID, length, entity_ID, class_ID, owner_ID, + resource_ID, instance_flags, origin, velocity, acceleration + ) + { + Str_Copy(resourceNameA, badge, sizeof(resourceNameA)); + Str_Copy(resourceNameB, color, sizeof(resourceNameB)); + Str_Copy(resourceNameC, patch, sizeof(resourceNameC)); + } + }; + +//########################################################################### +//############################## Mech ############################### +//########################################################################### + + class Mech: + public JointedMover + { + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Shared Data Support + // + public: + static Derivation ClassDerivations; + static SharedData DefaultData; + + static const HandlerEntry + MessageHandlerEntries[]; + static MessageHandlerSet + MessageHandlers; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Test Class Support + // + public: + static Logical + TestClass(Mech &); + Logical + TestInstance() const; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Construction and Destruction + // + public: + typedef Mech__ModelResource ModelResource; + typedef Mech__MakeMessage MakeMessage; + typedef Mech__DamageZone DamageZone; + + static Mech* + Make(MakeMessage *creation_message); + + Mech( + MakeMessage *creation_message, + SharedData &shared_data = DefaultData + ); + ~Mech(); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // App interface + // + public: + void + SetMappingSubsystem(Subsystem *mapper); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Resource creation + // + public: + static void + CreateMakeMessage( + MakeMessage *creation_message, + NotationFile *model_file, + const ResourceDirectories *directories + ); + + static ResourceDescription::ResourceID + CreateModelResource( + ResourceFile *resource_file, + const char *model_name, + NotationFile *model_file, + const ResourceDirectories *directories, + ModelResource *model = 0 + ); + + static ResourceDescription::ResourceID + CreateSubsystemStream( + ResourceFile *resource_file, + const char *model_name, + NotationFile *model_file, + const ResourceDirectories *directories + ); + + static ResourceDescription::ResourceID + CreateDamageZoneStream( + ResourceFile *resource_file, + const char *model_name, + NotationFile *model_file, + const ResourceDirectories *directories + ); + + static ResourceDescription::ResourceID + CreateSkeletonStream( + ResourceFile *resource_file, + const char *model_name, + NotationFile *model_file, + const ResourceDirectories *directories + ); + + static ResourceDescription::ResourceID + CreateExplosionTableStream( + ResourceFile *resource_file, + const char *model_name, + NotationFile *model_file, + const ResourceDirectories *directories + ); + + typedef Logical (*FindNameFunction)( + const char *control_name, ControlsMapping *mapping); + + static ResourceDescription::ResourceID + CreateControlMappingStream( + const char *mapping_name, + NotationFile *mapping_file, + FindNameFunction find_name, + ResourceFile *resource_file, + const char *model_name, + NotationFile *model_file, + const ResourceDirectories *directories, + PlatformTool *current_tool + ); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Local Data + // + protected: + int reserved[331]; + }; + +#endif diff --git a/restoration/source410/BT/MECHMPPR.HPP b/restoration/source410/BT/MECHMPPR.HPP new file mode 100644 index 00000000..e37f4b43 --- /dev/null +++ b/restoration/source410/BT/MECHMPPR.HPP @@ -0,0 +1,78 @@ +//===========================================================================// +// File: mechmppr.hpp // +// Project: BattleTech // +// Contents: Implementation details for the mech controls mapper // +//---------------------------------------------------------------------------// +// Date Who Modification // +// -------- --- ---------------------------------------------------------- // +// // +//---------------------------------------------------------------------------// +// Copyright (C) 1995, Virtual World Entertainment, Inc. // +// All Rights reserved worldwide // +// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // +//===========================================================================// + +#if !defined(MECHMPPR_HPP) +# define MECHMPPR_HPP + +# if !defined(SUBSYSTM_HPP) +# include +# endif + +# if !defined(CSTR_HPP) +# include +# endif + +//##################### Forward Class Declarations ####################### + class Mech; + +//########################################################################### +//######################## MechControlsMapper ########################### +//########################################################################### + + class MechControlsMapper: + public Subsystem + { + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Shared Data Support + // + public: + static Derivation ClassDerivations; + static SharedData DefaultData; + static MessageHandlerSet MessageHandlers; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Control modes + // + public: + enum ControlMode { + BasicMode = 0, + StandardMode, + VeteranMode + }; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Construction and Destruction + // + public: + MechControlsMapper( + Mech *owner, + int subsystem_ID, + CString subsystem_name, + RegisteredClass::ClassID class_ID, + SharedData &shared_data = DefaultData + ); + + ~MechControlsMapper(); + + Logical + TestInstance() const; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Local Data + // + protected: + int reserved[64]; + }; + +#endif diff --git a/restoration/source410/BT/MECHSUB.HPP b/restoration/source410/BT/MECHSUB.HPP new file mode 100644 index 00000000..872d4ad4 --- /dev/null +++ b/restoration/source410/BT/MECHSUB.HPP @@ -0,0 +1,132 @@ +//===========================================================================// +// File: mechsub.hpp // +// Project: BattleTech // +// Contents: Implementation details for mech subsystems // +//---------------------------------------------------------------------------// +// Date Who Modification // +// -------- --- ---------------------------------------------------------- // +// // +//---------------------------------------------------------------------------// +// Copyright (C) 1995, Virtual World Entertainment, Inc. // +// All Rights reserved worldwide // +// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // +//===========================================================================// + +#if !defined(MECHSUB_HPP) +# define MECHSUB_HPP + +# if !defined(SUBSYSTM_HPP) +# include +# endif + +//##################### Forward Class Declarations ####################### + class Mech; + class Damage; + +//########################################################################### +//#################### MechSubsystem Model Resource ##################### +//########################################################################### + + struct MechSubsystem__SubsystemResource: + public Subsystem::SubsystemResource + { + Scalar armorByFacing[5]; + Scalar structureReference; + int vitalSubsystemIndex; + char videoObjectName[128]; + ResourceDescription::ResourceID + alarmModel; + int alarmModelReserved[2]; + int printSimulationState; + Scalar collisionCriticalHitWeight; + Scalar criticalReference; + }; + +//########################################################################### +//########################## MechSubsystem ############################## +//########################################################################### + + class MechSubsystem: + public Subsystem + { + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Shared Data Support + // + public: + static Derivation ClassDerivations; + static SharedData DefaultData; + static MessageHandlerSet MessageHandlers; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Status model + // + public: + enum TechStatusType { + Destroyed = 0, + Damaged = 1, + CoolantLeaking = 2, + Overheating = 3, + AmmoBurning = 4, + Jammed = 5, + BadPower = 6, + TechStatusTypeCount + }; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Test Class Support + // + public: + static Logical + TestClass(Mech &); + Logical + TestInstance() const; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Construction and Destruction + // + public: + typedef MechSubsystem__SubsystemResource SubsystemResource; + + MechSubsystem( + Mech *owner, + int subsystem_ID, + const char *subsystem_name, + RegisteredClass::ClassID class_id, + SharedData &shared_data = DefaultData + ); + + MechSubsystem( + Mech *owner, + int subsystem_ID, + SubsystemResource *subsystem_resource, + SharedData &shared_data = DefaultData + ); + + ~MechSubsystem(); + + static int + CreateStreamedSubsystem( + NotationFile *model_file, + const char *model_name, + const char *subsystem_name, + SubsystemResource *subsystem_resource, + NotationFile *subsystem_file, + const ResourceDirectories *directories, + int passes = 1 + ); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Damage support + // + public: + virtual void + TakeDamage(Damage &damage); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Local Data + // + protected: + Mech *owner; + }; + +#endif diff --git a/restoration/source410/BT/MECHWEAP.HPP b/restoration/source410/BT/MECHWEAP.HPP new file mode 100644 index 00000000..6b68392f --- /dev/null +++ b/restoration/source410/BT/MECHWEAP.HPP @@ -0,0 +1,125 @@ +//===========================================================================// +// File: mechweap.hpp // +// Project: BattleTech // +// Contents: Implementation details for mech weapons // +//---------------------------------------------------------------------------// +// Date Who Modification // +// -------- --- ---------------------------------------------------------- // +// // +//---------------------------------------------------------------------------// +// Copyright (C) 1995, Virtual World Entertainment, Inc. // +// All Rights reserved worldwide // +// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // +//===========================================================================// + +#if !defined(MECHWEAP_HPP) +# define MECHWEAP_HPP + +# if !defined(POWERSUB_HPP) +# include +# endif + +# if !defined(DAMAGE_HPP) +# include +# endif + +//##################### Forward Class Declarations ####################### + class Mech; + +//########################################################################### +//###################### MechWeapon Model Resource ###################### +//########################################################################### + + struct MechWeapon__SubsystemResource: + public PoweredSubsystem::SubsystemResource + { + Scalar rechargeRate; + Scalar weaponRange; + ResourceDescription::ResourceID + explosionModelFile; + Scalar damageAmount; + int damageType; + Scalar heatCostToFire; + Scalar pipPositionX; + Scalar pipPositionY; + int rearFiring; + }; + +//########################################################################### +//############################ MechWeapon ############################### +//########################################################################### + + class MechWeapon: + public PoweredSubsystem + { + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Shared Data Support + // + public: + static Derivation ClassDerivations; + static SharedData DefaultData; + static MessageHandlerSet MessageHandlers; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Test Class Support + // + public: + static Logical + TestClass(Mech &); + Logical + TestInstance() const; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Construction and Destruction + // + public: + typedef MechWeapon__SubsystemResource SubsystemResource; + + MechWeapon( + Mech *owner, + int subsystem_ID, + SubsystemResource *subsystem_resource, + SharedData &shared_data = DefaultData + ); + + ~MechWeapon(); + + static int + CreateStreamedSubsystem( + ResourceFile *resource_file, + NotationFile *model_file, + const char *model_name, + const char *subsystem_name, + SubsystemResource *subsystem_resource, + NotationFile *subsystem_file, + const ResourceDirectories *directories, + int passes = 1 + ); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Weapon interface + // + public: + virtual void + FireWeapon(); + + void + SendDamage( + Entity *target, + Damage &damage + ); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Local Data + // + protected: + Scalar rechargeRate; + Scalar weaponRange; + Scalar damageAmount; + int damageType; + Scalar heatCostToFire; + int targetWithinRange; + Damage damageData; + }; + +#endif diff --git a/restoration/source410/BT/MISSILE.HPP b/restoration/source410/BT/MISSILE.HPP new file mode 100644 index 00000000..34e6c441 --- /dev/null +++ b/restoration/source410/BT/MISSILE.HPP @@ -0,0 +1,73 @@ +//===========================================================================// +// File: missile.hpp // +// Project: BattleTech // +// Contents: Implementation details for missiles // +//---------------------------------------------------------------------------// +// Date Who Modification // +// -------- --- ---------------------------------------------------------- // +// // +//---------------------------------------------------------------------------// +// Copyright (C) 1995, Virtual World Entertainment, Inc. // +// All Rights reserved worldwide // +// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // +//===========================================================================// + +#if !defined(MISSILE_HPP) +# define MISSILE_HPP + +# if !defined(PROJTILE_HPP) +# include +# endif + +//########################################################################### +//############################## Missile ################################ +//########################################################################### + + class Missile: + public Projectile + { + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Shared Data Support + // + public: + static Derivation ClassDerivations; + static SharedData DefaultData; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Construction and Destruction + // + public: + typedef Projectile::MakeMessage MakeMessage; + + static Missile* + Make(MakeMessage *creation_message); + + Missile( + MakeMessage *creation_message, + SharedData &shared_data = DefaultData + ); + ~Missile(); + + Logical + TestInstance() const; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Resource creation + // + public: + static ResourceDescription::ResourceID + CreateModelResource( + ResourceFile *resource_file, + const char *model_name, + NotationFile *model_file, + const ResourceDirectories *directories + ); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Local Data + // + protected: + int reserved[16]; + }; + +#endif diff --git a/restoration/source410/BT/POWERSUB.HPP b/restoration/source410/BT/POWERSUB.HPP new file mode 100644 index 00000000..35abf685 --- /dev/null +++ b/restoration/source410/BT/POWERSUB.HPP @@ -0,0 +1,100 @@ +//===========================================================================// +// File: powersub.hpp // +// Project: BattleTech // +// Contents: Implementation details for powered subsystems // +//---------------------------------------------------------------------------// +// Date Who Modification // +// -------- --- ---------------------------------------------------------- // +// // +//---------------------------------------------------------------------------// +// Copyright (C) 1995, Virtual World Entertainment, Inc. // +// All Rights reserved worldwide // +// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // +//===========================================================================// + +#if !defined(POWERSUB_HPP) +# define POWERSUB_HPP + +# if !defined(HEAT_HPP) +# include +# endif + +//##################### Forward Class Declarations ####################### + class Mech; + +//########################################################################### +//################### PoweredSubsystem Model Resource ################### +//########################################################################### + + struct PoweredSubsystem__SubsystemResource: + public HeatableSubsystem::SubsystemResource + { + int voltageSource; + Scalar thermalResistivityCoefficient; + int auxScreenNumber; + int auxScreenPlacement; + char auxScreenLabel[64]; + char engScreenLabel[64]; + Scalar startTime; + }; + +//########################################################################### +//######################### PoweredSubsystem ############################ +//########################################################################### + + class PoweredSubsystem: + public HeatableSubsystem + { + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Shared Data Support + // + public: + static Derivation ClassDerivations; + static SharedData DefaultData; + static MessageHandlerSet MessageHandlers; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Test Class Support + // + public: + static Logical + TestClass(Mech &); + Logical + TestInstance() const; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Construction and Destruction + // + public: + typedef PoweredSubsystem__SubsystemResource SubsystemResource; + + PoweredSubsystem( + Mech *owner, + int subsystem_ID, + SubsystemResource *subsystem_resource, + SharedData &shared_data = DefaultData + ); + + ~PoweredSubsystem(); + + static int + CreateStreamedSubsystem( + NotationFile *model_file, + const char *model_name, + const char *subsystem_name, + SubsystemResource *subsystem_resource, + NotationFile *subsystem_file, + const ResourceDirectories *directories, + int passes = 1 + ); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Local Data + // + protected: + Scalar inputVoltage; + Scalar outputVoltage; + Scalar ratedVoltage; + }; + +#endif diff --git a/restoration/source410/BT/PROJTILE.HPP b/restoration/source410/BT/PROJTILE.HPP new file mode 100644 index 00000000..87e04f4e --- /dev/null +++ b/restoration/source410/BT/PROJTILE.HPP @@ -0,0 +1,73 @@ +//===========================================================================// +// File: projtile.hpp // +// Project: BattleTech // +// Contents: Implementation details for projectiles // +//---------------------------------------------------------------------------// +// Date Who Modification // +// -------- --- ---------------------------------------------------------- // +// // +//---------------------------------------------------------------------------// +// Copyright (C) 1995, Virtual World Entertainment, Inc. // +// All Rights reserved worldwide // +// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // +//===========================================================================// + +#if !defined(PROJTILE_HPP) +# define PROJTILE_HPP + +# if !defined(MOVER_HPP) +# include +# endif + +//########################################################################### +//############################ Projectile ############################### +//########################################################################### + + class Projectile: + public Mover + { + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Shared Data Support + // + public: + static Derivation ClassDerivations; + static SharedData DefaultData; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Construction and Destruction + // + public: + typedef Mover::MakeMessage MakeMessage; + + static Projectile* + Make(MakeMessage *creation_message); + + Projectile( + MakeMessage *creation_message, + SharedData &shared_data = DefaultData + ); + ~Projectile(); + + Logical + TestInstance() const; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Resource creation + // + public: + static ResourceDescription::ResourceID + CreateModelResource( + ResourceFile *resource_file, + const char *model_name, + NotationFile *model_file, + const ResourceDirectories *directories + ); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Local Data + // + protected: + int reserved[16]; + }; + +#endif diff --git a/restoration/source410/BT/STAGED-HEADERS.NOTES.md b/restoration/source410/BT/STAGED-HEADERS.NOTES.md new file mode 100644 index 00000000..da34cd18 --- /dev/null +++ b/restoration/source410/BT/STAGED-HEADERS.NOTES.md @@ -0,0 +1,39 @@ +# Staged header family — shared notes (2026-07-19) + +The 13 headers that closed the tree's compile: BT/ MECH, MECHSUB, HEAT, POWERSUB, MECHWEAP, +EMITTER, MECHMPPR, BTPLAYER, PROJTILE, MISSILE (+ BTCNSL/BTSCNRL with own sidecars); +BT_L4/ BTL4MPPR, BTL4VID. **STAGED [T3]**: interface-complete for every surviving consumer, +layout PARKED behind `reserved[]` blocks. Each tightens to [T1] when its TU is reconstructed +(the MECH-LAYOUT.md worksheet is the pattern). + +What is ALREADY hard evidence [T1] inside them: +- Every signature exercised by a surviving consumer (the consumer compiling IS the proof): + PPC/GAUSS pin Emitter (ctor, FireWeapon, CreateStreamedSubsystem 8-arg, SubsystemResource + nesting, ClassDerivations/AttributeIndex); BTREG pins BTPlayer::MakeMessage (10-arg ctor: + base 8 per PLAYER.HPP + roleName/teamName CStrings) + BTPlayer(&msg) + DefaultData; + BTTOOL pins the seven Mech::Create* tool statics + Projectile/Missile::CreateModelResource; + BTL4APP.CPP pins Mech::Make/MakeMessage/SetMappingSubsystem and the + MechThrustmaster/RIOMapper ctors (Mech*, int, CString, ClassID=0x7dc, SharedData&). +- Hierarchy from surviving 1995 headers: PPC:Emitter, MissileLauncher:ProjectileWeapon, + Sensor:PoweredSubsystem, + the CLASSMAP chain MechSubsystem:Subsystem → + HeatableSubsystem → PoweredSubsystem → MechWeapon → Emitter. +- Mech__ModelResource: byte-exact 200-byte record (port [T1], static_assert-locked there). +- Mech object: base boundary 0x328 (layout_probe [T1]) + reserved[331] ⇒ sizeof 0x854 + == the binary's Make alloc (probe-verifiable). + +Known staging shortcuts to revisit with the TUs: +- Resource-struct field lists for HEAT/POWERSUB/MECHWEAP/EMITTER are name-plausible but NOT + yet offset-locked against the type-0x11 records (the port's locked versions are richer — + reconcile when those TUs land; the GAUSS dischargeVoltage tail is the surviving anchor). +- MECHMPPR/BTL4MPPR member regions are token reserved blocks; the real controlMode@0x190 + block layout is in the port's mechmppr.hpp (task #51 evidence). +- BTL4VID is a shell (ctor + LoadMissionImplementation per the RPL4VID analog). +- BTL4APP.CPP deviations from the pilot's first draft, forced by real headers: appmgr.hpp + include added (frame rate = GetApplicationManager()->GetFrameRate(), APPMGR.HPP:22), + ResourceDescription:: scope on ControlMappingsListResourceType (RESOURCE.HPP:102), the + keyboard-comment trimmed to hold Fail() at line 400. +- The DPL include roots joined the compile line (CODE/BT/MUNGA_L4/LIBDPL over + CODE/RP/MUNGA_L4/libDPL) — dpl.h resolves `dpl/dpltypes.h` relative to libDPL. + +Sweep configuration of record: `../compile410.sh` (NO_PRECOMPILED_HEADERS retired — bt.hpp +and mungal4.hpp now pull their full PCH sets: mech/btplayer/mechsub + graph2d/l4host/l4app). diff --git a/restoration/source410/BT_L4/BTL4APP.CPP b/restoration/source410/BT_L4/BTL4APP.CPP index eb1f2a1a..27a2b36a 100644 --- a/restoration/source410/BT_L4/BTL4APP.CPP +++ b/restoration/source410/BT_L4/BTL4APP.CPP @@ -23,6 +23,10 @@ # include #endif +#if !defined(APPMGR_HPP) +# include +#endif + #if !defined(BTL4VID_HPP) # include #endif @@ -181,7 +185,7 @@ AudioRenderer* return new BTL4AudioRenderer( - GetFrameRate(), + GetApplicationManager()->GetFrameRate(), GetMissionReviewMode() ); } @@ -212,10 +216,6 @@ ControlsManager* LBE4ControlsManager *controls_manager = new LBE4ControlsManager; Check_Pointer(controls_manager); - - // - // Route the PC keyboard to the application's key-command handler - // controls_manager->keyboardGroup[LBE4ControlsManager::KeyboardPC].Add( ModeManager::ModeAlwaysActive, this, @@ -420,7 +420,7 @@ Entity* *description = application->GetResourceFile()->SearchList( viewing_entity->GetResourceID(), - ControlMappingsListResourceType + ResourceDescription::ControlMappingsListResourceType ); if (description) diff --git a/restoration/source410/BT_L4/BTL4MPPR.HPP b/restoration/source410/BT_L4/BTL4MPPR.HPP new file mode 100644 index 00000000..8051188f --- /dev/null +++ b/restoration/source410/BT_L4/BTL4MPPR.HPP @@ -0,0 +1,121 @@ +//===========================================================================// +// File: btl4mppr.hpp // +// Project: BattleTech // +// Contents: Implementation details for the L4 mech controls mappers // +//---------------------------------------------------------------------------// +// Date Who Modification // +// -------- --- ---------------------------------------------------------- // +// // +//---------------------------------------------------------------------------// +// Copyright (C) 1995, Virtual World Entertainment, Inc. // +// All Rights reserved worldwide // +// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // +//===========================================================================// + +#if !defined(BTL4MPPR_HPP) +# define BTL4MPPR_HPP + +# if !defined(MECHMPPR_HPP) +# include +# endif + +//##################### Forward Class Declarations ####################### + class Mech; + class L4Lamp; + + enum { MechControlsMapperClassID = 0x7dc }; + +//########################################################################### +//####################### L4MechControlsMapper ########################## +//########################################################################### + + class L4MechControlsMapper: + public MechControlsMapper + { + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Shared Data Support + // + public: + static Derivation ClassDerivations; + static SharedData DefaultData; + static MessageHandlerSet MessageHandlers; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Construction and Destruction + // + public: + L4MechControlsMapper( + Mech *owner, + int subsystem_ID, + CString subsystem_name, + RegisteredClass::ClassID class_ID, + SharedData &shared_data = DefaultData + ); + + ~L4MechControlsMapper(); + + Logical + TestInstance() const; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Local Data + // + protected: + int reserved[16]; + }; + +//########################################################################### +//###################### MechThrustmasterMapper ######################### +//########################################################################### + + class MechThrustmasterMapper: + public L4MechControlsMapper + { + public: + static Derivation ClassDerivations; + static SharedData DefaultData; + static MessageHandlerSet MessageHandlers; + + MechThrustmasterMapper( + Mech *owner, + int subsystem_ID, + CString subsystem_name, + RegisteredClass::ClassID class_ID = + (RegisteredClass::ClassID)MechControlsMapperClassID, + SharedData &shared_data = DefaultData + ); + + ~MechThrustmasterMapper(); + + Logical + TestInstance() const; + }; + +//########################################################################### +//########################## MechRIOMapper ############################## +//########################################################################### + + class MechRIOMapper: + public L4MechControlsMapper + { + public: + static Derivation ClassDerivations; + static SharedData DefaultData; + static MessageHandlerSet MessageHandlers; + + MechRIOMapper( + Mech *owner, + int subsystem_ID, + CString subsystem_name, + RegisteredClass::ClassID class_ID = + (RegisteredClass::ClassID)MechControlsMapperClassID, + SharedData &shared_data = DefaultData + ); + + ~MechRIOMapper(); + + Logical + TestInstance() const; + }; + +#endif diff --git a/restoration/source410/BT_L4/BTL4VID.HPP b/restoration/source410/BT_L4/BTL4VID.HPP new file mode 100644 index 00000000..6bb841b2 --- /dev/null +++ b/restoration/source410/BT_L4/BTL4VID.HPP @@ -0,0 +1,47 @@ +//===========================================================================// +// File: btl4vid.hpp // +// Project: BattleTech // +// Contents: Implementation details for the BT video renderer // +//---------------------------------------------------------------------------// +// Date Who Modification // +// -------- --- ---------------------------------------------------------- // +// // +//---------------------------------------------------------------------------// +// Copyright (C) 1995, Virtual World Entertainment, Inc. // +// All Rights reserved worldwide // +// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // +//===========================================================================// + +#if !defined(BTL4VID_HPP) +# define BTL4VID_HPP + +# if !defined(L4VIDEO_HPP) +# include +# endif + +//########################################################################### +//####################### BTL4VideoRenderer ############################# +//########################################################################### + + class BTL4VideoRenderer: + public DPLRenderer + { + public: + BTL4VideoRenderer( + RendererRate calibration_rate, + RendererComplexity calibration_complexity, + RendererPriority calibration_priority, + InterestType interest_type, + InterestDepth depth_calibration + ); + ~BTL4VideoRenderer(); + + protected: + void + LoadMissionImplementation(Mission *mission); + + protected: + int reserved[16]; + }; + +#endif diff --git a/restoration/source410/README.md b/restoration/source410/README.md index b256d8ae..d78ebd6f 100644 --- a/restoration/source410/README.md +++ b/restoration/source410/README.md @@ -37,11 +37,11 @@ back-dating (donors: `C:\VWE\BT412\engine\MUNGA\*.h`). | item | state | |---|---| -| ORIGINAL **BTMSSN, BTCNSL, BTSCNRL, BTTEAM, BTL4MODE, BTL4ARND** | ✅ **COMPILE CLEAN — 6 of 10 surviving originals** (first builds since 1996) | -| BT/BTCNSL.HPP + BT/BTSCNRL.HPP | ✅ reconstructed round 2 — **console wire IDs recovered from the binary** (Killed=9, Damaged=10, ScoreUpdate=13, DeathWithoutHonor=15 [T1]; TeamScore=12 [T4 GUESS — verify]); see BTCNSL.NOTES.md | -| BT_L4/BTL4APP.CPP (pilot reconstruction) | 12/12 functions, Fail() at recorded line 400; compile gated on the mech-family header package | -| MUNGA backfills (VDATA, ROTATION, VECTOR2D, AUDREND, APP, LAMP, GAUGREND, GAUGE) | ✅ 6 compile-proven, 2 parse-proven (BACKFILLS.NOTES.md) | -| ORIGINALS still blocked | BTREG (`btplayer.hpp`), GAUSS+PPC (`emitter.hpp`), BTTOOL (`mech.hpp`) — all gated on the mech-family package | +| **THE WHOLE TREE COMPILES (2026-07-19)** | ✅ **11/11: all 10 surviving originals + the BTL4APP.CPP pilot build clean under BC4.52 + authentic OPT flags** (`./compile410.sh --sweep`) | +| BT/BTCNSL.HPP + BT/BTSCNRL.HPP | ✅ reconstructed — **console wire IDs recovered from the binary** (Killed=9, Damaged=10, ScoreUpdate=13, DeathWithoutHonor=15 [T1]; TeamScore=12 [T4 GUESS — verify]); see BTCNSL.NOTES.md | +| BT_L4/BTL4APP.CPP (pilot reconstruction) | ✅ compiles (18.5KB obj); 12/12 functions, Fail() at recorded line 400 | +| Staged header family (13: mech/mechsub/heat/powersub/mechweap/emitter/mechmppr/btplayer/projtile/missile + btl4mppr/btl4vid) | ✅ [T3] interface-proven by every surviving consumer; layouts parked in reserved[] blocks — see STAGED-HEADERS.NOTES.md + MECH-LAYOUT.md | +| MUNGA backfills (VDATA, ROTATION, VECTOR2D, AUDREND, APP, LAMP, GAUGREND, GAUGE) | ✅ compile-proven (BACKFILLS.NOTES.md) | **Next work package — the mech-family, REVISED (round-3 finding, 2026-07-19):** the plan to "reconstruct mech.hpp first" was the wrong order. A full read of the port's mech.hpp shows diff --git a/restoration/source410/compile410.sh b/restoration/source410/compile410.sh index 3c24161a..59feed0c 100644 --- a/restoration/source410/compile410.sh +++ b/restoration/source410/compile410.sh @@ -18,10 +18,10 @@ R=c:/VWE/TeslaRel410/CODE/RP S=c:/VWE/TeslaRel410/restoration/source410 # include order: BT tree over RP tree over source410 backfills over BC45 -INC="$C/BT_L4;$C/BT;$C/MUNGA;$C/MUNGA_L4;$C/MUNGA_L4/SOS/BC4;$R/MUNGA;$R/MUNGA_L4;$R/MUNGA_L4/sos/bc4;$S/MUNGA;$S/BT;$S/BT_L4;c:/VWE/TeslaRel410/BORLAND/BC45/INCLUDE" +INC="$C/BT_L4;$C/BT;$C/MUNGA;$C/MUNGA_L4;$C/MUNGA_L4/SOS/BC4;$R/MUNGA;$R/MUNGA_L4;$R/MUNGA_L4/sos/bc4;$C/MUNGA_L4/LIBDPL;$R/MUNGA_L4/libDPL;$R/MUNGA_L4/libDPL/dpl;$S/MUNGA;$S/BT;$S/BT_L4;c:/VWE/TeslaRel410/BORLAND/BC45/INCLUDE" # CODE/BT/OPT.MAK flags (minus -H PCH, plus the NO_PRECOMPILED_HEADERS dodge) -FLAGS="-c -DLBE4 -DDEBUG_LEVEL=0 -DDEBUG_STREAM=cout -DNO_PRECOMPILED_HEADERS \ +FLAGS="-c -DLBE4 -DDEBUG_LEVEL=0 -DDEBUG_STREAM=cout \ -b -r -ff -AT -k- -N- -v- -5 -a4 -V -Jg -x- -RT- -O2 -w-" one() { diff --git a/restoration/source410/layout_probe.cpp b/restoration/source410/layout_probe.cpp new file mode 100644 index 00000000..87687fba --- /dev/null +++ b/restoration/source410/layout_probe.cpp @@ -0,0 +1,31 @@ +#include +#pragma hdrstop + +#if !defined(BTMSSN_HPP) +# include +#endif +#if !defined(BTL4MODE_HPP) +# include +#endif +#if !defined(BTREG_HPP) +# include +#endif +#if !defined(JMOVER_HPP) +# include +#endif + +#include + +int main(void) +{ + printf("Entity %04lx\n", (long)sizeof(Entity)); + printf("Simulation %04lx\n", (long)sizeof(Simulation)); + printf("Mover %04lx\n", (long)sizeof(Mover)); + printf("JointedMover %04lx\n", (long)sizeof(JointedMover)); + printf("Mission %04lx\n", (long)sizeof(Mission)); + printf("BTMission %04lx\n", (long)sizeof(BTMission)); + printf("ModeManager %04lx\n", (long)sizeof(ModeManager)); + printf("BTL4ModeManager %04lx\n", (long)sizeof(BTL4ModeManager)); + printf("BTRegistry %04lx\n", (long)sizeof(BTRegistry)); + return 0; +}