Files
firestorm/Gameleap/code/mw4/Code/mw4print/mw4dummy.h
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
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.
2026-06-24 21:28:16 -05:00

696 lines
16 KiB
C++

#define MW4PRINT
#define Check_Pointer(x)
#define Check_Object(x)
#define Verify(x)
#define gosASSERT(x)
#define MString CString
#define GetLengthSafe GetLength
#define Scalar float
#define Max_Clamp(v,c) if (v>c) v=c; else (void)0
class ReplicatorID;
class MemoryStream;
class DynamicMemoryStream;
namespace Adept
{
enum
{
BeamDamageType = 0,
MissileDamageType,
ProjectileDamageType,
SplashDamageType,
HeatDamageType,
RammingDamageFromAboveType,
RammingDamageFromBelowType,
RammingDamageFromLeftType,
RammingDamageFromRightType,
RammingDamageFromAheadType,
RammingDamageFromBehindType,
HighExplosiveDamageType,
LavaDamageType,
AmmoFireDamageType
};
namespace DamageObject
{
enum {
NullZone=-1,
LeftLegZone = 0, //Mech pieces must follow default zone
RightLegZone,
LeftArmZone,
RightArmZone,
RightTorsoZone,
LeftTorsoZone,
CenterTorsoZone,
HeadZone,
SpecialZone1,
SpecialZone2,
VehicleHullZone, //All Vehicle and non-mech zones must be after the specials
VehicleWeaponZone,
VehicleSpecialZone,
DefaultZone,
NextDamageZone
};
enum {
NullArmorZone=-1,
LeftLegArmorZone = 0,
RightLegArmorZone,
LeftArmArmorZone,
RightArmArmorZone,
RightTorsoArmorZone,
LeftTorsoArmorZone,
CenterTorsoArmorZone,
CenterRearTorsoArmorZone,
HeadArmorZone,
SpecialArmorZone1,
SpecialArmorZone2,
DefaultArmorZone
};
}
class AdeptNetMissionParameters
{
public:
int m_runDedicated;
int m_closedGame;
int m_playerLimit;
int m_visibility;
AdeptNetMissionParameters();
virtual void ResetParameters(void);
virtual void SaveParameters(DynamicMemoryStream *stream);
virtual void LoadParameters(MemoryStream *stream);
};
}
using namespace Adept;
namespace NetMissionParameters
{
class TeamParameters
{
public:
int m_maxPlayersOnTeam;
int m_minimumTonnage;
int m_maximumTonnage;
int m_maximumTotalTonnage;
Scalar m_currentTotalTonnage;
int m_skin;
int m_alignment;
DWORD m_allowedMech[2];
DWORD m_allowedBeam[2];
DWORD m_allowedMissile[2];
DWORD m_allowedProjectile[2];
DWORD m_allowedSubsystem[2];
TeamParameters();
void ResetParameters(int index);
void SaveParameters(DynamicMemoryStream *stream);
void LoadParameters(MemoryStream *stream);
};
class MWNetMissionParameters : public AdeptNetMissionParameters
{
public:
int m_joinInProgress;
int m_joinInProgressCutOff;
int m_joinInProgressCutOffTime;
int m_heatOn;
int m_killLimit;
int m_killLimitNumber;
int m_respawnLimit;
int m_respawnLimitNumber;
int m_forceRespawn;
int m_splashOn;
int m_weaponjamOn;
int m_ammobayfireOn;
// MSL 5.05 Advance Mode
int m_advancemodeOn;
// MSL 5.06 Armor Mode
int m_armormodeOn;
int m_splashPercentage;
int m_unlimitedAmmo;
int m_friendlyFirePercentage;
int m_allowZoom;
int m_allow3rdPerson;
int m_allowAutoAim;
int m_allowDeadToChat;
int m_invulnerableDrop;
int m_isNight;
int m_weather;
int m_reportStats;
int m_serverConnection;
int m_serverBandwidth;
int m_radarMode;
int m_onlyStockMech;
int m_minimumTonnage;
int m_maximumTonnage;
int m_gameLength;
int m_serverRecycle;
int m_recycleDelay;
int m_playMissionReview;
int m_ruleType;
int m_deadMechCantSee;
int m_deadMechCantSeeOtherTeam;
int m_allowdecaltransfer;
int m_useMapCycle;
int m_pureMapCycle;
DWORD m_allowedMech[2];
DWORD m_allowedBeam[2];
DWORD m_allowedMissile[2];
DWORD m_allowedProjectile[2];
DWORD m_allowedSubsystem[2];
// there are always 8 teams,
// but sometimes a team won't allow players
int m_teamAllowed;
int m_teamCount;
TeamParameters m_teamParams[8];
int m_maxPlayers;
int m_maxBots;
int m_mapID;
char m_mapName[128];
char m_scenarioName[128];
char m_scenarioPath[128];
char m_serverName[256];
char m_serverIP[256];
char m_serverCPU[256];
char m_scriptName[256];
char m_scenarioText[1024];
__int64 m_mapClientCRC;
MWNetMissionParameters();
void ResetParameters(void);
void SaveParameters(DynamicMemoryStream *stream);
void LoadParameters(MemoryStream *stream);
};
};
using namespace NetMissionParameters;
namespace CBucketManager
{
enum Bucket_Type {
KILL_LINK = 0, // linked to mission scoring system
DEATH_LINK = 1, // linked to mission scoring system
// mods
KILLS = 2,
FRIENDLY_KILLS = 3,
ENEMY_KILLS = 4,
KILLS_BY_TONNAGE = 5,
FRIENDLY_KILLS_BY_TONNAGE = 6,
ENEMY_KILLS_BY_TONNAGE = 7,
DEATHS = 8,
SUICIDES = 9,
DAMAGE_INFLICT = 10,
FRIENDLY_DAMAGE_INFLICT = 11,
ENEMY_DAMAGE_INFLICT = 12,
DAMAGE_RECEIVE = 13,
FRIENDLY_DAMAGE_RECEIVE = 14,
ENEMY_DAMAGE_RECEIVE = 15,
COMPONENT_KILLS = 16,
COMPONENT_DEATHS = 17,
FRIENDLY_COMPONENT_KILLS = 18,
FRIENDLY_COMPONENT_DEATHS = 19,
ENEMY_COMPONENT_KILLS = 20,
ENEMY_COMPONENT_DEATHS = 21,
DFA = 22,
SHOTS_HIT = 23,
SHOTS_FIRED = 24,
HEAD_SHOTS = 25,
ARM_SHOTS = 26,
LEG_SHOTS = 27,
TORSO_SHOTS = 28,
KILLS_PC = 29,
KILLS_AI = 30,
BLANK = 31, // used just to hold values
// these are automatically checked
SHUTDOWN_TIMER = 32,
OBJECTIVE = 33, // mod2 is distance
OBJECTIVE_CONTESTED = 34,
OBJECTIVE_UNCONTESTED = 35,
FLAGS_TAKEN = 36,
FLAGS_DROPPED = 37,
FLAGS_CAPTURED = 38,
FLAG_HOLD_TIME = 39,
TIME = 40,
ALIVE_PLAYERS = 41,
DEAD_PLAYERS = 42,
CUSTOM = 43,
// MSL 5.04 bucket
// MAX_TYPES = 44
ENEMY_TURRET_KILLS = 44,
FRIENDLY_TURRET_KILLS = 45,
ENEMY_BUILDING_KILLS = 46,
FRIENDLY_BUILDING_KILLS = 47,
MAX_TYPES = 48
};
}
using namespace CBucketManager;
namespace MWApplication
{
enum Bandwidth_Type{
c_14_4kbps = 0,
c_28_8kbps,
c_56_6kbps,
c_64_kbps,
c_128_kbps,
c_384_kbps,
c_768_kbps,
c_1500_kbps,
c_10_Mbps,
c_100_Mbps
};
enum Connection_Type{
Modem = 0,
ISDN,
xDSL,
Cable,
LAN
};
}
using namespace MWApplication;
class ReplicatorID
{
public:
ReplicatorID() : connectionID(0), localID(0)
{Check_Pointer(this);}
ReplicatorID(const ReplicatorID& id) : connectionID(id.connectionID), localID(id.localID)
{Check_Pointer(this); Check_Object(&id);}
explicit ReplicatorID(BYTE connection_id) : connectionID(connection_id), localID(0)
{Check_Pointer(this);}
ReplicatorID(BYTE connection_id, WORD local_id) : connectionID(connection_id), localID(local_id)
{Check_Pointer(this);}
public:
static ReplicatorID Null;
bool operator!() const { Check_Object(this); return operator==(Null); }
ReplicatorID& operator=(const ReplicatorID& id)
{
Check_Pointer(this); Check_Object(&id);
connectionID = id.connectionID; localID = id.localID;
return *this;
}
ReplicatorID& operator+=(const ReplicatorID& id)
{
Check_Object(this); Check_Object(&id);
connectionID = static_cast<BYTE>(connectionID + id.connectionID);
localID = static_cast<WORD>(localID + id.localID);
return *this;
}
ReplicatorID& operator+=(WORD span)
{
Check_Object(this); localID = static_cast<WORD>(localID + span); return *this;
}
ReplicatorID& operator++()
{Check_Pointer(this); ++localID; return *this;}
bool operator<(const ReplicatorID& id) const
{
Check_Object(this); Check_Object(&id);
return
(connectionID == id.connectionID) ?
(localID < id.localID) :
(connectionID < id.connectionID);
}
bool operator<=(const ReplicatorID& id) const
{
Check_Object(this); Check_Object(&id);
return
(connectionID == id.connectionID) ?
(localID <= id.localID) :
(connectionID < id.connectionID);
}
bool operator>(const ReplicatorID& id) const
{
Check_Object(this); Check_Object(&id);
return
(connectionID == id.connectionID) ?
(localID > id.localID) :
(connectionID > id.connectionID);
}
bool operator>=(const ReplicatorID& id) const
{
Check_Object(this); Check_Object(&id);
return
(connectionID == id.connectionID) ?
(localID >= id.localID) :
(connectionID > id.connectionID);
}
bool operator==(const ReplicatorID& id) const
{
Check_Object(this); Check_Object(&id);
return (connectionID == id.connectionID && localID == id.localID);
}
bool operator!=(const ReplicatorID& id) const
{
Check_Object(this); Check_Object(&id);
return
(connectionID != id.connectionID || localID != id.localID);
}
BYTE connectionID;
WORD localID;
};
const int End_Of_Stream=-1;
const int Empty_Bit_Buffer=-20;
class MemoryStream
{
public:
MemoryStream(void *stream_start, DWORD stream_size, DWORD initial_offset=0);
virtual ~MemoryStream();
public:
virtual void* GetPointer() const
{Check_Object(this); return currentPosition;}
BYTE* GetStreamStart() const
{Check_Object(this); return streamStart; }
DWORD GetIndex() const
{Check_Object(this); return currentPosition - streamStart;}
DWORD GetSize() const
{Check_Object(this); return streamSize;}
DWORD GetBufferBytesUsed()
{Check_Object(this); return highWaterByte - streamStart;}
DWORD GetBytesUsed() const
{Check_Object(this); return currentPosition - streamStart;}
virtual DWORD GetBytesRemaining() const
{Check_Object(this); return streamSize - GetBytesUsed();}
void AdvanceToDwordBoundary()
{
Check_Pointer(this);
if((int)currentPosition & 0x3)
{
AdvancePointer(4-(int)currentPosition & 0x3);
}
Check_Object(this);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Assignment methods
//
public:
virtual void SetPointer(void *new_pointer)
{
Check_Pointer(this);
currentPosition = (BYTE*)new_pointer;
if (currentPosition > highWaterByte)
highWaterByte = currentPosition;
Check_Object(this);
}
void operator=(void *new_pointer)
{SetPointer(new_pointer);}
virtual void SetPointer(DWORD index)
{
Check_Pointer(this);
currentPosition = streamStart + index;
if (currentPosition > highWaterByte)
highWaterByte = currentPosition;
Check_Object(this);
}
void operator=(DWORD index)
{SetPointer(index);}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Stream methods
//
public:
void Rewind()
{SetPointer((DWORD) 0U);currentBit = Empty_Bit_Buffer;}
virtual bool AllocateBytes(DWORD count)
{return GetBytesRemaining() <= count;}
virtual MemoryStream& AdvancePointer(DWORD count)
{
Check_Object(this);
currentPosition += count;
if (currentPosition > highWaterByte)
highWaterByte = currentPosition;
Verify(currentPosition >= streamStart);
Verify(currentPosition <= streamStart + streamSize);
Check_Object(this);
return *this;
}
MemoryStream& operator+=(DWORD count)
{return AdvancePointer(count);}
virtual MemoryStream& RewindPointer(DWORD count)
{
Check_Object(this);
currentPosition -= count;
if (currentPosition > highWaterByte)
highWaterByte = currentPosition;
Verify(currentPosition >= streamStart);
Verify(currentPosition <= streamStart + streamSize);
Check_Object(this);
return *this;
}
MemoryStream& operator-=(DWORD count)
{return RewindPointer(count);}
virtual MemoryStream& ReadBytes(
void *ptr,
DWORD number_of_bytes
);
virtual MemoryStream& WriteBytes(
const void *ptr,
DWORD number_of_bytes
);
MemoryStream& ReadSwappedBytes(
void *ptr,
DWORD number_of_bytes
);
MemoryStream& WriteSwappedBytes(
const void *ptr,
DWORD number_of_bytes
);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Bit operators
//
// WARNING - DO NOT MIX AND MATCH WITH BYTE METHODS!!!!!
//
private:
int currentBit;
BYTE workingBitBuffer;
MemoryStream& ReadUnsafeBits(void *ptr, DWORD number_of_bits);
public:
int GetCurrentBitCount()
{
Check_Object(this);
int current_bit = GetBytesUsed() * 8;
if (currentBit != Empty_Bit_Buffer)
{
current_bit -= (8-currentBit);
}
return current_bit;
}
MemoryStream& ReadBit(bool &bit_value);
MemoryStream& WriteBit(const bool &bit_value);
MemoryStream& ReadBits(__int64 *ptr, DWORD number_of_bits)
{
Verify(number_of_bits <= 64);
Check_Object(this); Check_Pointer(ptr);
*ptr = 0; return ReadUnsafeBits(ptr, number_of_bits);
}
MemoryStream& ReadBits(int *ptr, DWORD number_of_bits)
{
Verify(number_of_bits <= 32);
Check_Object(this); Check_Pointer(ptr);
*ptr = 0; return ReadUnsafeBits(ptr, number_of_bits);
}
MemoryStream& ReadBits(BYTE *ptr, DWORD number_of_bits)
{
Verify(number_of_bits <= 8);
Check_Object(this); Check_Pointer(ptr);
*ptr = 0; return ReadUnsafeBits(ptr, number_of_bits);
}
MemoryStream& ReadBits(WORD *ptr, DWORD number_of_bits)
{
Verify(number_of_bits <= 16);
Check_Object(this); Check_Pointer(ptr);
*ptr = 0; return ReadUnsafeBits(ptr, number_of_bits);
}
MemoryStream& ReadBits(DWORD *ptr, DWORD number_of_bits)
{
Verify(number_of_bits <= 32);
Check_Object(this); Check_Pointer(ptr);
*ptr = 0; return ReadUnsafeBits(ptr, number_of_bits);
}
MemoryStream& ReadBits(float *ptr, DWORD number_of_bits)
{
Verify(number_of_bits == 32);
Check_Object(this); Check_Pointer(ptr);
*ptr = 0.0; return ReadUnsafeBits(ptr, number_of_bits);
}
MemoryStream& ReadBits(double *ptr, DWORD number_of_bits)
{
Verify(number_of_bits == 64);
Check_Object(this); Check_Pointer(ptr);
*ptr = 0.0; return ReadUnsafeBits(ptr, number_of_bits);
}
MemoryStream& WriteBits(const void *ptr, DWORD number_of_bits);
MemoryStream& ReadBitsToScaledInt(int &number, int min, int max, DWORD number_of_bits);
MemoryStream& WriteScaledIntToBits(const int &number, int min, int max, DWORD number_of_bits);
MemoryStream& ReadBitsToScaledFloat(float &number, float min, float max, DWORD number_of_bits);
MemoryStream& WriteScaledFloatToBits(const float &number, float min, float max, DWORD number_of_bits);
void WriteByteAlign();
void ReadByteAlign();
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Protected data
//
protected:
BYTE
*streamStart,
*currentPosition,
*highWaterByte;
DWORD streamSize;
};
class DynamicMemoryStream:
public MemoryStream
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Construction, destruction, and testing
//
public:
DynamicMemoryStream(DWORD stream_size=0);
DynamicMemoryStream(
void *stream_start,
DWORD stream_size,
DWORD initial_offset=0
);
DynamicMemoryStream(const DynamicMemoryStream& otherStream);
~DynamicMemoryStream();
void TestInstance() const
{
Verify((DWORD)(currentPosition - streamStart) <= streamSize);
Verify(streamSize <= bufferSize);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Accessors
//
public:
DWORD GetBufferSize()
{
Check_Object(this);
return bufferSize;
}
void SetSize(DWORD stream_length)
{
Check_Object(this);
Verify(stream_length <= bufferSize);
streamSize = stream_length;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Stream methods
//
public:
MemoryStream& WriteBytes(
const void *ptr,
DWORD number_of_bytes
);
bool AllocateBytes(DWORD count);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Private data
//
private:
DWORD bufferSize;
bool ownsStream;
};