Files
firestorm/Gameleap/code/mw4/Code/MW4/AMS.hpp
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

215 lines
4.7 KiB
C++

#pragma once
#include "MW4.hpp"
#include "Subsystem.hpp"
namespace MechWarrior4
{
class Vehicle;
//##########################################################################
//################## AMS::CreateMessage ##############################
//##########################################################################
class AMS__CreateMessage:
public Subsystem__CreateMessage
{
public:
typedef Subsystem__CreateMessage BaseClass;
int
ammoCount;
AMS__CreateMessage(
size_t length,
int priority,
int message_flags,
Stuff::RegisteredClass::ClassID class_id,
int replicator_flags,
const ResourceID& instance_id,
const Stuff::LinearMatrix4D &creation_matrix,
Stuff::Scalar age,
int execution_state,
int name_id,
int entity_alignment,
int subsystem_index,
BYTE location_id,
int critical_hits,
int ammo_count
):
Subsystem__CreateMessage(
length,
priority,
message_flags,
class_id,
replicator_flags,
instance_id,
creation_matrix,
age,
execution_state,
name_id,
entity_alignment,
subsystem_index,
location_id,
critical_hits
),
ammoCount(ammo_count)
{}
static void
ConstructCreateMessage(Script *script);
};
//##########################################################################
//########################### AMS GameModel ###########################
//##########################################################################
class AMS__GameModel:
public Subsystem::GameModel
{
public:
typedef Subsystem::GameModel BaseClass;
Adept::ResourceID
amsEffectResource;
enum {
AMSEffectResourceAttributeID = Subsystem__GameModel::NextAttributeID,
NextAttributeID
};
static bool
ReadAndVerify(
AMS__GameModel *model,
ModelAttributeEntry *attribute_entry,
const char *data,
char **error,
int error_buffer = 128
);
static void
ConstructGameModel(Script *script);
};
typedef Subsystem__ClassData AMS__ClassData;
typedef Subsystem__Message AMS__Message;
typedef Subsystem__ExecutionStateEngine AMS__ExecutionStateEngine;
//##########################################################################
//########################### AMS #####################################
//##########################################################################
class AMS:
public Subsystem
{
public:
static void
InitializeClass();
static void
TerminateClass();
typedef Subsystem BaseClass;
//##########################################################################
// Inheritance support
//
public:
typedef AMS__ClassData ClassData;
typedef AMS__GameModel GameModel;
typedef AMS__Message Message;
typedef AMS__ExecutionStateEngine ExecutionStateEngine;
typedef AMS__CreateMessage CreateMessage;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Run-time Construction and Destruction Support
//
public:
static AMS*
Make(
CreateMessage *message,
ReplicatorID *base_id
);
Adept::Replicator::CreateMessage*
SaveMakeMessage(MemoryStream *stream, Adept::ResourceFile *res_file);
void
SaveInstanceText(Stuff::Page *page);
static void
CreateStream(
Adept::ResourceID data_list,
Stuff::MemoryStream *stream
);
protected:
AMS(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
);
~AMS();
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class Data & Game Model Support
//
public:
const GameModel*
GetGameModel()
{return Cast_Pointer(const GameModel*, gameModelResource.GetPointer());}
public:
static ClassData
*DefaultData;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Simulation Support
//
public:
void
DestroySubsystem();
bool
DoesHaveAmmo()
{
Check_Object(this);
if (ammoCount == -1)
return true;
return ammoCount != 0;
}
int GetAmmo()
{Check_Object(this); return ammoCount;}
void
SetAmmo(int ammo_number)
{Check_Object(this); ammoCount = ammo_number;};
int GetMaxAmmoCount()
{Check_Object(this); return ammoCount;};
void
SubtractAmmo(int count);
int
ammoCount;
int
maxAmmoCount;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Test Support
//
public:
void
TestInstance() const;
};
}