CnC_Remastered_Collection/TIBERIANDAWN/DEFINES.H
PG-SteveT fd05be35c1 September 16th patch update
DLL version incremented
Beacon functionality added
Support for loading screen match preview display
Placeholder handling of new key-bindable mod commands
2020-09-16 10:03:04 -07:00

2978 lines
93 KiB
C

//
// 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: F:\projects\c&c\vcs\code\defines.h_v 2.19 16 Oct 1995 16:44:54 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
//#define PETROGLYPH_EXAMPLE_MOD
/**********************************************************************
** If defined, then the advanced balancing features will be enabled
** for this version.
*/
//#define ADVANCED
#define PATCH // Super patch (1.17?)
/**********************************************************************
** The demo version of C&C will be built if the following define
** is active.
*/
//#define DEMO
/*
** Use AI pulled in from Red Alert. ST - 7/26/2019 11:42AM
*/
#define USE_RA_AI
/**********************************************************************
** Define this to allow play of the bonus missions for the Gateway
** bundle deal.
*/
#define BONUS_MISSIONS
/**********************************************************************
** Handle expansion scnearios as a set of single missions with all
** necessary information self contained within the mission file.
*/
#ifndef DEMO
#define NEWMENU
#endif
/**********************************************************************
** If the scenario editor to to be active in this build then uncomment
** the following #define line.
*/
//#define SCENARIO_EDITOR
/**********************************************************************
** This define enables the full set of cheat keys and special
** command line options.
*/
#define CHEAT_KEYS
/**********************************************************************
** 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.
*/
//#define VIRGIN_CHEAT_KEYS
/**********************************************************************
** Optional parameter control for special options.
*/
//#define PARM_6PLAYER 0x5D9F6F24 // "6"
#define PARM_6PLAYER 0x9CAFC93B // Alternate 6 player keyphrase.
/*
** 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
#define PARM_CHEATDAVID 0xBE79088C // Cheat keys for David Dettmer
#define PARM_CHEATERIK 0x9F38A19D // Cheat keys for Erik Yeo
#define PARM_EDITORERIK 0xC2AA509B // Map editor for Erik Yeo
#define PARM_CHEATPHIL 0x39D01821 // Cheat keys for Phil Gorrow
#define PARM_CHEATJOE 0xABDD0362 // Cheat keys for Joe Bostic
#define PARM_CHEATBILL 0xB5B63531 // Cheat keys for Bill Randolph
#define PARM_CHEAT_STEVET 0x2E7FE493 // Cheat keys for Steve Tall
#define PARM_EDITORBILL 0x7E7C4CCA // "-EDITOR"
#define PARM_CHEATMIKE 0x00532693 // Mike Lightner
#define PARM_CHEATADAM 0xDFABC23A // Adam Isgreen
#endif
//#define PARM_CHEAT 0x6F4BE7CA // "CHEAT"
//#define PARM_EDITOR 0x7E7C4CCA // "-EDITOR"
#define PARM_EASY 0x59E975CE // "EASY" Enables easy mode.
#define PARM_HARD 0xACFE9D13 // "HARD" Enables hard mode.
#define PARM_INSTALL 0xD95C68A2 // "FROMINSTALL"
#define PARM_TRUENAME 0xB1A34435 // Enables true object names.
#define PARM_3POINT 0x03552894 // Enable three point turns.
#define PARM_SCORE 0x7FDE2C33 // Enables alternate themes.
#define PARM_COMBAT 0xDC57C4B2 // Gives combat advantage to attacker.
#define PARM_TREETARGET 0x00AB6BEF // Allows targeting of trees without <CTRL> key.
#define PARM_BIB 0xF7867BF0 // Disables building bibs.
#define PARM_MCV 0x104DF10F // MCV undeploys rather than sells.
#define PARM_HELIPAD 0x53EBECBC // Helipad can be purchased separately from helicopter.
#define PARM_IQ 0x9E3881B8 // Smart self defense logic enable.
#define PARM_SQUISH 0x4EA2FBDF // Squish images for infantry bodies.
#define PARM_HUMAN 0xACB58F61 // Human generated sound effects.
#define PARM_SCROLLING 0xC084AE82 // Restricts scrolling over the tabs.
//#define PARM_SPECIAL 0xD18129F6 // Enables special mode.
//#define PARM_SPECIAL 0x2E84E394 // #1
//#define PARM_SPECIAL 0x63CE7584 // #2
//#define PARM_SPECIAL 0x85F110A5 // #3
///#define PARM_SPECIAL 0x7F65F13C // #4
//#define PARM_SPECIAL 0x431F5F61 // #5
#define PARM_SPECIAL 0x11CA05BB // #6 funpark
//#define PARM_SPECIAL 0xE0F651B9 // #7
//#define PARM_SPECIAL 0x10B9683D // #8
//#define PARM_SPECIAL 0xEE1CD37D // #9
/**********************************************************************
** Defines for verifying free disk space
*/
#define INIT_FREE_DISK_SPACE 1024*4096 //8388608
#define SAVE_GAME_DISK_SPACE INIT_FREE_DISK_SPACE // (INIT_FREE_DISK_SPACE - (1024*4096))
//#define SAVE_GAME_DISK_SPACE 100000
/**********************************************************************
** This is the credit threshold that the computer's money must exceed
** in order for structure repair to commence.
*/
#define REPAIR_THRESHHOLD 1000
//#define GERMAN 1
//#define FRENCH 1
//#define JAPANESE 1
#define FOREIGN_VERSION_NUMBER 6
//
// typedef enums with -1 will show this warning, even when the type of the enum is signed. It's a compiler bug, apparently
// ST - 1/8/2019 9:23AM
//
#pragma warning (push)
#pragma warning (disable:4341)
/**********************************************************************
** These enumerations are used to implement RTTI.
*/
typedef enum RTTIType : unsigned char {
RTTI_NONE=0,
RTTI_INFANTRY,
RTTI_INFANTRYTYPE,
RTTI_UNIT,
RTTI_UNITTYPE,
RTTI_AIRCRAFT,
RTTI_AIRCRAFTTYPE,
RTTI_BUILDING,
RTTI_BUILDINGTYPE,
RTTI_TERRAIN,
RTTI_ABSTRACTTYPE,
RTTI_ANIM,
RTTI_ANIMTYPE,
RTTI_BULLET,
RTTI_BULLETTYPE,
RTTI_OVERLAY,
RTTI_OVERLAYTYPE,
RTTI_SMUDGE,
RTTI_SMUDGETYPE,
RTTI_TEAM,
RTTI_TEMPLATE,
RTTI_TEMPLATETYPE,
RTTI_TERRAINTYPE,
RTTI_OBJECT,
RTTI_SPECIAL
} 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
/**********************************************************************
** 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
// Use this to allow keep track of versions as they affect saved games.
#define VERSION_NUMBER 1
#define RELEASE_NUMBER 01
#define FAME_FILE_NAME "HALLFAME.DAT"
/**********************************************************************
** Map controls. The map is composed of square elements called 'cells'.
** All larger elements are build upon these.
*/
// Size of the map in cells. The width of the map must be a power
// of two. This is accomplished by setting the width by the number of
// bits it occupies. The number of meta-cells will be a subset of the
// cell width.
#define MAP_CELL_MAX_X_BITS 6
#define MAP_CELL_MAX_Y_BITS 6
#define MAP_CELL_X_MASK (~(~0 << MAP_CELL_MAX_X_BITS))
//#define MAP_CELL_Y_MASK ((~(~0 << MAP_CELL_MAX_Y_BITS)) << MAP_CELL_MAX_Y_BITS)
// Size of the map in cells.
#define MAP_CELL_W (1<<MAP_CELL_MAX_X_BITS)
#define MAP_CELL_H (1<<MAP_CELL_MAX_Y_BITS)
#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.
/*
** 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)
/**********************************************************************
** 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, // Faile because unable to comply (busy or occupied).
} ProdFailType;
/**********************************************************************
** 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 : unsigned char {
SPC_NONE,
SPC_ION_CANNON, // Partical beam from satalite (Akira effect).
SPC_NUCLEAR_BOMB, // Tactical nuclear weapon.
SPC_AIR_STRIKE // Conventional air strike.
} SpecialWeaponType;
/**********************************************************************
** These defines control the rate of ion cannon and airstrike recharging.
*/
#define NUKE_GONE_TIME 14*TICKS_PER_MINUTE
#define ION_CANNON_GONE_TIME 10*TICKS_PER_MINUTE
#define AIR_CANNON_GONE_TIME 8*TICKS_PER_MINUTE
#define OBELISK_ANIMATION_RATE 15
/**********************************************************************
** 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_PICK_ANOTHER=-2,
THEME_NONE=-1,
THEME_AIRSTRIKE,
THEME_80MX,
THEME_CHRG,
THEME_CREP,
THEME_DRIL,
THEME_DRON,
THEME_FIST,
THEME_RECON,
THEME_VOICE,
THEME_HEAVYG,
THEME_J1,
THEME_JDI_V2,
THEME_RADIO,
THEME_RAIN,
THEME_AOI, // Act On Instinct
THEME_CCTHANG, // C&C Thang
THEME_DIE, // Die!!
THEME_FWP, // Fight, Win, Prevail
THEME_IND, // Industrial
THEME_IND2, // Industrial2
THEME_JUSTDOIT, // Just Do It!
THEME_LINEFIRE, // In The Line Of Fire
THEME_MARCH, // March To Your Doom
THEME_MECHMAN, // Mechanical Man
THEME_NOMERCY, // No Mercy
THEME_OTP, // On The Prowl
THEME_PRP, // Prepare For Battle
THEME_ROUT, // Reaching Out
THEME_HEART, //
THEME_STOPTHEM, // Stop Them
THEME_TROUBLE, // Looks Like Trouble
THEME_WARFARE, // Warfare
THEME_BFEARED, // Enemies To Be Feared
THEME_IAM, // I Am
THEME_WIN1, // Great Shot!
THEME_MAP1, // Map subliminal techno "theme".
THEME_VALKYRIE, // Ride of the valkyries.
THEME_COUNT,
THEME_LAST=THEME_BFEARED,
THEME_FIRST=0
} ThemeType;
//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?
} ThreatType;
//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 obect transitions between
** cloaked and uncloaked conditions.
*/
typedef enum CloakType : unsigned char {
UNCLOAKED, // Completely visible (normal state).
CLOAKING, // In process of claoking.
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_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_TIMED_HUNT, // Wait a while, then go into HUNT (multiplayer AI)
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_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_ION, // That target object should be blasted.
ACTION_NUKE_BOMB, // That target object should be blasted.
ACTION_AIR_STRIKE, // That target object should be blasted.
ACTION_GUARD_AREA, // Guard the area/object clicked on.
ACTION_TOGGLE_PRIMARY, // Toggle the primary status of the factory.
ACTION_NO_DEPLOY,
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;
/**********************************************************************
** 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 : char {
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
};
/**********************************************************************
** 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,
MPH_KINDA_SLOW=6,
MPH_SLOW=8,
MPH_SLOW_ISH=10,
MPH_MEDIUM_SLOW=12,
MPH_MEDIUM=18,
MPH_MEDIUM_FAST=30,
MPH_MEDIUM_FASTER=35,
MPH_FAST=40,
MPH_ROCKET=60,
MPH_VERY_FAST=100,
MPH_LIGHT_SPEED=255
} MPHType;
/**********************************************************************
** General audio volume is enumerated by these identifiers. Since small
** volume variations are usually unnoticable when specifying the volume
** to play a sample, this enumeration list creates more readable code.
*/
typedef enum VolType : unsigned char
{
VOL_OFF=0,
VOL_0=VOL_OFF,
VOL_1=0x19,
VOL_2=0x32,
VOL_3=0x4C,
VOL_4=0x66,
VOL_5=0x80,
VOL_6=0x9A,
VOL_7=0xB4,
VOL_8=0xCC,
VOL_9=0xE6,
VOL_10=0xFF,
VOL_FULL=VOL_10
} VolType;
/**********************************************************************
** The houses that can be played are listed here. Each has their own
** personality and strengths.
*/
typedef enum HousesType : char {
HOUSE_NONE=-1,
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_COUNT,
HOUSE_FIRST=HOUSE_GOOD
} HousesType;
//inline HousesType operator++(HousesType &, int);
#define HOUSEF_GOOD (1<<HOUSE_GOOD)
#define HOUSEF_BAD (1<<HOUSE_BAD)
#define HOUSEF_NEUTRAL (1<<HOUSE_NEUTRAL)
#define HOUSEF_JP (1<<HOUSE_JP)
#define HOUSEF_MULTI1 (1<<HOUSE_MULTI1)
#define HOUSEF_MULTI2 (1<<HOUSE_MULTI2)
#define HOUSEF_MULTI3 (1<<HOUSE_MULTI3)
#define HOUSEF_MULTI4 (1<<HOUSE_MULTI4)
#define HOUSEF_MULTI5 (1<<HOUSE_MULTI5)
#define HOUSEF_MULTI6 (1<<HOUSE_MULTI6)
typedef enum PlayerColorType : char {
REMAP_NONE = -1,
REMAP_GOLD,
REMAP_FIRST=REMAP_GOLD,
REMAP_LTBLUE,
REMAP_RED,
REMAP_GREEN,
REMAP_ORANGE,
REMAP_BLUE,
REMAP_LAST=REMAP_BLUE,
REMAP_COUNT
} PlayerColorType;
/**********************************************************************
** 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_GDI,
SCEN_PLAYER_NOD,
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);
/**********************************************************************
** 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_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;
//inline LayerType operator++(LayerType &, int);
/**********************************************************************
** This enumerates the various bullet types. These types specify bullet's
** visual and explosive characteristics.
*/
typedef enum BulletType : char {
BULLET_NONE=-1,
BULLET_SNIPER, // Sniper bullet.
BULLET_BULLET, // Small arms
BULLET_APDS, // Armor piercing projectile.
BULLET_HE, // High explosive shell.
BULLET_SSM, // Surface to surface small missile type.
BULLET_SSM2, // MLRS missile.
BULLET_SAM, // Fast homing anti-aircraft missile.
BULLET_TOW, // TOW anti-vehicle short range missile.
BULLET_FLAME, // Flame thrower flame.
BULLET_CHEMSPRAY, // Chemical weapon spray.
BULLET_NAPALM, // Napalm bomblet.
BULLET_GRENADE, // Hand tossed grenade.
BULLET_LASER, // Laser beam from obelisk
BULLET_NUKE_UP, // Nuclear Missile on its way down
BULLET_NUKE_DOWN, // Nuclear Missile on its way up
BULLET_HONEST_JOHN, // SSM with napalm warhead.
BULLET_SPREADFIRE, // Chain gun bullets.
BULLET_HEADBUTT, // Stegosaurus, Triceratops head butt
BULLET_TREXBITE, // Tyrannosaurus Rex's bite - especially bad for infantry
#ifdef PETROGLYPH_EXAMPLE_MOD
BULLET_NUKE_LOB, // Nuke projectile
#endif //PETROGLYPH_EXAMPLE_MOD
BULLET_COUNT,
BULLET_FIRST=0
} BulletType;
//inline BulletType operator++(BulletType &, int);
/**********************************************************************
** All game buildings (structures) are enumerated here. This includes
** civilian structures as well.
*/
typedef enum StructType : char {
STRUCT_NONE=-1,
STRUCT_WEAP,
STRUCT_GTOWER,
STRUCT_ATOWER,
STRUCT_OBELISK,
STRUCT_RADAR,
STRUCT_TURRET,
STRUCT_CONST,
STRUCT_REFINERY,
STRUCT_STORAGE,
STRUCT_HELIPAD,
STRUCT_SAM,
STRUCT_AIRSTRIP,
STRUCT_POWER,
STRUCT_ADVANCED_POWER,
STRUCT_HOSPITAL,
STRUCT_BARRACKS,
STRUCT_TANKER,
STRUCT_REPAIR,
STRUCT_BIO_LAB,
STRUCT_HAND,
STRUCT_TEMPLE,
STRUCT_EYE,
STRUCT_MISSION,
/*
** All buildings that are never used as a prerequisite
** for construction, follow this point. Typically, this is
** limited to civilian structures.
*/
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,
#ifdef OBSOLETE
STRUCT_ROAD,
#endif
STRUCT_SANDBAG_WALL,
STRUCT_CYCLONE_WALL,
STRUCT_BRICK_WALL,
STRUCT_BARBWIRE_WALL,
STRUCT_WOOD_WALL,
STRUCT_COUNT,
STRUCT_FIRST=0
} StructType;
//inline StructType operator++(StructType &, int);
#define STRUCTF_NONE 0L
#define STRUCTF_ADVANCED_POWER (1L << STRUCT_ADVANCED_POWER)
#define STRUCTF_REPAIR (1L << STRUCT_REPAIR)
#define STRUCTF_EYE (1L << STRUCT_EYE)
#define STRUCTF_TEMPLE (1L << STRUCT_TEMPLE)
#define STRUCTF_HAND (1L << STRUCT_HAND)
#define STRUCTF_BIO_LAB (1L << STRUCT_BIO_LAB)
#define STRUCTF_OBELISK (1L << STRUCT_OBELISK)
#define STRUCTF_ATOWER (1L << STRUCT_ATOWER)
#define STRUCTF_WEAP (1L << STRUCT_WEAP)
#define STRUCTF_GTOWER (1L << STRUCT_GTOWER)
#define STRUCTF_RADAR (1L << STRUCT_RADAR)
#define STRUCTF_TURRET (1L << STRUCT_TURRET)
#define STRUCTF_CIV1 (1L << STRUCT_CIV1)
#define STRUCTF_CIV2 (1L << STRUCT_CIV2)
#define STRUCTF_CIV3 (1L << STRUCT_CIV3)
#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_HOSPITAL (1L << STRUCT_HOSPITAL)
#define STRUCTF_BARRACKS (1L << STRUCT_BARRACKS)
#define STRUCTF_TANKER (1L << STRUCT_TANKER)
#define STRUCTF_MISSION (1L << STRUCT_MISSION)
/**********************************************************************
** 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_CONCRETE, // Concrete.
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_TIBERIUM1, // Tiberium patch.
OVERLAY_TIBERIUM2, // Tiberium patch.
OVERLAY_TIBERIUM3, // Tiberium patch.
OVERLAY_TIBERIUM4, // Tiberium patch.
OVERLAY_TIBERIUM5, // Tiberium patch.
OVERLAY_TIBERIUM6, // Tiberium patch.
OVERLAY_TIBERIUM7, // Tiberium patch.
OVERLAY_TIBERIUM8, // Tiberium patch.
OVERLAY_TIBERIUM9, // Tiberium patch.
OVERLAY_TIBERIUM10, // Tiberium patch.
OVERLAY_TIBERIUM11, // Tiberium patch.
OVERLAY_TIBERIUM12, // Tiberium patch.
OVERLAY_ROAD, // Road/concrete piece.
OVERLAY_SQUISH, // Squish mark for overran infantry.
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_COUNT,
OVERLAY_FIRST=0
} OverlayType;
//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_E5, // Chemical thrower equipped.
INFANTRY_E7, // Engineer.
INFANTRY_RAMBO, // Commando.
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_MOEBIUS, // Dr. Moebius
INFANTRY_DELPHI, // Agent "Delphi"
INFANTRY_CHAN, // Dr. Chan
INFANTRY_COUNT,
INFANTRY_FIRST=0
} InfantryType;
//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, // Heavy tank (Mammoth).
UNIT_MTANK, // Medium tank (M1).
UNIT_LTANK, // Light tank ('Bradly').
UNIT_STANK, // Stealth tank (Romulan).
UNIT_FTANK, // Flame thrower tank.
UNIT_VICE, // Visceroid
UNIT_APC, // APC.
UNIT_MLRS, // MLRS rocket launcher.
UNIT_JEEP, // 4x4 jeep replacement.
UNIT_BUGGY, // Rat patrol dune buggy type.
UNIT_HARVESTER, // Resource gathering vehicle.
UNIT_ARTY, // Artillery unit.
UNIT_MSAM, // Anti-Aircraft vehicle.
UNIT_HOVER, // Hovercraft.
UNIT_MHQ, // Mobile Head Quarters.
UNIT_GUNBOAT, // Gunboat
UNIT_MCV, // Mobile construction vehicle.
UNIT_BIKE, // Nod recon motor-bike.
UNIT_TRIC, // Triceratops
UNIT_TREX, // Tyranosaurus Rex
UNIT_RAPT, // Velociraptor
UNIT_STEG, // Stegasaurus
#ifdef PETROGLYPH_EXAMPLE_MOD
UNIT_NUKE_TANK, // Mammoth with a nuke
#endif
UNIT_COUNT,
UNIT_FIRST=0
} UnitType;
//inline UnitType operator++(UnitType &, int);
#define UNITF_HTANK (1L<<UNIT_HTANK)
#define UNITF_MTANK (1L<<UNIT_MTANK)
#define UNITF_LTANK (1L<<UNIT_LTANK)
#define UNITF_STANK (1L<<UNIT_STANK)
#define UNITF_FTANK (1L<<UNIT_FTANK)
#define UNITF_APC (1L<<UNIT_APC)
#define UNITF_MLRS (1L<<UNIT_MLRS)
#define UNITF_JEEP (1L<<UNIT_JEEP)
#define UNITF_BUGGY (1L<<UNIT_BUGGY)
#define UNITF_HARVESTER (1L<<UNIT_HARVESTER)
#define UNITF_ARTY (1L<<UNIT_ARTY)
#define UNITF_MSAM (1L<<UNIT_MSAM)
#define UNITF_HOVER (1L<<UNIT_HOVER)
#define UNITF_MHQ (1L<<UNIT_MHQ)
#define UNITF_GUNBOAT (1L<<UNIT_GUNBOAT)
#define UNITF_MCV (1L<<UNIT_MCV)
#define UNITF_BIKE (1L<<UNIT_BIKE)
#define UNITF_VICE (1L<<UNIT_VICE)
#define UNITF_TRIC (1L<<UNIT_TRIC)
#define UNITF_TREX (1L<<UNIT_TREX)
#define UNITF_RAPT (1L<<UNIT_RAPT)
#define UNITF_STEG (1L<<UNIT_STEG)
/**********************************************************************
** The variuos aircraft types are enumerated here. These include helicopters
** as well as traditional aircraft.
*/
typedef enum AircraftType : char {
AIRCRAFT_TRANSPORT, // Transport helicopter.
AIRCRAFT_A10, // Ground attack plane.
AIRCRAFT_HELICOPTER, // Apache gunship.
AIRCRAFT_CARGO, // Cargo plane.
AIRCRAFT_ORCA, // Nod attack helicopter.
AIRCRAFT_COUNT,
AIRCRAFT_NONE=-1,
AIRCRAFT_FIRST=0
} AircraftType;
#define AIRCRAFTF_TRANSPORT (1L << AIRCRAFT_TRANSPORT)
#define AIRCRAFTF_A10 (1L << AIRCRAFT_A10)
#define AIRCRAFTF_HELICOPTER (1L << AIRCRAFT_HELICOPTER)
#define AIRCRAFTF_CARGO (1L << AIRCRAFT_CARGO)
#define AIRCRAFTF_ORCA (1L << AIRCRAFT_ORCA)
//inline AircraftType operator++(AircraftType &, int);
/**********************************************************************
** The game templates are enumerated here. These are the underlying
** terrain art. This includes everything from water to clifs. 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 char {
TEMPLATE_CLEAR1,
TEMPLATE_WATER, // This must be the first non-clear template.
TEMPLATE_WATER2,
TEMPLATE_SHORE1,
TEMPLATE_SHORE2,
TEMPLATE_SHORE3,
TEMPLATE_SHORE4,
TEMPLATE_SHORE5,
TEMPLATE_SHORE11,
TEMPLATE_SHORE12,
TEMPLATE_SHORE13,
TEMPLATE_SHORE14,
TEMPLATE_SHORE15,
TEMPLATE_SLOPE1,
TEMPLATE_SLOPE2,
TEMPLATE_SLOPE3,
TEMPLATE_SLOPE4,
TEMPLATE_SLOPE5,
TEMPLATE_SLOPE6,
TEMPLATE_SLOPE7,
TEMPLATE_SLOPE8,
TEMPLATE_SLOPE9,
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_SHORE32,
TEMPLATE_SHORE33,
TEMPLATE_SHORE20,
TEMPLATE_SHORE21,
TEMPLATE_SHORE22,
TEMPLATE_SHORE23,
TEMPLATE_BRUSH1,
TEMPLATE_BRUSH2,
TEMPLATE_BRUSH3,
TEMPLATE_BRUSH4,
TEMPLATE_BRUSH5,
TEMPLATE_BRUSH6,
TEMPLATE_BRUSH7,
TEMPLATE_BRUSH8,
TEMPLATE_BRUSH9,
TEMPLATE_BRUSH10,
TEMPLATE_PATCH1,
TEMPLATE_PATCH2,
TEMPLATE_PATCH3,
TEMPLATE_PATCH4,
TEMPLATE_PATCH5,
TEMPLATE_PATCH6,
TEMPLATE_PATCH7,
TEMPLATE_PATCH8,
TEMPLATE_SHORE16,
TEMPLATE_SHORE17,
TEMPLATE_SHORE18,
TEMPLATE_SHORE19,
TEMPLATE_PATCH13,
TEMPLATE_PATCH14,
TEMPLATE_PATCH15,
TEMPLATE_BOULDER1,
TEMPLATE_BOULDER2,
TEMPLATE_BOULDER3,
TEMPLATE_BOULDER4,
TEMPLATE_BOULDER5,
TEMPLATE_BOULDER6,
TEMPLATE_SHORE6,
TEMPLATE_SHORE7,
TEMPLATE_SHORE8,
TEMPLATE_SHORE9,
TEMPLATE_SHORE10,
TEMPLATE_ROAD1,
TEMPLATE_ROAD2,
TEMPLATE_ROAD3,
TEMPLATE_ROAD4,
TEMPLATE_ROAD5,
TEMPLATE_ROAD6,
TEMPLATE_ROAD7,
TEMPLATE_ROAD8,
TEMPLATE_ROAD9,
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_RIVER1,
TEMPLATE_RIVER2,
TEMPLATE_RIVER3,
TEMPLATE_RIVER4,
TEMPLATE_RIVER5,
TEMPLATE_RIVER6,
TEMPLATE_RIVER7,
TEMPLATE_RIVER8,
TEMPLATE_RIVER9,
TEMPLATE_RIVER10,
TEMPLATE_RIVER11,
TEMPLATE_RIVER12,
TEMPLATE_RIVER13,
TEMPLATE_RIVER14,
TEMPLATE_RIVER15,
TEMPLATE_RIVER16,
TEMPLATE_RIVER17,
TEMPLATE_RIVER18,
TEMPLATE_RIVER19,
TEMPLATE_RIVER20,
TEMPLATE_RIVER21,
TEMPLATE_RIVER22,
TEMPLATE_RIVER23,
TEMPLATE_RIVER24,
TEMPLATE_RIVER25,
TEMPLATE_FORD1,
TEMPLATE_FORD2,
TEMPLATE_FALLS1,
TEMPLATE_FALLS2,
TEMPLATE_BRIDGE1,
TEMPLATE_BRIDGE1D,
TEMPLATE_BRIDGE2,
TEMPLATE_BRIDGE2D,
TEMPLATE_BRIDGE3,
TEMPLATE_BRIDGE3D,
TEMPLATE_BRIDGE4,
TEMPLATE_BRIDGE4D,
TEMPLATE_SHORE24,
TEMPLATE_SHORE25,
TEMPLATE_SHORE26,
TEMPLATE_SHORE27,
TEMPLATE_SHORE28,
TEMPLATE_SHORE29,
TEMPLATE_SHORE30,
TEMPLATE_SHORE31,
TEMPLATE_PATCH16,
TEMPLATE_PATCH17,
TEMPLATE_PATCH18,
TEMPLATE_PATCH19,
TEMPLATE_PATCH20,
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_SHORE57,
TEMPLATE_SHORE58,
TEMPLATE_SHORE59,
TEMPLATE_SHORE60,
TEMPLATE_SHORE61,
TEMPLATE_SHORE62,
TEMPLATE_SHORE63,
TEMPLATE_COUNT,
TEMPLATE_NONE=255,
TEMPLATE_FIRST=0
} TemplateType;
//inline TemplateType operator++(TemplateType &, int);
/**********************************************************************
** 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_TREE4,
TERRAIN_TREE5,
TERRAIN_TREE6,
TERRAIN_TREE7,
TERRAIN_TREE8,
TERRAIN_TREE9,
TERRAIN_TREE10,
TERRAIN_TREE11,
TERRAIN_TREE12,
TERRAIN_TREE13,
TERRAIN_TREE14,
TERRAIN_TREE15,
TERRAIN_TREE16,
TERRAIN_TREE17,
TERRAIN_TREE18,
TERRAIN_BLOSSOMTREE1,
TERRAIN_BLOSSOMTREE2,
TERRAIN_CLUMP1,
TERRAIN_CLUMP2,
TERRAIN_CLUMP3,
TERRAIN_CLUMP4,
TERRAIN_CLUMP5,
TERRAIN_ROCK1,
TERRAIN_ROCK2,
TERRAIN_ROCK3,
TERRAIN_ROCK4,
TERRAIN_ROCK5,
TERRAIN_ROCK6,
TERRAIN_ROCK7,
TERRAIN_COUNT,
TERRAIN_FIRST=0
} TerrainType;
//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 terrin. 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;
//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=0, // Large fireball explosion (bulges rightward).
ANIM_GRENADE, // Genade (dirt type) explosion.
ANIM_FRAG1, // Medium fragment throwing explosion -- short decay.
ANIM_FRAG2, // Medium fragment throwing explosion -- long 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_FLAME_N, // Flame thrower firing north.
ANIM_FLAME_NE, // Flame thrower firing north east.
ANIM_FLAME_E, // Flame thrower firing east.
ANIM_FLAME_SE, // Flame thrower firing south east.
ANIM_FLAME_S, // Flame thrower firing south.
ANIM_FLAME_SW, // Flame thrower firing south west.
ANIM_FLAME_W, // Flame thrower firing west.
ANIM_FLAME_NW, // Flame thrower firing north west.
ANIM_CHEM_N, // Chem sprayer firing north.
ANIM_CHEM_NE, // Chem sprayer firing north east.
ANIM_CHEM_E, // Chem sprayer firing east.
ANIM_CHEM_SE, // Chem sprayer firing south east.
ANIM_CHEM_S, // Chem sprayer firing south.
ANIM_CHEM_SW, // Chem sprayer firing south west.
ANIM_CHEM_W, // Chem sprayer firing west.
ANIM_CHEM_NW, // Chem sprayer firing north west.
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).
#ifdef NEVER
ANIM_E1_ROT_FIRE, // Infantry decay animations.
ANIM_E1_ROT_GRENADE,
ANIM_E1_ROT_GUN,
ANIM_E1_ROT_EXP,
ANIM_E2_ROT_FIRE,
ANIM_E2_ROT_GRENADE,
ANIM_E2_ROT_GUN,
ANIM_E2_ROT_EXP,
ANIM_E3_ROT_FIRE,
ANIM_E3_ROT_GRENADE,
ANIM_E3_ROT_GUN,
ANIM_E3_ROT_EXP,
ANIM_E4_ROT_FIRE,
ANIM_E4_ROT_GRENADE,
ANIM_E4_ROT_GUN,
ANIM_E4_ROT_EXP,
#endif
ANIM_SMOKE_M, // Smoke rising from ground.
ANIM_BURN_SMALL, // Small combustable fire effect (with trail off).
ANIM_BURN_MED, // Medium combustable fire effect (with trail off).
ANIM_BURN_BIG, // Large combustable 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_ION_CANNON,
ANIM_ATOM_BLAST,
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_ATOM_DOOR,
ANIM_MOVE_FLASH,
ANIM_OILFIELD_BURN,
ANIM_TRIC_DIE,
ANIM_TREX_DIE,
ANIM_STEG_DIE,
ANIM_RAPT_DIE,
ANIM_CHEM_BALL, // Chemical warrior explosion.
ANIM_FLAG, // CTF flag.
ANIM_BEACON, // Beacon.
ANIM_FIRE_SMALL_VIRTUAL, // Small flame animation (virtual).
ANIM_FIRE_MED_VIRTUAL, // Medium flame animation (virtual).
ANIM_FIRE_MED2_VIRTUAL, // Medium flame animation (oranger) (virtual).
ANIM_FIRE_TINY_VIRTUAL, // Very tiny flames (virtual).
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_ON_GUARD,
DO_FIGHT_READY,
DO_PUNCH,
DO_KICK,
DO_PUNCH_HIT1,
DO_PUNCH_HIT2,
DO_PUNCH_DEATH,
DO_KICK_HIT1,
DO_KICK_HIT2,
DO_KICK_DEATH,
DO_READY_WEAPON,
DO_GUN_DEATH,
DO_EXPLOSION_DEATH,
DO_EXPLOSION2_DEATH,
DO_GRENADE_DEATH,
DO_FIRE_DEATH,
DO_GESTURE1,
DO_SALUTE1,
DO_GESTURE2,
DO_SALUTE2,
// Civilian actions
DO_PULL_GUN,
DO_PLEAD,
DO_PLEAD_DEATH,
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."
// Hand to hand combat messages (yelled rather than radioed).
RADIO_KICK, // "Take this kick, you.. you.."
RADIO_PUNCH, // "Take this punch, you.. you.."
RADIO_PREPARE_TO_BOX,// "Fancy a little fisticuffs, eh?"
RADIO_NEED_REPAIR, // "Are you in need of service depot work?"
RADIO_ON_DEPOT, // "Are you sitting on a service depot?"
RADIO_COUNT
} RadioMessageType;
/****************************************************************************
** These are custom C&C specific types. The CELL is used for map coordinate
** with cell resolution. The COORD type is used for map coordinates that
** have a lepton resolution.
*/
typedef unsigned long COORDINATE;
typedef signed short CELL;
typedef unsigned short TARGET;
#define TARGET_NONE ((TARGET)0)
/****************************************************************************
** 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.
} 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 : 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_ION_CANNON,
MOUSE_NUCLEAR_BOMB,
MOUSE_AIR_STRIKE,
MOUSE_DEMOLITIONS,
MOUSE_AREA_GUARD,
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_BLUE_UP, // Raised blue border.
BOXSTYLE_DIS_DOWN, // Disabled but depressed.
BOXSTYLE_DIS_RAISED, // Disabled but raised.
BOXSTYLE_RAISED_ARROW, // Typical raised edge w/arrow around caption
BOXSTYLE_GREEN_DOWN, // green depressed edge border.
BOXSTYLE_GREEN_RAISED, // green raised edge border.
BOXSTYLE_GREEN_DIS_DOWN, // disabled but depressed.
BOXSTYLE_GREEN_DIS_RAISED, // disabled but raised.
BOXSTYLE_GREEN_BOX, // list box.
BOXSTYLE_GREEN_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, // Amor piercing -- good against armor.
WARHEAD_FIRE, // Incendiary -- Good against flammables.
WARHEAD_LASER, // Light Amplification of Stimulated Emission of Radiation.
WARHEAD_PB, // Particle beam (neutron beam).
WARHEAD_FIST, // punching in hand-to-hand combat
WARHEAD_FOOT, // kicking in hand-to-hand combat
WARHEAD_HOLLOW_POINT, // Sniper bullet type.
WARHEAD_SPORE, // Spores from blossom tree - affect infantry only
WARHEAD_HEADBUTT, // Other dinosaurs butt into people
WARHEAD_FEEDME, // T-Rex eats people, hurts vehicles/buildings
WARHEAD_COUNT
} 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_RIFLE,
WEAPON_CHAIN_GUN,
WEAPON_PISTOL,
WEAPON_M16,
WEAPON_DRAGON,
WEAPON_FLAMETHROWER,
WEAPON_FLAME_TONGUE,
WEAPON_CHEMSPRAY,
WEAPON_GRENADE,
WEAPON_75MM,
WEAPON_105MM,
WEAPON_120MM,
WEAPON_TURRET_GUN,
WEAPON_MAMMOTH_TUSK,
WEAPON_MLRS,
WEAPON_155MM,
WEAPON_M60MG,
WEAPON_TOMAHAWK,
WEAPON_TOW_TWO,
WEAPON_NAPALM,
WEAPON_OBELISK_LASER,
WEAPON_NIKE,
WEAPON_HONEST_JOHN,
WEAPON_STEG,
WEAPON_TREX,
#ifdef PETROGLYPH_EXAMPLE_MOD
WEAPON_NUKE_LOB,
#endif PETROGLYPH_EXAMPLE_MOD
WEAPON_COUNT
} 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
} ArmorType;
/**********************************************************************
** Working MCGA colors that give a pleasing effect for beveled edges and
** other purposes.
*/
#define MAGIC_COL_COUNT 12 // 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 32
#define CYCLE_COLOR_COUNT 7
/**********************************************************************
** Magic color fading pulsing effect limts -- color gun value.
*/
#define MIN_CYCLE_COLOR 16
#define MAX_CYCLE_COLOR 63
/**********************************************************************
** The game's six and eight point fonts have these names.
*/
#define FONT3 "3point.fnt"
#define FONT6 "6point.fnt"
#define FONT8 "8point.fnt"
/**********************************************************************
** 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, // Use 6 point gradient font.
TPF_GREEN12 =0x0008, // Use green tab font
TPF_GREEN12_GRAD =0x0009, // Use graduated green tab 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;
//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));}
/**********************************************************************
** 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 AIRCRAFT_MAX 100 // Lasts for minutes.
#define ANIM_MAX 200 // Lasts only a few seconds.
#define BUILDING_MAX 500 // Lasts for hours.
#define BULLET_MAX 50 // Lasts several seconds.
#define FACTORY_MAX 32 // Lasts a few minutes.
#define HOUSE_MAX 12 // Lasts entire scenario.
#define INFANTRY_MAX 500 // Lasts for minutes.
#define OVERLAY_MAX 1 // Very transitory.
#define REINFORCEMENT_MAX 50 // Maximum number of reinforcements.
#define SMUDGE_MAX 1 // Very transitory.
#define TEAM_MAX 60 // Lasts forever.
#define TEMPLATE_MAX 1 // Very transitory.
#define TERRAIN_MAX 500 // Lasts for hours or eternity.
#define TRIGGER_MAX 80 // Lasts forever.
#define UNIT_MAX 500 // Lasts for minutes.
#define TEAMTYPE_MAX 60 // Lasts forever.
// Save filename description.
#define DESCRIP_MAX 44 // 40 chars + CR + LF + CTRL-Z + NULL
#define MAX_ENTRY_SIZE 15
#define OBUTTON_HEIGHT 9 // Is defined in mapedit.h, need for buttons
#define CONQUER_PATH_MAX 9 // Number of cells to look ahead for movement.
#define EACH_UNIT_MAX (UNIT_MAX/4) // Default maximum any one player can have.
#define EACH_BUILDING_MAX (BUILDING_MAX/4) // 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 : unsigned 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_COUNT
} LandType;
/**********************************************************************
** The theaters of operation are as follows.
*/
typedef enum TheaterType : char {
THEATER_NONE=-1,
THEATER_DESERT,
THEATER_JUNGLE,
THEATER_TEMPERATE,
THEATER_WINTER,
THEATER_COUNT,
THEATER_FIRST=0
} TheaterType;
//inline TheaterType operator++(TheaterType &, int);
#define THEATERF_DESERT (1<<THEATER_DESERT)
#define THEATERF_JUNGLE (1<<THEATER_JUNGLE)
#define THEATERF_TEMPERATE (1<<THEATER_TEMPERATE)
#define THEATERF_WINTER (1<<THEATER_WINTER)
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_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_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);
}
typedef enum DirType : unsigned char {
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=254
} 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);
}
/****************************************************************************
** 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 TICKS_PER_SECOND 15
#define TICKS_PER_MINUTE (TICKS_PER_SECOND * 60)
#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)
/****************************************************************************
** 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=0, // Bipedal.
SPEED_TRACK, // Tracked locomotion.
SPEED_HARVESTER, // Harvester speed rating.
SPEED_WHEEL, // Balloon tires.
SPEED_WINGED, // Lifter's, 'thopters, and rockets.
SPEED_HOVER, // Typical hovercraft logic.
SPEED_FLOAT, // Ships.
SPEED_COUNT,
SPEED_FIRST=SPEED_FOOT
} SpeedType;
/**********************************************************************
** These are the sound effect digitized sample file names.
*/
typedef enum VocType : char{
VOC_NONE=-1,
VOC_RAMBO_PRESENT,// "I've got a present for ya"
VOC_RAMBO_CMON, // "c'mon"
VOC_RAMBO_UGOTIT, // "you got it"
VOC_RAMBO_COMIN, // "keep 'em commin'"
VOC_RAMBO_LAUGH, // "hahaha"
VOC_RAMBO_LEFTY, // "that was left handed"
VOC_RAMBO_NOPROB, // "no problem"
// VOC_RAMBO_OHSH, // "oh shiiiiii...."
VOC_RAMBO_ONIT, // "I'm on it"
VOC_RAMBO_YELL, // "ahhhhhhh"
VOC_RAMBO_ROCK, // "time to rock and roll"
VOC_RAMBO_TUFF, // "real tuff guy"
VOC_RAMBO_YEA, // "yea"
VOC_RAMBO_YES, // "yes"
VOC_RAMBO_YO, // "yo"
VOC_GIRL_OKAY, // "okay"
VOC_GIRL_YEAH, // "yeah?"
VOC_GUY_OKAY, // "okay"
VOC_GUY_YEAH, // "yeah?"
VOC_2DANGER, // "negative, too dangerous"
VOC_ACKNOWL, // "acknowledged"
VOC_AFFIRM, // "affirmative"
VOC_AWAIT, // "awaiting orders"
// VOC_BACKUP, // "send backup"
// VOC_HELP, // "send help"
VOC_MOVEOUT, // "movin' out"
VOC_NEGATIVE, // "negative"
VOC_NO_PROB, // "not a problem"
VOC_READY, // "ready and waiting"
VOC_REPORT, // "reporting"
VOC_RIGHT_AWAY, // "right away sir"
VOC_ROGER, // "roger"
// VOC_SIR, // "sir?"
// VOC_SQUAD, // "squad reporting"
// VOC_PRACTICE, // "target practice"
VOC_UGOTIT, // "you got it"
VOC_UNIT, // "unit reporting"
VOC_VEHIC, // "vehicle reporting"
VOC_YESSIR, // "yes sir"
VOC_BAZOOKA, // Gunfire
VOC_BLEEP, // Clean metal bing
VOC_BOMB1, // Crunchy parachute bomb type explosion
VOC_BUTTON, // Dungeon Master button click
VOC_RADAR_ON, // Elecronic static with beeps
VOC_CONSTRUCTION, // construction sounds
VOC_CRUMBLE, // muffled crumble sound
VOC_FLAMER1, // flame thrower
VOC_RIFLE, // rifle shot
VOC_M60, // machine gun burst -- 6 rounds
VOC_GUN20, // bat hitting heavy metal door
VOC_M60A, // medium machine gun burst
VOC_MINI, // mini gun burst
VOC_RELOAD, // gun clip reload
VOC_SLAM, // metal plates slamming together
VOC_HVYGUN10, // loud sharp cannon
VOC_ION_CANNON, // partical beam
VOC_MGUN11, // alternate tripple burst
VOC_MGUN2, // M-16 tripple burst
VOC_NUKE_FIRE, // long missile sound
VOC_NUKE_EXPLODE, // long but not loud explosion
VOC_LASER, // humming laser beam
VOC_LASER_POWER, // warming up sound of laser beam
VOC_RADAR_OFF, // doom door slide
VOC_SNIPER, // silenced rifle fire
VOC_ROCKET1, // rocket launch variation #1
VOC_ROCKET2, // rocket launch variation #2
VOC_MOTOR, // dentists drill
VOC_SCOLD, // cannot perform action feedback tone
VOC_SIDEBAR_OPEN, // xylophone clink
VOC_SIDEBAR_CLOSE,// xylophone clink
VOC_SQUISH2, // crushing infantry
VOC_TANK1, // sharp tank fire with recoil
VOC_TANK2, // sharp tank fire
VOC_TANK3, // sharp tank fire
VOC_TANK4, // big gun tank fire
VOC_UP, // credits counting up
VOC_DOWN, // credits counting down
VOC_TARGET, // target sound
VOC_SONAR, // sonar echo
VOC_TOSS, // air swish
VOC_CLOAK, // stealth tank
VOC_BURN, // burning crackle
VOC_TURRET, // muffled gunfire
VOC_XPLOBIG4, // very long muffled explosion
VOC_XPLOBIG6, // very long muffled explosion
VOC_XPLOBIG7, // very long muffled explosion
VOC_XPLODE, // long soft muffled explosion
VOC_XPLOS, // short crunchy explosion
VOC_XPLOSML2, // muffled mechanical explosion
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_SCREAM12, // short infantry scream
VOC_YELL1, // long infantry scream
VOC_YES, // "Yes?"
VOC_COMMANDER, // "Commander?"
VOC_HELLO, // "Hello?"
VOC_HMMM, // "Hmmm?"
// VOC_PROCEED1, // "I will proceed, post haste."
// VOC_PROCEED2, // "I will proceed, at once."
// VOC_PROCEED3, // "I will proceed, immediately."
// VOC_EXCELLENT1, // "That is an excellent plan."
// VOC_EXCELLENT2, // "Yes, that is an excellent plan."
VOC_EXCELLENT3, // "A wonderful plan."
// VOC_EXCELLENT4, // "Asounding plan of action commander."
// VOC_EXCELLENT5, // "Remarkable contrivance."
VOC_OF_COURSE, // "Of course."
VOC_YESYES, // "Yes yes yes."
VOC_QUIP1, // "Mind the Tiberium."
// VOC_QUIP2, // "A most remarkable Metasequoia Glyptostroboides."
VOC_THANKS, // "Thank you."
VOC_CASHTURN, // Sound of money being piled up.
VOC_BLEEPY3, // Clean computer bleep sound.
VOC_DINOMOUT, // Movin' out in dino-speak.
VOC_DINOYES, // Yes Sir in dino-speak.
VOC_DINOATK1, // Dino attack sound.
VOC_DINODIE1, // Dino die sound.
VOC_BEACON, // Beacon sound.
#ifdef PETROGLYPH_EXAMPLE_MOD
VOC_NUKE_LOB, // Modded unit firing sound
#endif
VOC_COUNT,
VOC_BUILD_SELECT=VOC_TARGET,
VOC_FIRST=0
} VocType;
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_DEAD_GDI, // GDI unit destroyed
VOX_DEAD_NOD, // Nod unit destroyed
VOX_DEAD_CIV, // civilian killed
// VOX_AFFIRMATIVE, // affirmative
// VOX_NEGATIVE, // negative
// VOX_UPGRADE_UNIT, // upgrade complete, new unit available
// VOX_UPGRADE_STRUCT, // upgrade complete, new structure available
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_NO_POWER, // insufficient power
VOX_NEED_MO_MONEY, // need more funds
VOX_BASE_UNDER_ATTACK, // our base is under attack
VOX_INCOMING_MISSILE, // incoming missile
VOX_ENEMY_PLANES, // enemy planes approaching
VOX_INCOMING_NUKE, // nuclear warhead approaching - "NUKE1"
// VOX_RADIATION_OK, // radiation levels are acceptable
// VOX_RADIATION_FATAL, // radiation levels are fatal
VOX_UNABLE_TO_BUILD, // unable to build more
VOX_PRIMARY_SELECTED, // primary building selected
// VOX_REPAIRS_COMPLETE, // repairs completed
VOX_NOD_CAPTURED, // Nod building captured
VOX_GDI_CAPTURED, // GDI building captured
// VOX_STRUCTURE_SOLD, // structure sold
VOX_ION_CHARGING, // ion cannon charging
VOX_ION_READY, // ion cannon ready
VOX_NUKE_AVAILABLE, // nuclear weapon available
VOX_NUKE_LAUNCHED, // nuclear weapon launched - "NUKLNCH1"
VOX_UNIT_LOST, // unit lost
VOX_STRUCTURE_LOST, // structure lost
VOX_NEED_HARVESTER, // need harvester
VOX_SELECT_TARGET, // select target
VOX_AIRSTRIKE_READY, // airstrike ready
VOX_NOT_READY, // not ready
VOX_TRANSPORT_SIGHTED, // Nod transport sighted
VOX_TRANSPORT_LOADED, // Nod transport loaded
VOX_PREPARE, // enemy approaching
VOX_NEED_MO_CAPACITY, // silos needed
VOX_SUSPENDED, // on hold
VOX_REPAIRING, // repairing
VOX_ENEMY_STRUCTURE, // enemy structure destroyed
VOX_GDI_STRUCTURE, // GDI structure destroyed
VOX_NOD_STRUCTURE, // NOD structure destroyed
VOX_ENEMY_UNIT, // Enemy unit destroyed.
// VOX_GOLD_UNIT, // gold unit destroyed
// VOX_GOLD_STRUCTURE, // gold structure destroyed
// VOX_GOLD_ONLINE, // gold player online
// VOX_GOLD_OFFLINE, // gold player has departed
// VOX_GOLD_LOST, // gold player destroyed
// VOX_GOLD_WON, // gold player is victorious
// VOX_RED_UNIT, // red unit destroyed
// VOX_RED_STRUCTURE, // red structure destroyed
// VOX_RED_ONLINE, // red player online
// VOX_RED_OFFLINE, // red player has departed
// VOX_RED_LOST, // red player destroyed
// VOX_RED_WON, // red player is victorious
// VOX_GREY_UNIT, // grey unit destroyed
// VOX_GREY_STRUCTURE, // grey structure destroyed
// VOX_GREY_ONLINE, // grey player online
// VOX_GREY_OFFLINE, // grey player has departed
// VOX_GREY_LOST, // grey player destroyed
// VOX_GREY_WON, // grey player is victorious
// VOX_ORANGE_UNIT, // orange unit destroyed
// VOX_ORANGE_STRUCTURE, // orange structure destroyed
// VOX_ORANGE_ONLINE, // orange player online
// VOX_ORANGE_OFFLINE, // orange player has departed
// VOX_ORANGE_LOST, // orange player destroyed
// VOX_ORANGE_WON, // orange player is victorious
// VOX_GREEN_UNIT, // green unit destroyed
// VOX_GREEN_STRUCTURE, // green structure destroyed
// VOX_GREEN_ONLINE, // green player online
// VOX_GREEN_OFFLINE, // green player has departed
// VOX_GREEN_LOST, // green player destroyed
// VOX_GREEN_WON, // green player is victorious
// VOX_BLUE_UNIT, // blue unit destroyed
// VOX_BLUE_STRUCTURE, // blue structure destroyed
// VOX_BLUE_ONLINE, // blue player online
// VOX_BLUE_OFFLINE, // blue player has departed
// VOX_BLUE_LOST, // blue player destroyed
// VOX_BLUE_WON, // blue player is victorious
VOX_COUNT,
// VOX_MULTI_UNIT = VOX_GOLD_UNIT,
// VOX_MULTI_STRUCTURE = VOX_GOLD_STRUCTURE,
// VOX_MULTI_ONLINE = VOX_GOLD_ONLINE,
// VOX_MULTI_OFFLINE = VOX_GOLD_OFFLINE,
// VOX_MULTI_LOST = VOX_GOLD_LOST,
// VOX_MULTI_WON = VOX_GOLD_WON,
VOX_FIRST=0
} VoxType;
#define NUM_MULTI_VOICES 6
/****************************************************************************
** 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_FIRST=0,
SOURCE_NORTH=SOURCE_FIRST, // From north edge.
SOURCE_EAST, // From east edge.
SOURCE_SOUTH, // From south edge.
SOURCE_WEST, // From west edge.
SOURCE_SHIPPING, // Shipping lane.
SOURCE_BEACH, // Selects beach to land upon.
SOURCE_AIR, // Dropped by air (someplace).
SOURCE_VISIBLE, // Dropped where player can see.
SOURCE_ENEMYBASE, // Dropped at enemy base.
SOURCE_HOMEBASE, // Dropped at friendly base.
SOURCE_OCEAN, // Enters from ocean map edge.
SOURCE_COUNT
} SourceType;
/****************************************************************************
** 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 {
int Color; // Radar map (map editor) id color.
unsigned char 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 = 26, // Home-cell for this scenario
WAYPT_REINF, // cell where reinforcements arrive
WAYPT_COUNT,
} WaypointType;
/****************************************************************************
** Max # of players total, including the game's owner
*/
#define MAX_PLAYERS 6
/****************************************************************************
** These are the possible types of multiplayer games supported.
*/
typedef enum GameEnum : unsigned char {
GAME_NORMAL, // not multiplayer
GAME_MODEM, // modem game
GAME_NULL_MODEM, // NULL-modem
GAME_IPX, // IPX Network game
GAME_INTERNET, // WInsock game
GAME_GLYPHX_MULTIPLAYER // Multiplayer game controlled by the GLYPHX engine. ST - 3/12/2019 10:04AM
} GameType;
#define MPLAYER_BUILD_LEVEL_MAX 7
/****************************************************************************
** This is the max character length of a player's name
*/
#define MPLAYER_NAME_MAX 12
/****************************************************************************
** Max # of colors for multiplayer games
*/
#define MAX_MPLAYER_COLORS 6
/****************************************************************************
** This defines the various possible communications protocols.
*/
typedef enum CommProtocolEnum : unsigned char {
COMM_PROTOCOL_SINGLE_NO_COMP = 0, // single frame with no compression
COMM_PROTOCOL_SINGLE_E_COMP, // single frame with event compression
COMM_PROTOCOL_MULTI_E_COMP, // multiple frame with event compression
COMM_PROTOCOL_COUNT,
DEFAULT_COMM_PROTOCOL = COMM_PROTOCOL_SINGLE_NO_COMP,
} CommProtocolType;
/****************************************************************************
** Min value for MaxAhead, for both net & modem; only applies for
** COMM_PROTOCOL_MULTI_E_COMP.
*/
#define MODEM_MIN_MAX_AHEAD 5
#define NETWORK_MIN_MAX_AHEAD 2
/****************************************************************************
** Max length of inter-player message buffers. Messages.Init() should specify
** a value <= this. For editing messages, the "to" field length is added to
** this length to generate the entire editable message length. For displayed
** messages, a "From" prefix length should be added to this value to generate
** the entire max displayable message length.
*/
#define COMPAT_MESSAGE_LENGTH 28
#define MAX_MESSAGE_SEGMENTS 3
#define MAX_MESSAGE_LENGTH COMPAT_MESSAGE_LENGTH*3
/*
** Defines for magic numbers to place in messages to allow concatenation.
*/
#define MESSAGE_HEAD_MAGIC_NUMBER 0xFACE
#define MESSAGE_TAIL_MAGIC_MUMBER 0xECAF
/*
** Max # of allowed messages at one time
*/
#define MAX_NUM_MESSAGES 10
#define PORTBUF_MAX 64 // Dialog field size
#define IRQBUF_MAX 3
#define BAUDBUF_MAX 7
#define INITSTRBUF_MAX 41
#define CWAITSTRBUF_MAX 16
#define CREDITSBUF_MAX 5
#define MODEM_NAME_MAX PORTBUF_MAX - 1 // Max length of modem name in list box
typedef enum DetectPortType : unsigned char {
PORT_VALID = 0,
PORT_INVALID,
PORT_IRQ_INUSE
} DetectPortType;
typedef enum DialStatusType : unsigned char {
DIAL_CONNECTED = 0,
DIAL_NO_CARRIER,
DIAL_BUSY,
DIAL_ERROR,
DIAL_NO_DIAL_TONE,
DIAL_CANCELED
} DialStatusType;
typedef enum DialMethodType : unsigned char {
DIAL_TOUCH_TONE = 0,
DIAL_PULSE,
DIAL_METHODS
} DialMethodType;
typedef enum CallWaitStringType : unsigned char {
CALL_WAIT_TONE_1 = 0,
CALL_WAIT_TONE_2,
CALL_WAIT_PULSE,
CALL_WAIT_CUSTOM,
CALL_WAIT_STRINGS_NUM
} CallWaitStringType;
/****************************************************************************
** This structure defines the settings for the serial port.
*/
typedef struct {
int Port;
int IRQ;
int Baud;
DialMethodType DialMethod;
int InitStringIndex;
int CallWaitStringIndex;
char CallWaitString[ CWAITSTRBUF_MAX ];
bool Init;
bool Compression;
bool ErrorCorrection;
bool HardwareFlowControl;
char ModemName [ MODEM_NAME_MAX ];
} SerialSettingsType;
/****************************************************************************
** These are the various commands sent during startup of a Serial game.
*/
typedef enum SerialCommandType : unsigned short {
SERIAL_CONNECT = 100, // Are you there? Hello? McFly?
SERIAL_GAME_OPTIONS = 101, // Hey, dudes, here's some new game options
SERIAL_SIGN_OFF = 102, // Bogus, dudes, my boss is coming; I'm outta here!
SERIAL_GO = 103, // OK, dudes, jump into the game loop!
SERIAL_MESSAGE = 104, // Here's a message
SERIAL_TIMING = 105, // timimg packet
SERIAL_SCORE_SCREEN = 106, // player at score screen
SERIAL_READY_TO_GO = 107, // Host is ready to start the game
SERIAL_LAST_COMMAND // last command
} SerialCommandType;
//
// how much time (ticks) to go by before sending another packet
// to simulate traffic.
//
#define PACKET_TIMING_TIMEOUT 40
/****************************************************************************
** These is the structure sent over the network Global Channel.
** Also used for the Null-Modem and Modem.
*/
typedef struct {
SerialCommandType Command; // One of the enum's defined above
char Name[MPLAYER_NAME_MAX]; // Player or Game Name
int Version; // game's version number
HousesType House; // player's House
unsigned char Color; // player's color or SIGNOFF ID
unsigned char Scenario; // Scenario #
unsigned int Credits; // player's credits
unsigned int IsBases : 1; // 1 = bases are allowed
unsigned int IsTiberium : 1; // 1 = tiberium is allowed
unsigned int IsGoodies : 1; // 1 = goodies are allowed
unsigned int IsGhosties : 1; // 1 = ghosts are allowed
unsigned char BuildLevel; // buildable level
unsigned char UnitCount; // max # units
int Seed; // random number seed
SpecialClass Special; // command-line options
unsigned int GameSpeed; // Game Speed
unsigned long ResponseTime; // packet response time
char Message[COMPAT_MESSAGE_LENGTH]; // inter-player message
unsigned char ID; // ID of sender of message
} SerialPacketType;
typedef enum ModemGameType : unsigned char {
MODEM_NULL_HOST = 0,
MODEM_NULL_JOIN,
MODEM_DIALER,
MODEM_ANSWERER,
INTERNET_HOST = MODEM_NULL_HOST,
INTERNET_JOIN = MODEM_NULL_JOIN
} ModemGameType;
/****************************************************************************
** This is the max number of events supported on one frame.
*/
#define MAX_EVENTS 256
/****************************************************************************
** These are the various commands sent over the network's Global Channel.
*/
typedef enum NetCommandType : unsigned char {
NET_QUERY_GAME, // Hey, what games are out there?
NET_ANSWER_GAME, // Yo, Here's my game's name!
NET_QUERY_PLAYER, // Hey, what players are in this game?
NET_ANSWER_PLAYER, // Yo, I'm in that game!
NET_QUERY_JOIN, // Hey guys, can I play too?
NET_CONFIRM_JOIN, // Well, OK, if you really want to.
NET_REJECT_JOIN, // No, you can't join; sorry, dude.
NET_GAME_OPTIONS, // Hey, dudes, here's some new game options
NET_SIGN_OFF, // Bogus, dudes, my boss is coming; I'm outta here!
NET_GO, // OK, dudes, jump into the game loop!
NET_MESSAGE, // Here's a message
NET_PING, // I'm pinging you to take a time measurement
} NetCommandType;
/****************************************************************************
** These is the structure sent over the network Global Channel.
*/
typedef struct {
NetCommandType Command; // One of the enum's defined above
char Name[MPLAYER_NAME_MAX]; // Player or Game Name
union {
struct {
int Version; // game's version number
unsigned int IsOpen : 1; // 1 = game is open for joining
} GameInfo;
struct {
HousesType House; // player's House
unsigned int Color; // player's color
unsigned long NameCRC; // CRC of player's game's name
} PlayerInfo;
struct {
unsigned char Scenario; // Scenario #
unsigned int Credits; // player's credits
unsigned int IsBases : 1; // 1 = bases are allowed
unsigned int IsTiberium : 1; // 1 = tiberium is allowed
unsigned int IsGoodies : 1; // 1 = goodies are allowed
unsigned int IsGhosties : 1; // 1 = ghosts are allowed
unsigned char BuildLevel; // buildable level
unsigned char UnitCount; // max # units
int Seed; // random number seed
SpecialClass Special; // command-line options
unsigned int GameSpeed; // Game Speed
} ScenarioInfo;
struct {
char Buf[COMPAT_MESSAGE_LENGTH]; // inter-user message
unsigned char ID; // ID of sender of message
unsigned long NameCRC; // CRC of sender's Game Name
} Message;
struct {
int OneWay; // one-way response time
} ResponseTime;
};
} GlobalPacketType;
/****************************************************************************
** This structure is for keeping score in multiplayer games.
*/
#define MAX_MULTI_NAMES 8 // max # names (rows) on the score screen
#define MAX_MULTI_GAMES 4 // max # games (columns) on the score screen
typedef struct {
char Name[MPLAYER_NAME_MAX];
int Wins;
int Kills[MAX_MULTI_GAMES];
int Color;
} MPlayerScoreType;
typedef enum {
KF_NUMBER = 0x08,
KF_UNCOMP = 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 {
SDLG_NONE,
SDLG_OPTIONS,
SDLG_SURRENDER,
SDLG_SPECIAL,
} SpecialDialogType;
typedef enum : unsigned char {
CC_GDI_COLOR = YELLOW,
CC_NOD_COLOR = RED,
CC_BLUE_GREEN = CYAN,
CC_BLUE_GREY = LTBLUE,
CC_ORANGE = PURPLE,
CC_GREEN = GREEN,
CC_TAN = BROWN,
CC_GREEN_SHADOW = 140,
CC_GREEN_BKGD = 141,
CC_GREEN_CORNERS = CC_GREEN_BKGD,
CC_LIGHT_GREEN = 159,
CC_GREEN_BOX = CC_LIGHT_GREEN,
CC_BRIGHT_GREEN = 167,
CC_UNDERLINE = CC_BRIGHT_GREEN,
CC_GREEN_BAR = CC_BRIGHT_GREEN,
} 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_SMALL_THUMB=18, // Small slider thumb.
OPTION_LARGE_THUMB=19, // Large slider thumb.
OPTION_PLAY=20, // Play track.
OPTION_STOP=22, // Stop track.
OPTION_UP_ARROW=24, // Slider up arrow.
OPTION_DOWN_ARROW=26, // Slider down arrow.
OPTION_BUTTON_GDI=28, // Huh?
OPTION_BUTTON_NOD=30, // Huh?
OPTION_COUNT
} OptionControlType;
/****************************************************************************
** Used to store firing data for a unit.
*/
typedef struct {
COORDINATE Center;
int Distance;
} FireDataType;
#define TOTAL_CRATE_TYPES 15
#define size_of(typ,id) sizeof(((typ*)0)->id)
/*
**
** Imports from Red Alert for AI. ST - 7/16/2019 11:44AM
**
**
**
*/
#ifdef USE_RA_AI
/**********************************************************************
** 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;
#endif //USE_RA_AI
#pragma warning (pop)
#endif