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 <noreply@anthropic.com>
This commit is contained in:
@@ -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 <player.hpp>
|
||||
# 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
|
||||
@@ -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 <mechweap.hpp>
|
||||
# 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
|
||||
@@ -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 <mechsub.hpp>
|
||||
# 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
|
||||
@@ -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<Subsystem*>`? /
|
||||
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.
|
||||
@@ -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 <jmover.hpp>
|
||||
# endif
|
||||
|
||||
# if !defined(RETICLE_HPP)
|
||||
# include <reticle.hpp>
|
||||
# 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
|
||||
@@ -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 <subsystm.hpp>
|
||||
# endif
|
||||
|
||||
# if !defined(CSTR_HPP)
|
||||
# include <cstr.hpp>
|
||||
# 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
|
||||
@@ -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 <subsystm.hpp>
|
||||
# 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
|
||||
@@ -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 <powersub.hpp>
|
||||
# endif
|
||||
|
||||
# if !defined(DAMAGE_HPP)
|
||||
# include <damage.hpp>
|
||||
# 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
|
||||
@@ -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 <projtile.hpp>
|
||||
# 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
|
||||
@@ -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 <heat.hpp>
|
||||
# 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
|
||||
@@ -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 <mover.hpp>
|
||||
# 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
|
||||
@@ -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).
|
||||
@@ -23,6 +23,10 @@
|
||||
# include <btreg.hpp>
|
||||
#endif
|
||||
|
||||
#if !defined(APPMGR_HPP)
|
||||
# include <appmgr.hpp>
|
||||
#endif
|
||||
|
||||
#if !defined(BTL4VID_HPP)
|
||||
# include <btl4vid.hpp>
|
||||
#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)
|
||||
|
||||
@@ -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 <mechmppr.hpp>
|
||||
# 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
|
||||
@@ -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 <l4video.hpp>
|
||||
# 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
|
||||
@@ -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
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
#include <bt.hpp>
|
||||
#pragma hdrstop
|
||||
|
||||
#if !defined(BTMSSN_HPP)
|
||||
# include <btmssn.hpp>
|
||||
#endif
|
||||
#if !defined(BTL4MODE_HPP)
|
||||
# include <btl4mode.hpp>
|
||||
#endif
|
||||
#if !defined(BTREG_HPP)
|
||||
# include <btreg.hpp>
|
||||
#endif
|
||||
#if !defined(JMOVER_HPP)
|
||||
# include <jmover.hpp>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user