Initial Source Code commit
Initial commit of original Tiberian Dawn and Red Alert source code converted to build as DLLs, and compatible with the release version of Command & Conquer Remastered.
This commit is contained in:
parent
ea8ecc76fa
commit
03416d24e1
1038 changed files with 629779 additions and 0 deletions
924
REDALERT/DLLInterface.h
Normal file
924
REDALERT/DLLInterface.h
Normal file
|
@ -0,0 +1,924 @@
|
|||
//
|
||||
// Copyright 2020 Electronic Arts Inc.
|
||||
//
|
||||
// TiberianDawn.DLL and RedAlert.dll and corresponding source code is free
|
||||
// software: you can redistribute it and/or modify it under the terms of
|
||||
// the GNU General Public License as published by the Free Software Foundation,
|
||||
// either version 3 of the License, or (at your option) any later version.
|
||||
|
||||
// TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed
|
||||
// in the hope that it will be useful, but with permitted additional restrictions
|
||||
// under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
|
||||
// distributed with this program. You should have received a copy of the
|
||||
// GNU General Public License along with permitted additional restrictions
|
||||
// with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef DLL_INTERFACE_H
|
||||
#define DLL_INTERFACE_H
|
||||
|
||||
struct CarryoverObjectStruct;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
** DLL Interface version
|
||||
**
|
||||
**
|
||||
**
|
||||
*/
|
||||
#define CNC_DLL_API_VERSION 0x100
|
||||
|
||||
|
||||
|
||||
|
||||
#define MAX_EXPORT_CELLS (128 * 128)
|
||||
|
||||
#ifdef TIBERIAN_DAWN
|
||||
#define MAP_MAX_CELL_WIDTH 64
|
||||
#define MAP_MAX_CELL_HEIGHT 64
|
||||
#else
|
||||
#define MAP_MAX_CELL_WIDTH 128
|
||||
#define MAP_MAX_CELL_HEIGHT 128
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
** Interface structs require stricter packing
|
||||
**
|
||||
**
|
||||
*/
|
||||
#pragma pack(push)
|
||||
#pragma pack(1)
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Game state request types
|
||||
**
|
||||
**
|
||||
*/
|
||||
enum GameStateRequestEnum {
|
||||
GAME_STATE_NONE,
|
||||
GAME_STATE_STATIC_MAP,
|
||||
GAME_STATE_DYNAMIC_MAP,
|
||||
GAME_STATE_LAYERS,
|
||||
GAME_STATE_SIDEBAR,
|
||||
GAME_STATE_PLACEMENT,
|
||||
GAME_STATE_SHROUD,
|
||||
GAME_STATE_OCCUPIER,
|
||||
GAME_STATE_PLAYER_INFO
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Static map data (tiles)
|
||||
**
|
||||
**
|
||||
*/
|
||||
struct CNCStaticCellStruct {
|
||||
char TemplateTypeName[32];
|
||||
int IconNumber;
|
||||
};
|
||||
|
||||
|
||||
|
||||
enum CnCTheaterType {
|
||||
CNC_THEATER_NONE=-1,
|
||||
CNC_THEATER_DESERT,
|
||||
CNC_THEATER_JUNGLE,
|
||||
CNC_THEATER_TEMPERATE,
|
||||
CNC_THEATER_WINTER,
|
||||
|
||||
CNC_THEATER_COUNT,
|
||||
CNC_THEATER_FIRST=0
|
||||
};
|
||||
|
||||
|
||||
struct CNCMapDataStruct {
|
||||
int MapCellX;
|
||||
int MapCellY;
|
||||
int MapCellWidth;
|
||||
int MapCellHeight;
|
||||
int OriginalMapCellX;
|
||||
int OriginalMapCellY;
|
||||
int OriginalMapCellWidth;
|
||||
int OriginalMapCellHeight;
|
||||
|
||||
CnCTheaterType Theater;
|
||||
char ScenarioName[_MAX_FNAME+_MAX_EXT];
|
||||
|
||||
CNCStaticCellStruct StaticCells[MAX_EXPORT_CELLS];
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Object type enum
|
||||
**
|
||||
**
|
||||
*/
|
||||
#define DLL_LAYER_COUNT 4
|
||||
|
||||
enum DllObjectTypeEnum {
|
||||
UNKNOWN,
|
||||
INFANTRY,
|
||||
UNIT,
|
||||
AIRCRAFT,
|
||||
BUILDING,
|
||||
TERRAIN,
|
||||
ANIM,
|
||||
BULLET,
|
||||
OVERLAY,
|
||||
SMUDGE,
|
||||
OBJECT,
|
||||
SPECIAL,
|
||||
INFANTRY_TYPE,
|
||||
UNIT_TYPE,
|
||||
AIRCRAFT_TYPE,
|
||||
BUILDING_TYPE,
|
||||
VESSEL,
|
||||
VESSEL_TYPE
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Object action types
|
||||
**
|
||||
**
|
||||
*/
|
||||
enum DllActionTypeEnum : unsigned char {
|
||||
DAT_NONE,
|
||||
DAT_MOVE,
|
||||
DAT_NOMOVE,
|
||||
DAT_ENTER,
|
||||
DAT_SELF,
|
||||
DAT_ATTACK,
|
||||
DAT_ATTACK_OUT_OF_RANGE,
|
||||
DAT_GUARD,
|
||||
DAT_SELECT,
|
||||
DAT_CAPTURE,
|
||||
DAT_SABOTAGE,
|
||||
DAT_HEAL,
|
||||
DAT_DAMAGE,
|
||||
DAT_TOGGLE_PRIMARY,
|
||||
DAT_CANT_DEPLOY,
|
||||
DAT_REPAIR,
|
||||
DAT_CANT_REPAIR
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Object state data
|
||||
**
|
||||
**
|
||||
*/
|
||||
|
||||
#define MAX_OCCUPY_CELLS 36
|
||||
#define MAX_OBJECT_PIPS 18
|
||||
#define MAX_OBJECT_LINES 3
|
||||
#define MAX_HOUSES 32
|
||||
|
||||
struct CNCObjectLineStruct {
|
||||
int X;
|
||||
int Y;
|
||||
int X1;
|
||||
int Y1;
|
||||
int Frame;
|
||||
unsigned char Color;
|
||||
};
|
||||
|
||||
#define CNC_OBJECT_ASSET_NAME_LENGTH 16
|
||||
struct CNCObjectStruct {
|
||||
void *CNCInternalObjectPointer;
|
||||
char TypeName[CNC_OBJECT_ASSET_NAME_LENGTH];
|
||||
char AssetName[CNC_OBJECT_ASSET_NAME_LENGTH]; // CNC uses 8.3 filenames, so it shouldn't need to be bigger than 9
|
||||
DllObjectTypeEnum Type;
|
||||
int ID;
|
||||
int BaseObjectID;
|
||||
DllObjectTypeEnum BaseObjectType;
|
||||
int PositionX;
|
||||
int PositionY;
|
||||
int Width;
|
||||
int Height;
|
||||
int Altitude;
|
||||
int SortOrder;
|
||||
int Scale;
|
||||
int DrawFlags;
|
||||
short MaxStrength;
|
||||
short Strength;
|
||||
unsigned short ShapeIndex;
|
||||
unsigned short CellX;
|
||||
unsigned short CellY;
|
||||
unsigned short CenterCoordX;
|
||||
unsigned short CenterCoordY;
|
||||
short SimLeptonX;
|
||||
short SimLeptonY;
|
||||
unsigned char DimensionX;
|
||||
unsigned char DimensionY;
|
||||
unsigned char Rotation;
|
||||
unsigned char MaxSpeed;
|
||||
char Owner;
|
||||
char RemapColor;
|
||||
char SubObject;
|
||||
bool IsSelectable;
|
||||
unsigned int IsSelectedMask;
|
||||
bool IsRepairing;
|
||||
bool IsDumping;
|
||||
bool IsTheaterSpecific;
|
||||
unsigned int FlashingFlags;
|
||||
unsigned char Cloak;
|
||||
bool CanRepair;
|
||||
bool CanDemolish;
|
||||
bool CanDemolishUnit;
|
||||
short OccupyList[MAX_OCCUPY_CELLS];
|
||||
int OccupyListLength;
|
||||
int Pips[MAX_OBJECT_PIPS];
|
||||
int NumPips;
|
||||
int MaxPips;
|
||||
CNCObjectLineStruct Lines[MAX_OBJECT_LINES];
|
||||
int NumLines;
|
||||
bool RecentlyCreated;
|
||||
bool IsALoaner;
|
||||
bool IsFactory;
|
||||
bool IsPrimaryFactory;
|
||||
bool IsDeployable;
|
||||
bool IsAntiGround;
|
||||
bool IsAntiAircraft;
|
||||
bool IsSubSurface;
|
||||
bool IsNominal;
|
||||
bool IsDog;
|
||||
bool IsIronCurtain;
|
||||
bool IsInFormation;
|
||||
bool CanMove[MAX_HOUSES];
|
||||
bool CanFire[MAX_HOUSES];
|
||||
bool CanDeploy;
|
||||
bool CanHarvest;
|
||||
bool CanPlaceBombs;
|
||||
bool IsFixedWingedAircraft;
|
||||
bool IsFake;
|
||||
unsigned char ControlGroup;
|
||||
unsigned int VisibleFlags;
|
||||
unsigned int SpiedByFlags;
|
||||
char ProductionAssetName[CNC_OBJECT_ASSET_NAME_LENGTH];
|
||||
const char* OverrideDisplayName;
|
||||
DllActionTypeEnum ActionWithSelected[MAX_HOUSES];
|
||||
|
||||
static const unsigned int VISIBLE_FLAGS_ALL = 0xffffffff;
|
||||
};
|
||||
|
||||
struct CNCObjectListStruct {
|
||||
int Count;
|
||||
CNCObjectStruct Objects[1]; // Variable length
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Placement validity data
|
||||
**
|
||||
** Used to pass back info about tructure placement validity
|
||||
*/
|
||||
struct CNCPlacementCellInfoStruct {
|
||||
bool PassesProximityCheck; // If the structure was placed in this cell, does that satisfy the proximity check for the whole structure?
|
||||
bool GenerallyClear; // Is this cell generally clear of obstructions that would prevent placement?
|
||||
};
|
||||
|
||||
struct CNCPlacementInfoStruct {
|
||||
int Count;
|
||||
CNCPlacementCellInfoStruct CellInfo[1]; // Variable length
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Sidebar/construction state data
|
||||
**
|
||||
**
|
||||
*/
|
||||
enum DllSuperweaponTypeEnum {
|
||||
SW_NONE,
|
||||
SW_UNKNOWN,
|
||||
|
||||
//TD values
|
||||
SW_NUKE,
|
||||
SW_AIR_STRIKE,
|
||||
SW_ION_CANNON,
|
||||
|
||||
//RA values
|
||||
SW_SONAR_PULSE,
|
||||
SW_CHRONOSPHERE,
|
||||
SW_PARA_BOMB,
|
||||
SW_PARA_INFANTRY,
|
||||
SW_SPY_MISSION,
|
||||
SW_IRON_CURTAIN,
|
||||
SW_GPS,
|
||||
SW_CHRONOSPHERE_DESTINATION
|
||||
};
|
||||
|
||||
struct CNCSidebarEntryStruct {
|
||||
char AssetName[16]; // CNC uses 8.3 filenames, so it shouldn't need to be bigger than 9
|
||||
int BuildableType; // This is the original buildable type that should be passed back if we want to start/cancel construction
|
||||
int BuildableID; // This is the original buildable id that should be passed back if we want to start/cancel construction
|
||||
DllObjectTypeEnum Type; // Type converted to shared enum
|
||||
DllSuperweaponTypeEnum SuperWeaponType;
|
||||
int Cost; // Cost to construct
|
||||
int PowerProvided; // Power cost to construct
|
||||
int BuildTime; // Cost to construct
|
||||
float Progress; // Construction progress (0.0 - 1.0)
|
||||
short PlacementList[MAX_OCCUPY_CELLS]; // Which cells this structure occupies for placement (if structure)
|
||||
int PlacementListLength; // How many cells
|
||||
bool Completed; // Construction has completed
|
||||
bool Constructing; // Is it currently constructing
|
||||
bool ConstructionOnHold; // Is the current construction on hold
|
||||
bool Busy; // Is the associated factory busy
|
||||
bool BuildableViaCapture; // Is this buildable due to the capture of a structure of a different faction. This will be false for captured structures of the same faction (ActLike)
|
||||
bool Fake; // Is this a fake structure?
|
||||
};
|
||||
|
||||
|
||||
struct CNCSidebarStruct {
|
||||
int EntryCount[2]; // Counts for the left and right columns
|
||||
int Credits; // Amount of currency available (excluding Tiberium)
|
||||
int CreditsCounter; // Visible credits to display in the sidebar (includes count up/down logic)
|
||||
int Tiberium; // Amount of Tiberium in reserve
|
||||
int MaxTiberium; // Maximum amount of Tiberium storage available
|
||||
int PowerProduced;
|
||||
int PowerDrained;
|
||||
int MissionTimer;
|
||||
unsigned int UnitsKilled; // Total count of enemy units killed by this player; Includes Infantry, Vehicles, Aircraft
|
||||
unsigned int BuildingsKilled; // Total count of enemy structures killed by this player
|
||||
unsigned int UnitsLost; // Total count player-owned units killed/lost
|
||||
unsigned int BuildingsLost; // Total count player-owned structures killed/lost
|
||||
unsigned int TotalHarvestedCredits; // Complete total of gained credits over the match (does not include starting credits)
|
||||
bool RepairBtnEnabled;
|
||||
bool SellBtnEnabled;
|
||||
bool RadarMapActive;
|
||||
|
||||
CNCSidebarEntryStruct Entries[1]; // Variable length column entries
|
||||
};
|
||||
|
||||
|
||||
|
||||
enum SidebarRequestEnum {
|
||||
SIDEBAR_REQUEST_START_CONSTRUCTION,
|
||||
SIDEBAR_REQUEST_HOLD_CONSTRUCTION,
|
||||
SIDEBAR_REQUEST_CANCEL_CONSTRUCTION,
|
||||
SIDEBAR_REQUEST_START_PLACEMENT,
|
||||
SIDEBAR_REQUEST_PLACE,
|
||||
SIDEBAR_CANCEL_PLACE,
|
||||
SIDEBAR_CLICK_REPAIR,
|
||||
SIDEBAR_REQUEST_ENABLE_QUEUE,
|
||||
SIDEBAR_REQUEST_DISABLE_QUEUE,
|
||||
SIDEBAR_REQUEST_START_CONSTRUCTION_MULTI,
|
||||
SIDEBAR_REQUEST_CANCEL_CONSTRUCTION_MULTI
|
||||
};
|
||||
|
||||
enum SuperWeaponRequestEnum {
|
||||
SUPERWEAPON_REQUEST_PLACE_SUPER_WEAPON
|
||||
};
|
||||
enum ControlGroupRequestEnum {
|
||||
CONTROL_GROUP_REQUEST_CREATE,
|
||||
CONTROL_GROUP_REQUEST_TOGGLE,
|
||||
CONTROL_GROUP_REQUEST_ADDITIVE_SELECTION,
|
||||
};
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Input events sent into the DLL
|
||||
**
|
||||
**
|
||||
*/
|
||||
enum InputRequestEnum {
|
||||
INPUT_REQUEST_NONE,
|
||||
INPUT_REQUEST_MOUSE_MOVE,
|
||||
INPUT_REQUEST_MOUSE_LEFT_CLICK,
|
||||
INPUT_REQUEST_MOUSE_RIGHT_DOWN,
|
||||
INPUT_REQUEST_MOUSE_RIGHT_CLICK,
|
||||
INPUT_REQUEST_MOUSE_AREA,
|
||||
INPUT_REQUEST_MOUSE_AREA_ADDITIVE,
|
||||
INPUT_REQUEST_SELL_AT_POSITION,
|
||||
INPUT_REQUEST_SELECT_AT_POSITION,
|
||||
INPUT_REQUEST_COMMAND_AT_POSITION,
|
||||
INPUT_REQUEST_SPECIAL_KEYS
|
||||
};
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Structure Requests Repair, Sell
|
||||
**
|
||||
**
|
||||
*/
|
||||
enum StructureRequestEnum {
|
||||
INPUT_STRUCTURE_NONE,
|
||||
INPUT_STRUCTURE_REPAIR_START,
|
||||
INPUT_STRUCTURE_REPAIR,
|
||||
INPUT_STRUCTURE_SELL_START,
|
||||
INPUT_STRUCTURE_SELL,
|
||||
INPUT_STRUCTURE_CANCEL,
|
||||
};
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Unit Requests Scatter, Select Next, Select Previous, Guard Mode, Stop
|
||||
**
|
||||
**
|
||||
*/
|
||||
enum UnitRequestEnum {
|
||||
INPUT_UNIT_NONE,
|
||||
INPUT_UNIT_SCATTER,
|
||||
INPUT_UNIT_SELECT_NEXT,
|
||||
INPUT_UNIT_SELECT_PREVIOUS,
|
||||
INPUT_UNIT_GUARD_MODE,
|
||||
INPUT_UNIT_STOP,
|
||||
INPUT_UNIT_FORMATION_TOGGLE, // RA Only
|
||||
INPUT_UNIT_QUEUED_MOVEMENT_ON, // RA Only
|
||||
INPUT_UNIT_QUEUED_MOVEMENT_OFF, // RA Only
|
||||
};
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Game Action Requests
|
||||
**
|
||||
**
|
||||
*/
|
||||
enum GameRequestEnum {
|
||||
INPUT_GAME_MOVIE_DONE,
|
||||
INPUT_GAME_LOADING_DONE,
|
||||
};
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Special Keys
|
||||
**
|
||||
**
|
||||
*/
|
||||
enum SpecialKeyRequestEnum {
|
||||
INPUT_SPECIAL_KEY_CTRL = 0b00000001,
|
||||
INPUT_SPECIAL_KEY_ALT = 0b00000010,
|
||||
INPUT_SPECIAL_KEY_SHIFT = 0b00000100,
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Non-static map data.
|
||||
**
|
||||
** Per-cell smudges and overlays. Smudges are used for things like craters and structure bibs that draw under units.
|
||||
** Overlays are things like walls and tiberium that can't move from the cell but aren't flat like smudges.
|
||||
**
|
||||
**
|
||||
*/
|
||||
struct CNCDynamicMapEntryStruct {
|
||||
char AssetName[16];
|
||||
int PositionX;
|
||||
int PositionY;
|
||||
int Width;
|
||||
int Height;
|
||||
short Type;
|
||||
char Owner;
|
||||
int DrawFlags;
|
||||
unsigned char CellX;
|
||||
unsigned char CellY;
|
||||
unsigned char ShapeIndex;
|
||||
bool IsSmudge;
|
||||
bool IsOverlay;
|
||||
bool IsResource;
|
||||
bool IsSellable;
|
||||
bool IsTheaterShape;
|
||||
bool IsFlag;
|
||||
};
|
||||
|
||||
struct CNCDynamicMapStruct {
|
||||
bool VortexActive;
|
||||
int VortexX;
|
||||
int VortexY;
|
||||
int VortexWidth;
|
||||
int VortexHeight;
|
||||
int Count;
|
||||
CNCDynamicMapEntryStruct Entries[1]; // Variable length
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Event data
|
||||
**
|
||||
** Used to call back into the GlyphX engine for one-time events like sound effect triggers
|
||||
**
|
||||
**
|
||||
*/
|
||||
enum EventCallbackType {
|
||||
CALLBACK_EVENT_INVALID = -1,
|
||||
CALLBACK_EVENT_SOUND_EFFECT = 0,
|
||||
CALLBACK_EVENT_SPEECH,
|
||||
CALLBACK_EVENT_GAME_OVER,
|
||||
CALLBACK_EVENT_DEBUG_PRINT,
|
||||
CALLBACK_EVENT_MOVIE,
|
||||
CALLBACK_EVENT_MESSAGE,
|
||||
CALLBACK_EVENT_UPDATE_MAP_CELL,
|
||||
CALLBACK_EVENT_ACHIEVEMENT,
|
||||
CALLBACK_EVENT_STORE_CARRYOVER_OBJECTS,
|
||||
CALLBACK_EVENT_SPECIAL_WEAPON_TARGETTING,
|
||||
CALLBACK_EVENT_BRIEFING_SCREEN,
|
||||
CALLBACK_EVENT_CENTER_CAMERA,
|
||||
CALLBACK_EVENT_PING
|
||||
};
|
||||
|
||||
|
||||
struct GameOverMultiPlayerStatsStruct
|
||||
{
|
||||
GameOverMultiPlayerStatsStruct()
|
||||
:
|
||||
GlyphXPlayerID( 0 ),
|
||||
IsHuman( false ),
|
||||
WasHuman( false ),
|
||||
IsWinner( false ),
|
||||
ResourcesGathered( 0 ),
|
||||
TotalUnitsKilled( 0 ),
|
||||
TotalStructuresKilled( 0 ),
|
||||
Efficiency( 0 ),
|
||||
Score( 0 )
|
||||
{
|
||||
}
|
||||
__int64 GlyphXPlayerID;
|
||||
bool IsHuman;
|
||||
bool WasHuman;
|
||||
bool IsWinner;
|
||||
int ResourcesGathered;
|
||||
int TotalUnitsKilled;
|
||||
int TotalStructuresKilled;
|
||||
int Efficiency; // AKA Economy
|
||||
int Score;
|
||||
};
|
||||
|
||||
#define GAME_OVER_MULTIPLAYER_MAX_PLAYERS_TRACKED 8
|
||||
|
||||
|
||||
enum EventCallbackMessageEnum {
|
||||
MESSAGE_TYPE_DIRECT = 0,
|
||||
MESSAGE_TYPE_PLAYER_DEFEATED,
|
||||
MESSAGE_TYPE_COMPUTER_TAUNT,
|
||||
MESSAGE_TYPE_PLAYER_DISCONNECTED
|
||||
};
|
||||
|
||||
struct EventCallbackStruct {
|
||||
|
||||
EventCallbackStruct::EventCallbackStruct(void) : EventType(CALLBACK_EVENT_INVALID), GlyphXPlayerID(0) { }
|
||||
|
||||
EventCallbackType EventType;
|
||||
|
||||
__int64 GlyphXPlayerID;
|
||||
|
||||
union {
|
||||
|
||||
struct SoundEffectEvent {
|
||||
int SFXIndex;
|
||||
int Variation;
|
||||
int PixelX;
|
||||
int PixelY;
|
||||
int PlayerID; //TO_FIX
|
||||
char SoundEffectName[ 16 ];
|
||||
int SoundEffectPriority;
|
||||
int SoundEffectContext;
|
||||
} SoundEffect;
|
||||
|
||||
struct SpeechEvent {
|
||||
int SpeechIndex;
|
||||
int PlayerID; //TO_FIX
|
||||
char SpeechName[ 16 ];
|
||||
} Speech;
|
||||
|
||||
struct GameOverEvent {
|
||||
bool Multiplayer;
|
||||
//
|
||||
// Single-player data
|
||||
//
|
||||
bool PlayerWins; //This should specify player id
|
||||
const char* MovieName;
|
||||
const char* MovieName2;
|
||||
const char* MovieName3;
|
||||
const char* MovieName4;
|
||||
const char* AfterScoreMovieName;
|
||||
int Score;
|
||||
int Leadership;
|
||||
int Efficiency;
|
||||
int CategoryTotal;
|
||||
int NODKilled;
|
||||
int GDIKilled;
|
||||
int CiviliansKilled;
|
||||
int NODBuildingsDestroyed;
|
||||
int GDIBuildingsDestroyed;
|
||||
int CiviliansBuildingsDestroyed;
|
||||
int RemainingCredits;
|
||||
int SabotagedStructureType;
|
||||
int TimerRemaining;
|
||||
//
|
||||
// Multi-player data
|
||||
//
|
||||
int MultiPlayerTotalPlayers;
|
||||
GameOverMultiPlayerStatsStruct MultiPlayerPlayersData[ GAME_OVER_MULTIPLAYER_MAX_PLAYERS_TRACKED ];
|
||||
} GameOver;
|
||||
|
||||
struct DebugPrintEvent {
|
||||
const char *PrintString;
|
||||
} DebugPrint;
|
||||
|
||||
struct MovieEvent {
|
||||
const char* MovieName;
|
||||
int Theme;
|
||||
bool Immediate;
|
||||
} Movie;
|
||||
|
||||
struct MessageEvent {
|
||||
const char* Message;
|
||||
float TimeoutSeconds;
|
||||
EventCallbackMessageEnum MessageType;
|
||||
__int64 MessageParam1;
|
||||
} Message;
|
||||
|
||||
struct UpdateMapCellEvent {
|
||||
int CellX;
|
||||
int CellY;
|
||||
char TemplateTypeName[32];
|
||||
} UpdateMapCell;
|
||||
|
||||
struct AchievementEvent {
|
||||
const char* AchievementType;
|
||||
const char* AchievementReason;
|
||||
} Achievement;
|
||||
|
||||
struct StoreCarryoverObjectsEvent {
|
||||
const CarryoverObjectStruct* CarryoverList;
|
||||
} CarryoverObjects;
|
||||
|
||||
struct SpecialWeaponTargettingEvent {
|
||||
int Type;
|
||||
int ID;
|
||||
char Name[16];
|
||||
DllSuperweaponTypeEnum WeaponType;
|
||||
} SpecialWeaponTargetting;
|
||||
|
||||
struct CenterCameraEvent {
|
||||
int CoordX;
|
||||
int CoordY;
|
||||
} CenterCamera;
|
||||
|
||||
struct PingEvent {
|
||||
int CoordX;
|
||||
int CoordY;
|
||||
} Ping;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Multiplayer setup data
|
||||
**
|
||||
** Used to pass multiplayer setup info into the C&C code from the GlyphX engine
|
||||
**
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
struct CNCMultiplayerOptionsStruct {
|
||||
//int MPlayerPrefColor; // preferred color index for this player
|
||||
//int MPlayerColorIdx; // actual color index of this player
|
||||
//CnCHousesType MPlayerHouse; // House of this player (GDI/NOD)
|
||||
//unsigned char MPlayerLocalID; // ID of this player
|
||||
int MPlayerCount; // # of human players in this game
|
||||
int MPlayerBases; // 1 = bases are on for this scenario
|
||||
int MPlayerCredits; // # credits everyone gets
|
||||
int MPlayerTiberium; // 1 = tiberium enabled for this scenario
|
||||
int MPlayerGoodies; // 1 = goodies enabled for this scenario
|
||||
int MPlayerGhosts; // 1 = houses with no players will still play
|
||||
int MPlayerSolo; // 1 = allows a single-player net game
|
||||
int MPlayerUnitCount; // # units for non-base multiplayer scenarios
|
||||
bool IsMCVDeploy; // MCV undeploys instead of selling
|
||||
bool SpawnVisceroids; // Do visceroids spawn
|
||||
bool EnableSuperweapons; // Are superweapons available
|
||||
bool MPlayerShadowRegrow;
|
||||
bool MPlayerAftermathUnits;
|
||||
bool CaptureTheFlag;
|
||||
bool DestroyStructures; // New early win condition via destroying all a player's structures
|
||||
};
|
||||
|
||||
|
||||
|
||||
struct CNCSpiedInfoStruct {
|
||||
int Power;
|
||||
int Drain;
|
||||
int Money;
|
||||
};
|
||||
|
||||
|
||||
struct CNCPlayerInfoStruct {
|
||||
char Name[64];
|
||||
unsigned char House;
|
||||
int ColorIndex;
|
||||
unsigned __int64 GlyphxPlayerID;
|
||||
int Team;
|
||||
int StartLocationIndex;
|
||||
unsigned char HomeCellX;
|
||||
unsigned char HomeCellY;
|
||||
bool IsAI;
|
||||
unsigned int AllyFlags;
|
||||
bool IsDefeated;
|
||||
unsigned int SpiedPowerFlags;
|
||||
unsigned int SpiedMoneyFlags;
|
||||
CNCSpiedInfoStruct SpiedInfo[MAX_HOUSES];
|
||||
int SelectedID;
|
||||
DllObjectTypeEnum SelectedType;
|
||||
DllActionTypeEnum ActionWithSelected[MAX_EXPORT_CELLS];
|
||||
unsigned int ActionWithSelectedCount;
|
||||
unsigned int ScreenShake;
|
||||
bool IsRadarJammed;
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
enum GameRequestType {
|
||||
GAME_REQUEST_MOVIE_DONE,
|
||||
};
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Rules configuration data
|
||||
**
|
||||
**
|
||||
*/
|
||||
struct CNCDifficultyDataStruct
|
||||
{
|
||||
float FirepowerBias;
|
||||
float GroundspeedBias;
|
||||
float AirspeedBias;
|
||||
float ArmorBias;
|
||||
float ROFBias;
|
||||
float CostBias;
|
||||
float BuildSpeedBias;
|
||||
|
||||
float RepairDelay;
|
||||
float BuildDelay;
|
||||
|
||||
bool IsBuildSlowdown;
|
||||
bool IsWallDestroyer;
|
||||
bool IsContentScan;
|
||||
};
|
||||
|
||||
struct CNCRulesDataStruct
|
||||
{
|
||||
CNCDifficultyDataStruct Difficulties[3];
|
||||
};
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Debug input interface
|
||||
**
|
||||
**
|
||||
*/
|
||||
|
||||
enum DebugRequestEnum {
|
||||
DEBUG_REQUEST_SPAWN_OBJECT,
|
||||
DEBUG_REQUEST_END_GAME,
|
||||
DEBUG_REQUEST_UNSHROUD,
|
||||
DEBUG_REQUEST_SUPERWEAPON_RECHARGE,
|
||||
DEBUG_REQUEST_KILL_OBJECT,
|
||||
DEBUG_REQUEST_END_PRODUCTION,
|
||||
DEBUG_REQUEST_ADD_RESOURCES,
|
||||
DEBUG_REQUEST_UNLOCK_BUILDABLES,
|
||||
DEBUG_REQUEST_FORCE_CRASH,
|
||||
DEBUG_REQUEST_SET_GLOBAL_FLAG,
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Shroud data.
|
||||
**
|
||||
** Per-cell shroud info
|
||||
**
|
||||
**
|
||||
*/
|
||||
struct CNCShroudEntryStruct {
|
||||
char ShadowIndex;
|
||||
bool IsVisible;
|
||||
bool IsMapped;
|
||||
bool IsJamming;
|
||||
};
|
||||
|
||||
struct CNCShroudStruct {
|
||||
int Count;
|
||||
CNCShroudEntryStruct Entries[1]; // Variable length
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Occupier data.
|
||||
**
|
||||
** Per-cell occupier info
|
||||
**
|
||||
**
|
||||
*/
|
||||
struct CNCOccupierObjectStruct {
|
||||
DllObjectTypeEnum Type;
|
||||
int ID;
|
||||
};
|
||||
|
||||
struct CNCOccupierEntryHeaderStruct {
|
||||
int Count;
|
||||
};
|
||||
|
||||
struct CNCOccupierHeaderStruct {
|
||||
int Count;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************************
|
||||
**
|
||||
** Carryover object.
|
||||
**
|
||||
** Used to store object data that persists between missions
|
||||
**
|
||||
**
|
||||
*/
|
||||
struct CarryoverObjectStruct
|
||||
{
|
||||
CarryoverObjectStruct() : Next(0) {}
|
||||
|
||||
CarryoverObjectStruct* Next;
|
||||
|
||||
int RTTI;
|
||||
int Type;
|
||||
int Cell;
|
||||
int Strength;
|
||||
int House;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
** End of strict structure packing
|
||||
**
|
||||
**
|
||||
*/
|
||||
#pragma pack(pop)
|
||||
|
||||
|
||||
|
||||
#endif //DLL_INTERFACE_H
|
Reference in a new issue