IDATA.CPP (67799B)
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: /CounterStrike/IDATA.CPP 3 3/16/97 10:16p Joe_b $ */ 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 : July 19, 1996 [JLB] * 30 * * 31 *---------------------------------------------------------------------------------------------* 32 * Functions: * 33 * InfantryTypeClass::As_Reference -- Fetches a reference to the infantry type specified. * 34 * InfantryTypeClass::Create_And_Place -- Creates and places infantry object onto the map. * 35 * InfantryTypeClass::Create_One_Of -- Creates an infantry object. * 36 * InfantryTypeClass::Display -- Displays a generic infantry object. * 37 * InfantryTypeClass::From_Name -- Converts an ASCII name into an infantry type number. * 38 * InfantryTypeClass::Full_Name -- Fetches the full name text number. * 39 * InfantryTypeClass::Get_Cameo_Data -- Fetches the small cameo shape for sidebar strip. * 40 * InfantryTypeClass::InfantryTypeClass -- Constructor for infantry type class objects. * 41 * InfantryTypeClass::Init_Heap -- Initialize the infantry type class heap. * 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 obj* 45 * InfantryTypeClass::Read_INI -- Fetches infantry override values from the INI database. * 46 * InfantryTypeClass::operator delete -- Frees an infantry type class object. * 47 * InfantryTypeClass::operator new -- Allocate an infanty type class object. * 48 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 49 50 #include "function.h" 51 #include "type.h" 52 53 static DoInfoStruct DogDoControls[DO_COUNT] = { 54 {0, 1, 1}, // DO_STAND_READY 55 {0, 1, 1}, // DO_STAND_GUARD 56 {0, 1, 1}, // DO_PRONE // NA 57 {8, 6, 6}, // DO_WALK 58 {104, 14,14}, // DO_FIRE_WEAPON 59 {0, 0, 0}, // DO_LIE_DOWN // NA 60 {56, 6, 6}, // DO_CRAWL 61 {0, 0, 0}, // DO_GET_UP 62 {104, 14,14}, // DO_FIRE_PRONE 63 {216, 18,0}, // DO_IDLE1 64 {216, 18,0}, // DO_IDLE2 65 {235, 7, 0}, // DO_GUN_DEATH 66 {242, 9, 0}, // DO_EXPLOSION_DEATH 67 {242, 9, 0}, // DO_EXPLOSION2_DEATH 68 {242, 9, 0}, // DO_GRENADE_DEATH 69 {251, 14,0}, // DO_FIRE_DEATH 70 {0, 1, 0}, // DO_GESTURE1 71 {0, 1, 0}, // DO_SALUTE1 72 {0, 1, 0}, // DO_GESTURE2 73 {0, 1, 0}, // DO_SALUTE2 74 {106, 12,14}, // DO_DOG_MAUL 75 }; 76 77 78 // 79 // For the virtual do controls, we are using the TD infantry asset animation frame numbers, take out the -94 frame offsets that were added in RA 80 // 81 82 static DoInfoStruct E1DoControlsVirtual[DO_COUNT] = { 83 {0, 1, 1}, // DO_STAND_READY 84 {8, 1, 1}, // DO_STAND_GUARD 85 {192, 1, 8}, // DO_PRONE 86 {16, 6, 6}, // DO_WALK 87 {64, 8, 8}, // DO_FIRE_WEAPON 88 {128, 2, 2}, // DO_LIE_DOWN 89 {144, 4, 4}, // DO_CRAWL 90 {176, 2, 2}, // DO_GET_UP 91 {192, 6, 8}, // DO_FIRE_PRONE 92 {256, 16,0}, // DO_IDLE1 93 {272, 16,0}, // DO_IDLE2 94 {382, 8, 0}, // DO_GUN_DEATH 95 {398, 8, 0}, // DO_EXPLOSION_DEATH 96 {398, 8, 0}, // DO_EXPLOSION2_DEATH 97 {406, 12,0}, // DO_GRENADE_DEATH 98 {418, 18,0}, // DO_FIRE_DEATH 99 {436, 3, 3}, // DO_GESTURE1 100 {460, 3, 3}, // DO_SALUTE1 101 {484, 3, 3}, // DO_GESTURE2 102 {508, 3, 3}, // DO_SALUTE2 103 {0, 0, 0}, // DO_DOG_MAUL // N/A 104 }; 105 106 static DoInfoStruct E2DoControlsVirtual[DO_COUNT] = { 107 {0, 1, 1}, // DO_STAND_READY 108 {8, 1, 1}, // DO_STAND_GUARD 109 {288, 1, 12}, // DO_PRONE 110 {16, 6, 6}, // DO_WALK 111 {64, 20,20}, // DO_FIRE_WEAPON 112 {224, 2, 2}, // DO_LIE_DOWN 113 {240, 4, 4}, // DO_CRAWL 114 {272, 2, 2}, // DO_GET_UP 115 {288, 8, 12}, // DO_FIRE_PRONE 116 {384, 16,0}, // DO_IDLE1 117 {400, 16,0}, // DO_IDLE2 118 {510, 8, 0}, // DO_GUN_DEATH 119 {526, 8, 0}, // DO_EXPLOSION_DEATH 120 {526, 8, 0}, // DO_EXPLOSION2_DEATH 121 {534, 12,0}, // DO_GRENADE_DEATH 122 {546, 18,0}, // DO_FIRE_DEATH 123 {564, 3, 3}, // DO_GESTURE1 124 {588, 3, 3}, // DO_SALUTE1 125 {612, 3, 3}, // DO_GESTURE2 126 {636, 3, 3}, // DO_SALUTE2 127 {0, 0, 0}, // DO_DOG_MAUL // N/A 128 }; 129 130 static DoInfoStruct E3DoControlsVirtual[DO_COUNT] = { 131 {0, 1, 1}, // DO_STAND_READY 132 {8, 1, 1}, // DO_STAND_GUARD 133 {192, 1,10}, // DO_PRONE 134 {16, 6, 6}, // DO_WALK 135 {64, 8, 8}, // DO_FIRE_WEAPON 136 {128, 2, 2}, // DO_LIE_DOWN 137 {144, 4, 4}, // DO_CRAWL 138 {176, 2, 2}, // DO_GET_UP 139 {192, 10,10}, // DO_FIRE_PRONE 140 {272, 16,0}, // DO_IDLE1 141 {288, 16,0}, // DO_IDLE2 142 {398, 8, 0}, // DO_GUN_DEATH 143 {414, 8, 0}, // DO_EXPLOSION_DEATH 144 {414, 8, 0}, // DO_EXPLOSION2_DEATH 145 {422, 12,0}, // DO_GRENADE_DEATH 146 {434, 18,0}, // DO_FIRE_DEATH 147 {452, 3, 3}, // DO_GESTURE1 148 {476, 3, 3}, // DO_SALUTE1 149 {500, 3, 3}, // DO_GESTURE2 150 {524, 3, 3}, // DO_SALUTE2 151 {0, 0, 0}, // DO_DOG_MAUL // N/A 152 }; 153 154 static DoInfoStruct E4DoControlsVirtual[DO_COUNT] = { 155 {0, 1, 1}, // DO_STAND_READY 156 {8, 1, 1}, // DO_STAND_GUARD 157 {256, 1,16}, // DO_PRONE 158 {16, 6, 6}, // DO_WALK 159 {64, 16,16}, // DO_FIRE_WEAPON 160 {192, 2, 2}, // DO_LIE_DOWN 161 {208, 4, 4}, // DO_CRAWL 162 {240, 2, 2}, // DO_GET_UP 163 {256, 16,16}, // DO_FIRE_PRONE 164 {384, 16,0}, // DO_IDLE1 165 {400, 16,0}, // DO_IDLE2 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, 0, 0}, // DO_DOG_MAUL // N/A 176 }; 177 178 179 180 static DoInfoStruct E1DoControls[DO_COUNT] = { 181 {0, 1, 1}, // DO_STAND_READY 182 {8, 1, 1}, // DO_STAND_GUARD 183 {192, 1, 8}, // DO_PRONE 184 {16, 6, 6}, // DO_WALK 185 {64, 8, 8}, // DO_FIRE_WEAPON 186 {128, 2, 2}, // DO_LIE_DOWN 187 {144, 4, 4}, // DO_CRAWL 188 {176, 2, 2}, // DO_GET_UP 189 {192, 6, 8}, // DO_FIRE_PRONE 190 {256, 16,0}, // DO_IDLE1 191 {272, 16,0}, // DO_IDLE2 192 {382-94, 8, 0}, // DO_GUN_DEATH 193 {398-94, 8, 0}, // DO_EXPLOSION_DEATH 194 {398-94, 8, 0}, // DO_EXPLOSION2_DEATH 195 {406-94, 12,0}, // DO_GRENADE_DEATH 196 {418-94, 18,0}, // DO_FIRE_DEATH 197 {436-94, 3, 3}, // DO_GESTURE1 198 {460-94, 3, 3}, // DO_SALUTE1 199 {484-94, 3, 3}, // DO_GESTURE2 200 {508-94, 3, 3}, // DO_SALUTE2 201 {0, 0, 0}, // DO_DOG_MAUL // N/A 202 }; 203 204 static DoInfoStruct E2DoControls[DO_COUNT] = { 205 {0, 1, 1}, // DO_STAND_READY 206 {8, 1, 1}, // DO_STAND_GUARD 207 {288, 1, 12}, // DO_PRONE 208 {16, 6, 6}, // DO_WALK 209 {64, 20,20}, // DO_FIRE_WEAPON 210 {224, 2, 2}, // DO_LIE_DOWN 211 {240, 4, 4}, // DO_CRAWL 212 {272, 2, 2}, // DO_GET_UP 213 {288, 8, 12}, // DO_FIRE_PRONE 214 {384, 16,0}, // DO_IDLE1 215 {400, 16,0}, // DO_IDLE2 216 {510-94, 8, 0}, // DO_GUN_DEATH 217 {526-94, 8, 0}, // DO_EXPLOSION_DEATH 218 {526-94, 8, 0}, // DO_EXPLOSION2_DEATH 219 {534-94, 12,0}, // DO_GRENADE_DEATH 220 {546-94, 18,0}, // DO_FIRE_DEATH 221 {564-94, 3, 3}, // DO_GESTURE1 222 {588-94, 3, 3}, // DO_SALUTE1 223 {612-94, 3, 3}, // DO_GESTURE2 224 {636-94, 3, 3}, // DO_SALUTE2 225 {0, 0, 0}, // DO_DOG_MAUL // N/A 226 }; 227 228 static DoInfoStruct E3DoControls[DO_COUNT] = { 229 {0, 1, 1}, // DO_STAND_READY 230 {8, 1, 1}, // DO_STAND_GUARD 231 {192, 1,10}, // DO_PRONE 232 {16, 6, 6}, // DO_WALK 233 {64, 8, 8}, // DO_FIRE_WEAPON 234 {128, 2, 2}, // DO_LIE_DOWN 235 {144, 4, 4}, // DO_CRAWL 236 {176, 2, 2}, // DO_GET_UP 237 {192, 10,10}, // DO_FIRE_PRONE 238 {272, 16,0}, // DO_IDLE1 239 {288, 16,0}, // DO_IDLE2 240 {398-94, 8, 0}, // DO_GUN_DEATH 241 {414-94, 8, 0}, // DO_EXPLOSION_DEATH 242 {414-94, 8, 0}, // DO_EXPLOSION2_DEATH 243 {422-94, 12,0}, // DO_GRENADE_DEATH 244 {434-94, 18,0}, // DO_FIRE_DEATH 245 {452-94, 3, 3}, // DO_GESTURE1 246 {476-94, 3, 3}, // DO_SALUTE1 247 {500-94, 3, 3}, // DO_GESTURE2 248 {524-94, 3, 3}, // DO_SALUTE2 249 {0, 0, 0}, // DO_DOG_MAUL // N/A 250 }; 251 252 static DoInfoStruct E4DoControls[DO_COUNT] = { 253 {0, 1, 1}, // DO_STAND_READY 254 {8, 1, 1}, // DO_STAND_GUARD 255 {256, 1,16}, // DO_PRONE 256 {16, 6, 6}, // DO_WALK 257 {64, 16,16}, // DO_FIRE_WEAPON 258 {192, 2, 2}, // DO_LIE_DOWN 259 {208, 4, 4}, // DO_CRAWL 260 {240, 2, 2}, // DO_GET_UP 261 {256, 16,16}, // DO_FIRE_PRONE 262 {384, 16,0}, // DO_IDLE1 263 {400, 16,0}, // DO_IDLE2 264 {510-94, 8, 0}, // DO_GUN_DEATH 265 {526-94, 8, 0}, // DO_EXPLOSION_DEATH 266 {526-94, 8, 0}, // DO_EXPLOSION2_DEATH 267 {534-94, 12,0}, // DO_GRENADE_DEATH 268 {546-94, 18,0}, // DO_FIRE_DEATH 269 {564-94, 3, 3}, // DO_GESTURE1 270 {588-94, 3, 3}, // DO_SALUTE1 271 {612-94, 3, 3}, // DO_GESTURE2 272 {636-94, 3, 3}, // DO_SALUTE2 273 {0, 0, 0}, // DO_DOG_MAUL // N/A 274 }; 275 276 277 static DoInfoStruct E6DoControls[DO_COUNT] = { 278 {0, 1, 1}, // DO_STAND_READY 279 {8, 1, 1}, // DO_STAND_GUARD 280 {82, 1, 4}, // DO_PRONE 281 {16, 6, 6}, // DO_WALK 282 {0, 0, 0}, // DO_FIRE_WEAPON 283 {67, 2, 2}, // DO_LIE_DOWN 284 {82, 4, 4}, // DO_CRAWL 285 {114, 2, 2}, // DO_GET_UP 286 {0, 0, 0}, // DO_FIRE_PRONE 287 {130, 16,0}, // DO_IDLE1 288 {130, 16,0}, // DO_IDLE2 289 {146, 8, 0}, // DO_GUN_DEATH 290 {154, 8, 0}, // DO_EXPLOSION_DEATH 291 {162, 8, 0}, // DO_EXPLOSION2_DEATH 292 {170, 12,0}, // DO_GRENADE_DEATH 293 {182, 18,0}, // DO_FIRE_DEATH 294 {200, 3, 3}, // DO_GESTURE1 295 {224, 3, 3}, // DO_SALUTE1 296 {200, 3, 3}, // DO_GESTURE2 297 {224, 3, 3}, // DO_SALUTE2 298 {0, 0, 0}, // DO_DOG_MAUL // N/A 299 }; 300 301 static DoInfoStruct E7DoControls[DO_COUNT] = { 302 {0, 1, 1}, // DO_STAND_READY 303 {0, 1, 1}, // DO_STAND_GUARD 304 {128, 1, 4}, // DO_PRONE 305 {8, 6, 6}, // DO_WALK 306 {56, 7, 7}, // DO_FIRE_WEAPON 307 {113, 2, 2}, // DO_LIE_DOWN 308 {128, 4, 4}, // DO_CRAWL 309 {161, 2, 2}, // DO_GET_UP 310 {176, 7, 7}, // DO_FIRE_PRONE 311 {232, 17,0}, // DO_IDLE1 312 {249, 13,0}, // DO_IDLE2 313 {262, 8, 0}, // DO_GUN_DEATH 314 {270, 8, 0}, // DO_EXPLOSION_DEATH 315 {278, 8, 0}, // DO_EXPLOSION2_DEATH 316 {286, 12,0}, // DO_GRENADE_DEATH 317 {298, 18,0}, // DO_FIRE_DEATH 318 {0, 1, 0}, // DO_GESTURE1 319 {0, 1, 0}, // DO_SALUTE1 320 {0, 1, 0}, // DO_GESTURE2 321 {0, 1, 0}, // DO_SALUTE2 322 {0, 0, 0}, // DO_DOG_MAUL // N/A 323 }; 324 325 //Spy 326 static DoInfoStruct SpyDoControls[DO_COUNT] = { 327 {0, 1, 1}, // DO_STAND_READY 328 {8, 1, 1}, // DO_STAND_GUARD 329 {144, 1, 4}, // DO_PRONE 330 {16, 6, 6}, // DO_WALK 331 {64, 8, 8}, // DO_FIRE_WEAPON 332 {128, 2, 2}, // DO_LIE_DOWN 333 {144, 4, 4}, // DO_CRAWL 334 {176, 2, 2}, // DO_GET_UP 335 {192, 8, 8}, // DO_FIRE_PRONE 336 {256, 14,0}, // DO_IDLE1 337 {270, 18,0}, // DO_IDLE2 338 {288, 8, 0}, // DO_GUN_DEATH 339 {296, 8, 0}, // DO_EXPLOSION_DEATH 340 {304, 8, 0}, // DO_EXPLOSION2_DEATH 341 {312, 12,0}, // DO_GRENADE_DEATH 342 {324, 18,0}, // DO_FIRE_DEATH 343 {0, 1, 0}, // DO_GESTURE1 344 {0, 1, 0}, // DO_SALUTE1 345 {0, 1, 0}, // DO_GESTURE2 346 {0, 1, 0}, // DO_SALUTE2 347 {0, 0, 0}, // DO_DOG_MAUL // N/A 348 }; 349 350 static DoInfoStruct E9DoControls[DO_COUNT] = { 351 {0, 1, 1}, // DO_STAND_READY 352 {8, 1, 1}, // DO_STAND_GUARD 353 {72, 1, 4}, // DO_PRONE 354 {8, 6, 6}, // DO_WALK 355 {0, 0, 0}, // DO_FIRE_WEAPON 356 {56, 2, 2}, // DO_LIE_DOWN 357 {72, 4, 4}, // DO_CRAWL 358 {108, 2, 2}, // DO_GET_UP 359 {0, 0, 0}, // DO_FIRE_PRONE 360 {120, 19,0}, // DO_IDLE1 361 {120, 19,0}, // DO_IDLE2 362 {139, 8, 0}, // DO_GUN_DEATH 363 {147, 8, 0}, // DO_EXPLOSION_DEATH 364 {155, 8, 0}, // DO_EXPLOSION2_DEATH 365 {163, 12,0}, // DO_GRENADE_DEATH 366 {175, 18,0}, // DO_FIRE_DEATH 367 {0, 1, 0}, // DO_GESTURE1 368 {0, 1, 0}, // DO_SALUTE1 369 {0, 1, 0}, // DO_GESTURE2 370 {0, 1, 0}, // DO_SALUTE2 371 {0, 0, 0}, // DO_DOG_MAUL // N/A 372 }; 373 374 static DoInfoStruct MedicDoControls[DO_COUNT] = { 375 {0, 1, 1}, // DO_STAND_READY 376 {0, 1, 1}, // DO_STAND_GUARD 377 {130, 1, 4}, // DO_PRONE 378 {8, 6, 6}, // DO_WALK 379 {56, 28,0}, // DO_FIRE_WEAPON 380 {114, 2, 2}, // DO_LIE_DOWN 381 {130, 4, 4}, // DO_CRAWL 382 {162, 2, 2}, // DO_GET_UP 383 {56, 28,0}, // DO_FIRE_PRONE 384 {178, 15,0}, // DO_IDLE1 385 {178, 15,0}, // DO_IDLE2 386 {193, 8, 0}, // DO_GUN_DEATH 387 {210, 8, 0}, // DO_EXPLOSION_DEATH 388 {202, 8, 0}, // DO_EXPLOSION2_DEATH 389 {217, 12,0}, // DO_GRENADE_DEATH 390 {229, 18,0}, // DO_FIRE_DEATH 391 {0, 1, 0}, // DO_GESTURE1 392 {0, 1, 0}, // DO_SALUTE1 393 {0, 1, 0}, // DO_GESTURE2 394 {0, 1, 0}, // DO_SALUTE2 395 {0, 0, 0}, // DO_DOG_MAUL // N/A 396 }; 397 398 static DoInfoStruct GeneralDoControls[DO_COUNT] = { 399 {0, 1, 1}, // DO_STAND_READY 400 {0, 1, 1}, // DO_STAND_GUARD 401 {104, 1, 4}, // DO_PRONE 402 {8, 6, 6}, // DO_WALK 403 {56, 4, 4}, // DO_FIRE_WEAPON 404 {88, 2, 2}, // DO_LIE_DOWN 405 {104, 4, 4}, // DO_CRAWL 406 {136, 2, 2}, // DO_GET_UP 407 {152, 4, 4}, // DO_FIRE_PRONE 408 {184, 26,0}, // DO_IDLE1 409 {184, 26,0}, // DO_IDLE2 410 {210, 8, 0}, // DO_GUN_DEATH 411 {226, 8, 0}, // DO_EXPLOSION_DEATH 412 {218, 8, 0}, // DO_EXPLOSION2_DEATH 413 {234, 12,0}, // DO_GRENADE_DEATH 414 {246, 18,0}, // DO_FIRE_DEATH 415 {0, 1, 0}, // DO_GESTURE1 416 {0, 1, 0}, // DO_SALUTE1 417 {0, 1, 0}, // DO_GESTURE2 418 {0, 1, 0}, // DO_SALUTE2 419 {0, 0, 0}, // DO_DOG_MAUL // N/A 420 }; 421 422 static DoInfoStruct CivilianDoControls[DO_COUNT] = { 423 {0, 1, 1}, // DO_STAND_READY 424 {0, 1, 1}, // DO_STAND_GUARD 425 {0, 1, 1}, // DO_PRONE // N/A 426 {56, 6, 6}, // DO_WALK 427 {205-85, 4, 4}, // DO_FIRE_WEAPON 428 {0, 1, 1}, // DO_LIE_DOWN // N/A 429 {8, 6, 6}, // DO_CRAWL 430 {0, 1, 1}, // DO_GET_UP // N/A 431 {205-85, 4, 4}, // DO_FIRE_PRONE 432 {189-85, 10,0}, // DO_IDLE1 433 {199-85, 6, 0}, // DO_IDLE2 434 {152, 8, 0}, // DO_GUN_DEATH 435 {160, 8, 0}, // DO_EXPLOSION_DEATH 436 {160, 8, 0}, // DO_EXPLOSION2_DEATH 437 {168, 12,0}, // DO_GRENADE_DEATH 438 {180, 18,0}, // DO_FIRE_DEATH 439 {0, 1, 0}, // DO_GESTURE1 // N/A 440 {0, 1, 0}, // DO_SALUTE1 // N/A 441 {0, 1, 0}, // DO_GESTURE2 // N/A 442 {0, 1, 0}, // DO_SALUTE2 // N/A 443 {0, 0, 0}, // DO_DOG_MAUL // N/A 444 }; 445 446 static DoInfoStruct CivilianDoControlsVirtual[DO_COUNT] = { 447 {0, 1, 1}, // DO_STAND_READY 448 {0, 1, 1}, // DO_STAND_GUARD 449 {0, 1, 1}, // DO_PRONE // N/A 450 {56, 6, 6}, // DO_WALK 451 {205, 4, 4}, // DO_FIRE_WEAPON 452 {0, 1, 1}, // DO_LIE_DOWN // N/A 453 {8, 6, 6}, // DO_CRAWL 454 {0, 1, 1}, // DO_GET_UP // N/A 455 {205, 4, 4}, // DO_FIRE_PRONE 456 {189, 10,0}, // DO_IDLE1 457 {199, 6, 0}, // DO_IDLE2 458 {329, 8, 0}, // DO_GUN_DEATH 459 {337, 8, 0}, // DO_EXPLOSION_DEATH 460 {337, 8, 0}, // DO_EXPLOSION2_DEATH 461 {345, 12,0}, // DO_GRENADE_DEATH 462 {357, 18,0}, // DO_FIRE_DEATH 463 {0, 1, 0}, // DO_GESTURE1 // N/A 464 {0, 1, 0}, // DO_SALUTE1 // N/A 465 {0, 1, 0}, // DO_GESTURE2 // N/A 466 {0, 1, 0}, // DO_SALUTE2 // N/A 467 {0, 0, 0}, // DO_DOG_MAUL // N/A 468 }; 469 470 static DoInfoStruct EinsteinDoControls[DO_COUNT] = { 471 {0, 1, 1}, // DO_STAND_READY 472 {0, 1, 1}, // DO_STAND_GUARD 473 {0, 1, 1}, // DO_PRONE // N/A 474 {56, 6, 6}, // DO_WALK 475 {205-92, 4, 4}, // DO_FIRE_WEAPON 476 {0, 1, 1}, // DO_LIE_DOWN // N/A 477 {8, 6, 6}, // DO_CRAWL 478 {0, 1, 1}, // DO_GET_UP // N/A 479 {0, 0, 0}, // DO_FIRE_PRONE 480 {104, 16,0}, // DO_IDLE1 481 {104, 16,0}, // DO_IDLE2 482 {212-92, 8, 0}, // DO_GUN_DEATH 483 {220-92, 8, 0}, // DO_EXPLOSION_DEATH 484 {228-92, 12,0}, // DO_EXPLOSION2_DEATH 485 {228-92, 12,0}, // DO_GRENADE_DEATH 486 {240-92, 17,0}, // DO_FIRE_DEATH 487 {0, 1, 0}, // DO_GESTURE1 // N/A 488 {0, 1, 0}, // DO_SALUTE1 // N/A 489 {0, 1, 0}, // DO_GESTURE2 // N/A 490 {0, 1, 0}, // DO_SALUTE2 // N/A 491 {0, 0, 0}, // DO_DOG_MAUL // N/A 492 }; 493 494 // Attack dogs 495 static InfantryTypeClass const Dog( 496 INFANTRY_DOG, // Infantry type number. 497 TXT_GUARD_DOG, // Translate name number for infantry type. 498 "DOG", // INI name for infantry. 499 0x0015, // Vertical offset. 500 0x0010, // Primary weapon offset along turret centerline. 501 false, // Is this a female type? 502 false, // Has crawling animation frames? 503 false, // Is this a civilian? 504 false, // Does this unit use the override remap table? 505 false, // Always use the given name for the infantry? 506 false, // Theater specific graphic image? 507 PIP_FULL, // Transport pip shape/color to use. 508 DogDoControls, 509 DogDoControls, 510 1, // Frame of projectile launch. 511 1, // Frame of projectile launch while prone. 512 0 // pointer to override remap table 513 ); 514 515 // Minigunners 516 static InfantryTypeClass const E1( 517 INFANTRY_E1, // Infantry type number. 518 TXT_E1, // Translate name number for infantry type. 519 "E1", // INI name for infantry. 520 0x0035, // Vertical offset. 521 0x0010, // Primary weapon offset along turret centerline. 522 false, // Is this a female type? 523 true, // Has crawling animation frames? 524 false, // Is this a civilian? 525 false, // Does this unit use the override remap table? 526 false, // Always use the given name for the infantry? 527 false, // Theater specific graphic image? 528 PIP_FULL, // Transport pip shape/color to use. 529 E1DoControls, 530 E1DoControlsVirtual, 531 2, // Frame of projectile launch. 532 2, // Frame of projectile launch while prone. 533 0 // pointer to override remap table 534 ); 535 536 // Grenadiers 537 static InfantryTypeClass const E2( 538 INFANTRY_E2, // Infantry type number. 539 TXT_E2, // Translate name number for infantry type. 540 "E2", // INI name for infantry. 541 0x0035, // Vertical offset. 542 0x0010, // Primary weapon offset along turret centerline. 543 false, // Is this a female type? 544 true, // Has crawling animation frames? 545 false, // Is this a civilian? 546 false, // Does this unit use the override remap table? 547 false, // Always use the given name for the infantry? 548 false, // Theater specific graphic image? 549 PIP_FULL, // Transport pip shape/color to use. 550 E2DoControls, 551 E2DoControlsVirtual, 552 14, // Frame of projectile launch. 553 6, // Frame of projectile launch while prone. 554 0 // pointer to override remap table 555 ); 556 557 // Bazooka 558 static InfantryTypeClass const E3( 559 INFANTRY_E3, // Infantry type number. 560 TXT_E3, // Translate name number for infantry type. 561 "E3", // INI name for infantry. 562 0x0035, // Vertical offset. 563 0x0010, // Primary weapon offset along turret centerline. 564 false, // Is this a female type? 565 true, // Has crawling animation frames? 566 false, // Is this a civilian? 567 false, // Does this unit use the override remap table? 568 false, // Always use the given name for the infantry? 569 false, // Theater specific graphic image? 570 PIP_FULL, // Transport pip shape/color to use. 571 E3DoControls, 572 E3DoControlsVirtual, 573 3, // Frame of projectile launch. 574 3, // Frame of projectile launch while prone. 575 0 // pointer to override remap table 576 ); 577 578 // Flamethrower 579 static InfantryTypeClass const E4( 580 INFANTRY_E4, // Infantry type number. 581 TXT_E4, // Translate name number for infantry type. 582 "E4", // INI name for infantry. 583 0x0035, // Vertical offset. 584 0x0010, // Primary weapon offset along turret centerline. 585 false, // Is this a female type? 586 true, // Has crawling animation frames? 587 false, // Is this a civilian? 588 false, // Does this unit use the override remap table? 589 false, // Always use the given name for the infantry? 590 false, // Theater specific graphic image? 591 PIP_FULL, // Transport pip shape/color to use. 592 E4DoControls, 593 E4DoControlsVirtual, 594 2, // Frame of projectile launch. 595 0, // Frame of projectile launch while prone. 596 0 // pointer to override remap table 597 ); 598 599 // Renovator 600 static InfantryTypeClass const E6( 601 INFANTRY_RENOVATOR, // Infantry type number. 602 TXT_E6, // Translate name number for infantry type. 603 "E6", // INI name for infantry. 604 0x0035, // Vertical offset. 605 0x0010, // Primary weapon offset along turret centerline. 606 false, // Is this a female type? 607 false, // Has crawling animation frames? 608 false, // Is this a civilian? 609 false, // Does this unit use the override remap table? 610 false, // Always use the given name for the infantry? 611 false, // Theater specific graphic image? 612 PIP_ENGINEER, // Transport pip shape/color to use. 613 E6DoControls, 614 E6DoControls, 615 3, // Frame of projectile launch. 616 3, // Frame of projectile launch while prone. 617 0 // pointer to override remap table 618 ); 619 620 // Spy 621 static InfantryTypeClass const E8( 622 INFANTRY_SPY, // Infantry type number. 623 TXT_E8, // Translate name number for infantry type. 624 "SPY", // INI name for infantry. 625 0x0035, // Vertical offset. 626 0x0010, // Primary weapon offset along turret centerline. 627 false, // Is this a female type? 628 false, // Has crawling animation frames? 629 false, // Is this a civilian? 630 false, // Does this unit use the override remap table? 631 false, // Always use the given name for the infantry? 632 false, // Theater specific graphic image? 633 PIP_ENGINEER, // Transport pip shape/color to use. 634 SpyDoControls, 635 SpyDoControls, 636 3, // Frame of projectile launch. 637 3, // Frame of projectile launch while prone. 638 0 // pointer to override remap table 639 ); 640 641 // Thief 642 static InfantryTypeClass const E9( 643 INFANTRY_THIEF, // Infantry type number. 644 TXT_THIEF, // Translate name number for infantry type. 645 "THF", // INI name for infantry. 646 0x0035, // Vertical offset. 647 0x0010, // Primary weapon offset along turret centerline. 648 false, // Is this a female type? 649 false, // Has crawling animation frames? 650 false, // Is this a civilian? 651 false, // Does this unit use the override remap table? 652 false, // Always use the given name for the infantry? 653 false, // Theater specific graphic image? 654 PIP_ENGINEER, // Transport pip shape/color to use. 655 E9DoControls, 656 E9DoControls, 657 3, // Frame of projectile launch. 658 3, // Frame of projectile launch while prone. 659 0 // pointer to override remap table 660 ); 661 662 // Tanya 663 static InfantryTypeClass const E7( 664 INFANTRY_TANYA, // Infantry type number. 665 TXT_E7, // Translate name number for infantry type. 666 "E7", // INI name for infantry. 667 0x0035, // Vertical offset. 668 0x0010, // Primary weapon offset along turret centerline. 669 false, // Is this a female type? 670 true, // Has crawling animation frames? 671 false, // Is this a civilian? 672 false, // Does this unit use the override remap table? 673 false, // Always use the given name for the infantry? 674 false, // Theater specific graphic image? 675 PIP_COMMANDO, // Transport pip shape/color to use. 676 E7DoControls, 677 E7DoControls, 678 2, // Frame of projectile launch. 679 2, // Frame of projectile launch while prone. 680 0 // pointer to override remap table 681 ); 682 683 static InfantryTypeClass const Medic( 684 INFANTRY_MEDIC, // Infantry type number. 685 TXT_MEDIC, // Translate name number for infantry type. 686 "MEDI", // INI name for infantry. 687 0x0035, // Vertical offset. 688 0x0010, // Primary weapon offset along turret centerline. 689 false, // Is this a female type? 690 true, // Has crawling animation frames? 691 false, // Is this a civilian? 692 false, // Does this unit use the override remap table? 693 false, // Always use the given name for the infantry? 694 false, // Theater specific graphic image? 695 PIP_ENGINEER, // Transport pip shape/color to use. 696 MedicDoControls, 697 MedicDoControls, 698 25, // Frame of projectile launch. 699 25, // Frame of projectile launch while prone. 700 0 // pointer to override remap table 701 ); 702 703 static InfantryTypeClass const General( 704 INFANTRY_GENERAL, // Infantry type number. 705 TXT_GENERAL, // Translate name number for infantry type. 706 "GNRL", // INI name for infantry. 707 0x0035, // Vertical offset. 708 0x0010, // Primary weapon offset along turret centerline. 709 false, // Is this a female type? 710 true, // Has crawling animation frames? 711 false, // Is this a civilian? 712 false, // Does this unit use the override remap table? 713 false, // Always use the given name for the infantry? 714 false, // Theater specific graphic image? 715 PIP_ENGINEER, // Transport pip shape/color to use. 716 GeneralDoControls, 717 GeneralDoControls, 718 2, // Frame of projectile launch. 719 2, // Frame of projectile launch while prone. 720 0 // pointer to override remap table 721 ); 722 723 // Civilians 724 static InfantryTypeClass const C1( 725 INFANTRY_C1, // Infantry type number. 726 TXT_C1, // Translate name number for infantry type. 727 "C1", // INI name for infantry. 728 0x0035, // Vertical offset. 729 0x0010, // Primary weapon offset along turret centerline. 730 false, // Is this a female type? 731 false, // Has crawling animation frames? 732 true, // Is this a civilian? 733 false, // Does this unit use the override remap table? 734 true, // Always use the given name for the infantry? 735 false, // Theater specific graphic image? 736 PIP_CIVILIAN, // Transport pip shape/color to use. 737 CivilianDoControls, 738 CivilianDoControlsVirtual, 739 2, // Frame of projectile launch. 740 0, // Frame of projectile launch while prone. 741 0 // pointer to override remap table 742 ); 743 744 static InfantryTypeClass const C2( 745 INFANTRY_C2, // Infantry type number. 746 TXT_C2, // Translate name number for infantry type. 747 "C2", // INI name for infantry. 748 0x0035, // Vertical offset. 749 0x0010, // Primary weapon offset along turret centerline. 750 false, // Is this a female type? 751 false, // Has crawling animation frames? 752 true, // Is this a civilian? 753 true, // Does this unit use the override remap table? 754 true, // Always use the given name for the infantry? 755 false, // Theater specific graphic image? 756 PIP_CIVILIAN, // Transport pip shape/color to use. 757 CivilianDoControls, 758 CivilianDoControlsVirtual, 759 2, // Frame of projectile launch. 760 0, // Frame of projectile launch while prone. 761 RemapCiv2 // pointer to override remap table 762 ); 763 764 static InfantryTypeClass const C3( 765 INFANTRY_C3, // Infantry type number. 766 TXT_C3, // Translate name number for infantry type. 767 "C3", // INI name for infantry. 768 0x0035, // Vertical offset. 769 0x0010, // Primary weapon offset along turret centerline. 770 true, // Is this a female type? 771 false, // Has crawling animation frames? 772 true, // Is this a civilian? 773 false, // Does this unit use the override remap table? 774 true, // Always use the given name for the infantry? 775 false, // Theater specific graphic image? 776 PIP_CIVILIAN, // Transport pip shape/color to use. 777 CivilianDoControls, 778 CivilianDoControlsVirtual, 779 2, // Frame of projectile launch. 780 0, // Frame of projectile launch while prone. 781 0 // pointer to override remap table 782 ); 783 784 static InfantryTypeClass const C4( 785 INFANTRY_C4, // Infantry type number. 786 TXT_C4, // Translate name number for infantry type. 787 "C4", // INI name for infantry. 788 0x0035, // Vertical offset. 789 0x0010, // Primary weapon offset along turret centerline. 790 true, // Is this a female type? 791 false, // Has crawling animation frames? 792 true, // Is this a civilian? 793 true, // Does this unit use the override remap table? 794 true, // Always use the given name for the infantry? 795 false, // Theater specific graphic image? 796 PIP_CIVILIAN, // Transport pip shape/color to use. 797 CivilianDoControls, 798 CivilianDoControlsVirtual, 799 2, // Frame of projectile launch. 800 0, // Frame of projectile launch while prone. 801 RemapCiv4 // pointer to override remap table 802 ); 803 804 static InfantryTypeClass const C5( 805 INFANTRY_C5, // Infantry type number. 806 TXT_C5, // Translate name number for infantry type. 807 "C5", // INI name for infantry. 808 0x0035, // Vertical offset. 809 0x0010, // Primary weapon offset along turret centerline. 810 false, // Is this a female type? 811 false, // Has crawling animation frames? 812 true, // Is this a civilian? 813 true, // Does this unit use the override remap table? 814 true, // Always use the given name for the infantry? 815 false, // Theater specific graphic image? 816 PIP_CIVILIAN, // Transport pip shape/color to use. 817 CivilianDoControls, 818 CivilianDoControlsVirtual, 819 2, // Frame of projectile launch. 820 0, // Frame of projectile launch while prone. 821 RemapCiv5 // pointer to override remap table 822 ); 823 824 static InfantryTypeClass const C6( 825 INFANTRY_C6, // Infantry type number. 826 TXT_C6, // Translate name number for infantry type. 827 "C6", // INI name for infantry. 828 0x0035, // Vertical offset. 829 0x0010, // Primary weapon offset along turret centerline. 830 false, // Is this a female type? 831 false, // Has crawling animation frames? 832 true, // Is this a civilian? 833 true, // Does this unit use the override remap table? 834 true, // Always use the given name for the infantry? 835 false, // Theater specific graphic image? 836 PIP_CIVILIAN, // Transport pip shape/color to use. 837 CivilianDoControls, 838 CivilianDoControlsVirtual, 839 2, // Frame of projectile launch. 840 0, // Frame of projectile launch while prone. 841 RemapCiv6 // pointer to override remap table 842 ); 843 844 static InfantryTypeClass const C7( 845 INFANTRY_C7, // Infantry type number. 846 TXT_C7, // Translate name number for infantry type. 847 "C7", // INI name for infantry. 848 0x0035, // Vertical offset. 849 0x0010, // Primary weapon offset along turret centerline. 850 false, // Is this a female type? 851 false, // Has crawling animation frames? 852 true, // Is this a civilian? 853 true, // Does this unit use the override remap table? 854 true, // Always use the given name for the infantry? 855 false, // Theater specific graphic image? 856 PIP_CIVILIAN, // Transport pip shape/color to use. 857 CivilianDoControls, 858 CivilianDoControlsVirtual, 859 2, // Frame of projectile launch. 860 0, // Frame of projectile launch while prone. 861 RemapCiv7 // pointer to override remap table 862 ); 863 864 static InfantryTypeClass const C8( 865 INFANTRY_C8, // Infantry type number. 866 TXT_C8, // Translate name number for infantry type. 867 "C8", // INI name for infantry. 868 0x0035, // Vertical offset. 869 0x0010, // Primary weapon offset along turret centerline. 870 false, // Is this a female type? 871 false, // Has crawling animation frames? 872 true, // Is this a civilian? 873 true, // Does this unit use the override remap table? 874 true, // Always use the given name for the infantry? 875 false, // Theater specific graphic image? 876 PIP_CIVILIAN, // Transport pip shape/color to use. 877 CivilianDoControls, 878 CivilianDoControlsVirtual, 879 2, // Frame of projectile launch. 880 0, // Frame of projectile launch while prone. 881 RemapCiv8 // pointer to override remap table 882 ); 883 884 static InfantryTypeClass const C9( 885 INFANTRY_C9, // Infantry type number. 886 TXT_C9, // Translate name number for infantry type. 887 "C9", // INI name for infantry. 888 0x0035, // Vertical offset. 889 0x0010, // Primary weapon offset along turret centerline. 890 false, // Is this a female type? 891 false, // Has crawling animation frames? 892 true, // Is this a civilian? 893 true, // Does this unit use the override remap table? 894 true, // Always use the given name for the infantry? 895 false, // Theater specific graphic image? 896 PIP_CIVILIAN, // Transport pip shape/color to use. 897 CivilianDoControls, 898 CivilianDoControlsVirtual, 899 2, // Frame of projectile launch. 900 0, // Frame of projectile launch while prone. 901 RemapCiv9 // pointer to override remap table 902 ); 903 904 // Nikoomba 905 static InfantryTypeClass const C10( 906 INFANTRY_C10, // Infantry type number. 907 TXT_C10, // Translate name number for infantry type. 908 "C10", // INI name for infantry. 909 0x0035, // Vertical offset. 910 0x0010, // Primary weapon offset along turret centerline. 911 false, // Is this a female type? 912 false, // Has crawling animation frames? 913 true, // Is this a civilian? 914 true, // Does this unit use the override remap table? 915 true, // Always use the given name for the infantry? 916 false, // Theater specific graphic image? 917 PIP_ENGINEER, // Transport pip shape/color to use. 918 CivilianDoControls, 919 CivilianDoControlsVirtual, 920 2, // Frame of projectile launch. 921 0, // Frame of projectile launch while prone. 922 RemapCiv10 // pointer to override remap table 923 ); 924 925 static InfantryTypeClass const Einstein( 926 INFANTRY_EINSTEIN, // Infantry type number. 927 TXT_EINSTEIN, // Translate name number for infantry type. 928 "EINSTEIN", // INI name for infantry. 929 0x0035, // Vertical offset. 930 0x0010, // Primary weapon offset along turret centerline. 931 false, // Is this a female type? 932 false, // Has crawling animation frames? 933 true, // Is this a civilian? 934 false, // Does this unit use the override remap table? 935 true, // Always use the given name for the infantry? 936 false, // Theater specific graphic image? 937 PIP_ENGINEER, // Transport pip shape/color to use. 938 EinsteinDoControls, 939 EinsteinDoControls, 940 0, // Frame of projectile launch. 941 0, // Frame of projectile launch while prone. 942 0 // pointer to override remap table 943 ); 944 945 static InfantryTypeClass const Delphi( 946 INFANTRY_DELPHI, // Infantry type number. 947 TXT_DELPHI, // Translate name number for infantry type. 948 "DELPHI", // INI name for infantry. 949 0x0035, // Vertical offset. 950 0x0010, // Primary weapon offset along turret centerline. 951 false, // Is this a female type? 952 false, // Has crawling animation frames? 953 true, // Is this a civilian? 954 false, // Does this unit use the override remap table? 955 true, // Always use the given name for the infantry? 956 false, // Theater specific graphic image? 957 PIP_ENGINEER, // Transport pip shape/color to use. 958 CivilianDoControls, 959 CivilianDoControlsVirtual, 960 2, // Frame of projectile launch. 961 0, // Frame of projectile launch while prone. 962 0 // pointer to override remap table 963 ); 964 965 static InfantryTypeClass const DrChan( 966 INFANTRY_CHAN, // Infantry type number. 967 TXT_CHAN, // Translate name number for infantry type. 968 "CHAN", // INI name for infantry. 969 0x0035, // Vertical offset. 970 0x0010, // Primary weapon offset along turret centerline. 971 false, // Is this a female type? 972 false, // Has crawling animation frames? 973 true, // Is this a civilian? 974 false, // Does this unit use the override remap table? 975 true, // Always use the given name for the infantry? 976 false, // Theater specific graphic image? 977 PIP_ENGINEER, // Transport pip shape/color to use. 978 EinsteinDoControls, 979 EinsteinDoControls, 980 2, // Frame of projectile launch. 981 0, // Frame of projectile launch while prone. 982 0 // pointer to override remap table 983 ); 984 985 #ifdef FIXIT_CSII // checked - ajw 9/28/98 986 987 // Shock Trooper 988 static InfantryTypeClass const ShockTrooper( 989 INFANTRY_SHOCK, // Infantry type number. 990 TXT_SHOCKTROOPER, // Translate name number for infantry type. 991 "SHOK", // INI name for infantry. 992 -0x0010, // Vertical offset. 993 0x0038, // Primary weapon offset along turret centerline. 994 false, // Is this a female type? 995 true, // Has crawling animation frames? 996 false, // Is this a civilian? 997 false, // Does this unit use the override remap table? 998 false, // Always use the given name for the infantry? 999 false, // Theater specific graphic image? 1000 PIP_FULL, // Transport pip shape/color to use. 1001 E4DoControls, 1002 E4DoControls, 1003 2, // Frame of projectile launch. 1004 0, // Frame of projectile launch while prone. 1005 0, // pointer to override remap table 1006 0x0018 // Horizontal offset. 1007 ); 1008 1009 1010 static InfantryTypeClass const Mechanic( 1011 INFANTRY_MECHANIC, // Infantry type number. 1012 TXT_MECHANIC, // Translate name number for infantry type. 1013 "MECH", // INI name for infantry. 1014 0x0035, // Vertical offset. 1015 0x0010, // Primary weapon offset along turret centerline. 1016 false, // Is this a female type? 1017 true, // Has crawling animation frames? 1018 false, // Is this a civilian? 1019 false, // Does this unit use the override remap table? 1020 false, // Always use the given name for the infantry? 1021 false, // Theater specific graphic image? 1022 PIP_ENGINEER, // Transport pip shape/color to use. 1023 MedicDoControls, 1024 MedicDoControls, 1025 25, // Frame of projectile launch. 1026 25, // Frame of projectile launch while prone. 1027 0 // pointer to override remap table 1028 ); 1029 #endif 1030 1031 /*********************************************************************************************** 1032 * InfantryTypeClass::InfantryTypeClass -- Constructor for infantry type class objects. * 1033 * * 1034 * This routine will construct the infantry type objects. It is use to create the static * 1035 * infantry types that are used to give each of the infantry objects their characteristics. * 1036 * * 1037 * INPUT: see below... * 1038 * * 1039 * OUTPUT: none * 1040 * * 1041 * WARNINGS: none * 1042 * * 1043 * HISTORY: * 1044 * 09/24/1994 JLB : Created. * 1045 * 02/16/1996 JLB : Greatly simplified. * 1046 *=============================================================================================*/ 1047 InfantryTypeClass::InfantryTypeClass ( 1048 InfantryType type, 1049 int name, 1050 char const * ininame, 1051 int verticaloffset, 1052 int primaryoffset, 1053 bool is_female, 1054 bool is_crawling, 1055 bool is_civilian, 1056 bool is_remap_override, 1057 bool is_nominal, 1058 bool is_theater, 1059 PipEnum pip, 1060 DoInfoStruct const * control, 1061 DoInfoStruct const * virtual_control, 1062 int firelaunch, 1063 int pronelaunch, 1064 unsigned char const * override_remap, 1065 int horizontaloffset) 1066 : TechnoTypeClass(RTTI_INFANTRYTYPE, 1067 int(type), 1068 name, 1069 ininame, 1070 REMAP_NORMAL, 1071 verticaloffset, 1072 primaryoffset, 1073 0x0000, 1074 0x0000, 1075 0x0000, 1076 is_nominal, 1077 true, 1078 true, 1079 true, 1080 false, 1081 false, 1082 is_theater, 1083 false, 1084 true, 1085 true, 1086 8, 1087 SPEED_FOOT, 1088 horizontaloffset), 1089 IsFemale(is_female), 1090 IsCrawling(is_crawling), 1091 IsCapture(false), 1092 IsFraidyCat(false), 1093 IsCivilian(is_civilian), 1094 IsBomber(false), 1095 IsDog(false), 1096 IsRemapOverride(is_remap_override), 1097 Type(type), 1098 Pip(pip), 1099 DoControls(control), 1100 DoControlsVirtual(virtual_control), 1101 FireLaunch(firelaunch), 1102 ProneLaunch(pronelaunch), 1103 OverrideRemap(override_remap) 1104 { 1105 /* 1106 ** Forced infantry overrides from the default. 1107 */ 1108 IsCrushable = true; 1109 IsScanner = true; 1110 IsRepairable = false; 1111 IsCrew = false; 1112 Speed = SPEED_FOOT; 1113 } 1114 1115 1116 /*********************************************************************************************** 1117 * InfantryTypeClass::operator new -- Allocate an infanty type class object. * 1118 * * 1119 * This will allocate an infantry type class object from the special memory pool of that * 1120 * purpose. * 1121 * * 1122 * INPUT: none * 1123 * * 1124 * OUTPUT: Returns with a pointer to the infantry type class object allocated. If there was * 1125 * insufficient memory to fulfill the request, then NULL is returned. * 1126 * * 1127 * WARNINGS: none * 1128 * * 1129 * HISTORY: * 1130 * 07/11/1996 JLB : Created. * 1131 *=============================================================================================*/ 1132 void * InfantryTypeClass::operator new(size_t) 1133 { 1134 return(InfantryTypes.Alloc()); 1135 } 1136 1137 1138 /*********************************************************************************************** 1139 * InfantryTypeClass::operator delete -- Frees an infantry type class object. * 1140 * * 1141 * This will return a previously allocated infantry type class object back to the memory * 1142 * pool from whence it came. * 1143 * * 1144 * INPUT: pointer -- The pointer to the infantry type class object to free. * 1145 * * 1146 * OUTPUT: none * 1147 * * 1148 * WARNINGS: none * 1149 * * 1150 * HISTORY: * 1151 * 07/11/1996 JLB : Created. * 1152 *=============================================================================================*/ 1153 void InfantryTypeClass::operator delete(void * pointer) 1154 { 1155 InfantryTypes.Free((InfantryTypeClass *)pointer); 1156 } 1157 1158 1159 /*********************************************************************************************** 1160 * InfantryTypeClass::Init_Heap -- Initialize the infantry type class heap. * 1161 * * 1162 * This will pre-allocate all known infantry types. * 1163 * * 1164 * INPUT: none * 1165 * * 1166 * OUTPUT: none * 1167 * * 1168 * WARNINGS: Call this routine once and before the rules.ini file is processed. * 1169 * * 1170 * HISTORY: * 1171 * 07/11/1996 JLB : Created. * 1172 *=============================================================================================*/ 1173 void InfantryTypeClass::Init_Heap(void) 1174 { 1175 /* 1176 ** These infantry type class objects must be allocated in the exact order that they 1177 ** are specified in the InfantryType enumeration. This is necessary because the heap 1178 ** allocation block index serves double duty as the type number index. 1179 */ 1180 new InfantryTypeClass(E1); 1181 new InfantryTypeClass(E2); 1182 new InfantryTypeClass(E3); 1183 new InfantryTypeClass(E4); 1184 new InfantryTypeClass(E6); 1185 new InfantryTypeClass(E7); 1186 new InfantryTypeClass(E8); 1187 new InfantryTypeClass(E9); 1188 new InfantryTypeClass(Medic); 1189 new InfantryTypeClass(General); 1190 new InfantryTypeClass(Dog); 1191 new InfantryTypeClass(C1); 1192 new InfantryTypeClass(C2); 1193 new InfantryTypeClass(C3); 1194 new InfantryTypeClass(C4); 1195 new InfantryTypeClass(C5); 1196 new InfantryTypeClass(C6); 1197 new InfantryTypeClass(C7); 1198 new InfantryTypeClass(C8); 1199 new InfantryTypeClass(C9); 1200 new InfantryTypeClass(C10); 1201 new InfantryTypeClass(Einstein); 1202 new InfantryTypeClass(Delphi); 1203 new InfantryTypeClass(DrChan); 1204 #ifdef FIXIT_CSII // checked - ajw 9/28/98 1205 new InfantryTypeClass(ShockTrooper); 1206 new InfantryTypeClass(Mechanic); 1207 #endif 1208 } 1209 1210 1211 /*********************************************************************************************** 1212 * InfantryTypeClass::Create_One_Of -- Creates an infantry object. * 1213 * * 1214 * This creates an infantry object, but does not attempt to place it on the map. It is * 1215 * typically used by the scenario editor when an object is needed, but the location has * 1216 * not yet been specified for where it should appear on the map. * 1217 * * 1218 * INPUT: house -- The owner of the infantry object. * 1219 * * 1220 * OUTPUT: Returns with a pointer to the created infantry object. If an object could not be * 1221 * created, then NULL is returned. * 1222 * * 1223 * WARNINGS: none * 1224 * * 1225 * HISTORY: * 1226 * 09/24/1994 JLB : Created. * 1227 *=============================================================================================*/ 1228 ObjectClass * InfantryTypeClass::Create_One_Of(HouseClass * house) const 1229 { 1230 return(new InfantryClass(Type, house->Class->House)); 1231 } 1232 1233 1234 /*********************************************************************************************** 1235 * InfantryTypeClass::Create_And_Place -- Creates and places infantry object onto the map. * 1236 * * 1237 * This routine is used by the scenario editor to create and place an infantry object onto * 1238 * the map at the location specified. * 1239 * * 1240 * INPUT: cell -- The cell location to place the infantry object at. * 1241 * * 1242 * house -- The owner of the infantry object. * 1243 * * 1244 * OUTPUT: bool; Was the infantry object successfully created and placed at the location * 1245 * specified? * 1246 * * 1247 * WARNINGS: none * 1248 * * 1249 * HISTORY: * 1250 * 09/24/1994 JLB : Created. * 1251 *=============================================================================================*/ 1252 bool InfantryTypeClass::Create_And_Place(CELL cell, HousesType house) const 1253 { 1254 InfantryClass * i = new InfantryClass(Type, house); 1255 if (i != NULL) { 1256 COORDINATE coord = Map[cell].Closest_Free_Spot(Cell_Coord(cell)); 1257 if (coord) { 1258 return(i->Unlimbo(coord, DIR_E)); 1259 } else { 1260 delete i; 1261 } 1262 } 1263 return(false); 1264 } 1265 1266 1267 /*********************************************************************************************** 1268 * InfantryTypeClass::Occupy_List -- Returns with default infantry occupation list. * 1269 * * 1270 * This routine will return with a cell offset occupation list for a generic infantry * 1271 * object. This is typically just a single cell since infantry are never bigger than one * 1272 * cell and this routine presumes the infantry is located in the center of the cell. * 1273 * * 1274 * INPUT: placement -- Is this for placement legality checking only? The normal condition * 1275 * is for marking occupation flags. * 1276 * * 1277 * OUTPUT: Returns with a cell offset list for the infantry object as if it were located * 1278 * in the center of a cell. * 1279 * * 1280 * WARNINGS: none * 1281 * * 1282 * HISTORY: * 1283 * 09/24/1994 JLB : Created. * 1284 *=============================================================================================*/ 1285 short const * InfantryTypeClass::Occupy_List(bool) const 1286 { 1287 static short const _list[] = {0, REFRESH_EOL}; 1288 1289 return(&_list[0]); 1290 } 1291 1292 1293 #ifdef SCENARIO_EDITOR 1294 /*********************************************************************************************** 1295 * InfantryTypeClass::Display -- Displays a generic infantry object. * 1296 * * 1297 * This routine is used by the scenario editor to display a generic representation of the * 1298 * infantry object for the scenario editor. It simply draws a single (nice profile) view * 1299 * of the infantry type. * 1300 * * 1301 * INPUT: x,y -- The display coordinates to render the infantry object at. * 1302 * * 1303 * window -- The window that the display coordinates are relative to. * 1304 * * 1305 * house -- The house colors to use when rendering this infantry object. * 1306 * * 1307 * OUTPUT: none * 1308 * * 1309 * WARNINGS: none * 1310 * * 1311 * HISTORY: * 1312 * 09/24/1994 JLB : Created. * 1313 *=============================================================================================*/ 1314 void InfantryTypeClass::Display(int x, int y, WindowNumberType window, HousesType house) const 1315 { 1316 if (house != HOUSE_NONE) { 1317 1318 int shape = 0; 1319 void const * ptr = Get_Cameo_Data(); 1320 if (ptr == NULL) { 1321 ptr = Get_Image_Data(); 1322 shape = 2; 1323 } 1324 1325 CC_Draw_Shape(ptr, shape, x, y, window, SHAPE_NORMAL|SHAPE_CENTER|SHAPE_WIN_REL); 1326 } 1327 } 1328 1329 1330 /*********************************************************************************************** 1331 * InfantryTypeClass::Prep_For_Add -- Prepares the scenario editor for adding of infantry object.* 1332 * * 1333 * This routine will prepare the scenario editor so that the infantry objects appear on * 1334 * the object list. * 1335 * * 1336 * INPUT: none * 1337 * * 1338 * OUTPUT: none * 1339 * * 1340 * WARNINGS: none * 1341 * * 1342 * HISTORY: * 1343 * 09/24/1994 JLB : Created. * 1344 *=============================================================================================*/ 1345 void InfantryTypeClass::Prep_For_Add(void) 1346 { 1347 for (InfantryType index = INFANTRY_FIRST; index < INFANTRY_COUNT; index++) { 1348 Map.Add_To_List(&As_Reference(index)); 1349 } 1350 } 1351 #endif 1352 1353 1354 /*********************************************************************************************** 1355 * InfantryTypeClass::From_Name -- Converts an ASCII name into an infantry type number. * 1356 * * 1357 * This routine is used to convert the infantry ASCII name as specified into an infantry * 1358 * type number. This is called from the INI reader routine in the process if creating the * 1359 * infantry objects needed for the scenario. * 1360 * * 1361 * INPUT: name -- The ASCII name to convert into an infantry type number. * 1362 * * 1363 * OUTPUT: Returns with the infantry type number that corresponds to the infantry ASCII name * 1364 * specified. If no match could be found, then INFANTRY_NONE is returned. * 1365 * * 1366 * WARNINGS: none * 1367 * * 1368 * HISTORY: * 1369 * 09/24/1994 JLB : Created. * 1370 *=============================================================================================*/ 1371 InfantryType InfantryTypeClass::From_Name(char const * name) 1372 { 1373 if (name != NULL) { 1374 for (InfantryType classid = INFANTRY_FIRST; classid < INFANTRY_COUNT; classid++) { 1375 if (stricmp(As_Reference(classid).IniName, name) == 0) { 1376 return(classid); 1377 } 1378 } 1379 } 1380 return(INFANTRY_NONE); 1381 } 1382 1383 1384 /*********************************************************************************************** 1385 * InfantryTypeClass::One_Time -- Performs any one time processing for infantry system. * 1386 * * 1387 * This routine will perform one time processing for the infantry type system. This is * 1388 * generally restricted to loading of the infantry shape data. * 1389 * * 1390 * INPUT: none * 1391 * * 1392 * OUTPUT: none * 1393 * * 1394 * WARNINGS: none * 1395 * * 1396 * HISTORY: * 1397 * 09/24/1994 JLB : Created. * 1398 *=============================================================================================*/ 1399 void InfantryTypeClass::One_Time(void) 1400 { 1401 for (InfantryType index = INFANTRY_FIRST; index < INFANTRY_COUNT; index++) { 1402 char fullname[_MAX_FNAME+_MAX_EXT]; 1403 InfantryTypeClass const * uclass; 1404 CCFileClass file; 1405 1406 uclass = &As_Reference(index); 1407 1408 /* 1409 ** Generic shape for all houses load method. 1410 */ 1411 _makepath(fullname, NULL, NULL, uclass->Graphic_Name(), ".SHP"); 1412 1413 #ifndef NDEBUG 1414 RawFileClass sfile(fullname); 1415 if (sfile.Is_Available()) { 1416 ((void const *&)uclass->ImageData) = Load_Alloc_Data(sfile); 1417 } else { 1418 ((void const *&)uclass->ImageData) = MFCD::Retrieve(fullname); 1419 } 1420 #else 1421 ((void const *&)uclass->ImageData) = MFCD::Retrieve(fullname); 1422 #endif 1423 1424 /* 1425 ** The small build image icon sized shapes are always generic. 1426 */ 1427 char buffer[_MAX_FNAME]; 1428 sprintf(buffer, "%.4sICON", uclass->Graphic_Name()); 1429 _makepath(fullname, NULL, NULL, buffer, ".SHP"); 1430 1431 #ifndef NDEBUG 1432 RawFileClass ifile(fullname); 1433 if (ifile.Is_Available()) { 1434 ((void const *&)uclass->CameoData) = Load_Alloc_Data(ifile); 1435 } else { 1436 ((void const *&)uclass->CameoData) = MFCD::Retrieve(fullname); 1437 } 1438 #else 1439 ((void const *&)uclass->CameoData) = MFCD::Retrieve(fullname); 1440 #endif 1441 } 1442 } 1443 1444 1445 /*********************************************************************************************** 1446 * InfantryTypeClass::Full_Name -- Fetches the full name text number. * 1447 * * 1448 * This routine will fetch the full name text number for this infantry type. It examines * 1449 * the special custom name flag to determine whether the custom name or the generic name * 1450 * is to be used. * 1451 * * 1452 * INPUT: none * 1453 * * 1454 * OUTPUT: Returns with text number for the name to give this infantry type object. * 1455 * * 1456 * WARNINGS: none * 1457 * * 1458 * HISTORY: * 1459 * 06/29/1995 JLB : Created. * 1460 *=============================================================================================*/ 1461 int InfantryTypeClass::Full_Name(void) const 1462 { 1463 if (Debug_Map || !IsNominal || Rule.IsNamed || Type == INFANTRY_C10 || Type == INFANTRY_DELPHI || Type == INFANTRY_EINSTEIN) { 1464 return(TechnoTypeClass::Full_Name()); 1465 } 1466 return(TXT_CIVILIAN); 1467 } 1468 1469 1470 /*********************************************************************************************** 1471 * InfantryTypeClass::As_Reference -- Fetches a reference to the infantry type specified. * 1472 * * 1473 * Use this routine to convert an infantry type number into a reference to the infantry * 1474 * type class object it represents. * 1475 * * 1476 * INPUT: type -- The infantry type number to convert into a infantry type class object. * 1477 * * 1478 * OUTPUT: Returns with a reference to the infantry type class object specified. * 1479 * * 1480 * WARNINGS: Be sure that the type parameter is legal, otherwise the results are undefined. * 1481 * * 1482 * HISTORY: * 1483 * 07/11/1996 JLB : Created. * 1484 *=============================================================================================*/ 1485 InfantryTypeClass & InfantryTypeClass::As_Reference(InfantryType type) 1486 { 1487 return(*InfantryTypes.Ptr(type)); 1488 } 1489 1490 1491 /*********************************************************************************************** 1492 * InfantryTypeClass::Read_INI -- Fetches infantry override values from the INI database. * 1493 * * 1494 * This routine will retrieve the override values for this infantry type class object from * 1495 * the INI database specified. * 1496 * * 1497 * INPUT: ini -- Reference to the INI database to retrieve the data from. * 1498 * * 1499 * OUTPUT: bool; Was the infantry section for this type found and data retrieved from it? * 1500 * * 1501 * WARNINGS: none * 1502 * * 1503 * HISTORY: * 1504 * 07/19/1996 JLB : Created. * 1505 *=============================================================================================*/ 1506 bool InfantryTypeClass::Read_INI(CCINIClass & ini) 1507 { 1508 if (TechnoTypeClass::Read_INI(ini)) { 1509 IsFraidyCat = ini.Get_Bool(Name(), "Fraidycat", IsFraidyCat); 1510 IsCapture = ini.Get_Bool(Name(), "Infiltrate", IsCapture); 1511 IsBomber = ini.Get_Bool(Name(), "C4", IsBomber); 1512 IsDog = ini.Get_Bool(Name(), "IsCanine", IsDog); 1513 if (IsBomber) IsCapture = true; 1514 if (IsDog) IsLeader = false; 1515 return(true); 1516 } 1517 return(false); 1518 } 1519 1520 1521 void InfantryTypeClass::Dimensions(int & width, int & height) const 1522 { 1523 #ifdef WIN32 1524 width = 14; 1525 height = 20; 1526 #else 1527 width = 12; 1528 height = 16; 1529 #endif 1530 }