/* ** Command & Conquer(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program 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. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ /* $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 /********************************************************************** ** 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 /********************************************************************** ** 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 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 /********************************************************************** ** These enumerations are used to implement RTTI. */ typedef enum RTTIType { 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; /********************************************************************** ** 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 40000L // 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<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_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 { 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 { 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{ 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 { 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 { 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< 2 players. */ typedef enum ScenarioPlayerEnum { 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 { 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 { 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 { 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 { 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 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 { 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 { 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{ 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{ 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 UNIT_COUNT, UNIT_FIRST=0 } UnitType; inline UnitType operator++(UnitType &, int); #define UNITF_HTANK (1L<id) #endif