CONST.CPP 27 KB

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