Files
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

361 lines
7.6 KiB
C++

#pragma once
#include "MW4Headers.hpp"
#include "MechLabHeaders.h"
#include "ShellScriptHeaders.hpp"
#include "ScriptErrorHeader.hpp"
namespace ElementRenderer
{
class CameraElement;
class GroupElement;
}
namespace MechWarrior4
{
class Mech;
class Weapon;
}
class SubsystemResource :
public Plug
{
public:
SubsystemResource(const Adept::ResourceID& data_list, const Adept::ResourceID& model_id, int type) :
Plug(Plug::DefaultData),
m_dataListID(data_list),
m_modelID(model_id)
{
m_type = type;
m_numberAvailable = 1;
}
~SubsystemResource()
{}
ResourceID
GetDataListID()
{Check_Object(this); return m_dataListID;}
ResourceID
GetGameModelID()
{Check_Object(this); return m_modelID;}
int
GetSubsystemType()
{Check_Object(this); return m_type;}
int
GetNumberAvailable()
{Check_Object(this); return m_numberAvailable;}
void
AddNumberAvailable()
{Check_Object(this); m_numberAvailable ++;}
void
RemoveNumberAvailable()
{Check_Object(this); if(m_numberAvailable != -1) m_numberAvailable --;}
void
SetUnlimited()
{Check_Object(this); m_numberAvailable = -1;}
protected:
Adept::ResourceID
m_dataListID;
Adept::ResourceID
m_modelID;
int
m_type;
int
m_numberAvailable;
};
class MechLab
{
public:
MechLab();
~MechLab();
Mech *m_workingMech; // jcem - for mech
Entity* m_workingEntity; // jcem - for cameraship...
Stuff::MString
m_workingMechName;
ResourceID
*m_mechIDs;
ResourceID
*m_chassisIDs;
static ElementRenderer::CameraElement
*s_MechCamera;
ElementRenderer::GroupElement
*m_sceneRoot;
Stuff::SortedChainOf<SubsystemResource *, int>
m_subsystemsAvailable;
enum{
ChassisTabMode = 0,
WeaponsTabMode,
ArmorTabMode
};
enum{
MissileWeapons = 0,
ProjectileWeapons,
BeamWeapons,
AllWeapons
};
int
m_mode;
Stuff::SlotOf<Adept::ResourceFile *>
m_mechResourceFile;
static MechLab
*Instance;
static void _stdcall
UpdateDisplay();
void
Execute();
virtual int
Exit();
virtual void
StartUp();
void FreeReplicators();
void
ShutDown();
virtual void
ReInitialize() {}
virtual void
InitializeSubsystemsAvailable();
SubsystemResource*
AddAvailableSubsystem(const Adept::ResourceID& data_list, const Adept::ResourceID& model_id, int type);
SubsystemResource*
AddAvailableSubsystem(Subsystem *subsystem);
bool
DoesHaveAvailableSubsystem(int type);
void
RemoveAvailableSubsystem(int type);
int
SetMech(int mech_id, const char *mech_name, const char *path);
int SetMech(ResourceID mech_resource_id, const char *mech_name, const char *path); // jcem
int
SetMech(Adept::ResourceID mech_id);
virtual int
CreateNewMech(void *data[], int count, const char *path);
virtual int
SaveMech();
virtual int
SelectMech(void *data[], int count, const char *path);
virtual void
SetUpWorkingMech(Entity *entity);
void
MakeInteresting(Entity *entity);
void
MakeMoverInteresting(MWMover *mover);
void
MakeUnInteresting(Entity *entity);
void
MakeMoverUnInteresting(MWMover *mover);
int
GetDummyData(void *data[], int count);
int
DeleteMech();
virtual int
Restore();
virtual int
Rename(void *data[], int count, const char *path=NULL);
//Functions to return Mech part subsystems
int
GetLeftArmWeapons(void *data[], int count);
int
GetRightArmWeapons(void *data[], int count);
int
GetLeftLegWeapons(void *data[], int count);
int
GetRightLegWeapons(void *data[], int count);
int
GetRightTorsoWeapons(void *data[], int count);
int
GetLeftTorsoWeapons(void *data[], int count);
int
GetCenterTorsoWeapons(void *data[], int count);
int
GetHeadWeapons(void *data[], int count);
int
GetSpecial1Weapons(void *data[], int count);
int
GetSpecial2Weapons(void *data[], int count);
int
FillPartWeaponData(int part_id, void *data[]);
//Get the mech stuff
virtual int
GetMechs(void *data[], int count);
virtual int
GetChassis(void *data[], int count);
virtual int
GetChassisCount();
virtual int
GetMechCount();
//Get the weapon lists
int
GetAllWeapons(void *data[], int count);
int
GetBeamWeapons(void *data[], int count);
int
GetProjectileWeapons(void *data[], int count);
int
GetMissileWeapons(void *data[], int count);
int
FillWeaponListData(int weapon_list, void *data[]);
//Get General Mech Data
int
GetCurrentMechData(void *data[], int count);
int
GetCurrentMechNoEditData(void *data[], int count);
//Armor support
int
GetCurrentMechArmorData(void *data[], int count);
int
SetArmorType(void *data[], int count);
int
AddArmorZoneValue(void *data[], int count);
int
RemoveArmorZoneValue(void *data[], int count);
int
SetArmorValue(void *data[], int count);
int
DistributeAllArmor();
//Init the 3 tabs
int
InitChassisTab(void *data[], int count);
int
InitWeaponsTab(void *data[], int count);
int
InitArmorTab(void *data[], int count);
//The add stuff
int
AddSubsystem(void *data[], int count);
virtual void
AddSubsystemToMech(int *sub_type, int *zone, int *error);
virtual int
AutoAddSubsystem(void *data[], int count);
int
RemoveSubsystem(void *data[], int count);
virtual void
RemoveWeaponFromMech(int *sub_id, int *zone);
virtual void
RemoveSubsystemFromMech(int *sub_type, int *zone);
virtual int
RemoveAllSubsystems();
int
FindInternalLocation(int slot_type, int slots_needed);
//Weapon Groups
int
SetAllWeaponGroups(void *data[], int count);
int
GetWeaponGroups(void *data[], int count);
int
SetWeaponGroup(void *data[], int count);
int
ClearWeaponGroup(void *data[], int count);
Weapon*
FindWeapon(int id);
//Auxillary systems support
int
GetEngineSpeed(void *data[], int count);
int
UpgradeEngine();
int
DegradeEngine();
int
GetHeatSinkCount(void *data[], int count);
int
AddHeatSink();
int
RemoveHeatSink();
int
GetJumpJets(void *data[], int count);
int
SetJumpJets(void *data[], int count);
int
GetECM(void *data[], int count);
int
SetECM(void *data[], int count);
int
GetBeagle(void *data[], int count);
int
SetBeagle(void *data[], int count);
int
GetLightAmp(void *data[], int count);
int
SetLightAmp();
int
GetAMS(void *data[], int count);
int
SetAMS();
int
GetLAMS(void *data[], int count);
int
SetLAMS();
// MSL 5.02 SubSystems
// int
// GetEnhancedOptics(void *data[], int count);
// int
// SetEnhancedOptics();
int
GetIFF_Jammer(void *data[], int count);
int
SetIFF_Jammer();
int
GetAdvancedGyro(void *data[], int count);
int
SetAdvancedGyro();
//Skin Callbacks
int
GetSkinListCount(void *data[], int count);
int
GetSkinList(void *data[], int count);
int
SetMechSkin(void *data[], int count);
//Ammo Callbacks
int
GetWeaponAmmo(void *data[], int count);
int
AddWeaponAmmo(void *data[], int count);
int
RemoveWeaponAmmo(void *data[], int count);
int
GetBaseMechName(void *data[], int count);
//Main Callback for GOS Script
static int _stdcall ML_CallbackHandler(void* instance, int count, void* data[]);
static int _stdcall ML_CallbackHandlerReal(void* instance, int count, void* data[]);
//Variables that need to be registered
int m_mechLabCount;
int m_chassisCount;
int m_isCampaign;
// jcem for MechView
Stuff::SafeChainOf<Replicator*> m_TempReplicators;
public: // jcem
Mech* GetWorkingMech() const;
Entity* GetWorkingEntity() const;
void DestroyWorkingEntity();
};