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