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

490 lines
10 KiB
C++

#pragma once
#include "MW4.hpp"
#include <Adept\Receiver.hpp>
namespace MechWarrior4
{
class MWCampaign;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// MWCampaign Interface Plug
//
class MWMissionMapPoint:
public Stuff::Plug
{
public:
MWMissionMapPoint(Stuff::MemoryStream *stream) :
Plug(Plug::DefaultData)
{
Check_Pointer(stream);
*stream >> m_pointType;
*stream >> m_xLoc;
*stream >> m_yLoc;
*stream >> m_width;
*stream >> m_height;
*stream >> m_textID;
*stream >> m_rolltextID;
*stream >> m_rclicktextID;
if(m_pointType >= InfoPointType)
*stream >> m_iconName;
}
~MWMissionMapPoint() {}
static void
ConstructMissionMapPointStream(Stuff::Page *page, Stuff::MemoryStream *stream);
public:
enum{
DropPointType = 0,
NavPointType,
InfoPointType,
GeneralInfoPointType
};
int
m_pointType,
m_xLoc,
m_yLoc,
m_width,
m_height,
m_textID,
m_rolltextID,
m_rclicktextID;
Stuff::MString
m_iconName;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// MWCampaign Interface Plug
//
class MWCampaignInterfacePlug:
public Stuff::Plug
{
public:
MWCampaignInterfacePlug(Stuff::MemoryStream *stream);
~MWCampaignInterfacePlug();
static void
ConstructCampaignInterfaceStream(Stuff::MemoryStream *stream, Stuff::Page *page);
int
GetXLocation()
{Check_Object(this); return m_xLoc;}
int
GetYLocation()
{Check_Object(this); return m_yLoc;}
int
GetHeight()
{Check_Object(this); return m_height;}
int
GetWidth()
{Check_Object(this); return m_width;}
int
GetID()
{Check_Object(this); return m_ID;}
int
GetRollOverID()
{Check_Object(this); return m_rollOverID;}
int
GetRightClickID()
{Check_Object(this); return m_rightClickID;}
Stuff::MString
GetIconName()
{Check_Object(this); return m_iconName;}
Stuff::MString
GetMapTextureName()
{Check_Object(this); return m_mapTextureName;}
public:
Stuff::ChainOf<MWMissionMapPoint *>
m_navPoints;
Stuff::ChainOf<MWMissionMapPoint *>
m_dropPoints;
Stuff::ChainOf<MWMissionMapPoint *>
m_infoPoints;
Stuff::ChainOf<MWMissionMapPoint *>
m_generalInfoPoints;
private:
int
m_xLoc,
m_yLoc,
m_height,
m_width,
m_ID,
m_rollOverID,
m_rightClickID;
Stuff::MString
m_iconName,
m_mapTextureName;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Campaign Mission Plug
//
class CampaignMissionPlug:
public Stuff::Plug
{
public:
CampaignMissionPlug(const char *mission_name);
~CampaignMissionPlug();
void
SetTriggerMission(CampaignMissionPlug *mission_plug, int percent);
void
AddDisplayDependancy(CampaignMissionPlug *mission_plug);
void
RemoveDisplayDependancy(CampaignMissionPlug *mission_plug);
void
WriteToText(Stuff::Page *page);
void
SetStatus(int new_status)
{Check_Object(this); m_status = new_status;}
void
SetType(int new_type)
{Check_Object(this); m_type = new_type;}
void
SetDisplayNameIndex(int index)
{Check_Object(this); m_displayNameIndex = index;}
void
SetOpNumber(int op_number)
{Check_Object(this); m_opNumber = op_number;}
void
SetNumLancemates (int num)
{Check_Object(this); m_NumLancemates = num;}
void
SetInterfacePlugID(Adept::ResourceID resource_id)
{Check_Object(this); m_interfacePlugID = resource_id;}
void
SetAdvanceToOperation(int new_op)
{Check_Object(this); m_advacnceToOperation = new_op;}
MString
m_missionName;
CampaignMissionPlug
*m_triggerMission;
int
m_status;
int
m_triggerPercentage;
int
m_type;
Stuff::ChainOf<CampaignMissionPlug *>
m_missionsNeededToDisplay;
Adept::ResourceID
m_interfacePlugID;
int
m_displayNameIndex;
int
m_opNumber;
int
m_NumLancemates;
int
m_advacnceToOperation;
int
m_doesEnd;
int
m_canChangeTime;
Stuff::MString
m_finalMovieName;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Operation Plug
//
class OperationPlug:
public Stuff::Plug
{
public:
OperationPlug(Stuff::MemoryStream *stream) :
Plug(Plug::DefaultData),
m_missions(NULL)
{
Check_Pointer(stream);
m_id = -1;
*stream >> m_nameIndex;
*stream >> m_mapTextureName;
}
~OperationPlug() {}
static void
ConstructOperationStream(Stuff::Page *page, Stuff::MemoryStream *stream);
void
SaveToStream(Stuff::MemoryStream *stream);
int
GetID()
{Check_Object(this); return m_id;}
int
GetNameIndex()
{Check_Object(this); return m_nameIndex;}
Stuff::MString
GetMapTextureName()
{Check_Object(this); return m_mapTextureName;}
void
SetID(int new_id)
{Check_Object(this); m_id = new_id;}
Stuff::ChainOf<CampaignMissionPlug *>
m_missions;
private:
int
m_id;
int
m_nameIndex;
Stuff::MString
m_mapTextureName;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Movie Plug
//
class MoviePlug :
public Stuff::Plug
{
public:
MoviePlug(Stuff::MemoryStream *stream) :
Plug(Plug::DefaultData)
{
Check_Pointer(stream);
*stream >> m_movieName;
*stream >> m_type;
*stream >> m_delay;
*stream >> m_hasPlayed;
*stream >> m_triggerName;
m_playedThisSelection = false;
}
static void
ConstructMoviePlugStream(Stuff::Page *page, Stuff::MemoryStream *stream);
void
SaveToStream(Stuff::MemoryStream *stream);
public:
enum{
MissionSuccessType = 0,
MissionSelectionType,
LancemateDeathType,
LancemateReturnType
};
static int
MovieTypeStringToAscii(const char *type_string);
Stuff::MString
GetMovieName()
{Check_Object(this); return m_movieName;}
int
GetMovieType()
{Check_Object(this); return m_type;}
int
GetMovieDelay()
{Check_Object(this); return m_delay;}
bool
HasPlayed()
{Check_Object(this); return m_hasPlayed;}
Stuff::MString
GetTriggerName()
{Check_Object(this); return m_triggerName;}
//This is used only for movies played on selecting the mission region
bool
m_playedThisSelection;
private:
Stuff::MString
m_movieName;
int
m_type;
int
m_delay;
bool
m_hasPlayed;
Stuff::MString
m_triggerName;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Movie Manager
//
class MWMovieManager
{
public:
MWMovieManager();
~MWMovieManager();
public:
void
ExecuteMissionSuccess(const char *mission_name);
void
ExecuteMissionSelection(const char *mission_name);
void
ExecuteLancemateDeath(const char *lance_name);
void
ExecuteLancemateReturn(const char *lance_name);
void
AddMoviePlug(MoviePlug *new_movie);
void
SaveToStream(Stuff::MemoryStream *stream);
void
StartMovie(MoviePlug *movie_plug);
void
Execute();
SortedChainOf<MoviePlug *, Stuff::Time>
m_delayedMovies;
Stuff::ChainOf<MoviePlug *>
m_successMovies;
Stuff::ChainOf<MoviePlug *>
m_selectionMovies;
Stuff::ChainOf<MoviePlug *>
m_lancemateDeathMovies;
Stuff::ChainOf<MoviePlug *>
m_lancemateReturnMovies;
};
typedef Receiver__ClassData Campaign__ClassData;
typedef Receiver__Message Campaign__Message;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Internal Damage Object class
//
class MWCampaign:
public Adept::Receiver
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Inheritance Support
//
public:
typedef Campaign__ClassData ClassData;
typedef Campaign__Message Message;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Construction, Destruction, Testing
//
public:
static void
InitializeClass();
static void
TerminateClass();
static HGOSHEAP
s_Heap;
static void
ConstructCampaignStream(
Stuff::MemoryStream *stream,
NotationFile *notation_file
);
static MWCampaign*
MakeNewCampaign(const char *campaign_name);
static MWCampaign*
MakeNewCampaign(const ResourceID& campaign_id);
void
Save(MemoryStream *stream);
void
WriteToText(const char *file_name);
MWCampaign(Stuff::MemoryStream *stream);
~MWCampaign();
void
TestInstance();
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class Data support
//
public:
static ClassData
*DefaultData;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Execution Support
//
public:
enum{
Hidden = 0,
Displayed,
Completed
};
enum{
NormalMissionType = 0,
DefendMissionType,
RescueMissionType
};
static int
StatusTextToAscii(const char *status_string);
static const char *
StatusAsciiToText(int status);
static int
MissionTypeTextToAscii(const char *type_string);
static const char *
MissionTypeAsciiToText(int type);
void
MissionSuccess();
const char*
GetNextMission();
CampaignMissionPlug*
GetNextMissionPlug();
CampaignMissionPlug*
FindMission(MString mission_name);
CampaignMissionPlug*
FindMission(int display_index);
void
TransferToNextOp();
int
GetOPMissionCount();
Stuff::ChainOf<CampaignMissionPlug*>
m_missions;
Stuff::SortedChainOf<OperationPlug *, int>
m_operations;
Stuff::ChainIteratorOf<CampaignMissionPlug*>
*m_missionsIterator;
CampaignMissionPlug*
m_currentMissionPlug;
CampaignMissionPlug*
m_lastMissionPlug;
MWMovieManager
*m_movieManager;
Stuff::MString
m_finalMovieName;
static MWCampaign
*Instance;
static MWCampaign
*TrainingInstance;
static MWCampaign
*MasterTrialsInstance;
static MWCampaign
*WaveInstance;
int
m_currentOp;
bool
m_hasRescuedHostage;
};
}