IDATA.CPP 80 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154
  1. /*
  2. ** Command & Conquer(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: F:\projects\c&c\vcs\code\idata.cpv 2.12 02 Aug 1995 17:00:30 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 : IDATA.CPP *
  26. * *
  27. * Programmer : Joe L. Bostic *
  28. * *
  29. * Start Date : August 15, 1994 *
  30. * *
  31. * Last Update : June 29, 1995 [JLB] *
  32. * *
  33. *---------------------------------------------------------------------------------------------*
  34. * Functions: *
  35. * InfantryTypeClass::Create_And_Place -- Creates and places infantry object onto the map. *
  36. * InfantryTypeClass::Create_One_Of -- Creates an infantry object. *
  37. * InfantryTypeClass::Display -- Displays a generic infantry object. *
  38. * InfantryTypeClass::From_Name -- Converts an ASCII name into an infantry type number. *
  39. * InfantryTypeClass::Full_Name -- Fetches the full name text number. *
  40. * InfantryTypeClass::Get_Cameo_Data -- Fetches the small cameo shape for sidebar strip. *
  41. * InfantryTypeClass::InfantryTypeClass -- Constructor for infantry type class objects. *
  42. * InfantryTypeClass::Occupy_List -- Returns with default infantry occupation list. *
  43. * InfantryTypeClass::One_Time -- Performs any one time processing for infantry system. *
  44. * InfantryTypeClass::Prep_For_Add -- Prepares the scenario editor for adding of infantry object.*
  45. * InfantryTypeClass::Who_Can_Build_Me -- Determines what can build the infantry object. *
  46. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
  47. #include "function.h"
  48. #include "type.h"
  49. /*
  50. * There were too many parameters for the InfantryTypeClass constructor so I have
  51. * created a table of Do Controls for each unit type and I am passing a pointer
  52. * to the table to the constructor instead of passing each value as it was before.
  53. *
  54. * If this offends anyones C++ sensibilities then please feel free to implement a
  55. * more elegant oop solution.
  56. *
  57. * Steve T. 10/3/95 10:13AM
  58. *
  59. */
  60. // Minigunners
  61. int MiniGunnerDos [DO_COUNT][3]={
  62. 0, 1, 1, // DO_STAND_READY
  63. 8, 1, 1, // DO_STAND_GUARD
  64. 192, 1, 8, // DO_PRONE
  65. 16, 6, 6, // DO_WALK
  66. 64, 8, 8, // DO_FIRE_WEAPON
  67. 128, 2, 2, // DO_LIE_DOWN
  68. 144, 4, 4, // DO_CRAWL
  69. 176, 2, 2, // DO_GET_UP
  70. 192, 6, 8, // DO_FIRE_PRONE
  71. 256, 16,0, // DO_IDLE1
  72. 272, 16,0, // DO_IDLE2
  73. 288, 13,0, // DO_ON_GUARD
  74. 292, 10,0, // DO_FIGHT_READY
  75. 301, 2, 0, // DO_PUNCH
  76. 303, 6, 0, // DO_KICK
  77. 309, 2, 0, // DO_PUNCH_HIT1
  78. 311, 4, 0, // DO_PUNCH_HIT2
  79. 315, 5, 0, // DO_PUNCH_DEATH
  80. 319, 2, 0, // DO_KICK_HIT1
  81. 321, 4, 0, // DO_KICK_HIT2
  82. 325, 5, 0, // DO_KICK_DEATH
  83. 330, 5, 0, // DO_READY_WEAPON
  84. 382, 8, 0, // DO_GUN_DEATH
  85. 398, 8, 0, // DO_EXPLOSION_DEATH
  86. 398, 8, 0, // DO_EXPLOSION2_DEATH
  87. 406, 12,0, // DO_GRENADE_DEATH
  88. 418, 18,0, // DO_FIRE_DEATH
  89. 436, 3, 3, // DO_GESTURE1
  90. 460, 3, 3, // DO_SALUTE1
  91. 484, 3, 3, // DO_GESTURE2
  92. 508, 3, 3, // DO_SALUTE2
  93. 0, 1, 1, // DO_PULL_GUN // N/A
  94. 0, 1, 1, // DO_PLEAD // N/A
  95. 0, 1, 1 // DO_PLEAD_DEATH // N/A
  96. };
  97. static InfantryTypeClass const E1(
  98. INFANTRY_E1, // Infantry type number.
  99. TXT_E1, // Translate name number for infantry type.
  100. "E1", // INI name for infantry.
  101. 1, // Build level.
  102. STRUCTF_NONE, // Building prerequisite.
  103. false, // Is this a female type?
  104. true, // Is a leader type?
  105. true, // Has crawling animation frames?
  106. false, // Is this a civlian?
  107. false, // Always use the given name for the infantry?
  108. false, // Is this a "fraidycat" run-away type infantry?
  109. false, // Can this infantry type capture a building?
  110. false, // Theater specific graphic image?
  111. -1, // Number of shots it has (default).
  112. &MiniGunnerDos[0][0], // Ptr to minigunner 'DO' table above
  113. 2, // Frame of projectile launch.
  114. 2, // Frame of projectile launch while prone.
  115. 50, // Strength of infantry (in damage points).
  116. 1, // Sight range.
  117. 100, // Cost of infantry (in credits).
  118. 1, // Scenario when they first appear.
  119. 80,10, // Risk/Reward of this infantry unit.
  120. HOUSEF_MULTI1|
  121. HOUSEF_MULTI2|
  122. HOUSEF_MULTI3|
  123. HOUSEF_MULTI4|
  124. HOUSEF_MULTI5|
  125. HOUSEF_MULTI6|
  126. HOUSEF_JP|
  127. HOUSEF_GOOD|
  128. HOUSEF_BAD, // Who can own this infantry unit.
  129. WEAPON_M16,WEAPON_NONE,
  130. MPH_SLOW // Maximum speed of infantry.
  131. );
  132. // Grenadiers
  133. int GrenadierDos [DO_COUNT][3]={
  134. 0, 1, 1, // DO_STAND_READY
  135. 8, 1, 1, // DO_STAND_GUARD
  136. 288, 1, 12, // DO_PRONE
  137. 16, 6, 6, // DO_WALK
  138. 64, 20,20, // DO_FIRE_WEAPON
  139. 224, 2, 2, // DO_LIE_DOWN
  140. 240, 4, 4, // DO_CRAWL
  141. 272, 2, 2, // DO_GET_UP
  142. 288, 8, 12, // DO_FIRE_PRONE
  143. 384, 16,0, // DO_IDLE1
  144. 400, 16,0, // DO_IDLE2
  145. 416, 13,0, // DO_ON_GUARD
  146. 420, 10,0, // DO_FIGHT_READY
  147. 429, 2, 0, // DO_PUNCH
  148. 431, 6, 0, // DO_KICK
  149. 437, 2, 0, // DO_PUNCH_HIT1
  150. 439, 4, 0, // DO_PUNCH_HIT2
  151. 443, 4, 0, // DO_PUNCH_DEATH
  152. 447, 2, 0, // DO_KICK_HIT1
  153. 449, 4, 0, // DO_KICK_HIT2
  154. 453, 5, 0, // DO_KICK_DEATH
  155. 458, 5, 0, // DO_READY_WEAPON
  156. 510, 8, 0, // DO_GUN_DEATH
  157. 526, 8, 0, // DO_EXPLOSION_DEATH
  158. 526, 8, 0, // DO_EXPLOSION2_DEATH
  159. 534, 12,0, // DO_GRENADE_DEATH
  160. 546, 18,0, // DO_FIRE_DEATH
  161. 564, 3, 3, // DO_GESTURE1
  162. 588, 3, 3, // DO_SALUTE1
  163. 612, 3, 3, // DO_GESTURE2
  164. 636, 3, 3, // DO_SALUTE2
  165. 0, 1, 1, // DO_PULL_GUN // N/A
  166. 0, 1, 1, // DO_PLEAD // N/A
  167. 0, 1, 1 // DO_PLEAD_DEATH // N/A
  168. };
  169. static InfantryTypeClass const E2(
  170. INFANTRY_E2, // Infantry type number.
  171. TXT_E2, // Translate name number for infantry type.
  172. "E2", // INI name for infantry.
  173. 1, // Build level.
  174. STRUCTF_NONE, // Building prerequisite.
  175. false, // Is this a female type?
  176. true, // Is a leader type?
  177. true, // Has crawling animation frames?
  178. false, // Is this a civlian?
  179. false, // Always use the given name for the infantry?
  180. false, // Is this a "fraidycat" run-away type infantry?
  181. false, // Can this infantry type capture a building?
  182. false, // Theater specific graphic image?
  183. -1, // Number of shots it has (default).
  184. &GrenadierDos[0][0], // Ptr to grenadier DO table (above)
  185. 14, // Frame of projectile launch.
  186. 6, // Frame of projectile launch while prone.
  187. 50, // Strength of infantry (in damage points).
  188. 1, // Sight range.
  189. 160, // Cost of infantry (in credits).
  190. 3, // Scenario when they first appear.
  191. 80,10, // Risk/Reward of this infantry unit.
  192. HOUSEF_MULTI1|
  193. HOUSEF_MULTI2|
  194. HOUSEF_MULTI3|
  195. HOUSEF_MULTI4|
  196. HOUSEF_MULTI5|
  197. HOUSEF_MULTI6|
  198. HOUSEF_JP|
  199. HOUSEF_GOOD, // Who can own this infantry unit.
  200. WEAPON_GRENADE,WEAPON_NONE,
  201. MPH_SLOW_ISH // Maximum speed of infantry.
  202. );
  203. // Bazooka
  204. int BazookaDos [DO_COUNT][3]={
  205. 0, 1, 1, // DO_STAND_READY
  206. 8, 1, 1, // DO_STAND_GUARD
  207. 192, 1,10, // DO_PRONE
  208. 16, 6, 6, // DO_WALK
  209. 64, 8, 8, // DO_FIRE_WEAPON
  210. 128, 2, 2, // DO_LIE_DOWN
  211. 144, 4, 4, // DO_CRAWL
  212. 176, 2, 2, // DO_GET_UP
  213. 192, 10,10, // DO_FIRE_PRONE
  214. 272, 16,0, // DO_IDLE1
  215. 288, 16,0, // DO_IDLE2
  216. 304, 13,0, // DO_ON_GUARD
  217. 308, 10,0, // DO_FIGHT_READY
  218. 307, 2, 0, // DO_PUNCH
  219. 319, 6, 0, // DO_KICK
  220. 325, 2, 0, // DO_PUNCH_HIT1
  221. 327, 4, 0, // DO_PUNCH_HIT2
  222. 331, 4, 0, // DO_PUNCH_DEATH
  223. 335, 2, 0, // DO_KICK_HIT1
  224. 337, 4, 0, // DO_KICK_HIT2
  225. 341, 5, 0, // DO_KICK_DEATH
  226. 346, 5, 0, // DO_READY_WEAPON
  227. 398, 8, 0, // DO_GUN_DEATH
  228. 414, 8, 0, // DO_EXPLOSION_DEATH
  229. 414, 8, 0, // DO_EXPLOSION2_DEATH
  230. 422, 12,0, // DO_GRENADE_DEATH
  231. 434, 18,0, // DO_FIRE_DEATH
  232. 452, 3, 3, // DO_GESTURE1
  233. 476, 3, 3, // DO_SALUTE1
  234. 500, 3, 3, // DO_GESTURE2
  235. 524, 3, 3, // DO_SALUTE2
  236. 0, 1, 1, // DO_PULL_GUN // N/A
  237. 0, 1, 1, // DO_PLEAD // N/A
  238. 0, 1, 1 // DO_PLEAD_DEATH // N/A
  239. };
  240. static InfantryTypeClass const E3(
  241. INFANTRY_E3, // Infantry type number.
  242. TXT_E3, // Translate name number for infantry type.
  243. "E3", // INI name for infantry.
  244. 2, // Build level.
  245. STRUCTF_NONE, // Building prerequisite.
  246. false, // Is this a female type?
  247. true, // Is a leader type?
  248. true, // Has crawling animation frames?
  249. false, // Is this a civlian?
  250. false, // Always use the given name for the infantry?
  251. false, // Is this a "fraidycat" run-away type infantry?
  252. false, // Can this infantry type capture a building?
  253. false, // Theater specific graphic image?
  254. -1, // Number of shots it has (default).
  255. &BazookaDos[0][0], // Ptr to DO table (above)
  256. 3, // Frame of projectile launch.
  257. 3, // Frame of projectile launch while prone.
  258. 25, // Strength of infantry (in damage points).
  259. 2, // Sight range.
  260. 300, // Cost of infantry (in credits).
  261. 3, // Scenario when they first appear.
  262. 80,10, // Risk/Reward of this infantry unit.
  263. HOUSEF_MULTI1|
  264. HOUSEF_MULTI2|
  265. HOUSEF_MULTI3|
  266. HOUSEF_MULTI4|
  267. HOUSEF_MULTI5|
  268. HOUSEF_MULTI6|
  269. HOUSEF_JP|
  270. HOUSEF_GOOD|
  271. HOUSEF_BAD, // Who can own this infantry unit.
  272. WEAPON_DRAGON,WEAPON_NONE,
  273. MPH_KINDA_SLOW // Maximum speed of infantry.
  274. );
  275. // Flamethrower
  276. int FlamethrowerDos [DO_COUNT][3]={
  277. 0, 1, 1, // DO_STAND_READY
  278. 8, 1, 1, // DO_STAND_GUARD
  279. 256, 1,16, // DO_PRONE
  280. 16, 6, 6, // DO_WALK
  281. 64, 16,16, // DO_FIRE_WEAPON
  282. 192, 2, 2, // DO_LIE_DOWN
  283. 208, 4, 4, // DO_CRAWL
  284. 240, 2, 2, // DO_GET_UP
  285. 256, 16,16, // DO_FIRE_PRONE
  286. 384, 16,0, // DO_IDLE1
  287. 400, 16,0, // DO_IDLE2
  288. 416, 13,0, // DO_ON_GUARD
  289. 420, 10,0, // DO_FIGHT_READY
  290. 429, 2, 0, // DO_PUNCH
  291. 431, 6, 0, // DO_KICK
  292. 437, 2, 0, // DO_PUNCH_HIT1
  293. 439, 4, 0, // DO_PUNCH_HIT2
  294. 443, 4, 0, // DO_PUNCH_DEATH
  295. 447, 2, 0, // DO_KICK_HIT1
  296. 449, 4, 0, // DO_KICK_HIT2
  297. 453, 5, 0, // DO_KICK_DEATH
  298. 458, 5, 0, // DO_READY_WEAPON
  299. 510, 8, 0, // DO_GUN_DEATH
  300. 526, 8, 0, // DO_EXPLOSION_DEATH
  301. 526, 8, 0, // DO_EXPLOSION2_DEATH
  302. 534, 12,0, // DO_GRENADE_DEATH
  303. 546, 18,0, // DO_FIRE_DEATH
  304. 564, 3, 3, // DO_GESTURE1
  305. 588, 3, 3, // DO_SALUTE1
  306. 612, 3, 3, // DO_GESTURE2
  307. 636, 3, 3, // DO_SALUTE2
  308. 0, 1, 1, // DO_PULL_GUN // N/A
  309. 0, 1, 1, // DO_PLEAD // N/A
  310. 0, 1, 1 // DO_PLEAD_DEATH // N/A
  311. };
  312. static InfantryTypeClass const E4(
  313. INFANTRY_E4, // Infantry type number.
  314. TXT_E4, // Translate name number for infantry type.
  315. "E4", // INI name for infantry.
  316. 1, // Build level.
  317. STRUCTF_NONE, // Building prerequisite.
  318. false, // Is this a female type?
  319. true, // Is a leader type?
  320. true, // Has crawling animation frames?
  321. false, // Is this a civlian?
  322. false, // Always use the given name for the infantry?
  323. false, // Is this a "fraidycat" run-away type infantry?
  324. false, // Can this infantry type capture a building?
  325. false, // Theater specific graphic image?
  326. -1, // Number of shots it has (default).
  327. &FlamethrowerDos[0][0], // ptr to DO table (above)
  328. 2, // Frame of projectile launch.
  329. 0, // Frame of projectile launch while prone.
  330. 70, // Strength of infantry (in damage points).
  331. 1, // Sight range.
  332. 200, // Cost of infantry (in credits).
  333. 5, // Scenario when they first appear.
  334. 80,10, // Risk/Reward of this infantry unit.
  335. HOUSEF_MULTI1|
  336. HOUSEF_MULTI2|
  337. HOUSEF_MULTI3|
  338. HOUSEF_MULTI4|
  339. HOUSEF_MULTI5|
  340. HOUSEF_MULTI6|
  341. HOUSEF_JP|
  342. HOUSEF_BAD, // Who can own this infantry unit.
  343. WEAPON_FLAMETHROWER,WEAPON_NONE,
  344. MPH_SLOW_ISH
  345. );
  346. // Chemwarrior
  347. int ChemwarriorDos [DO_COUNT][3]={
  348. 0, 1, 1, // DO_STAND_READY
  349. 8, 1, 1, // DO_STAND_GUARD
  350. 256, 1,16, // DO_PRONE
  351. 16, 6, 6, // DO_WALK
  352. 64, 16,16, // DO_FIRE_WEAPON
  353. 192, 2, 2, // DO_LIE_DOWN
  354. 208, 4, 4, // DO_CRAWL
  355. 240, 2, 2, // DO_GET_UP
  356. 256, 16,16, // DO_FIRE_PRONE
  357. 384, 16,0, // DO_IDLE1
  358. 400, 16,0, // DO_IDLE2
  359. 416, 13,0, // DO_ON_GUARD
  360. 420, 10,0, // DO_FIGHT_READY
  361. 429, 2, 0, // DO_PUNCH
  362. 431, 6, 0, // DO_KICK
  363. 437, 2, 0, // DO_PUNCH_HIT1
  364. 439, 4, 0, // DO_PUNCH_HIT2
  365. 443, 4, 0, // DO_PUNCH_DEATH
  366. 447, 2, 0, // DO_KICK_HIT1
  367. 449, 4, 0, // DO_KICK_HIT2
  368. 453, 5, 0, // DO_KICK_DEATH
  369. 458, 5, 0, // DO_READY_WEAPON
  370. 510, 8, 0, // DO_GUN_DEATH
  371. 526, 8, 0, // DO_EXPLOSION_DEATH
  372. 526, 8, 0, // DO_EXPLOSION2_DEATH
  373. 534, 12,0, // DO_GRENADE_DEATH
  374. 546, 18,0, // DO_FIRE_DEATH
  375. 564, 3, 3, // DO_GESTURE1
  376. 588, 3, 3, // DO_SALUTE1
  377. 612, 3, 3, // DO_GESTURE2
  378. 636, 3, 3, // DO_SALUTE2
  379. 0, 1, 1, // DO_PULL_GUN // N/A
  380. 0, 1, 1, // DO_PLEAD // N/A
  381. 0, 1, 1 // DO_PLEAD_DEATH // N/A
  382. };
  383. static InfantryTypeClass const E5(
  384. INFANTRY_E5, // Infantry type number.
  385. TXT_E5, // Translate name number for infantry type.
  386. "E5", // INI name for infantry.
  387. 7, // Build level.
  388. STRUCTF_EYE, // Building prerequisite.
  389. false, // Is this a female type?
  390. true, // Is a leader type?
  391. true, // Has crawling animation frames?
  392. false, // Is this a civlian?
  393. false, // Always use the given name for the infantry?
  394. true, // Is this a "fraidycat" run-away type infantry?
  395. false, // Can this infantry type capture a building?
  396. false, // Theater specific graphic image?
  397. -1, // Number of shots it has (default).
  398. &ChemwarriorDos[0][0], // ptr to DO table
  399. 2, // Frame of projectile launch.
  400. 0, // Frame of projectile launch while prone.
  401. 70, // Strength of infantry (in damage points).
  402. 1, // Sight range.
  403. 300, // Cost of infantry (in credits).
  404. 99, // Scenario when they first appear.
  405. 80,10, // Risk/Reward of this infantry unit.
  406. HOUSEF_MULTI1|
  407. HOUSEF_MULTI2|
  408. HOUSEF_MULTI3|
  409. HOUSEF_MULTI4|
  410. HOUSEF_MULTI5|
  411. HOUSEF_MULTI6|
  412. HOUSEF_JP|
  413. // HOUSEF_GOOD|
  414. HOUSEF_BAD, // Who can own this infantry unit.
  415. WEAPON_CHEMSPRAY,WEAPON_NONE,
  416. MPH_SLOW
  417. );
  418. // Engineer
  419. int EngineerDos[DO_COUNT][3]={
  420. 0, 1, 1, // DO_STAND_READY
  421. 8, 1, 1, // DO_STAND_GUARD
  422. 82, 1, 4, // DO_PRONE
  423. 16, 6, 6, // DO_WALK
  424. 0, 0, 0, // DO_FIRE_WEAPON
  425. 67, 2, 2, // DO_LIE_DOWN
  426. 82, 4, 4, // DO_CRAWL
  427. 114, 2, 2, // DO_GET_UP
  428. 0, 0, 0, // DO_FIRE_PRONE
  429. 130, 16,0, // DO_IDLE1
  430. 0, 0, 0, // DO_IDLE2
  431. 0, 0, 0, // DO_ON_GUARD
  432. 0, 0, 0, // DO_FIGHT_READY
  433. 0, 0, 0, // DO_PUNCH
  434. 0, 0, 0, // DO_KICK
  435. 0, 0, 0, // DO_PUNCH_HIT1
  436. 0, 0, 0, // DO_PUNCH_HIT2
  437. 0, 0, 0, // DO_PUNCH_DEATH
  438. 0, 0, 0, // DO_KICK_HIT1
  439. 0, 0, 0, // DO_KICK_HIT2
  440. 0, 0, 0, // DO_KICK_DEATH
  441. 0, 0, 0, // DO_READY_WEAPON
  442. 146, 8, 0, // DO_GUN_DEATH
  443. 154, 8, 0, // DO_EXPLOSION_DEATH
  444. 162, 8, 0, // DO_EXPLOSION2_DEATH
  445. 162, 12,0, // DO_GRENADE_DEATH
  446. 182, 18,0, // DO_FIRE_DEATH
  447. 200, 3, 3, // DO_GESTURE1
  448. 224, 3, 3, // DO_SALUTE1
  449. 200, 3, 3, // DO_GESTURE2
  450. 224, 3, 3, // DO_SALUTE2
  451. 0, 1, 1, // DO_PULL_GUN // N/A
  452. 0, 1, 1, // DO_PLEAD // N/A
  453. 0, 1, 1 // DO_PLEAD_DEATH // N/A
  454. };
  455. static InfantryTypeClass const E7(
  456. INFANTRY_E7, // Infantry type number.
  457. TXT_E7, // Translate name number for infantry type.
  458. "E6", // INI name for infantry.
  459. 3, // Build level.
  460. STRUCTF_NONE, // Building prerequisite.
  461. false, // Is this a female type?
  462. false, // Is a leader type?
  463. false, // Has crawling animation frames?
  464. false, // Is this a civlian?
  465. false, // Always use the given name for the infantry?
  466. false, // Is this a "fraidycat" run-away type infantry?
  467. true, // Can this infantry type capture a building?
  468. false, // Theater specific graphic image?
  469. -1, // Number of shots it has (default).
  470. &EngineerDos[0][0], // ptr to DO table
  471. 3, // Frame of projectile launch.
  472. 3, // Frame of projectile launch while prone.
  473. 25, // Strength of infantry (in damage points).
  474. 2, // Sight range.
  475. 500, // Cost of infantry (in credits).
  476. 2, // Scenario when they first appear.
  477. 80,75, // Risk/Reward of this infantry unit.
  478. HOUSEF_MULTI1|
  479. HOUSEF_MULTI2|
  480. HOUSEF_MULTI3|
  481. HOUSEF_MULTI4|
  482. HOUSEF_MULTI5|
  483. HOUSEF_MULTI6|
  484. HOUSEF_JP|
  485. HOUSEF_BAD|
  486. HOUSEF_GOOD, // Who can own this infantry unit.
  487. WEAPON_NONE,WEAPON_NONE,
  488. MPH_SLOW // Maximum speed of infantry.
  489. );
  490. // Commandos
  491. int CommandoDos[DO_COUNT][3]={
  492. 0, 1, 1, // DO_STAND_READY
  493. 8, 1, 1, // DO_STAND_GUARD
  494. 160, 1, 4, // DO_PRONE
  495. 16, 6, 6, // DO_WALK
  496. 64, 4, 4, // DO_FIRE_WEAPON
  497. 96, 2, 2, // DO_LIE_DOWN
  498. 112, 4, 4, // DO_CRAWL
  499. 144, 2, 2, // DO_GET_UP
  500. 160, 4, 4, // DO_FIRE_PRONE
  501. 192, 16,0, // DO_IDLE1
  502. 208, 16,0, // DO_IDLE2
  503. 224, 13,0, // DO_ON_GUARD
  504. 228, 9, 0, // DO_FIGHT_READY
  505. 237, 2, 0, // DO_PUNCH
  506. 239, 6, 0, // DO_KICK
  507. 245, 2, 0, // DO_PUNCH_HIT1
  508. 247, 4, 0, // DO_PUNCH_HIT2
  509. 251, 4, 0, // DO_PUNCH_DEATH
  510. 255, 2, 0, // DO_KICK_HIT1
  511. 257, 4, 0, // DO_KICK_HIT2
  512. 261, 5, 0, // DO_KICK_DEATH
  513. 266, 5, 0, // DO_READY_WEAPON
  514. 318, 8, 0, // DO_GUN_DEATH
  515. 334, 8, 0, // DO_EXPLOSION_DEATH
  516. 334, 8, 0, // DO_EXPLOSION2_DEATH
  517. 342, 12,0, // DO_GRENADE_DEATH
  518. 354, 18,0, // DO_FIRE_DEATH
  519. 372, 3, 3, // DO_GESTURE1
  520. 396, 3, 3, // DO_SALUTE1
  521. 420, 3, 3, // DO_GESTURE2
  522. 444, 3, 3, // DO_SALUTE2
  523. 0, 1, 1, // DO_PULL_GUN // N/A
  524. 0, 1, 1, // DO_PLEAD // N/A
  525. 0, 1, 1 // DO_PLEAD_DEATH // N/A
  526. };
  527. static InfantryTypeClass const Commando(
  528. INFANTRY_RAMBO, // Infantry type number.
  529. TXT_RAMBO, // Translate name number for infantry type.
  530. "RMBO", // INI name for infantry.
  531. 7, // Build level.
  532. STRUCTF_EYE, // Building prerequisite.
  533. false, // Is this a female type?
  534. true, // Is a leader type?
  535. true, // Has crawling animation frames?
  536. false, // Is this a civlian?
  537. false, // Always use the given name for the infantry?
  538. false, // Is this a "fraidycat" run-away type infantry?
  539. true, // Can this infantry type capture a building?
  540. false, // Theater specific graphic image?
  541. -1, // Number of shots it has (default).
  542. &CommandoDos[0][0], // ptr to DO table
  543. 2, // Frame of projectile launch.
  544. 2, // Frame of projectile launch while prone.
  545. 80, // Strength of infantry (in damage points).
  546. 5, // Sight range.
  547. 1000, // Cost of infantry (in credits).
  548. 98, // Scenario when they first appear.
  549. 80,75, // Risk/Reward of this infantry unit.
  550. HOUSEF_MULTI1|
  551. HOUSEF_MULTI2|
  552. HOUSEF_MULTI3|
  553. HOUSEF_MULTI4|
  554. HOUSEF_MULTI5|
  555. HOUSEF_MULTI6|
  556. HOUSEF_JP|
  557. HOUSEF_GOOD|
  558. HOUSEF_BAD, // Who can own this infantry unit.
  559. WEAPON_RIFLE,WEAPON_NONE,
  560. MPH_SLOW_ISH // Maximum speed of infantry.
  561. );
  562. // Civilians
  563. int CivilianDos1[DO_COUNT][3]={
  564. 0, 1, 1, // DO_STAND_READY
  565. 0, 1, 1, // DO_STAND_GUARD
  566. 0, 1, 1, // DO_PRONE // N/A
  567. 56, 6, 6, // DO_WALK
  568. 205, 4, 4, // DO_FIRE_WEAPON
  569. 0, 1, 1, // DO_LIE_DOWN // N/A
  570. 8, 6, 6, // DO_CRAWL
  571. 0, 1, 1, // DO_GET_UP // N/A
  572. 205, 4, 4, // DO_FIRE_PRONE
  573. 189, 10,0, // DO_IDLE1
  574. 199, 6, 0, // DO_IDLE2
  575. 104, 3, 0, // DO_ON_GUARD
  576. 107, 7, 0, // DO_FIGHT_READY
  577. 114, 2, 0, // DO_PUNCH
  578. 116, 6, 0, // DO_KICK
  579. 122, 2, 0, // DO_PUNCH_HIT1
  580. 124, 4, 0, // DO_PUNCH_HIT2
  581. 128, 4, 0, // DO_PUNCH_DEATH
  582. 133, 2, 0, // DO_KICK_HIT1
  583. 135, 4, 0, // DO_KICK_HIT2
  584. 139, 5, 0, // DO_KICK_DEATH
  585. 144, 3, 0, // DO_READY_WEAPON
  586. 329, 8, 0, // DO_GUN_DEATH
  587. 337, 8, 0, // DO_EXPLOSION_DEATH
  588. 337, 8, 0, // DO_EXPLOSION2_DEATH
  589. 345, 12,0, // DO_GRENADE_DEATH
  590. 357, 18,0, // DO_FIRE_DEATH
  591. 0, 0, 0, // DO_GESTURE1 // N/A
  592. 0, 0, 0, // DO_SALUTE1 // N/A
  593. 0, 0, 0, // DO_GESTURE2 // N/A
  594. 0, 0, 0, // DO_SALUTE2 // N/A
  595. 199, 6, 0, // DO_PULL_GUN
  596. 237, 40,0, // DO_PLEAD
  597. 277, 6, 0 // DO_PLEAD_DEATH
  598. };
  599. static InfantryTypeClass const C1(
  600. INFANTRY_C1, // Infantry type number.
  601. TXT_C1, // Translate name number for infantry type.
  602. "C1", // INI name for infantry.
  603. 99, // Build level.
  604. STRUCTF_NONE, // Building prerequisite.
  605. false, // Is this a female type?
  606. true, // Is a leader type?
  607. false, // Has crawling animation frames?
  608. true, // Is this a civlian?
  609. true, // Always use the given name for the infantry?
  610. true, // Is this a "fraidycat" run-away type infantry?
  611. false, // Can this infantry type capture a building?
  612. false, // Theater specific graphic image?
  613. 10, // Number of shots it has (default).
  614. &CivilianDos1[0][0], // ptr to DO table
  615. 2, // Frame of projectile launch.
  616. 0, // Frame of projectile launch while prone.
  617. 25, // Strength of infantry (in damage points).
  618. 0, // Sight range.
  619. 10, // Cost of infantry (in credits).
  620. 99, // Scenario when they first appear.
  621. 0,1, // Risk/Reward of this infantry unit.
  622. HOUSEF_MULTI1|
  623. HOUSEF_MULTI2|
  624. HOUSEF_MULTI3|
  625. HOUSEF_MULTI4|
  626. HOUSEF_MULTI5|
  627. HOUSEF_MULTI6|
  628. HOUSEF_JP|
  629. HOUSEF_GOOD|
  630. HOUSEF_BAD|
  631. HOUSEF_NEUTRAL, // Who can own this infantry unit.
  632. WEAPON_PISTOL,WEAPON_NONE,
  633. MPH_SLOW_ISH
  634. );
  635. int CivilianDos2[DO_COUNT][3]={
  636. 0, 1, 1, // DO_STAND_READY
  637. 0, 1, 1, // DO_STAND_GUARD
  638. 0, 1, 1, // DO_PRONE // N/A
  639. 56, 6, 6, // DO_WALK
  640. 205, 4, 4, // DO_FIRE_WEAPON
  641. 0, 1, 1, // DO_LIE_DOWN // N/A
  642. 8, 6, 6, // DO_CRAWL
  643. 0, 1, 1, // DO_GET_UP // N/A
  644. 205, 4, 4, // DO_FIRE_PRONE
  645. 189, 10,0, // DO_IDLE1
  646. 199, 6, 0, // DO_IDLE2
  647. 104, 3, 0, // DO_ON_GUARD
  648. 107, 7, 0, // DO_FIGHT_READY
  649. 114, 2, 0, // DO_PUNCH
  650. 116, 6, 0, // DO_KICK
  651. 122, 2, 0, // DO_PUNCH_HIT1
  652. 124, 4, 0, // DO_PUNCH_HIT2
  653. 128, 4, 0, // DO_PUNCH_DEATH
  654. 133, 2, 0, // DO_KICK_HIT1
  655. 135, 4, 0, // DO_KICK_HIT2
  656. 139, 5, 0, // DO_KICK_DEATH
  657. 144, 3, 0, // DO_READY_WEAPON
  658. 329, 8, 0, // DO_GUN_DEATH
  659. 337, 8, 0, // DO_EXPLOSION_DEATH
  660. 337, 8, 0, // DO_EXPLOSION2_DEATH
  661. 345, 12,0, // DO_GRENADE_DEATH
  662. 357, 18,0, // DO_FIRE_DEATH
  663. 0, 0, 0, // DO_GESTURE1 // N/A
  664. 0, 0, 0, // DO_SALUTE1 // N/A
  665. 0, 0, 0, // DO_GESTURE2 // N/A
  666. 0, 0, 0, // DO_SALUTE2 // N/A
  667. 199, 6, 0, // DO_PULL_GUN
  668. 237, 40,0, // DO_PLEAD
  669. 277, 6, 0 // DO_PLEAD_DEATH
  670. };
  671. static InfantryTypeClass const C2(
  672. INFANTRY_C2, // Infantry type number.
  673. TXT_C2, // Translate name number for infantry type.
  674. "C2", // INI name for infantry.
  675. 99, // Build level.
  676. STRUCTF_NONE, // Building prerequisite.
  677. false, // Is this a female type?
  678. false, // Is a leader type?
  679. false, // Has crawling animation frames?
  680. true, // Is this a civlian?
  681. true, // Always use the given name for the infantry?
  682. true, // Is this a "fraidycat" run-away type infantry?
  683. false, // Can this infantry type capture a building?
  684. false, // Theater specific graphic image?
  685. 0, // Number of shots it has (default).
  686. &CivilianDos2[0][0], // ptr to DO table
  687. 2, // Frame of projectile launch.
  688. 0, // Frame of projectile launch while prone.
  689. 5, // Strength of infantry (in damage points).
  690. 0, // Sight range.
  691. 10, // Cost of infantry (in credits).
  692. 99, // Scenario when they first appear.
  693. 0,1, // Risk/Reward of this infantry unit.
  694. HOUSEF_MULTI1|
  695. HOUSEF_MULTI2|
  696. HOUSEF_MULTI3|
  697. HOUSEF_MULTI4|
  698. HOUSEF_MULTI5|
  699. HOUSEF_MULTI6|
  700. HOUSEF_JP|
  701. HOUSEF_GOOD|
  702. HOUSEF_BAD|
  703. HOUSEF_NEUTRAL, // Who can own this infantry unit.
  704. WEAPON_NONE,WEAPON_NONE,
  705. MPH_SLOW_ISH
  706. );
  707. int CivilianDos3[DO_COUNT][3]={
  708. 0, 1, 1, // DO_STAND_READY
  709. 0, 1, 1, // DO_STAND_GUARD
  710. 0, 1, 1, // DO_PRONE // N/A
  711. 56, 6, 6, // DO_WALK
  712. 205, 4, 4, // DO_FIRE_WEAPON
  713. 0, 1, 1, // DO_LIE_DOWN // N/A
  714. 8, 6, 6, // DO_CRAWL
  715. 0, 1, 1, // DO_GET_UP // N/A
  716. 205, 4, 4, // DO_FIRE_PRONE
  717. 189, 10,0, // DO_IDLE1
  718. 199, 6, 0, // DO_IDLE2
  719. 104, 3, 0, // DO_ON_GUARD
  720. 107, 7, 0, // DO_FIGHT_READY
  721. 114, 2, 0, // DO_PUNCH
  722. 116, 6, 0, // DO_KICK
  723. 122, 2, 0, // DO_PUNCH_HIT1
  724. 124, 4, 0, // DO_PUNCH_HIT2
  725. 128, 4, 0, // DO_PUNCH_DEATH
  726. 133, 2, 0, // DO_KICK_HIT1
  727. 135, 4, 0, // DO_KICK_HIT2
  728. 139, 5, 0, // DO_KICK_DEATH
  729. 144, 3, 0, // DO_READY_WEAPON
  730. 329, 8, 0, // DO_GUN_DEATH
  731. 337, 8, 0, // DO_EXPLOSION_DEATH
  732. 337, 8, 0, // DO_EXPLOSION2_DEATH
  733. 345, 12,0, // DO_GRENADE_DEATH
  734. 357, 18,0, // DO_FIRE_DEATH
  735. 0, 0, 0, // DO_GESTURE1 // N/A
  736. 0, 0, 0, // DO_SALUTE1 // N/A
  737. 0, 0, 0, // DO_GESTURE2 // N/A
  738. 0, 0, 0, // DO_SALUTE2 // N/A
  739. 199, 6, 0, // DO_PULL_GUN
  740. 237, 40,0, // DO_PLEAD
  741. 277, 6, 0 // DO_PLEAD_DEATH
  742. };
  743. static InfantryTypeClass const C3(
  744. INFANTRY_C3, // Infantry type number.
  745. TXT_C3, // Translate name number for infantry type.
  746. "C3", // INI name for infantry.
  747. 99, // Build level.
  748. STRUCTF_NONE, // Building prerequisite.
  749. true, // Is this a female type?
  750. false, // Is a leader type?
  751. false, // Has crawling animation frames?
  752. true, // Is this a civlian?
  753. true, // Always use the given name for the infantry?
  754. true, // Is this a "fraidycat" run-away type infantry?
  755. false, // Can this infantry type capture a building?
  756. false, // Theater specific graphic image?
  757. 0, // Number of shots it has (default).
  758. &CivilianDos3[0][0], // ptr to DO table
  759. 2, // Frame of projectile launch.
  760. 0, // Frame of projectile launch while prone.
  761. 5, // Strength of infantry (in damage points).
  762. 0, // Sight range.
  763. 10, // Cost of infantry (in credits).
  764. 99, // Scenario when they first appear.
  765. 0,1, // Risk/Reward of this infantry unit.
  766. HOUSEF_MULTI1|
  767. HOUSEF_MULTI2|
  768. HOUSEF_MULTI3|
  769. HOUSEF_MULTI4|
  770. HOUSEF_MULTI5|
  771. HOUSEF_MULTI6|
  772. HOUSEF_JP|
  773. HOUSEF_GOOD|
  774. HOUSEF_BAD|
  775. HOUSEF_NEUTRAL, // Who can own this infantry unit.
  776. WEAPON_NONE,WEAPON_NONE,
  777. MPH_SLOW_ISH
  778. );
  779. int CivilianDos4[DO_COUNT][3]={
  780. 0, 1, 1, // DO_STAND_READY
  781. 0, 1, 1, // DO_STAND_GUARD
  782. 0, 1, 1, // DO_PRONE // N/A
  783. 56, 6, 6, // DO_WALK
  784. 205, 4, 4, // DO_FIRE_WEAPON
  785. 0, 1, 1, // DO_LIE_DOWN // N/A
  786. 8, 6, 6, // DO_CRAWL
  787. 0, 1, 1, // DO_GET_UP // N/A
  788. 205, 4, 4, // DO_FIRE_PRONE
  789. 189, 10,0, // DO_IDLE1
  790. 199, 6, 0, // DO_IDLE2
  791. 104, 3, 0, // DO_ON_GUARD
  792. 107, 7, 0, // DO_FIGHT_READY
  793. 114, 2, 0, // DO_PUNCH
  794. 116, 6, 0, // DO_KICK
  795. 122, 2, 0, // DO_PUNCH_HIT1
  796. 124, 4, 0, // DO_PUNCH_HIT2
  797. 128, 4, 0, // DO_PUNCH_DEATH
  798. 133, 2, 0, // DO_KICK_HIT1
  799. 135, 4, 0, // DO_KICK_HIT2
  800. 139, 5, 0, // DO_KICK_DEATH
  801. 144, 3, 0, // DO_READY_WEAPON
  802. 329, 8, 0, // DO_GUN_DEATH
  803. 337, 8, 0, // DO_EXPLOSION_DEATH
  804. 337, 8, 0, // DO_EXPLOSION2_DEATH
  805. 345, 12,0, // DO_GRENADE_DEATH
  806. 357, 18,0, // DO_FIRE_DEATH
  807. 0, 0, 0, // DO_GESTURE1 // N/A
  808. 0, 0, 0, // DO_SALUTE1 // N/A
  809. 0, 0, 0, // DO_GESTURE2 // N/A
  810. 0, 0, 0, // DO_SALUTE2 // N/A
  811. 199, 6, 0, // DO_PULL_GUN
  812. 237, 40,0, // DO_PLEAD
  813. 277, 6, 0, // DO_PLEAD_DEATH
  814. };
  815. static InfantryTypeClass const C4(
  816. INFANTRY_C4, // Infantry type number.
  817. TXT_C4, // Translate name number for infantry type.
  818. "C4", // INI name for infantry.
  819. 99, // Build level.
  820. STRUCTF_NONE, // Building prerequisite.
  821. true, // Is this a female type?
  822. false, // Is a leader type?
  823. false, // Has crawling animation frames?
  824. true, // Is this a civlian?
  825. true, // Always use the given name for the infantry?
  826. true, // Is this a "fraidycat" run-away type infantry?
  827. false, // Can this infantry type capture a building?
  828. false, // Theater specific graphic image?
  829. 0, // Number of shots it has (default).
  830. &CivilianDos4[0][0], // ptr to DO table
  831. 2, // Frame of projectile launch.
  832. 0, // Frame of projectile launch while prone.
  833. 5, // Strength of infantry (in damage points).
  834. 0, // Sight range.
  835. 10, // Cost of infantry (in credits).
  836. 99, // Scenario when they first appear.
  837. 0,1, // Risk/Reward of this infantry unit.
  838. HOUSEF_MULTI1|
  839. HOUSEF_MULTI2|
  840. HOUSEF_MULTI3|
  841. HOUSEF_MULTI4|
  842. HOUSEF_MULTI5|
  843. HOUSEF_MULTI6|
  844. HOUSEF_JP|
  845. HOUSEF_GOOD|
  846. HOUSEF_BAD|
  847. HOUSEF_NEUTRAL, // Who can own this infantry unit.
  848. WEAPON_NONE,WEAPON_NONE,
  849. MPH_SLOW_ISH
  850. );
  851. int CivilianDos5[DO_COUNT][3]={
  852. 0, 1, 1, // DO_STAND_READY
  853. 0, 1, 1, // DO_STAND_GUARD
  854. 0, 1, 1, // DO_PRONE // N/A
  855. 56, 6, 6, // DO_WALK
  856. 205, 4, 4, // DO_FIRE_WEAPON
  857. 0, 1, 1, // DO_LIE_DOWN // N/A
  858. 8, 6, 6, // DO_CRAWL
  859. 0, 1, 1, // DO_GET_UP // N/A
  860. 205, 4, 4, // DO_FIRE_PRONE
  861. 189, 10,0, // DO_IDLE1
  862. 199, 6, 0, // DO_IDLE2
  863. 104, 3, 0, // DO_ON_GUARD
  864. 107, 7, 0, // DO_FIGHT_READY
  865. 114, 2, 0, // DO_PUNCH
  866. 116, 6, 0, // DO_KICK
  867. 122, 2, 0, // DO_PUNCH_HIT1
  868. 124, 4, 0, // DO_PUNCH_HIT2
  869. 128, 4, 0, // DO_PUNCH_DEATH
  870. 133, 2, 0, // DO_KICK_HIT1
  871. 135, 4, 0, // DO_KICK_HIT2
  872. 139, 5, 0, // DO_KICK_DEATH
  873. 144, 3, 0, // DO_READY_WEAPON
  874. 329, 8, 0, // DO_GUN_DEATH
  875. 337, 8, 0, // DO_EXPLOSION_DEATH
  876. 337, 8, 0, // DO_EXPLOSION2_DEATH
  877. 345, 12,0, // DO_GRENADE_DEATH
  878. 357, 18,0, // DO_FIRE_DEATH
  879. 0, 0, 0, // DO_GESTURE1 // N/A
  880. 0, 0, 0, // DO_SALUTE1 // N/A
  881. 0, 0, 0, // DO_GESTURE2 // N/A
  882. 0, 0, 0, // DO_SALUTE2 // N/A
  883. 199, 6, 0, // DO_PULL_GUN
  884. 237, 40,0, // DO_PLEAD
  885. 277, 6, 0 // DO_PLEAD_DEATH
  886. };
  887. static InfantryTypeClass const C5(
  888. INFANTRY_C5, // Infantry type number.
  889. TXT_C5, // Translate name number for infantry type.
  890. "C5", // INI name for infantry.
  891. 99, // Build level.
  892. STRUCTF_NONE, // Building prerequisite.
  893. false, // Is this a female type?
  894. false, // Is a leader type?
  895. false, // Has crawling animation frames?
  896. true, // Is this a civlian?
  897. true, // Always use the given name for the infantry?
  898. true, // Is this a "fraidycat" run-away type infantry?
  899. false, // Can this infantry type capture a building?
  900. false, // Theater specific graphic image?
  901. 0, // Number of shots it has (default).
  902. &CivilianDos5[0][0], // ptr to DO table
  903. 2, // Frame of projectile launch.
  904. 0, // Frame of projectile launch while prone.
  905. 5, // Strength of infantry (in damage points).
  906. 0, // Sight range.
  907. 10, // Cost of infantry (in credits).
  908. 99, // Scenario when they first appear.
  909. 0,1, // Risk/Reward of this infantry unit.
  910. HOUSEF_MULTI1|
  911. HOUSEF_MULTI2|
  912. HOUSEF_MULTI3|
  913. HOUSEF_MULTI4|
  914. HOUSEF_MULTI5|
  915. HOUSEF_MULTI6|
  916. HOUSEF_JP|
  917. HOUSEF_GOOD|
  918. HOUSEF_BAD|
  919. HOUSEF_NEUTRAL, // Who can own this infantry unit.
  920. WEAPON_NONE,WEAPON_NONE,
  921. MPH_SLOW_ISH
  922. );
  923. int CivilianDos6[DO_COUNT][3]={
  924. 0, 1, 1, // DO_STAND_READY
  925. 0, 1, 1, // DO_STAND_GUARD
  926. 0, 1, 1, // DO_PRONE // N/A
  927. 56, 6, 6, // DO_WALK
  928. 205, 4, 4, // DO_FIRE_WEAPON
  929. 0, 1, 1, // DO_LIE_DOWN // N/A
  930. 8, 6, 6, // DO_CRAWL
  931. 0, 1, 1, // DO_GET_UP // N/A
  932. 205, 4, 4, // DO_FIRE_PRONE
  933. 189, 10,0, // DO_IDLE1
  934. 199, 6, 0, // DO_IDLE2
  935. 104, 3, 0, // DO_ON_GUARD
  936. 107, 7, 0, // DO_FIGHT_READY
  937. 114, 2, 0, // DO_PUNCH
  938. 116, 6, 0, // DO_KICK
  939. 122, 2, 0, // DO_PUNCH_HIT1
  940. 124, 4, 0, // DO_PUNCH_HIT2
  941. 128, 4, 0, // DO_PUNCH_DEATH
  942. 133, 2, 0, // DO_KICK_HIT1
  943. 135, 4, 0, // DO_KICK_HIT2
  944. 139, 5, 0, // DO_KICK_DEATH
  945. 144, 3, 0, // DO_READY_WEAPON
  946. 329, 8, 0, // DO_GUN_DEATH
  947. 337, 8, 0, // DO_EXPLOSION_DEATH
  948. 337, 8, 0, // DO_EXPLOSION2_DEATH
  949. 345, 12,0, // DO_GRENADE_DEATH
  950. 357, 18,0, // DO_FIRE_DEATH
  951. 0, 0, 0, // DO_GESTURE1 // N/A
  952. 0, 0, 0, // DO_SALUTE1 // N/A
  953. 0, 0, 0, // DO_GESTURE2 // N/A
  954. 0, 0, 0, // DO_SALUTE2 // N/A
  955. 199, 6, 0, // DO_PULL_GUN
  956. 237, 40,0, // DO_PLEAD
  957. 277, 6, 0 // DO_PLEAD_DEATH
  958. };
  959. static InfantryTypeClass const C6(
  960. INFANTRY_C6, // Infantry type number.
  961. TXT_C6, // Translate name number for infantry type.
  962. "C6", // INI name for infantry.
  963. 99, // Build level.
  964. STRUCTF_NONE, // Building prerequisite.
  965. false, // Is this a female type?
  966. false, // Is a leader type?
  967. false, // Has crawling animation frames?
  968. true, // Is this a civlian?
  969. true, // Always use the given name for the infantry?
  970. true, // Is this a "fraidycat" run-away type infantry?
  971. false, // Can this infantry type capture a building?
  972. false, // Theater specific graphic image?
  973. 0, // Number of shots it has (default).
  974. &CivilianDos6[0][0], // ptr to DO table
  975. 2, // Frame of projectile launch.
  976. 0, // Frame of projectile launch while prone.
  977. 5, // Strength of infantry (in damage points).
  978. 0, // Sight range.
  979. 10, // Cost of infantry (in credits).
  980. 99, // Scenario when they first appear.
  981. 0,1, // Risk/Reward of this infantry unit.
  982. HOUSEF_MULTI1|
  983. HOUSEF_MULTI2|
  984. HOUSEF_MULTI3|
  985. HOUSEF_MULTI4|
  986. HOUSEF_MULTI5|
  987. HOUSEF_MULTI6|
  988. HOUSEF_JP|
  989. HOUSEF_GOOD|
  990. HOUSEF_BAD|
  991. HOUSEF_NEUTRAL, // Who can own this infantry unit.
  992. WEAPON_NONE,WEAPON_NONE,
  993. MPH_SLOW_ISH
  994. );
  995. int CivilianDos7[DO_COUNT][3]={
  996. 0, 1, 1, // DO_STAND_READY
  997. 0, 1, 1, // DO_STAND_GUARD
  998. 0, 1, 1, // DO_PRONE // N/A
  999. 56, 6, 6, // DO_WALK
  1000. 205, 4, 4, // DO_FIRE_WEAPON
  1001. 0, 1, 1, // DO_LIE_DOWN // N/A
  1002. 8, 6, 6, // DO_CRAWL
  1003. 0, 1, 1, // DO_GET_UP // N/A
  1004. 205, 4, 4, // DO_FIRE_PRONE
  1005. 189, 10,0, // DO_IDLE1
  1006. 199, 6, 0, // DO_IDLE2
  1007. 104, 3, 0, // DO_ON_GUARD
  1008. 107, 7, 0, // DO_FIGHT_READY
  1009. 114, 2, 0, // DO_PUNCH
  1010. 116, 6, 0, // DO_KICK
  1011. 122, 2, 0, // DO_PUNCH_HIT1
  1012. 124, 4, 0, // DO_PUNCH_HIT2
  1013. 128, 4, 0, // DO_PUNCH_DEATH
  1014. 133, 2, 0, // DO_KICK_HIT1
  1015. 135, 4, 0, // DO_KICK_HIT2
  1016. 139, 5, 0, // DO_KICK_DEATH
  1017. 144, 3, 0, // DO_READY_WEAPON
  1018. 329, 8, 0, // DO_GUN_DEATH
  1019. 337, 8, 0, // DO_EXPLOSION_DEATH
  1020. 337, 8, 0, // DO_EXPLOSION2_DEATH
  1021. 345, 12,0, // DO_GRENADE_DEATH
  1022. 357, 18,0, // DO_FIRE_DEATH
  1023. 0, 0, 0, // DO_GESTURE1 // N/A
  1024. 0, 0, 0, // DO_SALUTE1 // N/A
  1025. 0, 0, 0, // DO_GESTURE2 // N/A
  1026. 0, 0, 0, // DO_SALUTE2 // N/A
  1027. 199, 6, 0, // DO_PULL_GUN
  1028. 237, 40,0, // DO_PLEAD
  1029. 277, 6, 0 // DO_PLEAD_DEATH
  1030. };
  1031. static InfantryTypeClass const C7(
  1032. INFANTRY_C7, // Infantry type number.
  1033. TXT_C7, // Translate name number for infantry type.
  1034. "C7", // INI name for infantry.
  1035. 99, // Build level.
  1036. STRUCTF_NONE, // Building prerequisite.
  1037. false, // Is this a female type?
  1038. true, // Is a leader type?
  1039. false, // Has crawling animation frames?
  1040. true, // Is this a civlian?
  1041. true, // Always use the given name for the infantry?
  1042. true, // Is this a "fraidycat" run-away type infantry?
  1043. false, // Can this infantry type capture a building?
  1044. false, // Theater specific graphic image?
  1045. 10, // Number of shots it has (default).
  1046. &CivilianDos7[0][0], // ptr to DO table
  1047. 2, // Frame of projectile launch.
  1048. 0, // Frame of projectile launch while prone.
  1049. 5, // Strength of infantry (in damage points).
  1050. 0, // Sight range.
  1051. 10, // Cost of infantry (in credits).
  1052. 99, // Scenario when they first appear.
  1053. 0,1, // Risk/Reward of this infantry unit.
  1054. HOUSEF_MULTI1|
  1055. HOUSEF_MULTI2|
  1056. HOUSEF_MULTI3|
  1057. HOUSEF_MULTI4|
  1058. HOUSEF_MULTI5|
  1059. HOUSEF_MULTI6|
  1060. HOUSEF_JP|
  1061. HOUSEF_GOOD|
  1062. HOUSEF_BAD|
  1063. HOUSEF_NEUTRAL, // Who can own this infantry unit.
  1064. WEAPON_PISTOL,WEAPON_NONE,
  1065. MPH_SLOW_ISH
  1066. );
  1067. int CivilianDos8[DO_COUNT][3]={
  1068. 0, 1, 1, // DO_STAND_READY
  1069. 0, 1, 1, // DO_STAND_GUARD
  1070. 0, 1, 1, // DO_PRONE // N/A
  1071. 56, 6, 6, // DO_WALK
  1072. 205, 4, 4, // DO_FIRE_WEAPON
  1073. 0, 1, 1, // DO_LIE_DOWN // N/A
  1074. 8, 6, 6, // DO_CRAWL
  1075. 0, 1, 1, // DO_GET_UP // N/A
  1076. 205, 4, 4, // DO_FIRE_PRONE
  1077. 189, 10,0, // DO_IDLE1
  1078. 199, 6, 0, // DO_IDLE2
  1079. 104, 3, 0, // DO_ON_GUARD
  1080. 107, 7, 0, // DO_FIGHT_READY
  1081. 114, 2, 0, // DO_PUNCH
  1082. 116, 6, 0, // DO_KICK
  1083. 122, 2, 0, // DO_PUNCH_HIT1
  1084. 124, 4, 0, // DO_PUNCH_HIT2
  1085. 128, 4, 0, // DO_PUNCH_DEATH
  1086. 133, 2, 0, // DO_KICK_HIT1
  1087. 135, 4, 0, // DO_KICK_HIT2
  1088. 139, 5, 0, // DO_KICK_DEATH
  1089. 144, 3, 0, // DO_READY_WEAPON
  1090. 329, 8, 0, // DO_GUN_DEATH
  1091. 337, 8, 0, // DO_EXPLOSION_DEATH
  1092. 337, 8, 0, // DO_EXPLOSION2_DEATH
  1093. 345, 12,0, // DO_GRENADE_DEATH
  1094. 357, 18,0, // DO_FIRE_DEATH
  1095. 0, 0, 0, // DO_GESTURE1 // N/A
  1096. 0, 0, 0, // DO_SALUTE1 // N/A
  1097. 0, 0, 0, // DO_GESTURE2 // N/A
  1098. 0, 0, 0, // DO_SALUTE2 // N/A
  1099. 199, 6, 0, // DO_PULL_GUN
  1100. 237, 40,0, // DO_PLEAD
  1101. 277, 6, 0 // DO_PLEAD_DEATH
  1102. };
  1103. static InfantryTypeClass const C8(
  1104. INFANTRY_C8, // Infantry type number.
  1105. TXT_C8, // Translate name number for infantry type.
  1106. "C8", // INI name for infantry.
  1107. 99, // Build level.
  1108. STRUCTF_NONE, // Building prerequisite.
  1109. false, // Is this a female type?
  1110. false, // Is a leader type?
  1111. false, // Has crawling animation frames?
  1112. true, // Is this a civlian?
  1113. true, // Always use the given name for the infantry?
  1114. true, // Is this a "fraidycat" run-away type infantry?
  1115. false, // Can this infantry type capture a building?
  1116. false, // Theater specific graphic image?
  1117. 0, // Number of shots it has (default).
  1118. &CivilianDos8[0][0], // ptr to DO table
  1119. 2, // Frame of projectile launch.
  1120. 0, // Frame of projectile launch while prone.
  1121. 5, // Strength of infantry (in damage points).
  1122. 0, // Sight range.
  1123. 10, // Cost of infantry (in credits).
  1124. 99, // Scenario when they first appear.
  1125. 0,1, // Risk/Reward of this infantry unit.
  1126. HOUSEF_MULTI1|
  1127. HOUSEF_MULTI2|
  1128. HOUSEF_MULTI3|
  1129. HOUSEF_MULTI4|
  1130. HOUSEF_MULTI5|
  1131. HOUSEF_MULTI6|
  1132. HOUSEF_JP|
  1133. HOUSEF_GOOD|
  1134. HOUSEF_BAD|
  1135. HOUSEF_NEUTRAL, // Who can own this infantry unit.
  1136. WEAPON_NONE,WEAPON_NONE,
  1137. MPH_SLOW_ISH
  1138. );
  1139. int CivilianDos9[DO_COUNT][3]={
  1140. 0, 1, 1, // DO_STAND_READY
  1141. 0, 1, 1, // DO_STAND_GUARD
  1142. 0, 1, 1, // DO_PRONE // N/A
  1143. 56, 6, 6, // DO_WALK
  1144. 205, 4, 4, // DO_FIRE_WEAPON
  1145. 0, 1, 1, // DO_LIE_DOWN // N/A
  1146. 8, 6, 6, // DO_CRAWL
  1147. 0, 1, 1, // DO_GET_UP // N/A
  1148. 205, 4, 4, // DO_FIRE_PRONE
  1149. 189, 10,0, // DO_IDLE1
  1150. 199, 6, 0, // DO_IDLE2
  1151. 104, 3, 0, // DO_ON_GUARD
  1152. 107, 7, 0, // DO_FIGHT_READY
  1153. 114, 2, 0, // DO_PUNCH
  1154. 116, 6, 0, // DO_KICK
  1155. 122, 2, 0, // DO_PUNCH_HIT1
  1156. 124, 4, 0, // DO_PUNCH_HIT2
  1157. 128, 4, 0, // DO_PUNCH_DEATH
  1158. 133, 2, 0, // DO_KICK_HIT1
  1159. 135, 4, 0, // DO_KICK_HIT2
  1160. 139, 5, 0, // DO_KICK_DEATH
  1161. 144, 3, 0, // DO_READY_WEAPON
  1162. 329, 8, 0, // DO_GUN_DEATH
  1163. 337, 8, 0, // DO_EXPLOSION_DEATH
  1164. 337, 8, 0, // DO_EXPLOSION2_DEATH
  1165. 345, 12,0, // DO_GRENADE_DEATH
  1166. 357, 18,0, // DO_FIRE_DEATH
  1167. 0, 0, 0, // DO_GESTURE1 // N/A
  1168. 0, 0, 0, // DO_SALUTE1 // N/A
  1169. 0, 0, 0, // DO_GESTURE2 // N/A
  1170. 0, 0, 0, // DO_SALUTE2 // N/A
  1171. 199, 6, 0, // DO_PULL_GUN
  1172. 237, 40,0, // DO_PLEAD
  1173. 277, 6, 0 // DO_PLEAD_DEATH
  1174. };
  1175. static InfantryTypeClass const C9(
  1176. INFANTRY_C9, // Infantry type number.
  1177. TXT_C9, // Translate name number for infantry type.
  1178. "C9", // INI name for infantry.
  1179. 99, // Build level.
  1180. STRUCTF_NONE, // Building prerequisite.
  1181. false, // Is this a female type?
  1182. false, // Is a leader type?
  1183. false, // Has crawling animation frames?
  1184. true, // Is this a civlian?
  1185. true, // Always use the given name for the infantry?
  1186. true, // Is this a "fraidycat" run-away type infantry?
  1187. false, // Can this infantry type capture a building?
  1188. false, // Theater specific graphic image?
  1189. 0, // Number of shots it has (default).
  1190. &CivilianDos9[0][0], // ptr to DO table
  1191. 2, // Frame of projectile launch.
  1192. 0, // Frame of projectile launch while prone.
  1193. 5, // Strength of infantry (in damage points).
  1194. 0, // Sight range.
  1195. 10, // Cost of infantry (in credits).
  1196. 99, // Scenario when they first appear.
  1197. 0,1, // Risk/Reward of this infantry unit.
  1198. HOUSEF_MULTI1|
  1199. HOUSEF_MULTI2|
  1200. HOUSEF_MULTI3|
  1201. HOUSEF_MULTI4|
  1202. HOUSEF_MULTI5|
  1203. HOUSEF_MULTI6|
  1204. HOUSEF_JP|
  1205. HOUSEF_GOOD|
  1206. HOUSEF_BAD|
  1207. HOUSEF_NEUTRAL, // Who can own this infantry unit.
  1208. WEAPON_NONE,WEAPON_NONE,
  1209. MPH_SLOW_ISH
  1210. );
  1211. int NikoombaDos[DO_COUNT][3]={
  1212. 0, 1, 1, // DO_STAND_READY
  1213. 0, 1, 1, // DO_STAND_GUARD
  1214. 0, 1, 1, // DO_PRONE // N/A
  1215. 56, 6, 6, // DO_WALK
  1216. 205, 4, 4, // DO_FIRE_WEAPON
  1217. 0, 1, 1, // DO_LIE_DOWN // N/A
  1218. 8, 6, 6, // DO_CRAWL
  1219. 0, 1, 1, // DO_GET_UP // N/A
  1220. 205, 4, 4, // DO_FIRE_PRONE
  1221. 189, 10,0, // DO_IDLE1
  1222. 199, 6, 0, // DO_IDLE2
  1223. 104, 3, 0, // DO_ON_GUARD
  1224. 107, 7, 0, // DO_FIGHT_READY
  1225. 114, 2, 0, // DO_PUNCH
  1226. 116, 6, 0, // DO_KICK
  1227. 122, 2, 0, // DO_PUNCH_HIT1
  1228. 124, 4, 0, // DO_PUNCH_HIT2
  1229. 128, 4, 0, // DO_PUNCH_DEATH
  1230. 133, 2, 0, // DO_KICK_HIT1
  1231. 135, 4, 0, // DO_KICK_HIT2
  1232. 139, 5, 0, // DO_KICK_DEATH
  1233. 144, 3, 0, // DO_READY_WEAPON
  1234. 329, 8, 0, // DO_GUN_DEATH
  1235. 337, 8, 0, // DO_EXPLOSION_DEATH
  1236. 337, 8, 0, // DO_EXPLOSION2_DEATH
  1237. 345, 12,0, // DO_GRENADE_DEATH
  1238. 357, 18,0, // DO_FIRE_DEATH
  1239. 0, 0, 0, // DO_GESTURE1 // N/A
  1240. 0, 0, 0, // DO_SALUTE1 // N/A
  1241. 0, 0, 0, // DO_GESTURE2 // N/A
  1242. 0, 0, 0, // DO_SALUTE2 // N/A
  1243. 199, 6, 0, // DO_PULL_GUN
  1244. 237, 40,0, // DO_PLEAD
  1245. 277, 6, 0, // DO_PLEAD_DEATH
  1246. };
  1247. // Nikoomba
  1248. static InfantryTypeClass const C10(
  1249. INFANTRY_C10, // Infantry type number.
  1250. TXT_C10, // Translate name number for infantry type.
  1251. "C10", // INI name for infantry.
  1252. 99, // Build level.
  1253. STRUCTF_NONE, // Building prerequisite.
  1254. false, // Is this a female type?
  1255. false, // Is a leader type?
  1256. false, // Has crawling animation frames?
  1257. true, // Is this a civlian?
  1258. true, // Always use the given name for the infantry?
  1259. true, // Is this a "fraidycat" run-away type infantry?
  1260. false, // Can this infantry type capture a building?
  1261. false, // Theater specific graphic image?
  1262. 0, // Number of shots it has (default).
  1263. &NikoombaDos[0][0], // ptr to DO table
  1264. 2, // Frame of projectile launch.
  1265. 0, // Frame of projectile launch while prone.
  1266. 50, // Strength of infantry (in damage points).
  1267. 0, // Sight range.
  1268. 10, // Cost of infantry (in credits).
  1269. 99, // Scenario when they first appear.
  1270. 0,1, // Risk/Reward of this infantry unit.
  1271. HOUSEF_MULTI1|
  1272. HOUSEF_MULTI2|
  1273. HOUSEF_MULTI3|
  1274. HOUSEF_MULTI4|
  1275. HOUSEF_MULTI5|
  1276. HOUSEF_MULTI6|
  1277. HOUSEF_JP|
  1278. HOUSEF_GOOD|
  1279. HOUSEF_BAD|
  1280. HOUSEF_NEUTRAL, // Who can own this infantry unit.
  1281. WEAPON_NONE,WEAPON_NONE,
  1282. MPH_SLOW_ISH
  1283. );
  1284. int MoebiusDos[DO_COUNT][3]={
  1285. 0, 1, 1, // DO_STAND_READY
  1286. 0, 1, 1, // DO_STAND_GUARD
  1287. 0, 1, 1, // DO_PRONE // N/A
  1288. 56, 6, 6, // DO_WALK
  1289. 205, 4, 4, // DO_FIRE_WEAPON
  1290. 0, 1, 1, // DO_LIE_DOWN // N/A
  1291. 8, 6, 6, // DO_CRAWL
  1292. 0, 1, 1, // DO_GET_UP // N/A
  1293. 0, 0, 0, // DO_FIRE_PRONE
  1294. 104, 16,0, // DO_IDLE1
  1295. 120, 20,0, // DO_IDLE2
  1296. 0, 0, 0, // DO_ON_GUARD
  1297. 0, 0, 0, // DO_FIGHT_READY
  1298. 0, 0, 0, // DO_PUNCH
  1299. 0, 0, 0, // DO_KICK
  1300. 0, 0, 0, // DO_PUNCH_HIT1
  1301. 0, 0, 0, // DO_PUNCH_HIT2
  1302. 0, 0, 0, // DO_PUNCH_DEATH
  1303. 0, 0, 0, // DO_KICK_HIT1
  1304. 0, 0, 0, // DO_KICK_HIT2
  1305. 0, 0, 0, // DO_KICK_DEATH
  1306. 0, 0, 0, // DO_READY_WEAPON
  1307. 212, 8, 0, // DO_GUN_DEATH
  1308. 220, 8, 0, // DO_EXPLOSION_DEATH
  1309. 228, 12,0, // DO_EXPLOSION2_DEATH
  1310. 228, 12,0, // DO_GRENADE_DEATH
  1311. 240, 18,0, // DO_FIRE_DEATH
  1312. 0, 0, 0, // DO_GESTURE1 // N/A
  1313. 0, 0, 0, // DO_SALUTE1 // N/A
  1314. 0, 0, 0, // DO_GESTURE2 // N/A
  1315. 0, 0, 0, // DO_SALUTE2 // N/A
  1316. 0, 0, 0, // DO_PULL_GUN
  1317. 120, 31,0, // DO_PLEAD
  1318. 151, 14,0 // DO_PLEAD_DEATH
  1319. };
  1320. static InfantryTypeClass const Moebius(
  1321. INFANTRY_MOEBIUS, // Infantry type number.
  1322. TXT_MOEBIUS, // Translate name number for infantry type.
  1323. "MOEBIUS", // INI name for infantry.
  1324. 99, // Build level.
  1325. STRUCTF_NONE, // Building prerequisite.
  1326. false, // Is this a female type?
  1327. false, // Is a leader type?
  1328. false, // Has crawling animation frames?
  1329. true, // Is this a civlian?
  1330. true, // Always use the given name for the infantry?
  1331. true, // Is this a "fraidycat" run-away type infantry?
  1332. false, // Can this infantry type capture a building?
  1333. false, // Theater specific graphic image?
  1334. 0, // Number of shots it has (default).
  1335. &MoebiusDos[0][0], // ptr to DO table
  1336. 0, // Frame of projectile launch.
  1337. 0, // Frame of projectile launch while prone.
  1338. 50, // Strength of infantry (in damage points).
  1339. 0, // Sight range.
  1340. 10, // Cost of infantry (in credits).
  1341. 99, // Scenario when they first appear.
  1342. 0,10, // Risk/Reward of this infantry unit.
  1343. HOUSEF_MULTI1|
  1344. HOUSEF_MULTI2|
  1345. HOUSEF_MULTI3|
  1346. HOUSEF_MULTI4|
  1347. HOUSEF_MULTI5|
  1348. HOUSEF_MULTI6|
  1349. HOUSEF_JP|
  1350. HOUSEF_GOOD|
  1351. HOUSEF_BAD|
  1352. HOUSEF_NEUTRAL, // Who can own this infantry unit.
  1353. WEAPON_NONE,WEAPON_NONE,
  1354. MPH_SLOW_ISH
  1355. );
  1356. int DelphiDos[DO_COUNT][3]={
  1357. 0, 1, 1, // DO_STAND_READY
  1358. 0, 1, 1, // DO_STAND_GUARD
  1359. 0, 1, 1, // DO_PRONE // N/A
  1360. 56, 6, 6, // DO_WALK
  1361. 205, 4, 4, // DO_FIRE_WEAPON
  1362. 0, 1, 1, // DO_LIE_DOWN // N/A
  1363. 8, 6, 6, // DO_CRAWL
  1364. 0, 1, 1, // DO_GET_UP // N/A
  1365. 205, 4, 4, // DO_FIRE_PRONE
  1366. 189, 10,0, // DO_IDLE1
  1367. 199, 6, 0, // DO_IDLE2
  1368. 104, 3, 0, // DO_ON_GUARD
  1369. 107, 7, 0, // DO_FIGHT_READY
  1370. 114, 2, 0, // DO_PUNCH
  1371. 116, 6, 0, // DO_KICK
  1372. 122, 2, 0, // DO_PUNCH_HIT1
  1373. 124, 4, 0, // DO_PUNCH_HIT2
  1374. 128, 4, 0, // DO_PUNCH_DEATH
  1375. 133, 2, 0, // DO_KICK_HIT1
  1376. 135, 4, 0, // DO_KICK_HIT2
  1377. 139, 5, 0, // DO_KICK_DEATH
  1378. 144, 3, 0, // DO_READY_WEAPON
  1379. 329, 8, 0, // DO_GUN_DEATH
  1380. 337, 8, 0, // DO_EXPLOSION_DEATH
  1381. 337, 8, 0, // DO_EXPLOSION2_DEATH
  1382. 345, 12,0, // DO_GRENADE_DEATH
  1383. 357, 18,0, // DO_FIRE_DEATH
  1384. 0, 0, 0, // DO_GESTURE1 // N/A
  1385. 0, 0, 0, // DO_SALUTE1 // N/A
  1386. 0, 0, 0, // DO_GESTURE2 // N/A
  1387. 0, 0, 0, // DO_SALUTE2 // N/A
  1388. 199, 6, 0, // DO_PULL_GUN
  1389. 237, 40,0, // DO_PLEAD
  1390. 277, 6, 0, // DO_PLEAD_DEATH
  1391. };
  1392. static InfantryTypeClass const Delphi(
  1393. INFANTRY_DELPHI, // Infantry type number.
  1394. TXT_DELPHI, // Translate name number for infantry type.
  1395. "DELPHI", // INI name for infantry.
  1396. 99, // Build level.
  1397. STRUCTF_NONE, // Building prerequisite.
  1398. false, // Is this a female type?
  1399. false, // Is a leader type?
  1400. false, // Has crawling animation frames?
  1401. true, // Is this a civlian?
  1402. true, // Always use the given name for the infantry?
  1403. true, // Is this a "fraidycat" run-away type infantry?
  1404. false, // Can this infantry type capture a building?
  1405. false, // Theater specific graphic image?
  1406. 10, // Number of shots it has (default).
  1407. &DelphiDos[0][0], // ptr to DO table
  1408. 2, // Frame of projectile launch.
  1409. 0, // Frame of projectile launch while prone.
  1410. 25, // Strength of infantry (in damage points).
  1411. 0, // Sight range.
  1412. 10, // Cost of infantry (in credits).
  1413. 99, // Scenario when they first appear.
  1414. 0,0, // Risk/Reward of this infantry unit.
  1415. HOUSEF_MULTI1|
  1416. HOUSEF_MULTI2|
  1417. HOUSEF_MULTI3|
  1418. HOUSEF_MULTI4|
  1419. HOUSEF_MULTI5|
  1420. HOUSEF_MULTI6|
  1421. HOUSEF_JP|
  1422. HOUSEF_GOOD|
  1423. HOUSEF_NEUTRAL, // Who can own this infantry unit.
  1424. WEAPON_PISTOL,WEAPON_NONE,
  1425. MPH_SLOW_ISH
  1426. );
  1427. int DrChanDos[DO_COUNT][3]={
  1428. 0, 1, 1, // DO_STAND_READY
  1429. 0, 1, 1, // DO_STAND_GUARD
  1430. 0, 1, 1, // DO_PRONE // N/A
  1431. 56, 6, 6, // DO_WALK
  1432. 205, 4, 4, // DO_FIRE_WEAPON
  1433. 0, 1, 1, // DO_LIE_DOWN // N/A
  1434. 8, 6, 6, // DO_CRAWL
  1435. 0, 1, 1, // DO_GET_UP // N/A
  1436. 0, 0, 0, // DO_FIRE_PRONE
  1437. 104, 16,0, // DO_IDLE1
  1438. 120, 20,0, // DO_IDLE2
  1439. 0, 0, 0, // DO_ON_GUARD
  1440. 0, 0, 0, // DO_FIGHT_READY
  1441. 0, 0, 0, // DO_PUNCH
  1442. 0, 0, 0, // DO_KICK
  1443. 0, 0, 0, // DO_PUNCH_HIT1
  1444. 0, 0, 0, // DO_PUNCH_HIT2
  1445. 0, 0, 0, // DO_PUNCH_DEATH
  1446. 0, 0, 0, // DO_KICK_HIT1
  1447. 0, 0, 0, // DO_KICK_HIT2
  1448. 0, 0, 0, // DO_KICK_DEATH
  1449. 0, 0, 0, // DO_READY_WEAPON
  1450. 212, 8, 0, // DO_GUN_DEATH
  1451. 220, 8, 0, // DO_EXPLOSION_DEATH
  1452. 228, 12,0, // DO_EXPLOSION2_DEATH
  1453. 228, 12,0, // DO_GRENADE_DEATH
  1454. 240, 18,0, // DO_FIRE_DEATH
  1455. 0, 0, 0, // DO_GESTURE1 // N/A
  1456. 0, 0, 0, // DO_SALUTE1 // N/A
  1457. 0, 0, 0, // DO_GESTURE2 // N/A
  1458. 0, 0, 0, // DO_SALUTE2 // N/A
  1459. 0, 0, 0, // DO_PULL_GUN
  1460. 120, 31,0, // DO_PLEAD
  1461. 151, 14,0 // DO_PLEAD_DEATH
  1462. };
  1463. static InfantryTypeClass const DrChan(
  1464. INFANTRY_CHAN, // Infantry type number.
  1465. TXT_CHAN, // Translate name number for infantry type.
  1466. "CHAN", // INI name for infantry.
  1467. 99, // Build level.
  1468. STRUCTF_NONE, // Building prerequisite.
  1469. false, // Is this a female type?
  1470. false, // Is a leader type?
  1471. false, // Has crawling animation frames?
  1472. true, // Is this a civlian?
  1473. true, // Always use the given name for the infantry?
  1474. true, // Is this a "fraidycat" run-away type infantry?
  1475. false, // Can this infantry type capture a building?
  1476. false, // Theater specific graphic image?
  1477. 10, // Number of shots it has (default).
  1478. &DrChanDos[0][0], // ptr to DO table
  1479. 2, // Frame of projectile launch.
  1480. 0, // Frame of projectile launch while prone.
  1481. 25, // Strength of infantry (in damage points).
  1482. 0, // Sight range.
  1483. 10, // Cost of infantry (in credits).
  1484. 99, // Scenario when they first appear.
  1485. 0,1, // Risk/Reward of this infantry unit.
  1486. HOUSEF_MULTI1|
  1487. HOUSEF_MULTI2|
  1488. HOUSEF_MULTI3|
  1489. HOUSEF_MULTI4|
  1490. HOUSEF_MULTI5|
  1491. HOUSEF_MULTI6|
  1492. HOUSEF_JP|
  1493. HOUSEF_GOOD|
  1494. HOUSEF_NEUTRAL, // Who can own this infantry unit.
  1495. WEAPON_NONE,WEAPON_NONE,
  1496. MPH_SLOW_ISH
  1497. );
  1498. /*
  1499. ** This is the array of pointers to the static data associated with each
  1500. ** infantry type.
  1501. */
  1502. InfantryTypeClass const * const InfantryTypeClass::Pointers[INFANTRY_COUNT] = {
  1503. &E1,
  1504. &E2,
  1505. &E3,
  1506. &E4,
  1507. &E5,
  1508. // &E6,
  1509. &E7,
  1510. &Commando,
  1511. &C1,
  1512. &C2,
  1513. &C3,
  1514. &C4,
  1515. &C5,
  1516. &C6,
  1517. &C7,
  1518. &C8,
  1519. &C9,
  1520. &C10,
  1521. &Moebius,
  1522. &Delphi,
  1523. &DrChan
  1524. };
  1525. /***********************************************************************************************
  1526. * InfantryTypeClass::InfantryTypeClass -- Constructor for infantry type class objects. *
  1527. * *
  1528. * This routine will construct the infantry type objects. It is use to create the static *
  1529. * infantry types that are used to give each of the infantry objects their characteristics. *
  1530. * *
  1531. * INPUT: see below... *
  1532. * *
  1533. * OUTPUT: none *
  1534. * *
  1535. * WARNINGS: none *
  1536. * *
  1537. * HISTORY: *
  1538. * 09/24/1994 JLB : Created. *
  1539. *=============================================================================================*/
  1540. InfantryTypeClass::InfantryTypeClass (
  1541. InfantryType type, int name, char const *ininame,
  1542. unsigned char level, long pre,
  1543. bool is_female,
  1544. bool is_leader,
  1545. bool is_crawling,
  1546. bool is_civilian,
  1547. bool is_nominal,
  1548. bool is_fraidycat,
  1549. bool is_capture,
  1550. bool is_theater,
  1551. int ammo,
  1552. int *do_table,
  1553. int firelaunch, int pronelaunch,
  1554. unsigned short strength, int sightrange,
  1555. int cost, int scenario, int risk, int reward, int ownable,
  1556. WeaponType primary, WeaponType secondary,
  1557. MPHType maxspeed)
  1558. : TechnoTypeClass(name, ininame, level, pre,
  1559. is_leader, true, is_nominal, false, false, true, true, true, true, false, false,
  1560. is_theater, false, false, false, true, false,
  1561. ammo, strength, maxspeed, sightrange, cost,
  1562. scenario, risk, reward, ownable,
  1563. primary, secondary,
  1564. ARMOR_NONE)
  1565. {
  1566. IsFemale = is_female;
  1567. IsCrawling = is_crawling;
  1568. IsCapture = is_capture;
  1569. IsFraidyCat = is_fraidycat;
  1570. IsCivilian = is_civilian;
  1571. Type = type;
  1572. FireLaunch = firelaunch;
  1573. ProneLaunch = pronelaunch;
  1574. /*
  1575. ** Set the animation sequence custom values.
  1576. */
  1577. for ( int i=0 ; i<DO_COUNT ; i++ ){
  1578. DoControls[i].Frame = *do_table++;
  1579. DoControls[i].Count = *do_table++;
  1580. DoControls[i].Jump = *do_table++;
  1581. }
  1582. #ifdef cuts //ST - 10/3/95 10:09AM
  1583. DoControls[DO_STAND_READY].Frame = dostandready;
  1584. DoControls[DO_STAND_READY].Count = dostandreadyframe;
  1585. DoControls[DO_STAND_READY].Jump = dostandreadyjump;
  1586. DoControls[DO_STAND_GUARD].Frame = dostandguard;
  1587. DoControls[DO_STAND_GUARD].Count = dostandguardframe;
  1588. DoControls[DO_STAND_GUARD].Jump = dostandguardjump;
  1589. DoControls[DO_PRONE].Frame = doprone;
  1590. DoControls[DO_PRONE].Count = doproneframe;
  1591. DoControls[DO_PRONE].Jump = dopronejump;
  1592. DoControls[DO_WALK].Frame = dowalk;
  1593. DoControls[DO_WALK].Count = dowalkframe;
  1594. DoControls[DO_WALK].Jump = dowalkjump;
  1595. DoControls[DO_FIRE_WEAPON].Frame = dofireweapon;
  1596. DoControls[DO_FIRE_WEAPON].Count = dofireweaponframe;
  1597. DoControls[DO_FIRE_WEAPON].Jump = dofireweaponjump;
  1598. DoControls[DO_LIE_DOWN].Frame = doliedown;
  1599. DoControls[DO_LIE_DOWN].Count = doliedownframe;
  1600. DoControls[DO_LIE_DOWN].Jump = doliedownjump;
  1601. DoControls[DO_CRAWL].Frame = docrawl;
  1602. DoControls[DO_CRAWL].Count = docrawlframe;
  1603. DoControls[DO_CRAWL].Jump = docrawljump;
  1604. DoControls[DO_GET_UP].Frame = dogetup;
  1605. DoControls[DO_GET_UP].Count = dogetupframe;
  1606. DoControls[DO_GET_UP].Jump = dogetupjump;
  1607. DoControls[DO_FIRE_PRONE].Frame = dofireprone;
  1608. DoControls[DO_FIRE_PRONE].Count = dofireproneframe;
  1609. DoControls[DO_FIRE_PRONE].Jump = dofirepronejump;
  1610. DoControls[DO_IDLE1].Frame = doidle1;
  1611. DoControls[DO_IDLE1].Count = doidle1frame;
  1612. DoControls[DO_IDLE1].Jump = doidle1jump;
  1613. DoControls[DO_IDLE2].Frame = doidle2;
  1614. DoControls[DO_IDLE2].Count = doidle2frame;
  1615. DoControls[DO_IDLE2].Jump = doidle2jump;
  1616. DoControls[DO_ON_GUARD].Frame = doonguard;
  1617. DoControls[DO_ON_GUARD].Count = doonguardframe;
  1618. DoControls[DO_ON_GUARD].Jump = doonguardjump;
  1619. DoControls[DO_FIGHT_READY].Frame = dofightready;
  1620. DoControls[DO_FIGHT_READY].Count = dofightreadyframe;
  1621. DoControls[DO_FIGHT_READY].Jump = dofightreadyjump;
  1622. DoControls[DO_PUNCH].Frame = dopunch;
  1623. DoControls[DO_PUNCH].Count = dopunchframe;
  1624. DoControls[DO_PUNCH].Jump = dopunchjump;
  1625. DoControls[DO_KICK].Frame = dokick;
  1626. DoControls[DO_KICK].Count = dokickframe;
  1627. DoControls[DO_KICK].Jump = dokickjump;
  1628. DoControls[DO_PUNCH_HIT1].Frame = dopunchhit1;
  1629. DoControls[DO_PUNCH_HIT1].Count = dopunchhit1frame;
  1630. DoControls[DO_PUNCH_HIT1].Jump = dopunchhit1jump;
  1631. DoControls[DO_PUNCH_HIT2].Frame = dopunchhit2;
  1632. DoControls[DO_PUNCH_HIT2].Count = dopunchhit2frame;
  1633. DoControls[DO_PUNCH_HIT2].Jump = dopunchhit2jump;
  1634. DoControls[DO_PUNCH_DEATH].Frame = dopunchdeath;
  1635. DoControls[DO_PUNCH_DEATH].Count = dopunchdeathframe;
  1636. DoControls[DO_PUNCH_DEATH].Jump = dopunchdeathjump;
  1637. DoControls[DO_KICK_HIT1].Frame = dokickhit1;
  1638. DoControls[DO_KICK_HIT1].Count = dokickhit1frame;
  1639. DoControls[DO_KICK_HIT1].Jump = dokickhit1jump;
  1640. DoControls[DO_KICK_HIT2].Frame = dokickhit2;
  1641. DoControls[DO_KICK_HIT2].Count = dokickhit2frame;
  1642. DoControls[DO_KICK_HIT2].Jump = dokickhit2jump;
  1643. DoControls[DO_KICK_DEATH].Frame = dokickdeath;
  1644. DoControls[DO_KICK_DEATH].Count = dokickdeathframe;
  1645. DoControls[DO_KICK_DEATH].Jump = dokickdeathjump;
  1646. DoControls[DO_READY_WEAPON].Frame = doreadyweapon;
  1647. DoControls[DO_READY_WEAPON].Count = doreadyweaponframe;
  1648. DoControls[DO_READY_WEAPON].Jump = doreadyweaponjump;
  1649. DoControls[DO_GUN_DEATH].Frame = dogundeath;
  1650. DoControls[DO_GUN_DEATH].Count = dogundeathframe;
  1651. DoControls[DO_GUN_DEATH].Jump = dogundeathjump;
  1652. DoControls[DO_EXPLOSION_DEATH].Frame = doexplosiondeath;
  1653. DoControls[DO_EXPLOSION_DEATH].Count = doexplosiondeathframe;
  1654. DoControls[DO_EXPLOSION_DEATH].Jump = doexplosiondeathjump;
  1655. DoControls[DO_EXPLOSION2_DEATH].Frame = doexplosion2death;
  1656. DoControls[DO_EXPLOSION2_DEATH].Count = doexplosion2deathframe;
  1657. DoControls[DO_EXPLOSION2_DEATH].Jump = doexplosion2deathjump;
  1658. DoControls[DO_GRENADE_DEATH].Frame = dogrenadedeath;
  1659. DoControls[DO_GRENADE_DEATH].Count = dogrenadedeathframe;
  1660. DoControls[DO_GRENADE_DEATH].Jump = dogrenadedeathjump;
  1661. DoControls[DO_FIRE_DEATH].Frame = dofiredeath;
  1662. DoControls[DO_FIRE_DEATH].Count = dofiredeathframe;
  1663. DoControls[DO_FIRE_DEATH].Jump = dofiredeathjump;
  1664. DoControls[DO_GESTURE1].Frame = dogesture1;
  1665. DoControls[DO_GESTURE1].Count = dogesture1frame;
  1666. DoControls[DO_GESTURE1].Jump = dogesture1jump;
  1667. DoControls[DO_SALUTE1].Frame = dosalute1;
  1668. DoControls[DO_SALUTE1].Count = dosalute1frame;
  1669. DoControls[DO_SALUTE1].Jump = dosalute1jump;
  1670. DoControls[DO_GESTURE2].Frame = dogesture2;
  1671. DoControls[DO_GESTURE2].Count = dogesture2frame;
  1672. DoControls[DO_GESTURE2].Jump = dogesture2jump;
  1673. DoControls[DO_SALUTE2].Frame = dosalute2;
  1674. DoControls[DO_SALUTE2].Count = dosalute2frame;
  1675. DoControls[DO_SALUTE2].Jump = dosalute2jump;
  1676. DoControls[DO_PULL_GUN].Frame = dopullgun;
  1677. DoControls[DO_PULL_GUN].Count = dopullgunframe;
  1678. DoControls[DO_PULL_GUN].Jump = dopullgunjump;
  1679. DoControls[DO_PLEAD].Frame = doplead;
  1680. DoControls[DO_PLEAD].Count = dopleadframe;
  1681. DoControls[DO_PLEAD].Jump = dopleadjump;
  1682. DoControls[DO_PLEAD_DEATH].Frame = dopleaddeath;
  1683. DoControls[DO_PLEAD_DEATH].Count = dopleaddeathframe;
  1684. DoControls[DO_PLEAD_DEATH].Jump = dopleaddeathjump;
  1685. #endif //cuts
  1686. }
  1687. /***********************************************************************************************
  1688. * InfantryTypeClass::Create_One_Of -- Creates an infantry object. *
  1689. * *
  1690. * This creates an infantry object, but does not attempt to place it on the map. It is *
  1691. * typically used by the scenario editor when an object is needed, but the location has *
  1692. * not yet been specified for where it should appear on the map. *
  1693. * *
  1694. * INPUT: house -- The owner of the infantry object. *
  1695. * *
  1696. * OUTPUT: Returns with a pointer to the created infantry object. If an object could not be *
  1697. * created, then NULL is returned. *
  1698. * *
  1699. * WARNINGS: none *
  1700. * *
  1701. * HISTORY: *
  1702. * 09/24/1994 JLB : Created. *
  1703. *=============================================================================================*/
  1704. ObjectClass * InfantryTypeClass::Create_One_Of(HouseClass * house) const
  1705. {
  1706. return(new InfantryClass(Type, house->Class->House));
  1707. }
  1708. /***********************************************************************************************
  1709. * InfantryTypeClass::Create_And_Place -- Creates and places infantry object onto the map. *
  1710. * *
  1711. * This routine is used by the scenario editor to create and place an infantry object onto *
  1712. * the map at the location specified. *
  1713. * *
  1714. * INPUT: cell -- The cell location to place the infantry object at. *
  1715. * *
  1716. * house -- The owner of the infantry object. *
  1717. * *
  1718. * OUTPUT: bool; Was the infantry object successfully created and placed at the location *
  1719. * specified? *
  1720. * *
  1721. * WARNINGS: none *
  1722. * *
  1723. * HISTORY: *
  1724. * 09/24/1994 JLB : Created. *
  1725. *=============================================================================================*/
  1726. bool InfantryTypeClass::Create_And_Place(CELL cell, HousesType house) const
  1727. {
  1728. InfantryClass * i = new InfantryClass(Type, house);
  1729. if (i) {
  1730. COORDINATE coord = Map[cell].Closest_Free_Spot(Cell_Coord(cell));
  1731. if (coord) {
  1732. return(i->Unlimbo(coord, DIR_E));
  1733. } else {
  1734. delete i;
  1735. }
  1736. }
  1737. return(false);
  1738. }
  1739. /***********************************************************************************************
  1740. * InfantryTypeClass::Occupy_List -- Returns with default infantry occupation list. *
  1741. * *
  1742. * This routine will return with a cell offset occupation list for a generic infantry *
  1743. * object. This is typically just a single cell since infantry are never bigger than one *
  1744. * cell and this routine presumes the infantry is located in the center of the cell. *
  1745. * *
  1746. * INPUT: placement -- Is this for placement legality checking only? The normal condition *
  1747. * is for marking occupation flags. *
  1748. * *
  1749. * OUTPUT: Returns with a cell offset list for the infantry object as if it were located *
  1750. * in the center of a cell. *
  1751. * *
  1752. * WARNINGS: none *
  1753. * *
  1754. * HISTORY: *
  1755. * 09/24/1994 JLB : Created. *
  1756. *=============================================================================================*/
  1757. short const * InfantryTypeClass::Occupy_List(bool) const
  1758. {
  1759. static short const _list[] = {0, REFRESH_EOL};
  1760. return(&_list[0]);
  1761. }
  1762. #ifdef SCENARIO_EDITOR
  1763. /***********************************************************************************************
  1764. * InfantryTypeClass::Display -- Displays a generic infantry object. *
  1765. * *
  1766. * This routine is used by the scenario editor to display a generic representation of the *
  1767. * infantry object for the scenario editor. It simply draws a single (nice profile) view *
  1768. * of the infantry type. *
  1769. * *
  1770. * INPUT: x,y -- The display coordinates to render the infantry object at. *
  1771. * *
  1772. * window -- The window that the display coordinates are relative to. *
  1773. * *
  1774. * house -- The house colors to use when rendering this infantry object. *
  1775. * *
  1776. * OUTPUT: none *
  1777. * *
  1778. * WARNINGS: none *
  1779. * *
  1780. * HISTORY: *
  1781. * 09/24/1994 JLB : Created. *
  1782. *=============================================================================================*/
  1783. void InfantryTypeClass::Display(int x, int y, WindowNumberType window, HousesType house) const
  1784. {
  1785. if (house != HOUSE_NONE) {
  1786. int shape = 0;
  1787. void const * ptr = Get_Cameo_Data();
  1788. if (!ptr) {
  1789. ptr = Get_Image_Data();
  1790. shape = 2;
  1791. }
  1792. CC_Draw_Shape(ptr, shape, x, y, window, SHAPE_NORMAL|SHAPE_CENTER|SHAPE_WIN_REL);
  1793. }
  1794. }
  1795. /***********************************************************************************************
  1796. * InfantryTypeClass::Prep_For_Add -- Prepares the scenario editor for adding of infantry object.*
  1797. * *
  1798. * This routine will prepare the scenario editor so that the infantry objects appear on *
  1799. * the object list. *
  1800. * *
  1801. * INPUT: none *
  1802. * *
  1803. * OUTPUT: none *
  1804. * *
  1805. * WARNINGS: none *
  1806. * *
  1807. * HISTORY: *
  1808. * 09/24/1994 JLB : Created. *
  1809. *=============================================================================================*/
  1810. void InfantryTypeClass::Prep_For_Add(void)
  1811. {
  1812. for (InfantryType index = INFANTRY_FIRST; index < INFANTRY_COUNT; index++) {
  1813. Map.Add_To_List(&As_Reference(index));
  1814. }
  1815. }
  1816. #endif
  1817. /***********************************************************************************************
  1818. * InfantryTypeClass::From_Name -- Converts an ASCII name into an infantry type number. *
  1819. * *
  1820. * This routine is used to convert the infantry ASCII name as specified into an infantry *
  1821. * type number. This is called from the INI reader routine in the process if creating the *
  1822. * infantry objects needed for the scenario. *
  1823. * *
  1824. * INPUT: name -- The ASCII name to convert into an infantry type number. *
  1825. * *
  1826. * OUTPUT: Returns with the infantry type number that corresponds to the infantry ASCII name *
  1827. * specified. If no match could be found, then INFANTRY_NONE is returned. *
  1828. * *
  1829. * WARNINGS: none *
  1830. * *
  1831. * HISTORY: *
  1832. * 09/24/1994 JLB : Created. *
  1833. *=============================================================================================*/
  1834. InfantryType InfantryTypeClass::From_Name(char const *name)
  1835. {
  1836. if (name) {
  1837. for (InfantryType classid = INFANTRY_FIRST; classid < INFANTRY_COUNT; classid++) {
  1838. if (stricmp(Pointers[classid]->IniName, name) == 0) {
  1839. return(classid);
  1840. }
  1841. }
  1842. }
  1843. return(INFANTRY_NONE);
  1844. }
  1845. /***********************************************************************************************
  1846. * InfantryTypeClass::One_Time -- Performs any one time processing for infantry system. *
  1847. * *
  1848. * This routine will perform one time processing for the infantry type system. This is *
  1849. * generally restricted to loading of the infantry shape data. *
  1850. * *
  1851. * INPUT: none *
  1852. * *
  1853. * OUTPUT: none *
  1854. * *
  1855. * WARNINGS: none *
  1856. * *
  1857. * HISTORY: *
  1858. * 09/24/1994 JLB : Created. *
  1859. *=============================================================================================*/
  1860. void InfantryTypeClass::One_Time(void)
  1861. {
  1862. InfantryType index;
  1863. for (index = INFANTRY_FIRST; index < INFANTRY_COUNT; index++) {
  1864. char fullname[_MAX_FNAME+_MAX_EXT];
  1865. InfantryTypeClass const *uclass;
  1866. CCFileClass file;
  1867. uclass = &As_Reference(index);
  1868. /*
  1869. ** Generic shape for all houses load method.
  1870. */
  1871. _makepath(fullname, NULL, NULL, uclass->IniName, ".SHP");
  1872. ((void const *&)uclass->ImageData) = MixFileClass::Retrieve(fullname);
  1873. /*
  1874. ** The small build image icon sized shapes are always generic.
  1875. */
  1876. char buffer[_MAX_FNAME];
  1877. if ( Get_Resolution_Factor() ) {
  1878. sprintf(buffer, "%.4sICNH", uclass->IniName);
  1879. } else {
  1880. sprintf(buffer, "%.4sICON", uclass->IniName);
  1881. }
  1882. _makepath(fullname, NULL, NULL, buffer, ".SHP");
  1883. ((void const *&)uclass->CameoData) = MixFileClass::Retrieve(fullname);
  1884. }
  1885. }
  1886. /***********************************************************************************************
  1887. * ITC::Init -- load up terrain set dependant sidebar icons *
  1888. * *
  1889. * *
  1890. * *
  1891. * INPUT: theater type *
  1892. * *
  1893. * OUTPUT: Nothing *
  1894. * *
  1895. * WARNINGS: None *
  1896. * *
  1897. * HISTORY: *
  1898. * 4/25/96 0:33AM ST : Created *
  1899. *=============================================================================================*/
  1900. void InfantryTypeClass::Init(TheaterType theater)
  1901. {
  1902. if ( Get_Resolution_Factor() ) {
  1903. if (theater != LastTheater){
  1904. InfantryType index;
  1905. char buffer[_MAX_FNAME];
  1906. char fullname[_MAX_FNAME+_MAX_EXT];
  1907. void const * cameo_ptr;
  1908. for (index = INFANTRY_FIRST; index < INFANTRY_COUNT; index++) {
  1909. InfantryTypeClass const *uclass;
  1910. CCFileClass file;
  1911. uclass = &As_Reference(index);
  1912. ((void const *&)uclass->CameoData) = NULL;
  1913. sprintf(buffer, "%.4sICNH", uclass->IniName);
  1914. _makepath (fullname, NULL, NULL, buffer, Theaters[theater].Suffix);
  1915. cameo_ptr = MixFileClass::Retrieve(fullname);
  1916. if (cameo_ptr){
  1917. ((void const *&)uclass->CameoData) = cameo_ptr;
  1918. }
  1919. }
  1920. }
  1921. }
  1922. }
  1923. /***********************************************************************************************
  1924. * InfantryTypeClass::Who_Can_Build_Me -- Determines what can build the infantry object. *
  1925. * *
  1926. * Use this routine to determine what building can produce the infantry object. This is *
  1927. * typically used to maintain the construction list sidebar. *
  1928. * *
  1929. * INPUT: intheory -- If no regard is to be given to whether the construction building is *
  1930. * currently busy, then this flag should be true. In such a case, only *
  1931. * the existance of the building is sufficient to achieve success. *
  1932. * *
  1933. * legal -- Should building prerequisite legality checks be performed as well? *
  1934. * For building placements, this is usually false. For sidebar button *
  1935. * adding, this is usually true. *
  1936. * *
  1937. * house -- The house of the infantry to be produced. Only construction buildings *
  1938. * of the same house are considered. *
  1939. * *
  1940. * OUTPUT: Returns with a pointer to the object (building) that can produce the infantry *
  1941. * type. If there are no available buildings then the return value is NULL. *
  1942. * *
  1943. * WARNINGS: none *
  1944. * *
  1945. * HISTORY: *
  1946. * 11/29/1994 JLB : Created. *
  1947. *=============================================================================================*/
  1948. BuildingClass * InfantryTypeClass::Who_Can_Build_Me(bool intheory, bool legal, HousesType house) const
  1949. {
  1950. BuildingClass * anybuilding = NULL;
  1951. for (int index = 0; index < Buildings.Count(); index++) {
  1952. BuildingClass * building = Buildings.Ptr(index);
  1953. if (building &&
  1954. !building->IsInLimbo &&
  1955. building->House->Class->House == house &&
  1956. building->Mission != MISSION_DECONSTRUCTION &&
  1957. building->Class->ToBuild == RTTI_INFANTRYTYPE &&
  1958. ((1L << building->ActLike) & Ownable) &&
  1959. (!legal || building->House->Can_Build(Type, building->ActLike)) &&
  1960. (intheory || !building->In_Radio_Contact())) {
  1961. anybuilding = building;
  1962. if (building->IsLeader) return(building);
  1963. }
  1964. }
  1965. return(anybuilding);
  1966. }
  1967. /***********************************************************************************************
  1968. * InfantryTypeClass::Full_Name -- Fetches the full name text number. *
  1969. * *
  1970. * This routine will fetch the full name text number for this infantry type. It examines *
  1971. * the special custom name flag to determine whether the custom name or the generic name *
  1972. * is to be used. *
  1973. * *
  1974. * INPUT: none *
  1975. * *
  1976. * OUTPUT: Returns with text number for the name to give this infantry type object. *
  1977. * *
  1978. * WARNINGS: none *
  1979. * *
  1980. * HISTORY: *
  1981. * 06/29/1995 JLB : Created. *
  1982. *=============================================================================================*/
  1983. int InfantryTypeClass::Full_Name(void) const
  1984. {
  1985. if (Debug_Map || !IsNominal || Special.IsNamed || Type == INFANTRY_C10 || Type == INFANTRY_DELPHI || Type == INFANTRY_MOEBIUS) {
  1986. return(TechnoTypeClass::Full_Name());
  1987. }
  1988. return(TXT_CIVILIAN);
  1989. }