Boot ladder advances past player creation. BTPlayer ctor/dtor/Make/ TestInstance/GetExperienceLevel reconstructed from BT411's Ghidra-recovered body (@004c0bc8) backdated to 1995 idiom; the reserved[38] placeholder in BTPLAYER.HPP replaced with the real BT-own members. Key fidelity call: the game-mode flags are derived from btMission->ExperienceLevel() (the egg's per-pilot experience key) with the binary-accurate switch rows from the [T1] disassembly -- NOT from the scenario role's returnFromDeath, which BT411's port uses as a [T3] stand-in. Mapping and residual naming/[T4] uncertainty documented in BTPLAYER.NOTES.md. Live boot now runs: banner -> resources -> app ctor -> network single-user -> egg -> mission -> SetPlayerData -> BTRegistry::MakePlayer -> BTPlayer ctor (resolves team, seeds experience flags) -> halts at the base Player::DropZoneReplyMessageHandler stub (BTPlayer's own message-handler table is the next brick -- DefaultData still reuses Player::MessageHandlers). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
177 lines
4.4 KiB
C++
177 lines
4.4 KiB
C++
//===========================================================================//
|
|
// 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;
|
|
class Mission;
|
|
|
|
//###########################################################################
|
|
//####################### 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();
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Model Support
|
|
//
|
|
public:
|
|
typedef void
|
|
(BTPlayer::*Performance)(Scalar time_slice);
|
|
|
|
void
|
|
SetPerformance(Performance performance)
|
|
{
|
|
Check(this);
|
|
activePerformance = (Simulation::Performance)performance;
|
|
}
|
|
|
|
void
|
|
PlayerSimulation(Scalar time_slice);
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Local Data
|
|
//
|
|
protected:
|
|
Mission
|
|
*btMission;
|
|
char
|
|
teamName[64];
|
|
BTTeam
|
|
*teamEntity;
|
|
Logical
|
|
freeForAll;
|
|
Logical
|
|
consoleAttached;
|
|
Logical
|
|
suppressConsole;
|
|
|
|
//
|
|
// Game-mode flags derived in the constructor from the mission's
|
|
// experience level (novice / standard / veteran / expert) and
|
|
// advanced-damage technician flag. See BTPLAYER.NOTES.md.
|
|
//
|
|
Logical
|
|
showDamageReceived;
|
|
Logical
|
|
showKills;
|
|
Logical
|
|
showDamageInflicted;
|
|
Logical
|
|
showScore;
|
|
Scalar
|
|
roleReturnDelay;
|
|
Scalar
|
|
roleReturnDelay2;
|
|
int
|
|
roleClassIndex;
|
|
|
|
int
|
|
killCount;
|
|
int
|
|
padScore;
|
|
Mech
|
|
*objectiveMech;
|
|
Time
|
|
lastConsoleUpdate;
|
|
Logical
|
|
deathPending;
|
|
};
|
|
|
|
#endif
|