Initial import of Red Planet v4.10 Win32 source
Imports the current Win32 source for the pod-racing game 'Red Planet', built on the MUNGA engine and its L4 (Win32/DirectX) platform layer: - MUNGA / MUNGA_L4: cross-platform engine core and Win32 backend - RP / RP_L4: Red Planet game logic and Win32 application - DivLoader, Setup1: asset loader and installer project - lib, MUNGA_L4/openal, MUNGA_L4/sos: third-party audio dependencies Removed stale Subversion metadata and added .gitignore/.gitattributes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+324
@@ -0,0 +1,324 @@
|
||||
#if defined(ENTITY_CONTINUATION)
|
||||
|
||||
#include "damage.h"
|
||||
|
||||
//##########################################################################
|
||||
//#################### Entity::SharedData ###########################
|
||||
//##########################################################################
|
||||
|
||||
class Entity__SharedData:
|
||||
public Simulation::SharedData
|
||||
{
|
||||
public:
|
||||
Entity__SharedData(
|
||||
Derivation* derivation,
|
||||
Receiver::MessageHandlerSet &message_handlers,
|
||||
Entity::AttributeIndexSet &attribute_index,
|
||||
int state_count,
|
||||
Entity::MakeHandler make_handler
|
||||
):
|
||||
Simulation::SharedData(
|
||||
derivation,
|
||||
message_handlers,
|
||||
attribute_index,
|
||||
state_count
|
||||
),
|
||||
makeHandler(make_handler)
|
||||
{}
|
||||
|
||||
Entity::MakeHandler makeHandler;
|
||||
};
|
||||
|
||||
inline Entity::SharedData*
|
||||
Entity::GetSharedData()
|
||||
{return Cast_Object(SharedData*,sharedData);}
|
||||
|
||||
//##########################################################################
|
||||
//##################### Entity::MakeMessage ##########################
|
||||
//##########################################################################
|
||||
|
||||
class Entity__MakeMessage:
|
||||
public Entity::Message
|
||||
{
|
||||
public:
|
||||
enum {
|
||||
MapStreamMarkerBit = Entity::Message::NextBit,
|
||||
NextBit
|
||||
};
|
||||
|
||||
enum {
|
||||
MapStreamMarkerFlag = 1 << MapStreamMarkerBit
|
||||
};
|
||||
|
||||
Entity::ClassID
|
||||
classToCreate;
|
||||
EntityID
|
||||
owningPlayerID;
|
||||
ResourceDescription::ResourceID
|
||||
resourceID;
|
||||
LWord
|
||||
instanceFlags;
|
||||
Origin
|
||||
localOrigin;
|
||||
|
||||
Entity__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
|
||||
):
|
||||
Entity::Message(message_ID, length),
|
||||
classToCreate(class_ID),
|
||||
owningPlayerID(owner_ID),
|
||||
resourceID(resource_ID),
|
||||
instanceFlags(instance_flags),
|
||||
localOrigin(origin)
|
||||
{}
|
||||
Entity__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
|
||||
):
|
||||
Entity::Message(message_ID, length, entity_ID),
|
||||
classToCreate(class_ID),
|
||||
owningPlayerID(owner_ID),
|
||||
resourceID(resource_ID),
|
||||
instanceFlags(instance_flags),
|
||||
localOrigin(origin)
|
||||
{}
|
||||
};
|
||||
|
||||
//##########################################################################
|
||||
//#################### Entity::UpdateMessage #########################
|
||||
//##########################################################################
|
||||
|
||||
class Entity__UpdateMessage:
|
||||
public Entity::Message
|
||||
{
|
||||
public:
|
||||
Entity__UpdateMessage(
|
||||
Receiver::MessageID message_ID,
|
||||
size_t length
|
||||
):
|
||||
Entity::Message(message_ID, length)
|
||||
{messageFlags &= ~ReliableFlag;}
|
||||
};
|
||||
|
||||
//##########################################################################
|
||||
//################## Entity::TakeDamageMessage #######################
|
||||
//##########################################################################
|
||||
|
||||
class Entity__TakeDamageMessage:
|
||||
public Entity::Message
|
||||
{
|
||||
public:
|
||||
EntityID
|
||||
inflictingEntity;
|
||||
|
||||
// WARNING:
|
||||
// Since the current collision system cannot resolve the damage zone of
|
||||
// entities with multiple damage zones, specializations of Entity's
|
||||
// TakeDamage message handler are responsible for handling an invalid zone.
|
||||
// Mechs use cylinder lookup table.
|
||||
// For BattleTech, damage zones are only valid via reticle based weapons.
|
||||
// Due to existing RP implementation, damageZone is not an optional
|
||||
// arg to the constructor.
|
||||
|
||||
int
|
||||
damageZone;
|
||||
Logical invalidDamageZone;
|
||||
|
||||
Damage
|
||||
damageData;
|
||||
|
||||
|
||||
// NOTE:
|
||||
// BattleTech's message manager needs to know the subsystemID of the
|
||||
// inflicting weapon in order to bundle explosion resource IDs.
|
||||
|
||||
int inflictingSubsystemID;
|
||||
Logical invalidSubsystem;
|
||||
|
||||
Entity__TakeDamageMessage(
|
||||
Receiver::MessageID message_ID,
|
||||
size_t length,
|
||||
const EntityID &entity_ID,
|
||||
int damage_zone,
|
||||
Damage &damage
|
||||
):
|
||||
Entity::Message(message_ID, length),
|
||||
inflictingEntity(entity_ID),
|
||||
damageZone(damage_zone),
|
||||
damageData(damage),
|
||||
invalidDamageZone(damageZone<0),
|
||||
inflictingSubsystemID(-1),
|
||||
invalidSubsystem(inflictingSubsystemID<0)
|
||||
|
||||
{ }
|
||||
|
||||
Entity__TakeDamageMessage(
|
||||
Receiver::MessageID message_ID,
|
||||
size_t length,
|
||||
const EntityID &entity_ID,
|
||||
int damage_zone,
|
||||
Damage &damage,
|
||||
int inflicting_subsystem_ID
|
||||
):
|
||||
Entity::Message(message_ID, length),
|
||||
inflictingEntity(entity_ID),
|
||||
damageZone(damage_zone),
|
||||
damageData(damage),
|
||||
invalidDamageZone(damageZone<0),
|
||||
inflictingSubsystemID(inflicting_subsystem_ID),
|
||||
invalidSubsystem(inflictingSubsystemID<0)
|
||||
{ }
|
||||
};
|
||||
|
||||
//##########################################################################
|
||||
//############### Entity::TakeDamageStreamMessage #####################
|
||||
//##########################################################################
|
||||
|
||||
class Entity__TakeDamageStreamMessage :
|
||||
public Entity::Message
|
||||
{
|
||||
//
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Holds A Group Of Damage Messages with some Common Fields
|
||||
// used for instantaneous hit weapons
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
//
|
||||
public:
|
||||
Point3D
|
||||
impactPoint;
|
||||
int
|
||||
damageZoneIndex;
|
||||
EntityID
|
||||
shootingEntity;
|
||||
|
||||
Entity__TakeDamageStreamMessage(
|
||||
Entity::MessageID message_ID,
|
||||
size_t message_size,
|
||||
const EntityID &shooting_entity,
|
||||
int damage_zone_index,
|
||||
const Point3D &impact_point
|
||||
):
|
||||
Entity::Message(message_ID, message_size),
|
||||
shootingEntity(shooting_entity),
|
||||
damageZoneIndex(damage_zone_index),
|
||||
impactPoint(impact_point)
|
||||
{}
|
||||
|
||||
~Entity__TakeDamageStreamMessage()
|
||||
{}
|
||||
};
|
||||
|
||||
//##########################################################################
|
||||
//################## Entity::PlayerLinkMessage #######################
|
||||
//##########################################################################
|
||||
|
||||
|
||||
class Entity__PlayerLinkMessage:
|
||||
public Entity::Message
|
||||
{
|
||||
public:
|
||||
EntityID
|
||||
playerID;
|
||||
|
||||
Entity__PlayerLinkMessage(
|
||||
Receiver::MessageID message_ID,
|
||||
size_t length,
|
||||
EntityID player_id
|
||||
):
|
||||
Entity::Message(message_ID, length)
|
||||
{playerID = player_id;}
|
||||
};
|
||||
// Tool support function
|
||||
|
||||
extern int
|
||||
Find_Subsystem_Index(
|
||||
NotationFile *file,
|
||||
const char* name
|
||||
);
|
||||
|
||||
//##########################################################################
|
||||
//################## Entity::PlayerLinkMessage #######################
|
||||
//##########################################################################
|
||||
|
||||
class Entity__DestroyEntityMessage:
|
||||
public Entity::Message
|
||||
{
|
||||
public:
|
||||
Entity__DestroyEntityMessage(
|
||||
Receiver::MessageID message_ID,
|
||||
size_t length
|
||||
):
|
||||
Entity::Message(message_ID, length)
|
||||
{}
|
||||
};
|
||||
|
||||
//##########################################################################
|
||||
//################# Entity::DynamicMessage ###########################
|
||||
//##########################################################################
|
||||
|
||||
class Entity__DynamicMessage :
|
||||
public Receiver::DynamicMessage
|
||||
{
|
||||
public:
|
||||
Entity__DynamicMessage()
|
||||
{ }
|
||||
|
||||
Entity__DynamicMessage(
|
||||
Entity::MessageID message_ID,
|
||||
size_t message_size = sizeof(Entity::Message)
|
||||
) : Receiver::DynamicMessage(message_ID, message_size)
|
||||
{ }
|
||||
|
||||
Entity__DynamicMessage(
|
||||
void *message_ptr,
|
||||
size_t stream_size,
|
||||
size_t initial_offset = sizeof(Entity::Message)
|
||||
) : Receiver::DynamicMessage(message_ptr, stream_size, initial_offset)
|
||||
{ }
|
||||
|
||||
~Entity__DynamicMessage()
|
||||
{ }
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
//##########################################################################
|
||||
//####################### Entity::MakeMapMessage #####################
|
||||
//##########################################################################
|
||||
|
||||
class Entity__MakeMapMessage:
|
||||
public Receiver::Message
|
||||
{
|
||||
public:
|
||||
//
|
||||
// The following fields need to be filled in by the sending manager
|
||||
//
|
||||
|
||||
ResourceDescription::ResourceID
|
||||
resourceID;
|
||||
Origin
|
||||
localOrigin;
|
||||
|
||||
Entity__MakeMapMessage(
|
||||
Receiver::MessageID messageID,
|
||||
size_t length
|
||||
):
|
||||
Receiver::Message(messageID, length)
|
||||
{}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user