CnC_Remastered_Collection/REDALERT/DEFINES.H

3642 lines
105 KiB
C++
Raw Normal View History

//
// 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
/* $Header: /CounterStrike/DEFINES.H 4 3/07/97 9:55a Joe_bostic $ */
/***********************************************************************************************
*** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
***********************************************************************************************
* *
* Project Name : Command & Conquer *
* *
* File Name : DEFINES.H *
* *
* Programmer : Joe L. Bostic *
* *
* Start Date : September 10, 1993 *
* *
* Last Update : September 10, 1993 [JLB] *
* *
*---------------------------------------------------------------------------------------------*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#ifndef DEFINES_H
#define DEFINES_H
/**********************************************************************
** Language control: define the desired language for this build.
*/
//#define ENGLISH 1
//#define FRENCH 1
//#define GERMAN 1
//#define SPAIN 1 (never used)
// - Language define is now passed in from the makefile. -
/**********************************************************************
** Controls the nature of the game and its abilities. Only define
** one of these values.
**
** Internal version -- complete with scenario editor.
** Playtest version -- no editor but does have minimal cheat keys.
** Release version -- no editor or cheat keys -- all debugging info removed.
*/
//#define INTERNAL_VERSION
//#define PLAYTEST_VERSION
#define RELEASE_VERSION
/**********************************************************************
** ColinM
** Set this to enable dongle protection
*/
//#define DONGLE
// Enable 640x400 VQ movie capability in WIN32 mode
#define MOVIE640
//#if (GERMAN | FRENCH)
//#define BOGUSCD
//#endif
#define FIXIT_SCORE_CRASH // Fixes score screen crash
#define FIXIT_MULTI_SAVE // Fixes multiplayer save/load
#define FIXIT_NO_COMP_ALLY // Prevent ally with computer
#define FIXIT_DESTNET // Fixes -destnet parameter in Win95
#define FIXIT_RANDOM_GAME // Fixes random seed at start of multiplayer games
#define FIXIT_FORCE_CD // Forces correct CD load after scenario #1
#define FIXIT_IP_CRASH // Fixes crash if internet game aborts too quickly
#define FIXIT_IP_STATS // Fixes so vessels show up in internet stat info
#define FIXIT_NAME_OVERRIDE // Allows changing of unit names
#define FIXIT_RADAR_JAMMED // Fixes unjamming by merely starting to build a radar facility
#define FIXIT_CAPTURE_BIB // Fixes so that if fake is captured, you still can't build off of it.
#define FIXIT_BASE_ANNOUNCE // Fixes so player controlled buildings count as base when attacked.
#define FIXIT_APTIVA_MODEM // Fixes crash with Aptiva modem.
#define FIXIT_FLAG_CHECK // Disable placing building over a flag.
#define FIXIT_ANTS // Adds Ant Units
#define FIXIT_CSII // Adds Aftermath CounterStrike II units
// ajw 9/28/98 - Note about FIXIT_CSII. Changes seem to have been made for Aftermath ("Counterstrike II") that: a) were
// bug fixes that should never be rolled back, b) change the nature of the game, at least in multi-player. This meant
// that the "Red Alert" executable ( == Counterstrike executable ) could no longer be built. Apparently, at the time,
// this was justified, as it was believed that no further patches to the RA executable would ever be necessary.
// Given that Denzil's DVD changes and my WOLAPI integration are essentially a patch, we've got a problem.
// We've decided to level the field and make sure every who gets or patches to the new version of Red Alert, CS, AM, (and
// their DVD equivalent(s)) will have the same executable. So we're assuming that all of the FIXIT_CSII changes are
// permanent (as, in fact, all prior FIXIT_'s are - makes me wonder why the old non-compiling code has to hang around
// forever), and fixing the code so that the assumption "this is an Aftermath game" is no longer hard-coded, but can
// change at runtime. (Which is what should have been done when Aftermath was created.)
// <This goes for the following three defines as well.>
#define FIXIT_CARRIER // Adds Aftermath aircraft carrier
#define FIXIT_PHASETRANSPORT // Adds Aftermath cloaking APC
// ajw - Discovered that engineer changing fields were specifically left out of aftrmath.ini, thus this has no effect.
// Engineer changes (and other game rule changes) are in mplayer.ini, which was loaded before aftermath-only mplayer games.
#define FIXIT_ENGINEER // Adds Engineer rules.ini overrides
//#define FIXIT_FAST_LOAD // Enables faster INI loading
// These fixes will cause the game to go out of sync.
//#define FIXIT_ENGINEER_CAPTURE // If building not allied, will still capture if engineer not allied with building.
//#define FIXIT_HELI_LANDING // Fixes so new helicopters land at free helipad
//#define FIXIT_MINE_PASSABLE // Fixes units not driving onto mines
/* Turn on these changes for the 1.08 patch */
#define FIXIT_PATCH_108
#ifdef FIXIT_PATCH_108
#define STEVES_LOAD_OVERRIDE // Allows loading of CONQUER.ENG instead of from mix file.
#define FIXIT_DIFFICULTY // Fixes no difficulty level for CStrike missions
#define FIXIT_VERSION // Fixes version playability for 1.04, 1.07 & 1.08
#define FIXIT_MODEM_LOAD_CRASH // Fixes crash after loading a modem game when names are the same
#define FIXIT_PHONELIST_CRASH // Fixes crash when clicking on an empty phonelist
#endif
// Denotes changes made for version 3 - reunification of all existing versions and undoing of Aftermath divergence. - ajw
#define FIXIT_VERSION_3
#define DVD
// Define DVD to turn on RADVD additions/changes - Denzil
#ifdef DVD
//#define INTERNET_OFF
//#define MPEGMOVIE //PG
//#define MCIMPEG
#endif
// Test to see if partial object drawing is any faster.
//#define PARTIAL
#define SORTDRAW
/**********************************************************************
** If the scenario editor to to be active in this build then uncomment
** the following #define line.
*/
#ifdef INTERNAL_VERSION
#define SCENARIO_EDITOR
#endif
/**********************************************************************
** This define enables the full set of cheat keys and special
** command line options.
*/
#if defined(INTERNAL_VERSION) || defined(PLAYTEST_VERSION)
#define CHEAT_KEYS
#endif
/**********************************************************************
** If this is defined, the special Virgin limited cheat keys
** are enabled. This allows the "cheat" parameter and then only
** allows the ALT-W to win the mission.
*/
#ifdef PLAYTEST_VERSION
#define VIRGIN_CHEAT_KEYS
#endif
/**********************************************************************
** If this is defined, then the network code will be enabled.
*/
#define NETWORK
#define TIMING_FIX 1
/**********************************************************************
** Define this to 1 to enable MPath-specific code. Do not define
** TEN at the same time.
*/
#define MPATH 0
/**********************************************************************
** Define this to 1 to enable TEN-specific code. Do not define
** MPATH at the same time.
*/
#define TEN 0
/**********************************************************************
** If this is defined, the DoList is "mirrored", for memory trasher
** detection.
*/
#ifdef CHEAT_KEYS
//#define MIRROR_QUEUE
#endif
/**********************************************************************
** This define tells the Version Number class to use the date/time-based
** version numbering system. If this define is not set, the actual
** major/minor version numbers will be used.
*/
//#define DEV_VERSION
//#define DEV_VER_NAME
/**********************************************************************
** This define enables a special additional foreign-version-number
** after the other version number, for display purposes only.
*/
#if !defined(ENGLISH)
#define FOREIGN_VERSION
#define FOREIGN_VERSION_NUMBER 7
#endif
/**********************************************************************
** This is the multiplier factor to convert low resution coordinates
** into their actual resolution counterparts.
*/
#ifdef WIN32
#define RESFACTOR 2
#else
//#undef SCENARIO_EDITOR
#define RESFACTOR 1
#endif
#define SIDEBAR_WID 80
/**********************************************************************
** Optional parameter control for special options.
*/
/*
** Enable the set of limited cheat key options.
*/
#ifdef VIRGIN_CHEAT_KEYS
#define PARM_PLAYTEST 0xF7DDC227 // "PLAYTEST"
#endif
/*
** Enable the full set of cheat key options.
*/
#ifdef CHEAT_KEYS
#ifndef PARM_PLAYTEST
#define PARM_PLAYTEST 0xF7DDC227 // "PLAYTEST"
#endif
#endif
#define PARM_INSTALL 0xD95C68A2 // "FROMINSTALL"
//
// Allow normal game play in the MPath version
//
#if(MPATH)
#define PARM_ALLOW_SOLO 0xc901c9db // AllowSoloPlayOptions
#endif
//
// Allow normal game play in the TEN version
//
#if(TEN)
#define PARM_ALLOW_SOLO 0xc901c9db // AllowSoloPlayOptions
#endif
/**********************************************************************
** Defines for verifying free disk space
*/
#define INIT_FREE_DISK_SPACE 8388608
#define SAVE_GAME_DISK_SPACE (INIT_FREE_DISK_SPACE - (1024*4096))
//#define SAVE_GAME_DISK_SPACE 100000
/**********************************************************************
** This is the complete list of VQs allowed to be played in the game.
*/
typedef enum VQType {
VQ_NONE=-1,
VQ_AAGUN,
VQ_MIG,
VQ_SFROZEN,
VQ_AIRFIELD,
VQ_BATTLE,
VQ_BMAP,
VQ_BOMBRUN,
VQ_DPTHCHRG,
VQ_GRVESTNE,
VQ_MONTPASS,
VQ_MTNKFACT,
VQ_CRONTEST,
VQ_OILDRUM,
VQ_ALLYEND,
VQ_RADRRAID,
VQ_SHIPYARD,
VQ_SHORBOMB,
VQ_SITDUCK,
VQ_SLNTSRVC,
VQ_SNOWBASE,
VQ_EXECUTE,
VQ_TITLE, // Low res.
VQ_NUKESTOK,
VQ_V2ROCKET,
VQ_SEARCH,
VQ_BINOC,
VQ_ELEVATOR,
VQ_FROZEN,
VQ_MCV,
VQ_SHIPSINK,
VQ_SOVMCV,
VQ_TRINITY,
VQ_ALLYMORF,
VQ_APCESCPE,
VQ_BRDGTILT,
VQ_CRONFAIL,
VQ_STRAFE,
VQ_DESTROYR,
VQ_DOUBLE,
VQ_FLARE,
VQ_SNSTRAFE,
VQ_LANDING,
VQ_ONTHPRWL,
VQ_OVERRUN,
VQ_SNOWBOMB,
VQ_SOVCEMET,
VQ_TAKE_OFF,
VQ_TESLA,
VQ_SOVIET8,
VQ_SPOTTER,
VQ_SCENE1,
VQ_SCENE2,
VQ_SCENE4,
VQ_SOVFINAL,
VQ_ASSESS,
VQ_SOVIET10,
VQ_DUD,
VQ_MCV_LAND,
VQ_MCVBRDGE,
VQ_PERISCOP,
VQ_SHORBOM1,
VQ_SHORBOM2,
VQ_SOVBATL,
VQ_SOVTSTAR,
VQ_AFTRMATH,
VQ_SOVIET11,
VQ_MASASSLT,
VQ_REDINTRO, // High res
VQ_SOVIET1,
VQ_SOVIET2,
VQ_SOVIET3,
VQ_SOVIET4,
VQ_SOVIET5,
VQ_SOVIET6,
VQ_SOVIET7,
VQ_INTRO_MOVIE,
VQ_AVERTED,
VQ_COUNTDWN,
VQ_MOVINGIN,
VQ_ALLIED10,
VQ_ALLIED12,
VQ_ALLIED5,
VQ_ALLIED6,
VQ_ALLIED8,
VQ_TANYA1,
VQ_TANYA2,
VQ_ALLY10B,
VQ_ALLY11,
VQ_ALLY14,
VQ_ALLY9,
VQ_SPY,
VQ_TOOFAR,
VQ_SOVIET12,
VQ_SOVIET13,
VQ_SOVIET9,
VQ_BEACHEAD,
VQ_SOVIET14,
VQ_SIZZLE,
VQ_SIZZLE2,
VQ_ANTEND,
VQ_ANTINTRO,
//2019/11/12 JAS - Added for Retaliation movies
VQ_RETALIATION_ALLIED1,
VQ_RETALIATION_ALLIED2,
VQ_RETALIATION_ALLIED3,
VQ_RETALIATION_ALLIED4,
VQ_RETALIATION_ALLIED5,
VQ_RETALIATION_ALLIED6,
VQ_RETALIATION_ALLIED7,
VQ_RETALIATION_ALLIED8,
VQ_RETALIATION_ALLIED9,
VQ_RETALIATION_ALLIED10,
VQ_RETALIATION_SOVIET1,
VQ_RETALIATION_SOVIET2,
VQ_RETALIATION_SOVIET3,
VQ_RETALIATION_SOVIET4,
VQ_RETALIATION_SOVIET5,
VQ_RETALIATION_SOVIET6,
VQ_RETALIATION_SOVIET7,
VQ_RETALIATION_SOVIET8,
VQ_RETALIATION_SOVIET9,
VQ_RETALIATION_SOVIET10,
VQ_RETALIATION_WINA,
VQ_RETALIATION_WINS,
VQ_RETALIATION_ANTS,
VQ_COUNT,
VQ_FIRST=0
} VQType;
/**********************************************************************
** These enumerations are used to implement RTTI. The target system
** uses these and thus there can be no more RTTI types than can fit
** in the exponent of a target value.
*/
typedef enum RTTIType : unsigned char {
RTTI_NONE=0,
RTTI_AIRCRAFT,
RTTI_AIRCRAFTTYPE,
RTTI_ANIM,
RTTI_ANIMTYPE,
RTTI_BUILDING,
RTTI_BUILDINGTYPE,
RTTI_BULLET,
RTTI_BULLETTYPE,
RTTI_CELL,
RTTI_FACTORY,
RTTI_HOUSE,
RTTI_HOUSETYPE,
RTTI_INFANTRY,
RTTI_INFANTRYTYPE,
RTTI_OVERLAY,
RTTI_OVERLAYTYPE,
RTTI_SMUDGE,
RTTI_SMUDGETYPE,
RTTI_SPECIAL,
RTTI_TEAM,
RTTI_TEAMTYPE,
RTTI_TEMPLATE,
RTTI_TEMPLATETYPE,
RTTI_TERRAIN,
RTTI_TERRAINTYPE,
RTTI_TRIGGER,
RTTI_TRIGGERTYPE,
RTTI_UNIT,
RTTI_UNITTYPE,
RTTI_VESSEL,
RTTI_VESSELTYPE,
RTTI_COUNT
} RTTIType;
/**********************************************************************
** These are the difficulty settings of the game.
*/
typedef enum DiffType : unsigned char {
DIFF_EASY,
DIFF_NORMAL,
DIFF_HARD,
DIFF_COUNT,
DIFF_FIRST=0
} DiffType;
/**********************************************************************
** This is the size of the speech buffer. This value should be as large
** as the largest speech sample, plus a few bytes for overhead
** (16 bytes is sufficient).
*/
#define SPEECH_BUFFER_SIZE 50000L
/**********************************************************************
** The theater mixfiles are cached into a buffer of this size. Ensure
** that the size specified is at least as large as the largest
** theater mixfile data block.
*/
#define THEATER_BUFFER_SIZE 1100000L
/**********************************************************************
** This is the size of the shape buffer. This buffer is used as a staging
** buffer for the shape drawing technology. It MUST be as big as the
** largest shape (uncompressed) that will be drawn. If this value is
** changed, be sure to update the makefile and rebuild all of the shape
** data files.
*/
#define SHAPE_BUFFER_SIZE 131072L
/**********************************************************************
** Filenames of the data files it can create at run time.
*/
#define FAME_FILE_NAME "HALLFAME.DAT"
#define NET_SAVE_FILE_NAME "SAVEGAME.NET"
#define CONFIG_FILE_NAME "REDALERT.INI"
/**********************************************************************
** Map controls. The map is composed of square elements called 'cells'.
** All larger elements are build upon these.
*/
#define HIGH_COORD_MASK 0x80008000L
// Size of the map in cells.
#define MAP_CELL_W 128
#define MAP_CELL_H 128
#define MAP_CELL_TOTAL (MAP_CELL_W*MAP_CELL_H)
#define REFRESH_EOL 32767 // This number ends a refresh/occupy offset list.
#define REFRESH_SIDEBAR 32766 // This number flags that sidebar needs refreshing.
/****************************************************************************
** These are custom C&C specific types. The CELL is used for map coordinate
** with cell resolution. The COORDINATE type is used for map coordinates that
** have a lepton resolution. CELL is more efficient when indexing into the map
** and when size is critical. COORDINATE is more efficient when dealing with
** accuracy and object movement.
*/
typedef unsigned short LEPTON;
typedef union {
LEPTON Raw;
struct {
#ifdef BIG_ENDIAN
unsigned char Cell;
unsigned char Lepton;
#else
unsigned char Lepton;
unsigned char Cell;
#endif
} Sub;
} LEPTON_COMPOSITE;
typedef unsigned long COORDINATE;
typedef union {
COORDINATE Coord;
struct {
#ifdef BIG_ENDIAN
LEPTON_COMPOSITE Y;
LEPTON_COMPOSITE X;
#else
LEPTON_COMPOSITE X;
LEPTON_COMPOSITE Y;
#endif
} Sub;
} COORD_COMPOSITE;
typedef signed short CELL;
#define SLUFF_BITS (sizeof(CELL)*CHAR_BIT)-(14)
typedef union {
CELL Cell;
struct {
#ifdef BIG_ENDIAN
#if SLUFF_BITS
/*
** Unused upper bits will cause problems on a big-endian machine unless they
** are deliberately accounted for.
*/
unsigned sluff:SLUF_BITS;
#endif
unsigned Y:7;
unsigned X:7;
#else
unsigned X:7;
unsigned Y:7;
#endif
} Sub;
} CELL_COMPOSITE;
typedef int WAYPOINT;
/**********************************************************************
** This is the target composit information. Notice that with an RTTI_NONE
** and an index value of 0, the target value returned is identical with
** TARGET_NONE. This is by design and is necessary.
*/
typedef long TARGET;
#define TARGET_MANTISSA 24 // Bits of value precision.
#define TARGET_EXPONENT 8
typedef union {
TARGET Target;
struct {
#ifdef BIG_ENDIAN
unsigned Exponent:TARGET_EXPONENT;
unsigned Mantissa:TARGET_MANTISSA;
#else
unsigned Mantissa:TARGET_MANTISSA;
unsigned Exponent:TARGET_EXPONENT;
#endif
} Sub;
} TARGET_COMPOSITE;
inline TARGET Build_Target(RTTIType kind, int value)
{
TARGET_COMPOSITE target;
target.Target = 0;
target.Sub.Exponent = kind;
target.Sub.Mantissa = value;
return(target.Target);
}
#define TARGET_NONE ((TARGET)0)
/*
** The map is broken down into regions of this specified dimensions.
*/
#define REGION_WIDTH 4
#define REGION_HEIGHT 4
#define MAP_REGION_WIDTH (((MAP_CELL_W + (REGION_WIDTH -1)) / REGION_WIDTH)+2)
#define MAP_REGION_HEIGHT (((MAP_CELL_H + (REGION_WIDTH -1)) / REGION_HEIGHT)+2)
#define MAP_TOTAL_REGIONS (MAP_REGION_WIDTH * MAP_REGION_HEIGHT)
/**********************************************************************
** This enumerates the various known fear states for infantry units.
** At these stages, certain events or recovery actions are performed.
*/
typedef enum FearType : unsigned char {
FEAR_NONE=0, // No fear at all (default state).
FEAR_ANXIOUS=10, // Something makes them scared.
FEAR_SCARED=100, // Scared enough to take cover.
FEAR_PANIC=200, // Run away! Run away!
FEAR_MAXIMUM=255 // Scared to death.
} FearType;
/**********************************************************************
** When a moving object moves, the Per_Cell_Process function is called
** at various times during the move. Certain operations must be
** performed at different stages of the move. This enum specifies the
** different conditions under which the Per_Cell_Process function is
** called.
*/
typedef enum PCPType : unsigned char {
PCP_ROTATION, // When sitting in place and performing rotations.
PCP_DURING, // While moving between two cells.
PCP_END, // When the 'center' of a cell is reached during movement.
} PCPType;
/**********************************************************************
** A base is broken up into several zones. This type enumerates the
** various zones.
*/
typedef enum ZoneType : char {
ZONE_CORE, // Center of base.
ZONE_NORTH, // North section.
ZONE_EAST, // East section.
ZONE_SOUTH, // South section.
ZONE_WEST, // West section.
ZONE_COUNT,
ZONE_FIRST=0,
ZONE_NONE=-1
} ZoneType;
/**********************************************************************
** The map is prescanned to mark of movement zones according to certain
** movement characteristics. This enum specifies those characteristics
** and movement zones kept track of.
*/
typedef enum MZoneType : unsigned char {
MZONE_NORMAL, // Normal terrestrial objects (can't crush walls).
MZONE_CRUSHER, // Can crush crushable wall types.
MZONE_DESTROYER, // Can destroy walls.
MZONE_WATER, // Water based objects.
MZONE_COUNT,
MZONE_FIRST=0
} MZoneType;
#define MZONEF_NORMAL (1<<MZONE_NORMAL)
#define MZONEF_CRUSHER (1<<MZONE_CRUSHER)
#define MZONEF_DESTROYER (1<<MZONE_DESTROYER)
#define MZONEF_WATER (1<<MZONE_WATER)
#define MZONEF_ALL (MZONEF_NORMAL|MZONEF_CRUSHER|MZONEF_DESTROYER|MZONEF_WATER)
/**********************************************************************
** This records the current state of the computer controlled base. The
** AI will respond according to this state in order to control
** production and unit orders.
*/
typedef enum StateType : unsigned char {
STATE_BUILDUP, // Base is building up (defensive buildup stage).
STATE_BROKE, // Low on money, need cash or income source.
STATE_THREATENED, // Enemy units are designated to move close by.
STATE_ATTACKED, // Base is under direct attack.
STATE_ENDGAME // Resistance is futile.
} StateType;
/**********************************************************************
** Urgency rating used to determine what action to perform. The greater
** the urgency the more likely the corresponding action will be chosen.
** These values are assigned to each potential desired action the house
** is to perform.
*/
typedef enum UrgencyType : unsigned char {
URGENCY_NONE, // No action on this matter is needed or desired.
URGENCY_LOW, // Minimal attention requested.
URGENCY_MEDIUM, // Normal attention requested.
URGENCY_HIGH, // High attention requested.
URGENCY_CRITICAL, // This matter must be addressed immediately.
URGENCY_COUNT,
URGENCY_FIRST=URGENCY_CRITICAL
} UrgencyType;
/**********************************************************************
** These are the various actions a house may perform. These actions refer
** to global events that encompass selling and production. Low level house
** specific actions of choosing targets is handled elsewhere.
*/
typedef enum StrategyType : unsigned char {
STRATEGY_BUILD_POWER, // Power is low, build more.
STRATEGY_BUILD_DEFENSE, // Defense needs boosting.
STRATEGY_BUILD_INCOME, // Income is low or in jeopardy, raise it.
STRATEGY_FIRE_SALE, // Situation hopeless, sell and attack.
STRATEGY_BUILD_ENGINEER, // An engineer is needed.
STRATEGY_BUILD_OFFENSE, // Offensive weapons are needed.
STRATEGY_RAISE_MONEY, // Money is low, emergency raise cash.
STRATEGY_RAISE_POWER, // Money is low, raise power by selling.
STRATEGY_LOWER_POWER, // Too much power, sell power plants.
STRATEGY_ATTACK, // General charge the enemy attack logic.
STRATEGY_COUNT,
STRATEGY_FIRST=STRATEGY_BUILD_POWER
} StrategyType;
/**********************************************************************
** These are the various return conditions that production may
** produce.
*/
typedef enum ProdFailType : unsigned char {
PROD_OK, // Production request successful.
PROD_LIMIT, // Failed with production capacity limit reached.
PROD_ILLEGAL, // Failed because of illegal request.
PROD_CANT // Failed because unable to comply (busy or occupied).
} ProdFailType;
/**********************************************************************
** When performing a landing operation, the aircraft must pass through
** navigation checkpoints. These enumerations specify the check points.
*/
typedef enum CheckPointType : unsigned char {
CHECK_STACK, // Holding area far away from airfield.
CHECK_DOWNWIND, // Downwind leg of approach.
CHECK_CROSSWIND // Crosswind leg of approach.
} CheckPointType;
/**********************************************************************
** These enumerate the various crate powerups that are available.
*/
typedef enum CrateType : unsigned char {
CRATE_MONEY,
CRATE_UNIT,
CRATE_PARA_BOMB,
CRATE_HEAL_BASE,
CRATE_CLOAK,
CRATE_EXPLOSION,
CRATE_NAPALM,
CRATE_SQUAD,
CRATE_DARKNESS,
CRATE_REVEAL,
CRATE_SONAR,
CRATE_ARMOR,
CRATE_SPEED,
CRATE_FIREPOWER,
CRATE_ICBM,
CRATE_TIMEQUAKE,
CRATE_INVULN,
CRATE_VORTEX,
CRATE_COUNT,
CRATE_FIRST=0
} CrateType;
/**********************************************************************
** These are the special weapons that can be used in the game. The common thread
** with these weapons is that they are controlled through the sidebar
** mechanism.
*/
typedef enum SpecialWeaponType : char {
SPC_NONE=-1,
SPC_SONAR_PULSE, // Momentarily reveals submarines.
SPC_NUCLEAR_BOMB, // Tactical nuclear weapon.
SPC_CHRONOSPHERE, // Paradox device, for teleportation
SPC_PARA_BOMB, // Parachute bomb delivery.
SPC_PARA_INFANTRY, // Parachute reinforcement delivery.
SPC_SPY_MISSION, // Spy plane to take photo recon mission.
SPC_IRON_CURTAIN, // Bestow invulnerability on a unit/building
SPC_GPS, // give allies free unjammable radar.
SPC_COUNT,
SPC_FIRST=0,
SPC_ANY=1
} SpecialWeaponType;
#define SPC_CHRONO2 (SPC_COUNT)
/**********************************************************************
** The computer AI is categorized by the following enumerations. If
** the player is controlling a house, then the IQ rating is zero. When
** the IQ rating is at maximum, then the computer has complete control
** of the house.
*/
//typedef enum IQType {
// IQ_DEAD=0x0000, // Player controlled (computer does nothing).
// IQ_IDIOT=0x0040,
// IQ_IMBECILE=0x0080,
// IQ_MORON=0x00C0,
// IQ_MENSA=0x0100 // Complete computer control -- look out!
//} IQType;
/**********************************************************************
** These are the response values when checking to see if an object
** can enter or exist at a specified location. By examining this
** return value, appropriate action may be chosen.
** NOTE: If this changes, update the static array in Find_Path module.
*/
typedef enum MoveType : unsigned char {
MOVE_OK, // No blockage.
MOVE_CLOAK, // A cloaked blocking enemy object.
MOVE_MOVING_BLOCK, // Blocked, but only temporarily.
MOVE_DESTROYABLE, // Enemy unit or building is blocking.
MOVE_TEMP, // Blocked by friendly unit.
MOVE_NO, // Strictly prohibited terrain.
MOVE_COUNT
} MoveType;
/**********************************************************************
** These are the themes that the game can play. They must be in exact
** same order as specified in the CONQUER.TXT file as well as the filename
** list located in the ThemeClass.
*/
typedef enum ThemeType : char {
THEME_QUIET=-3,
THEME_PICK_ANOTHER=-2,
THEME_NONE=-1,
THEME_BIGF,
THEME_CRUS,
THEME_FAC1,
THEME_FAC2,
THEME_HELL,
THEME_RUN1,
THEME_SMSH,
THEME_TREN,
THEME_WORK,
THEME_AWAIT,
THEME_DENSE_R,
THEME_FOGGER1A,
THEME_MUD1A,
THEME_RADIO2,
THEME_ROLLOUT,
THEME_SNAKE,
THEME_TERMINAT,
THEME_TWIN,
THEME_VECTOR1A,
THEME_MAP,
THEME_SCORE,
THEME_INTRO,
THEME_CREDITS,
THEME_2ND_HAND,
THEME_ARAZOID,
THEME_BACKSTAB,
THEME_CHAOS2,
THEME_SHUT_IT,
THEME_TWINMIX1,
THEME_UNDER3,
THEME_VR2,
#ifdef FIXIT_CSII // checked - ajw 9/28/98
THEME_BOG,
THEME_FLOAT_V2,
THEME_GLOOM,
THEME_GRNDWIRE,
THEME_RPT,
THEME_SEARCH,
THEME_TRACTION,
THEME_WASTELND,
#endif
THEME_COUNT,
THEME_LAST=(int)THEME_COUNT-1,
THEME_FIRST=0
} ThemeType;
//PG inline ThemeType operator++(ThemeType &, int);
/**********************************************************************
** This is the various threat scan methods that can be used when looking
** for targets.
*/
typedef enum ThreatType : unsigned short {
THREAT_NORMAL=0x0000, // Any distance threat scan?
THREAT_RANGE=0x0001, // Limit scan to weapon range?
THREAT_AREA=0x0002, // Limit scan to general area (twice weapon range)?
THREAT_AIR=0x0004, // Scan for air units?
THREAT_INFANTRY=0x0008, // Scan for infantry units?
THREAT_VEHICLES=0x0010, // Scan for vehicles?
THREAT_BUILDINGS=0x0020, // Scan for buildings?
THREAT_TIBERIUM=0x0040, // Limit scan to Tiberium processing objects?
THREAT_BOATS=0x0080, // Scan for gunboats?
THREAT_CIVILIANS=0x0100, // Consider civilians to be primary target?
THREAT_CAPTURE=0x0200, // Consider capturable buildings only?
THREAT_FAKES=0x0400, // Consider fake buildings a greater target?
THREAT_POWER=0x0800, // Consider power generating facilities a greater target?
THREAT_FACTORIES=0x1000, // Consider factories a greater target?
THREAT_BASE_DEFENSE=0x2000, // Consider base defense buildings a greater target?
} ThreatType;
//PG
//inline ThreatType operator |(ThreatType, ThreatType);
//inline ThreatType operator &(ThreatType, ThreatType);
//inline ThreatType operator ~(ThreatType);
inline ThreatType operator|(ThreatType a, ThreatType b)
{return static_cast<ThreatType>(static_cast<int>(a) | static_cast<int>(b));}
inline ThreatType operator&(ThreatType a, ThreatType b)
{return static_cast<ThreatType>(static_cast<int>(a) & static_cast<int>(b));}
inline ThreatType operator~(ThreatType a)
{return static_cast<ThreatType>(~static_cast<int>(a));}
#define THREAT_GROUND (THREAT_VEHICLES|THREAT_BUILDINGS|THREAT_INFANTRY)
/**********************************************************************
** These return values are used when determine if firing is legal.
** By examining this value it can be determined what should be done
** to fix the reason why firing wasn't allowed.
*/
typedef enum FireErrorType : unsigned char{
FIRE_OK, // Weapon is allowed to fire.
FIRE_AMMO, // No ammo available to fire?
FIRE_FACING, // Not correctly facing target?
FIRE_REARM, // It is busy rearming?
FIRE_ROTATING, // Is it in process of rotating?
FIRE_ILLEGAL, // Is it targeting something illegal?
FIRE_CANT, // Is this unit one that cannot fire anything?
FIRE_MOVING, // Is it moving and not allowed to fire while moving?
FIRE_RANGE, // Is the target out of range?
FIRE_CLOAKED, // Is the shooter currently cloaked?
FIRE_BUSY // Is shooter currently doing something else?
} FireErrorType;
/**********************************************************************
** If an object can cloak, then it will be in one of these states.
** For objects that cannot cloak, they will always be in the
** UNCLOAKED state. This state controls how the object transitions between
** cloaked and uncloaked conditions.
*/
typedef enum CloakType : unsigned char {
UNCLOAKED, // Completely visible (normal state).
CLOAKING, // In process of cloaking.
CLOAKED, // Completely cloaked (invisible).
UNCLOAKING // In process of uncloaking.
} CloakType;
/**********************************************************************
** For units that are cloaking, these value specify the visual character
** of the object.
*/
typedef enum VisualType : unsigned char{
VISUAL_NORMAL, // Completely visible -- normal.
VISUAL_INDISTINCT, // The edges shimmer and become indistinct.
VISUAL_DARKEN, // Color and texture is muted along with shimmering.
VISUAL_SHADOWY, // Body is translucent in addition to shimmering.
VISUAL_RIPPLE, // Just a ripple (true predator effect).
VISUAL_HIDDEN // Nothing at all is visible.
} VisualType;
/**********************************************************************
** These missions enumerate the various state machines that can apply to
** a game object. Only one of these state machines is active at any one
** time.
*/
typedef enum MissionType : char {
MISSION_NONE=-1,
MISSION_SLEEP, // Do nothing whatsoever.
MISSION_ATTACK, // Attack nearest enemy.
MISSION_MOVE, // Guard location or unit.
MISSION_QMOVE, // A queue list movement mission.
MISSION_RETREAT, // Return home for R & R.
MISSION_GUARD, // Stay still.
MISSION_STICKY, // Stay still -- never recruit.
MISSION_ENTER, // Move into object cooperatively.
MISSION_CAPTURE, // Move into in order to capture.
MISSION_HARVEST, // Hunt for and collect nearby Tiberium.
MISSION_GUARD_AREA, // Active guard of area.
MISSION_RETURN, // Head back to refinery.
MISSION_STOP, // Sit still.
MISSION_AMBUSH, // Wait until discovered.
MISSION_HUNT, // Active search and destroy.
MISSION_UNLOAD, // Search for and deliver cargo.
MISSION_SABOTAGE, // Move into in order to destroy.
MISSION_CONSTRUCTION, // Building buildup operation.
MISSION_DECONSTRUCTION, // Building builddown operation.
MISSION_REPAIR, // Repair process mission.
MISSION_RESCUE,
MISSION_MISSILE,
MISSION_HARMLESS, // Sit around and don't appear like a threat.
MISSION_COUNT,
MISSION_FIRST=0
} MissionType;
/**********************************************************************
** These are the enumerated animation sequences that a building may
** be processing. These serve to control the way that a building
** appears.
*/
typedef enum BStateType : char {
BSTATE_NONE=-1,
BSTATE_CONSTRUCTION, // Construction animation.
BSTATE_IDLE, // Idle animation.
BSTATE_ACTIVE, // Animation when building is "doing its thing".
BSTATE_FULL, // Special alternate active state.
BSTATE_AUX1, // Auxiliary animation.
BSTATE_AUX2, // Auxiliary animation.
BSTATE_COUNT
} BStateType;
/**********************************************************************
** Whenever a unit is selected and a click occurs over another object
** or terrain element, there is some action to initiate. This specifies
** the different types of actions possible. This also controls how the
** mouse cursor looks when "hovering" over the spot that clicking would
** occur at.
*/
typedef enum ActionType : unsigned char {
ACTION_NONE, // Either undefined action or "do nothing".
ACTION_MOVE, // Can move there or at least try to.
ACTION_NOMOVE, // Special case for movable object, but illegal mouse position.
ACTION_ENTER, // Special case for infantry->APC or vehicle->Repair facility.
ACTION_SELF, // Self select special case.
ACTION_ATTACK, // Can attack or fire upon it in some fashion.
ACTION_HARVEST, // Special harvest mode.
ACTION_SELECT, // Would change selection to specified object.
ACTION_TOGGLE_SELECT,// Toggles select state of the object.
ACTION_CAPTURE, // The unit will try to capture the object.
ACTION_REPAIR, // The target object should be repaired.
ACTION_SELL, // The target building should be sold back.
ACTION_SELL_UNIT, // The target unit should be sold back.
ACTION_NO_SELL, // No sell or no repair.
ACTION_NO_REPAIR, // No sell or no repair.
ACTION_SABOTAGE, // The unit will try to sabotage/destroy the object.
ACTION_PARA_BOMB, // Parachute bomb strike.
ACTION_PARA_INFANTRY,// Parachute infantry strike.
ACTION_PARA_SABOTEUR,// Parachute saboteur strike.
ACTION_NUKE_BOMB, // That target object should be blasted.
ACTION_AIR_STRIKE, // That target object should be blasted.
ACTION_CHRONOSPHERE, // That target object should be teleported.
ACTION_CHRONO2, // Teleport it to the given coordinates now.
ACTION_IRON_CURTAIN, // That target object should be invulnerable.
ACTION_SPY_MISSION, // Photo recon mission.
ACTION_GUARD_AREA, // Guard the area/object clicked on.
ACTION_HEAL, // Heal the infantryman clicked on.
ACTION_DAMAGE, // Enter and damage building.
ACTION_GREPAIR, // Enter and complete repair building.
ACTION_NO_DEPLOY,
ACTION_NO_ENTER,
ACTION_NO_GREPAIR,
ACTION_TOGGLE_PRIMARY, // Toggle the primary status of the factory.
ACTION_COUNT
} ActionType;
/**********************************************************************
** When a unit gets damaged, the result of the damage is returned as
** this type. It can range from no damage taken to complete destruction.
*/
typedef enum ResultType : unsigned char {
RESULT_NONE, // No damage was taken by the target.
RESULT_LIGHT, // Some damage was taken, but no state change occurred.
RESULT_HALF, // Damaged to below half strength (only returned on transition).
RESULT_MAJOR, // Damaged down to 1 hit point.
RESULT_DESTROYED // Damaged to complete destruction.
} ResultType;
#ifdef OBSOLETE
/**********************************************************************
** These are the special concrete control defines. They enumerate the
** sequence order of the concrete icons in the concrete art file.
*/
// DEBUG === convert this to be zero based so that a nulled cell is the
// default cell.
enum ConcreteEnum {
C_NONE=-1,
C_LEFT=0,
C_RIGHT=1,
C_RIGHT_UPDOWN=2,
C_LEFT_UPDOWN=3,
C_UP_RIGHT=4,
C_UP_LEFT=5,
C_DOWN_RIGHT=6,
C_DOWN_LEFT=7,
C_RIGHT_DOWN=8,
C_LEFT_DOWN=9,
C_RIGHT_UP=10,
C_LEFT_UP=11,
C_UPDOWN_RIGHT=12,
C_UPDOWN_LEFT=13
};
#endif
/**********************************************************************
** Units that move can move at different speeds. These enumerate the
** different speeds that a unit can move.
*/
typedef enum MPHType : unsigned char {
MPH_IMMOBILE=0,
MPH_VERY_SLOW=5, // 2
MPH_KINDA_SLOW=6, // 3
MPH_SLOW=8, // 4
MPH_SLOW_ISH=10, // 5
MPH_MEDIUM_SLOW=12, // 6
MPH_MEDIUM=18, // 9
MPH_MEDIUM_FAST=30, // 12
MPH_MEDIUM_FASTER=35, // 14
MPH_FAST=40, // 16
MPH_ROCKET=60, // 24
MPH_VERY_FAST=100, // 40
MPH_LIGHT_SPEED=255 // 100
} MPHType;
/**********************************************************************
** The houses that can be played are listed here. Each has their own
** personality and strengths.
*/
typedef enum HousesType : char {
HOUSE_NONE=-1,
HOUSE_SPAIN, // Gold (unremapped)
HOUSE_GREECE, // LtBlue
HOUSE_USSR, // Red
HOUSE_ENGLAND, // Green
HOUSE_UKRAINE, // Orange
HOUSE_GERMANY, // Grey
HOUSE_FRANCE, // Blue
HOUSE_TURKEY, // Brown
HOUSE_GOOD, // Global Defense Initiative
HOUSE_BAD, // Brotherhood of Nod
HOUSE_NEUTRAL, // Civilians
HOUSE_JP, // Disaster Containment Team
HOUSE_MULTI1, // Multi-Player house #1
HOUSE_MULTI2, // Multi-Player house #2
HOUSE_MULTI3, // Multi-Player house #3
HOUSE_MULTI4, // Multi-Player house #4
HOUSE_MULTI5, // Multi-Player house #5
HOUSE_MULTI6, // Multi-Player house #6
HOUSE_MULTI7, // Multi-Player house #7
HOUSE_MULTI8, // Multi-Player house #8
HOUSE_COUNT,
HOUSE_FIRST=0
} HousesType;
//inline HousesType operator++(HousesType &, int) {return (HousesType)(int;
inline HousesType operator++(HousesType &ht) { ht = (HousesType)(((int)ht)+1); return ht; }
#define HOUSEF_ALLIES (HOUSEF_ENGLAND|HOUSEF_SPAIN|HOUSEF_GREECE|HOUSEF_GERMANY|HOUSEF_FRANCE|HOUSEF_TURKEY|HOUSEF_GOOD)
#define HOUSEF_SOVIET (HOUSEF_USSR|HOUSEF_UKRAINE|HOUSEF_BAD)
#define HOUSEF_OTHERS (HOUSEF_NEUTRAL|HOUSEF_JP|HOUSEF_MULTI1|HOUSEF_MULTI2|HOUSEF_MULTI3|HOUSEF_MULTI4|HOUSEF_MULTI5|HOUSEF_MULTI6|HOUSEF_MULTI7|HOUSEF_MULTI8)
#define HOUSEF_NONE 0
#define HOUSEF_ENGLAND (1L<<HOUSE_ENGLAND)
#define HOUSEF_SPAIN (1L<<HOUSE_SPAIN)
#define HOUSEF_GREECE (1L<<HOUSE_GREECE)
#define HOUSEF_USSR (1L<<HOUSE_USSR)
#define HOUSEF_UKRAINE (1L<<HOUSE_UKRAINE)
#define HOUSEF_GERMANY (1L<<HOUSE_GERMANY)
#define HOUSEF_FRANCE (1L<<HOUSE_FRANCE)
#define HOUSEF_TURKEY (1L<<HOUSE_TURKEY)
#define HOUSEF_GOOD (1L<<HOUSE_GOOD)
#define HOUSEF_BAD (1L<<HOUSE_BAD)
#define HOUSEF_NEUTRAL (1L<<HOUSE_NEUTRAL)
#define HOUSEF_JP (1L<<HOUSE_JP)
#define HOUSEF_MULTI1 (1L<<HOUSE_MULTI1)
#define HOUSEF_MULTI2 (1L<<HOUSE_MULTI2)
#define HOUSEF_MULTI3 (1L<<HOUSE_MULTI3)
#define HOUSEF_MULTI4 (1L<<HOUSE_MULTI4)
#define HOUSEF_MULTI5 (1L<<HOUSE_MULTI5)
#define HOUSEF_MULTI6 (1L<<HOUSE_MULTI6)
#define HOUSEF_MULTI7 (1L<<HOUSE_MULTI7)
#define HOUSEF_MULTI8 (1L<<HOUSE_MULTI8)
typedef enum PlayerColorType : char {
PCOLOR_NONE = -1,
PCOLOR_GOLD,
PCOLOR_LTBLUE,
PCOLOR_RED,
PCOLOR_GREEN,
PCOLOR_ORANGE,
PCOLOR_BLUE, //This is actually the red scheme used in the dialogs
PCOLOR_GREY,
PCOLOR_BROWN,
PCOLOR_TYPE,
PCOLOR_REALLY_BLUE,
PCOLOR_DIALOG_BLUE,
PCOLOR_COUNT,
PCOLOR_FIRST=0,
PCOLOR_LAST=PCOLOR_COUNT-1
} PlayerColorType;
/**********************************************************************
** This enumerates the remap logic to be applied to an object type when
** it appears in the construction sidebar.
*/
typedef enum RemapType : unsigned char {
REMAP_NONE,
REMAP_NORMAL,
REMAP_ALTERNATE
} RemapType;
/**********************************************************************
** These are the types of games that can be played. GDI & NOD are the
** usual human-vs-computer games; 2-Player games are network or modem,
** with 2 players; multi-player games are network with > 2 players.
*/
typedef enum ScenarioPlayerEnum : char
{
SCEN_PLAYER_NONE = -1,
SCEN_PLAYER_SPAIN,
SCEN_PLAYER_GREECE,
SCEN_PLAYER_USSR,
SCEN_PLAYER_JP,
SCEN_PLAYER_2PLAYER,
SCEN_PLAYER_MPLAYER,
SCEN_PLAYER_COUNT,
SCEN_PLAYER_FIRST = 0
} ScenarioPlayerType;
inline ScenarioPlayerType operator++(ScenarioPlayerType &, int);
/**********************************************************************
** These are the directional parameters for a scenario.
*/
typedef enum ScenarioDirEnum : char
{
SCEN_DIR_NONE = -1,
SCEN_DIR_EAST,
SCEN_DIR_WEST,
SCEN_DIR_COUNT,
SCEN_DIR_FIRST = 0
} ScenarioDirType;
inline ScenarioDirType operator++(ScenarioDirType &, int);
/**********************************************************************
** These are the random variations of a scenario.
*/
typedef enum ScenarioVarEnum : char
{
SCEN_VAR_NONE = -1,
SCEN_VAR_A,
SCEN_VAR_B,
SCEN_VAR_C,
SCEN_VAR_D,
SCEN_VAR_COUNT, // comes before the Lose value!
SCEN_VAR_LOSE,
SCEN_VAR_FIRST = 0
} ScenarioVarType;
//inline ScenarioVarType operator++(ScenarioVarType &, int);
inline ScenarioVarType operator++(ScenarioVarType &n) { n = (ScenarioVarType)(((int)n) + 1); return n; }
/**********************************************************************
** The objects to be drawn on the map are grouped into layers. These
** enumerated values specify those layers. The ground layer is sorted
** from back to front.
*/
typedef enum LayerType : char {
LAYER_NONE=-1,
LAYER_SURFACE, // Flat on the ground (no sorting or apparent vertical height).
LAYER_GROUND, // Touching the ground type object (units & buildings).
LAYER_AIR, // Flying above the ground (explosions & flames).
LAYER_TOP, // Topmost layer (aircraft & bullets).
LAYER_COUNT,
LAYER_FIRST=0
} LayerType;
//PG inline LayerType operator++(LayerType &, int);
inline LayerType operator++(LayerType &n) { n = (LayerType)(((int)n) + 1); return n; }
/**********************************************************************
** This enumerates the various bullet types. These types specify bullet's
** visual and explosive characteristics.
*/
typedef enum BulletType : char {
BULLET_NONE=-1,
BULLET_INVISIBLE,
BULLET_CANNON,
BULLET_ACK,
BULLET_TORPEDO,
BULLET_FROG,
BULLET_HEAT_SEEKER,
BULLET_LASER_GUIDED,
BULLET_LOBBED,
BULLET_BOMBLET,
BULLET_BALLISTIC,
BULLET_PARACHUTE,
BULLET_FIREBALL,
BULLET_DOG,
BULLET_CATAPULT,
BULLET_AAMISSILE,
BULLET_GPS_SATELLITE,
BULLET_NUKE_UP,
BULLET_NUKE_DOWN,
BULLET_COUNT,
BULLET_FIRST=0
} BulletType;
//PG inline BulletType operator++(BulletType &, int);
inline BulletType operator++(BulletType &n) { n = (BulletType)(((int)n) + 1); return n; }
/**********************************************************************
** All game buildings (structures) are enumerated here. This includes
** civilian structures as well.
*/
typedef enum StructType : char {
STRUCT_NONE=-1,
STRUCT_ADVANCED_TECH,
STRUCT_IRON_CURTAIN,
STRUCT_WEAP,
STRUCT_CHRONOSPHERE,
STRUCT_PILLBOX,
STRUCT_CAMOPILLBOX,
STRUCT_RADAR,
STRUCT_GAP,
STRUCT_TURRET,
STRUCT_AAGUN,
STRUCT_FLAME_TURRET,
STRUCT_CONST,
STRUCT_REFINERY,
STRUCT_STORAGE,
STRUCT_HELIPAD,
STRUCT_SAM,
STRUCT_AIRSTRIP,
STRUCT_POWER,
STRUCT_ADVANCED_POWER,
STRUCT_SOVIET_TECH,
STRUCT_HOSPITAL,
STRUCT_BARRACKS,
STRUCT_TENT,
STRUCT_KENNEL,
STRUCT_REPAIR,
STRUCT_BIO_LAB,
STRUCT_MISSION,
STRUCT_SHIP_YARD,
STRUCT_SUB_PEN,
STRUCT_MSLO,
STRUCT_FORWARD_COM,
STRUCT_TESLA,
/*
** All buildings that are never used as a prerequisite
** for construction, follow this point. Typically, this is
** limited to civilian structures. Also, the following
** buildings are NEVER used in the availability bit field
** record that each house maintains. i.e., STRUCTF_????
** bit checking will never occur with the following
** building types.
*/
STRUCT_FAKEWEAP,
STRUCT_FAKECONST,
STRUCT_FAKE_YARD,
STRUCT_FAKE_PEN,
STRUCT_FAKE_RADAR,
STRUCT_SANDBAG_WALL,
STRUCT_CYCLONE_WALL,
STRUCT_BRICK_WALL,
STRUCT_BARBWIRE_WALL,
STRUCT_WOOD_WALL,
STRUCT_FENCE,
STRUCT_AVMINE,
STRUCT_APMINE,
STRUCT_V01,
STRUCT_V02,
STRUCT_V03,
STRUCT_V04,
STRUCT_V05,
STRUCT_V06,
STRUCT_V07,
STRUCT_V08,
STRUCT_V09,
STRUCT_V10,
STRUCT_V11,
STRUCT_V12,
STRUCT_V13,
STRUCT_V14,
STRUCT_V15,
STRUCT_V16,
STRUCT_V17,
STRUCT_V18,
STRUCT_PUMP,
STRUCT_V20,
STRUCT_V21,
STRUCT_V22,
STRUCT_V23,
STRUCT_V24,
STRUCT_V25,
STRUCT_V26,
STRUCT_V27,
STRUCT_V28,
STRUCT_V29,
STRUCT_V30,
STRUCT_V31,
STRUCT_V32,
STRUCT_V33,
STRUCT_V34,
STRUCT_V35,
STRUCT_V36,
STRUCT_V37,
STRUCT_BARREL,
STRUCT_BARREL3,
#ifdef FIXIT_ANTS
STRUCT_QUEEN,
STRUCT_LARVA1,
STRUCT_LARVA2,
#endif
STRUCT_COUNT,
STRUCT_FIRST=0
} StructType;
//PG inline StructType operator++(StructType &, int);
inline StructType operator++(StructType &n) { n = (StructType)(((int)n) + 1); return n; }
#define STRUCTF_NONE 0L
#define STRUCTF_ADVANCED_TECH (1L << STRUCT_ADVANCED_TECH)
#define STRUCTF_IRON_CURTAIN (1L << STRUCT_IRON_CURTAIN)
#define STRUCTF_WEAP (1L << STRUCT_WEAP)
#define STRUCTF_CHRONOSPHERE (1L << STRUCT_CHRONOSPHERE)
#define STRUCTF_PILLBOX (1L << STRUCT_PILLBOX)
#define STRUCTF_CAMOPILLBOX (1L << STRUCT_CAMOPILLBOX)
#define STRUCTF_RADAR (1L << STRUCT_RADAR)
#define STRUCTF_GAP (1L << STRUCT_GAP)
#define STRUCTF_TURRET (1L << STRUCT_TURRET)
#define STRUCTF_AAGUN (1L << STRUCT_AAGUN)
#define STRUCTF_FLAME_TURRET (1L << STRUCT_FLAME_TURRET)
#define STRUCTF_CONST (1L << STRUCT_CONST)
#define STRUCTF_REFINERY (1L << STRUCT_REFINERY)
#define STRUCTF_STORAGE (1L << STRUCT_STORAGE)
#define STRUCTF_HELIPAD (1L << STRUCT_HELIPAD)
#define STRUCTF_SAM (1L << STRUCT_SAM)
#define STRUCTF_AIRSTRIP (1L << STRUCT_AIRSTRIP)
#define STRUCTF_POWER (1L << STRUCT_POWER)
#define STRUCTF_ADVANCED_POWER (1L << STRUCT_ADVANCED_POWER)
#define STRUCTF_SOVIET_TECH (1L << STRUCT_SOVIET_TECH)
#define STRUCTF_HOSPITAL (1L << STRUCT_HOSPITAL)
#define STRUCTF_BARRACKS (1L << STRUCT_BARRACKS)
#define STRUCTF_TENT (1L << STRUCT_TENT)
#define STRUCTF_KENNEL (1L << STRUCT_KENNEL)
#define STRUCTF_REPAIR (1L << STRUCT_REPAIR)
#define STRUCTF_BIO_LAB (1L << STRUCT_BIO_LAB)
#define STRUCTF_MISSION (1L << STRUCT_MISSION)
#define STRUCTF_SHIP_YARD (1L << STRUCT_SHIP_YARD)
#define STRUCTF_SUB_PEN (1L << STRUCT_SUB_PEN)
#define STRUCTF_MSLO (1L << STRUCT_MSLO)
#define STRUCTF_FAKECONST (1L << STRUCT_FAKECONST)
#define STRUCTF_FAKEWEAP (1L << STRUCT_FAKEWEAP)
/**********************************************************************
** The overlays are enumerated here. An overlay functions similarly to
** a transparent icon. It is placed over the terrain but usually falls
** "under" buildings, trees, and units.
*/
typedef enum OverlayType : char {
OVERLAY_NONE=-1,
OVERLAY_SANDBAG_WALL, // Piled sandbags.
OVERLAY_CYCLONE_WALL, // Chain-link fence.
OVERLAY_BRICK_WALL, // Solid concrete wall.
OVERLAY_BARBWIRE_WALL, // Barbed-wire wall.
OVERLAY_WOOD_WALL, // Wooden fence.
OVERLAY_GOLD1,
OVERLAY_GOLD2,
OVERLAY_GOLD3,
OVERLAY_GOLD4,
OVERLAY_GEMS1,
OVERLAY_GEMS2,
OVERLAY_GEMS3,
OVERLAY_GEMS4,
OVERLAY_V12, // Haystacks
OVERLAY_V13, // Haystack
OVERLAY_V14, // Wheat field
OVERLAY_V15, // Fallow field
OVERLAY_V16, // Corn field
OVERLAY_V17, // Celery field
OVERLAY_V18, // Potato field
OVERLAY_FLAG_SPOT, // Flag start location.
OVERLAY_WOOD_CRATE, // Wooden goodie crate.
OVERLAY_STEEL_CRATE, // Steel goodie crate.
OVERLAY_FENCE, // New fangled fence.
OVERLAY_WATER_CRATE, // Water goodie crate.
OVERLAY_COUNT,
OVERLAY_FIRST=0
} OverlayType;
//PG inline OverlayType operator++(OverlayType &, int);
/**********************************************************************
** This specifies the infantry in the game. The "E" designation is
** similar to the army classification of enlisted soldiers.
*/
typedef enum InfantryType : char {
INFANTRY_NONE=-1,
INFANTRY_E1, // Mini-gun armed.
INFANTRY_E2, // Grenade thrower.
INFANTRY_E3, // Rocket launcher.
INFANTRY_E4, // Flame thrower equipped.
INFANTRY_RENOVATOR, // Engineer.
INFANTRY_TANYA, // Saboteur.
INFANTRY_SPY, // Spy.
INFANTRY_THIEF, // Thief.
INFANTRY_MEDIC, // Field Medic.
INFANTRY_GENERAL, // Field Marshal.
INFANTRY_DOG, // Soviet attack dog
INFANTRY_C1, // Civilian
INFANTRY_C2, // Civilian
INFANTRY_C3, // Civilian
INFANTRY_C4, // Civilian
INFANTRY_C5, // Civilian
INFANTRY_C6, // Civilian
INFANTRY_C7, // Civilian
INFANTRY_C8, // Civilian
INFANTRY_C9, // Civilian
INFANTRY_C10, // Nikumba
INFANTRY_EINSTEIN, // Einstein
INFANTRY_DELPHI, // Agent "Delphi"
INFANTRY_CHAN, // Dr. Chan
#ifdef FIXIT_CSII // checked - ajw 9/28/98
// CounterStrike II only!
INFANTRY_SHOCK, // Shock Trooper
INFANTRY_MECHANIC,
#endif
INFANTRY_COUNT,
INFANTRY_FIRST=0
#ifdef FIXIT_CSII // checked - ajw 9/28/98
,
INFANTRY_RA_COUNT = INFANTRY_SHOCK
#endif
} InfantryType;
#define INFANTRYF_DOG (1L << INFANTRY_DOG)
//PG inline InfantryType operator++(InfantryType &, int);
/**********************************************************************
** The game units are enumerated here. These include not only traditional
** vehicles, but also hovercraft and gunboats.
*/
typedef enum UnitType : char {
UNIT_NONE=-1,
UNIT_HTANK, // Mammoth tank.
UNIT_MTANK, // Heavy tank.
UNIT_MTANK2, // Medium tank.
UNIT_LTANK, // Light tank ('Bradly').
UNIT_APC, // APC.
UNIT_MINELAYER, // Mine-laying vehicle.
UNIT_JEEP, // 4x4 jeep replacement.
UNIT_HARVESTER, // Resource gathering vehicle.
UNIT_ARTY, // Artillery unit.
UNIT_MRJ, // Mobile Radar Jammer.
UNIT_MGG, // Mobile Gap Generator
UNIT_MCV, // Mobile construction vehicle.
UNIT_V2_LAUNCHER, // V2 rocket launcher.
UNIT_TRUCK, // Convoy truck
#ifdef FIXIT_ANTS
UNIT_ANT1, // Warrior ant.
UNIT_ANT2, // Warrior ant.
UNIT_ANT3, // Warrior ant.
#endif
#ifdef FIXIT_CSII // checked - ajw 9/28/98
// CS II ONLY!
UNIT_CHRONOTANK, // Chrono-shifting tank
UNIT_TESLATANK, // Tesla-equipped tank
UNIT_MAD, // Timequake tank
UNIT_DEMOTRUCK, // Jihad truck
#ifdef FIXIT_PHASETRANSPORT // checked - ajw 9/28/98
UNIT_PHASE, // cloaking APC for special missions
#endif
#endif
UNIT_COUNT,
UNIT_FIRST=0
#ifdef FIXIT_CSII // checked - ajw 9/28/98
,
UNIT_RA_COUNT = UNIT_CHRONOTANK
#endif
} UnitType;
//PG inline UnitType operator++(UnitType &, int);
#define UNITF_HTANK (1L<<UNIT_HTANK)
#define UNITF_MTANK (1L<<UNIT_MTANK)
#define UNITF_MTANK2 (1L<<UNIT_MTANK2)
#define UNITF_LTANK (1L<<UNIT_LTANK)
#define UNITF_STANK (1L<<UNIT_STANK)
#define UNITF_APC (1L<<UNIT_APC)
#define UNITF_MLRS (1L<<UNIT_MLRS)
#define UNITF_JEEP (1L<<UNIT_JEEP)
#define UNITF_HARVESTER (1L<<UNIT_HARVESTER)
#define UNITF_ARTY (1L<<UNIT_ARTY)
#define UNITF_MCV (1L<<UNIT_MCV)
/**********************************************************************
** The naval vessels are enumerated below.
*/
typedef enum VesselType : char {
VESSEL_NONE=-1,
VESSEL_SS, // Submarine
VESSEL_DD, // Medium weapon patrol craft
VESSEL_CA, // Heavy weapon patrol craft
VESSEL_TRANSPORT, // Unit transporter
VESSEL_PT, // Light weapon patrol craft
#ifdef FIXIT_CSII // checked - ajw 9/28/98
// CS II ONLY
VESSEL_MISSILESUB, // Missile-equipped submarine
#endif
#ifdef FIXIT_CARRIER // checked - ajw 9/28/98
VESSEL_CARRIER,
#endif
VESSEL_COUNT,
VESSEL_FIRST=0
#ifdef FIXIT_CSII // checked - ajw 9/28/98
,
VESSEL_RA_COUNT = VESSEL_MISSILESUB
#endif
} VesselType;
//inline VesselType operator++(VesselType &, int);
#define VESSELF_SS (1L<<VESSEL_SS)
#define VESSELF_DD (1L<<VESSEL_DD)
#define VESSELF_CA (1L<<VESSEL_CA)
#define VESSELF_TRANSPORT (1L<<VESSEL_TRANSPORT)
#define VESSELF_PT (1L<<VESSEL_PT)
/**********************************************************************
** The various aircraft types are enumerated here. These include helicopters
** as well as traditional aircraft.
*/
typedef enum AircraftType : char {
AIRCRAFT_TRANSPORT, // Transport helicopter.
AIRCRAFT_BADGER, // Badger bomber.
AIRCRAFT_U2, // Photo recon plane.
AIRCRAFT_MIG, // Mig attack plane.
AIRCRAFT_YAK, // Yak attack plane.
AIRCRAFT_LONGBOW, // Apache gunship.
AIRCRAFT_HIND, // Soviet attach helicopter.
AIRCRAFT_COUNT,
AIRCRAFT_NONE=-1,
AIRCRAFT_FIRST=0
} AircraftType;
#define AIRCRAFTF_TRANSPORT (1L << AIRCRAFT_TRANSPORT)
#define AIRCRAFTF_BADGER (1L << AIRCRAFT_BADGER)
#define AIRCRAFTF_U2 (1L << AIRCRAFT_U2)
#define AIRCRAFTF_MIG (1L << AIRCRAFT_MIG)
#define AIRCRAFTF_YAK (1L << AIRCRAFT_YAK)
#define AIRCRAFTF_LONGBOW (1L << AIRCRAFT_LONGBOW)
#define AIRCRAFTF_HIND (1L << AIRCRAFT_HIND)
//PG inline AircraftType operator++(AircraftType &, int);
/**********************************************************************
** The game templates are enumerated here. These are the underlying
** terrain art. This includes everything from water to cliffs. If the
** terrain is broken up into icons, is not transparent, and is drawn
** as the bottom most layer, then it is a template.
*/
typedef enum TemplateType : unsigned short {
TEMPLATE_CLEAR1,
TEMPLATE_WATER, // This must be the first non-clear template.
TEMPLATE_WATER2,
TEMPLATE_SHORE01,
TEMPLATE_SHORE02,
TEMPLATE_SHORE03,
TEMPLATE_SHORE04,
TEMPLATE_SHORE05,
TEMPLATE_SHORE06,
TEMPLATE_SHORE07,
TEMPLATE_SHORE08,
TEMPLATE_SHORE09,
TEMPLATE_SHORE10,
TEMPLATE_SHORE11,
TEMPLATE_SHORE12,
TEMPLATE_SHORE13,
TEMPLATE_SHORE14,
TEMPLATE_SHORE15,
TEMPLATE_SHORE16,
TEMPLATE_SHORE17,
TEMPLATE_SHORE18,
TEMPLATE_SHORE19,
TEMPLATE_SHORE20,
TEMPLATE_SHORE21,
TEMPLATE_SHORE22,
TEMPLATE_SHORE23,
TEMPLATE_SHORE24,
TEMPLATE_SHORE25,
TEMPLATE_SHORE26,
TEMPLATE_SHORE27,
TEMPLATE_SHORE28,
TEMPLATE_SHORE29,
TEMPLATE_SHORE30,
TEMPLATE_SHORE31,
TEMPLATE_SHORE32,
TEMPLATE_SHORE33,
TEMPLATE_SHORE34,
TEMPLATE_SHORE35,
TEMPLATE_SHORE36,
TEMPLATE_SHORE37,
TEMPLATE_SHORE38,
TEMPLATE_SHORE39,
TEMPLATE_SHORE40,
TEMPLATE_SHORE41,
TEMPLATE_SHORE42,
TEMPLATE_SHORE43,
TEMPLATE_SHORE44,
TEMPLATE_SHORE45,
TEMPLATE_SHORE46,
TEMPLATE_SHORE47,
TEMPLATE_SHORE48,
TEMPLATE_SHORE49,
TEMPLATE_SHORE50,
TEMPLATE_SHORE51,
TEMPLATE_SHORE52,
TEMPLATE_SHORE53,
TEMPLATE_SHORE54,
TEMPLATE_SHORE55,
TEMPLATE_SHORE56,
TEMPLATE_SHORECLIFF01,
TEMPLATE_SHORECLIFF02,
TEMPLATE_SHORECLIFF03,
TEMPLATE_SHORECLIFF04,
TEMPLATE_SHORECLIFF05,
TEMPLATE_SHORECLIFF06,
TEMPLATE_SHORECLIFF07,
TEMPLATE_SHORECLIFF08,
TEMPLATE_SHORECLIFF09,
TEMPLATE_SHORECLIFF10,
TEMPLATE_SHORECLIFF11,
TEMPLATE_SHORECLIFF12,
TEMPLATE_SHORECLIFF13,
TEMPLATE_SHORECLIFF14,
TEMPLATE_SHORECLIFF15,
TEMPLATE_SHORECLIFF16,
TEMPLATE_SHORECLIFF17,
TEMPLATE_SHORECLIFF18,
TEMPLATE_SHORECLIFF19,
TEMPLATE_SHORECLIFF20,
TEMPLATE_SHORECLIFF21,
TEMPLATE_SHORECLIFF22,
TEMPLATE_SHORECLIFF23,
TEMPLATE_SHORECLIFF24,
TEMPLATE_SHORECLIFF25,
TEMPLATE_SHORECLIFF26,
TEMPLATE_SHORECLIFF27,
TEMPLATE_SHORECLIFF28,
TEMPLATE_SHORECLIFF29,
TEMPLATE_SHORECLIFF30,
TEMPLATE_SHORECLIFF31,
TEMPLATE_SHORECLIFF32,
TEMPLATE_SHORECLIFF33,
TEMPLATE_SHORECLIFF34,
TEMPLATE_SHORECLIFF35,
TEMPLATE_SHORECLIFF36,
TEMPLATE_SHORECLIFF37,
TEMPLATE_SHORECLIFF38,
TEMPLATE_BOULDER1,
TEMPLATE_BOULDER2,
TEMPLATE_BOULDER3,
TEMPLATE_BOULDER4,
TEMPLATE_BOULDER5,
TEMPLATE_BOULDER6,
TEMPLATE_PATCH01,
TEMPLATE_PATCH02,
TEMPLATE_PATCH03,
TEMPLATE_PATCH04,
TEMPLATE_PATCH07,
TEMPLATE_PATCH08,
TEMPLATE_PATCH13,
TEMPLATE_PATCH14,
TEMPLATE_PATCH15,
TEMPLATE_RIVER01,
TEMPLATE_RIVER02,
TEMPLATE_RIVER03,
TEMPLATE_RIVER04,
TEMPLATE_RIVER05,
TEMPLATE_RIVER06,
TEMPLATE_RIVER07,
TEMPLATE_RIVER08,
TEMPLATE_RIVER09,
TEMPLATE_RIVER10,
TEMPLATE_RIVER11,
TEMPLATE_RIVER12,
TEMPLATE_RIVER13,
TEMPLATE_FALLS1,
TEMPLATE_FALLS1A,
TEMPLATE_FALLS2,
TEMPLATE_FALLS2A,
TEMPLATE_FORD1,
TEMPLATE_FORD2,
TEMPLATE_BRIDGE1,
TEMPLATE_BRIDGE1D,
TEMPLATE_BRIDGE2,
TEMPLATE_BRIDGE2D,
TEMPLATE_SLOPE01,
TEMPLATE_SLOPE02,
TEMPLATE_SLOPE03,
TEMPLATE_SLOPE04,
TEMPLATE_SLOPE05,
TEMPLATE_SLOPE06,
TEMPLATE_SLOPE07,
TEMPLATE_SLOPE08,
TEMPLATE_SLOPE09,
TEMPLATE_SLOPE10,
TEMPLATE_SLOPE11,
TEMPLATE_SLOPE12,
TEMPLATE_SLOPE13,
TEMPLATE_SLOPE14,
TEMPLATE_SLOPE15,
TEMPLATE_SLOPE16,
TEMPLATE_SLOPE17,
TEMPLATE_SLOPE18,
TEMPLATE_SLOPE19,
TEMPLATE_SLOPE20,
TEMPLATE_SLOPE21,
TEMPLATE_SLOPE22,
TEMPLATE_SLOPE23,
TEMPLATE_SLOPE24,
TEMPLATE_SLOPE25,
TEMPLATE_SLOPE26,
TEMPLATE_SLOPE27,
TEMPLATE_SLOPE28,
TEMPLATE_SLOPE29,
TEMPLATE_SLOPE30,
TEMPLATE_SLOPE31,
TEMPLATE_SLOPE32,
TEMPLATE_SLOPE33,
TEMPLATE_SLOPE34,
TEMPLATE_SLOPE35,
TEMPLATE_SLOPE36,
TEMPLATE_SLOPE37,
TEMPLATE_SLOPE38,
TEMPLATE_ROAD01,
TEMPLATE_ROAD02,
TEMPLATE_ROAD03,
TEMPLATE_ROAD04,
TEMPLATE_ROAD05,
TEMPLATE_ROAD06,
TEMPLATE_ROAD07,
TEMPLATE_ROAD08,
TEMPLATE_ROAD09,
TEMPLATE_ROAD10,
TEMPLATE_ROAD11,
TEMPLATE_ROAD12,
TEMPLATE_ROAD13,
TEMPLATE_ROAD14,
TEMPLATE_ROAD15,
TEMPLATE_ROAD16,
TEMPLATE_ROAD17,
TEMPLATE_ROAD18,
TEMPLATE_ROAD19,
TEMPLATE_ROAD20,
TEMPLATE_ROAD21,
TEMPLATE_ROAD22,
TEMPLATE_ROAD23,
TEMPLATE_ROAD24,
TEMPLATE_ROAD25,
TEMPLATE_ROAD26,
TEMPLATE_ROAD27,
TEMPLATE_ROAD28,
TEMPLATE_ROAD29,
TEMPLATE_ROAD30,
TEMPLATE_ROAD31,
TEMPLATE_ROAD32,
TEMPLATE_ROAD33,
TEMPLATE_ROAD34,
TEMPLATE_ROAD35,
TEMPLATE_ROAD36,
TEMPLATE_ROAD37,
TEMPLATE_ROAD38,
TEMPLATE_ROAD39,
TEMPLATE_ROAD40,
TEMPLATE_ROAD41,
TEMPLATE_ROAD42,
TEMPLATE_ROAD43,
TEMPLATE_ROUGH01,
TEMPLATE_ROUGH02,
TEMPLATE_ROUGH03,
TEMPLATE_ROUGH04,
TEMPLATE_ROUGH05,
TEMPLATE_ROUGH06,
TEMPLATE_ROUGH07,
TEMPLATE_ROUGH08,
TEMPLATE_ROUGH09,
TEMPLATE_ROUGH10,
TEMPLATE_ROUGH11,
TEMPLATE_ROAD44,
TEMPLATE_ROAD45,
TEMPLATE_RIVER14,
TEMPLATE_RIVER15,
TEMPLATE_RIVERCLIFF01,
TEMPLATE_RIVERCLIFF02,
TEMPLATE_RIVERCLIFF03,
TEMPLATE_RIVERCLIFF04,
TEMPLATE_BRIDGE_1A,
TEMPLATE_BRIDGE_1B,
TEMPLATE_BRIDGE_1C,
TEMPLATE_BRIDGE_2A,
TEMPLATE_BRIDGE_2B,
TEMPLATE_BRIDGE_2C,
TEMPLATE_BRIDGE_3A,
TEMPLATE_BRIDGE_3B,
TEMPLATE_BRIDGE_3C,
TEMPLATE_BRIDGE_3D,
TEMPLATE_BRIDGE_3E,
TEMPLATE_BRIDGE_3F,
TEMPLATE_F01,
TEMPLATE_F02,
TEMPLATE_F03,
TEMPLATE_F04,
TEMPLATE_F05,
TEMPLATE_F06,
// Custom interior pieces.
TEMPLATE_ARRO0001,
TEMPLATE_ARRO0002,
TEMPLATE_ARRO0003,
TEMPLATE_ARRO0004,
TEMPLATE_ARRO0005,
TEMPLATE_ARRO0006,
TEMPLATE_ARRO0007,
TEMPLATE_ARRO0008,
TEMPLATE_ARRO0009,
TEMPLATE_ARRO0010,
TEMPLATE_ARRO0011,
TEMPLATE_ARRO0012,
TEMPLATE_ARRO0013,
TEMPLATE_ARRO0014,
TEMPLATE_ARRO0015,
TEMPLATE_FLOR0001,
TEMPLATE_FLOR0002,
TEMPLATE_FLOR0003,
TEMPLATE_FLOR0004,
TEMPLATE_FLOR0005,
TEMPLATE_FLOR0006,
TEMPLATE_FLOR0007,
TEMPLATE_GFLR0001,
TEMPLATE_GFLR0002,
TEMPLATE_GFLR0003,
TEMPLATE_GFLR0004,
TEMPLATE_GFLR0005,
TEMPLATE_GSTR0001,
TEMPLATE_GSTR0002,
TEMPLATE_GSTR0003,
TEMPLATE_GSTR0004,
TEMPLATE_GSTR0005,
TEMPLATE_GSTR0006,
TEMPLATE_GSTR0007,
TEMPLATE_GSTR0008,
TEMPLATE_GSTR0009,
TEMPLATE_GSTR0010,
TEMPLATE_GSTR0011,
TEMPLATE_LWAL0001,
TEMPLATE_LWAL0002,
TEMPLATE_LWAL0003,
TEMPLATE_LWAL0004,
TEMPLATE_LWAL0005,
TEMPLATE_LWAL0006,
TEMPLATE_LWAL0007,
TEMPLATE_LWAL0008,
TEMPLATE_LWAL0009,
TEMPLATE_LWAL0010,
TEMPLATE_LWAL0011,
TEMPLATE_LWAL0012,
TEMPLATE_LWAL0013,
TEMPLATE_LWAL0014,
TEMPLATE_LWAL0015,
TEMPLATE_LWAL0016,
TEMPLATE_LWAL0017,
TEMPLATE_LWAL0018,
TEMPLATE_LWAL0019,
TEMPLATE_LWAL0020,
TEMPLATE_LWAL0021,
TEMPLATE_LWAL0022,
TEMPLATE_LWAL0023,
TEMPLATE_LWAL0024,
TEMPLATE_LWAL0025,
TEMPLATE_LWAL0026,
TEMPLATE_LWAL0027,
TEMPLATE_STRP0001,
TEMPLATE_STRP0002,
TEMPLATE_STRP0003,
TEMPLATE_STRP0004,
TEMPLATE_STRP0005,
TEMPLATE_STRP0006,
TEMPLATE_STRP0007,
TEMPLATE_STRP0008,
TEMPLATE_STRP0009,
TEMPLATE_STRP0010,
TEMPLATE_STRP0011,
TEMPLATE_WALL0001,
TEMPLATE_WALL0002,
TEMPLATE_WALL0003,
TEMPLATE_WALL0004,
TEMPLATE_WALL0005,
TEMPLATE_WALL0006,
TEMPLATE_WALL0007,
TEMPLATE_WALL0008,
TEMPLATE_WALL0009,
TEMPLATE_WALL0010,
TEMPLATE_WALL0011,
TEMPLATE_WALL0012,
TEMPLATE_WALL0013,
TEMPLATE_WALL0014,
TEMPLATE_WALL0015,
TEMPLATE_WALL0016,
TEMPLATE_WALL0017,
TEMPLATE_WALL0018,
TEMPLATE_WALL0019,
TEMPLATE_WALL0020,
TEMPLATE_WALL0021,
TEMPLATE_WALL0022,
TEMPLATE_WALL0023,
TEMPLATE_WALL0024,
TEMPLATE_WALL0025,
TEMPLATE_WALL0026,
TEMPLATE_WALL0027,
TEMPLATE_WALL0028,
TEMPLATE_WALL0029,
TEMPLATE_WALL0030,
TEMPLATE_WALL0031,
TEMPLATE_WALL0032,
TEMPLATE_WALL0033,
TEMPLATE_WALL0034,
TEMPLATE_WALL0035,
TEMPLATE_WALL0036,
TEMPLATE_WALL0037,
TEMPLATE_WALL0038,
TEMPLATE_WALL0039,
TEMPLATE_WALL0040,
TEMPLATE_WALL0041,
TEMPLATE_WALL0042,
TEMPLATE_WALL0043,
TEMPLATE_WALL0044,
TEMPLATE_WALL0045,
TEMPLATE_WALL0046,
TEMPLATE_WALL0047,
TEMPLATE_WALL0048,
TEMPLATE_WALL0049,
TEMPLATE_BRIDGE1H,
TEMPLATE_BRIDGE2H,
TEMPLATE_BRIDGE_1AX,
TEMPLATE_BRIDGE_2AX,
TEMPLATE_BRIDGE1X,
TEMPLATE_BRIDGE2X,
TEMPLATE_XTRA0001,
TEMPLATE_XTRA0002,
TEMPLATE_XTRA0003,
TEMPLATE_XTRA0004,
TEMPLATE_XTRA0005,
TEMPLATE_XTRA0006,
TEMPLATE_XTRA0007,
TEMPLATE_XTRA0008,
TEMPLATE_XTRA0009,
TEMPLATE_XTRA0010,
TEMPLATE_XTRA0011,
TEMPLATE_XTRA0012,
TEMPLATE_XTRA0013,
TEMPLATE_XTRA0014,
TEMPLATE_XTRA0015,
TEMPLATE_XTRA0016,
#ifdef FIXIT_ANTS
TEMPLATE_HILL01,
#endif
TEMPLATE_COUNT,
TEMPLATE_NONE=65535,
TEMPLATE_FIRST=0
} TemplateType;
//PG inline TemplateType operator++(TemplateType &, int);
inline TemplateType operator++(TemplateType &n) { n = (TemplateType)(((int)n) + 1); return n; }
/**********************************************************************
** The three dimensional terrain objects are enumerated here. These
** objects function similar to buildings in that they can be driven
** behind and can take damage on an individual basis.
*/
typedef enum TerrainType : char {
TERRAIN_NONE=-1,
TERRAIN_TREE1,
TERRAIN_TREE2,
TERRAIN_TREE3,
TERRAIN_TREE5,
TERRAIN_TREE6,
TERRAIN_TREE7,
TERRAIN_TREE8,
TERRAIN_TREE10,
TERRAIN_TREE11,
TERRAIN_TREE12,
TERRAIN_TREE13,
TERRAIN_TREE14,
TERRAIN_TREE15,
TERRAIN_TREE16,
TERRAIN_TREE17,
TERRAIN_CLUMP1,
TERRAIN_CLUMP2,
TERRAIN_CLUMP3,
TERRAIN_CLUMP4,
TERRAIN_CLUMP5,
TERRAIN_ICE01,
TERRAIN_ICE02,
TERRAIN_ICE03,
TERRAIN_ICE04,
TERRAIN_ICE05,
TERRAIN_BOXES01,
TERRAIN_BOXES02,
TERRAIN_BOXES03,
TERRAIN_BOXES04,
TERRAIN_BOXES05,
TERRAIN_BOXES06,
TERRAIN_BOXES07,
TERRAIN_BOXES08,
TERRAIN_BOXES09,
TERRAIN_MINE,
TERRAIN_COUNT,
TERRAIN_FIRST=0
} TerrainType;
//PG inline TerrainType operator++(TerrainType &, int);
/**********************************************************************
** Smudges are enumerated here. Smudges are transparent icons that are
** drawn over the underlying terrain in order to give the effect of
** alterations to the terrain. Craters are a good example of this.
*/
typedef enum SmudgeType : char {
SMUDGE_NONE=-1,
SMUDGE_CRATER1,
SMUDGE_CRATER2,
SMUDGE_CRATER3,
SMUDGE_CRATER4,
SMUDGE_CRATER5,
SMUDGE_CRATER6,
SMUDGE_SCORCH1,
SMUDGE_SCORCH2,
SMUDGE_SCORCH3,
SMUDGE_SCORCH4,
SMUDGE_SCORCH5,
SMUDGE_SCORCH6,
SMUDGE_BIB1,
SMUDGE_BIB2,
SMUDGE_BIB3,
SMUDGE_COUNT,
SMUDGE_FIRST=0
} SmudgeType;
//PG inline SmudgeType operator++(SmudgeType &, int);
/**********************************************************************
** Animations are enumerated here. Animations are the high speed and
** short lived effects that occur with explosions and fire.
*/
typedef enum AnimType : char {
ANIM_NONE=-1,
ANIM_FBALL1, // Large fireball explosion (bulges rightward).
ANIM_FBALL_FADE, // Fading fireball puff.
ANIM_FRAG1, // Medium fragment throwing explosion -- short decay.
ANIM_VEH_HIT1, // Small fireball explosion (bulges rightward).
ANIM_VEH_HIT2, // Small fragment throwing explosion -- pop & sparkles.
ANIM_VEH_HIT3, // Small fragment throwing explosion -- burn/exp mix.
ANIM_ART_EXP1, // Large fragment throwing explosion -- many sparkles.
ANIM_NAPALM1, // Small napalm burn.
ANIM_NAPALM2, // Medium napalm burn.
ANIM_NAPALM3, // Large napalm burn.
ANIM_SMOKE_PUFF, // Small rocket smoke trail puff.
ANIM_PIFF, // Machine gun impact piffs.
ANIM_PIFFPIFF, // Chaingun impact piffs.
ANIM_FIRE_SMALL, // Small flame animation.
ANIM_FIRE_MED, // Medium flame animation.
ANIM_FIRE_MED2, // Medium flame animation (oranger).
ANIM_FIRE_TINY, // Very tiny flames.
ANIM_MUZZLE_FLASH, // Big cannon flash (with translucency).
ANIM_SMOKE_M, // Smoke rising from ground.
ANIM_BURN_SMALL, // Small combustible fire effect (with trail off).
ANIM_BURN_MED, // Medium combustible fire effect (with trail off).
ANIM_BURN_BIG, // Large combustible fire effect (with trail off).
ANIM_ON_FIRE_SMALL, // Burning effect for buildings.
ANIM_ON_FIRE_MED, // Burning effect for buildings.
ANIM_ON_FIRE_BIG, // Burning effect for buildings.
ANIM_SAM_N,
ANIM_SAM_NE,
ANIM_SAM_E,
ANIM_SAM_SE,
ANIM_SAM_S,
ANIM_SAM_SW,
ANIM_SAM_W,
ANIM_SAM_NW,
ANIM_GUN_N,
ANIM_GUN_NE,
ANIM_GUN_E,
ANIM_GUN_SE,
ANIM_GUN_S,
ANIM_GUN_SW,
ANIM_GUN_W,
ANIM_GUN_NW,
ANIM_LZ_SMOKE,
ANIM_CRATE_DEVIATOR, // Red finned missile.
ANIM_CRATE_DOLLAR, // Dollar sign.
ANIM_CRATE_EARTH, // Cracked Earth.
ANIM_CRATE_EMPULSE, // Plasma ball.
ANIM_CRATE_INVUN, // Orange sphere with green rings.
ANIM_CRATE_MINE, // Spiked mine.
ANIM_CRATE_RAPID, // Red skull.
ANIM_CRATE_STEALTH, // Cloaking sphere.
ANIM_CRATE_MISSILE, // Green finned missile.
ANIM_MOVE_FLASH,
ANIM_OILFIELD_BURN,
ANIM_ELECT_DIE, // Electrocution infantryman death from Tesla coil
ANIM_PARACHUTE, // Parachute (designed to be attached to object).
ANIM_DOG_ELECT_DIE, // Electrocution dog death from Tesla coil
ANIM_CORPSE1,
ANIM_CORPSE2,
ANIM_CORPSE3,
ANIM_SPUTDOOR,
ANIM_ATOM_BLAST,
ANIM_CHRONO_BOX,
ANIM_GPS_BOX,
ANIM_INVUL_BOX,
ANIM_PARA_BOX,
ANIM_SONAR_BOX,
ANIM_TWINKLE1,
ANIM_TWINKLE2,
ANIM_TWINKLE3,
ANIM_FLAK,
ANIM_WATER_EXP1,
ANIM_WATER_EXP2,
ANIM_WATER_EXP3,
ANIM_CRATE_ARMOR,
ANIM_CRATE_SPEED,
ANIM_CRATE_FPOWER,
ANIM_CRATE_TQUAKE,
ANIM_PARA_BOMB,
ANIM_MINE_EXP1,
Command & Conquer Remastered post-launch patch Improvements to harvester resource finding logic. Don't allow the Advanced Comm Center to be capturable in skirmish or multiplayer. Increased failed pathfinding fudge factor. Buildings accept the Guard command if they can attack. Don't allow force capturing of ally structures. Fixes for laser Orcas in S3cr3t M1ss10n. Properly restore them after save. Reset Orcas after loads. Fixed flag animation rendering in CTF. Potentially fix a crash if aircraft are destroyed outside the map bounds. Fixed legacy Obelisk line rendering. Fix out-of-bounds crash in TD; issue was already fixed in RA. Disable capture flag on Commandos. Drop the flag when entering the limbo state. Fixed end game race condition, winning team ID is always sent before individual player win/lose messages. Fixed Chan spawn on SCB10EA. Don't show enter cursor for enemy units on refineries and repair pads. Changing right-click support for first put building on hold, and then subsequenct right-clicks to decrement that queue count for 1x or 5x; Then, 1x or 5x Left click will resume from hold. Don't debug reveal legacy rendering when a player is defeated. Fixed crash when loading saves of custom campaign maps. Reset harvester archived target when given a direct harvest order. Prevent NOD cargo planes from being force attacked. Fixed unit selection on load. Migrated queued repair pad functionality from RA to TD. Randomly animate infantry in area guard mode. Fixed crash accessing inactive objects. Added some walls in SCG08EB to prevent civilians from killing themselves. TD + RA: Audio: Overiding "Our base is under attack" cooldown timing from legacy from 2 minutes to 30 seconds, so it will be heard 4x as often. Fixed adjacent cell out-of-bounds crash issues. Kill player on disconnect Fixed and improved build time calculations to be consistent between TD and RA. Don't show health bars for cloaked Stealth Tanks in the legacy renderer. Fix selection of individual control groups after mixed selection. More adjustments to SCG08EB; switch C7 to C5, and add civilian AI to avoid Tiberium. Extra safety checks for units that have no weapons and aircraft that can't hunt. Fix loading of multiple infantry onto an APC. Additional safety checks for invalid coordinates. Prevent units from being instantly repaired. Fix map passability. Fail Allied mission 5B if the spy re-boards the starting transport (matches 5A and 5C behavior). Fixed multiplayer formation move causing units to move at light speed. Ignore movement destination checks if a unit is part of a mission-driven team. Fix buffer overrun crash. Ignore mines when determining win conditions. Fixed river passability in Blue Lakes.
2020-06-23 04:43:21 +12:00
ANIM_FLAG,
ANIM_BEACON,
#ifdef FIXIT_ANTS
ANIM_ANT1_DEATH,
ANIM_ANT2_DEATH,
ANIM_ANT3_DEATH,
#endif
ANIM_FIRE_SMALL_VIRTUAL, // Small flame animation.
ANIM_FIRE_MED_VIRTUAL, // Medium flame animation.
ANIM_FIRE_MED2_VIRTUAL, // Medium flame animation (oranger).
ANIM_FIRE_TINY_VIRTUAL, // Very tiny flames.
ANIM_BEACON_VIRTUAL, // Beacon (virtual).
ANIM_COUNT,
ANIM_FIRST=0
} AnimType;
inline AnimType operator++(AnimType &, int);
/****************************************************************************
** Infantry can be performing various activities. These can range from simple
** idle animations to physical hand to hand combat.
*/
typedef enum DoType : char {
DO_NOTHING=-1, // Not performing any choreographed sequence.
DO_STAND_READY=0,
DO_STAND_GUARD,
DO_PRONE,
DO_WALK,
DO_FIRE_WEAPON,
DO_LIE_DOWN,
DO_CRAWL,
DO_GET_UP,
DO_FIRE_PRONE,
DO_IDLE1,
DO_IDLE2,
DO_GUN_DEATH,
DO_EXPLOSION_DEATH,
DO_EXPLOSION2_DEATH,
DO_GRENADE_DEATH,
DO_FIRE_DEATH,
DO_GESTURE1,
DO_SALUTE1,
DO_GESTURE2,
DO_SALUTE2,
DO_DOG_MAUL,
DO_COUNT,
DO_FIRST=0
} DoType;
inline DoType operator++(DoType &, int);
/*
** This structure is associated with each maneuver type. It tells whether the
** maneuver can be interrupted and the frame rate.
*/
typedef struct {
unsigned Interrupt:1; // Can it be interrupted?
unsigned IsMobile:1; // Can it move while doing this?
unsigned RandomStart:1; // Should animation be "randomized"?
unsigned char Rate; // Frame rate.
} DoStruct;
typedef struct {
int Frame; // Starting frame of the animation.
unsigned char Count; // Number of frames of animation.
unsigned char Jump; // Frames to jump between facings.
} DoInfoStruct;
/****************************************************************************
** These are the various radio message that can be transmitted between
** units and buildings. Some of these require a response from the receiver
** and some don't.
*/
typedef enum RadioMessageType : unsigned char {
RADIO_STATIC, // "hisssss" -- non-message
RADIO_ROGER, // "Roger."
RADIO_HELLO, // "Come in. I wish to talk."
RADIO_OVER_OUT, // "Something came up, bye."
RADIO_PICK_UP, // "Please pick me up."
RADIO_ATTACH, // "Attach to transport."
RADIO_DELIVERY, // "I've got a delivery for you."
RADIO_HOLD_STILL, // "I'm performing load/unload maneuver. Be careful."
RADIO_UNLOADED, // "I'm clear."
RADIO_UNLOAD, // "You are clear to unload. Please start driving off now."
RADIO_NEGATIVE, // "Am unable to comply."
RADIO_BUILDING, // "I'm starting construction now... act busy."
RADIO_COMPLETE, // "I've finished construction. You are free."
RADIO_REDRAW, // "Oops, sorry. I might have bumped you a little."
RADIO_DOCKING, // "I'm trying to load up now."
RADIO_CAN_LOAD, // "May I become a passenger?"
RADIO_ARE_REFINERY, // "Are you a refinery ready to take shipment?"
RADIO_TRYING_TO_LOAD, // "Are you trying to become a passenger?"
RADIO_MOVE_HERE, // "Move to location X."
RADIO_NEED_TO_MOVE, // "Do you need to move somewhere?"
RADIO_YEA_NOW_WHAT, // "All right already. Now what?"
RADIO_IM_IN, // "I'm a passenger now."
RADIO_BACKUP_NOW, // "Begin backup into refinery now."
RADIO_RUN_AWAY, // "Run away! Run away!"
RADIO_TETHER, // "Establish tether contact."
RADIO_UNTETHER, // "Break tether contact."
RADIO_REPAIR, // "Repair one step."
RADIO_PREPARED, // "Are you prepared to fight?"
RADIO_ATTACK_THIS, // "Attack this target please."
RADIO_RELOAD, // "Reload one step please."
RADIO_CANT, // "Circumstances prevent success."
RADIO_ALL_DONE, // "I have completed the task."
RADIO_NEED_REPAIR, // "Are you in need of service depot work?"
RADIO_ON_DEPOT, // "Are you sitting on a service depot?"
RADIO_COUNT
} RadioMessageType;
/****************************************************************************
** Various trigger events and actions require additional data. This enumeration is
** used to indicate what kind of additional data is required. This is also used
** for team mission types that might need additional data.
*/
typedef enum NeedType : unsigned char {
NEED_NONE, // No additional data is required.
NEED_THEME, // Need a musical theme.
NEED_MOVIE, // Need a movie to play.
NEED_SOUND, // Sound effect.
NEED_SPEECH, // Speech from EVA.
NEED_INFANTRY, // Infantry type class.
NEED_UNIT, // Unit type class.
NEED_AIRCRAFT, // Aircraft type class.
NEED_STRUCTURE, // Structure type class.
NEED_WAYPOINT, // Waypoint letter.
NEED_NUMBER, // General number.
NEED_TRIGGER, // Trigger object reference.
NEED_TEAM, // Team type class.
NEED_HOUSE, // House type number.
NEED_TIME, // Time delay value required.
NEED_QUARRY, // Quarry type is needed.
NEED_FORMATION, // A formation type is needed.
NEED_BOOL, // Boolean value is needed.
NEED_SPECIAL, // Special weapon ability.
NEED_MISSION, // General unit mission type.
NEED_HEX_NUMBER // General number.
} NeedType;
/****************************************************************************
** There are various target types that teams and special weapons can be
** assigned to attack. These are general target categories since the actual
** disposition of potential targets cannot be precisely predicted -- thus these
** serve as guidelines for the computer AI.
*/
typedef enum QuarryType : unsigned char {
QUARRY_NONE,
QUARRY_ANYTHING, // Attack any enemy (same as "hunt").
QUARRY_BUILDINGS, // Attack buildings (in general).
QUARRY_HARVESTERS, // Attack harvesters or refineries.
QUARRY_INFANTRY, // Attack infantry.
QUARRY_VEHICLES, // Attack combat vehicles.
QUARRY_VESSELS, // Attach ships.
QUARRY_FACTORIES, // Attack factories (all types).
QUARRY_DEFENSE, // Attack base defense buildings.
QUARRY_THREAT, // Attack enemies near friendly base.
QUARRY_POWER, // Attack power facilities.
QUARRY_FAKES, // Prefer to attack fake buildings.
QUARRY_COUNT,
QUARRY_FIRST=0
} QuarryType;
/****************************************************************************
** Teams can be assigned formations. This specifies the various formations that
** a team can be composed into.
*/
typedef enum FormationType : unsigned char {
FORMATION_NONE,
FORMATION_TIGHT, // Tight grouping (vulnerable units in center).
FORMATION_LOOSE, // Loose grouping (one cell separation between units).
FORMATION_WEDGE_N, // Wedge shape.
FORMATION_WEDGE_E, // Wedge shape.
FORMATION_WEDGE_S, // Wedge shape.
FORMATION_WEDGE_W, // Wedge shape.
FORMATION_LINE_NS, // Column formation.
FORMATION_LINE_EW, // Line formation.
FORMATION_COUNT,
FORMATION_FIRST=0
} FormationType;
/****************************************************************************
** Selected units have a special selected unit box around them. These are the
** defines for the two types of selected unit boxes. One is for infantry and
** the other is for regular units.
*/
typedef enum SelectEnum : char {
SELECT_NONE=-1,
SELECT_INFANTRY, // Small infantry selection box.
SELECT_UNIT, // Big unit selection box.
SELECT_BUILDING=SELECT_UNIT, // Custom box for buildings.
SELECT_TERRAIN=SELECT_UNIT, // Custom box for terrain objects.
SELECT_WRENCH, // A building is repairing overlay graphic.
SELECT_COUNT
} SelectEnum;
/****************************************************************************
** The pip shapes and text shapes are enumerated according to the following
** type. These special shapes are drawn over special objects or in other places
** where shape technology is needed.
*/
typedef enum PipEnum : unsigned char
{
PIP_EMPTY, // Empty pip spot.
PIP_FULL, // Full pip spot.
PIP_PRIMARY, // "Primary" building marker.
PIP_READY, // "Ready" construction information tag.
PIP_HOLDING, // "Hold"ing construction information tag.
PIP_ENGINEER, // Full pip with engineer coloring.
PIP_CIVILIAN, // Full pip with civilian coloring.
PIP_COMMANDO, // Full pip with commando coloring.
PIP_NUMBERS, // digit 0
PIP_NUMBER1, // digit 1
PIP_NUMBER2, // digit 2
PIP_NUMBER3, // digit 3
PIP_NUMBER4, // digit 4
PIP_NUMBER5, // digit 5
PIP_NUMBER6, // digit 6
PIP_NUMBER7, // digit 7
PIP_NUMBER8, // digit 8
PIP_NUMBER9, // digit 9
PIP_DECOY, // word "Decoy" for fake buildings
PIP_LETTERF, // letter 'F' for signifying in-formation
PIP_MEDIC, // Little medic red cross.
PIP_PRI // Abbreviated "Primary" for kennel
} PipEnum;
/****************************************************************************
** The radar map can be in one of several states depending on the presense of
** certain structures and power levels.
*/
typedef enum RadarEnum : unsigned char
{
RADAR_NONE, // Radar map doesn't exist at all
RADAR_OFF, // Radar map is present, but displayed as off and non-interactive
RADAR_ON // Radar map is present, visible, and fully interactive
} RadarEnum;
/****************************************************************************
** The mouse cursor can be in different states. These states are listed
** below. Some of these represent animating mouse cursors. The mouse
** is controlled by passing one of these values to the appropriate
** MouseClass member function.
*/
typedef enum MouseType : unsigned char
{
MOUSE_NORMAL,
MOUSE_N,
MOUSE_NE,
MOUSE_E,
MOUSE_SE,
MOUSE_S,
MOUSE_SW,
MOUSE_W,
MOUSE_NW,
MOUSE_NO_N,
MOUSE_NO_NE,
MOUSE_NO_E,
MOUSE_NO_SE,
MOUSE_NO_S,
MOUSE_NO_SW,
MOUSE_NO_W,
MOUSE_NO_NW,
MOUSE_NO_MOVE,
MOUSE_CAN_MOVE,
MOUSE_ENTER,
MOUSE_DEPLOY,
MOUSE_CAN_SELECT,
MOUSE_CAN_ATTACK,
MOUSE_SELL_BACK,
MOUSE_SELL_UNIT,
MOUSE_REPAIR,
MOUSE_NO_REPAIR,
MOUSE_NO_SELL_BACK,
MOUSE_RADAR_CURSOR,
MOUSE_NUCLEAR_BOMB,
MOUSE_AIR_STRIKE,
MOUSE_DEMOLITIONS,
MOUSE_AREA_GUARD,
MOUSE_HEAL,
MOUSE_DAMAGE, // Engineer entering building to damage it.
MOUSE_GREPAIR, // Engineer entering friendly building to heal it.
MOUSE_STAY_ATTACK,
MOUSE_NO_DEPLOY,
MOUSE_NO_ENTER,
MOUSE_NO_GREPAIR,
MOUSE_CHRONO_SELECT,
MOUSE_CHRONO_DEST,
MOUSE_COUNT
} MouseType;
/**********************************************************************
** This structure is used to control the box relief style drawn by
** the Draw_Box() function.
*/
typedef struct {
int Filler; // Center box fill color.
int Shadow; // Shadow color (darker).
int Highlight; // Highlight color (lighter).
int Corner; // Corner color (transition).
} BoxStyleType;
typedef enum BoxStyleEnum : unsigned char {
BOXSTYLE_DOWN, // Typical depressed edge border.
BOXSTYLE_RAISED, // Typical raised edge border.
BOXSTYLE_DIS_DOWN, // Disabled but depressed.
BOXSTYLE_DIS_RAISED, // Disabled but raised.
BOXSTYLE_BOX, // list box.
BOXSTYLE_BORDER, // main dialog box.
BOXSTYLE_COUNT
} BoxStyleEnum;
/**********************************************************************
** Damage, as inflicted by projectiles, has different characteristics.
** These are the different "warhead" types that can be assigned to the
** various projectiles in the game.
*/
typedef enum WarheadType : char {
WARHEAD_NONE=-1,
WARHEAD_SA, // Small arms -- good against infantry.
WARHEAD_HE, // High explosive -- good against buildings & infantry.
WARHEAD_AP, // Armor piercing -- good against armor.
WARHEAD_FIRE, // Incendiary -- Good against flammables.
WARHEAD_HOLLOW_POINT, // Sniper bullet type.
WARHEAD_TESLA, // Electrocution warhead for infantrymen
WARHEAD_DOG, // Slavering attack beast mauling infantryman
WARHEAD_NUKE, // Nuclear missile
#ifdef FIXIT_CSII // checked - ajw 9/28/98
WARHEAD_MECHANICAL, // repair weapon for vehicles
#endif
WARHEAD_COUNT,
WARHEAD_FIRST=0
} WarheadType;
/**********************************************************************
** This enumerates the various weapon types. The weapon is characterized
** by the projectile it launches, the damage it does, and the rate of
** fire.
*/
typedef enum WeaponType : char {
WEAPON_NONE=-1,
WEAPON_COLT45,
WEAPON_ACK_ACK,
WEAPON_VULCAN,
WEAPON_MAVERICK,
WEAPON_CAMERA,
WEAPON_FIREBALL,
WEAPON_RIFLE,
WEAPON_CHAIN_GUN,
WEAPON_PISTOL,
WEAPON_M16,
WEAPON_DRAGON,
WEAPON_HELLFIRE,
WEAPON_GRENADE,
WEAPON_75MM,
WEAPON_90MM,
WEAPON_105MM,
WEAPON_120MM,
WEAPON_TURRET_GUN,
WEAPON_MAMMOTH_TUSK,
WEAPON_155MM,
WEAPON_M60MG,
WEAPON_NAPALM,
WEAPON_TESLA_ZAP,
WEAPON_NIKE,
WEAPON_8INCH,
WEAPON_STINGER,
WEAPON_TORPEDO,
WEAPON_2INCH,
WEAPON_DEPTH_CHARGE,
WEAPON_PARA_BOMB,
WEAPON_DOGJAW,
WEAPON_HEAL,
WEAPON_SCUD,
WEAPON_FLAMER,
WEAPON_REDEYE,
#ifdef FIXIT_ANTS
WEAPON_MANDIBLE,
#endif
#ifdef FIXIT_CSII // checked - ajw 9/28/98
WEAPON_PORTATESLA,
WEAPON_GOODWRENCH,
WEAPON_SUBSCUD,
WEAPON_TTANKZAP,
WEAPON_APTUSK,
WEAPON_DEMOCHARGE,
#endif
#ifdef FIXIT_CARRIER // checked - ajw 9/28/98
WEAPON_CARRIER,
#endif
WEAPON_COUNT,
WEAPON_FIRST=0
} WeaponType;
/**********************************************************************
** The various armor types are best suited to defend against a limited
** kind of warheads. The game strategy revolves around proper
** combination of armor and weaponry. Each vehicle or building has armor
** rated according to one of the following types.
*/
typedef enum ArmorType : unsigned char {
ARMOR_NONE, // Vulnerable to SA and HE.
ARMOR_WOOD, // Vulnerable to HE and Fire.
ARMOR_ALUMINUM, // Vulnerable to AP and SA.
ARMOR_STEEL, // Vulnerable to AP.
ARMOR_CONCRETE, // Vulnerable to HE and AP.
ARMOR_COUNT,
ARMOR_FIRST=0
} ArmorType;
/**********************************************************************
** These are the identifiers for the various monochrome debug screens.
*/
typedef enum DMonoType : unsigned char {
DMONO_OBJECT,
DMONO_HOUSE,
DMONO_STRESS,
DMONO_EVENTS,
DMONO_COUNT,
DMONO_FIRST=0
} DMonoType;
/*
** Performance benchmark tracking identifiers.
*/
typedef enum BenchType : unsigned char {
BENCH_GAME_FRAME, // Whole game frame (used for normalizing).
BENCH_FINDPATH, // Find path calls.
BENCH_GREATEST_THREAT, // Greatest threat calculation.
BENCH_AI, // Object AI calls.
BENCH_CELL, // Cell draw it function.
BENCH_SIDEBAR, // Sidebar (just cameo section) drawing.
BENCH_RADAR, // Radar map drawing.
BENCH_TACTICAL, // Whole tactical map.
BENCH_PCP, // Per cell process.
BENCH_EVAL_OBJECT, // Evaluate object as potential target.
BENCH_EVAL_CELL, // Evaluate entire cell for potential targets.
BENCH_EVAL_WALL, // Evaluate wall in cell as potential target.
BENCH_POWER, // Power bar drawing.
BENCH_TABS, // Tab section (top) drawing.
BENCH_SHROUD, // Shroud layer drawing.
BENCH_ANIMS, // Animations drawing.
BENCH_OBJECTS, // All game object drawing.
BENCH_PALETTE, // Color cycling palette adjustments.
BENCH_GSCREEN_RENDER, // Rendering of the whole map layered system (with blits).
BENCH_BLIT_DISPLAY, // DirectX or shadow blit of hidpage to seenpage.
BENCH_MISSION, // Mission list processing.
BENCH_RULES, // Processing of the rules.ini file.
BENCH_SCENARIO, // Processing of the scenario.ini file.
BENCH_COUNT,
BENCH_FIRST=0
} BenchType;
#ifdef CHEAT_KEYS
#define BStart(a) if (Benches != NULL) Benches[a].Begin()
#define BEnd(a) if (Benches != NULL) Benches[a].End()
#else
#define BStart(a)
#define BEnd(a)
#endif
/**********************************************************************
** Working MCGA colors that give a pleasing effect for beveled edges and
** other purposes.
*/
#define MAGIC_COL_COUNT 13 // Translucent color count.
#define SHADOW_COL_COUNT 4 // Terrain shroud translucent color count.
#define USHADOW_COL_COUNT 1 // Unit shadow special ghost colors.
/**********************************************************************
** Color cycling range that is used for water effects.
*/
#define CYCLE_COLOR_START (6*16)
#define CYCLE_COLOR_COUNT 7
/**********************************************************************
** Magic color fading pulsing effect limits -- color gun value.
*/
#define CC_PULSE_COLOR 255
#define CC_EMBER_COLOR (CYCLE_COLOR_START+CYCLE_COLOR_COUNT)
/**********************************************************************
** These are the control flags for Fancy_Text_Print function.
*/
typedef enum TextPrintType : unsigned short {
TPF_LASTPOINT =0x0000, // Use previous font point value.
TPF_6POINT =0x0001, // Use 6 point font.
TPF_8POINT =0x0002, // Use 8 point font.
TPF_3POINT =0x0003, // Use 3 point font.
TPF_LED =0x0004, // Use LED font.
TPF_VCR =0x0005, // Use VCR font.
TPF_6PT_GRAD =0x0006, // Use 6 point gradient font.
TPF_MAP =0x0007, // Font used for popup help text.
TPF_METAL12 =0x0008, // Use 12 point tab font
TPF_EFNT =0x0009, // Use scenario editor font.
TPF_TYPE =0x000A, // Use teletype font
TPF_SCORE =0x000B, // Use score screen font.
TPF_LASTSHADOW =0x0000, // Use previous font palette.
TPF_NOSHADOW =0x0010, // Don't have any shadow.
TPF_DROPSHADOW =0x0020, // Use a simple drop shadow.
TPF_FULLSHADOW =0x0040, // Use a full outline shadow.
TPF_LIGHTSHADOW =0x0080, // Use engraved drop 'shadow' color.
TPF_CENTER =0x0100, // Center about the X axis.
TPF_RIGHT =0x0200, // Right justify text.
TPF_MEDIUM_COLOR =0x1000, // Use medium color for all text gradient
TPF_BRIGHT_COLOR =0x2000, // Use bright color for all text gradient
TPF_USE_GRAD_PAL =0x4000 // Use a gradient palette based on fore color
} TextPrintType;
//PG
//inline TextPrintType operator |(TextPrintType, TextPrintType);
//inline TextPrintType operator &(TextPrintType, TextPrintType);
//inline TextPrintType operator ~(TextPrintType);
inline TextPrintType operator|(TextPrintType a, TextPrintType b)
{return static_cast<TextPrintType>(static_cast<int>(a) | static_cast<int>(b));}
inline TextPrintType operator&(TextPrintType a, TextPrintType b)
{return static_cast<TextPrintType>(static_cast<int>(a) & static_cast<int>(b));}
inline TextPrintType operator~(TextPrintType a)
{return static_cast<TextPrintType>(~static_cast<int>(a));}
// Standard button text print flags.
#define TPF_BUTTON (TPF_CENTER|TPF_6PT_GRAD|TPF_NOSHADOW)
#define TPF_EBUTTON (TPF_CENTER|TPF_EFNT|TPF_NOSHADOW)
#define TPF_TEXT (TPF_6PT_GRAD|TPF_NOSHADOW)
/**********************************************************************
** These control the maximum number of objects in the game. Make sure that these
** maximums never exceed the maximum value for the "ID" element in the
** object class.
*/
#define BUILDING_MAX 500 // Lasts for hours.
#define HOUSE_MAX (HOUSE_COUNT+1) // Lasts entire scenario.
#define INFANTRY_MAX 500 // Lasts for minutes.
#define UNIT_MAX 500 // Lasts for minutes.
#define VESSEL_MAX 100 // Lasts for minutes.
#define TEAMTYPE_MAX 60 // Lasts forever.
// Save filename description.
#define DESCRIP_MAX 44 // 40 chars + CR + LF + CTRL-Z + NULL
#define CONQUER_PATH_MAX 12 // Number of cells to look ahead for movement.
#define EACH_INFANTRY_MAX (INFANTRY_MAX/5) // Default maximum any one player can have.
#define EACH_UNIT_MAX (UNIT_MAX/5) // Default maximum any one player can have.
#define EACH_BUILDING_MAX (BUILDING_MAX/5) // Default maximum any one player can build.
#define EACH_VESSEL_MAX (VESSEL_MAX/5) // Default maximum any one player can build.
/**********************************************************************
** Terrain can be of these different classes. At any point in the game
** a particular piece of ground must fall under one of these classifications.
** This is true, even if it is undergoing a temporary transition.
*/
typedef enum LandType : char {
LAND_CLEAR, // "Clear" terrain.
LAND_ROAD, // Road terrain.
LAND_WATER, // Water.
LAND_ROCK, // Impassable rock.
LAND_WALL, // Wall (blocks movement).
LAND_TIBERIUM, // Tiberium field.
LAND_BEACH, // Beach terrain.
LAND_ROUGH, // Rocky terrain.
LAND_RIVER, // Rocky riverbed.
LAND_COUNT,
LAND_NONE=-1,
LAND_FIRST=0
} LandType;
/**********************************************************************
** The theaters of operation are as follows.
*/
typedef enum TheaterType : char {
THEATER_NONE=-1,
THEATER_TEMPERATE,
THEATER_SNOW,
THEATER_INTERIOR,
THEATER_COUNT,
THEATER_FIRST=0
} TheaterType;
//inline TheaterType operator++(TheaterType &, int);
inline TheaterType operator++(TheaterType &n) { n = (TheaterType)(((int)n)+1); return n; }
#define THEATERF_TEMPERATE (1<<THEATER_TEMPERATE)
#define THEATERF_SNOW (1<<THEATER_SNOW)
#define THEATERF_INTERIOR (1<<THEATER_INTERIOR)
typedef struct {
char Name[16];
char Root[10];
char Suffix[4];
} TheaterDataType;
/**********************************************************************
** Each building has a predetermined size. These are the size numbers.
** The trailing number is this define is the width and height (respectively)
** of the building in cells.
*/
typedef enum BSizeType : char {
BSIZE_NONE=-1,
BSIZE_11=0,
BSIZE_21,
BSIZE_12,
BSIZE_22,
BSIZE_23,
BSIZE_32,
BSIZE_33,
BSIZE_42,
BSIZE_55,
BSIZE_COUNT
} BSizeType;
inline BSizeType operator++(BSizeType &, int);
/**********************************************************************
** When objects are manipulated on the map that are marked as being
** removed (up), placed down (down), or just to be redrawn (change);
** or when an object's rendering (not logical) size changes, due to
** its being selected or having an animation attached (overlap up/down).
*/
typedef enum MarkType : unsigned char {
MARK_UP, // Removed from the map.
MARK_DOWN, // Placed on the map.
MARK_CHANGE, // Altered in place on the map.
MARK_CHANGE_REDRAW, // Redraw because of animation change.
MARK_OVERLAP_DOWN, // Mark overlap cells on the map
MARK_OVERLAP_UP // Clear overlap cells on the map
} MarkType;
/****************************************************************************
** Window number definition list. Each window should be referred to by
** the value given in this list.
*/
// Allow window number enums to be passed to library functions.
typedef enum WindowNumberType : unsigned char {
WINDOW_MAIN, // Full screen window.
WINDOW_ERROR, // Library error window.
WINDOW_TACTICAL, // Tactical map window.
WINDOW_MENU, // Main selection menu.
WINDOW_SIDEBAR, // Sidebar (buildable list) window.
WINDOW_EDITOR, // Scenario editor window.
WINDOW_PARTIAL, // Partial object draw sub-window.
WINDOW_CUSTOM, // Window that can be altered depending on circumstances
WINDOW_VIRTUAL // Window that is used when we want to capture rendering information without actually rendering. ST - 1/15/2019 3:03PM
} WindowNumberType;
/****************************************************************************
** For every cell there are 8 adjacent cells. Use these direction numbers
** when referring to adjacent cells. This comes into play when moving
** between cells and in the Desired_Facing() algorithm.
*/
typedef enum FacingType : char {
FACING_NONE=-1,
FACING_N, // North
FACING_NE, // North-East
FACING_E, // East
FACING_SE, // South-East
FACING_S, // South
FACING_SW, // South-West
FACING_W, // West
FACING_NW, // North-West
FACING_COUNT, // Total of 8 directions (0..7).
FACING_FIRST=0
} FacingType;
//inline FacingType operator++(FacingType &, int);
inline FacingType operator + (FacingType f1, FacingType f2)
{
return (FacingType)(((int)f1 + (int)f2) & 0x07);
}
inline FacingType operator + (FacingType f1, int f2)
{
return (FacingType)(((int)f1 + (int)f2) & 0x07);
}
inline FacingType operator - (FacingType f1, FacingType f2)
{
return (FacingType)(((int)f1 - (int)f2) & 0x07);
}
inline FacingType operator - (FacingType f1, int f2)
{
return (FacingType)(((int)f1 - (int)f2) & 0x07);
}
inline FacingType operator += (FacingType & f1, FacingType f2)
{
f1 = (FacingType)(((int)f1 + (int)f2) & 0x07);
return(f1);
}
inline FacingType operator += (FacingType & f1, int f2)
{
f1 = (FacingType)(((int)f1 + (int)f2) & 0x07);
return(f1);
}
inline int operator * (FacingType f1, FacingType f2)
{
return((int)f1 * (int)f2);
}
#ifdef NEVER
typedef enum DirType {
DIR_MIN=0,
DIR_N=0,
DIR_NE=1<<5,
DIR_E=2<<5,
DIR_SE=3<<5,
DIR_S=4<<5,
DIR_SW=5<<5,
DIR_SW_X1=(5<<5)-8, // Direction of harvester while unloading.
DIR_SW_X2=(5<<5)-16, // Direction of harvester while unloading.
DIR_W=6<<5,
DIR_NW=7<<5,
DIR_MAX=255
} DirType;
inline DirType operator + (DirType f1, DirType f2)
{
return (DirType)(((int)f1 + (int)f2) & 0x00FF);
}
inline DirType operator + (DirType f1, int f2)
{
return (DirType)(((int)f1 + (int)f2) & 0x00FF);
}
#endif
#define DIR_SW_X1 DirType((5<<5)-8)
#define DIR_SW_X2 DirType((5<<5)-16)
/****************************************************************************
** Timer constants. These are used when setting the countdown timer.
** Note that this is based upon a timer that ticks every 60th of a second.
*/
#define TIMER_SECOND 60
#define TIMER_MINUTE (TIMER_SECOND*60)
#define FADE_PALETTE_FAST (TIMER_SECOND/8)
#define FADE_PALETTE_MEDIUM (TIMER_SECOND/4)
#define FADE_PALETTE_SLOW (TIMER_SECOND/2)
#define TICKS_PER_SECOND 15
#define TICKS_PER_MINUTE (TICKS_PER_SECOND * 60)
#define TICKS_PER_HOUR (TICKS_PER_MINUTE * 60)
#define GRAYFADETIME (1 * TICKS_PER_SECOND)
/****************************************************************************
** Each vehicle is give a speed rating. This is a combination of not only
** its physical speed, but the means by which it travels (wheels, tracks,
** wings, etc). This is used to determine the movement table.
*/
typedef enum SpeedType : char {
SPEED_NONE=-1,
SPEED_FOOT, // Bipedal.
SPEED_TRACK, // Tracked locomotion.
SPEED_WHEEL, // Balloon tires.
SPEED_WINGED, // Lifter's, 'thopters, and rockets.
SPEED_FLOAT, // Ships.
SPEED_COUNT,
SPEED_FIRST=SPEED_FOOT
} SpeedType;
/**********************************************************************
** These are the sound effect digitized sample file names.
*/
typedef enum VocType : short {
VOC_NONE=-1,
VOC_GIRL_OKAY, // "okay"
VOC_GIRL_YEAH, // "yeah?"
VOC_GUY_OKAY, // "okay"
VOC_GUY_YEAH, // "yeah?"
VOC_MINELAY1, // mine layer sound
VOC_ACKNOWL, // "acknowledged"
VOC_AFFIRM, // "affirmative"
VOC_AWAIT, // "awaiting orders"
VOC_ENG_AFFIRM, // Engineer: "affirmative"
VOC_ENG_ENG, // Engineer: "engineering"
VOC_NO_PROB, // "not a problem"
VOC_READY, // "ready and waiting"
VOC_REPORT, // "reporting"
VOC_RIGHT_AWAY, // "right away sir"
VOC_ROGER, // "roger"
VOC_UGOTIT, // "you got it"
VOC_VEHIC, // "vehicle reporting"
VOC_YESSIR, // "yes sir"
VOC_SCREAM1, // short infantry scream
VOC_SCREAM3, // short infantry scream
VOC_SCREAM4, // short infantry scream
VOC_SCREAM5, // short infantry scream
VOC_SCREAM6, // short infantry scream
VOC_SCREAM7, // short infantry scream
VOC_SCREAM10, // short infantry scream
VOC_SCREAM11, // short infantry scream
VOC_YELL1, // long infantry scream
VOC_CHRONO, // Chronosphere sound.
VOC_CANNON1, // Cannon sound (medium).
VOC_CANNON2, // Cannon sound (short).
VOC_IRON1,
VOC_ENG_MOVEOUT, // Engineer: "movin' out"
VOC_SONAR, // sonar pulse
VOC_SANDBAG, // sand bag crunch
VOC_MINEBLOW,
VOC_CHUTE1, // wind swoosh sound
VOC_DOG_BARK, // dog bark
VOC_DOG_WHINE, // dog whine
VOC_DOG_GROWL2, // strong dog growl
VOC_FIRE_LAUNCH, // fireball launch sound
VOC_FIRE_EXPLODE, // fireball explode sound
VOC_GRENADE_TOSS, // grenade toss
VOC_GUN_5, // 5 round gun burst (slow).
VOC_GUN_7, // 7 round gun burst (fast).
VOC_ENG_YES, // Engineer: "yes sir"
VOC_GUN_RIFLE, // Rifle shot.
VOC_HEAL, // Healing effect.
VOC_DOOR, // Hyrdrolic door.
VOC_INVULNERABLE, // Invulnerability effect.
VOC_KABOOM1, // Long explosion (muffled).
VOC_KABOOM12, // Very long explosion (muffled).
VOC_KABOOM15, // Very long explosion (muffled).
VOC_SPLASH, // Water splash
VOC_KABOOM22, // Long explosion (sharp).
VOC_AACANON3, // AA-Cannon
VOC_TANYA_DIE, // Tanya: scream
VOC_GUN_5F, // 5 round gun burst (fast).
VOC_MISSILE_1, // Missile with high tech effect.
VOC_MISSILE_2, // Long missile launch.
VOC_MISSILE_3, // Short missile launch.
VOC_x6,
VOC_GUN_5R, // 5 round gun burst (rattles).
VOC_BEEP, // Generic beep sound.
VOC_CLICK, // Generic click sound.
VOC_SILENCER, // Silencer.
VOC_CANNON6, // Long muffled cannon shot.
VOC_CANNON7, // Sharp mechanical cannon fire.
VOC_TORPEDO, // Torpedo launch.
VOC_CANNON8, // Sharp cannon fire.
VOC_TESLA_POWER_UP, // Hum charge up.
VOC_TESLA_ZAP, // Tesla zap effect.
VOC_SQUISH, // Squish effect.
VOC_SCOLD, // Scold bleep.
VOC_RADAR_ON, // Powering up electronics.
VOC_RADAR_OFF, // B movie power down effect.
VOC_PLACE_BUILDING_DOWN, // Building slam down sound.
VOC_KABOOM30, // Short explosion (HE).
VOC_KABOOM25, // Short growling explosion.
VOC_x7,
VOC_DOG_HURT, // Dog whine.
VOC_DOG_YES, // Dog 'yes sir'.
VOC_CRUMBLE, // Building crumble.
VOC_MONEY_UP, // Rising money tick.
VOC_MONEY_DOWN, // Falling money tick.
VOC_CONSTRUCTION, // Building construction sound.
VOC_GAME_CLOSED, // Long bleep.
VOC_INCOMING_MESSAGE, // Soft happy warble.
VOC_SYS_ERROR, // Sharp soft warble.
VOC_OPTIONS_CHANGED, // Mid range soft warble.
VOC_GAME_FORMING, // Long warble.
VOC_PLAYER_LEFT, // Chirp sequence.
VOC_PLAYER_JOINED, // Reverse chirp sequence.
VOC_DEPTH_CHARGE, // Distant explosion sound.
VOC_CASHTURN, // Airbrake.
VOC_TANYA_CHEW, // Tanya: "Chew on this"
VOC_TANYA_ROCK, // Tanya: "Let's rock"
VOC_TANYA_LAUGH, // Tanya: "ha ha ha"
VOC_TANYA_SHAKE, // Tanya: "Shake it baby"
VOC_TANYA_CHING, // Tanya: "Cha Ching"
VOC_TANYA_GOT, // Tanya: "That's all you got"
VOC_TANYA_KISS, // Tanya: "Kiss it bye bye"
VOC_TANYA_THERE, // Tanya: "I'm there"
VOC_TANYA_GIVE, // Tanya: "Give it to me"
VOC_TANYA_YEA, // Tanya: "Yea?"
VOC_TANYA_YES, // Tanya: "Yes sir?"
VOC_TANYA_WHATS, // Tanya: "What's up."
VOC_WALLKILL2, // Crushing wall sound.
VOC_x8,
VOC_TRIPLE_SHOT, // Three quick shots in succession.
VOC_SUBSHOW, // Submarine surfacing.
VOC_E_AH, // Einstein "ah"
VOC_E_OK, // Einstein "ok"
VOC_E_YES, // Einstein "yes"
VOC_TRIP_MINE, // mine explosion sound
VOC_SPY_COMMANDER, // Spy: "commander?"
VOC_SPY_YESSIR, // Spy: "yes sir"
VOC_SPY_INDEED, // Spy: "indeed"
VOC_SPY_ONWAY, // Spy: "on my way"
VOC_SPY_KING, // Spy: "for king and country"
VOC_MED_REPORTING, // Medic: "reporting"
VOC_MED_YESSIR, // Medic: "yes sir"
VOC_MED_AFFIRM, // Medic: "affirmative"
VOC_MED_MOVEOUT, // Medic: "movin' out"
VOC_BEEP_SELECT, // map selection beep
VOC_THIEF_YEA, // Thief: "yea?"
#ifdef FIXIT_ANTS
VOC_ANTDIE,
VOC_ANTBITE,
#else
VOC_x9,
VOC_x10,
#endif
VOC_THIEF_MOVEOUT, // Thief: "movin' out"
VOC_THIEF_OKAY, // Thief: "ok"
VOC_x11,
VOC_THIEF_WHAT, // Thief: "what"
VOC_THIEF_AFFIRM, // Thief: "affirmative"
VOC_STAVCMDR,
VOC_STAVCRSE,
VOC_STAVYES,
VOC_STAVMOV,
VOC_BUZZY1,
VOC_RAMBO1,
VOC_RAMBO2,
VOC_RAMBO3,
#ifdef FIXIT_CSII // checked - ajw 9/28/98
VOC_MECHYES1,
VOC_MECHHOWDY1,
VOC_MECHRISE1,
VOC_MECHHUH1,
VOC_MECHHEAR1,
VOC_MECHLAFF1,
VOC_MECHBOSS1,
VOC_MECHYEEHAW1,
VOC_MECHHOTDIG1,
VOC_MECHWRENCH1,
VOC_STBURN1,
VOC_STCHRGE1,
VOC_STCRISP1,
VOC_STDANCE1,
VOC_STJUICE1,
VOC_STJUMP1,
VOC_STLIGHT1,
VOC_STPOWER1,
VOC_STSHOCK1,
VOC_STYES1,
VOC_CHRONOTANK1,
VOC_MECH_FIXIT1,
VOC_MAD_CHARGE,
VOC_MAD_EXPLODE,
VOC_SHOCK_TROOP1,
VOC_BEACON,
#endif
VOC_COUNT,
VOC_FIRST=0
} VocType;
/*
** EVA voices are specified by these identifiers.
*/
typedef enum VoxType : char {
VOX_NONE=-1,
VOX_ACCOMPLISHED, // mission accomplished
VOX_FAIL, // your mission has failed
VOX_NO_FACTORY, // unable to comply, building in progress
VOX_CONSTRUCTION, // construction complete
VOX_UNIT_READY, // unit ready
VOX_NEW_CONSTRUCT, // new construction options
VOX_DEPLOY, // cannot deploy here
VOX_STRUCTURE_DESTROYED, // structure destroyed
VOX_INSUFFICIENT_POWER, // insufficient power
VOX_NO_CASH, // insufficient funds
VOX_CONTROL_EXIT, // battle control terminated
VOX_REINFORCEMENTS, // reinforcements have arrived
VOX_CANCELED, // canceled
VOX_BUILDING, // building
VOX_LOW_POWER, // low power
VOX_NEED_MO_MONEY, // need more funds
VOX_BASE_UNDER_ATTACK, // our base is under attack
VOX_UNABLE_TO_BUILD, // unable to build more
VOX_PRIMARY_SELECTED, // primary building selected
#ifdef ENGLISH
VOX_MADTANK_DEPLOYED, // M.A.D. Tank Deployed
#else
VOX_none3,
#endif
VOX_none4,
VOX_UNIT_LOST, // unit lost
VOX_SELECT_TARGET, // select target
VOX_PREPARE, // enemy approaching
VOX_NEED_MO_CAPACITY, // silos needed
VOX_SUSPENDED, // on hold
VOX_REPAIRING, // repairing
VOX_none5,
VOX_none6,
VOX_AIRCRAFT_LOST,
VOX_none7,
VOX_ALLIED_FORCES_APPROACHING,
VOX_ALLIED_APPROACHING,
VOX_none8,
VOX_none9,
VOX_BUILDING_INFILTRATED,
VOX_CHRONO_CHARGING,
VOX_CHRONO_READY,
VOX_CHRONO_TEST,
VOX_HQ_UNDER_ATTACK,
VOX_CENTER_DEACTIVATED,
VOX_CONVOY_APPROACHING,
VOX_CONVOY_UNIT_LOST,
VOX_EXPLOSIVE_PLACED,
VOX_MONEY_STOLEN,
VOX_SHIP_LOST,
VOX_SATALITE_LAUNCHED,
VOX_SONAR_AVAILABLE,
VOX_none10,
VOX_SOVIET_FORCES_APPROACHING,
VOX_SOVIET_REINFORCEMENTS,
VOX_TRAINING,
VOX_ABOMB_READY,
VOX_ABOMB_LAUNCH,
VOX_ALLIES_N,
VOX_ALLIES_S,
VOX_ALLIES_E,
VOX_ALLIES_W,
VOX_OBJECTIVE1,
VOX_OBJECTIVE2,
VOX_OBJECTIVE3,
VOX_IRON_CHARGING,
VOX_IRON_READY,
VOX_RESCUED,
VOX_OBJECTIVE_NOT,
VOX_SIGNAL_N,
VOX_SIGNAL_S,
VOX_SIGNAL_E,
VOX_SIGNAL_W,
VOX_SPY_PLANE,
VOX_FREED,
VOX_UPGRADE_ARMOR,
VOX_UPGRADE_FIREPOWER,
VOX_UPGRADE_SPEED,
VOX_MISSION_TIMER,
VOX_UNIT_FULL,
VOX_UNIT_REPAIRED,
VOX_TIME_40,
VOX_TIME_30,
VOX_TIME_20,
VOX_TIME_10,
VOX_TIME_5,
VOX_TIME_4,
VOX_TIME_3,
VOX_TIME_2,
VOX_TIME_1,
VOX_TIME_STOP,
VOX_UNIT_SOLD,
VOX_TIMER_STARTED,
VOX_TARGET_RESCUED,
VOX_TARGET_FREED,
VOX_TANYA_RESCUED,
VOX_STRUCTURE_SOLD,
VOX_SOVIET_FORCES_FALLEN,
VOX_SOVIET_SELECTED,
VOX_SOVIET_EMPIRE_FALLEN,
VOX_OPERATION_TERMINATED,
VOX_OBJECTIVE_REACHED,
VOX_OBJECTIVE_NOT_REACHED,
VOX_OBJECTIVE_MET,
VOX_MERCENARY_RESCUED,
VOX_MERCENARY_FREED,
VOX_KOSOYGEN_FREED,
VOX_FLARE_DETECTED,
VOX_COMMANDO_RESCUED,
VOX_COMMANDO_FREED,
VOX_BUILDING_IN_PROGRESS,
VOX_ATOM_PREPPING,
VOX_ALLIED_SELECTED,
VOX_ABOMB_PREPPING,
VOX_ATOM_LAUNCHED,
VOX_ALLIED_FORCES_FALLEN,
VOX_ABOMB_AVAILABLE,
VOX_ALLIED_REINFORCEMENTS,
VOX_SAVE1,
VOX_LOAD1,
VOX_COUNT,
VOX_FIRST=0
} VoxType;
/****************************************************************************
** Game reinforcements are each controlled by the following structure. The
** data originates in the scenario INI file but is then carried throughout
** any saved games.
*/
typedef enum SourceType : char {
SOURCE_NONE=-1, // No defined source (error condition).
SOURCE_NORTH, // From north edge.
SOURCE_EAST, // From east edge.
SOURCE_SOUTH, // From south edge.
SOURCE_WEST, // From west edge.
SOURCE_AIR, // Dropped by air (someplace).
SOURCE_COUNT,
SOURCE_FIRST=0
} SourceType;
/****************************************************************************
** This entry defines a complete color scheme, with the player's remap table,
** the font remap table, and a color scheme for dialog boxes and buttons.
*/
typedef struct RemapControlType
{
unsigned char BrightColor; // Highlight (bright) color index.
unsigned char Color; // Normal color index.
unsigned char RemapTable[256]; // Actual remap table.
unsigned char FontRemap[16]; // Remap table for gradient font.
unsigned char Shadow; // Color of shadowed edge of a raised button.
unsigned char Background; // Background fill color for buttons.
unsigned char Corners; // Transition color between shadow and highlight.
unsigned char Highlight; // Bright edge of raised button.
unsigned char Box; // Color for dialog box border.
unsigned char Bright; // Color used for highlighted text.
unsigned char Underline; // Color for underlining dialog box titles.
unsigned char Bar; // Selected entry list box background color.
} RemapControlType;
/****************************************************************************
** Each type of terrain has certain characteristics. These are indicated
** by the structure below. For every element of terrain there is a
** corresponding GroundType structure.
*/
typedef struct {
fixed Cost[SPEED_COUNT]; // Terrain effect cost (normal).
bool Build; // Can build on this terrain?
} GroundType;
/**************************************************************************
** Find_Path returns with a pointer to this structure.
*/
typedef struct {
CELL Start; // Starting cell number.
int Cost; // Accumulated terrain cost.
int Length; // Command string length.
FacingType *Command; // Pointer to command string.
unsigned long *Overlap; // Pointer to overlap list
CELL LastOverlap; // stores position of last overlap
CELL LastFixup; // stores position of last overlap
} PathType;
/**********************************************************************
** These are special indices into the Waypoint array; slots 0-25 are
** reserved for letter-designated Waypoints, the others are special.
*/
typedef enum WaypointEnum : unsigned char
{
WAYPT_HOME = 98, // Home-cell for this scenario
WAYPT_REINF, // cell where reinforcements arrive
WAYPT_SPECIAL, // Used by special airdrop reinforcements.
WAYPT_COUNT
} WaypointType;
/****************************************************************************
** This is the max number of events supported on one frame.
*/
#define MAX_EVENTS 256
typedef enum : unsigned char {
KF_NUMBER = 0x08,
KF_LCW = 0x10,
KF_DELTA = 0x20,
KF_KEYDELTA = 0x40,
KF_KEYFRAME = 0x80,
KF_MASK = 0xF0
} KeyFrameType;
/*
** New Config structure for .CFG files
*/
typedef struct {
unsigned DigitCard; // SoundCardType.
unsigned Port; // SoundCardType.
unsigned IRQ; // SoundCardType.
unsigned DMA; // SoundCardType.
unsigned BitsPerSample; // bits per sound sample
unsigned Channels; // stereo/mono sound card
unsigned Speed; // stereo/mono sound card
bool Reverse; // Reverse left/right speakers
char Language[4];
} NewConfigType;
/****************************************************************************
** These are the types of dialogs that can pop up outside of the main loop,
** an call the game in the background.
*/
typedef enum : unsigned char {
SDLG_NONE,
SDLG_OPTIONS,
SDLG_SURRENDER,
SDLG_SPECIAL
} SpecialDialogType;
typedef enum : unsigned char {
CC_MOUSE_COLOR=16
} CCPaletteType;
/****************************************************************************
** These specify the shape numbers in the OPTIONS.SHP file. These shapes
** are used to dress up the dialog boxes. Many of these shapes come in pairs.
** For dialog box shapes, they are left image / right image paired. For buttons,
** they are up / down paired.
*/
typedef enum OptionControlType : char {
OPTION_NONE=-1, // No fancy shmancy shape.
OPTION_DIALOG=0, // Small dialog boxes.
OPTION_CONTROLS=2, // Large dialog boxes, game controls.
OPTION_DELETE=4, // Delete,Load,Save game.
OPTION_SERIAL=6, // Serial dialog.
OPTION_PHONE=8, // Phone dialog.
OPTION_VISUAL=10, // Visual dialog.
OPTION_NETWORK=12, // Network dialog.
OPTION_JOIN_NETWORK=14, // Join network dialog.
OPTION_SOUND=16, // Sound controls.
OPTION_COUNT
} OptionControlType;
/****************************************************************************
** Used to store firing data for a unit.
*/
typedef struct {
COORDINATE Center;
int Distance;
} FireDataType;
#define size_of(typ,id) sizeof(((typ*)0)->id)
#define MAX_LOG_LEVEL 10
// Maximum number of multi players possible.
#define MAX_PLAYERS 8 // max # of players we can have
// Maximum number of teams
#define MAX_TEAMS 10
#endif