CnC_Remastered_Collection

Command and Conquer: Red Alert
Log | Files | Refs | README | LICENSE

CONST.CPP (28620B)


      1 //
      2 // Copyright 2020 Electronic Arts Inc.
      3 //
      4 // TiberianDawn.DLL and RedAlert.dll and corresponding source code is free 
      5 // software: you can redistribute it and/or modify it under the terms of 
      6 // the GNU General Public License as published by the Free Software Foundation, 
      7 // either version 3 of the License, or (at your option) any later version.
      8 
      9 // TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed 
     10 // in the hope that it will be useful, but with permitted additional restrictions 
     11 // under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT 
     12 // distributed with this program. You should have received a copy of the 
     13 // GNU General Public License along with permitted additional restrictions 
     14 // with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
     15 
     16 /* $Header: /CounterStrike/CONST.CPP 1     3/03/97 10:24a Joe_bostic $ */
     17 /***********************************************************************************************
     18  ***              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               ***
     19  ***********************************************************************************************
     20  *                                                                                             *
     21  *                 Project Name : Command & Conquer                                            *
     22  *                                                                                             *
     23  *                    File Name : CONST.CPP                                                    *
     24  *                                                                                             *
     25  *                   Programmer : Joe L. Bostic                                                *
     26  *                                                                                             *
     27  *                   Start Date : September 20, 1993                                           *
     28  *                                                                                             *
     29  *                  Last Update : September 20, 1993   [JLB]                                   *
     30  *                                                                                             *
     31  *---------------------------------------------------------------------------------------------*
     32  * Functions:                                                                                  *
     33  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
     34 
     35 #include "function.h"
     36 
     37 
     38 /***************************************************************************
     39 **	These are the access passwords used to activate cheat mode, editor mode,
     40 **	and special game options.
     41 */
     42 unsigned long const PlayCodes[] = {
     43 	0xE0792D6D,					// Dwight Okahara
     44 	0x90046ECF,					// Paul S. Mudra
     45 	0xC3EE9A26,					// Frank Klepaki
     46 	0xED382178,					// Ed Del Castillo
     47 	0L
     48 };
     49 
     50 unsigned long const CheatCodes[] = {
     51 	0xA0E2AB53,					// Joseph Hewitt
     52 	0x00532693,					// Mike Lightner
     53 	0x7DDFF824,					// Joe Bostic
     54 	0x2CB5CF01,					// Phil Gorrow
     55 	0xB5B63531,					// Bill Randolph
     56 	0xDFABC23A,					// Adam Isgreen
     57 	0x52B19A22,					// Erik Yeo
     58 	0xBE79088C,					// David Dettmer
     59 	0xB216AE7E,					// Barry Green
     60 	0x0E07B213,					// Steve Tall
     61 	0L
     62 };
     63 
     64 
     65 unsigned long const EditorCodes[] = {
     66 	0xA2C09326,					// Erik Yeo
     67 	0x1F944BB3,					// Mike Lightner
     68 	0xDE07154D,					// Adam Isgreen
     69 	0x0E07B213,					// Steve Tall
     70 	0x16B170B1,					// Joe Bostic
     71 	0L
     72 };
     73 
     74 
     75 /***********************************************************************************************
     76 **	Unit order names. These names correspond to the player selectable orders
     77 **	a unit can have. The system initiated orders have no use for the ASCII name
     78 **	associated, but they are listed here for completeness sake.
     79 */
     80 char const * Missions[MISSION_COUNT] = {
     81 	"Sleep",
     82 	"Attack",
     83 	"Move",
     84 	"QMove",
     85 	"Retreat",
     86 	"Guard",
     87 	"Sticky",
     88 	"Enter",
     89 	"Capture",
     90 	"Harvest",
     91 	"Area Guard",
     92 	"Return",
     93 	"Stop",
     94 	"Ambush",
     95 	"Hunt",
     96 	"Unload",
     97 	"Sabotage",
     98 	"Construction",
     99 	"Selling",
    100 	"Repair",
    101 	"Rescue",
    102 	"Missile",
    103 	"Harmless"
    104 };
    105 
    106 
    107 /***************************************************************************
    108 **	Special weapon names.
    109 */
    110 #ifdef SCENARIO_EDITOR
    111 char const * const SpecialWeaponName[SPC_COUNT] = {
    112 	"Sonar Pulse",
    113 	"Nuclear Missile",
    114 	"Chronosphere",
    115 	"Parachute Bomb",
    116 	"Paratroopers",
    117 	"Recon Plane",
    118 	"Iron Curtain",
    119 	"GPS Satellite"
    120 };
    121 #endif
    122 int const SpecialWeaponHelp[SPC_COUNT] = {
    123 	TXT_SONAR_PULSE,
    124 	TXT_NUCLEAR_BOMB,
    125 	TXT_CHRONOSHIFT,
    126 	TXT_PARA_BOMB,
    127 	TXT_PARA_INFANTRY,
    128 	TXT_SPY_MISSION,
    129 	TXT_INVUL,
    130 	TXT_GPS_SATELLITE
    131 };
    132 char const * const SpecialWeaponFile[SPC_COUNT] = {
    133 	"SONR",
    134 	"ATOM",
    135 	"WARP",
    136 	"PBMB",
    137 	"PINF",
    138 	"CAM",
    139 	"INFX",
    140 	"GPSS"
    141 };
    142 
    143 
    144 /***************************************************************************
    145 **	Type of quarry to search out and attack. These values are used for team
    146 **	attack missions.
    147 */
    148 char const * const QuarryName[QUARRY_COUNT] = {
    149 	"N/A",
    150 	"Anything",
    151 	"Buildings - any",
    152 	"Harvesters",
    153 	"Infantry",
    154 	"Vehicles - any",
    155 	"Ships - any",
    156 	"Factories",
    157 	"Base Defenses",
    158 	"Base Threats",
    159 	"Power Facilities",
    160 	"Fake Buildings"
    161 };
    162 
    163 
    164 /***************************************************************************
    165 **	These are the text names for the formation types.
    166 */
    167 char const * const FormationName[FORMATION_COUNT] = {
    168 	"None",
    169 
    170 	"Tight",
    171 	"Loose",
    172 	"Wedge North",
    173 	"Wedge East",
    174 	"Wedge South",
    175 	"Wedge West",
    176 	"Line N/S",
    177 	"Line E/W"
    178 };
    179 
    180 
    181 /***************************************************************************
    182 **	These are the ASCII names for the reinforcement sources.
    183 */
    184 char const * const SourceName[SOURCE_COUNT] =
    185 {
    186 	"North",
    187 	"East",
    188 	"South",
    189 	"West",
    190 	"Air"
    191 };
    192 
    193 
    194 /***************************************************************************
    195 **	These are the text names for the various armor types a unit may possess.
    196 */
    197 char const * const ArmorName[ARMOR_COUNT] = {
    198 	"none",
    199 	"wood",
    200 	"light",
    201 	"heavy",
    202 	"concrete"
    203 };
    204 
    205 
    206 // HACK ALERT! This unused text string is here to stop Watcom from crashing. There is some
    207 // magic text heap length that causes a crash before the code executes. This dummy string
    208 // changes the text heap length enough to stop the crash. Who knows why, but it works.
    209 char * __test__ = "alskdfjlasdfjkajsdfkja;sldjfklasj9awutreqjfnfdkvnldzlknvadsjgflkasdjfkajsdfas";
    210 
    211 
    212 /***************************************************************************
    213 **	The list of VQ filenames.
    214 */
    215 char const * const VQName[VQ_COUNT] = {
    216 	"AAGUN",
    217 	"MIG",
    218 	"SFROZEN",
    219 	"AIRFIELD",
    220 	"BATTLE",
    221 	"BMAP",
    222 	"BOMBRUN",
    223 	"DPTHCHRG",
    224 	"GRVESTNE",
    225 	"MONTPASS",
    226 	"MTNKFACT",
    227 	"CRONTEST",
    228 	"OILDRUM",
    229 	"ALLIEND",
    230 	"RADRRAID",
    231 	"SHIPYARD", // MISSING
    232 	"SHORBOMB",
    233 	"SITDUCK",
    234 	"SLNTSRVC",
    235 	"SNOWBASE",
    236 	"EXECUTE",
    237 	"REDINTRO",			// low res.
    238 	"NUKESTOK",
    239 	"V2ROCKET",
    240 	"SEARCH",
    241 	"BINOC",
    242 	"ELEVATOR",
    243 	"FROZEN",
    244 	"MCV",
    245 	"SHIPSINK",
    246 	"SOVMCV",
    247 	"TRINITY",
    248 	"ALLYMORF",
    249 	"APCESCPE",
    250 	"BRDGTILT",
    251 	"CRONFAIL",
    252 	"STRAFE",
    253 	"DESTROYR",
    254 	"DOUBLE",
    255 	"FLARE",
    256 	"SNSTRAFE",
    257 	"LANDING",
    258 	"ONTHPRWL",
    259 	"OVERRUN",
    260 	"SNOWBOMB",
    261 	"SOVCEMET",
    262 	"TAKE_OFF",
    263 	"TESLA",
    264 	"SOVIET8",
    265 	"SPOTTER",
    266 	"ALLY1",
    267 	"ALLY2",
    268 	"ALLY4",
    269 	"SOVFINAL",
    270 	"ASSESS",
    271 	"SOVIET10",
    272 	"DUD",
    273 	"MCV_LAND",
    274 	"MCVBRDGE",
    275 	"PERISCOP",
    276 	"SHORBOM1",
    277 	"SHORBOM2",
    278 	"SOVBATL",
    279 	"SOVTSTAR",
    280 	"AFTRMATH",
    281 	"SOVIET11",
    282 	"MASASSLT",
    283 	"ENGLISH",		// High res. Intro
    284 	"SOVIET1",
    285 	"SOVIET2",
    286 	"SOVIET3",
    287 	"SOVIET4",
    288 	"SOVIET5",
    289 	"SOVIET6",
    290 	"SOVIET7",
    291 	"PROLOG",
    292 	"AVERTED",
    293 	"COUNTDWN",
    294 	"MOVINGIN",
    295 	"ALLY10",
    296 	"ALLY12",
    297 	"ALLY5",
    298 	"ALLY6",
    299 	"ALLY8",
    300 	"TANYA1",
    301 	"TANYA2",
    302 	"ALLY10B",
    303 	"ALLY11",
    304 	"ALLY14",
    305 	"ALLY9",
    306 	"SPY",
    307 	"TOOFAR",
    308 	"SOVIET12",
    309 	"SOVIET13",
    310 	"SOVIET9",
    311 	"BEACHEAD",
    312 	"SOVIET14",
    313 	"SIZZLE",   //MISSING
    314 	"SIZZLE2",  //MISSING
    315 	"ANTEND",
    316 	"ANTINTRO",
    317 
    318 
    319 		//2019/11/12 JAS - Added for Retaliation movies
    320 
    321 		"RETALIATION_ALLIED1",
    322 		"RETALIATION_ALLIED2",
    323 		"RETALIATION_ALLIED3",
    324 		"RETALIATION_ALLIED4",
    325 		"RETALIATION_ALLIED5",
    326 		"RETALIATION_ALLIED6",
    327 		"RETALIATION_ALLIED7",
    328 		"RETALIATION_ALLIED8",
    329 		"RETALIATION_ALLIED9",
    330 		"RETALIATION_ALLIED10",
    331 
    332 		"RETALIATION_SOVIET1",
    333 		"RETALIATION_SOVIET2",
    334 		"RETALIATION_SOVIET3",
    335 		"RETALIATION_SOVIET4",
    336 		"RETALIATION_SOVIET5",
    337 		"RETALIATION_SOVIET6",
    338 		"RETALIATION_SOVIET7",
    339 		"RETALIATION_SOVIET8",
    340 		"RETALIATION_SOVIET9",
    341 		"RETALIATION_SOVIET10",
    342 		"RETALIATION_WINA",
    343 		"RETALIATION_WINS",
    344 		"RETALIATION_ANTS"
    345 };
    346 
    347 
    348 /***************************************************************************
    349 **	Relative coordinate offsets from the center of a cell for each
    350 **	of the legal positions that an object in a cell may stop at. Only infantry
    351 **	are allowed to stop at other than the center of the cell.
    352 */
    353 COORDINATE const StoppingCoordAbs[5] = {
    354 	0x00800080L,	// center
    355 	0x00400040L,	// upper left
    356 	0x004000C0L,	// upper right
    357 	0x00C00040L,	// lower left
    358 	0x00C000C0L		// lower right
    359 };
    360 
    361 
    362 /***************************************************************************
    363 **	Converts pixel values (cell relative) into the appropriate lepton (sub cell)
    364 **	value. This is used to convert pixel (screen) coordinates into the underlying
    365 **	coordinate system.
    366 */
    367 unsigned char const Pixel2Lepton[24] = {
    368 	0x00,0x0B,0x15,0x20,0x2B,0x35,0x40,0x4B,
    369 	0x55,0x60,0x6B,0x75,0x80,0x8B,0x95,0xA0,
    370 	0xAB,0xB5,0xC0,0xCB,0xD5,0xE0,0xEB,0xF5
    371 };
    372 
    373 
    374 /***************************************************************************
    375 **	This array is used to index a facing in order to retrieve a cell
    376 **	offset that, when added to another cell, will achieve the adjacent cell
    377 **	in the indexed direction.
    378 */
    379 CELL const AdjacentCell[FACING_COUNT] = {
    380 	-(MAP_CELL_W),				// North
    381 	-(MAP_CELL_W-1),			// North East
    382 	1,								// East
    383 	MAP_CELL_W+1,				// South East
    384 	MAP_CELL_W,					// South
    385 	MAP_CELL_W-1,				// South West
    386 	-1,							// West
    387 	-(MAP_CELL_W+1)			// North West
    388 };
    389 
    390 COORDINATE const AdjacentCoord[FACING_COUNT] = {
    391 	0xFF000000L,
    392 	0xFF000100L,
    393 	0x00000100L,
    394 	0x01000100L,
    395 	0x01000000L,
    396 	0x0100FF00L,
    397 	0x0000FF00L,
    398 	0xFF00FF00L
    399 };
    400 
    401 
    402 /***************************************************************************
    403 **	This specifies the odds of receiving the various random crate power
    404 **	ups. The odds are expressed as "shares" of 100 percent.
    405 */
    406 int CrateShares[CRATE_COUNT] = {
    407 	50,		//	CRATE_MONEY
    408 	20,		//	CRATE_UNIT
    409 	3,			//	CRATE_PARA_BOMB
    410 	1,			//	CRATE_HEAL_BASE
    411 	3,			//	CRATE_CLOAK
    412 	5,			//	CRATE_EXPLOSION
    413 	5,			//	CRATE_NAPALM
    414 	20,		//	CRATE_SQUAD
    415 	1,			//	CRATE_DARKNESS
    416 	1,			//	CRATE_REVEAL
    417 	3,			//	CRATE_SONAR
    418 	10,		//	CRATE_ARMOR
    419 	10,		//	CRATE_SPEED
    420 	10,		//	CRATE_FIREPOWER
    421 	1,			//	CRATE_ICBM
    422 	1,			//	CRATE_TIMEQUAKE
    423 	3,			//	CRATE_INVULN
    424 	5			// CRATE_VORTEX
    425 };
    426 
    427 AnimType CrateAnims[CRATE_COUNT] = {
    428 	ANIM_NONE,	//	CRATE_MONEY
    429 	ANIM_NONE,	//	CRATE_UNIT
    430 	ANIM_NONE,	//	CRATE_PARA_BOMB
    431 	ANIM_NONE,	//	CRATE_HEAL_BASE
    432 	ANIM_NONE,	//	CRATE_CLOAK
    433 	ANIM_NONE,	//	CRATE_EXPLOSION
    434 	ANIM_NONE,	//	CRATE_NAPALM
    435 	ANIM_NONE,	//	CRATE_SQUAD
    436 	ANIM_NONE,	//	CRATE_DARKNESS
    437 	ANIM_NONE,	//	CRATE_REVEAL
    438 	ANIM_NONE,	//	CRATE_SONAR
    439 	ANIM_NONE,	//	CRATE_ARMOR
    440 	ANIM_NONE,	//	CRATE_SPEED
    441 	ANIM_NONE,	//	CRATE_FIREPOWER
    442 	ANIM_NONE,	//	CRATE_ICBM
    443 	ANIM_NONE,	//	CRATE_TIMEQUAKE
    444 	ANIM_NONE,	//	CRATE_INVULN
    445 	ANIM_NONE   // CRATE_VORTEX
    446 };
    447 
    448 int CrateData[CRATE_COUNT] = {
    449 	0,		//	CRATE_MONEY
    450 	0,		//	CRATE_UNIT
    451 	0,		//	CRATE_PARA_BOMB
    452 	0,		//	CRATE_HEAL_BASE
    453 	0,		//	CRATE_CLOAK
    454 	0,		//	CRATE_EXPLOSION
    455 	0,		//	CRATE_NAPALM
    456 	0,		//	CRATE_SQUAD
    457 	0,		//	CRATE_DARKNESS
    458 	0,		//	CRATE_REVEAL
    459 	0,		//	CRATE_SONAR
    460 	0,		//	CRATE_ARMOR
    461 	0,		//	CRATE_SPEED
    462 	0,		//	CRATE_FIREPOWER
    463 	0,		//	CRATE_ICBM
    464 	0,		//	CRATE_TIMEQUAKE
    465 	0,		//	CRATE_INVULN
    466 	0		//	CRATE_VORTEX
    467 };
    468 
    469 char const * const CrateNames[CRATE_COUNT] = {
    470 	"Money",
    471 	"Unit",
    472 	"ParaBomb",
    473 	"HealBase",
    474 	"Cloak",
    475 	"Explosion",
    476 	"Napalm",
    477 	"Squad",
    478 	"Darkness",
    479 	"Reveal",
    480 	"Sonar",
    481 	"Armor",
    482 	"Speed",
    483 	"Firepower",
    484 	"ICBM",
    485 	"TimeQuake",
    486 	"Invulnerability",
    487 	"ChronalVortex"
    488 };
    489 
    490 
    491 /***************************************************************************
    492 ** This converts 0..255 facing values into either 8, 16, or 32 facing values.
    493 **	Note: a simple shift won't suffice because 0..255 facing values should
    494 **	be converted to the CLOSEST appropriate facing, NOT rounded down to the
    495 **	nearest facing.
    496 */
    497 unsigned char const Facing8[256] = {
    498 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    499 	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
    500 	2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
    501 	3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
    502 	4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
    503 	5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
    504 	6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
    505 	7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    506 };
    507 
    508 
    509 unsigned char const Facing16[256] = {
    510 	0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
    511 	2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,
    512 	4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,
    513 	6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,
    514 	8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,
    515 	10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,
    516 	12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,
    517 	14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,0,0,0,0,0,0,0,0
    518 };
    519 
    520 
    521 signed char const Rotation16[256] = {
    522 	0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1,
    523 	0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1,
    524 	0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1,
    525 	0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1,
    526 	0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1,
    527 	0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1,
    528 	0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1,
    529 	0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1
    530 };
    531 
    532 
    533 /*
    534 **	This table incorporates a compensating factor for the distortion caused
    535 **	by 3D-Studio when it tries to render 45% angles.
    536 */
    537 unsigned char const Facing32[256] = {
    538 	0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,
    539 	3,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,
    540 	8,8,8,9,9,9,9,9,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,
    541 	13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,
    542 	16,16,16,16,16,17,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,
    543 	19,20,20,20,20,20,20,21,21,21,21,21,21,21,22,22,22,22,22,22,22,23,23,23,23,23,23,23,24,24,24,24,
    544 	24,24,24,25,25,25,25,25,25,25,26,26,26,26,26,26,26,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,
    545 	29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,0,0,0,0,0,0
    546 };
    547 
    548 
    549 #ifdef OBSOLETE
    550 unsigned char const Facing32[256] = {
    551 	0,0,0,0,
    552 	1,1,1,1,1,1,1,1,
    553 	2,2,2,2,2,2,2,2,
    554 	3,3,3,3,3,3,3,3,
    555 	4,4,4,4,4,4,4,4,
    556 	5,5,5,5,5,5,5,5,
    557 	6,6,6,6,6,6,6,6,
    558 	7,7,7,7,7,7,7,7,
    559 	8,8,8,8,8,8,8,8,
    560 	9,9,9,9,9,9,9,9,
    561 	10,10,10,10,10,10,10,10,
    562 	11,11,11,11,11,11,11,11,
    563 	12,12,12,12,12,12,12,12,
    564 	13,13,13,13,13,13,13,13,
    565 	14,14,14,14,14,14,14,14,
    566 	15,15,15,15,15,15,15,15,
    567 	16,16,16,16,16,16,16,16,
    568 	17,17,17,17,17,17,17,17,
    569 	18,18,18,18,18,18,18,18,
    570 	19,19,19,19,19,19,19,19,
    571 	20,20,20,20,20,20,20,20,
    572 	21,21,21,21,21,21,21,21,
    573 	22,22,22,22,22,22,22,22,
    574 	23,23,23,23,23,23,23,23,
    575 	24,24,24,24,24,24,24,24,
    576 	25,25,25,25,25,25,25,25,
    577 	26,26,26,26,26,26,26,26,
    578 	27,27,27,27,27,27,27,27,
    579 	28,28,28,28,28,28,28,28,
    580 	29,29,29,29,29,29,29,29,
    581 	30,30,30,30,30,30,30,30,
    582 	31,31,31,31,31,31,31,31,
    583 	0,0,0,0
    584 };
    585 #endif
    586 
    587 
    588 /***************************************************************************
    589 **	These are the movement costs (in ticks at fastest speed) to enter each
    590 **	of the given terrain cells.
    591 */
    592 
    593 int const GroundColor[LAND_COUNT] = {
    594 	141,			// "Clear" terrain.
    595 	141,			// Road terrain.
    596 	172,			// Water.
    597 	21,			// Impassable rock.
    598 	21,			// Wall (blocks movement).
    599 	158,			// Tiberium field.
    600 	141,			//	Beach terrain.
    601 	141,			// Rocky terrain.
    602 	174			// Rocky riverbed.
    603 };
    604 
    605 int const SnowColor[LAND_COUNT] = {
    606 	141,			// "Clear" terrain.
    607 	141,			// Road terrain.
    608 	172,			// Water.
    609 	21,			// Impassable rock.
    610 	21,			// Wall (blocks movement).
    611 	158,			// Tiberium field.
    612 	141,			//	Beach terrain.
    613 	141,			// Rocky terrain.
    614 	174			// Rocky riverbed.
    615 };
    616 
    617 #ifdef NEVER
    618 int const GroundColor[LAND_COUNT] = {
    619 	46,			// "Clear" terrain.
    620 	44,			// Road terrain.
    621 	BLUE,			// Water.
    622 	DKGREY,		// Impassable rock.
    623 	DKGREY,		// Wall (blocks movement).
    624 	158,			// Tiberium field.
    625 	64,			//	Beach terrain.
    626 	DKGREY,		// Rocky terrain.
    627 	DKGREY		// Rocky riverbed.
    628 };
    629 
    630 int const SnowColor[LAND_COUNT] = {
    631 	WHITE, 		// "Clear" terrain.
    632 	LTGRAY,		// Road terrain.
    633 	BLUE,			// Water.
    634 	DKGREY,		// Impassable rock.
    635 	DKGREY,		// Wall (blocks movement).
    636 	158,			// Tiberium field.
    637 	LTGRAY,		//	Beach terrain.
    638 	DKGREY,		// Rocky terrain.
    639 	DKGREY		// Rocky riverbed.
    640 };
    641 #endif
    642 
    643 GroundType Ground[LAND_COUNT];
    644 
    645 
    646 /***************************************************************************
    647 **	These are the names of the theaters.
    648 */
    649 TheaterDataType const Theaters[THEATER_COUNT] = {
    650 	{"TEMPERATE","TEMPERAT","TEM"},
    651 	{"SNOW","SNOW","SNO"},
    652 	{"INTERIOR","INTERIOR","INT"},
    653 };
    654 
    655 
    656 unsigned char const RemapCiv2[256] = {
    657 	0,1,2,3,4,5,6,209,8,9,10,11,12,13,12,15,									// 0..15
    658 	16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,						// 16..31
    659 	32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,						// 32..47
    660 	48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,						// 48..63
    661 	64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,						// 64..79
    662 	80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,						// 80..95
    663 	96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,		// 96..111
    664 	112,113,114,115,116,117,187,188,120,121,122,123,124,125,126,127,	// 112..127
    665 	128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,	// 128..143
    666 	144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,209,	// 144..159
    667 	160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,	// 160..175
    668 	176,177,178,179,180,181,182,183,184,185,186,167, 13,189,190,191,	// 176..191
    669 	192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,	// 192..207
    670 	208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,	// 208..223
    671 	224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,	// 224..239
    672 	240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255	// 240..255
    673 };
    674 
    675 unsigned char const RemapCiv4[256] = {
    676 	0,1,2,3,4,5,6,187,8,9,10,11,12,13,14,15,									// 0..15
    677 	16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,						// 16..31
    678 	32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,						// 32..47
    679 	48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,						// 48..63
    680 	64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,						// 64..79
    681 	80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,						// 80..95
    682 	96,97,98,99,100,101,102,103,104,105,106,107,108,118,110,119,		// 96..111
    683 	112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,	// 112..127
    684 	128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,	// 128..143
    685 	144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,	// 144..159
    686 	160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,	// 160..175
    687 	176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,	// 176..191
    688 	192,193,194,195,196,197,198,199,200,201,202,203,204,205,188,207,	// 192..207
    689 	208,209,182,211,212,213,214,215,216,217,218,219,220,221,222,223,	// 208..223
    690 	224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,	// 224..239
    691 	240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255	// 240..255
    692 };
    693 
    694 unsigned char const RemapCiv5[256] = {
    695 	0,1,2,3,4,5,6,109,8,9,10,11,131,13,14,15,									// 0..15
    696 	16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,						// 16..31
    697 	32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,						// 32..47
    698 	48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,						// 48..63
    699 	64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,						// 64..79
    700 	80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,						// 80..95
    701 	96,97,98,99,100,101,102,103,104,105,106,107,108,177,110,178,		// 96..111
    702 	112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,	// 112..127
    703 	128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,	// 128..143
    704 	144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,	// 144..159
    705 	160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,	// 160..175
    706 	176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,	// 176..191
    707 	192,193,194,195,196,197,198,199,111,201,202,203,204,205,111,207,	// 192..207
    708 	208,209,182,211,212,213,214,215,216,217,218,219,220,221,222,223,	// 208..223
    709 	224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,	// 224..239
    710 	240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255	// 240..255
    711 };
    712 
    713 unsigned char const RemapCiv6[256] = {
    714 	0,1,2,3,4,5,6,120,8,9,10,11,12,13,238,15,									// 0..15
    715 	16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,						// 16..31
    716 	32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,						// 32..47
    717 	48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,						// 48..63
    718 	64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,						// 64..79
    719 	80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,						// 80..95
    720 	96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,		// 96..111
    721 	112,113,114,115,116,117,236,206,120,121,122,123,124,125,126,127,	// 112..127
    722 	128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,	// 128..143
    723 	144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,111,	// 144..159
    724 	160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,	// 160..175
    725 	176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,	// 176..191
    726 	192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,	// 192..207
    727 	208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,	// 208..223
    728 	224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,	// 224..239
    729 	240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255	// 240..255
    730 };
    731 
    732 unsigned char const RemapCiv7[256] = {
    733 	0,1,2,3,4,5,6,7,8,9,10,11,12,13,131,15,									// 0..15
    734 	16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,						// 16..31
    735 	32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,						// 32..47
    736 	48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,						// 48..63
    737 	64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,						// 64..79
    738 	80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,						// 80..95
    739 	96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,		// 96..111
    740 	112,113,114,115,116,117,157,212,120,121,122,123,124,125,126,127,	// 112..127
    741 	128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,	// 128..143
    742 	144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,7,		// 144..159
    743 	160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,	// 160..175
    744 	176,177,178,179,180,181,182,183,184,185,186,118,119,189,190,191,	// 176..191
    745 	192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,	// 192..207
    746 	208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,	// 208..223
    747 	224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,	// 224..239
    748 	240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255	// 240..255
    749 };
    750 
    751 unsigned char const RemapCiv8[256] = {
    752 	0,1,2,3,4,5,6,182,8,9,10,11,12,13,131,15,									// 0..15
    753 	16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,						// 16..31
    754 	32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,						// 32..47
    755 	48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,						// 48..63
    756 	64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,						// 64..79
    757 	80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,						// 80..95
    758 	96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,		// 96..111
    759 	112,113,114,115,116,117,215,7,120,121,122,123,124,125,126,127,		// 112..127
    760 	128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,	// 128..143
    761 	144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,182,	// 144..159
    762 	160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,	// 160..175
    763 	176,177,178,179,180,181,182,183,184,185,186,198,199,189,190,191,	// 176..191
    764 	192,193,194,195,196,197,198,199,111,201,202,203,204,205,206,207,	// 192..207
    765 	208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,	// 208..223
    766 	224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,	// 224..239
    767 	240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255	// 240..255
    768 };
    769 
    770 unsigned char const RemapCiv9[256] = {
    771 	0,1,2,3,4,5,6,7,8,9,10,11,12,13,7,15,										// 0..15
    772 	16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,						// 16..31
    773 	32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,						// 32..47
    774 	48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,						// 48..63
    775 	64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,						// 64..79
    776 	80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,						// 80..95
    777 	96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,		// 96..111
    778 	112,113,114,115,116,117,163,165,120,121,122,123,124,125,126,127,	// 112..127
    779 	128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,	// 128..143
    780 	144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,200,	// 144..159
    781 	160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,	// 160..175
    782 	176,177,178,179,180,181,182,183,184,185,186,111,13,189,190,191,	// 176..191
    783 	192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,	// 192..207
    784 	208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,	// 208..223
    785 	224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,	// 224..239
    786 	240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255	// 240..255
    787 };
    788 
    789 unsigned char const RemapCiv10[256] = {
    790 	0,1,2,3,4,5,6,137,8,9,10,11,12,13,15,15,									// 0..15
    791 	16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,						// 16..31
    792 	32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,						// 32..47
    793 	48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,						// 48..63
    794 	64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,						// 64..79
    795 	80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,						// 80..95
    796 	96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,		// 96..111
    797 	112,113,114,115,116,117,129,131,120,121,122,123,124,125,126,127,	// 112..127
    798 	128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,	// 128..143
    799 	144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,137,	// 144..159
    800 	160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,	// 160..175
    801 	176,177,178,179,180,181,182,183,184,185,186,163,165,189,190,191,	// 176..191
    802 	192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,	// 192..207
    803 	208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,	// 208..223
    804 	224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,	// 224..239
    805 	240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255	// 240..255
    806 };
    807 
    808 unsigned char const RemapEmber[256] = {
    809 #define	CEC	CC_EMBER_COLOR
    810 	  0,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,BLACK,CEC,CEC,CEC,
    811 	CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,
    812 	CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,
    813 	CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,
    814 	CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,
    815 	CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,
    816 	CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,
    817 	CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,
    818 	CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,
    819 	CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,
    820 	CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,
    821 	CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,
    822 	CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,
    823 	CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,
    824 	CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,
    825 	CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC,CEC
    826 };
    827 
    828 
    829 //char const Keys[] =
    830 //	"[PublicKey]\n"
    831 //	"1=AgkCbXo9sKMHOBk=\n"
    832 //#ifdef CHEAT_KEYS
    833 //	"[PrivateKey]\n"
    834 //	"1=AggxFU55vc7LYQ==\n"
    835 //#endif
    836 //	"\n";
    837 
    838 char const Keys[] =
    839 "[PublicKey]\n"
    840 "1=AihRvNoIbTn85FZRYNZRcT+i6KpU+maCsEqr3Q5q+LDB5tH7Tz2qQ38V\n"
    841 #ifdef CHEAT_KEYS
    842 "[PrivateKey]\n"
    843 "1=AigKVje8mROcR8QixnxUEF5b29Curkq01DNDWCdOG99XBqH79OaCiTCB\n"
    844 #endif
    845 "\n";