DEFINES.H 101 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555
  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/DEFINES.H 4 3/07/97 9:55a 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 : DEFINES.H *
  26. * *
  27. * Programmer : Joe L. Bostic *
  28. * *
  29. * Start Date : September 10, 1993 *
  30. * *
  31. * Last Update : September 10, 1993 [JLB] *
  32. * *
  33. *---------------------------------------------------------------------------------------------*
  34. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
  35. #ifndef DEFINES_H
  36. #define DEFINES_H
  37. /**********************************************************************
  38. ** Language control: define the desired language for this build.
  39. */
  40. //#define ENGLISH 1
  41. //#define FRENCH 1
  42. //#define GERMAN 1
  43. //#define SPAIN 1 (never used)
  44. // - Language define is now passed in from the makefile. -
  45. /**********************************************************************
  46. ** Controls the nature of the game and its abilities. Only define
  47. ** one of these values.
  48. **
  49. ** Internal version -- complete with scenario editor.
  50. ** Playtest version -- no editor but does have minimal cheat keys.
  51. ** Release version -- no editor or cheat keys -- all debugging info removed.
  52. */
  53. //#define INTERNAL_VERSION
  54. //#define PLAYTEST_VERSION
  55. #define RELEASE_VERSION
  56. /**********************************************************************
  57. ** ColinM
  58. ** Set this to enable dongle protection
  59. */
  60. //#define DONGLE
  61. // Enable 640x400 VQ movie capability in WIN32 mode
  62. #define MOVIE640
  63. //#if (GERMAN | FRENCH)
  64. //#define BOGUSCD
  65. //#endif
  66. #define FIXIT_SCORE_CRASH // Fixes score screen crash
  67. #define FIXIT_MULTI_SAVE // Fixes multiplayer save/load
  68. #define FIXIT_NO_COMP_ALLY // Prevent ally with computer
  69. #define FIXIT_DESTNET // Fixes -destnet parameter in Win95
  70. #define FIXIT_RANDOM_GAME // Fixes random seed at start of multiplayer games
  71. #define FIXIT_FORCE_CD // Forces correct CD load after scenario #1
  72. #define FIXIT_IP_CRASH // Fixes crash if internet game aborts too quickly
  73. #define FIXIT_IP_STATS // Fixes so vessels show up in internet stat info
  74. #define FIXIT_NAME_OVERRIDE // Allows changing of unit names
  75. #define FIXIT_RADAR_JAMMED // Fixes unjamming by merely starting to build a radar facility
  76. #define FIXIT_CAPTURE_BIB // Fixes so that if fake is captured, you still can't build off of it.
  77. #define FIXIT_BASE_ANNOUNCE // Fixes so player controlled buildings count as base when attacked.
  78. #define FIXIT_APTIVA_MODEM // Fixes crash with Aptiva modem.
  79. #define FIXIT_FLAG_CHECK // Disable placing building over a flag.
  80. #define FIXIT_ANTS // Adds Ant Units
  81. #define FIXIT_CSII // Adds Aftermath CounterStrike II units
  82. // ajw 9/28/98 - Note about FIXIT_CSII. Changes seem to have been made for Aftermath ("Counterstrike II") that: a) were
  83. // bug fixes that should never be rolled back, b) change the nature of the game, at least in multi-player. This meant
  84. // that the "Red Alert" executable ( == Counterstrike executable ) could no longer be built. Apparently, at the time,
  85. // this was justified, as it was believed that no further patches to the RA executable would ever be necessary.
  86. // Given that Denzil's DVD changes and my WOLAPI integration are essentially a patch, we've got a problem.
  87. // We've decided to level the field and make sure every who gets or patches to the new version of Red Alert, CS, AM, (and
  88. // their DVD equivalent(s)) will have the same executable. So we're assuming that all of the FIXIT_CSII changes are
  89. // permanent (as, in fact, all prior FIXIT_'s are - makes me wonder why the old non-compiling code has to hang around
  90. // forever), and fixing the code so that the assumption "this is an Aftermath game" is no longer hard-coded, but can
  91. // change at runtime. (Which is what should have been done when Aftermath was created.)
  92. // <This goes for the following three defines as well.>
  93. #define FIXIT_CARRIER // Adds Aftermath aircraft carrier
  94. #define FIXIT_PHASETRANSPORT // Adds Aftermath cloaking APC
  95. // ajw - Discovered that engineer changing fields were specifically left out of aftrmath.ini, thus this has no effect.
  96. // Engineer changes (and other game rule changes) are in mplayer.ini, which was loaded before aftermath-only mplayer games.
  97. #define FIXIT_ENGINEER // Adds Engineer rules.ini overrides
  98. //#define FIXIT_FAST_LOAD // Enables faster INI loading
  99. // These fixes will cause the game to go out of sync.
  100. //#define FIXIT_ENGINEER_CAPTURE // If building not allied, will still capture if engineer not allied with building.
  101. //#define FIXIT_HELI_LANDING // Fixes so new helicopters land at free helipad
  102. //#define FIXIT_MINE_PASSABLE // Fixes units not driving onto mines
  103. /* Turn on these changes for the 1.08 patch */
  104. #define FIXIT_PATCH_108
  105. #ifdef FIXIT_PATCH_108
  106. #define STEVES_LOAD_OVERRIDE // Allows loading of CONQUER.ENG instead of from mix file.
  107. #define FIXIT_DIFFICULTY // Fixes no difficulty level for CStrike missions
  108. #define FIXIT_VERSION // Fixes version playability for 1.04, 1.07 & 1.08
  109. #define FIXIT_MODEM_LOAD_CRASH // Fixes crash after loading a modem game when names are the same
  110. #define FIXIT_PHONELIST_CRASH // Fixes crash when clicking on an empty phonelist
  111. #endif
  112. // Denotes changes made for version 3 - reunification of all existing versions and undoing of Aftermath divergence. - ajw
  113. #define FIXIT_VERSION_3
  114. #define DVD
  115. // Define DVD to turn on RADVD additions/changes - Denzil
  116. #ifdef DVD
  117. //#define INTERNET_OFF
  118. #define MPEGMOVIE
  119. //#define MCIMPEG
  120. #endif
  121. // Test to see if partial object drawing is any faster.
  122. #define PARTIAL
  123. //#define SORTDRAW
  124. /**********************************************************************
  125. ** If the scenario editor to to be active in this build then uncomment
  126. ** the following #define line.
  127. */
  128. #ifdef INTERNAL_VERSION
  129. #define SCENARIO_EDITOR
  130. #endif
  131. /**********************************************************************
  132. ** This define enables the full set of cheat keys and special
  133. ** command line options.
  134. */
  135. #if defined(INTERNAL_VERSION) || defined(PLAYTEST_VERSION)
  136. #define CHEAT_KEYS
  137. #endif
  138. /**********************************************************************
  139. ** If this is defined, the special Virgin limited cheat keys
  140. ** are enabled. This allows the "cheat" parameter and then only
  141. ** allows the ALT-W to win the mission.
  142. */
  143. #ifdef PLAYTEST_VERSION
  144. #define VIRGIN_CHEAT_KEYS
  145. #endif
  146. /**********************************************************************
  147. ** If this is defined, then the network code will be enabled.
  148. */
  149. #define NETWORK
  150. #define TIMING_FIX 1
  151. /**********************************************************************
  152. ** Define this to 1 to enable MPath-specific code. Do not define
  153. ** TEN at the same time.
  154. */
  155. #define MPATH 0
  156. /**********************************************************************
  157. ** Define this to 1 to enable TEN-specific code. Do not define
  158. ** MPATH at the same time.
  159. */
  160. #define TEN 0
  161. /**********************************************************************
  162. ** If this is defined, the DoList is "mirrored", for memory trasher
  163. ** detection.
  164. */
  165. #ifdef CHEAT_KEYS
  166. //#define MIRROR_QUEUE
  167. #endif
  168. /**********************************************************************
  169. ** This define tells the Version Number class to use the date/time-based
  170. ** version numbering system. If this define is not set, the actual
  171. ** major/minor version numbers will be used.
  172. */
  173. //#define DEV_VERSION
  174. //#define DEV_VER_NAME
  175. /**********************************************************************
  176. ** This define enables a special additional foreign-version-number
  177. ** after the other version number, for display purposes only.
  178. */
  179. #if !defined(ENGLISH)
  180. #define FOREIGN_VERSION
  181. #define FOREIGN_VERSION_NUMBER 7
  182. #endif
  183. /**********************************************************************
  184. ** This is the multiplier factor to convert low resution coordinates
  185. ** into their actual resolution counterparts.
  186. */
  187. #ifdef WIN32
  188. #define RESFACTOR 2
  189. #else
  190. //#undef SCENARIO_EDITOR
  191. #define RESFACTOR 1
  192. #endif
  193. #define SIDEBAR_WID 80
  194. /**********************************************************************
  195. ** Optional parameter control for special options.
  196. */
  197. /*
  198. ** Enable the set of limited cheat key options.
  199. */
  200. #ifdef VIRGIN_CHEAT_KEYS
  201. #define PARM_PLAYTEST 0xF7DDC227 // "PLAYTEST"
  202. #endif
  203. /*
  204. ** Enable the full set of cheat key options.
  205. */
  206. #ifdef CHEAT_KEYS
  207. #ifndef PARM_PLAYTEST
  208. #define PARM_PLAYTEST 0xF7DDC227 // "PLAYTEST"
  209. #endif
  210. #endif
  211. #define PARM_INSTALL 0xD95C68A2 // "FROMINSTALL"
  212. //
  213. // Allow normal game play in the MPath version
  214. //
  215. #if(MPATH)
  216. #define PARM_ALLOW_SOLO 0xc901c9db // AllowSoloPlayOptions
  217. #endif
  218. //
  219. // Allow normal game play in the TEN version
  220. //
  221. #if(TEN)
  222. #define PARM_ALLOW_SOLO 0xc901c9db // AllowSoloPlayOptions
  223. #endif
  224. /**********************************************************************
  225. ** Defines for verifying free disk space
  226. */
  227. #define INIT_FREE_DISK_SPACE 8388608
  228. #define SAVE_GAME_DISK_SPACE (INIT_FREE_DISK_SPACE - (1024*4096))
  229. //#define SAVE_GAME_DISK_SPACE 100000
  230. /**********************************************************************
  231. ** This is the complete list of VQs allowed to be played in the game.
  232. */
  233. typedef enum VQType {
  234. VQ_NONE=-1,
  235. VQ_AAGUN,
  236. VQ_MIG,
  237. VQ_SFROZEN,
  238. VQ_AIRFIELD,
  239. VQ_BATTLE,
  240. VQ_BMAP,
  241. VQ_BOMBRUN,
  242. VQ_DPTHCHRG,
  243. VQ_GRVESTNE,
  244. VQ_MONTPASS,
  245. VQ_MTNKFACT,
  246. VQ_CRONTEST,
  247. VQ_OILDRUM,
  248. VQ_ALLYEND,
  249. VQ_RADRRAID,
  250. VQ_SHIPYARD,
  251. VQ_SHORBOMB,
  252. VQ_SITDUCK,
  253. VQ_SLNTSRVC,
  254. VQ_SNOWBASE,
  255. VQ_EXECUTE,
  256. VQ_TITLE, // Low res.
  257. VQ_NUKESTOK,
  258. VQ_V2ROCKET,
  259. VQ_SEARCH,
  260. VQ_BINOC,
  261. VQ_ELEVATOR,
  262. VQ_FROZEN,
  263. VQ_MCV,
  264. VQ_SHIPSINK,
  265. VQ_SOVMCV,
  266. VQ_TRINITY,
  267. VQ_ALLYMORF,
  268. VQ_APCESCPE,
  269. VQ_BRDGTILT,
  270. VQ_CRONFAIL,
  271. VQ_STRAFE,
  272. VQ_DESTROYR,
  273. VQ_DOUBLE,
  274. VQ_FLARE,
  275. VQ_SNSTRAFE,
  276. VQ_LANDING,
  277. VQ_ONTHPRWL,
  278. VQ_OVERRUN,
  279. VQ_SNOWBOMB,
  280. VQ_SOVCEMET,
  281. VQ_TAKE_OFF,
  282. VQ_TESLA,
  283. VQ_SOVIET8,
  284. VQ_SPOTTER,
  285. VQ_SCENE1,
  286. VQ_SCENE2,
  287. VQ_SCENE4,
  288. VQ_SOVFINAL,
  289. VQ_ASSESS,
  290. VQ_SOVIET10,
  291. VQ_DUD,
  292. VQ_MCV_LAND,
  293. VQ_MCVBRDGE,
  294. VQ_PERISCOP,
  295. VQ_SHORBOM1,
  296. VQ_SHORBOM2,
  297. VQ_SOVBATL,
  298. VQ_SOVTSTAR,
  299. VQ_AFTRMATH,
  300. VQ_SOVIET11,
  301. VQ_MASASSLT,
  302. VQ_REDINTRO, // High res
  303. VQ_SOVIET1,
  304. VQ_SOVIET2,
  305. VQ_SOVIET3,
  306. VQ_SOVIET4,
  307. VQ_SOVIET5,
  308. VQ_SOVIET6,
  309. VQ_SOVIET7,
  310. VQ_INTRO_MOVIE,
  311. VQ_AVERTED,
  312. VQ_COUNTDWN,
  313. VQ_MOVINGIN,
  314. VQ_ALLIED10,
  315. VQ_ALLIED12,
  316. VQ_ALLIED5,
  317. VQ_ALLIED6,
  318. VQ_ALLIED8,
  319. VQ_TANYA1,
  320. VQ_TANYA2,
  321. VQ_ALLY10B,
  322. VQ_ALLY11,
  323. VQ_ALLY14,
  324. VQ_ALLY9,
  325. VQ_SPY,
  326. VQ_TOOFAR,
  327. VQ_SOVIET12,
  328. VQ_SOVIET13,
  329. VQ_SOVIET9,
  330. VQ_BEACHEAD,
  331. VQ_SOVIET14,
  332. VQ_SIZZLE,
  333. VQ_SIZZLE2,
  334. VQ_ANTEND,
  335. VQ_ANTINTRO,
  336. VQ_COUNT,
  337. VQ_FIRST=0
  338. } VQType;
  339. /**********************************************************************
  340. ** These enumerations are used to implement RTTI. The target system
  341. ** uses these and thus there can be no more RTTI types than can fit
  342. ** in the exponent of a target value.
  343. */
  344. typedef enum RTTIType {
  345. RTTI_NONE=0,
  346. RTTI_AIRCRAFT,
  347. RTTI_AIRCRAFTTYPE,
  348. RTTI_ANIM,
  349. RTTI_ANIMTYPE,
  350. RTTI_BUILDING,
  351. RTTI_BUILDINGTYPE,
  352. RTTI_BULLET,
  353. RTTI_BULLETTYPE,
  354. RTTI_CELL,
  355. RTTI_FACTORY,
  356. RTTI_HOUSE,
  357. RTTI_HOUSETYPE,
  358. RTTI_INFANTRY,
  359. RTTI_INFANTRYTYPE,
  360. RTTI_OVERLAY,
  361. RTTI_OVERLAYTYPE,
  362. RTTI_SMUDGE,
  363. RTTI_SMUDGETYPE,
  364. RTTI_SPECIAL,
  365. RTTI_TEAM,
  366. RTTI_TEAMTYPE,
  367. RTTI_TEMPLATE,
  368. RTTI_TEMPLATETYPE,
  369. RTTI_TERRAIN,
  370. RTTI_TERRAINTYPE,
  371. RTTI_TRIGGER,
  372. RTTI_TRIGGERTYPE,
  373. RTTI_UNIT,
  374. RTTI_UNITTYPE,
  375. RTTI_VESSEL,
  376. RTTI_VESSELTYPE,
  377. RTTI_COUNT
  378. } RTTIType;
  379. /**********************************************************************
  380. ** These are the difficulty settings of the game.
  381. */
  382. typedef enum DiffType {
  383. DIFF_EASY,
  384. DIFF_NORMAL,
  385. DIFF_HARD,
  386. DIFF_COUNT,
  387. DIFF_FIRST=0
  388. } DiffType;
  389. /**********************************************************************
  390. ** This is the size of the speech buffer. This value should be as large
  391. ** as the largest speech sample, plus a few bytes for overhead
  392. ** (16 bytes is sufficient).
  393. */
  394. #define SPEECH_BUFFER_SIZE 50000L
  395. /**********************************************************************
  396. ** The theater mixfiles are cached into a buffer of this size. Ensure
  397. ** that the size specified is at least as large as the largest
  398. ** theater mixfile data block.
  399. */
  400. #define THEATER_BUFFER_SIZE 1100000L
  401. /**********************************************************************
  402. ** This is the size of the shape buffer. This buffer is used as a staging
  403. ** buffer for the shape drawing technology. It MUST be as big as the
  404. ** largest shape (uncompressed) that will be drawn. If this value is
  405. ** changed, be sure to update the makefile and rebuild all of the shape
  406. ** data files.
  407. */
  408. #define SHAPE_BUFFER_SIZE 65000L
  409. /**********************************************************************
  410. ** Filenames of the data files it can create at run time.
  411. */
  412. #define FAME_FILE_NAME "HALLFAME.DAT"
  413. #define NET_SAVE_FILE_NAME "SAVEGAME.NET"
  414. #define CONFIG_FILE_NAME "REDALERT.INI"
  415. /**********************************************************************
  416. ** Map controls. The map is composed of square elements called 'cells'.
  417. ** All larger elements are build upon these.
  418. */
  419. #define HIGH_COORD_MASK 0x80008000L
  420. // Size of the map in cells.
  421. #define MAP_CELL_W 128
  422. #define MAP_CELL_H 128
  423. #define MAP_CELL_TOTAL (MAP_CELL_W*MAP_CELL_H)
  424. #define REFRESH_EOL 32767 // This number ends a refresh/occupy offset list.
  425. #define REFRESH_SIDEBAR 32766 // This number flags that sidebar needs refreshing.
  426. /****************************************************************************
  427. ** These are custom C&C specific types. The CELL is used for map coordinate
  428. ** with cell resolution. The COORDINATE type is used for map coordinates that
  429. ** have a lepton resolution. CELL is more efficient when indexing into the map
  430. ** and when size is critical. COORDINATE is more efficient when dealing with
  431. ** accuracy and object movement.
  432. */
  433. typedef unsigned short LEPTON;
  434. typedef union {
  435. LEPTON Raw;
  436. struct {
  437. #ifdef BIG_ENDIAN
  438. unsigned char Cell;
  439. unsigned char Lepton;
  440. #else
  441. unsigned char Lepton;
  442. unsigned char Cell;
  443. #endif
  444. } Sub;
  445. } LEPTON_COMPOSITE;
  446. typedef unsigned long COORDINATE;
  447. typedef union {
  448. COORDINATE Coord;
  449. struct {
  450. #ifdef BIG_ENDIAN
  451. LEPTON_COMPOSITE Y;
  452. LEPTON_COMPOSITE X;
  453. #else
  454. LEPTON_COMPOSITE X;
  455. LEPTON_COMPOSITE Y;
  456. #endif
  457. } Sub;
  458. } COORD_COMPOSITE;
  459. typedef signed short CELL;
  460. #define SLUFF_BITS (sizeof(CELL)*CHAR_BIT)-(14)
  461. typedef union {
  462. CELL Cell;
  463. struct {
  464. #ifdef BIG_ENDIAN
  465. #if SLUFF_BITS
  466. /*
  467. ** Unused upper bits will cause problems on a big-endian machine unless they
  468. ** are deliberately accounted for.
  469. */
  470. unsigned sluff:SLUF_BITS;
  471. #endif
  472. unsigned Y:7;
  473. unsigned X:7;
  474. #else
  475. unsigned X:7;
  476. unsigned Y:7;
  477. #endif
  478. } Sub;
  479. } CELL_COMPOSITE;
  480. typedef int WAYPOINT;
  481. /**********************************************************************
  482. ** This is the target composit information. Notice that with an RTTI_NONE
  483. ** and an index value of 0, the target value returned is identical with
  484. ** TARGET_NONE. This is by design and is necessary.
  485. */
  486. typedef long TARGET;
  487. #define TARGET_MANTISSA 24 // Bits of value precision.
  488. #define TARGET_EXPONENT 8
  489. typedef union {
  490. TARGET Target;
  491. struct {
  492. #ifdef BIG_ENDIAN
  493. unsigned Exponent:TARGET_EXPONENT;
  494. unsigned Mantissa:TARGET_MANTISSA;
  495. #else
  496. unsigned Mantissa:TARGET_MANTISSA;
  497. unsigned Exponent:TARGET_EXPONENT;
  498. #endif
  499. } Sub;
  500. } TARGET_COMPOSITE;
  501. inline TARGET Build_Target(RTTIType kind, int value)
  502. {
  503. TARGET_COMPOSITE target;
  504. target.Target = 0;
  505. target.Sub.Exponent = kind;
  506. target.Sub.Mantissa = value;
  507. return(target.Target);
  508. }
  509. #define TARGET_NONE ((TARGET)0)
  510. /*
  511. ** The map is broken down into regions of this specified dimensions.
  512. */
  513. #define REGION_WIDTH 4
  514. #define REGION_HEIGHT 4
  515. #define MAP_REGION_WIDTH (((MAP_CELL_W + (REGION_WIDTH -1)) / REGION_WIDTH)+2)
  516. #define MAP_REGION_HEIGHT (((MAP_CELL_H + (REGION_WIDTH -1)) / REGION_HEIGHT)+2)
  517. #define MAP_TOTAL_REGIONS (MAP_REGION_WIDTH * MAP_REGION_HEIGHT)
  518. /**********************************************************************
  519. ** This enumerates the various known fear states for infantry units.
  520. ** At these stages, certain events or recovery actions are performed.
  521. */
  522. typedef enum FearType {
  523. FEAR_NONE=0, // No fear at all (default state).
  524. FEAR_ANXIOUS=10, // Something makes them scared.
  525. FEAR_SCARED=100, // Scared enough to take cover.
  526. FEAR_PANIC=200, // Run away! Run away!
  527. FEAR_MAXIMUM=255 // Scared to death.
  528. } FearType;
  529. /**********************************************************************
  530. ** When a moving object moves, the Per_Cell_Process function is called
  531. ** at various times during the move. Certain operations must be
  532. ** performed at different stages of the move. This enum specifies the
  533. ** different conditions under which the Per_Cell_Process function is
  534. ** called.
  535. */
  536. typedef enum PCPType {
  537. PCP_ROTATION, // When sitting in place and performing rotations.
  538. PCP_DURING, // While moving between two cells.
  539. PCP_END, // When the 'center' of a cell is reached during movement.
  540. } PCPType;
  541. /**********************************************************************
  542. ** A base is broken up into several zones. This type enumerates the
  543. ** various zones.
  544. */
  545. typedef enum ZoneType {
  546. ZONE_CORE, // Center of base.
  547. ZONE_NORTH, // North section.
  548. ZONE_EAST, // East section.
  549. ZONE_SOUTH, // South section.
  550. ZONE_WEST, // West section.
  551. ZONE_COUNT,
  552. ZONE_FIRST=0,
  553. ZONE_NONE=-1
  554. } ZoneType;
  555. /**********************************************************************
  556. ** The map is prescanned to mark of movement zones according to certain
  557. ** movement characteristics. This enum specifies those characteristics
  558. ** and movement zones kept track of.
  559. */
  560. typedef enum MZoneType {
  561. MZONE_NORMAL, // Normal terrestrial objects (can't crush walls).
  562. MZONE_CRUSHER, // Can crush crushable wall types.
  563. MZONE_DESTROYER, // Can destroy walls.
  564. MZONE_WATER, // Water based objects.
  565. MZONE_COUNT,
  566. MZONE_FIRST=0
  567. } MZoneType;
  568. #define MZONEF_NORMAL (1<<MZONE_NORMAL)
  569. #define MZONEF_CRUSHER (1<<MZONE_CRUSHER)
  570. #define MZONEF_DESTROYER (1<<MZONE_DESTROYER)
  571. #define MZONEF_WATER (1<<MZONE_WATER)
  572. #define MZONEF_ALL (MZONEF_NORMAL|MZONEF_CRUSHER|MZONEF_DESTROYER|MZONEF_WATER)
  573. /**********************************************************************
  574. ** This records the current state of the computer controlled base. The
  575. ** AI will respond according to this state in order to control
  576. ** production and unit orders.
  577. */
  578. typedef enum StateType {
  579. STATE_BUILDUP, // Base is building up (defensive buildup stage).
  580. STATE_BROKE, // Low on money, need cash or income source.
  581. STATE_THREATENED, // Enemy units are designated to move close by.
  582. STATE_ATTACKED, // Base is under direct attack.
  583. STATE_ENDGAME // Resistance is futile.
  584. } StateType;
  585. /**********************************************************************
  586. ** Urgency rating used to determine what action to perform. The greater
  587. ** the urgency the more likely the corresponding action will be chosen.
  588. ** These values are assigned to each potential desired action the house
  589. ** is to perform.
  590. */
  591. typedef enum UrgencyType {
  592. URGENCY_NONE, // No action on this matter is needed or desired.
  593. URGENCY_LOW, // Minimal attention requested.
  594. URGENCY_MEDIUM, // Normal attention requested.
  595. URGENCY_HIGH, // High attention requested.
  596. URGENCY_CRITICAL, // This matter must be addressed immediately.
  597. URGENCY_COUNT,
  598. URGENCY_FIRST=URGENCY_CRITICAL
  599. } UrgencyType;
  600. /**********************************************************************
  601. ** These are the various actions a house may perform. These actions refer
  602. ** to global events that encompass selling and production. Low level house
  603. ** specific actions of choosing targets is handled elsewhere.
  604. */
  605. typedef enum StrategyType {
  606. STRATEGY_BUILD_POWER, // Power is low, build more.
  607. STRATEGY_BUILD_DEFENSE, // Defense needs boosting.
  608. STRATEGY_BUILD_INCOME, // Income is low or in jeopardy, raise it.
  609. STRATEGY_FIRE_SALE, // Situation hopeless, sell and attack.
  610. STRATEGY_BUILD_ENGINEER, // An engineer is needed.
  611. STRATEGY_BUILD_OFFENSE, // Offensive weapons are needed.
  612. STRATEGY_RAISE_MONEY, // Money is low, emergency raise cash.
  613. STRATEGY_RAISE_POWER, // Money is low, raise power by selling.
  614. STRATEGY_LOWER_POWER, // Too much power, sell power plants.
  615. STRATEGY_ATTACK, // General charge the enemy attack logic.
  616. STRATEGY_COUNT,
  617. STRATEGY_FIRST=STRATEGY_BUILD_POWER
  618. } StrategyType;
  619. /**********************************************************************
  620. ** These are the various return conditions that production may
  621. ** produce.
  622. */
  623. typedef enum ProdFailType {
  624. PROD_OK, // Production request successful.
  625. PROD_LIMIT, // Failed with production capacity limit reached.
  626. PROD_ILLEGAL, // Failed because of illegal request.
  627. PROD_CANT // Failed because unable to comply (busy or occupied).
  628. } ProdFailType;
  629. /**********************************************************************
  630. ** When performing a landing operation, the aircraft must pass through
  631. ** navigation checkpoints. These enumerations specify the check points.
  632. */
  633. typedef enum CheckPointType {
  634. CHECK_STACK, // Holding area far away from airfield.
  635. CHECK_DOWNWIND, // Downwind leg of approach.
  636. CHECK_CROSSWIND // Crosswind leg of approach.
  637. } CheckPointType;
  638. /**********************************************************************
  639. ** These enumerate the various crate powerups that are available.
  640. */
  641. typedef enum CrateType {
  642. CRATE_MONEY,
  643. CRATE_UNIT,
  644. CRATE_PARA_BOMB,
  645. CRATE_HEAL_BASE,
  646. CRATE_CLOAK,
  647. CRATE_EXPLOSION,
  648. CRATE_NAPALM,
  649. CRATE_SQUAD,
  650. CRATE_DARKNESS,
  651. CRATE_REVEAL,
  652. CRATE_SONAR,
  653. CRATE_ARMOR,
  654. CRATE_SPEED,
  655. CRATE_FIREPOWER,
  656. CRATE_ICBM,
  657. CRATE_TIMEQUAKE,
  658. CRATE_INVULN,
  659. CRATE_VORTEX,
  660. CRATE_COUNT,
  661. CRATE_FIRST=0
  662. } CrateType;
  663. /**********************************************************************
  664. ** These are the special weapons that can be used in the game. The common thread
  665. ** with these weapons is that they are controlled through the sidebar
  666. ** mechanism.
  667. */
  668. typedef enum SpecialWeaponType {
  669. SPC_NONE=-1,
  670. SPC_SONAR_PULSE, // Momentarily reveals submarines.
  671. SPC_NUCLEAR_BOMB, // Tactical nuclear weapon.
  672. SPC_CHRONOSPHERE, // Paradox device, for teleportation
  673. SPC_PARA_BOMB, // Parachute bomb delivery.
  674. SPC_PARA_INFANTRY, // Parachute reinforcement delivery.
  675. SPC_SPY_MISSION, // Spy plane to take photo recon mission.
  676. SPC_IRON_CURTAIN, // Bestow invulnerability on a unit/building
  677. SPC_GPS, // give allies free unjammable radar.
  678. SPC_COUNT,
  679. SPC_FIRST=0,
  680. SPC_ANY=1
  681. } SpecialWeaponType;
  682. #define SPC_CHRONO2 (SPC_COUNT)
  683. /**********************************************************************
  684. ** The computer AI is categorized by the following enumerations. If
  685. ** the player is controlling a house, then the IQ rating is zero. When
  686. ** the IQ rating is at maximum, then the computer has complete control
  687. ** of the house.
  688. */
  689. //typedef enum IQType {
  690. // IQ_DEAD=0x0000, // Player controlled (computer does nothing).
  691. // IQ_IDIOT=0x0040,
  692. // IQ_IMBECILE=0x0080,
  693. // IQ_MORON=0x00C0,
  694. // IQ_MENSA=0x0100 // Complete computer control -- look out!
  695. //} IQType;
  696. /**********************************************************************
  697. ** These are the response values when checking to see if an object
  698. ** can enter or exist at a specified location. By examining this
  699. ** return value, appropriate action may be chosen.
  700. ** NOTE: If this changes, update the static array in Find_Path module.
  701. */
  702. typedef enum MoveType {
  703. MOVE_OK, // No blockage.
  704. MOVE_CLOAK, // A cloaked blocking enemy object.
  705. MOVE_MOVING_BLOCK, // Blocked, but only temporarily.
  706. MOVE_DESTROYABLE, // Enemy unit or building is blocking.
  707. MOVE_TEMP, // Blocked by friendly unit.
  708. MOVE_NO, // Strictly prohibited terrain.
  709. MOVE_COUNT
  710. } MoveType;
  711. /**********************************************************************
  712. ** These are the themes that the game can play. They must be in exact
  713. ** same order as specified in the CONQUER.TXT file as well as the filename
  714. ** list located in the ThemeClass.
  715. */
  716. typedef enum ThemeType {
  717. THEME_QUIET=-3,
  718. THEME_PICK_ANOTHER=-2,
  719. THEME_NONE=-1,
  720. THEME_BIGF,
  721. THEME_CRUS,
  722. THEME_FAC1,
  723. THEME_FAC2,
  724. THEME_HELL,
  725. THEME_RUN1,
  726. THEME_SMSH,
  727. THEME_TREN,
  728. THEME_WORK,
  729. THEME_AWAIT,
  730. THEME_DENSE_R,
  731. THEME_FOGGER1A,
  732. THEME_MUD1A,
  733. THEME_RADIO2,
  734. THEME_ROLLOUT,
  735. THEME_SNAKE,
  736. THEME_TERMINAT,
  737. THEME_TWIN,
  738. THEME_VECTOR1A,
  739. THEME_MAP,
  740. THEME_SCORE,
  741. THEME_INTRO,
  742. THEME_CREDITS,
  743. THEME_2ND_HAND,
  744. THEME_ARAZOID,
  745. THEME_BACKSTAB,
  746. THEME_CHAOS2,
  747. THEME_SHUT_IT,
  748. THEME_TWINMIX1,
  749. THEME_UNDER3,
  750. THEME_VR2,
  751. #ifdef FIXIT_CSII // checked - ajw 9/28/98
  752. THEME_BOG,
  753. THEME_FLOAT_V2,
  754. THEME_GLOOM,
  755. THEME_GRNDWIRE,
  756. THEME_RPT,
  757. THEME_SEARCH,
  758. THEME_TRACTION,
  759. THEME_WASTELND,
  760. #endif
  761. THEME_COUNT,
  762. THEME_LAST=(int)THEME_COUNT-1,
  763. THEME_FIRST=0
  764. } ThemeType;
  765. inline ThemeType operator++(ThemeType &, int);
  766. /**********************************************************************
  767. ** This is the various threat scan methods that can be used when looking
  768. ** for targets.
  769. */
  770. typedef enum ThreatType {
  771. THREAT_NORMAL=0x0000, // Any distance threat scan?
  772. THREAT_RANGE=0x0001, // Limit scan to weapon range?
  773. THREAT_AREA=0x0002, // Limit scan to general area (twice weapon range)?
  774. THREAT_AIR=0x0004, // Scan for air units?
  775. THREAT_INFANTRY=0x0008, // Scan for infantry units?
  776. THREAT_VEHICLES=0x0010, // Scan for vehicles?
  777. THREAT_BUILDINGS=0x0020, // Scan for buildings?
  778. THREAT_TIBERIUM=0x0040, // Limit scan to Tiberium processing objects?
  779. THREAT_BOATS=0x0080, // Scan for gunboats?
  780. THREAT_CIVILIANS=0x0100, // Consider civilians to be primary target?
  781. THREAT_CAPTURE=0x0200, // Consider capturable buildings only?
  782. THREAT_FAKES=0x0400, // Consider fake buildings a greater target?
  783. THREAT_POWER=0x0800, // Consider power generating facilities a greater target?
  784. THREAT_FACTORIES=0x1000, // Consider factories a greater target?
  785. THREAT_BASE_DEFENSE=0x2000 // Consider base defense buildings a greater target?
  786. } ThreatType;
  787. inline ThreatType operator |(ThreatType, ThreatType);
  788. inline ThreatType operator &(ThreatType, ThreatType);
  789. inline ThreatType operator ~(ThreatType);
  790. #define THREAT_GROUND (THREAT_VEHICLES|THREAT_BUILDINGS|THREAT_INFANTRY)
  791. /**********************************************************************
  792. ** These return values are used when determine if firing is legal.
  793. ** By examining this value it can be determined what should be done
  794. ** to fix the reason why firing wasn't allowed.
  795. */
  796. typedef enum FireErrorType {
  797. FIRE_OK, // Weapon is allowed to fire.
  798. FIRE_AMMO, // No ammo available to fire?
  799. FIRE_FACING, // Not correctly facing target?
  800. FIRE_REARM, // It is busy rearming?
  801. FIRE_ROTATING, // Is it in process of rotating?
  802. FIRE_ILLEGAL, // Is it targeting something illegal?
  803. FIRE_CANT, // Is this unit one that cannot fire anything?
  804. FIRE_MOVING, // Is it moving and not allowed to fire while moving?
  805. FIRE_RANGE, // Is the target out of range?
  806. FIRE_CLOAKED, // Is the shooter currently cloaked?
  807. FIRE_BUSY // Is shooter currently doing something else?
  808. } FireErrorType;
  809. /**********************************************************************
  810. ** If an object can cloak, then it will be in one of these states.
  811. ** For objects that cannot cloak, they will always be in the
  812. ** UNCLOAKED state. This state controls how the object transitions between
  813. ** cloaked and uncloaked conditions.
  814. */
  815. typedef enum CloakType {
  816. UNCLOAKED, // Completely visible (normal state).
  817. CLOAKING, // In process of cloaking.
  818. CLOAKED, // Completely cloaked (invisible).
  819. UNCLOAKING // In process of uncloaking.
  820. } CloakType;
  821. /**********************************************************************
  822. ** For units that are cloaking, these value specify the visual character
  823. ** of the object.
  824. */
  825. typedef enum VisualType {
  826. VISUAL_NORMAL, // Completely visible -- normal.
  827. VISUAL_INDISTINCT, // The edges shimmer and become indistinct.
  828. VISUAL_DARKEN, // Color and texture is muted along with shimmering.
  829. VISUAL_SHADOWY, // Body is translucent in addition to shimmering.
  830. VISUAL_RIPPLE, // Just a ripple (true predator effect).
  831. VISUAL_HIDDEN // Nothing at all is visible.
  832. } VisualType;
  833. /**********************************************************************
  834. ** These missions enumerate the various state machines that can apply to
  835. ** a game object. Only one of these state machines is active at any one
  836. ** time.
  837. */
  838. typedef enum MissionType {
  839. MISSION_NONE=-1,
  840. MISSION_SLEEP, // Do nothing whatsoever.
  841. MISSION_ATTACK, // Attack nearest enemy.
  842. MISSION_MOVE, // Guard location or unit.
  843. MISSION_QMOVE, // A queue list movement mission.
  844. MISSION_RETREAT, // Return home for R & R.
  845. MISSION_GUARD, // Stay still.
  846. MISSION_STICKY, // Stay still -- never recruit.
  847. MISSION_ENTER, // Move into object cooperatively.
  848. MISSION_CAPTURE, // Move into in order to capture.
  849. MISSION_HARVEST, // Hunt for and collect nearby Tiberium.
  850. MISSION_GUARD_AREA, // Active guard of area.
  851. MISSION_RETURN, // Head back to refinery.
  852. MISSION_STOP, // Sit still.
  853. MISSION_AMBUSH, // Wait until discovered.
  854. MISSION_HUNT, // Active search and destroy.
  855. MISSION_UNLOAD, // Search for and deliver cargo.
  856. MISSION_SABOTAGE, // Move into in order to destroy.
  857. MISSION_CONSTRUCTION, // Building buildup operation.
  858. MISSION_DECONSTRUCTION, // Building builddown operation.
  859. MISSION_REPAIR, // Repair process mission.
  860. MISSION_RESCUE,
  861. MISSION_MISSILE,
  862. MISSION_HARMLESS, // Sit around and don't appear like a threat.
  863. MISSION_COUNT,
  864. MISSION_FIRST=0
  865. } MissionType;
  866. /**********************************************************************
  867. ** These are the enumerated animation sequences that a building may
  868. ** be processing. These serve to control the way that a building
  869. ** appears.
  870. */
  871. typedef enum BStateType {
  872. BSTATE_NONE=-1,
  873. BSTATE_CONSTRUCTION, // Construction animation.
  874. BSTATE_IDLE, // Idle animation.
  875. BSTATE_ACTIVE, // Animation when building is "doing its thing".
  876. BSTATE_FULL, // Special alternate active state.
  877. BSTATE_AUX1, // Auxiliary animation.
  878. BSTATE_AUX2, // Auxiliary animation.
  879. BSTATE_COUNT
  880. } BStateType;
  881. /**********************************************************************
  882. ** Whenever a unit is selected and a click occurs over another object
  883. ** or terrain element, there is some action to initiate. This specifies
  884. ** the different types of actions possible. This also controls how the
  885. ** mouse cursor looks when "hovering" over the spot that clicking would
  886. ** occur at.
  887. */
  888. typedef enum ActionType {
  889. ACTION_NONE, // Either undefined action or "do nothing".
  890. ACTION_MOVE, // Can move there or at least try to.
  891. ACTION_NOMOVE, // Special case for movable object, but illegal mouse position.
  892. ACTION_ENTER, // Special case for infantry->APC or vehicle->Repair facility.
  893. ACTION_SELF, // Self select special case.
  894. ACTION_ATTACK, // Can attack or fire upon it in some fashion.
  895. ACTION_HARVEST, // Special harvest mode.
  896. ACTION_SELECT, // Would change selection to specified object.
  897. ACTION_TOGGLE_SELECT,// Toggles select state of the object.
  898. ACTION_CAPTURE, // The unit will try to capture the object.
  899. ACTION_REPAIR, // The target object should be repaired.
  900. ACTION_SELL, // The target building should be sold back.
  901. ACTION_SELL_UNIT, // The target unit should be sold back.
  902. ACTION_NO_SELL, // No sell or no repair.
  903. ACTION_NO_REPAIR, // No sell or no repair.
  904. ACTION_SABOTAGE, // The unit will try to sabotage/destroy the object.
  905. ACTION_PARA_BOMB, // Parachute bomb strike.
  906. ACTION_PARA_INFANTRY,// Parachute infantry strike.
  907. ACTION_PARA_SABOTEUR,// Parachute saboteur strike.
  908. ACTION_NUKE_BOMB, // That target object should be blasted.
  909. ACTION_AIR_STRIKE, // That target object should be blasted.
  910. ACTION_CHRONOSPHERE, // That target object should be teleported.
  911. ACTION_CHRONO2, // Teleport it to the given coordinates now.
  912. ACTION_IRON_CURTAIN, // That target object should be invulnerable.
  913. ACTION_SPY_MISSION, // Photo recon mission.
  914. ACTION_GUARD_AREA, // Guard the area/object clicked on.
  915. ACTION_HEAL, // Heal the infantryman clicked on.
  916. ACTION_DAMAGE, // Enter and damage building.
  917. ACTION_GREPAIR, // Enter and complete repair building.
  918. ACTION_NO_DEPLOY,
  919. ACTION_NO_ENTER,
  920. ACTION_NO_GREPAIR,
  921. ACTION_COUNT
  922. } ActionType;
  923. /**********************************************************************
  924. ** When a unit gets damaged, the result of the damage is returned as
  925. ** this type. It can range from no damage taken to complete destruction.
  926. */
  927. typedef enum ResultType {
  928. RESULT_NONE, // No damage was taken by the target.
  929. RESULT_LIGHT, // Some damage was taken, but no state change occurred.
  930. RESULT_HALF, // Damaged to below half strength (only returned on transition).
  931. RESULT_MAJOR, // Damaged down to 1 hit point.
  932. RESULT_DESTROYED // Damaged to complete destruction.
  933. } ResultType;
  934. #ifdef OBSOLETE
  935. /**********************************************************************
  936. ** These are the special concrete control defines. They enumerate the
  937. ** sequence order of the concrete icons in the concrete art file.
  938. */
  939. // DEBUG === convert this to be zero based so that a nulled cell is the
  940. // default cell.
  941. enum ConcreteEnum {
  942. C_NONE=-1,
  943. C_LEFT=0,
  944. C_RIGHT=1,
  945. C_RIGHT_UPDOWN=2,
  946. C_LEFT_UPDOWN=3,
  947. C_UP_RIGHT=4,
  948. C_UP_LEFT=5,
  949. C_DOWN_RIGHT=6,
  950. C_DOWN_LEFT=7,
  951. C_RIGHT_DOWN=8,
  952. C_LEFT_DOWN=9,
  953. C_RIGHT_UP=10,
  954. C_LEFT_UP=11,
  955. C_UPDOWN_RIGHT=12,
  956. C_UPDOWN_LEFT=13
  957. };
  958. #endif
  959. /**********************************************************************
  960. ** Units that move can move at different speeds. These enumerate the
  961. ** different speeds that a unit can move.
  962. */
  963. typedef enum MPHType{
  964. MPH_IMMOBILE=0,
  965. MPH_VERY_SLOW=5, // 2
  966. MPH_KINDA_SLOW=6, // 3
  967. MPH_SLOW=8, // 4
  968. MPH_SLOW_ISH=10, // 5
  969. MPH_MEDIUM_SLOW=12, // 6
  970. MPH_MEDIUM=18, // 9
  971. MPH_MEDIUM_FAST=30, // 12
  972. MPH_MEDIUM_FASTER=35, // 14
  973. MPH_FAST=40, // 16
  974. MPH_ROCKET=60, // 24
  975. MPH_VERY_FAST=100, // 40
  976. MPH_LIGHT_SPEED=255 // 100
  977. } MPHType;
  978. /**********************************************************************
  979. ** The houses that can be played are listed here. Each has their own
  980. ** personality and strengths.
  981. */
  982. typedef enum HousesType {
  983. HOUSE_NONE=-1,
  984. HOUSE_SPAIN, // Gold (unremapped)
  985. HOUSE_GREECE, // LtBlue
  986. HOUSE_USSR, // Red
  987. HOUSE_ENGLAND, // Green
  988. HOUSE_UKRAINE, // Orange
  989. HOUSE_GERMANY, // Grey
  990. HOUSE_FRANCE, // Blue
  991. HOUSE_TURKEY, // Brown
  992. HOUSE_GOOD, // Global Defense Initiative
  993. HOUSE_BAD, // Brotherhood of Nod
  994. HOUSE_NEUTRAL, // Civilians
  995. HOUSE_JP, // Disaster Containment Team
  996. HOUSE_MULTI1, // Multi-Player house #1
  997. HOUSE_MULTI2, // Multi-Player house #2
  998. HOUSE_MULTI3, // Multi-Player house #3
  999. HOUSE_MULTI4, // Multi-Player house #4
  1000. HOUSE_MULTI5, // Multi-Player house #5
  1001. HOUSE_MULTI6, // Multi-Player house #6
  1002. HOUSE_MULTI7, // Multi-Player house #7
  1003. HOUSE_MULTI8, // Multi-Player house #8
  1004. HOUSE_COUNT,
  1005. HOUSE_FIRST=0
  1006. } HousesType;
  1007. inline HousesType operator++(HousesType &, int);
  1008. #define HOUSEF_ALLIES (HOUSEF_ENGLAND|HOUSEF_SPAIN|HOUSEF_GREECE|HOUSEF_GERMANY|HOUSEF_FRANCE|HOUSEF_TURKEY|HOUSEF_GOOD)
  1009. #define HOUSEF_SOVIET (HOUSEF_USSR|HOUSEF_UKRAINE|HOUSEF_BAD)
  1010. #define HOUSEF_OTHERS (HOUSEF_NEUTRAL|HOUSEF_JP|HOUSEF_MULTI1|HOUSEF_MULTI2|HOUSEF_MULTI3|HOUSEF_MULTI4|HOUSEF_MULTI5|HOUSEF_MULTI6|HOUSEF_MULTI7|HOUSEF_MULTI8)
  1011. #define HOUSEF_NONE 0
  1012. #define HOUSEF_ENGLAND (1L<<HOUSE_ENGLAND)
  1013. #define HOUSEF_SPAIN (1L<<HOUSE_SPAIN)
  1014. #define HOUSEF_GREECE (1L<<HOUSE_GREECE)
  1015. #define HOUSEF_USSR (1L<<HOUSE_USSR)
  1016. #define HOUSEF_UKRAINE (1L<<HOUSE_UKRAINE)
  1017. #define HOUSEF_GERMANY (1L<<HOUSE_GERMANY)
  1018. #define HOUSEF_FRANCE (1L<<HOUSE_FRANCE)
  1019. #define HOUSEF_TURKEY (1L<<HOUSE_TURKEY)
  1020. #define HOUSEF_GOOD (1L<<HOUSE_GOOD)
  1021. #define HOUSEF_BAD (1L<<HOUSE_BAD)
  1022. #define HOUSEF_NEUTRAL (1L<<HOUSE_NEUTRAL)
  1023. #define HOUSEF_JP (1L<<HOUSE_JP)
  1024. #define HOUSEF_MULTI1 (1L<<HOUSE_MULTI1)
  1025. #define HOUSEF_MULTI2 (1L<<HOUSE_MULTI2)
  1026. #define HOUSEF_MULTI3 (1L<<HOUSE_MULTI3)
  1027. #define HOUSEF_MULTI4 (1L<<HOUSE_MULTI4)
  1028. #define HOUSEF_MULTI5 (1L<<HOUSE_MULTI5)
  1029. #define HOUSEF_MULTI6 (1L<<HOUSE_MULTI6)
  1030. #define HOUSEF_MULTI7 (1L<<HOUSE_MULTI7)
  1031. #define HOUSEF_MULTI8 (1L<<HOUSE_MULTI8)
  1032. typedef enum PlayerColorType {
  1033. PCOLOR_NONE = -1,
  1034. PCOLOR_GOLD,
  1035. PCOLOR_LTBLUE,
  1036. PCOLOR_RED,
  1037. PCOLOR_GREEN,
  1038. PCOLOR_ORANGE,
  1039. PCOLOR_GREY,
  1040. PCOLOR_BLUE, //This is actually the red scheme used in the dialogs
  1041. PCOLOR_BROWN,
  1042. PCOLOR_TYPE,
  1043. PCOLOR_REALLY_BLUE,
  1044. PCOLOR_DIALOG_BLUE,
  1045. PCOLOR_COUNT,
  1046. PCOLOR_FIRST=0,
  1047. PCOLOR_LAST=(int)PCOLOR_COUNT-1
  1048. } PlayerColorType;
  1049. /**********************************************************************
  1050. ** This enumerates the remap logic to be applied to an object type when
  1051. ** it appears in the construction sidebar.
  1052. */
  1053. typedef enum RemapType {
  1054. REMAP_NONE,
  1055. REMAP_NORMAL,
  1056. REMAP_ALTERNATE
  1057. } RemapType;
  1058. /**********************************************************************
  1059. ** These are the types of games that can be played. GDI & NOD are the
  1060. ** usual human-vs-computer games; 2-Player games are network or modem,
  1061. ** with 2 players; multi-player games are network with > 2 players.
  1062. */
  1063. typedef enum ScenarioPlayerEnum
  1064. {
  1065. SCEN_PLAYER_NONE = -1,
  1066. SCEN_PLAYER_SPAIN,
  1067. SCEN_PLAYER_GREECE,
  1068. SCEN_PLAYER_USSR,
  1069. SCEN_PLAYER_JP,
  1070. SCEN_PLAYER_2PLAYER,
  1071. SCEN_PLAYER_MPLAYER,
  1072. SCEN_PLAYER_COUNT,
  1073. SCEN_PLAYER_FIRST = 0
  1074. } ScenarioPlayerType;
  1075. inline ScenarioPlayerType operator++(ScenarioPlayerType &, int);
  1076. /**********************************************************************
  1077. ** These are the directional parameters for a scenario.
  1078. */
  1079. typedef enum ScenarioDirEnum
  1080. {
  1081. SCEN_DIR_NONE = -1,
  1082. SCEN_DIR_EAST,
  1083. SCEN_DIR_WEST,
  1084. SCEN_DIR_COUNT,
  1085. SCEN_DIR_FIRST = 0
  1086. } ScenarioDirType;
  1087. inline ScenarioDirType operator++(ScenarioDirType &, int);
  1088. /**********************************************************************
  1089. ** These are the random variations of a scenario.
  1090. */
  1091. typedef enum ScenarioVarEnum
  1092. {
  1093. SCEN_VAR_NONE = -1,
  1094. SCEN_VAR_A,
  1095. SCEN_VAR_B,
  1096. SCEN_VAR_C,
  1097. SCEN_VAR_D,
  1098. SCEN_VAR_COUNT, // comes before the Lose value!
  1099. SCEN_VAR_LOSE,
  1100. SCEN_VAR_FIRST = 0
  1101. } ScenarioVarType;
  1102. inline ScenarioVarType operator++(ScenarioVarType &, int);
  1103. /**********************************************************************
  1104. ** The objects to be drawn on the map are grouped into layers. These
  1105. ** enumerated values specify those layers. The ground layer is sorted
  1106. ** from back to front.
  1107. */
  1108. typedef enum LayerType {
  1109. LAYER_NONE=-1,
  1110. LAYER_SURFACE, // Flat on the ground (no sorting or apparent vertical height).
  1111. LAYER_GROUND, // Touching the ground type object (units & buildings).
  1112. LAYER_AIR, // Flying above the ground (explosions & flames).
  1113. LAYER_TOP, // Topmost layer (aircraft & bullets).
  1114. LAYER_COUNT,
  1115. LAYER_FIRST=0
  1116. } LayerType;
  1117. inline LayerType operator++(LayerType &, int);
  1118. /**********************************************************************
  1119. ** This enumerates the various bullet types. These types specify bullet's
  1120. ** visual and explosive characteristics.
  1121. */
  1122. typedef enum BulletType {
  1123. BULLET_NONE=-1,
  1124. BULLET_INVISIBLE,
  1125. BULLET_CANNON,
  1126. BULLET_ACK,
  1127. BULLET_TORPEDO,
  1128. BULLET_FROG,
  1129. BULLET_HEAT_SEEKER,
  1130. BULLET_LASER_GUIDED,
  1131. BULLET_LOBBED,
  1132. BULLET_BOMBLET,
  1133. BULLET_BALLISTIC,
  1134. BULLET_PARACHUTE,
  1135. BULLET_FIREBALL,
  1136. BULLET_DOG,
  1137. BULLET_CATAPULT,
  1138. BULLET_AAMISSILE,
  1139. BULLET_GPS_SATELLITE,
  1140. BULLET_NUKE_UP,
  1141. BULLET_NUKE_DOWN,
  1142. BULLET_COUNT,
  1143. BULLET_FIRST=0
  1144. } BulletType;
  1145. inline BulletType operator++(BulletType &, int);
  1146. /**********************************************************************
  1147. ** All game buildings (structures) are enumerated here. This includes
  1148. ** civilian structures as well.
  1149. */
  1150. typedef enum StructType {
  1151. STRUCT_NONE=-1,
  1152. STRUCT_ADVANCED_TECH,
  1153. STRUCT_IRON_CURTAIN,
  1154. STRUCT_WEAP,
  1155. STRUCT_CHRONOSPHERE,
  1156. STRUCT_PILLBOX,
  1157. STRUCT_CAMOPILLBOX,
  1158. STRUCT_RADAR,
  1159. STRUCT_GAP,
  1160. STRUCT_TURRET,
  1161. STRUCT_AAGUN,
  1162. STRUCT_FLAME_TURRET,
  1163. STRUCT_CONST,
  1164. STRUCT_REFINERY,
  1165. STRUCT_STORAGE,
  1166. STRUCT_HELIPAD,
  1167. STRUCT_SAM,
  1168. STRUCT_AIRSTRIP,
  1169. STRUCT_POWER,
  1170. STRUCT_ADVANCED_POWER,
  1171. STRUCT_SOVIET_TECH,
  1172. STRUCT_HOSPITAL,
  1173. STRUCT_BARRACKS,
  1174. STRUCT_TENT,
  1175. STRUCT_KENNEL,
  1176. STRUCT_REPAIR,
  1177. STRUCT_BIO_LAB,
  1178. STRUCT_MISSION,
  1179. STRUCT_SHIP_YARD,
  1180. STRUCT_SUB_PEN,
  1181. STRUCT_MSLO,
  1182. STRUCT_FORWARD_COM,
  1183. STRUCT_TESLA,
  1184. /*
  1185. ** All buildings that are never used as a prerequisite
  1186. ** for construction, follow this point. Typically, this is
  1187. ** limited to civilian structures. Also, the following
  1188. ** buildings are NEVER used in the availability bit field
  1189. ** record that each house maintains. i.e., STRUCTF_????
  1190. ** bit checking will never occur with the following
  1191. ** building types.
  1192. */
  1193. STRUCT_FAKEWEAP,
  1194. STRUCT_FAKECONST,
  1195. STRUCT_FAKE_YARD,
  1196. STRUCT_FAKE_PEN,
  1197. STRUCT_FAKE_RADAR,
  1198. STRUCT_SANDBAG_WALL,
  1199. STRUCT_CYCLONE_WALL,
  1200. STRUCT_BRICK_WALL,
  1201. STRUCT_BARBWIRE_WALL,
  1202. STRUCT_WOOD_WALL,
  1203. STRUCT_FENCE,
  1204. STRUCT_AVMINE,
  1205. STRUCT_APMINE,
  1206. STRUCT_V01,
  1207. STRUCT_V02,
  1208. STRUCT_V03,
  1209. STRUCT_V04,
  1210. STRUCT_V05,
  1211. STRUCT_V06,
  1212. STRUCT_V07,
  1213. STRUCT_V08,
  1214. STRUCT_V09,
  1215. STRUCT_V10,
  1216. STRUCT_V11,
  1217. STRUCT_V12,
  1218. STRUCT_V13,
  1219. STRUCT_V14,
  1220. STRUCT_V15,
  1221. STRUCT_V16,
  1222. STRUCT_V17,
  1223. STRUCT_V18,
  1224. STRUCT_PUMP,
  1225. STRUCT_V20,
  1226. STRUCT_V21,
  1227. STRUCT_V22,
  1228. STRUCT_V23,
  1229. STRUCT_V24,
  1230. STRUCT_V25,
  1231. STRUCT_V26,
  1232. STRUCT_V27,
  1233. STRUCT_V28,
  1234. STRUCT_V29,
  1235. STRUCT_V30,
  1236. STRUCT_V31,
  1237. STRUCT_V32,
  1238. STRUCT_V33,
  1239. STRUCT_V34,
  1240. STRUCT_V35,
  1241. STRUCT_V36,
  1242. STRUCT_V37,
  1243. STRUCT_BARREL,
  1244. STRUCT_BARREL3,
  1245. #ifdef FIXIT_ANTS
  1246. STRUCT_QUEEN,
  1247. STRUCT_LARVA1,
  1248. STRUCT_LARVA2,
  1249. #endif
  1250. STRUCT_COUNT,
  1251. STRUCT_FIRST=0
  1252. } StructType;
  1253. inline StructType operator++(StructType &, int);
  1254. #define STRUCTF_NONE 0L
  1255. #define STRUCTF_ADVANCED_TECH (1L << STRUCT_ADVANCED_TECH)
  1256. #define STRUCTF_IRON_CURTAIN (1L << STRUCT_IRON_CURTAIN)
  1257. #define STRUCTF_WEAP (1L << STRUCT_WEAP)
  1258. #define STRUCTF_CHRONOSPHERE (1L << STRUCT_CHRONOSPHERE)
  1259. #define STRUCTF_PILLBOX (1L << STRUCT_PILLBOX)
  1260. #define STRUCTF_CAMOPILLBOX (1L << STRUCT_CAMOPILLBOX)
  1261. #define STRUCTF_RADAR (1L << STRUCT_RADAR)
  1262. #define STRUCTF_GAP (1L << STRUCT_GAP)
  1263. #define STRUCTF_TURRET (1L << STRUCT_TURRET)
  1264. #define STRUCTF_AAGUN (1L << STRUCT_AAGUN)
  1265. #define STRUCTF_FLAME_TURRET (1L << STRUCT_FLAME_TURRET)
  1266. #define STRUCTF_CONST (1L << STRUCT_CONST)
  1267. #define STRUCTF_REFINERY (1L << STRUCT_REFINERY)
  1268. #define STRUCTF_STORAGE (1L << STRUCT_STORAGE)
  1269. #define STRUCTF_HELIPAD (1L << STRUCT_HELIPAD)
  1270. #define STRUCTF_SAM (1L << STRUCT_SAM)
  1271. #define STRUCTF_AIRSTRIP (1L << STRUCT_AIRSTRIP)
  1272. #define STRUCTF_POWER (1L << STRUCT_POWER)
  1273. #define STRUCTF_ADVANCED_POWER (1L << STRUCT_ADVANCED_POWER)
  1274. #define STRUCTF_SOVIET_TECH (1L << STRUCT_SOVIET_TECH)
  1275. #define STRUCTF_HOSPITAL (1L << STRUCT_HOSPITAL)
  1276. #define STRUCTF_BARRACKS (1L << STRUCT_BARRACKS)
  1277. #define STRUCTF_TENT (1L << STRUCT_TENT)
  1278. #define STRUCTF_KENNEL (1L << STRUCT_KENNEL)
  1279. #define STRUCTF_REPAIR (1L << STRUCT_REPAIR)
  1280. #define STRUCTF_BIO_LAB (1L << STRUCT_BIO_LAB)
  1281. #define STRUCTF_MISSION (1L << STRUCT_MISSION)
  1282. #define STRUCTF_SHIP_YARD (1L << STRUCT_SHIP_YARD)
  1283. #define STRUCTF_SUB_PEN (1L << STRUCT_SUB_PEN)
  1284. #define STRUCTF_MSLO (1L << STRUCT_MSLO)
  1285. #define STRUCTF_FAKECONST (1L << STRUCT_FAKECONST)
  1286. #define STRUCTF_FAKEWEAP (1L << STRUCT_FAKEWEAP)
  1287. /**********************************************************************
  1288. ** The overlays are enumerated here. An overlay functions similarly to
  1289. ** a transparent icon. It is placed over the terrain but usually falls
  1290. ** "under" buildings, trees, and units.
  1291. */
  1292. typedef enum OverlayType {
  1293. OVERLAY_NONE=-1,
  1294. OVERLAY_SANDBAG_WALL, // Piled sandbags.
  1295. OVERLAY_CYCLONE_WALL, // Chain-link fence.
  1296. OVERLAY_BRICK_WALL, // Solid concrete wall.
  1297. OVERLAY_BARBWIRE_WALL, // Barbed-wire wall.
  1298. OVERLAY_WOOD_WALL, // Wooden fence.
  1299. OVERLAY_GOLD1,
  1300. OVERLAY_GOLD2,
  1301. OVERLAY_GOLD3,
  1302. OVERLAY_GOLD4,
  1303. OVERLAY_GEMS1,
  1304. OVERLAY_GEMS2,
  1305. OVERLAY_GEMS3,
  1306. OVERLAY_GEMS4,
  1307. OVERLAY_V12, // Haystacks
  1308. OVERLAY_V13, // Haystack
  1309. OVERLAY_V14, // Wheat field
  1310. OVERLAY_V15, // Fallow field
  1311. OVERLAY_V16, // Corn field
  1312. OVERLAY_V17, // Celery field
  1313. OVERLAY_V18, // Potato field
  1314. OVERLAY_FLAG_SPOT, // Flag start location.
  1315. OVERLAY_WOOD_CRATE, // Wooden goodie crate.
  1316. OVERLAY_STEEL_CRATE, // Steel goodie crate.
  1317. OVERLAY_FENCE, // New fangled fence.
  1318. OVERLAY_WATER_CRATE, // Water goodie crate.
  1319. OVERLAY_COUNT,
  1320. OVERLAY_FIRST=0
  1321. } OverlayType;
  1322. inline OverlayType operator++(OverlayType &, int);
  1323. /**********************************************************************
  1324. ** This specifies the infantry in the game. The "E" designation is
  1325. ** similar to the army classification of enlisted soldiers.
  1326. */
  1327. typedef enum InfantryType{
  1328. INFANTRY_NONE=-1,
  1329. INFANTRY_E1, // Mini-gun armed.
  1330. INFANTRY_E2, // Grenade thrower.
  1331. INFANTRY_E3, // Rocket launcher.
  1332. INFANTRY_E4, // Flame thrower equipped.
  1333. INFANTRY_RENOVATOR, // Engineer.
  1334. INFANTRY_TANYA, // Saboteur.
  1335. INFANTRY_SPY, // Spy.
  1336. INFANTRY_THIEF, // Thief.
  1337. INFANTRY_MEDIC, // Field Medic.
  1338. INFANTRY_GENERAL, // Field Marshal.
  1339. INFANTRY_DOG, // Soviet attack dog
  1340. INFANTRY_C1, // Civilian
  1341. INFANTRY_C2, // Civilian
  1342. INFANTRY_C3, // Civilian
  1343. INFANTRY_C4, // Civilian
  1344. INFANTRY_C5, // Civilian
  1345. INFANTRY_C6, // Civilian
  1346. INFANTRY_C7, // Civilian
  1347. INFANTRY_C8, // Civilian
  1348. INFANTRY_C9, // Civilian
  1349. INFANTRY_C10, // Nikumba
  1350. INFANTRY_EINSTEIN, // Einstein
  1351. INFANTRY_DELPHI, // Agent "Delphi"
  1352. INFANTRY_CHAN, // Dr. Chan
  1353. #ifdef FIXIT_CSII // checked - ajw 9/28/98
  1354. // CounterStrike II only!
  1355. INFANTRY_SHOCK, // Shock Trooper
  1356. INFANTRY_MECHANIC,
  1357. #endif
  1358. INFANTRY_COUNT,
  1359. INFANTRY_FIRST=0
  1360. #ifdef FIXIT_CSII // checked - ajw 9/28/98
  1361. ,
  1362. INFANTRY_RA_COUNT = INFANTRY_SHOCK
  1363. #endif
  1364. } InfantryType;
  1365. #define INFANTRYF_DOG (1L << INFANTRY_DOG)
  1366. inline InfantryType operator++(InfantryType &, int);
  1367. /**********************************************************************
  1368. ** The game units are enumerated here. These include not only traditional
  1369. ** vehicles, but also hovercraft and gunboats.
  1370. */
  1371. typedef enum UnitType{
  1372. UNIT_NONE=-1,
  1373. UNIT_HTANK, // Mammoth tank.
  1374. UNIT_MTANK, // Heavy tank.
  1375. UNIT_MTANK2, // Medium tank.
  1376. UNIT_LTANK, // Light tank ('Bradly').
  1377. UNIT_APC, // APC.
  1378. UNIT_MINELAYER, // Mine-laying vehicle.
  1379. UNIT_JEEP, // 4x4 jeep replacement.
  1380. UNIT_HARVESTER, // Resource gathering vehicle.
  1381. UNIT_ARTY, // Artillery unit.
  1382. UNIT_MRJ, // Mobile Radar Jammer.
  1383. UNIT_MGG, // Mobile Gap Generator
  1384. UNIT_MCV, // Mobile construction vehicle.
  1385. UNIT_V2_LAUNCHER, // V2 rocket launcher.
  1386. UNIT_TRUCK, // Convoy truck
  1387. #ifdef FIXIT_ANTS
  1388. UNIT_ANT1, // Warrior ant.
  1389. UNIT_ANT2, // Warrior ant.
  1390. UNIT_ANT3, // Warrior ant.
  1391. #endif
  1392. #ifdef FIXIT_CSII // checked - ajw 9/28/98
  1393. // CS II ONLY!
  1394. UNIT_CHRONOTANK, // Chrono-shifting tank
  1395. UNIT_TESLATANK, // Tesla-equipped tank
  1396. UNIT_MAD, // Timequake tank
  1397. UNIT_DEMOTRUCK, // Jihad truck
  1398. #ifdef FIXIT_PHASETRANSPORT // checked - ajw 9/28/98
  1399. UNIT_PHASE, // cloaking APC for special missions
  1400. #endif
  1401. #endif
  1402. UNIT_COUNT,
  1403. UNIT_FIRST=0
  1404. #ifdef FIXIT_CSII // checked - ajw 9/28/98
  1405. ,
  1406. UNIT_RA_COUNT = UNIT_CHRONOTANK
  1407. #endif
  1408. } UnitType;
  1409. inline UnitType operator++(UnitType &, int);
  1410. #define UNITF_HTANK (1L<<UNIT_HTANK)
  1411. #define UNITF_MTANK (1L<<UNIT_MTANK)
  1412. #define UNITF_MTANK2 (1L<<UNIT_MTANK2)
  1413. #define UNITF_LTANK (1L<<UNIT_LTANK)
  1414. #define UNITF_STANK (1L<<UNIT_STANK)
  1415. #define UNITF_APC (1L<<UNIT_APC)
  1416. #define UNITF_MLRS (1L<<UNIT_MLRS)
  1417. #define UNITF_JEEP (1L<<UNIT_JEEP)
  1418. #define UNITF_HARVESTER (1L<<UNIT_HARVESTER)
  1419. #define UNITF_ARTY (1L<<UNIT_ARTY)
  1420. #define UNITF_MCV (1L<<UNIT_MCV)
  1421. /**********************************************************************
  1422. ** The naval vessels are enumerated below.
  1423. */
  1424. typedef enum VesselType{
  1425. VESSEL_NONE=-1,
  1426. VESSEL_SS, // Submarine
  1427. VESSEL_DD, // Medium weapon patrol craft
  1428. VESSEL_CA, // Heavy weapon patrol craft
  1429. VESSEL_TRANSPORT, // Unit transporter
  1430. VESSEL_PT, // Light weapon patrol craft
  1431. #ifdef FIXIT_CSII // checked - ajw 9/28/98
  1432. // CS II ONLY
  1433. VESSEL_MISSILESUB, // Missile-equipped submarine
  1434. #endif
  1435. #ifdef FIXIT_CARRIER // checked - ajw 9/28/98
  1436. VESSEL_CARRIER,
  1437. #endif
  1438. VESSEL_COUNT,
  1439. VESSEL_FIRST=0
  1440. #ifdef FIXIT_CSII // checked - ajw 9/28/98
  1441. ,
  1442. VESSEL_RA_COUNT = VESSEL_MISSILESUB
  1443. #endif
  1444. } VesselType;
  1445. inline VesselType operator++(VesselType &, int);
  1446. #define VESSELF_SS (1L<<VESSEL_SS)
  1447. #define VESSELF_DD (1L<<VESSEL_DD)
  1448. #define VESSELF_CA (1L<<VESSEL_CA)
  1449. #define VESSELF_TRANSPORT (1L<<VESSEL_TRANSPORT)
  1450. #define VESSELF_PT (1L<<VESSEL_PT)
  1451. /**********************************************************************
  1452. ** The various aircraft types are enumerated here. These include helicopters
  1453. ** as well as traditional aircraft.
  1454. */
  1455. typedef enum AircraftType {
  1456. AIRCRAFT_TRANSPORT, // Transport helicopter.
  1457. AIRCRAFT_BADGER, // Badger bomber.
  1458. AIRCRAFT_U2, // Photo recon plane.
  1459. AIRCRAFT_MIG, // Mig attack plane.
  1460. AIRCRAFT_YAK, // Yak attack plane.
  1461. AIRCRAFT_LONGBOW, // Apache gunship.
  1462. AIRCRAFT_HIND, // Soviet attach helicopter.
  1463. AIRCRAFT_COUNT,
  1464. AIRCRAFT_NONE=-1,
  1465. AIRCRAFT_FIRST=0
  1466. } AircraftType;
  1467. #define AIRCRAFTF_TRANSPORT (1L << AIRCRAFT_TRANSPORT)
  1468. #define AIRCRAFTF_BADGER (1L << AIRCRAFT_BADGER)
  1469. #define AIRCRAFTF_U2 (1L << AIRCRAFT_U2)
  1470. #define AIRCRAFTF_MIG (1L << AIRCRAFT_MIG)
  1471. #define AIRCRAFTF_YAK (1L << AIRCRAFT_YAK)
  1472. #define AIRCRAFTF_LONGBOW (1L << AIRCRAFT_LONGBOW)
  1473. #define AIRCRAFTF_HIND (1L << AIRCRAFT_HIND)
  1474. inline AircraftType operator++(AircraftType &, int);
  1475. /**********************************************************************
  1476. ** The game templates are enumerated here. These are the underlying
  1477. ** terrain art. This includes everything from water to cliffs. If the
  1478. ** terrain is broken up into icons, is not transparent, and is drawn
  1479. ** as the bottom most layer, then it is a template.
  1480. */
  1481. typedef enum TemplateType {
  1482. TEMPLATE_CLEAR1,
  1483. TEMPLATE_WATER, // This must be the first non-clear template.
  1484. TEMPLATE_WATER2,
  1485. TEMPLATE_SHORE01,
  1486. TEMPLATE_SHORE02,
  1487. TEMPLATE_SHORE03,
  1488. TEMPLATE_SHORE04,
  1489. TEMPLATE_SHORE05,
  1490. TEMPLATE_SHORE06,
  1491. TEMPLATE_SHORE07,
  1492. TEMPLATE_SHORE08,
  1493. TEMPLATE_SHORE09,
  1494. TEMPLATE_SHORE10,
  1495. TEMPLATE_SHORE11,
  1496. TEMPLATE_SHORE12,
  1497. TEMPLATE_SHORE13,
  1498. TEMPLATE_SHORE14,
  1499. TEMPLATE_SHORE15,
  1500. TEMPLATE_SHORE16,
  1501. TEMPLATE_SHORE17,
  1502. TEMPLATE_SHORE18,
  1503. TEMPLATE_SHORE19,
  1504. TEMPLATE_SHORE20,
  1505. TEMPLATE_SHORE21,
  1506. TEMPLATE_SHORE22,
  1507. TEMPLATE_SHORE23,
  1508. TEMPLATE_SHORE24,
  1509. TEMPLATE_SHORE25,
  1510. TEMPLATE_SHORE26,
  1511. TEMPLATE_SHORE27,
  1512. TEMPLATE_SHORE28,
  1513. TEMPLATE_SHORE29,
  1514. TEMPLATE_SHORE30,
  1515. TEMPLATE_SHORE31,
  1516. TEMPLATE_SHORE32,
  1517. TEMPLATE_SHORE33,
  1518. TEMPLATE_SHORE34,
  1519. TEMPLATE_SHORE35,
  1520. TEMPLATE_SHORE36,
  1521. TEMPLATE_SHORE37,
  1522. TEMPLATE_SHORE38,
  1523. TEMPLATE_SHORE39,
  1524. TEMPLATE_SHORE40,
  1525. TEMPLATE_SHORE41,
  1526. TEMPLATE_SHORE42,
  1527. TEMPLATE_SHORE43,
  1528. TEMPLATE_SHORE44,
  1529. TEMPLATE_SHORE45,
  1530. TEMPLATE_SHORE46,
  1531. TEMPLATE_SHORE47,
  1532. TEMPLATE_SHORE48,
  1533. TEMPLATE_SHORE49,
  1534. TEMPLATE_SHORE50,
  1535. TEMPLATE_SHORE51,
  1536. TEMPLATE_SHORE52,
  1537. TEMPLATE_SHORE53,
  1538. TEMPLATE_SHORE54,
  1539. TEMPLATE_SHORE55,
  1540. TEMPLATE_SHORE56,
  1541. TEMPLATE_SHORECLIFF01,
  1542. TEMPLATE_SHORECLIFF02,
  1543. TEMPLATE_SHORECLIFF03,
  1544. TEMPLATE_SHORECLIFF04,
  1545. TEMPLATE_SHORECLIFF05,
  1546. TEMPLATE_SHORECLIFF06,
  1547. TEMPLATE_SHORECLIFF07,
  1548. TEMPLATE_SHORECLIFF08,
  1549. TEMPLATE_SHORECLIFF09,
  1550. TEMPLATE_SHORECLIFF10,
  1551. TEMPLATE_SHORECLIFF11,
  1552. TEMPLATE_SHORECLIFF12,
  1553. TEMPLATE_SHORECLIFF13,
  1554. TEMPLATE_SHORECLIFF14,
  1555. TEMPLATE_SHORECLIFF15,
  1556. TEMPLATE_SHORECLIFF16,
  1557. TEMPLATE_SHORECLIFF17,
  1558. TEMPLATE_SHORECLIFF18,
  1559. TEMPLATE_SHORECLIFF19,
  1560. TEMPLATE_SHORECLIFF20,
  1561. TEMPLATE_SHORECLIFF21,
  1562. TEMPLATE_SHORECLIFF22,
  1563. TEMPLATE_SHORECLIFF23,
  1564. TEMPLATE_SHORECLIFF24,
  1565. TEMPLATE_SHORECLIFF25,
  1566. TEMPLATE_SHORECLIFF26,
  1567. TEMPLATE_SHORECLIFF27,
  1568. TEMPLATE_SHORECLIFF28,
  1569. TEMPLATE_SHORECLIFF29,
  1570. TEMPLATE_SHORECLIFF30,
  1571. TEMPLATE_SHORECLIFF31,
  1572. TEMPLATE_SHORECLIFF32,
  1573. TEMPLATE_SHORECLIFF33,
  1574. TEMPLATE_SHORECLIFF34,
  1575. TEMPLATE_SHORECLIFF35,
  1576. TEMPLATE_SHORECLIFF36,
  1577. TEMPLATE_SHORECLIFF37,
  1578. TEMPLATE_SHORECLIFF38,
  1579. TEMPLATE_BOULDER1,
  1580. TEMPLATE_BOULDER2,
  1581. TEMPLATE_BOULDER3,
  1582. TEMPLATE_BOULDER4,
  1583. TEMPLATE_BOULDER5,
  1584. TEMPLATE_BOULDER6,
  1585. TEMPLATE_PATCH01,
  1586. TEMPLATE_PATCH02,
  1587. TEMPLATE_PATCH03,
  1588. TEMPLATE_PATCH04,
  1589. TEMPLATE_PATCH07,
  1590. TEMPLATE_PATCH08,
  1591. TEMPLATE_PATCH13,
  1592. TEMPLATE_PATCH14,
  1593. TEMPLATE_PATCH15,
  1594. TEMPLATE_RIVER01,
  1595. TEMPLATE_RIVER02,
  1596. TEMPLATE_RIVER03,
  1597. TEMPLATE_RIVER04,
  1598. TEMPLATE_RIVER05,
  1599. TEMPLATE_RIVER06,
  1600. TEMPLATE_RIVER07,
  1601. TEMPLATE_RIVER08,
  1602. TEMPLATE_RIVER09,
  1603. TEMPLATE_RIVER10,
  1604. TEMPLATE_RIVER11,
  1605. TEMPLATE_RIVER12,
  1606. TEMPLATE_RIVER13,
  1607. TEMPLATE_FALLS1,
  1608. TEMPLATE_FALLS1A,
  1609. TEMPLATE_FALLS2,
  1610. TEMPLATE_FALLS2A,
  1611. TEMPLATE_FORD1,
  1612. TEMPLATE_FORD2,
  1613. TEMPLATE_BRIDGE1,
  1614. TEMPLATE_BRIDGE1D,
  1615. TEMPLATE_BRIDGE2,
  1616. TEMPLATE_BRIDGE2D,
  1617. TEMPLATE_SLOPE01,
  1618. TEMPLATE_SLOPE02,
  1619. TEMPLATE_SLOPE03,
  1620. TEMPLATE_SLOPE04,
  1621. TEMPLATE_SLOPE05,
  1622. TEMPLATE_SLOPE06,
  1623. TEMPLATE_SLOPE07,
  1624. TEMPLATE_SLOPE08,
  1625. TEMPLATE_SLOPE09,
  1626. TEMPLATE_SLOPE10,
  1627. TEMPLATE_SLOPE11,
  1628. TEMPLATE_SLOPE12,
  1629. TEMPLATE_SLOPE13,
  1630. TEMPLATE_SLOPE14,
  1631. TEMPLATE_SLOPE15,
  1632. TEMPLATE_SLOPE16,
  1633. TEMPLATE_SLOPE17,
  1634. TEMPLATE_SLOPE18,
  1635. TEMPLATE_SLOPE19,
  1636. TEMPLATE_SLOPE20,
  1637. TEMPLATE_SLOPE21,
  1638. TEMPLATE_SLOPE22,
  1639. TEMPLATE_SLOPE23,
  1640. TEMPLATE_SLOPE24,
  1641. TEMPLATE_SLOPE25,
  1642. TEMPLATE_SLOPE26,
  1643. TEMPLATE_SLOPE27,
  1644. TEMPLATE_SLOPE28,
  1645. TEMPLATE_SLOPE29,
  1646. TEMPLATE_SLOPE30,
  1647. TEMPLATE_SLOPE31,
  1648. TEMPLATE_SLOPE32,
  1649. TEMPLATE_SLOPE33,
  1650. TEMPLATE_SLOPE34,
  1651. TEMPLATE_SLOPE35,
  1652. TEMPLATE_SLOPE36,
  1653. TEMPLATE_SLOPE37,
  1654. TEMPLATE_SLOPE38,
  1655. TEMPLATE_ROAD01,
  1656. TEMPLATE_ROAD02,
  1657. TEMPLATE_ROAD03,
  1658. TEMPLATE_ROAD04,
  1659. TEMPLATE_ROAD05,
  1660. TEMPLATE_ROAD06,
  1661. TEMPLATE_ROAD07,
  1662. TEMPLATE_ROAD08,
  1663. TEMPLATE_ROAD09,
  1664. TEMPLATE_ROAD10,
  1665. TEMPLATE_ROAD11,
  1666. TEMPLATE_ROAD12,
  1667. TEMPLATE_ROAD13,
  1668. TEMPLATE_ROAD14,
  1669. TEMPLATE_ROAD15,
  1670. TEMPLATE_ROAD16,
  1671. TEMPLATE_ROAD17,
  1672. TEMPLATE_ROAD18,
  1673. TEMPLATE_ROAD19,
  1674. TEMPLATE_ROAD20,
  1675. TEMPLATE_ROAD21,
  1676. TEMPLATE_ROAD22,
  1677. TEMPLATE_ROAD23,
  1678. TEMPLATE_ROAD24,
  1679. TEMPLATE_ROAD25,
  1680. TEMPLATE_ROAD26,
  1681. TEMPLATE_ROAD27,
  1682. TEMPLATE_ROAD28,
  1683. TEMPLATE_ROAD29,
  1684. TEMPLATE_ROAD30,
  1685. TEMPLATE_ROAD31,
  1686. TEMPLATE_ROAD32,
  1687. TEMPLATE_ROAD33,
  1688. TEMPLATE_ROAD34,
  1689. TEMPLATE_ROAD35,
  1690. TEMPLATE_ROAD36,
  1691. TEMPLATE_ROAD37,
  1692. TEMPLATE_ROAD38,
  1693. TEMPLATE_ROAD39,
  1694. TEMPLATE_ROAD40,
  1695. TEMPLATE_ROAD41,
  1696. TEMPLATE_ROAD42,
  1697. TEMPLATE_ROAD43,
  1698. TEMPLATE_ROUGH01,
  1699. TEMPLATE_ROUGH02,
  1700. TEMPLATE_ROUGH03,
  1701. TEMPLATE_ROUGH04,
  1702. TEMPLATE_ROUGH05,
  1703. TEMPLATE_ROUGH06,
  1704. TEMPLATE_ROUGH07,
  1705. TEMPLATE_ROUGH08,
  1706. TEMPLATE_ROUGH09,
  1707. TEMPLATE_ROUGH10,
  1708. TEMPLATE_ROUGH11,
  1709. TEMPLATE_ROAD44,
  1710. TEMPLATE_ROAD45,
  1711. TEMPLATE_RIVER14,
  1712. TEMPLATE_RIVER15,
  1713. TEMPLATE_RIVERCLIFF01,
  1714. TEMPLATE_RIVERCLIFF02,
  1715. TEMPLATE_RIVERCLIFF03,
  1716. TEMPLATE_RIVERCLIFF04,
  1717. TEMPLATE_BRIDGE_1A,
  1718. TEMPLATE_BRIDGE_1B,
  1719. TEMPLATE_BRIDGE_1C,
  1720. TEMPLATE_BRIDGE_2A,
  1721. TEMPLATE_BRIDGE_2B,
  1722. TEMPLATE_BRIDGE_2C,
  1723. TEMPLATE_BRIDGE_3A,
  1724. TEMPLATE_BRIDGE_3B,
  1725. TEMPLATE_BRIDGE_3C,
  1726. TEMPLATE_BRIDGE_3D,
  1727. TEMPLATE_BRIDGE_3E,
  1728. TEMPLATE_BRIDGE_3F,
  1729. TEMPLATE_F01,
  1730. TEMPLATE_F02,
  1731. TEMPLATE_F03,
  1732. TEMPLATE_F04,
  1733. TEMPLATE_F05,
  1734. TEMPLATE_F06,
  1735. // Custom interior pieces.
  1736. TEMPLATE_ARRO0001,
  1737. TEMPLATE_ARRO0002,
  1738. TEMPLATE_ARRO0003,
  1739. TEMPLATE_ARRO0004,
  1740. TEMPLATE_ARRO0005,
  1741. TEMPLATE_ARRO0006,
  1742. TEMPLATE_ARRO0007,
  1743. TEMPLATE_ARRO0008,
  1744. TEMPLATE_ARRO0009,
  1745. TEMPLATE_ARRO0010,
  1746. TEMPLATE_ARRO0011,
  1747. TEMPLATE_ARRO0012,
  1748. TEMPLATE_ARRO0013,
  1749. TEMPLATE_ARRO0014,
  1750. TEMPLATE_ARRO0015,
  1751. TEMPLATE_FLOR0001,
  1752. TEMPLATE_FLOR0002,
  1753. TEMPLATE_FLOR0003,
  1754. TEMPLATE_FLOR0004,
  1755. TEMPLATE_FLOR0005,
  1756. TEMPLATE_FLOR0006,
  1757. TEMPLATE_FLOR0007,
  1758. TEMPLATE_GFLR0001,
  1759. TEMPLATE_GFLR0002,
  1760. TEMPLATE_GFLR0003,
  1761. TEMPLATE_GFLR0004,
  1762. TEMPLATE_GFLR0005,
  1763. TEMPLATE_GSTR0001,
  1764. TEMPLATE_GSTR0002,
  1765. TEMPLATE_GSTR0003,
  1766. TEMPLATE_GSTR0004,
  1767. TEMPLATE_GSTR0005,
  1768. TEMPLATE_GSTR0006,
  1769. TEMPLATE_GSTR0007,
  1770. TEMPLATE_GSTR0008,
  1771. TEMPLATE_GSTR0009,
  1772. TEMPLATE_GSTR0010,
  1773. TEMPLATE_GSTR0011,
  1774. TEMPLATE_LWAL0001,
  1775. TEMPLATE_LWAL0002,
  1776. TEMPLATE_LWAL0003,
  1777. TEMPLATE_LWAL0004,
  1778. TEMPLATE_LWAL0005,
  1779. TEMPLATE_LWAL0006,
  1780. TEMPLATE_LWAL0007,
  1781. TEMPLATE_LWAL0008,
  1782. TEMPLATE_LWAL0009,
  1783. TEMPLATE_LWAL0010,
  1784. TEMPLATE_LWAL0011,
  1785. TEMPLATE_LWAL0012,
  1786. TEMPLATE_LWAL0013,
  1787. TEMPLATE_LWAL0014,
  1788. TEMPLATE_LWAL0015,
  1789. TEMPLATE_LWAL0016,
  1790. TEMPLATE_LWAL0017,
  1791. TEMPLATE_LWAL0018,
  1792. TEMPLATE_LWAL0019,
  1793. TEMPLATE_LWAL0020,
  1794. TEMPLATE_LWAL0021,
  1795. TEMPLATE_LWAL0022,
  1796. TEMPLATE_LWAL0023,
  1797. TEMPLATE_LWAL0024,
  1798. TEMPLATE_LWAL0025,
  1799. TEMPLATE_LWAL0026,
  1800. TEMPLATE_LWAL0027,
  1801. TEMPLATE_STRP0001,
  1802. TEMPLATE_STRP0002,
  1803. TEMPLATE_STRP0003,
  1804. TEMPLATE_STRP0004,
  1805. TEMPLATE_STRP0005,
  1806. TEMPLATE_STRP0006,
  1807. TEMPLATE_STRP0007,
  1808. TEMPLATE_STRP0008,
  1809. TEMPLATE_STRP0009,
  1810. TEMPLATE_STRP0010,
  1811. TEMPLATE_STRP0011,
  1812. TEMPLATE_WALL0001,
  1813. TEMPLATE_WALL0002,
  1814. TEMPLATE_WALL0003,
  1815. TEMPLATE_WALL0004,
  1816. TEMPLATE_WALL0005,
  1817. TEMPLATE_WALL0006,
  1818. TEMPLATE_WALL0007,
  1819. TEMPLATE_WALL0008,
  1820. TEMPLATE_WALL0009,
  1821. TEMPLATE_WALL0010,
  1822. TEMPLATE_WALL0011,
  1823. TEMPLATE_WALL0012,
  1824. TEMPLATE_WALL0013,
  1825. TEMPLATE_WALL0014,
  1826. TEMPLATE_WALL0015,
  1827. TEMPLATE_WALL0016,
  1828. TEMPLATE_WALL0017,
  1829. TEMPLATE_WALL0018,
  1830. TEMPLATE_WALL0019,
  1831. TEMPLATE_WALL0020,
  1832. TEMPLATE_WALL0021,
  1833. TEMPLATE_WALL0022,
  1834. TEMPLATE_WALL0023,
  1835. TEMPLATE_WALL0024,
  1836. TEMPLATE_WALL0025,
  1837. TEMPLATE_WALL0026,
  1838. TEMPLATE_WALL0027,
  1839. TEMPLATE_WALL0028,
  1840. TEMPLATE_WALL0029,
  1841. TEMPLATE_WALL0030,
  1842. TEMPLATE_WALL0031,
  1843. TEMPLATE_WALL0032,
  1844. TEMPLATE_WALL0033,
  1845. TEMPLATE_WALL0034,
  1846. TEMPLATE_WALL0035,
  1847. TEMPLATE_WALL0036,
  1848. TEMPLATE_WALL0037,
  1849. TEMPLATE_WALL0038,
  1850. TEMPLATE_WALL0039,
  1851. TEMPLATE_WALL0040,
  1852. TEMPLATE_WALL0041,
  1853. TEMPLATE_WALL0042,
  1854. TEMPLATE_WALL0043,
  1855. TEMPLATE_WALL0044,
  1856. TEMPLATE_WALL0045,
  1857. TEMPLATE_WALL0046,
  1858. TEMPLATE_WALL0047,
  1859. TEMPLATE_WALL0048,
  1860. TEMPLATE_WALL0049,
  1861. TEMPLATE_BRIDGE1H,
  1862. TEMPLATE_BRIDGE2H,
  1863. TEMPLATE_BRIDGE_1AX,
  1864. TEMPLATE_BRIDGE_2AX,
  1865. TEMPLATE_BRIDGE1X,
  1866. TEMPLATE_BRIDGE2X,
  1867. TEMPLATE_XTRA0001,
  1868. TEMPLATE_XTRA0002,
  1869. TEMPLATE_XTRA0003,
  1870. TEMPLATE_XTRA0004,
  1871. TEMPLATE_XTRA0005,
  1872. TEMPLATE_XTRA0006,
  1873. TEMPLATE_XTRA0007,
  1874. TEMPLATE_XTRA0008,
  1875. TEMPLATE_XTRA0009,
  1876. TEMPLATE_XTRA0010,
  1877. TEMPLATE_XTRA0011,
  1878. TEMPLATE_XTRA0012,
  1879. TEMPLATE_XTRA0013,
  1880. TEMPLATE_XTRA0014,
  1881. TEMPLATE_XTRA0015,
  1882. TEMPLATE_XTRA0016,
  1883. #ifdef FIXIT_ANTS
  1884. TEMPLATE_HILL01,
  1885. #endif
  1886. TEMPLATE_COUNT,
  1887. TEMPLATE_NONE=65535,
  1888. TEMPLATE_FIRST=0
  1889. } TemplateType;
  1890. inline TemplateType operator++(TemplateType &, int);
  1891. /**********************************************************************
  1892. ** The three dimensional terrain objects are enumerated here. These
  1893. ** objects function similar to buildings in that they can be driven
  1894. ** behind and can take damage on an individual basis.
  1895. */
  1896. typedef enum TerrainType {
  1897. TERRAIN_NONE=-1,
  1898. TERRAIN_TREE1,
  1899. TERRAIN_TREE2,
  1900. TERRAIN_TREE3,
  1901. TERRAIN_TREE5,
  1902. TERRAIN_TREE6,
  1903. TERRAIN_TREE7,
  1904. TERRAIN_TREE8,
  1905. TERRAIN_TREE10,
  1906. TERRAIN_TREE11,
  1907. TERRAIN_TREE12,
  1908. TERRAIN_TREE13,
  1909. TERRAIN_TREE14,
  1910. TERRAIN_TREE15,
  1911. TERRAIN_TREE16,
  1912. TERRAIN_TREE17,
  1913. TERRAIN_CLUMP1,
  1914. TERRAIN_CLUMP2,
  1915. TERRAIN_CLUMP3,
  1916. TERRAIN_CLUMP4,
  1917. TERRAIN_CLUMP5,
  1918. TERRAIN_ICE01,
  1919. TERRAIN_ICE02,
  1920. TERRAIN_ICE03,
  1921. TERRAIN_ICE04,
  1922. TERRAIN_ICE05,
  1923. TERRAIN_BOXES01,
  1924. TERRAIN_BOXES02,
  1925. TERRAIN_BOXES03,
  1926. TERRAIN_BOXES04,
  1927. TERRAIN_BOXES05,
  1928. TERRAIN_BOXES06,
  1929. TERRAIN_BOXES07,
  1930. TERRAIN_BOXES08,
  1931. TERRAIN_BOXES09,
  1932. TERRAIN_MINE,
  1933. TERRAIN_COUNT,
  1934. TERRAIN_FIRST=0
  1935. } TerrainType;
  1936. inline TerrainType operator++(TerrainType &, int);
  1937. /**********************************************************************
  1938. ** Smudges are enumerated here. Smudges are transparent icons that are
  1939. ** drawn over the underlying terrain in order to give the effect of
  1940. ** alterations to the terrain. Craters are a good example of this.
  1941. */
  1942. typedef enum SmudgeType {
  1943. SMUDGE_NONE=-1,
  1944. SMUDGE_CRATER1,
  1945. SMUDGE_CRATER2,
  1946. SMUDGE_CRATER3,
  1947. SMUDGE_CRATER4,
  1948. SMUDGE_CRATER5,
  1949. SMUDGE_CRATER6,
  1950. SMUDGE_SCORCH1,
  1951. SMUDGE_SCORCH2,
  1952. SMUDGE_SCORCH3,
  1953. SMUDGE_SCORCH4,
  1954. SMUDGE_SCORCH5,
  1955. SMUDGE_SCORCH6,
  1956. SMUDGE_BIB1,
  1957. SMUDGE_BIB2,
  1958. SMUDGE_BIB3,
  1959. SMUDGE_COUNT,
  1960. SMUDGE_FIRST=0
  1961. } SmudgeType;
  1962. inline SmudgeType operator++(SmudgeType &, int);
  1963. /**********************************************************************
  1964. ** Animations are enumerated here. Animations are the high speed and
  1965. ** short lived effects that occur with explosions and fire.
  1966. */
  1967. typedef enum AnimType {
  1968. ANIM_NONE=-1,
  1969. ANIM_FBALL1, // Large fireball explosion (bulges rightward).
  1970. ANIM_FBALL_FADE, // Fading fireball puff.
  1971. ANIM_FRAG1, // Medium fragment throwing explosion -- short decay.
  1972. ANIM_VEH_HIT1, // Small fireball explosion (bulges rightward).
  1973. ANIM_VEH_HIT2, // Small fragment throwing explosion -- pop & sparkles.
  1974. ANIM_VEH_HIT3, // Small fragment throwing explosion -- burn/exp mix.
  1975. ANIM_ART_EXP1, // Large fragment throwing explosion -- many sparkles.
  1976. ANIM_NAPALM1, // Small napalm burn.
  1977. ANIM_NAPALM2, // Medium napalm burn.
  1978. ANIM_NAPALM3, // Large napalm burn.
  1979. ANIM_SMOKE_PUFF, // Small rocket smoke trail puff.
  1980. ANIM_PIFF, // Machine gun impact piffs.
  1981. ANIM_PIFFPIFF, // Chaingun impact piffs.
  1982. ANIM_FIRE_SMALL, // Small flame animation.
  1983. ANIM_FIRE_MED, // Medium flame animation.
  1984. ANIM_FIRE_MED2, // Medium flame animation (oranger).
  1985. ANIM_FIRE_TINY, // Very tiny flames.
  1986. ANIM_MUZZLE_FLASH, // Big cannon flash (with translucency).
  1987. ANIM_SMOKE_M, // Smoke rising from ground.
  1988. ANIM_BURN_SMALL, // Small combustible fire effect (with trail off).
  1989. ANIM_BURN_MED, // Medium combustible fire effect (with trail off).
  1990. ANIM_BURN_BIG, // Large combustible fire effect (with trail off).
  1991. ANIM_ON_FIRE_SMALL, // Burning effect for buildings.
  1992. ANIM_ON_FIRE_MED, // Burning effect for buildings.
  1993. ANIM_ON_FIRE_BIG, // Burning effect for buildings.
  1994. ANIM_SAM_N,
  1995. ANIM_SAM_NE,
  1996. ANIM_SAM_E,
  1997. ANIM_SAM_SE,
  1998. ANIM_SAM_S,
  1999. ANIM_SAM_SW,
  2000. ANIM_SAM_W,
  2001. ANIM_SAM_NW,
  2002. ANIM_GUN_N,
  2003. ANIM_GUN_NE,
  2004. ANIM_GUN_E,
  2005. ANIM_GUN_SE,
  2006. ANIM_GUN_S,
  2007. ANIM_GUN_SW,
  2008. ANIM_GUN_W,
  2009. ANIM_GUN_NW,
  2010. ANIM_LZ_SMOKE,
  2011. ANIM_CRATE_DEVIATOR, // Red finned missile.
  2012. ANIM_CRATE_DOLLAR, // Dollar sign.
  2013. ANIM_CRATE_EARTH, // Cracked Earth.
  2014. ANIM_CRATE_EMPULSE, // Plasma ball.
  2015. ANIM_CRATE_INVUN, // Orange sphere with green rings.
  2016. ANIM_CRATE_MINE, // Spiked mine.
  2017. ANIM_CRATE_RAPID, // Red skull.
  2018. ANIM_CRATE_STEALTH, // Cloaking sphere.
  2019. ANIM_CRATE_MISSILE, // Green finned missile.
  2020. ANIM_MOVE_FLASH,
  2021. ANIM_OILFIELD_BURN,
  2022. ANIM_ELECT_DIE, // Electrocution infantryman death from Tesla coil
  2023. ANIM_PARACHUTE, // Parachute (designed to be attached to object).
  2024. ANIM_DOG_ELECT_DIE, // Electrocution dog death from Tesla coil
  2025. ANIM_CORPSE1,
  2026. ANIM_CORPSE2,
  2027. ANIM_CORPSE3,
  2028. ANIM_SPUTDOOR,
  2029. ANIM_ATOM_BLAST,
  2030. ANIM_CHRONO_BOX,
  2031. ANIM_GPS_BOX,
  2032. ANIM_INVUL_BOX,
  2033. ANIM_PARA_BOX,
  2034. ANIM_SONAR_BOX,
  2035. ANIM_TWINKLE1,
  2036. ANIM_TWINKLE2,
  2037. ANIM_TWINKLE3,
  2038. ANIM_FLAK,
  2039. ANIM_WATER_EXP1,
  2040. ANIM_WATER_EXP2,
  2041. ANIM_WATER_EXP3,
  2042. ANIM_CRATE_ARMOR,
  2043. ANIM_CRATE_SPEED,
  2044. ANIM_CRATE_FPOWER,
  2045. ANIM_CRATE_TQUAKE,
  2046. ANIM_PARA_BOMB,
  2047. ANIM_MINE_EXP1,
  2048. #ifdef FIXIT_ANTS
  2049. ANIM_ANT_DEATH,
  2050. #endif
  2051. ANIM_COUNT,
  2052. ANIM_FIRST=0
  2053. } AnimType;
  2054. inline AnimType operator++(AnimType &, int);
  2055. /****************************************************************************
  2056. ** Infantry can be performing various activities. These can range from simple
  2057. ** idle animations to physical hand to hand combat.
  2058. */
  2059. typedef enum DoType {
  2060. DO_NOTHING=-1, // Not performing any choreographed sequence.
  2061. DO_STAND_READY=0,
  2062. DO_STAND_GUARD,
  2063. DO_PRONE,
  2064. DO_WALK,
  2065. DO_FIRE_WEAPON,
  2066. DO_LIE_DOWN,
  2067. DO_CRAWL,
  2068. DO_GET_UP,
  2069. DO_FIRE_PRONE,
  2070. DO_IDLE1,
  2071. DO_IDLE2,
  2072. DO_GUN_DEATH,
  2073. DO_EXPLOSION_DEATH,
  2074. DO_EXPLOSION2_DEATH,
  2075. DO_GRENADE_DEATH,
  2076. DO_FIRE_DEATH,
  2077. DO_GESTURE1,
  2078. DO_SALUTE1,
  2079. DO_GESTURE2,
  2080. DO_SALUTE2,
  2081. DO_DOG_MAUL,
  2082. DO_COUNT,
  2083. DO_FIRST=0
  2084. } DoType;
  2085. inline DoType operator++(DoType &, int);
  2086. /*
  2087. ** This structure is associated with each maneuver type. It tells whether the
  2088. ** maneuver can be interrupted and the frame rate.
  2089. */
  2090. typedef struct {
  2091. unsigned Interrupt:1; // Can it be interrupted?
  2092. unsigned IsMobile:1; // Can it move while doing this?
  2093. unsigned RandomStart:1; // Should animation be "randomized"?
  2094. unsigned char Rate; // Frame rate.
  2095. } DoStruct;
  2096. typedef struct {
  2097. int Frame; // Starting frame of the animation.
  2098. unsigned char Count; // Number of frames of animation.
  2099. unsigned char Jump; // Frames to jump between facings.
  2100. } DoInfoStruct;
  2101. /****************************************************************************
  2102. ** These are the various radio message that can be transmitted between
  2103. ** units and buildings. Some of these require a response from the receiver
  2104. ** and some don't.
  2105. */
  2106. typedef enum RadioMessageType {
  2107. RADIO_STATIC, // "hisssss" -- non-message
  2108. RADIO_ROGER, // "Roger."
  2109. RADIO_HELLO, // "Come in. I wish to talk."
  2110. RADIO_OVER_OUT, // "Something came up, bye."
  2111. RADIO_PICK_UP, // "Please pick me up."
  2112. RADIO_ATTACH, // "Attach to transport."
  2113. RADIO_DELIVERY, // "I've got a delivery for you."
  2114. RADIO_HOLD_STILL, // "I'm performing load/unload maneuver. Be careful."
  2115. RADIO_UNLOADED, // "I'm clear."
  2116. RADIO_UNLOAD, // "You are clear to unload. Please start driving off now."
  2117. RADIO_NEGATIVE, // "Am unable to comply."
  2118. RADIO_BUILDING, // "I'm starting construction now... act busy."
  2119. RADIO_COMPLETE, // "I've finished construction. You are free."
  2120. RADIO_REDRAW, // "Oops, sorry. I might have bumped you a little."
  2121. RADIO_DOCKING, // "I'm trying to load up now."
  2122. RADIO_CAN_LOAD, // "May I become a passenger?"
  2123. RADIO_ARE_REFINERY, // "Are you a refinery ready to take shipment?"
  2124. RADIO_TRYING_TO_LOAD, // "Are you trying to become a passenger?"
  2125. RADIO_MOVE_HERE, // "Move to location X."
  2126. RADIO_NEED_TO_MOVE, // "Do you need to move somewhere?"
  2127. RADIO_YEA_NOW_WHAT, // "All right already. Now what?"
  2128. RADIO_IM_IN, // "I'm a passenger now."
  2129. RADIO_BACKUP_NOW, // "Begin backup into refinery now."
  2130. RADIO_RUN_AWAY, // "Run away! Run away!"
  2131. RADIO_TETHER, // "Establish tether contact."
  2132. RADIO_UNTETHER, // "Break tether contact."
  2133. RADIO_REPAIR, // "Repair one step."
  2134. RADIO_PREPARED, // "Are you prepared to fight?"
  2135. RADIO_ATTACK_THIS, // "Attack this target please."
  2136. RADIO_RELOAD, // "Reload one step please."
  2137. RADIO_CANT, // "Circumstances prevent success."
  2138. RADIO_ALL_DONE, // "I have completed the task."
  2139. RADIO_NEED_REPAIR, // "Are you in need of service depot work?"
  2140. RADIO_ON_DEPOT, // "Are you sitting on a service depot?"
  2141. RADIO_COUNT
  2142. } RadioMessageType;
  2143. /****************************************************************************
  2144. ** Various trigger events and actions require additional data. This enumeration is
  2145. ** used to indicate what kind of additional data is required. This is also used
  2146. ** for team mission types that might need additional data.
  2147. */
  2148. typedef enum NeedType {
  2149. NEED_NONE, // No additional data is required.
  2150. NEED_THEME, // Need a musical theme.
  2151. NEED_MOVIE, // Need a movie to play.
  2152. NEED_SOUND, // Sound effect.
  2153. NEED_SPEECH, // Speech from EVA.
  2154. NEED_INFANTRY, // Infantry type class.
  2155. NEED_UNIT, // Unit type class.
  2156. NEED_AIRCRAFT, // Aircraft type class.
  2157. NEED_STRUCTURE, // Structure type class.
  2158. NEED_WAYPOINT, // Waypoint letter.
  2159. NEED_NUMBER, // General number.
  2160. NEED_TRIGGER, // Trigger object reference.
  2161. NEED_TEAM, // Team type class.
  2162. NEED_HOUSE, // House type number.
  2163. NEED_TIME, // Time delay value required.
  2164. NEED_QUARRY, // Quarry type is needed.
  2165. NEED_FORMATION, // A formation type is needed.
  2166. NEED_BOOL, // Boolean value is needed.
  2167. NEED_SPECIAL, // Special weapon ability.
  2168. NEED_MISSION, // General unit mission type.
  2169. NEED_HEX_NUMBER // General number.
  2170. } NeedType;
  2171. /****************************************************************************
  2172. ** There are various target types that teams and special weapons can be
  2173. ** assigned to attack. These are general target categories since the actual
  2174. ** disposition of potential targets cannot be precisely predicted -- thus these
  2175. ** serve as guidelines for the computer AI.
  2176. */
  2177. typedef enum QuarryType {
  2178. QUARRY_NONE,
  2179. QUARRY_ANYTHING, // Attack any enemy (same as "hunt").
  2180. QUARRY_BUILDINGS, // Attack buildings (in general).
  2181. QUARRY_HARVESTERS, // Attack harvesters or refineries.
  2182. QUARRY_INFANTRY, // Attack infantry.
  2183. QUARRY_VEHICLES, // Attack combat vehicles.
  2184. QUARRY_VESSELS, // Attach ships.
  2185. QUARRY_FACTORIES, // Attack factories (all types).
  2186. QUARRY_DEFENSE, // Attack base defense buildings.
  2187. QUARRY_THREAT, // Attack enemies near friendly base.
  2188. QUARRY_POWER, // Attack power facilities.
  2189. QUARRY_FAKES, // Prefer to attack fake buildings.
  2190. QUARRY_COUNT,
  2191. QUARRY_FIRST=0
  2192. } QuarryType;
  2193. /****************************************************************************
  2194. ** Teams can be assigned formations. This specifies the various formations that
  2195. ** a team can be composed into.
  2196. */
  2197. typedef enum FormationType {
  2198. FORMATION_NONE,
  2199. FORMATION_TIGHT, // Tight grouping (vulnerable units in center).
  2200. FORMATION_LOOSE, // Loose grouping (one cell separation between units).
  2201. FORMATION_WEDGE_N, // Wedge shape.
  2202. FORMATION_WEDGE_E, // Wedge shape.
  2203. FORMATION_WEDGE_S, // Wedge shape.
  2204. FORMATION_WEDGE_W, // Wedge shape.
  2205. FORMATION_LINE_NS, // Column formation.
  2206. FORMATION_LINE_EW, // Line formation.
  2207. FORMATION_COUNT,
  2208. FORMATION_FIRST=0
  2209. } FormationType;
  2210. /****************************************************************************
  2211. ** Selected units have a special selected unit box around them. These are the
  2212. ** defines for the two types of selected unit boxes. One is for infantry and
  2213. ** the other is for regular units.
  2214. */
  2215. typedef enum SelectEnum {
  2216. SELECT_NONE=-1,
  2217. SELECT_INFANTRY, // Small infantry selection box.
  2218. SELECT_UNIT, // Big unit selection box.
  2219. SELECT_BUILDING=SELECT_UNIT, // Custom box for buildings.
  2220. SELECT_TERRAIN=SELECT_UNIT, // Custom box for terrain objects.
  2221. SELECT_WRENCH, // A building is repairing overlay graphic.
  2222. SELECT_COUNT
  2223. } SelectEnum;
  2224. /****************************************************************************
  2225. ** The pip shapes and text shapes are enumerated according to the following
  2226. ** type. These special shapes are drawn over special objects or in other places
  2227. ** where shape technology is needed.
  2228. */
  2229. typedef enum PipEnum
  2230. {
  2231. PIP_EMPTY, // Empty pip spot.
  2232. PIP_FULL, // Full pip spot.
  2233. PIP_PRIMARY, // "Primary" building marker.
  2234. PIP_READY, // "Ready" construction information tag.
  2235. PIP_HOLDING, // "Hold"ing construction information tag.
  2236. PIP_ENGINEER, // Full pip with engineer coloring.
  2237. PIP_CIVILIAN, // Full pip with civilian coloring.
  2238. PIP_COMMANDO, // Full pip with commando coloring.
  2239. PIP_NUMBERS, // digit 0
  2240. PIP_NUMBER1, // digit 1
  2241. PIP_NUMBER2, // digit 2
  2242. PIP_NUMBER3, // digit 3
  2243. PIP_NUMBER4, // digit 4
  2244. PIP_NUMBER5, // digit 5
  2245. PIP_NUMBER6, // digit 6
  2246. PIP_NUMBER7, // digit 7
  2247. PIP_NUMBER8, // digit 8
  2248. PIP_NUMBER9, // digit 9
  2249. PIP_DECOY, // word "Decoy" for fake buildings
  2250. PIP_LETTERF, // letter 'F' for signifying in-formation
  2251. PIP_MEDIC, // Little medic red cross.
  2252. PIP_PRI // Abbreviated "Primary" for kennel
  2253. } PipEnum;
  2254. /****************************************************************************
  2255. ** The mouse cursor can be in different states. These states are listed
  2256. ** below. Some of these represent animating mouse cursors. The mouse
  2257. ** is controlled by passing one of these values to the appropriate
  2258. ** MouseClass member function.
  2259. */
  2260. typedef enum MouseType
  2261. {
  2262. MOUSE_NORMAL,
  2263. MOUSE_N,
  2264. MOUSE_NE,
  2265. MOUSE_E,
  2266. MOUSE_SE,
  2267. MOUSE_S,
  2268. MOUSE_SW,
  2269. MOUSE_W,
  2270. MOUSE_NW,
  2271. MOUSE_NO_N,
  2272. MOUSE_NO_NE,
  2273. MOUSE_NO_E,
  2274. MOUSE_NO_SE,
  2275. MOUSE_NO_S,
  2276. MOUSE_NO_SW,
  2277. MOUSE_NO_W,
  2278. MOUSE_NO_NW,
  2279. MOUSE_NO_MOVE,
  2280. MOUSE_CAN_MOVE,
  2281. MOUSE_ENTER,
  2282. MOUSE_DEPLOY,
  2283. MOUSE_CAN_SELECT,
  2284. MOUSE_CAN_ATTACK,
  2285. MOUSE_SELL_BACK,
  2286. MOUSE_SELL_UNIT,
  2287. MOUSE_REPAIR,
  2288. MOUSE_NO_REPAIR,
  2289. MOUSE_NO_SELL_BACK,
  2290. MOUSE_RADAR_CURSOR,
  2291. MOUSE_NUCLEAR_BOMB,
  2292. MOUSE_AIR_STRIKE,
  2293. MOUSE_DEMOLITIONS,
  2294. MOUSE_AREA_GUARD,
  2295. MOUSE_HEAL,
  2296. MOUSE_DAMAGE, // Engineer entering building to damage it.
  2297. MOUSE_GREPAIR, // Engineer entering friendly building to heal it.
  2298. MOUSE_STAY_ATTACK,
  2299. MOUSE_NO_DEPLOY,
  2300. MOUSE_NO_ENTER,
  2301. MOUSE_NO_GREPAIR,
  2302. MOUSE_CHRONO_SELECT,
  2303. MOUSE_CHRONO_DEST,
  2304. MOUSE_COUNT
  2305. } MouseType;
  2306. /**********************************************************************
  2307. ** This structure is used to control the box relief style drawn by
  2308. ** the Draw_Box() function.
  2309. */
  2310. typedef struct {
  2311. int Filler; // Center box fill color.
  2312. int Shadow; // Shadow color (darker).
  2313. int Highlight; // Highlight color (lighter).
  2314. int Corner; // Corner color (transition).
  2315. } BoxStyleType;
  2316. typedef enum BoxStyleEnum {
  2317. BOXSTYLE_DOWN, // Typical depressed edge border.
  2318. BOXSTYLE_RAISED, // Typical raised edge border.
  2319. BOXSTYLE_DIS_DOWN, // Disabled but depressed.
  2320. BOXSTYLE_DIS_RAISED, // Disabled but raised.
  2321. BOXSTYLE_BOX, // list box.
  2322. BOXSTYLE_BORDER, // main dialog box.
  2323. BOXSTYLE_COUNT
  2324. } BoxStyleEnum;
  2325. /**********************************************************************
  2326. ** Damage, as inflicted by projectiles, has different characteristics.
  2327. ** These are the different "warhead" types that can be assigned to the
  2328. ** various projectiles in the game.
  2329. */
  2330. typedef enum WarheadType{
  2331. WARHEAD_NONE=-1,
  2332. WARHEAD_SA, // Small arms -- good against infantry.
  2333. WARHEAD_HE, // High explosive -- good against buildings & infantry.
  2334. WARHEAD_AP, // Armor piercing -- good against armor.
  2335. WARHEAD_FIRE, // Incendiary -- Good against flammables.
  2336. WARHEAD_HOLLOW_POINT, // Sniper bullet type.
  2337. WARHEAD_TESLA, // Electrocution warhead for infantrymen
  2338. WARHEAD_DOG, // Slavering attack beast mauling infantryman
  2339. WARHEAD_NUKE, // Nuclear missile
  2340. #ifdef FIXIT_CSII // checked - ajw 9/28/98
  2341. WARHEAD_MECHANICAL, // repair weapon for vehicles
  2342. #endif
  2343. WARHEAD_COUNT,
  2344. WARHEAD_FIRST=0
  2345. } WarheadType;
  2346. /**********************************************************************
  2347. ** This enumerates the various weapon types. The weapon is characterized
  2348. ** by the projectile it launches, the damage it does, and the rate of
  2349. ** fire.
  2350. */
  2351. typedef enum WeaponType {
  2352. WEAPON_NONE=-1,
  2353. WEAPON_COLT45,
  2354. WEAPON_ACK_ACK,
  2355. WEAPON_VULCAN,
  2356. WEAPON_MAVERICK,
  2357. WEAPON_CAMERA,
  2358. WEAPON_FIREBALL,
  2359. WEAPON_RIFLE,
  2360. WEAPON_CHAIN_GUN,
  2361. WEAPON_PISTOL,
  2362. WEAPON_M16,
  2363. WEAPON_DRAGON,
  2364. WEAPON_HELLFIRE,
  2365. WEAPON_GRENADE,
  2366. WEAPON_75MM,
  2367. WEAPON_90MM,
  2368. WEAPON_105MM,
  2369. WEAPON_120MM,
  2370. WEAPON_TURRET_GUN,
  2371. WEAPON_MAMMOTH_TUSK,
  2372. WEAPON_155MM,
  2373. WEAPON_M60MG,
  2374. WEAPON_NAPALM,
  2375. WEAPON_TESLA_ZAP,
  2376. WEAPON_NIKE,
  2377. WEAPON_8INCH,
  2378. WEAPON_STINGER,
  2379. WEAPON_TORPEDO,
  2380. WEAPON_2INCH,
  2381. WEAPON_DEPTH_CHARGE,
  2382. WEAPON_PARA_BOMB,
  2383. WEAPON_DOGJAW,
  2384. WEAPON_HEAL,
  2385. WEAPON_SCUD,
  2386. WEAPON_FLAMER,
  2387. WEAPON_REDEYE,
  2388. #ifdef FIXIT_ANTS
  2389. WEAPON_MANDIBLE,
  2390. #endif
  2391. #ifdef FIXIT_CSII // checked - ajw 9/28/98
  2392. WEAPON_PORTATESLA,
  2393. WEAPON_GOODWRENCH,
  2394. WEAPON_SUBSCUD,
  2395. WEAPON_TTANKZAP,
  2396. WEAPON_APTUSK,
  2397. WEAPON_DEMOCHARGE,
  2398. #endif
  2399. #ifdef FIXIT_CARRIER // checked - ajw 9/28/98
  2400. WEAPON_CARRIER,
  2401. #endif
  2402. WEAPON_COUNT,
  2403. WEAPON_FIRST=0
  2404. } WeaponType;
  2405. /**********************************************************************
  2406. ** The various armor types are best suited to defend against a limited
  2407. ** kind of warheads. The game strategy revolves around proper
  2408. ** combination of armor and weaponry. Each vehicle or building has armor
  2409. ** rated according to one of the following types.
  2410. */
  2411. typedef enum ArmorType {
  2412. ARMOR_NONE, // Vulnerable to SA and HE.
  2413. ARMOR_WOOD, // Vulnerable to HE and Fire.
  2414. ARMOR_ALUMINUM, // Vulnerable to AP and SA.
  2415. ARMOR_STEEL, // Vulnerable to AP.
  2416. ARMOR_CONCRETE, // Vulnerable to HE and AP.
  2417. ARMOR_COUNT,
  2418. ARMOR_FIRST=0
  2419. } ArmorType;
  2420. /**********************************************************************
  2421. ** These are the identifiers for the various monochrome debug screens.
  2422. */
  2423. typedef enum DMonoType {
  2424. DMONO_OBJECT,
  2425. DMONO_HOUSE,
  2426. DMONO_STRESS,
  2427. DMONO_EVENTS,
  2428. DMONO_COUNT,
  2429. DMONO_FIRST=0
  2430. } DMonoType;
  2431. /*
  2432. ** Performance benchmark tracking identifiers.
  2433. */
  2434. typedef enum BenchType {
  2435. BENCH_GAME_FRAME, // Whole game frame (used for normalizing).
  2436. BENCH_FINDPATH, // Find path calls.
  2437. BENCH_GREATEST_THREAT, // Greatest threat calculation.
  2438. BENCH_AI, // Object AI calls.
  2439. BENCH_CELL, // Cell draw it function.
  2440. BENCH_SIDEBAR, // Sidebar (just cameo section) drawing.
  2441. BENCH_RADAR, // Radar map drawing.
  2442. BENCH_TACTICAL, // Whole tactical map.
  2443. BENCH_PCP, // Per cell process.
  2444. BENCH_EVAL_OBJECT, // Evaluate object as potential target.
  2445. BENCH_EVAL_CELL, // Evaluate entire cell for potential targets.
  2446. BENCH_EVAL_WALL, // Evaluate wall in cell as potential target.
  2447. BENCH_POWER, // Power bar drawing.
  2448. BENCH_TABS, // Tab section (top) drawing.
  2449. BENCH_SHROUD, // Shroud layer drawing.
  2450. BENCH_ANIMS, // Animations drawing.
  2451. BENCH_OBJECTS, // All game object drawing.
  2452. BENCH_PALETTE, // Color cycling palette adjustments.
  2453. BENCH_GSCREEN_RENDER, // Rendering of the whole map layered system (with blits).
  2454. BENCH_BLIT_DISPLAY, // DirectX or shadow blit of hidpage to seenpage.
  2455. BENCH_MISSION, // Mission list processing.
  2456. BENCH_RULES, // Processing of the rules.ini file.
  2457. BENCH_SCENARIO, // Processing of the scenario.ini file.
  2458. BENCH_COUNT,
  2459. BENCH_FIRST=0
  2460. } BenchType;
  2461. #ifdef CHEAT_KEYS
  2462. #define BStart(a) if (Benches != NULL) Benches[a].Begin()
  2463. #define BEnd(a) if (Benches != NULL) Benches[a].End()
  2464. #else
  2465. #define BStart(a)
  2466. #define BEnd(a)
  2467. #endif
  2468. /**********************************************************************
  2469. ** Working MCGA colors that give a pleasing effect for beveled edges and
  2470. ** other purposes.
  2471. */
  2472. #define MAGIC_COL_COUNT 13 // Translucent color count.
  2473. #define SHADOW_COL_COUNT 4 // Terrain shroud translucent color count.
  2474. #define USHADOW_COL_COUNT 1 // Unit shadow special ghost colors.
  2475. /**********************************************************************
  2476. ** Color cycling range that is used for water effects.
  2477. */
  2478. #define CYCLE_COLOR_START (6*16)
  2479. #define CYCLE_COLOR_COUNT 7
  2480. /**********************************************************************
  2481. ** Magic color fading pulsing effect limits -- color gun value.
  2482. */
  2483. #define CC_PULSE_COLOR 255
  2484. #define CC_EMBER_COLOR (CYCLE_COLOR_START+CYCLE_COLOR_COUNT)
  2485. /**********************************************************************
  2486. ** These are the control flags for Fancy_Text_Print function.
  2487. */
  2488. typedef enum TextPrintType {
  2489. TPF_LASTPOINT =0x0000, // Use previous font point value.
  2490. TPF_6POINT =0x0001, // Use 6 point font.
  2491. TPF_8POINT =0x0002, // Use 8 point font.
  2492. TPF_3POINT =0x0003, // Use 3 point font.
  2493. TPF_LED =0x0004, // Use LED font.
  2494. TPF_VCR =0x0005, // Use VCR font.
  2495. TPF_6PT_GRAD =0x0006, // Use 6 point gradient font.
  2496. TPF_MAP =0x0007, // Font used for popup help text.
  2497. TPF_METAL12 =0x0008, // Use 12 point tab font
  2498. TPF_EFNT =0x0009, // Use scenario editor font.
  2499. TPF_TYPE =0x000A, // Use teletype font
  2500. TPF_SCORE =0x000B, // Use score screen font.
  2501. TPF_LASTSHADOW =0x0000, // Use previous font palette.
  2502. TPF_NOSHADOW =0x0010, // Don't have any shadow.
  2503. TPF_DROPSHADOW =0x0020, // Use a simple drop shadow.
  2504. TPF_FULLSHADOW =0x0040, // Use a full outline shadow.
  2505. TPF_LIGHTSHADOW =0x0080, // Use engraved drop 'shadow' color.
  2506. TPF_CENTER =0x0100, // Center about the X axis.
  2507. TPF_RIGHT =0x0200, // Right justify text.
  2508. TPF_MEDIUM_COLOR =0x1000, // Use medium color for all text gradient
  2509. TPF_BRIGHT_COLOR =0x2000, // Use bright color for all text gradient
  2510. TPF_USE_GRAD_PAL =0x4000 // Use a gradient palette based on fore color
  2511. } TextPrintType;
  2512. inline TextPrintType operator |(TextPrintType, TextPrintType);
  2513. inline TextPrintType operator &(TextPrintType, TextPrintType);
  2514. inline TextPrintType operator ~(TextPrintType);
  2515. // Standard button text print flags.
  2516. #define TPF_BUTTON (TPF_CENTER|TPF_6PT_GRAD|TPF_NOSHADOW)
  2517. #define TPF_EBUTTON (TPF_CENTER|TPF_EFNT|TPF_NOSHADOW)
  2518. #define TPF_TEXT (TPF_6PT_GRAD|TPF_NOSHADOW)
  2519. /**********************************************************************
  2520. ** These control the maximum number of objects in the game. Make sure that these
  2521. ** maximums never exceed the maximum value for the "ID" element in the
  2522. ** object class.
  2523. */
  2524. #define BUILDING_MAX 500 // Lasts for hours.
  2525. #define HOUSE_MAX (HOUSE_COUNT+1) // Lasts entire scenario.
  2526. #define INFANTRY_MAX 500 // Lasts for minutes.
  2527. #define UNIT_MAX 500 // Lasts for minutes.
  2528. #define VESSEL_MAX 100 // Lasts for minutes.
  2529. #define TEAMTYPE_MAX 60 // Lasts forever.
  2530. // Save filename description.
  2531. #define DESCRIP_MAX 44 // 40 chars + CR + LF + CTRL-Z + NULL
  2532. #define CONQUER_PATH_MAX 12 // Number of cells to look ahead for movement.
  2533. #define EACH_INFANTRY_MAX (INFANTRY_MAX/5) // Default maximum any one player can have.
  2534. #define EACH_UNIT_MAX (UNIT_MAX/5) // Default maximum any one player can have.
  2535. #define EACH_BUILDING_MAX (BUILDING_MAX/5) // Default maximum any one player can build.
  2536. #define EACH_VESSEL_MAX (VESSEL_MAX/5) // Default maximum any one player can build.
  2537. /**********************************************************************
  2538. ** Terrain can be of these different classes. At any point in the game
  2539. ** a particular piece of ground must fall under one of these classifications.
  2540. ** This is true, even if it is undergoing a temporary transition.
  2541. */
  2542. typedef enum LandType {
  2543. LAND_CLEAR, // "Clear" terrain.
  2544. LAND_ROAD, // Road terrain.
  2545. LAND_WATER, // Water.
  2546. LAND_ROCK, // Impassable rock.
  2547. LAND_WALL, // Wall (blocks movement).
  2548. LAND_TIBERIUM, // Tiberium field.
  2549. LAND_BEACH, // Beach terrain.
  2550. LAND_ROUGH, // Rocky terrain.
  2551. LAND_RIVER, // Rocky riverbed.
  2552. LAND_COUNT,
  2553. LAND_NONE=-1,
  2554. LAND_FIRST=0
  2555. } LandType;
  2556. /**********************************************************************
  2557. ** The theaters of operation are as follows.
  2558. */
  2559. typedef enum TheaterType {
  2560. THEATER_NONE=-1,
  2561. THEATER_TEMPERATE,
  2562. THEATER_SNOW,
  2563. THEATER_INTERIOR,
  2564. THEATER_COUNT,
  2565. THEATER_FIRST=0
  2566. } TheaterType;
  2567. inline TheaterType operator++(TheaterType &, int);
  2568. #define THEATERF_TEMPERATE (1<<THEATER_TEMPERATE)
  2569. #define THEATERF_SNOW (1<<THEATER_SNOW)
  2570. #define THEATERF_INTERIOR (1<<THEATER_INTERIOR)
  2571. typedef struct {
  2572. char Name[16];
  2573. char Root[10];
  2574. char Suffix[4];
  2575. } TheaterDataType;
  2576. /**********************************************************************
  2577. ** Each building has a predetermined size. These are the size numbers.
  2578. ** The trailing number is this define is the width and height (respectively)
  2579. ** of the building in cells.
  2580. */
  2581. typedef enum BSizeType {
  2582. BSIZE_NONE=-1,
  2583. BSIZE_11=0,
  2584. BSIZE_21,
  2585. BSIZE_12,
  2586. BSIZE_22,
  2587. BSIZE_23,
  2588. BSIZE_32,
  2589. BSIZE_33,
  2590. BSIZE_42,
  2591. BSIZE_55,
  2592. BSIZE_COUNT
  2593. } BSizeType;
  2594. inline BSizeType operator++(BSizeType &, int);
  2595. /**********************************************************************
  2596. ** When objects are manipulated on the map that are marked as being
  2597. ** removed (up), placed down (down), or just to be redrawn (change);
  2598. ** or when an object's rendering (not logical) size changes, due to
  2599. ** its being selected or having an animation attached (overlap up/down).
  2600. */
  2601. typedef enum MarkType {
  2602. MARK_UP, // Removed from the map.
  2603. MARK_DOWN, // Placed on the map.
  2604. MARK_CHANGE, // Altered in place on the map.
  2605. MARK_CHANGE_REDRAW, // Redraw because of animation change.
  2606. MARK_OVERLAP_DOWN, // Mark overlap cells on the map
  2607. MARK_OVERLAP_UP // Clear overlap cells on the map
  2608. } MarkType;
  2609. /****************************************************************************
  2610. ** Window number definition list. Each window should be referred to by
  2611. ** the value given in this list.
  2612. */
  2613. // Allow window number enums to be passed to library functions.
  2614. typedef enum WindowNumberType {
  2615. WINDOW_MAIN, // Full screen window.
  2616. WINDOW_ERROR, // Library error window.
  2617. WINDOW_TACTICAL, // Tactical map window.
  2618. WINDOW_MENU, // Main selection menu.
  2619. WINDOW_SIDEBAR, // Sidebar (buildable list) window.
  2620. WINDOW_EDITOR, // Scenario editor window.
  2621. WINDOW_PARTIAL, // Partial object draw sub-window.
  2622. } WindowNumberType;
  2623. /****************************************************************************
  2624. ** For every cell there are 8 adjacent cells. Use these direction numbers
  2625. ** when referring to adjacent cells. This comes into play when moving
  2626. ** between cells and in the Desired_Facing() algorithm.
  2627. */
  2628. typedef enum FacingType {
  2629. FACING_NONE=-1,
  2630. FACING_N, // North
  2631. FACING_NE, // North-East
  2632. FACING_E, // East
  2633. FACING_SE, // South-East
  2634. FACING_S, // South
  2635. FACING_SW, // South-West
  2636. FACING_W, // West
  2637. FACING_NW, // North-West
  2638. FACING_COUNT, // Total of 8 directions (0..7).
  2639. FACING_FIRST=0
  2640. } FacingType;
  2641. inline FacingType operator++(FacingType &, int);
  2642. inline FacingType operator + (FacingType f1, FacingType f2)
  2643. {
  2644. return (FacingType)(((int)f1 + (int)f2) & 0x07);
  2645. }
  2646. inline FacingType operator + (FacingType f1, int f2)
  2647. {
  2648. return (FacingType)(((int)f1 + (int)f2) & 0x07);
  2649. }
  2650. inline FacingType operator - (FacingType f1, FacingType f2)
  2651. {
  2652. return (FacingType)(((int)f1 - (int)f2) & 0x07);
  2653. }
  2654. inline FacingType operator - (FacingType f1, int f2)
  2655. {
  2656. return (FacingType)(((int)f1 - (int)f2) & 0x07);
  2657. }
  2658. inline FacingType operator += (FacingType & f1, FacingType f2)
  2659. {
  2660. f1 = (FacingType)(((int)f1 + (int)f2) & 0x07);
  2661. return(f1);
  2662. }
  2663. inline FacingType operator += (FacingType & f1, int f2)
  2664. {
  2665. f1 = (FacingType)(((int)f1 + (int)f2) & 0x07);
  2666. return(f1);
  2667. }
  2668. inline int operator * (FacingType f1, FacingType f2)
  2669. {
  2670. return((int)f1 * (int)f2);
  2671. }
  2672. #ifdef NEVER
  2673. typedef enum DirType {
  2674. DIR_MIN=0,
  2675. DIR_N=0,
  2676. DIR_NE=1<<5,
  2677. DIR_E=2<<5,
  2678. DIR_SE=3<<5,
  2679. DIR_S=4<<5,
  2680. DIR_SW=5<<5,
  2681. DIR_SW_X1=(5<<5)-8, // Direction of harvester while unloading.
  2682. DIR_SW_X2=(5<<5)-16, // Direction of harvester while unloading.
  2683. DIR_W=6<<5,
  2684. DIR_NW=7<<5,
  2685. DIR_MAX=255
  2686. } DirType;
  2687. inline DirType operator + (DirType f1, DirType f2)
  2688. {
  2689. return (DirType)(((int)f1 + (int)f2) & 0x00FF);
  2690. }
  2691. inline DirType operator + (DirType f1, int f2)
  2692. {
  2693. return (DirType)(((int)f1 + (int)f2) & 0x00FF);
  2694. }
  2695. #endif
  2696. #define DIR_SW_X1 DirType((5<<5)-8)
  2697. #define DIR_SW_X2 DirType((5<<5)-16)
  2698. /****************************************************************************
  2699. ** Timer constants. These are used when setting the countdown timer.
  2700. ** Note that this is based upon a timer that ticks every 60th of a second.
  2701. */
  2702. #define TIMER_SECOND 60
  2703. #define TIMER_MINUTE (TIMER_SECOND*60)
  2704. #define FADE_PALETTE_FAST (TIMER_SECOND/8)
  2705. #define FADE_PALETTE_MEDIUM (TIMER_SECOND/4)
  2706. #define FADE_PALETTE_SLOW (TIMER_SECOND/2)
  2707. #define TICKS_PER_SECOND 15
  2708. #define TICKS_PER_MINUTE (TICKS_PER_SECOND * 60)
  2709. #define TICKS_PER_HOUR (TICKS_PER_MINUTE * 60)
  2710. #define GRAYFADETIME (1 * TICKS_PER_SECOND)
  2711. /****************************************************************************
  2712. ** Each vehicle is give a speed rating. This is a combination of not only
  2713. ** its physical speed, but the means by which it travels (wheels, tracks,
  2714. ** wings, etc). This is used to determine the movement table.
  2715. */
  2716. typedef enum SpeedType {
  2717. SPEED_NONE=-1,
  2718. SPEED_FOOT, // Bipedal.
  2719. SPEED_TRACK, // Tracked locomotion.
  2720. SPEED_WHEEL, // Balloon tires.
  2721. SPEED_WINGED, // Lifter's, 'thopters, and rockets.
  2722. SPEED_FLOAT, // Ships.
  2723. SPEED_COUNT,
  2724. SPEED_FIRST=SPEED_FOOT
  2725. } SpeedType;
  2726. /**********************************************************************
  2727. ** These are the sound effect digitized sample file names.
  2728. */
  2729. typedef enum VocType{
  2730. VOC_NONE=-1,
  2731. VOC_GIRL_OKAY, // "okay"
  2732. VOC_GIRL_YEAH, // "yeah?"
  2733. VOC_GUY_OKAY, // "okay"
  2734. VOC_GUY_YEAH, // "yeah?"
  2735. VOC_MINELAY1, // mine layer sound
  2736. VOC_ACKNOWL, // "acknowledged"
  2737. VOC_AFFIRM, // "affirmative"
  2738. VOC_AWAIT, // "awaiting orders"
  2739. VOC_ENG_AFFIRM, // Engineer: "affirmative"
  2740. VOC_ENG_ENG, // Engineer: "engineering"
  2741. VOC_NO_PROB, // "not a problem"
  2742. VOC_READY, // "ready and waiting"
  2743. VOC_REPORT, // "reporting"
  2744. VOC_RIGHT_AWAY, // "right away sir"
  2745. VOC_ROGER, // "roger"
  2746. VOC_UGOTIT, // "you got it"
  2747. VOC_VEHIC, // "vehicle reporting"
  2748. VOC_YESSIR, // "yes sir"
  2749. VOC_SCREAM1, // short infantry scream
  2750. VOC_SCREAM3, // short infantry scream
  2751. VOC_SCREAM4, // short infantry scream
  2752. VOC_SCREAM5, // short infantry scream
  2753. VOC_SCREAM6, // short infantry scream
  2754. VOC_SCREAM7, // short infantry scream
  2755. VOC_SCREAM10, // short infantry scream
  2756. VOC_SCREAM11, // short infantry scream
  2757. VOC_YELL1, // long infantry scream
  2758. VOC_CHRONO, // Chronosphere sound.
  2759. VOC_CANNON1, // Cannon sound (medium).
  2760. VOC_CANNON2, // Cannon sound (short).
  2761. VOC_IRON1,
  2762. VOC_ENG_MOVEOUT, // Engineer: "movin' out"
  2763. VOC_SONAR, // sonar pulse
  2764. VOC_SANDBAG, // sand bag crunch
  2765. VOC_MINEBLOW,
  2766. VOC_CHUTE1, // wind swoosh sound
  2767. VOC_DOG_BARK, // dog bark
  2768. VOC_DOG_WHINE, // dog whine
  2769. VOC_DOG_GROWL2, // strong dog growl
  2770. VOC_FIRE_LAUNCH, // fireball launch sound
  2771. VOC_FIRE_EXPLODE, // fireball explode sound
  2772. VOC_GRENADE_TOSS, // grenade toss
  2773. VOC_GUN_5, // 5 round gun burst (slow).
  2774. VOC_GUN_7, // 7 round gun burst (fast).
  2775. VOC_ENG_YES, // Engineer: "yes sir"
  2776. VOC_GUN_RIFLE, // Rifle shot.
  2777. VOC_HEAL, // Healing effect.
  2778. VOC_DOOR, // Hyrdrolic door.
  2779. VOC_INVULNERABLE, // Invulnerability effect.
  2780. VOC_KABOOM1, // Long explosion (muffled).
  2781. VOC_KABOOM12, // Very long explosion (muffled).
  2782. VOC_KABOOM15, // Very long explosion (muffled).
  2783. VOC_SPLASH, // Water splash
  2784. VOC_KABOOM22, // Long explosion (sharp).
  2785. VOC_AACANON3, // AA-Cannon
  2786. VOC_TANYA_DIE, // Tanya: scream
  2787. VOC_GUN_5F, // 5 round gun burst (fast).
  2788. VOC_MISSILE_1, // Missile with high tech effect.
  2789. VOC_MISSILE_2, // Long missile launch.
  2790. VOC_MISSILE_3, // Short missile launch.
  2791. VOC_x6,
  2792. VOC_GUN_5R, // 5 round gun burst (rattles).
  2793. VOC_BEEP, // Generic beep sound.
  2794. VOC_CLICK, // Generic click sound.
  2795. VOC_SILENCER, // Silencer.
  2796. VOC_CANNON6, // Long muffled cannon shot.
  2797. VOC_CANNON7, // Sharp mechanical cannon fire.
  2798. VOC_TORPEDO, // Torpedo launch.
  2799. VOC_CANNON8, // Sharp cannon fire.
  2800. VOC_TESLA_POWER_UP, // Hum charge up.
  2801. VOC_TESLA_ZAP, // Tesla zap effect.
  2802. VOC_SQUISH, // Squish effect.
  2803. VOC_SCOLD, // Scold bleep.
  2804. VOC_RADAR_ON, // Powering up electronics.
  2805. VOC_RADAR_OFF, // B movie power down effect.
  2806. VOC_PLACE_BUILDING_DOWN, // Building slam down sound.
  2807. VOC_KABOOM30, // Short explosion (HE).
  2808. VOC_KABOOM25, // Short growling explosion.
  2809. VOC_x7,
  2810. VOC_DOG_HURT, // Dog whine.
  2811. VOC_DOG_YES, // Dog 'yes sir'.
  2812. VOC_CRUMBLE, // Building crumble.
  2813. VOC_MONEY_UP, // Rising money tick.
  2814. VOC_MONEY_DOWN, // Falling money tick.
  2815. VOC_CONSTRUCTION, // Building construction sound.
  2816. VOC_GAME_CLOSED, // Long bleep.
  2817. VOC_INCOMING_MESSAGE, // Soft happy warble.
  2818. VOC_SYS_ERROR, // Sharp soft warble.
  2819. VOC_OPTIONS_CHANGED, // Mid range soft warble.
  2820. VOC_GAME_FORMING, // Long warble.
  2821. VOC_PLAYER_LEFT, // Chirp sequence.
  2822. VOC_PLAYER_JOINED, // Reverse chirp sequence.
  2823. VOC_DEPTH_CHARGE, // Distant explosion sound.
  2824. VOC_CASHTURN, // Airbrake.
  2825. VOC_TANYA_CHEW, // Tanya: "Chew on this"
  2826. VOC_TANYA_ROCK, // Tanya: "Let's rock"
  2827. VOC_TANYA_LAUGH, // Tanya: "ha ha ha"
  2828. VOC_TANYA_SHAKE, // Tanya: "Shake it baby"
  2829. VOC_TANYA_CHING, // Tanya: "Cha Ching"
  2830. VOC_TANYA_GOT, // Tanya: "That's all you got"
  2831. VOC_TANYA_KISS, // Tanya: "Kiss it bye bye"
  2832. VOC_TANYA_THERE, // Tanya: "I'm there"
  2833. VOC_TANYA_GIVE, // Tanya: "Give it to me"
  2834. VOC_TANYA_YEA, // Tanya: "Yea?"
  2835. VOC_TANYA_YES, // Tanya: "Yes sir?"
  2836. VOC_TANYA_WHATS, // Tanya: "What's up."
  2837. VOC_WALLKILL2, // Crushing wall sound.
  2838. VOC_x8,
  2839. VOC_TRIPLE_SHOT, // Three quick shots in succession.
  2840. VOC_SUBSHOW, // Submarine surfacing.
  2841. VOC_E_AH, // Einstein "ah"
  2842. VOC_E_OK, // Einstein "ok"
  2843. VOC_E_YES, // Einstein "yes"
  2844. VOC_TRIP_MINE, // mine explosion sound
  2845. VOC_SPY_COMMANDER, // Spy: "commander?"
  2846. VOC_SPY_YESSIR, // Spy: "yes sir"
  2847. VOC_SPY_INDEED, // Spy: "indeed"
  2848. VOC_SPY_ONWAY, // Spy: "on my way"
  2849. VOC_SPY_KING, // Spy: "for king and country"
  2850. VOC_MED_REPORTING, // Medic: "reporting"
  2851. VOC_MED_YESSIR, // Medic: "yes sir"
  2852. VOC_MED_AFFIRM, // Medic: "affirmative"
  2853. VOC_MED_MOVEOUT, // Medic: "movin' out"
  2854. VOC_BEEP_SELECT, // map selection beep
  2855. VOC_THIEF_YEA, // Thief: "yea?"
  2856. #ifdef FIXIT_ANTS
  2857. VOC_ANTDIE,
  2858. VOC_ANTBITE,
  2859. #else
  2860. VOC_x9,
  2861. VOC_x10,
  2862. #endif
  2863. VOC_THIEF_MOVEOUT, // Thief: "movin' out"
  2864. VOC_THIEF_OKAY, // Thief: "ok"
  2865. VOC_x11,
  2866. VOC_THIEF_WHAT, // Thief: "what"
  2867. VOC_THIEF_AFFIRM, // Thief: "affirmative"
  2868. VOC_STAVCMDR,
  2869. VOC_STAVCRSE,
  2870. VOC_STAVYES,
  2871. VOC_STAVMOV,
  2872. VOC_BUZZY1,
  2873. VOC_RAMBO1,
  2874. VOC_RAMBO2,
  2875. VOC_RAMBO3,
  2876. #ifdef FIXIT_CSII // checked - ajw 9/28/98
  2877. VOC_MECHYES1,
  2878. VOC_MECHHOWDY1,
  2879. VOC_MECHRISE1,
  2880. VOC_MECHHUH1,
  2881. VOC_MECHHEAR1,
  2882. VOC_MECHLAFF1,
  2883. VOC_MECHBOSS1,
  2884. VOC_MECHYEEHAW1,
  2885. VOC_MECHHOTDIG1,
  2886. VOC_MECHWRENCH1,
  2887. VOC_STBURN1,
  2888. VOC_STCHRGE1,
  2889. VOC_STCRISP1,
  2890. VOC_STDANCE1,
  2891. VOC_STJUICE1,
  2892. VOC_STJUMP1,
  2893. VOC_STLIGHT1,
  2894. VOC_STPOWER1,
  2895. VOC_STSHOCK1,
  2896. VOC_STYES1,
  2897. VOC_CHRONOTANK1,
  2898. VOC_MECH_FIXIT1,
  2899. VOC_MAD_CHARGE,
  2900. VOC_MAD_EXPLODE,
  2901. VOC_SHOCK_TROOP1,
  2902. #endif
  2903. VOC_COUNT,
  2904. VOC_FIRST=0
  2905. } VocType;
  2906. /*
  2907. ** EVA voices are specified by these identifiers.
  2908. */
  2909. typedef enum VoxType{
  2910. VOX_NONE=-1,
  2911. VOX_ACCOMPLISHED, // mission accomplished
  2912. VOX_FAIL, // your mission has failed
  2913. VOX_NO_FACTORY, // unable to comply, building in progress
  2914. VOX_CONSTRUCTION, // construction complete
  2915. VOX_UNIT_READY, // unit ready
  2916. VOX_NEW_CONSTRUCT, // new construction options
  2917. VOX_DEPLOY, // cannot deploy here
  2918. VOX_STRUCTURE_DESTROYED, // structure destroyed
  2919. VOX_INSUFFICIENT_POWER, // insufficient power
  2920. VOX_NO_CASH, // insufficient funds
  2921. VOX_CONTROL_EXIT, // battle control terminated
  2922. VOX_REINFORCEMENTS, // reinforcements have arrived
  2923. VOX_CANCELED, // canceled
  2924. VOX_BUILDING, // building
  2925. VOX_LOW_POWER, // low power
  2926. VOX_NEED_MO_MONEY, // need more funds
  2927. VOX_BASE_UNDER_ATTACK, // our base is under attack
  2928. VOX_UNABLE_TO_BUILD, // unable to build more
  2929. VOX_PRIMARY_SELECTED, // primary building selected
  2930. #ifdef ENGLISH
  2931. VOX_MADTANK_DEPLOYED, // M.A.D. Tank Deployed
  2932. #else
  2933. VOX_none3,
  2934. #endif
  2935. VOX_none4,
  2936. VOX_UNIT_LOST, // unit lost
  2937. VOX_SELECT_TARGET, // select target
  2938. VOX_PREPARE, // enemy approaching
  2939. VOX_NEED_MO_CAPACITY, // silos needed
  2940. VOX_SUSPENDED, // on hold
  2941. VOX_REPAIRING, // repairing
  2942. VOX_none5,
  2943. VOX_none6,
  2944. VOX_AIRCRAFT_LOST,
  2945. VOX_none7,
  2946. VOX_ALLIED_FORCES_APPROACHING,
  2947. VOX_ALLIED_APPROACHING,
  2948. VOX_none8,
  2949. VOX_none9,
  2950. VOX_BUILDING_INFILTRATED,
  2951. VOX_CHRONO_CHARGING,
  2952. VOX_CHRONO_READY,
  2953. VOX_CHRONO_TEST,
  2954. VOX_HQ_UNDER_ATTACK,
  2955. VOX_CENTER_DEACTIVATED,
  2956. VOX_CONVOY_APPROACHING,
  2957. VOX_CONVOY_UNIT_LOST,
  2958. VOX_EXPLOSIVE_PLACED,
  2959. VOX_MONEY_STOLEN,
  2960. VOX_SHIP_LOST,
  2961. VOX_SATALITE_LAUNCHED,
  2962. VOX_SONAR_AVAILABLE,
  2963. VOX_none10,
  2964. VOX_SOVIET_FORCES_APPROACHING,
  2965. VOX_SOVIET_REINFORCEMENTS,
  2966. VOX_TRAINING,
  2967. VOX_ABOMB_READY,
  2968. VOX_ABOMB_LAUNCH,
  2969. VOX_ALLIES_N,
  2970. VOX_ALLIES_S,
  2971. VOX_ALLIES_E,
  2972. VOX_ALLIES_W,
  2973. VOX_OBJECTIVE1,
  2974. VOX_OBJECTIVE2,
  2975. VOX_OBJECTIVE3,
  2976. VOX_IRON_CHARGING,
  2977. VOX_IRON_READY,
  2978. VOX_RESCUED,
  2979. VOX_OBJECTIVE_NOT,
  2980. VOX_SIGNAL_N,
  2981. VOX_SIGNAL_S,
  2982. VOX_SIGNAL_E,
  2983. VOX_SIGNAL_W,
  2984. VOX_SPY_PLANE,
  2985. VOX_FREED,
  2986. VOX_UPGRADE_ARMOR,
  2987. VOX_UPGRADE_FIREPOWER,
  2988. VOX_UPGRADE_SPEED,
  2989. VOX_MISSION_TIMER,
  2990. VOX_UNIT_FULL,
  2991. VOX_UNIT_REPAIRED,
  2992. VOX_TIME_40,
  2993. VOX_TIME_30,
  2994. VOX_TIME_20,
  2995. VOX_TIME_10,
  2996. VOX_TIME_5,
  2997. VOX_TIME_4,
  2998. VOX_TIME_3,
  2999. VOX_TIME_2,
  3000. VOX_TIME_1,
  3001. VOX_TIME_STOP,
  3002. VOX_UNIT_SOLD,
  3003. VOX_TIMER_STARTED,
  3004. VOX_TARGET_RESCUED,
  3005. VOX_TARGET_FREED,
  3006. VOX_TANYA_RESCUED,
  3007. VOX_STRUCTURE_SOLD,
  3008. VOX_SOVIET_FORCES_FALLEN,
  3009. VOX_SOVIET_SELECTED,
  3010. VOX_SOVIET_EMPIRE_FALLEN,
  3011. VOX_OPERATION_TERMINATED,
  3012. VOX_OBJECTIVE_REACHED,
  3013. VOX_OBJECTIVE_NOT_REACHED,
  3014. VOX_OBJECTIVE_MET,
  3015. VOX_MERCENARY_RESCUED,
  3016. VOX_MERCENARY_FREED,
  3017. VOX_KOSOYGEN_FREED,
  3018. VOX_FLARE_DETECTED,
  3019. VOX_COMMANDO_RESCUED,
  3020. VOX_COMMANDO_FREED,
  3021. VOX_BUILDING_IN_PROGRESS,
  3022. VOX_ATOM_PREPPING,
  3023. VOX_ALLIED_SELECTED,
  3024. VOX_ABOMB_PREPPING,
  3025. VOX_ATOM_LAUNCHED,
  3026. VOX_ALLIED_FORCES_FALLEN,
  3027. VOX_ABOMB_AVAILABLE,
  3028. VOX_ALLIED_REINFORCEMENTS,
  3029. VOX_SAVE1,
  3030. VOX_LOAD1,
  3031. VOX_COUNT,
  3032. VOX_FIRST=0
  3033. } VoxType;
  3034. /****************************************************************************
  3035. ** Game reinforcements are each controlled by the following structure. The
  3036. ** data originates in the scenario INI file but is then carried throughout
  3037. ** any saved games.
  3038. */
  3039. typedef enum SourceType {
  3040. SOURCE_NONE=-1, // No defined source (error condition).
  3041. SOURCE_NORTH, // From north edge.
  3042. SOURCE_EAST, // From east edge.
  3043. SOURCE_SOUTH, // From south edge.
  3044. SOURCE_WEST, // From west edge.
  3045. SOURCE_AIR, // Dropped by air (someplace).
  3046. SOURCE_COUNT,
  3047. SOURCE_FIRST=0
  3048. } SourceType;
  3049. /****************************************************************************
  3050. ** This entry defines a complete color scheme, with the player's remap table,
  3051. ** the font remap table, and a color scheme for dialog boxes and buttons.
  3052. */
  3053. typedef struct RemapControlType
  3054. {
  3055. unsigned char BrightColor; // Highlight (bright) color index.
  3056. unsigned char Color; // Normal color index.
  3057. unsigned char RemapTable[256]; // Actual remap table.
  3058. unsigned char FontRemap[16]; // Remap table for gradient font.
  3059. unsigned char Shadow; // Color of shadowed edge of a raised button.
  3060. unsigned char Background; // Background fill color for buttons.
  3061. unsigned char Corners; // Transition color between shadow and highlight.
  3062. unsigned char Highlight; // Bright edge of raised button.
  3063. unsigned char Box; // Color for dialog box border.
  3064. unsigned char Bright; // Color used for highlighted text.
  3065. unsigned char Underline; // Color for underlining dialog box titles.
  3066. unsigned char Bar; // Selected entry list box background color.
  3067. } RemapControlType;
  3068. /****************************************************************************
  3069. ** Each type of terrain has certain characteristics. These are indicated
  3070. ** by the structure below. For every element of terrain there is a
  3071. ** corresponding GroundType structure.
  3072. */
  3073. typedef struct {
  3074. fixed Cost[SPEED_COUNT]; // Terrain effect cost (normal).
  3075. bool Build; // Can build on this terrain?
  3076. } GroundType;
  3077. /**************************************************************************
  3078. ** Find_Path returns with a pointer to this structure.
  3079. */
  3080. typedef struct {
  3081. CELL Start; // Starting cell number.
  3082. int Cost; // Accumulated terrain cost.
  3083. int Length; // Command string length.
  3084. FacingType *Command; // Pointer to command string.
  3085. unsigned long *Overlap; // Pointer to overlap list
  3086. CELL LastOverlap; // stores position of last overlap
  3087. CELL LastFixup; // stores position of last overlap
  3088. } PathType;
  3089. /**********************************************************************
  3090. ** These are special indices into the Waypoint array; slots 0-25 are
  3091. ** reserved for letter-designated Waypoints, the others are special.
  3092. */
  3093. typedef enum WaypointEnum
  3094. {
  3095. WAYPT_HOME = 98, // Home-cell for this scenario
  3096. WAYPT_REINF, // cell where reinforcements arrive
  3097. WAYPT_SPECIAL, // Used by special airdrop reinforcements.
  3098. WAYPT_COUNT
  3099. } WaypointType;
  3100. /****************************************************************************
  3101. ** This is the max number of events supported on one frame.
  3102. */
  3103. #define MAX_EVENTS 64
  3104. typedef enum {
  3105. KF_NUMBER = 0x08,
  3106. KF_LCW = 0x10,
  3107. KF_DELTA = 0x20,
  3108. KF_KEYDELTA = 0x40,
  3109. KF_KEYFRAME = 0x80,
  3110. KF_MASK = 0xF0
  3111. } KeyFrameType;
  3112. /*
  3113. ** New Config structure for .CFG files
  3114. */
  3115. typedef struct {
  3116. unsigned DigitCard; // SoundCardType.
  3117. unsigned Port; // SoundCardType.
  3118. unsigned IRQ; // SoundCardType.
  3119. unsigned DMA; // SoundCardType.
  3120. unsigned BitsPerSample; // bits per sound sample
  3121. unsigned Channels; // stereo/mono sound card
  3122. unsigned Speed; // stereo/mono sound card
  3123. bool Reverse; // Reverse left/right speakers
  3124. char Language[4];
  3125. } NewConfigType;
  3126. /****************************************************************************
  3127. ** These are the types of dialogs that can pop up outside of the main loop,
  3128. ** an call the game in the background.
  3129. */
  3130. typedef enum {
  3131. SDLG_NONE,
  3132. SDLG_OPTIONS,
  3133. SDLG_SURRENDER,
  3134. SDLG_SPECIAL
  3135. } SpecialDialogType;
  3136. typedef enum {
  3137. CC_MOUSE_COLOR=16
  3138. } CCPaletteType;
  3139. /****************************************************************************
  3140. ** These specify the shape numbers in the OPTIONS.SHP file. These shapes
  3141. ** are used to dress up the dialog boxes. Many of these shapes come in pairs.
  3142. ** For dialog box shapes, they are left image / right image paired. For buttons,
  3143. ** they are up / down paired.
  3144. */
  3145. typedef enum OptionControlType {
  3146. OPTION_NONE=-1, // No fancy shmancy shape.
  3147. OPTION_DIALOG=0, // Small dialog boxes.
  3148. OPTION_CONTROLS=2, // Large dialog boxes, game controls.
  3149. OPTION_DELETE=4, // Delete,Load,Save game.
  3150. OPTION_SERIAL=6, // Serial dialog.
  3151. OPTION_PHONE=8, // Phone dialog.
  3152. OPTION_VISUAL=10, // Visual dialog.
  3153. OPTION_NETWORK=12, // Network dialog.
  3154. OPTION_JOIN_NETWORK=14, // Join network dialog.
  3155. OPTION_SOUND=16, // Sound controls.
  3156. OPTION_COUNT
  3157. } OptionControlType;
  3158. #define size_of(typ,id) sizeof(((typ*)0)->id)
  3159. #define MAX_LOG_LEVEL 10
  3160. // Maximum number of multi players possible.
  3161. #define MAX_PLAYERS 8 // max # of players we can have
  3162. #endif