CnC_Remastered_Collection/TIBERIANDAWN/DEFINES.H

2978 lines
93 KiB
C++
Raw Permalink 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: 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.
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, // 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?"
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
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