CONST.CPP 28 KB

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