Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
190 lines
4.8 KiB
C++
190 lines
4.8 KiB
C++
#if !defined(__MREPLAY2_H__)
|
|
#define __MREPLAY2_H__
|
|
|
|
#define MAX_MRP_PACK_PER_FRAME 1000
|
|
|
|
#define MRP_ADD_PLAYER_NAME 1000
|
|
#define MRP_REMOVE_PLAYER_NAME 1001
|
|
#define MRP_STOP_FRAME 2000
|
|
#define MRP_FULLCONFIRM 2001
|
|
#define MRP_RESPAWNMESSAGEID 2002
|
|
#define MRP_MECHDAMAGETAKEN 3000
|
|
|
|
extern const char* g_pcszGameDataExtMR;
|
|
|
|
#pragma pack(push, 4)
|
|
|
|
struct SMRP_PLAYER_NAME
|
|
{
|
|
public:
|
|
DPID m_dpId;
|
|
char m_szName[1];
|
|
};
|
|
|
|
#pragma pack(push, 1)
|
|
struct SMRP_MECH_DAMAGETAKEN
|
|
{
|
|
public:
|
|
Stuff::Scalar m_fDamage;
|
|
BYTE m_bCon1;
|
|
BYTE m_weaponID;
|
|
WORD m_wLID1; //ReplicatorID m_id1;
|
|
BYTE m_bCon2;
|
|
BYTE m_damageType;
|
|
WORD m_wLID2; //ReplicatorID m_id2;
|
|
};
|
|
#pragma pack(pop)
|
|
|
|
struct SMRP
|
|
{
|
|
public:
|
|
int m_nCommand; //
|
|
union {
|
|
int m_nType; //
|
|
DWORD m_dpID;
|
|
float m_fFrameTime;
|
|
};
|
|
int m_nLen; //
|
|
union {
|
|
BYTE m_ba[0];
|
|
SMRP_PLAYER_NAME m_PlayerName[0];
|
|
SMRP_MECH_DAMAGETAKEN m_MDT[0];
|
|
};
|
|
public:
|
|
int GetMemSize() const;
|
|
};
|
|
typedef SMRP* PMRP;
|
|
|
|
class CMRPPack;
|
|
CMRPPack* AllocMRPPack(int nCount, PMRP* ppMRP);
|
|
void FreeMRPPack(CMRPPack* pMRPPack);
|
|
|
|
class CMRPPack
|
|
{
|
|
public:
|
|
CMRPPack* m_pPrev;
|
|
CMRPPack* m_pNext;
|
|
float m_fFrameTime;
|
|
int m_nCount;
|
|
PMRP m_pa[0];
|
|
public:
|
|
void Construct(int nCount, PMRP* ppMRP);
|
|
void Destruct();
|
|
int GetMemSize() const;
|
|
void Save(Stuff::DynamicMemoryStream& mf);
|
|
void Load(Stuff::MemoryStream& mf, DWORD dwMeta);
|
|
};
|
|
|
|
class CMRPPlayer
|
|
{
|
|
public:
|
|
CMRPPlayer* m_pPrev;
|
|
CMRPPlayer* m_pNext;
|
|
bool m_bBOT;
|
|
MString m_strName;
|
|
MString m_strClan;
|
|
MString m_strScript;
|
|
BYTE m_connection_id;
|
|
int m_pilotTeam; // the team the pilot is on
|
|
int m_pilotDecals; // the index of their pilot decal
|
|
int m_teamDecals; // the index of their team decal
|
|
int m_mechChasisID; // what mech they are in
|
|
char m_pilotSkins; // the skin prefix
|
|
int m_tonnage;
|
|
// for bot only - start
|
|
Adept::ResourceID m_aiModel;
|
|
// for bot only - end
|
|
BYTE* m_pBufVCM;
|
|
Stuff::MemoryStream* m_vehicleCreateMessage;
|
|
public:
|
|
CMRPPlayer();
|
|
~CMRPPlayer();
|
|
int GetMemSize() const;
|
|
void Save(Stuff::DynamicMemoryStream& mf);
|
|
void Load(Stuff::MemoryStream& mf);
|
|
};
|
|
typedef CMRPPlayer* PMRPPlayer;
|
|
|
|
class CMRPFull
|
|
{
|
|
public:
|
|
DPSESSIONDESC2 m_CurrentSession;
|
|
MString m_strGameName;
|
|
DWORD m_dwMyDirectPlayID;
|
|
MString m_strPlayer;
|
|
MString m_strPassword;
|
|
|
|
bool m_bStarting;
|
|
bool m_bStarted;
|
|
bool m_bStopping;
|
|
bool m_bStopped;
|
|
int m_nMissionParamSize;
|
|
BYTE* m_pMissionParam;
|
|
bool m_bTeamGame;
|
|
|
|
int m_nBOTPlayers;
|
|
int m_nLoadingPlayers;
|
|
int m_nBroadCastPlayers;
|
|
|
|
CMRPPlayer* m_pMRPPlayers;
|
|
|
|
float m_fFrameTime;
|
|
int m_nCount;
|
|
PMRP m_pa[MAX_MRP_PACK_PER_FRAME];
|
|
|
|
CMRPPack* m_pMRPPackStart;
|
|
CMRPPack* m_pCurMRPPack;
|
|
PMRP m_pLastDictionary;
|
|
PMRP m_pLastDictionaryToBeSent;
|
|
public:
|
|
CMRPFull();
|
|
~CMRPFull();
|
|
static MWApplication* Check();
|
|
bool IsValidData() const;
|
|
void Reset();
|
|
bool IsValid() const;
|
|
void Loading();
|
|
void Loaded();
|
|
void PreRendering();
|
|
void PreRendered();
|
|
void Starting();
|
|
void Started();
|
|
void StartFrame();
|
|
void StopFrame();
|
|
void ReduceFrame();
|
|
void Stopping();
|
|
void Stopped();
|
|
PMRPPlayer AddMRPPlayer(bool bBOT);
|
|
PMRP AddMRP(int nCommand, int nType, int nLen);
|
|
void OnGameOpen(const char* pcszGameName, DWORD dwMyID, const char* pcszPlayer, const char* pcszPassword);
|
|
void OnGameClose();
|
|
void AddRemovePlayerToGame(int nCommand, char* Name, DPID dpId);
|
|
void AddRemoveConnection(bool bAdd, Connection* pConnection);
|
|
void SessionLost();
|
|
void* NetInformation(gosNetInfo Info, DWORD Parameter, char* Name);
|
|
void NetServerCommands(gos_NetCommands Command, DWORD Data1);
|
|
NetPacket* NetGetMessage();
|
|
bool LocalSendNetMessage(int message_type, Stuff::MemoryStream& message);
|
|
void BackgroundTack();
|
|
PMRP SendMessage(int message_type, Stuff::MemoryStream *message, int nCommand = 0);
|
|
void MechDamageTaken(ReplicatorID mech1, ReplicatorID mech2, Stuff::Scalar damage_taken, int weaponID, int damageType);
|
|
void _cdecl SendCommand(int nCommand, ...);
|
|
void DoReplay();
|
|
void QuitReplay();
|
|
int GetMemSize() const;
|
|
void DbgReport() const;
|
|
bool SaveMR(const char* pcszFile);
|
|
bool LoadDefaultMR();
|
|
bool LoadMR(const char* pcszFile);
|
|
Stuff::Scalar EndMissionTime() const;
|
|
};
|
|
|
|
#pragma pack(pop)
|
|
|
|
void MRP_Setup();
|
|
void MRP_Cleanup();
|
|
|
|
extern CMRPFull g_MRF;
|
|
|
|
#endif // !defined(__MREPLAY2_H__)
|