UDATA.CPP (94215B)
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\udata.cpv 2.17 16 Oct 1995 16:50:42 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 : UDATA.CPP * 24 * * 25 * Programmer : Joe L. Bostic * 26 * * 27 * Start Date : September 10, 1993 * 28 * * 29 * Last Update : June 26, 1995 [JLB] * 30 * * 31 *---------------------------------------------------------------------------------------------* 32 * Functions: * 33 * UnitTypeClass::As_Reference -- Fetches a reference to the unit type class specified. * 34 * UnitTypeClass::Create_And_Place -- Creates and places a unit object onto the map. * 35 * UnitTypeClass::Create_One_Of -- Creates a unit in limbo. * 36 * UnitTypeClass::Dimensions -- Determines the unit's pixel dimensions. * 37 * UnitTypeClass::Display -- Displays a generic unit shape. * 38 * UnitTypeClass::From_Name -- Fetch class pointer from specified name. * 39 * UnitTypeClass::Max_Pips -- Fetches the maximum pips allowed for this unit. * 40 * UnitTypeClass::Occupy_List -- Returns with unit occupation list. * 41 * UnitTypeClass::One_Time -- Performs one time processing for unit type class objects. * 42 * UnitTypeClass::Prep_For_Add -- Prepares scenario editor to add unit. * 43 * UnitTypeClass::UnitTypeClass -- Constructor for unit types. * 44 * UnitTypeClass::Who_Can_Build_Me -- Determines which factory can build this unit type. * 45 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 46 47 #include "function.h" 48 49 void const * UnitTypeClass::WakeShapes = 0; 50 51 // Visceroid 52 static UnitTypeClass const UnitVisceroid( 53 UNIT_VICE, 54 TXT_VISCEROID, // NAME: Text name of this unit type. 55 "VICE", // NAME: Text name of this unit type. 56 ANIM_NAPALM2, // EXPLOSION: Type of explosion when destroyed. 57 99, // Build level. 58 STRUCTF_NONE, // Building prerequisite. 59 false, // Can this be a goodie surprise from a crate? 60 true, // Is a leader type? 61 false, // Only has eight facings? 62 true, // Always use the given name for the vehicle? 63 false, // Is this a typical transport vehicle? 64 false, // Can it be crushed by a heavy vehicle? 65 true, // Can this unit squash infantry? 66 false, // Does this unit harvest Tiberium? 67 true, // Is invisible to radar? 68 true, // Is selectable by player? 69 true, // Can it be a target for attack or move? 70 true, // Is it insignificant (won't be announced)? 71 false, // Is it immune to normal combat damage? 72 false, // Is it equipped with a combat turret? 73 false, // Fires multiple shots in quick succession? 74 false, // Can it be repaired in a repair facility? 75 false, // Can the player construct or order this unit? 76 false, // Is there a crew inside? 77 false, // Does it have a rotating radar dish? 78 false, // Is there an associated firing animation? 79 false, // Must the turret be in a locked down position while moving? 80 false, // Does it lay tracks while moving? 81 false, // Is this a gigundo-rotund-enormous unit? 82 false, // Is the unit's art as "chunky" cardinal facing only? 83 false, // Is the unit capable of cloaking? 84 true, // Does the unit have a constant animation? 85 -1, // AMMO: Number of shots it has (default). 86 150, // STRENGTH: Strength (in damage points). 87 4, // SIGHTRANGE: Range of sighting. 88 800, // COST: Cost to build (Credits). 89 1, // SCENARIO: Starting availability scenario. 90 80,20, // RISK/RWRD: Risk/reward rating values. 91 HOUSEF_MULTI1| 92 HOUSEF_MULTI2| 93 HOUSEF_MULTI3| 94 HOUSEF_MULTI4| 95 HOUSEF_MULTI5| 96 HOUSEF_MULTI6| 97 HOUSEF_GOOD| 98 HOUSEF_BAD| 99 HOUSEF_NEUTRAL| 100 HOUSEF_JP, // OWNABLE: Ownable by house (bit field). 101 WEAPON_CHEMSPRAY,WEAPON_NONE, 102 ARMOR_WOOD, // ARMOR: Armor type 103 SPEED_TRACK, // MOVE: Locomotion type. 104 MPH_MEDIUM, // SPEED: Miles per hour. 105 5, // ROT: Rate of turn (degrees per tick). 106 0, // Turret center offset along body centerline. 107 MISSION_HUNT // ORDERS: Default order to give new unit. 108 ); 109 110 // Flame tank 111 static UnitTypeClass const UnitFTank( 112 UNIT_FTANK, 113 TXT_FTANK, // NAME: Text name of this unit type. 114 "FTNK", // NAME: Text name of this unit type. 115 ANIM_NAPALM3, // EXPLOSION: Type of explosion when destroyed. 116 4, // Build level. 117 STRUCTF_RADAR, // Building prerequisite. 118 true, // Can this be a goodie surprise from a crate? 119 true, // Is a leader type? 120 false, // Only has eight facings? 121 false, // Always use the given name for the vehicle? 122 false, // Is this a typical transport vehicle? 123 false, // Can it be crushed by a heavy vehicle? 124 true, // Can this unit squash infantry? 125 false, // Does this unit harvest Tiberium? 126 false, // Is invisible to radar? 127 true, // Is selectable by player? 128 true, // Can it be a target for attack or move? 129 false, // Is it insignificant (won't be announced)? 130 false, // Is it immune to normal combat damage? 131 false, // Is it equipped with a combat turret? 132 true, // Fires multiple shots in quick succession? 133 true, // Can it be repaired in a repair facility? 134 true, // Can the player construct or order this unit? 135 true, // Is there a crew inside? 136 false, // Does it have a rotating radar dish? 137 false, // Is there an associated firing animation? 138 false, // Must the turret be in a locked down position while moving? 139 true, // Does it lay tracks while moving? 140 false, // Is this a gigundo-rotund-enormous unit? 141 false, // Is the unit's art as "chunky" cardinal facing only? 142 false, // Is the unit capable of cloaking? 143 false, // Does the unit have a constant animation? 144 -1, // AMMO: Number of shots it has (default). 145 300, // STRENGTH: Strength (in damage points). 146 4, // SIGHTRANGE: Range of sighting. 147 800, // COST: Cost to build (Credits). 148 9, // SCENARIO: Starting availability scenario. 149 80,66, // RISK/RWRD: Risk/reward rating values. 150 HOUSEF_MULTI1| 151 HOUSEF_MULTI2| 152 HOUSEF_MULTI3| 153 HOUSEF_MULTI4| 154 HOUSEF_MULTI5| 155 HOUSEF_MULTI6| 156 HOUSEF_JP| 157 HOUSEF_BAD, // OWNABLE: Ownable by house (bit field). 158 WEAPON_FLAME_TONGUE,WEAPON_NONE, 159 ARMOR_STEEL, // ARMOR: Armor type 160 SPEED_TRACK, // MOVE: Locomotion type. 161 MPH_MEDIUM, // SPEED: Miles per hour. 162 5, // ROT: Rate of turn (degrees per tick). 163 0, // Turret center offset along body centerline. 164 MISSION_HUNT // ORDERS: Default order to give new unit. 165 ); 166 167 // Stealth tank 168 static UnitTypeClass const UnitSTank( 169 UNIT_STANK, 170 TXT_STANK, // NAME: Text name of this unit type. 171 "STNK", // NAME: Text name of this unit type. 172 ANIM_FRAG2, // EXPLOSION: Type of explosion when destroyed. 173 5, // Build level. 174 STRUCTF_RADAR, // Building prerequisite. 175 true, // Can this be a goodie surprise from a crate? 176 true, // Is a leader type? 177 false, // Only has eight facings? 178 false, // Always use the given name for the vehicle? 179 false, // Is this a typical transport vehicle? 180 false, // Can it be crushed by a heavy vehicle? 181 true, // Can this unit squash infantry? 182 false, // Does this unit harvest Tiberium? 183 true, // Is invisible to radar? 184 true, // Is selectable by player? 185 true, // Can it be a target for attack or move? 186 false, // Is it insignificant (won't be announced)? 187 false, // Is it immune to normal combat damage? 188 false, // Is it equipped with a combat turret? 189 true, // Fires multiple shots in quick succession? 190 true, // Can it be repaired in a repair facility? 191 true, // Can the player construct or order this unit? 192 true, // Is there a crew inside? 193 false, // Does it have a rotating radar dish? 194 false, // Is there an associated firing animation? 195 false, // Must the turret be in a locked down position while moving? 196 true, // Does it lay tracks while moving? 197 false, // Is this a gigundo-rotund-enormous unit? 198 false, // Is the unit's art as "chunky" cardinal facing only? 199 true, // Is the unit capable of cloaking? 200 false, // Does the unit have a constant animation? 201 -1, // AMMO: Number of shots it has (default). 202 110, // STRENGTH: Strength (in damage points). 203 4, // SIGHTRANGE: Range of sighting. 204 900, // COST: Cost to build (Credits). 205 12, // SCENARIO: Starting availability scenario. 206 80,81, // RISK/RWRD: Risk/reward rating values. 207 HOUSEF_MULTI1| 208 HOUSEF_MULTI2| 209 HOUSEF_MULTI3| 210 HOUSEF_MULTI4| 211 HOUSEF_MULTI5| 212 HOUSEF_MULTI6| 213 HOUSEF_JP| 214 HOUSEF_BAD, // OWNABLE: Ownable by house (bit field). 215 WEAPON_DRAGON,WEAPON_NONE, 216 ARMOR_ALUMINUM, // ARMOR: Armor type 217 SPEED_TRACK, // MOVE: Locomotion type. 218 MPH_MEDIUM_FAST, // SPEED: Miles per hour. 219 5, // ROT: Rate of turn (degrees per tick). 220 0, // Turret center offset along body centerline. 221 MISSION_HUNT // ORDERS: Default order to give new unit. 222 ); 223 224 // Light tank 225 static UnitTypeClass const UnitLTank( 226 UNIT_LTANK, 227 TXT_LTANK, // NAME: Text name of this unit type. 228 "LTNK", // NAME: Text name of this unit type. 229 ANIM_FRAG1, // EXPLOSION: Type of explosion when destroyed. 230 3, // Build level. 231 STRUCTF_NONE, // Building prerequisite. 232 true, // Can this be a goodie surprise from a crate? 233 true, // Is a leader type? 234 false, // Only has eight facings? 235 false, // Always use the given name for the vehicle? 236 false, // Is this a typical transport vehicle? 237 false, // Can it be crushed by a heavy vehicle? 238 true, // Can this unit squash infantry? 239 false, // Does this unit harvest Tiberium? 240 false, // Is invisible to radar? 241 true, // Is selectable by player? 242 true, // Can it be a target for attack or move? 243 false, // Is it insignificant (won't be announced)? 244 false, // Is it immune to normal combat damage? 245 true, // Is it equipped with a combat turret? 246 false, // Fires multiple shots in quick succession? 247 true, // Can it be repaired in a repair facility? 248 true, // Can the player construct or order this unit? 249 true, // Is there a crew inside? 250 false, // Does it have a rotating radar dish? 251 false, // Is there an associated firing animation? 252 false, // Must the turret be in a locked down position while moving? 253 true, // Does it lay tracks while moving? 254 false, // Is this a gigundo-rotund-enormous unit? 255 false, // Is the unit's art as "chunky" cardinal facing only? 256 false, // Is the unit capable of cloaking? 257 false, // Does the unit have a constant animation? 258 -1, // AMMO: Number of shots it has (default). 259 300, // STRENGTH: Strength (in damage points). 260 3, // SIGHTRANGE: Range of sighting. 261 600, // COST: Cost to build (Credits). 262 5, // SCENARIO: Starting availability scenario. 263 80,56, // RISK/RWRD: Risk/reward rating values. 264 HOUSEF_MULTI1| 265 HOUSEF_MULTI2| 266 HOUSEF_MULTI3| 267 HOUSEF_MULTI4| 268 HOUSEF_MULTI5| 269 HOUSEF_MULTI6| 270 HOUSEF_JP| 271 HOUSEF_BAD, // OWNABLE: Ownable by house (bit field). 272 WEAPON_75MM,WEAPON_NONE, 273 ARMOR_STEEL, // ARMOR: Armor type 274 SPEED_TRACK, // MOVE: Locomotion type. 275 MPH_MEDIUM, // SPEED: Miles per hour. 276 5, // ROT: Rate of turn (degrees per tick). 277 0, // Turret center offset along body centerline. 278 MISSION_HUNT // ORDERS: Default order to give new unit. 279 ); 280 281 // Medium tank 282 static UnitTypeClass const UnitMTank( 283 UNIT_MTANK, 284 TXT_MTANK, // NAME: Text name of this unit type. 285 "MTNK", // NAME: Text name of this unit type. 286 ANIM_FRAG2, // EXPLOSION: Type of explosion when destroyed. 287 3, // Build level. 288 STRUCTF_NONE, // Building prerequisite. 289 true, // Can this be a goodie surprise from a crate? 290 true, // Is a leader type? 291 false, // Only has eight facings? 292 false, // Always use the given name for the vehicle? 293 false, // Is this a typical transport vehicle? 294 false, // Can it be crushed by a heavy vehicle? 295 true, // Can this unit squash infantry? 296 false, // Does this unit harvest Tiberium? 297 false, // Is invisible to radar? 298 true, // Is selectable by player? 299 true, // Can it be a target for attack or move? 300 false, // Is it insignificant (won't be announced)? 301 false, // Is it immune to normal combat damage? 302 true, // Is it equipped with a combat turret? 303 false, // Fires multiple shots in quick succession? 304 true, // Can it be repaired in a repair facility? 305 true, // Can the player construct or order this unit? 306 true, // Is there a crew inside? 307 false, // Does it have a rotating radar dish? 308 false, // Is there an associated firing animation? 309 false, // Must the turret be in a locked down position while moving? 310 true, // Does it lay tracks while moving? 311 true, // Is this a gigundo-rotund-enormous unit? 312 false, // Is the unit's art as "chunky" cardinal facing only? 313 false, // Is the unit capable of cloaking? 314 false, // Does the unit have a constant animation? 315 -1, // AMMO: Number of shots it has (default). 316 400, // STRENGTH: Strength (in damage points). 317 3, // SIGHTRANGE: Range of sighting. 318 800, // COST: Cost to build (Credits). 319 7, // SCENARIO: Starting availability scenario. 320 80,62, // RISK/RWRD: Risk/reward rating values. 321 HOUSEF_MULTI1| 322 HOUSEF_MULTI2| 323 HOUSEF_MULTI3| 324 HOUSEF_MULTI4| 325 HOUSEF_MULTI5| 326 HOUSEF_MULTI6| 327 HOUSEF_JP| 328 HOUSEF_GOOD, // OWNABLE: Ownable by house (bit field). 329 WEAPON_105MM,WEAPON_NONE, 330 ARMOR_STEEL, // ARMOR: Armor type 331 SPEED_TRACK, // MOVE: Locomotion type. 332 MPH_MEDIUM, // SPEED: Miles per hour. 333 5, // ROT: Rate of turn (degrees per tick). 334 0, // Turret center offset along body centerline. 335 MISSION_HUNT // ORDERS: Default order to give new unit. 336 ); 337 338 // Mastadon tank 339 static UnitTypeClass const UnitHTank( 340 UNIT_HTANK, 341 TXT_HTANK, // NAME: Text name of this unit type. 342 "HTNK", // NAME: Text name of this unit type. 343 ANIM_ART_EXP1, // EXPLOSION: Type of explosion when destroyed. 344 5, // Build level. 345 STRUCTF_REPAIR, // Building prerequisite. 346 true, // Can this be a goodie surprise from a crate? 347 true, // Is a leader type? 348 false, // Only has eight facings? 349 false, // Always use the given name for the vehicle? 350 false, // Is this a typical transport vehicle? 351 false, // Can it be crushed by a heavy vehicle? 352 true, // Can this unit squash infantry? 353 false, // Does this unit harvest Tiberium? 354 false, // Is invisible to radar? 355 true, // Is selectable by player? 356 true, // Can it be a target for attack or move? 357 false, // Is it insignificant (won't be announced)? 358 false, // Is it immune to normal combat damage? 359 true, // Is it equipped with a combat turret? 360 true, // Fires multiple shots in quick succession? 361 true, // Can it be repaired in a repair facility? 362 true, // Can the player construct or order this unit? 363 true, // Is there a crew inside? 364 false, // Does it have a rotating radar dish? 365 false, // Is there an associated firing animation? 366 false, // Must the turret be in a locked down position while moving? 367 true, // Does it lay tracks while moving? 368 true, // Is this a gigundo-rotund-enormous unit? 369 false, // Is the unit's art as "chunky" cardinal facing only? 370 false, // Is the unit capable of cloaking? 371 false, // Does the unit have a constant animation? 372 -1, // AMMO: Number of shots it has (default). 373 600, // STRENGTH: Strength (in damage points). 374 4, // SIGHTRANGE: Range of sighting. 375 1500, // COST: Cost to build (Credits). 376 13, // SCENARIO: Starting availability scenario. 377 80,80, // RISK/RWRD: Risk/reward rating values. 378 HOUSEF_MULTI1| 379 HOUSEF_MULTI2| 380 HOUSEF_MULTI3| 381 HOUSEF_MULTI4| 382 HOUSEF_MULTI5| 383 HOUSEF_MULTI6| 384 HOUSEF_JP| 385 HOUSEF_GOOD, // OWNABLE: Ownable by house (bit field). 386 WEAPON_120MM,WEAPON_MAMMOTH_TUSK, 387 ARMOR_STEEL, // ARMOR: Armor type 388 SPEED_TRACK, // MOVE: Locomotion type. 389 MPH_MEDIUM_SLOW, // SPEED: Miles per hour. 390 5, // ROT: Rate of turn (degrees per tick). 391 0, // Turret center offset along body centerline. 392 MISSION_HUNT // ORDERS: Default order to give new unit. 393 ); 394 395 // Mobile HQ 396 static UnitTypeClass const UnitMHQ( 397 UNIT_MHQ, 398 TXT_MHQ, // NAME: Text name of this unit type. 399 "MHQ", // NAME: Text name of this unit type. 400 ANIM_FRAG2, // EXPLOSION: Type of explosion when destroyed. 401 99, // Build level. 402 STRUCTF_NONE, // Building prerequisite. 403 false, // Can this be a goodie surprise from a crate? 404 false, // Is a leader type? 405 false, // Only has eight facings? 406 false, // Always use the given name for the vehicle? 407 false, // Is this a typical transport vehicle? 408 false, // Can it be crushed by a heavy vehicle? 409 true, // Can this unit squash infantry? 410 false, // Does this unit harvest Tiberium? 411 false, // Is invisible to radar? 412 true, // Is selectable by player? 413 true, // Can it be a target for attack or move? 414 false, // Is it insignificant (won't be announced)? 415 false, // Is it immune to normal combat damage? 416 false, // Is it equipped with a combat turret? 417 false, // Fires multiple shots in quick succession? 418 true, // Can it be repaired in a repair facility? 419 true, // Can the player construct or order this unit? 420 true, // Is there a crew inside? 421 true, // Does it have a rotating radar dish? 422 false, // Is there an associated firing animation? 423 false, // Must the turret be in a locked down position while moving? 424 true, // Does it lay tracks while moving? 425 false, // Is this a gigundo-rotund-enormous unit? 426 false, // Is the unit's art as "chunky" cardinal facing only? 427 false, // Is the unit capable of cloaking? 428 false, // Does the unit have a constant animation? 429 -1, // AMMO: Number of shots it has (default). 430 110, // STRENGTH: Strength (in damage points). 431 5, // SIGHTRANGE: Range of sighting. 432 600, // COST: Cost to build (Credits). 433 99, // SCENARIO: Starting availability scenario. 434 80,100, // RISK/RWRD: Risk/reward rating values. 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, // OWNABLE: Ownable by house (bit field). 444 WEAPON_NONE,WEAPON_NONE, 445 ARMOR_ALUMINUM, // ARMOR: Armor type 446 SPEED_TRACK, // MOVE: Locomotion type. 447 MPH_MEDIUM, // SPEED: Miles per hour. 448 5, // ROT: Rate of turn (degrees per tick). 449 0, // Turret center offset along body centerline. 450 MISSION_HUNT // ORDERS: Default order to give new unit. 451 ); 452 453 // Landing craft 454 static UnitTypeClass const UnitHover( 455 UNIT_HOVER, 456 TXT_HOVER, // NAME: Text name of this unit type. 457 "LST", // NAME: Text name of this unit type. 458 ANIM_FBALL1, // EXPLOSION: Type of explosion when destroyed. 459 99, // Build level. 460 STRUCTF_NONE, // Building prerequisite. 461 false, // Can this be a goodie surprise from a crate? 462 false, // Is a leader type? 463 false, // Only has eight facings? 464 true, // Always use the given name for the vehicle? 465 true, // Is this a typical transport vehicle? 466 false, // Can it be crushed by a heavy vehicle? 467 false, // Can this unit squash infantry? 468 false, // Does this unit harvest Tiberium? 469 false, // Is invisible to radar? 470 // true, // Is selectable by player? 471 false, // Is selectable by player? 472 false, // Can it be a target for attack or move? 473 true, // Is it insignificant (won't be announced)? 474 true, // Is it immune to normal combat damage? 475 false, // Is it equipped with a combat turret? 476 false, // Fires multiple shots in quick succession? 477 false, // Can it be repaired in a repair facility? 478 false, // Can the player construct or order this unit? 479 false, // Is there a crew inside? 480 false, // Does it have a rotating radar dish? 481 false, // Is there an associated firing animation? 482 false, // Must the turret be in a locked down position while moving? 483 false, // Does it lay tracks while moving? 484 true, // Is this a gigundo-rotund-enormous unit? 485 true, // Is the unit's art as "chunky" cardinal facing only? 486 false, // Is the unit capable of cloaking? 487 false, // Does the unit have a constant animation? 488 -1, // AMMO: Number of shots it has (default). 489 400, // STRENGTH: Strength (in damage points). 490 3, // SIGHTRANGE: Range of sighting. 491 300, // COST: Cost to build (Credits). 492 99, // SCENARIO: Starting availability scenario. 493 80,40, // RISK/RWRD: Risk/reward rating values. 494 HOUSEF_MULTI1| 495 HOUSEF_MULTI2| 496 HOUSEF_MULTI3| 497 HOUSEF_MULTI4| 498 HOUSEF_MULTI5| 499 HOUSEF_MULTI6| 500 HOUSEF_JP| 501 HOUSEF_GOOD| 502 HOUSEF_BAD, // OWNABLE: Ownable by house (bit field). 503 WEAPON_NONE,WEAPON_NONE, 504 ARMOR_ALUMINUM, // ARMOR: Armor type 505 SPEED_HOVER, // MOVE: Locomotion type. 506 MPH_MEDIUM_FAST, // SPEED: Miles per hour. 507 127, // ROT: Rate of turn (degrees per tick). 508 0, // Turret center offset along body centerline. 509 MISSION_HUNT // ORDERS: Default order to give new unit. 510 ); 511 512 // Mobile sam launcher 513 static UnitTypeClass const UnitSAM( 514 UNIT_MSAM, 515 TXT_MSAM, // NAME: Text name of this unit type. 516 "MLRS", // NAME: Text name of this unit type. 517 ANIM_FRAG2, // EXPLOSION: Type of explosion when destroyed. 518 7, // Build level. 519 STRUCTF_ATOWER, // Building prerequisite. 520 true, // Can this be a goodie surprise from a crate? 521 true, // Is a leader type? 522 false, // Only has eight facings? 523 false, // Always use the given name for the vehicle? 524 false, // Is this a typical transport vehicle? 525 false, // Can it be crushed by a heavy vehicle? 526 false, // Can this unit squash infantry? 527 false, // Does this unit harvest Tiberium? 528 false, // Is invisible to radar? 529 true, // Is selectable by player? 530 true, // Can it be a target for attack or move? 531 false, // Is it insignificant (won't be announced)? 532 false, // Is it immune to normal combat damage? 533 true, // Is it equipped with a combat turret? 534 false, // Fires multiple shots in quick succession? 535 true, // Can it be repaired in a repair facility? 536 true, // Can the player construct or order this unit? 537 true, // Is there a crew inside? 538 false, // Does it have a rotating radar dish? 539 false, // Is there an associated firing animation? 540 true, // Must the turret be in a locked down position while moving? 541 true, // Does it lay tracks while moving? 542 true, // Is this a gigundo-rotund-enormous unit? 543 false, // Is the unit's art as "chunky" cardinal facing only? 544 false, // Is the unit capable of cloaking? 545 false, // Does the unit have a constant animation? 546 2, // AMMO: Number of shots it has (default). 547 120, // STRENGTH: Strength (in damage points). 548 4, // SIGHTRANGE: Range of sighting. 549 750, // COST: Cost to build (Credits). 550 98, // SCENARIO: Starting availability scenario. 551 80,30, // RISK/RWRD: Risk/reward rating values. 552 HOUSEF_MULTI1| 553 HOUSEF_MULTI2| 554 HOUSEF_MULTI3| 555 HOUSEF_MULTI4| 556 HOUSEF_MULTI5| 557 HOUSEF_MULTI6| 558 HOUSEF_JP| 559 // HOUSEF_GOOD| 560 HOUSEF_BAD, // OWNABLE: Ownable by house (bit field). 561 WEAPON_HONEST_JOHN,WEAPON_NONE, 562 ARMOR_ALUMINUM, // ARMOR: Armor type 563 SPEED_TRACK, // MOVE: Locomotion type. 564 MPH_MEDIUM, // SPEED: Miles per hour. 565 5, // ROT: Rate of turn (degrees per tick). 566 0, // Turret center offset along body centerline. 567 MISSION_HUNT // ORDERS: Default order to give new unit. 568 ); 569 570 // Artillery 571 static UnitTypeClass const UnitArty( 572 UNIT_ARTY, 573 TXT_ARTY, // NAME: Text name of this unit type. 574 "ARTY", // NAME: Text name of this unit type. 575 ANIM_ART_EXP1, // EXPLOSION: Type of explosion when destroyed. 576 6, // Build level. 577 STRUCTF_NONE, // Building prerequisite. 578 true, // Can this be a goodie surprise from a crate? 579 true, // Is a leader type? 580 false, // Only has eight facings? 581 false, // Always use the given name for the vehicle? 582 false, // Is this a typical transport vehicle? 583 false, // Can it be crushed by a heavy vehicle? 584 false, // Can this unit squash infantry? 585 false, // Does this unit harvest Tiberium? 586 false, // Is invisible to radar? 587 true, // Is selectable by player? 588 true, // Can it be a target for attack or move? 589 false, // Is it insignificant (won't be announced)? 590 false, // Is it immune to normal combat damage? 591 false, // Is it equipped with a combat turret? 592 false, // Fires multiple shots in quick succession? 593 true, // Can it be repaired in a repair facility? 594 true, // Can the player construct or order this unit? 595 true, // Is there a crew inside? 596 false, // Does it have a rotating radar dish? 597 false, // Is there an associated firing animation? 598 false, // Must the turret be in a locked down position while moving? 599 true, // Does it lay tracks while moving? 600 false, // Is this a gigundo-rotund-enormous unit? 601 false, // Is the unit's art as "chunky" cardinal facing only? 602 false, // Is the unit capable of cloaking? 603 false, // Does the unit have a constant animation? 604 -1, // AMMO: Number of shots it has (default). 605 75, // STRENGTH: Strength (in damage points). 606 4, // SIGHTRANGE: Range of sighting. 607 450, // COST: Cost to build (Credits). 608 9, // SCENARIO: Starting availability scenario. 609 80,73, // RISK/RWRD: Risk/reward rating values. 610 HOUSEF_MULTI1| 611 HOUSEF_MULTI2| 612 HOUSEF_MULTI3| 613 HOUSEF_MULTI4| 614 HOUSEF_MULTI5| 615 HOUSEF_MULTI6| 616 HOUSEF_JP| 617 HOUSEF_BAD, // OWNABLE: Ownable by house (bit field). 618 WEAPON_155MM,WEAPON_NONE, 619 ARMOR_ALUMINUM, // ARMOR: Armor type 620 SPEED_TRACK, // MOVE: Locomotion type. 621 MPH_MEDIUM_SLOW, // SPEED: Miles per hour. 622 2, // ROT: Rate of turn (degrees per tick). 623 0, // Turret center offset along body centerline. 624 MISSION_HUNT // ORDERS: Default order to give new unit. 625 ); 626 627 // Harvester 628 static UnitTypeClass const UnitHarvester( 629 UNIT_HARVESTER, 630 TXT_HARVESTER, // NAME: Text name of this unit type. 631 "HARV", // NAME: Text name of this unit type. 632 ANIM_FBALL1, // EXPLOSION: Type of explosion when destroyed. 633 2, // Build level. 634 STRUCTF_REFINERY, // Building prerequisite. 635 true, // Can this be a goodie surprise from a crate? 636 false, // Is a leader type? 637 false, // Only has eight facings? 638 true, // Always use the given name for the vehicle? 639 false, // Is this a typical transport vehicle? 640 false, // Can it be crushed by a heavy vehicle? 641 true, // Can this unit squash infantry? 642 true, // Does this unit harvest Tiberium? 643 false, // Is invisible to radar? 644 true, // Is selectable by player? 645 true, // Can it be a target for attack or move? 646 false, // Is it insignificant (won't be announced)? 647 false, // Is it immune to normal combat damage? 648 false, // Is it equipped with a combat turret? 649 false, // Fires multiple shots in quick succession? 650 true, // Can it be repaired in a repair facility? 651 true, // Can the player construct or order this unit? 652 true, // Is there a crew inside? 653 false, // Does it have a rotating radar dish? 654 false, // Is there an associated firing animation? 655 false, // Must the turret be in a locked down position while moving? 656 true, // Does it lay tracks while moving? 657 true, // Is this a gigundo-rotund-enormous unit? 658 false, // Is the unit's art as "chunky" cardinal facing only? 659 false, // Is the unit capable of cloaking? 660 false, // Does the unit have a constant animation? 661 -1, // AMMO: Number of shots it has (default). 662 600, // STRENGTH: Strength (in damage points). 663 // 300, // STRENGTH: Strength (in damage points). 664 2, // SIGHTRANGE: Range of sighting. 665 1400, // COST: Cost to build (Credits). 666 7, // SCENARIO: Starting availability scenario. 667 80,85, // RISK/RWRD: Risk/reward rating values. 668 HOUSEF_MULTI1| 669 HOUSEF_MULTI2| 670 HOUSEF_MULTI3| 671 HOUSEF_MULTI4| 672 HOUSEF_MULTI5| 673 HOUSEF_MULTI6| 674 HOUSEF_JP| 675 HOUSEF_GOOD| 676 HOUSEF_BAD, // OWNABLE: Ownable by house (bit field). 677 WEAPON_NONE,WEAPON_NONE, 678 ARMOR_ALUMINUM, // ARMOR: Armor type 679 SPEED_WHEEL, // MOVE: Locomotion type. 680 MPH_MEDIUM_SLOW, // SPEED: Miles per hour. 681 5, // ROT: Rate of turn (degrees per tick). 682 0, // Turret center offset along body centerline. 683 MISSION_HARVEST // ORDERS: Default order to give new unit. 684 ); 685 686 // Mobile construction vehicle 687 static UnitTypeClass const UnitMCV( 688 UNIT_MCV, 689 TXT_MCV, // NAME: Text name of this unit type. 690 "MCV", // NAME: Text name of this unit type. 691 ANIM_FBALL1, // EXPLOSION: Type of explosion when destroyed. 692 7, // Build level. 693 STRUCTF_EYE, // Building prerequisite. 694 true, // Can this be a goodie surprise from a crate? 695 false, // Is a leader type? 696 false, // Only has eight facings? 697 false, // Always use the given name for the vehicle? 698 false, // Is this a typical transport vehicle? 699 false, // Can it be crushed by a heavy vehicle? 700 true, // Can this unit squash infantry? 701 false, // Does this unit harvest Tiberium? 702 false, // Is invisible to radar? 703 true, // Is selectable by player? 704 true, // Can it be a target for attack or move? 705 false, // Is it insignificant (won't be announced)? 706 false, // Is it immune to normal combat damage? 707 false, // Is it equipped with a combat turret? 708 false, // Fires multiple shots in quick succession? 709 false, // Can it be repaired in a repair facility? 710 true, // Can the player construct or order this unit? 711 true, // Is there a crew inside? 712 false, // Does it have a rotating radar dish? 713 false, // Is there an associated firing animation? 714 false, // Must the turret be in a locked down position while moving? 715 true, // Does it lay tracks while moving? 716 true, // Is this a gigundo-rotund-enormous unit? 717 false, // Is the unit's art as "chunky" cardinal facing only? 718 false, // Is the unit capable of cloaking? 719 false, // Does the unit have a constant animation? 720 -1, // AMMO: Number of shots it has (default). 721 600, // STRENGTH: Strength (in damage points). 722 2, // SIGHTRANGE: Range of sighting. 723 5000, // COST: Cost to build (Credits). 724 15, // SCENARIO: Starting availability scenario. 725 80,86, // RISK/RWRD: Risk/reward rating values. 726 HOUSEF_MULTI1| 727 HOUSEF_MULTI2| 728 HOUSEF_MULTI3| 729 HOUSEF_MULTI4| 730 HOUSEF_MULTI5| 731 HOUSEF_MULTI6| 732 HOUSEF_JP| 733 HOUSEF_GOOD| 734 HOUSEF_BAD, // OWNABLE: Ownable by house (bit field). 735 WEAPON_NONE,WEAPON_NONE, 736 ARMOR_ALUMINUM, // ARMOR: Armor type 737 SPEED_WHEEL, // MOVE: Locomotion type. 738 MPH_MEDIUM_SLOW, // SPEED: Miles per hour. 739 5, // ROT: Rate of turn (degrees per tick). 740 0, // Turret center offset along body centerline. 741 MISSION_HUNT // ORDERS: Default order to give new unit. 742 ); 743 744 // Jeep (hummer) 745 static UnitTypeClass const UnitJeep( 746 UNIT_JEEP, 747 TXT_JEEP, // NAME: Text name of this unit type. 748 "JEEP", // NAME: Text name of this unit type. 749 ANIM_FRAG1, // EXPLOSION: Type of explosion when destroyed. 750 2, // Build level. 751 STRUCTF_NONE, // Building prerequisite. 752 true, // Can this be a goodie surprise from a crate? 753 true, // Is a leader type? 754 false, // Only has eight facings? 755 false, // Always use the given name for the vehicle? 756 false, // Is this a typical transport vehicle? 757 false, // Can it be crushed by a heavy vehicle? 758 false, // Can this unit squash infantry? 759 false, // Does this unit harvest Tiberium? 760 false, // Is invisible to radar? 761 true, // Is selectable by player? 762 true, // Can it be a target for attack or move? 763 false, // Is it insignificant (won't be announced)? 764 false, // Is it immune to normal combat damage? 765 true, // Is it equipped with a combat turret? 766 false, // Fires multiple shots in quick succession? 767 true, // Can it be repaired in a repair facility? 768 true, // Can the player construct or order this unit? 769 true, // Is there a crew inside? 770 false, // Does it have a rotating radar dish? 771 false, // Is there an associated firing animation? 772 false, // Must the turret be in a locked down position while moving? 773 true, // Does it lay tracks while moving? 774 false, // Is this a gigundo-rotund-enormous unit? 775 false, // Is the unit's art as "chunky" cardinal facing only? 776 false, // Is the unit capable of cloaking? 777 false, // Does the unit have a constant animation? 778 -1, // AMMO: Number of shots it has (default). 779 150, // STRENGTH: Strength (in damage points). 780 2, // SIGHTRANGE: Range of sighting. 781 400, // COST: Cost to build (Credits). 782 5, // SCENARIO: Starting availability scenario. 783 80,41, // RISK/RWRD: Risk/reward rating values. 784 HOUSEF_MULTI1| 785 HOUSEF_MULTI2| 786 HOUSEF_MULTI3| 787 HOUSEF_MULTI4| 788 HOUSEF_MULTI5| 789 HOUSEF_MULTI6| 790 HOUSEF_JP| 791 HOUSEF_GOOD, // OWNABLE: Ownable by house (bit field). 792 WEAPON_M60MG,WEAPON_NONE, 793 ARMOR_ALUMINUM, // ARMOR: Armor type 794 SPEED_WHEEL, // MOVE: Locomotion type. 795 MPH_MEDIUM_FAST, // SPEED: Miles per hour. 796 10, // ROT: Rate of turn (degrees per tick). 797 0, // Turret center offset along body centerline. 798 MISSION_HUNT // ORDERS: Default order to give new unit. 799 ); 800 801 // Buggy 802 static UnitTypeClass const UnitBuggy( 803 UNIT_BUGGY, 804 TXT_DUNE_BUGGY, // NAME: Text name of this unit type. 805 "BGGY", // NAME: Text name of this unit type. 806 ANIM_FRAG1, // EXPLOSION: Type of explosion when destroyed. 807 4, // Build level. 808 STRUCTF_NONE, // Building prerequisite. 809 true, // Can this be a goodie surprise from a crate? 810 true, // Is a leader type? 811 false, // Only has eight facings? 812 false, // Always use the given name for the vehicle? 813 false, // Is this a typical transport vehicle? 814 false, // Can it be crushed by a heavy vehicle? 815 false, // Can this unit squash infantry? 816 false, // Does this unit harvest Tiberium? 817 false, // Is invisible to radar? 818 true, // Is selectable by player? 819 true, // Can it be a target for attack or move? 820 false, // Is it insignificant (won't be announced)? 821 false, // Is it immune to normal combat damage? 822 true, // Is it equipped with a combat turret? 823 false, // Fires multiple shots in quick succession? 824 true, // Can it be repaired in a repair facility? 825 true, // Can the player construct or order this unit? 826 true, // Is there a crew inside? 827 false, // Does it have a rotating radar dish? 828 false, // Is there an associated firing animation? 829 false, // Must the turret be in a locked down position while moving? 830 false, // Does it lay tracks while moving? 831 false, // Is this a gigundo-rotund-enormous unit? 832 false, // Is the unit's art as "chunky" cardinal facing only? 833 false, // Is the unit capable of cloaking? 834 false, // Does the unit have a constant animation? 835 -1, // AMMO: Number of shots it has (default). 836 140, // STRENGTH: Strength (in damage points). 837 2, // SIGHTRANGE: Range of sighting. 838 300, // COST: Cost to build (Credits). 839 5, // SCENARIO: Starting availability scenario. 840 80,42, // RISK/RWRD: Risk/reward rating values. 841 HOUSEF_MULTI1| 842 HOUSEF_MULTI2| 843 HOUSEF_MULTI3| 844 HOUSEF_MULTI4| 845 HOUSEF_MULTI5| 846 HOUSEF_MULTI6| 847 HOUSEF_JP| 848 HOUSEF_BAD, // OWNABLE: Ownable by house (bit field). 849 WEAPON_M60MG,WEAPON_NONE, 850 ARMOR_ALUMINUM, // ARMOR: Armor type 851 SPEED_WHEEL, // MOVE: Locomotion type. 852 MPH_MEDIUM_FAST, // SPEED: Miles per hour. 853 10, // ROT: Rate of turn (degrees per tick). 854 0, // Turret center offset along body centerline. 855 MISSION_HUNT // ORDERS: Default order to give new unit. 856 ); 857 858 // Attack cycle 859 static UnitTypeClass const UnitBike( 860 UNIT_BIKE, 861 TXT_BIKE, // NAME: Text name of this unit type. 862 "BIKE", // NAME: Text name of this unit type. 863 ANIM_FRAG1, // EXPLOSION: Type of explosion when destroyed. 864 2, // Build level. 865 STRUCTF_NONE, // Building prerequisite. 866 true, // Can this be a goodie surprise from a crate? 867 true, // Is a leader type? 868 false, // Only has eight facings? 869 false, // Always use the given name for the vehicle? 870 false, // Is this a typical transport vehicle? 871 false/*true*/, // Can it be crushed by a heavy vehicle? 872 false, // Can this unit squash infantry? 873 false, // Does this unit harvest Tiberium? 874 false, // Is invisible to radar? 875 true, // Is selectable by player? 876 true, // Can it be a target for attack or move? 877 false, // Is it insignificant (won't be announced)? 878 false, // Is it immune to normal combat damage? 879 false, // Is it equipped with a combat turret? 880 false, // Fires multiple shots in quick succession? 881 true, // Can it be repaired in a repair facility? 882 true, // Can the player construct or order this unit? 883 true, // Is there a crew inside? 884 false, // Does it have a rotating radar dish? 885 false, // Is there an associated firing animation? 886 false, // Must the turret be in a locked down position while moving? 887 false, // Does it lay tracks while moving? 888 false, // Is this a gigundo-rotund-enormous unit? 889 false, // Is the unit's art as "chunky" cardinal facing only? 890 false, // Is the unit capable of cloaking? 891 false, // Does the unit have a constant animation? 892 -1, // AMMO: Number of shots it has (default). 893 #ifdef ADVANCED 894 90, // STRENGTH: Strength (in damage points). 895 #else 896 160, // STRENGTH: Strength (in damage points). 897 #endif 898 2, // SIGHTRANGE: Range of sighting. 899 500, // COST: Cost to build (Credits). 900 5, // SCENARIO: Starting availability scenario. 901 80,45, // RISK/RWRD: Risk/reward rating values. 902 HOUSEF_MULTI1| 903 HOUSEF_MULTI2| 904 HOUSEF_MULTI3| 905 HOUSEF_MULTI4| 906 HOUSEF_MULTI5| 907 HOUSEF_MULTI6| 908 HOUSEF_JP| 909 HOUSEF_BAD, // OWNABLE: Ownable by house (bit field). 910 WEAPON_DRAGON,WEAPON_NONE, 911 ARMOR_WOOD, // ARMOR: Armor type 912 SPEED_WHEEL, // MOVE: Locomotion type. 913 MPH_FAST, // SPEED: Miles per hour. 914 10, // ROT: Rate of turn (degrees per tick). 915 0, // Turret center offset along body centerline. 916 MISSION_HUNT // ORDERS: Default order to give new unit. 917 ); 918 919 // Rocket launcher 920 static UnitTypeClass const UnitMLRS( 921 UNIT_MLRS, 922 TXT_MLRS, // NAME: Text name of this unit type. 923 "MSAM", // NAME: Text name of this unit type. 924 ANIM_ART_EXP1, // EXPLOSION: Type of explosion when destroyed. 925 7, // Build level. 926 STRUCTF_EYE, // Building prerequisite. 927 true, // Can this be a goodie surprise from a crate? 928 true, // Is a leader type? 929 false, // Only has eight facings? 930 false, // Always use the given name for the vehicle? 931 false, // Is this a typical transport vehicle? 932 false, // Can it be crushed by a heavy vehicle? 933 false, // Can this unit squash infantry? 934 false, // Does this unit harvest Tiberium? 935 false, // Is invisible to radar? 936 true, // Is selectable by player? 937 true, // Can it be a target for attack or move? 938 false, // Is it insignificant (won't be announced)? 939 false, // Is it immune to normal combat damage? 940 true, // Is it equipped with a combat turret? 941 true, // Fires multiple shots in quick succession? 942 true, // Can it be repaired in a repair facility? 943 true, // Can the player construct or order this unit? 944 true, // Is there a crew inside? 945 false, // Does it have a rotating radar dish? 946 false, // Is there an associated firing animation? 947 true, // Must the turret be in a locked down position while moving? 948 true, // Does it lay tracks while moving? 949 false, // Is this a gigundo-rotund-enormous unit? 950 false, // Is the unit's art as "chunky" cardinal facing only? 951 false, // Is the unit capable of cloaking? 952 false, // Does the unit have a constant animation? 953 -1, // AMMO: Number of shots it has (default). 954 100, // STRENGTH: Strength (in damage points). 955 4, // SIGHTRANGE: Range of sighting. 956 800, // COST: Cost to build (Credits). 957 11, // SCENARIO: Starting availability scenario. 958 80,72, // RISK/RWRD: Risk/reward rating values. 959 HOUSEF_MULTI1| 960 HOUSEF_MULTI2| 961 HOUSEF_MULTI3| 962 HOUSEF_MULTI4| 963 HOUSEF_MULTI5| 964 HOUSEF_MULTI6| 965 HOUSEF_JP| 966 HOUSEF_BAD| 967 HOUSEF_GOOD, // OWNABLE: Ownable by house (bit field). 968 WEAPON_MLRS,WEAPON_NONE, 969 ARMOR_ALUMINUM, // ARMOR: Armor type 970 SPEED_TRACK, // MOVE: Locomotion type. 971 MPH_MEDIUM, // SPEED: Miles per hour. 972 5, // ROT: Rate of turn (degrees per tick). 973 0, // Turret center offset along body centerline. 974 MISSION_GUARD // ORDERS: Default order to give new unit. 975 ); 976 977 // Armored personnel carrier 978 static UnitTypeClass const UnitAPC( 979 UNIT_APC, 980 TXT_APC, // NAME: Text name of this unit type. 981 "APC", // NAME: Text name of this unit type. 982 ANIM_FRAG2, // EXPLOSION: Type of explosion when destroyed. 983 4, // Build level. 984 STRUCTF_BARRACKS, // Building prerequisite. 985 true, // Can this be a goodie surprise from a crate? 986 true, // Is a leader type? 987 false, // Only has eight facings? 988 false, // Always use the given name for the vehicle? 989 true, // Is this a typical transport vehicle? 990 false, // Can it be crushed by a heavy vehicle? 991 true, // Can this unit squash infantry? 992 false, // Does this unit harvest Tiberium? 993 false, // Is invisible to radar? 994 true, // Is selectable by player? 995 true, // Can it be a target for attack or move? 996 false, // Is it insignificant (won't be announced)? 997 false, // Is it immune to normal combat damage? 998 false, // Is it equipped with a combat turret? 999 false, // Fires multiple shots in quick succession? 1000 true, // Can it be repaired in a repair facility? 1001 true, // Can the player construct or order this unit? 1002 false, // Is there a crew inside? 1003 false, // Does it have a rotating radar dish? 1004 false, // Is there an associated firing animation? 1005 false, // Must the turret be in a locked down position while moving? 1006 true, // Does it lay tracks while moving? 1007 false, // Is this a gigundo-rotund-enormous unit? 1008 false, // Is the unit's art as "chunky" cardinal facing only? 1009 false, // Is the unit capable of cloaking? 1010 false, // Does the unit have a constant animation? 1011 -1, // AMMO: Number of shots it has (default). 1012 200, // STRENGTH: Strength (in damage points). 1013 4, // SIGHTRANGE: Range of sighting. 1014 700, // COST: Cost to build (Credits). 1015 5, // SCENARIO: Starting availability scenario. 1016 80,15, // RISK/RWRD: Risk/reward rating values. 1017 HOUSEF_MULTI1| 1018 HOUSEF_MULTI2| 1019 HOUSEF_MULTI3| 1020 HOUSEF_MULTI4| 1021 HOUSEF_MULTI5| 1022 HOUSEF_MULTI6| 1023 HOUSEF_BAD| 1024 HOUSEF_JP| 1025 HOUSEF_GOOD, // OWNABLE: Ownable by house (bit field). 1026 WEAPON_M60MG,WEAPON_NONE, 1027 ARMOR_STEEL, // ARMOR: Armor type 1028 SPEED_TRACK, // MOVE: Locomotion type. 1029 MPH_MEDIUM_FASTER, // SPEED: Miles per hour. 1030 5, // ROT: Rate of turn (degrees per tick). 1031 0, // Turret center offset along body centerline. 1032 MISSION_HUNT // ORDERS: Default order to give new unit. 1033 ); 1034 1035 // Gunboat 1036 static UnitTypeClass const UnitGunBoat( 1037 UNIT_GUNBOAT, 1038 TXT_GUNBOAT, // NAME: Text name of this unit type. 1039 "BOAT", // NAME: Text name of this unit type. 1040 ANIM_FBALL1, // EXPLOSION: Type of explosion when destroyed. 1041 99, // Build level. 1042 STRUCTF_NONE, // Building prerequisite. 1043 false, // Can this be a goodie surprise from a crate? 1044 true, // Is a leader type? 1045 false, // Only has eight facings? 1046 true, // Always use the given name for the vehicle? 1047 false, // Is this a typical transport vehicle? 1048 false, // Can it be crushed by a heavy vehicle? 1049 false, // Can this unit squash infantry? 1050 false, // Does this unit harvest Tiberium? 1051 false, // Is invisible to radar? 1052 true, // Is selectable by player? 1053 true, // Can it be a target for attack or move? 1054 true, // Is it insignificant (won't be announced)? 1055 false, // Is it immune to normal combat damage? 1056 true, // Is it equipped with a combat turret? 1057 true, // Fires multiple shots in quick succession? 1058 false, // Can it be repaired in a repair facility? 1059 false, // Can the player construct or order this unit? 1060 true, // Is there a crew inside? 1061 false, // Does it have a rotating radar dish? 1062 false, // Is there an associated firing animation? 1063 false, // Must the turret be in a locked down position while moving? 1064 false, // Does it lay tracks while moving? 1065 true, // Is this a gigundo-rotund-enormous unit? 1066 true, // Is the unit's art as "chunky" cardinal facing only? 1067 false, // Is the unit capable of cloaking? 1068 false, // Does the unit have a constant animation? 1069 -1, // AMMO: Number of shots it has (default). 1070 700, // STRENGTH: Strength (in damage points). 1071 5, // SIGHTRANGE: Range of sighting. 1072 300, // COST: Cost to build (Credits). 1073 99, // SCENARIO: Starting availability scenario. 1074 80,40, // RISK/RWRD: Risk/reward rating values. 1075 HOUSEF_MULTI1| 1076 HOUSEF_MULTI2| 1077 HOUSEF_MULTI3| 1078 HOUSEF_MULTI4| 1079 HOUSEF_MULTI5| 1080 HOUSEF_MULTI6| 1081 HOUSEF_JP| 1082 HOUSEF_GOOD| 1083 HOUSEF_BAD, // OWNABLE: Ownable by house (bit field). 1084 WEAPON_TOMAHAWK,WEAPON_NONE, 1085 ARMOR_STEEL, // ARMOR: Armor type 1086 SPEED_FLOAT, // MOVE: Locomotion type. 1087 MPH_SLOW, // SPEED: Miles per hour. 1088 1, // ROT: Rate of turn (degrees per tick). 1089 14, // Turret center offset along body centerline. 1090 MISSION_GUARD // ORDERS: Default order to give new unit. 1091 ); 1092 1093 // Triceratops 1094 static UnitTypeClass const UnitTric( 1095 UNIT_TRIC, 1096 TXT_TRIC, // NAME: Text name of this unit type. 1097 "TRIC", // NAME: Text name of this unit type. 1098 ANIM_TRIC_DIE, // EXPLOSION: Type of explosion when destroyed. 1099 99, // Build level. 1100 STRUCTF_NONE, // Building prerequisite. 1101 false, // Can this be a goodie surprise from a crate? 1102 true, // Is a leader type? 1103 true, // Only has eight facings? 1104 true, // Always use the given name for the vehicle? 1105 false, // Is this a typical transport vehicle? 1106 false, // Can it be crushed by a heavy vehicle? 1107 true, // Can this unit squash infantry? 1108 false, // Does this unit harvest Tiberium? 1109 true, // Is invisible to radar? 1110 true, // Is selectable by player? 1111 true, // Can it be a target for attack or move? 1112 false, // Is it insignificant (won't be announced)? 1113 false, // Is it immune to normal combat damage? 1114 false, // Is it equipped with a combat turret? 1115 false, // Fires multiple shots in quick succession? 1116 false, // Can it be repaired in a repair facility? 1117 false, // Can the player construct or order this unit? 1118 false, // Is there a crew inside? 1119 false, // Does it have a rotating radar dish? 1120 true, // Is there an associated firing animation? 1121 false, // Must the turret be in a locked down position while moving? 1122 false, // Does it lay tracks while moving? 1123 true, // Is this a gigundo-rotund-enormous unit? 1124 false, // Is the unit's art as "chunky" cardinal facing only? 1125 false, // Is the unit capable of cloaking? 1126 false, // Does the unit have a constant animation? 1127 -1, // AMMO: Number of shots it has (default). 1128 700, // STRENGTH: Strength (in damage points). 1129 5, // SIGHTRANGE: Range of sighting. 1130 0, // COST: Cost to build (Credits). 1131 99, // SCENARIO: Starting availability scenario. 1132 50,50, // RISK/RWRD: Risk/reward rating values. 1133 HOUSEF_JP, // OWNABLE: Ownable by house (bit field). 1134 WEAPON_STEG,WEAPON_NONE, 1135 ARMOR_STEEL, // ARMOR: Armor type 1136 SPEED_TRACK, // MOVE: Locomotion type. 1137 MPH_SLOW, // SPEED: Miles per hour. 1138 5, // ROT: Rate of turn (degrees per tick). 1139 0, // Turret center offset along body centerline. 1140 MISSION_GUARD // ORDERS: Default order to give new unit. 1141 ); 1142 1143 // Tyrannosaurus Rex 1144 static UnitTypeClass const UnitTrex( 1145 UNIT_TREX, 1146 TXT_TREX, // NAME: Text name of this unit type. 1147 "TREX", // NAME: Text name of this unit type. 1148 ANIM_TREX_DIE, // EXPLOSION: Type of explosion when destroyed. 1149 99, // Build level. 1150 STRUCTF_NONE, // Building prerequisite. 1151 false, // Can this be a goodie surprise from a crate? 1152 true, // Is a leader type? 1153 true, // Only has eight facings? 1154 true, // Always use the given name for the vehicle? 1155 false, // Is this a typical transport vehicle? 1156 false, // Can it be crushed by a heavy vehicle? 1157 true, // Can this unit squash infantry? 1158 false, // Does this unit harvest Tiberium? 1159 true, // Is invisible to radar? 1160 true, // Is selectable by player? 1161 true, // Can it be a target for attack or move? 1162 false, // Is it insignificant (won't be announced)? 1163 false, // Is it immune to normal combat damage? 1164 false, // Is it equipped with a combat turret? 1165 false, // Fires multiple shots in quick succession? 1166 false, // Can it be repaired in a repair facility? 1167 false, // Can the player construct or order this unit? 1168 false, // Is there a crew inside? 1169 false, // Does it have a rotating radar dish? 1170 true, // Is there an associated firing animation? 1171 false, // Must the turret be in a locked down position while moving? 1172 false, // Does it lay tracks while moving? 1173 true, // Is this a gigundo-rotund-enormous unit? 1174 false, // Is the unit's art as "chunky" cardinal facing only? 1175 false, // Is the unit capable of cloaking? 1176 false, // Does the unit have a constant animation? 1177 -1, // AMMO: Number of shots it has (default). 1178 750, // STRENGTH: Strength (in damage points). 1179 5, // SIGHTRANGE: Range of sighting. 1180 0, // COST: Cost to build (Credits). 1181 99, // SCENARIO: Starting availability scenario. 1182 50,50, // RISK/RWRD: Risk/reward rating values. 1183 HOUSEF_JP, // OWNABLE: Ownable by house (bit field). 1184 WEAPON_TREX,WEAPON_NONE, 1185 ARMOR_STEEL, // ARMOR: Armor type 1186 SPEED_TRACK, // MOVE: Locomotion type. 1187 MPH_MEDIUM, // SPEED: Miles per hour. 1188 5, // ROT: Rate of turn (degrees per tick). 1189 0, // Turret center offset along body centerline. 1190 MISSION_GUARD // ORDERS: Default order to give new unit. 1191 ); 1192 1193 // Velociraptor 1194 static UnitTypeClass const UnitRapt( 1195 UNIT_RAPT, 1196 TXT_RAPT, // NAME: Text name of this unit type. 1197 "RAPT", // NAME: Text name of this unit type. 1198 ANIM_RAPT_DIE, // EXPLOSION: Type of explosion when destroyed. 1199 99, // Build level. 1200 STRUCTF_NONE, // Building prerequisite. 1201 false, // Can this be a goodie surprise from a crate? 1202 true, // Is a leader type? 1203 true, // Only has eight facings? 1204 true, // Always use the given name for the vehicle? 1205 false, // Is this a typical transport vehicle? 1206 false/*true*/, // Can it be crushed by a heavy vehicle? 1207 false, // Can this unit squash infantry? 1208 false, // Does this unit harvest Tiberium? 1209 true, // Is invisible to radar? 1210 true, // Is selectable by player? 1211 true, // Can it be a target for attack or move? 1212 false, // Is it insignificant (won't be announced)? 1213 false, // Is it immune to normal combat damage? 1214 false, // Is it equipped with a combat turret? 1215 false, // Fires multiple shots in quick succession? 1216 false, // Can it be repaired in a repair facility? 1217 false, // Can the player construct or order this unit? 1218 false, // Is there a crew inside? 1219 false, // Does it have a rotating radar dish? 1220 true, // Is there an associated firing animation? 1221 false, // Must the turret be in a locked down position while moving? 1222 false, // Does it lay tracks while moving? 1223 true, // Is this a gigundo-rotund-enormous unit? 1224 false, // Is the unit's art as "chunky" cardinal facing only? 1225 false, // Is the unit capable of cloaking? 1226 false, // Does the unit have a constant animation? 1227 -1, // AMMO: Number of shots it has (default). 1228 180, // STRENGTH: Strength (in damage points). 1229 5, // SIGHTRANGE: Range of sighting. 1230 0, // COST: Cost to build (Credits). 1231 99, // SCENARIO: Starting availability scenario. 1232 50,50, // RISK/RWRD: Risk/reward rating values. 1233 HOUSEF_JP, // OWNABLE: Ownable by house (bit field). 1234 WEAPON_TREX,WEAPON_NONE, 1235 ARMOR_STEEL, // ARMOR: Armor type 1236 SPEED_TRACK, // MOVE: Locomotion type. 1237 MPH_FAST, // SPEED: Miles per hour. 1238 5, // ROT: Rate of turn (degrees per tick). 1239 0, // Turret center offset along body centerline. 1240 MISSION_GUARD // ORDERS: Default order to give new unit. 1241 ); 1242 1243 // Stegosaurus 1244 static UnitTypeClass const UnitSteg( 1245 UNIT_STEG, 1246 TXT_STEG, // NAME: Text name of this unit type. 1247 "STEG", // NAME: Text name of this unit type. 1248 ANIM_STEG_DIE, // EXPLOSION: Type of explosion when destroyed. 1249 99, // Build level. 1250 STRUCTF_NONE, // Building prerequisite. 1251 false, // Can this be a goodie surprise from a crate? 1252 true, // Is a leader type? 1253 true, // Only has eight facings? 1254 true, // Always use the given name for the vehicle? 1255 false, // Is this a typical transport vehicle? 1256 false, // Can it be crushed by a heavy vehicle? 1257 true, // Can this unit squash infantry? 1258 false, // Does this unit harvest Tiberium? 1259 true, // Is invisible to radar? 1260 true, // Is selectable by player? 1261 true, // Can it be a target for attack or move? 1262 false, // Is it insignificant (won't be announced)? 1263 false, // Is it immune to normal combat damage? 1264 false, // Is it equipped with a combat turret? 1265 false, // Fires multiple shots in quick succession? 1266 false, // Can it be repaired in a repair facility? 1267 false, // Can the player construct or order this unit? 1268 false, // Is there a crew inside? 1269 false, // Does it have a rotating radar dish? 1270 true, // Is there an associated firing animation? 1271 false, // Must the turret be in a locked down position while moving? 1272 false, // Does it lay tracks while moving? 1273 true, // Is this a gigundo-rotund-enormous unit? 1274 false, // Is the unit's art as "chunky" cardinal facing only? 1275 false, // Is the unit capable of cloaking? 1276 false, // Does the unit have a constant animation? 1277 -1, // AMMO: Number of shots it has (default). 1278 600, // STRENGTH: Strength (in damage points). 1279 5, // SIGHTRANGE: Range of sighting. 1280 0, // COST: Cost to build (Credits). 1281 99, // SCENARIO: Starting availability scenario. 1282 50,50, // RISK/RWRD: Risk/reward rating values. 1283 HOUSEF_JP, // OWNABLE: Ownable by house (bit field). 1284 WEAPON_STEG,WEAPON_NONE, 1285 ARMOR_STEEL, // ARMOR: Armor type 1286 SPEED_TRACK, // MOVE: Locomotion type. 1287 MPH_SLOW, // SPEED: Miles per hour. 1288 5, // ROT: Rate of turn (degrees per tick). 1289 0, // Turret center offset along body centerline. 1290 MISSION_GUARD // ORDERS: Default order to give new unit. 1291 ); 1292 1293 1294 #ifdef PETROGLYPH_EXAMPLE_MOD 1295 1296 // Nuke tank 1297 static UnitTypeClass const UnitNukeTank( 1298 UNIT_NUKE_TANK, 1299 TXT_HTANK, // NAME: Text name of this unit type. 1300 "NTNK", // NAME: Text name of this unit type. 1301 ANIM_ART_EXP1, // EXPLOSION: Type of explosion when destroyed. 1302 7, // Build level. 1303 STRUCTF_TEMPLE, // Building prerequisite. 1304 true, // Can this be a goodie surprise from a crate? 1305 true, // Is a leader type? 1306 false, // Only has eight facings? 1307 false, // Always use the given name for the vehicle? 1308 false, // Is this a typical transport vehicle? 1309 false, // Can it be crushed by a heavy vehicle? 1310 true, // Can this unit squash infantry? 1311 false, // Does this unit harvest Tiberium? 1312 false, // Is invisible to radar? 1313 true, // Is selectable by player? 1314 true, // Can it be a target for attack or move? 1315 false, // Is it insignificant (won't be announced)? 1316 false, // Is it immune to normal combat damage? 1317 true, // Is it equipped with a combat turret? 1318 false, // Fires multiple shots in quick succession? 1319 true, // Can it be repaired in a repair facility? 1320 true, // Can the player construct or order this unit? 1321 true, // Is there a crew inside? 1322 false, // Does it have a rotating radar dish? 1323 false, // Is there an associated firing animation? 1324 false, // Must the turret be in a locked down position while moving? 1325 true, // Does it lay tracks while moving? 1326 true, // Is this a gigundo-rotund-enormous unit? 1327 false, // Is the unit's art as "chunky" cardinal facing only? 1328 false, // Is the unit capable of cloaking? 1329 false, // Does the unit have a constant animation? 1330 -1, // AMMO: Number of shots it has (default). 1331 600, // STRENGTH: Strength (in damage points). 1332 6, // SIGHTRANGE: Range of sighting. 1333 1500, // COST: Cost to build (Credits). 1334 10, // SCENARIO: Starting availability scenario. 1335 80,80, // RISK/RWRD: Risk/reward rating values. 1336 HOUSEF_MULTI1| 1337 HOUSEF_MULTI2| 1338 HOUSEF_MULTI3| 1339 HOUSEF_MULTI4| 1340 HOUSEF_MULTI5| 1341 HOUSEF_MULTI6| 1342 HOUSEF_JP| 1343 HOUSEF_BAD, // OWNABLE: Ownable by house (bit field). 1344 WEAPON_NUKE_LOB,WEAPON_NONE, 1345 ARMOR_STEEL, // ARMOR: Armor type 1346 SPEED_TRACK, // MOVE: Locomotion type. 1347 MPH_KINDA_SLOW, // SPEED: Miles per hour. 1348 3, // ROT: Rate of turn (degrees per tick). 1349 0, // Turret center offset along body centerline. 1350 MISSION_HUNT // ORDERS: Default order to give new unit. 1351 ); 1352 1353 #endif PETROGLYPH_EXAMPLE_MOD 1354 1355 /* 1356 ** This is the array of pointers to the static data associated with each 1357 ** vehicle type. 1358 */ 1359 UnitTypeClass const * const UnitTypeClass::Pointers[UNIT_COUNT] = { 1360 &UnitHTank, // UNIT_HTANK 1361 &UnitMTank, // UNIT_MTANK 1362 &UnitLTank, // UNIT_LTANK 1363 &UnitSTank, // UNIT_STANK 1364 &UnitFTank, // UNIT_FTANK 1365 &UnitVisceroid, // UNIT_VICE 1366 &UnitAPC, // UNIT_APC 1367 &UnitMLRS, // UNIT_MLRS 1368 &UnitJeep, // UNIT_JEEP 1369 &UnitBuggy, // UNIT_BUGGY 1370 &UnitHarvester, // UNIT_HARVESTER 1371 &UnitArty, // UNIT_ARTY 1372 &UnitSAM, // UNIT_MSAM 1373 &UnitHover, // UNIT_HOVER 1374 &UnitMHQ, // UNIT_MHQ 1375 &UnitGunBoat, // UNIT_GUNBOAT 1376 &UnitMCV, // UNIT_MCV 1377 &UnitBike, // UNIT_BIKE 1378 &UnitTric, // UNIT_TRIC 1379 &UnitTrex, // UNIT_TREX 1380 &UnitRapt, // UNIT_RAPT 1381 &UnitSteg, // UNIT_STEG 1382 #ifdef PETROGLYPH_EXAMPLE_MOD 1383 &UnitNukeTank, // UNIT_NUKE_TANK 1384 #endif //PETROGLYPH_EXAMPLE_MOD 1385 1386 }; 1387 1388 1389 /*********************************************************************************************** 1390 * UnitTypeClass::UnitTypeClass -- Constructor for unit types. * 1391 * * 1392 * This is the constructor for the unit types. It is used to initialize the unit type class * 1393 * structure. The unit type class is used to control the behavior of the various types * 1394 * of units in the game. This constructor is called for every unique unit type as it * 1395 * exists in the array of unit types. * 1396 * * 1397 * INPUT: bla bla bla... see below * 1398 * * 1399 * OUTPUT: none * 1400 * * 1401 * WARNINGS: none * 1402 * * 1403 * HISTORY: * 1404 * 06/20/1994 JLB : Created. * 1405 *=============================================================================================*/ 1406 UnitTypeClass::UnitTypeClass(UnitType type, 1407 int name, 1408 char const *ininame, 1409 AnimType exp, 1410 unsigned char level, 1411 long pre, 1412 bool is_goodie, 1413 bool is_leader, 1414 bool is_eight, 1415 bool is_nominal, 1416 bool is_transporter, 1417 bool is_crushable, 1418 bool is_crusher, 1419 bool is_harvest, 1420 bool is_stealthy, 1421 bool is_selectable, 1422 bool is_legal_target, 1423 bool is_insignificant, 1424 bool is_immune, 1425 bool is_turret_equipped, 1426 bool is_twoshooter, 1427 bool is_repairable, 1428 bool is_buildable, 1429 bool is_crew, 1430 bool is_radar_equipped, 1431 bool is_fire_anim, 1432 bool is_lock_turret, 1433 bool is_tracked, 1434 bool is_gigundo, 1435 bool is_chunky, 1436 bool is_cloakable, 1437 bool is_animating, 1438 int ammo, 1439 unsigned short strength, 1440 int sightrange, 1441 int cost, 1442 int scenario, 1443 int risk, 1444 int reward, 1445 int ownable, 1446 WeaponType primary, WeaponType secondary, 1447 ArmorType armor, 1448 SpeedType speed, 1449 MPHType maxSpeed, 1450 unsigned rot, 1451 int toffset, 1452 MissionType order) : 1453 TechnoTypeClass(name, 1454 ininame, 1455 level, 1456 pre, 1457 is_leader, 1458 false, 1459 is_nominal, 1460 is_transporter, 1461 false, 1462 is_crushable, 1463 is_stealthy, 1464 is_selectable, 1465 is_legal_target, 1466 is_insignificant, 1467 is_immune, 1468 false, 1469 is_twoshooter, 1470 is_turret_equipped, 1471 is_repairable, 1472 is_buildable, 1473 is_crew, 1474 ammo, 1475 strength, 1476 maxSpeed, 1477 sightrange, 1478 cost, 1479 scenario, 1480 risk, 1481 reward, 1482 ownable, 1483 primary,secondary, 1484 armor) 1485 { 1486 Explosion = exp; 1487 IsCrateGoodie = is_goodie; 1488 IsPieceOfEight = is_eight; 1489 IsCloakable = is_cloakable; 1490 IsChunkyShape = is_chunky; 1491 IsCrusher = is_crusher; 1492 IsFireAnim = is_fire_anim; 1493 IsGigundo = is_gigundo; 1494 IsLockTurret = is_lock_turret; 1495 IsRadarEquipped = is_radar_equipped; 1496 IsToHarvest = is_harvest; 1497 IsTracked = is_tracked; 1498 IsAnimating = is_animating; 1499 Mission = order; 1500 ROT = rot; 1501 Speed = speed; 1502 TurretOffset = toffset; 1503 Type = type; 1504 } 1505 1506 1507 /*********************************************************************************************** 1508 * UnitTypeClass::Occupy_List -- Returns with unit occupation list. * 1509 * * 1510 * This routine returns with an occupation list for the unit type. * 1511 * The unit occupation list is used for placing units. * 1512 * * 1513 * INPUT: placement -- Is this for placement legality checking only? The normal condition * 1514 * is for marking occupation flags. * 1515 * * 1516 * OUTPUT: Returns with a pointer to the unit occupation list. * 1517 * * 1518 * WARNINGS: none * 1519 * * 1520 * HISTORY: * 1521 * 05/14/1994 JLB : Created. * 1522 *=============================================================================================*/ 1523 short const * UnitTypeClass::Occupy_List(bool ) const 1524 { 1525 static short const _simple[] = {0, REFRESH_EOL}; 1526 static short const _gun[] = {0, -1, 1, REFRESH_EOL}; 1527 1528 if (Type == UNIT_GUNBOAT) { 1529 return(&_gun[0]); 1530 } 1531 return(&_simple[0]); 1532 } 1533 1534 1535 /*********************************************************************************************** 1536 * UnitTypeClass::From_Name -- Fetch class pointer from specified name. * 1537 * * 1538 * This routine converts an ASCII representation of a unit class and * 1539 * converts it into a real unit class number. * 1540 * * 1541 * INPUT: name -- ASCII name representing a unit class. * 1542 * * 1543 * OUTPUT: Returns with the actual unit class number that the string * 1544 * represents. * 1545 * * 1546 * WARNINGS: none * 1547 * * 1548 * HISTORY: * 1549 * 10/07/1992 JLB : Created. * 1550 * 05/02/1994 JLB : Converted to member function. * 1551 *=============================================================================================*/ 1552 UnitType UnitTypeClass::From_Name(char const *name) 1553 { 1554 if (name) { 1555 for (UnitType classid = UNIT_FIRST; classid < UNIT_COUNT; classid++) { 1556 if (stricmp(Pointers[classid]->IniName, name) == 0) { 1557 return(classid); 1558 } 1559 } 1560 } 1561 return(UNIT_NONE); 1562 } 1563 1564 1565 #ifdef SCENARIO_EDITOR 1566 /*********************************************************************************************** 1567 * UnitTypeClass::Display -- Displays a generic unit shape. * 1568 * * 1569 * This routine displays a generic representation of a unit of this * 1570 * type. Typically, it is used when adding objects to the game map. * 1571 * * 1572 * INPUT: x,y -- Coordinate to render the unit shape. * 1573 * * 1574 * window-- Window to render within. * 1575 * * 1576 * house -- House to render the unit colors. * 1577 * * 1578 * OUTPUT: none * 1579 * * 1580 * WARNINGS: none * 1581 * * 1582 * HISTORY: * 1583 * 05/14/1994 JLB : Created. * 1584 * 11/08/1994 JLB : Handles chunky type vehicles now. * 1585 *=============================================================================================*/ 1586 void UnitTypeClass::Display(int x, int y, WindowNumberType window, HousesType house) const 1587 { 1588 int shape = 0; 1589 void const * ptr = Get_Cameo_Data(); 1590 if (!ptr) { 1591 ptr = Get_Image_Data(); 1592 shape = IsChunkyShape ? 0 : 5; 1593 } 1594 CC_Draw_Shape(ptr, shape, x, y, window, SHAPE_FADING|SHAPE_CENTER|SHAPE_WIN_REL, HouseTypeClass::As_Reference(house).RemapTable); 1595 } 1596 1597 1598 /*********************************************************************************************** 1599 * UnitTypeClass::Prep_For_Add -- Prepares scenario editor to add unit. * 1600 * * 1601 * This routine is used to prepare the generic object adder dialog * 1602 * box so that it will be able to add a unit object. * 1603 * * 1604 * INPUT: none * 1605 * * 1606 * OUTPUT: none * 1607 * * 1608 * WARNINGS: none * 1609 * * 1610 * HISTORY: * 1611 * 05/23/1994 JLB : Created. * 1612 * 06/04/1994 JLB : Uses map editing interface functions. * 1613 *=============================================================================================*/ 1614 void UnitTypeClass::Prep_For_Add(void) 1615 { 1616 for (UnitType index = UNIT_FIRST; index < UNIT_COUNT; index++) { 1617 if (As_Reference(index).Get_Image_Data() != NULL) { 1618 Map.Add_To_List(&As_Reference(index)); 1619 } 1620 } 1621 } 1622 #endif 1623 1624 1625 /*********************************************************************************************** 1626 * UnitTypeClass::One_Time -- Performs one time processing for unit type class objects. * 1627 * * 1628 * This routine is used to perform the action necessary only once for the unit type class. * 1629 * It loads unit shapes and brain files. This routine should only be called once. * 1630 * * 1631 * INPUT: none * 1632 * * 1633 * OUTPUT: none * 1634 * * 1635 * WARNINGS: Only call this routine once. * 1636 * * 1637 * HISTORY: * 1638 * 05/28/1994 JLB : Created. * 1639 *=============================================================================================*/ 1640 void UnitTypeClass::One_Time(void) 1641 { 1642 for (UnitType index = UNIT_FIRST; index < UNIT_COUNT; index++) { 1643 char fullname[_MAX_FNAME+_MAX_EXT]; 1644 char buffer[_MAX_FNAME]; 1645 UnitTypeClass const & uclass = As_Reference(index); 1646 CCFileClass file; 1647 int largest; // Largest dimension of shape (so far). 1648 1649 void const *ptr = NULL; // Shape pointer and set pointer. 1650 1651 largest = 0; 1652 if (uclass.IsBuildable) { 1653 1654 /* 1655 ** Fetch the supporting data files for the unit. 1656 */ 1657 if ( Get_Resolution_Factor() ) { 1658 sprintf(buffer, "%sICNH", uclass.IniName); 1659 } else { 1660 sprintf(buffer, "%sICON", uclass.IniName); 1661 } 1662 _makepath(fullname, NULL, NULL, buffer, ".SHP"); 1663 ((void const *&)uclass.CameoData) = MixFileClass::Retrieve(fullname); 1664 } 1665 1666 /* 1667 ** Fetch a pointer to the unit's shape data. 1668 */ 1669 // Assume funpark mode might be required. ST - 10/14/2019 11:53AM 1670 //if (!uclass.IsPieceOfEight || (Special.IsJurassic && AreThingiesEnabled) ) { 1671 _makepath(fullname, NULL, NULL, uclass.IniName, ".SHP"); 1672 ptr = MixFileClass::Retrieve(fullname); 1673 //} else { 1674 // ptr = NULL; 1675 //} 1676 1677 #ifdef PETROGLYPH_EXAMPLE_MOD 1678 /* 1679 ** Need some kind of shape data for our modded unit 1680 */ 1681 if (index == UNIT_NUKE_TANK && ptr == NULL) { 1682 _makepath(fullname, NULL, NULL, "HTNK", ".SHP"); 1683 ptr = MixFileClass::Retrieve(fullname); 1684 } 1685 #endif //PETROGLYPH_EXAMPLE_MOD 1686 1687 ((void const *&)uclass.ImageData) = ptr; 1688 if (ptr) { 1689 1690 if (index == UNIT_MLRS || index == UNIT_MSAM) { 1691 largest = 26; 1692 } else { 1693 largest = MAX(largest, (int)Get_Build_Frame_Width(ptr)); 1694 largest = MAX(largest, (int)Get_Build_Frame_Height(ptr)); 1695 } 1696 } 1697 1698 ((int &)uclass.MaxSize) = MAX(largest, 8); 1699 } 1700 1701 /* 1702 ** Load the wake shapes in at this time. 1703 */ 1704 if (!WakeShapes) { 1705 WakeShapes = MixFileClass::Retrieve("WAKE.SHP"); 1706 } 1707 } 1708 1709 1710 1711 /*********************************************************************************************** 1712 * UTC::Init -- fetches the sidebar icons for the unittypeclass objects * 1713 * * 1714 * * 1715 * * 1716 * INPUT: theater type * 1717 * * 1718 * OUTPUT: Nothing * 1719 * * 1720 * WARNINGS: None * 1721 * * 1722 * HISTORY: * 1723 * 4/26/96 4:07PM ST : Created * 1724 *=============================================================================================*/ 1725 1726 void UnitTypeClass::Init(TheaterType theater) 1727 { 1728 1729 if (Get_Resolution_Factor()){ 1730 1731 if (theater != LastTheater){ 1732 1733 void const * cameo_ptr; 1734 char fullname[_MAX_FNAME+_MAX_EXT]; 1735 char buffer[_MAX_FNAME]; 1736 1737 for (UnitType index = UNIT_FIRST; index < UNIT_COUNT; index++) { 1738 1739 UnitTypeClass const & uclass = As_Reference(index); 1740 1741 ((void const *&)uclass.CameoData) = NULL; 1742 1743 if (uclass.IsBuildable) { 1744 sprintf(buffer, "%sICNH", uclass.IniName); 1745 _makepath(fullname, NULL, NULL, buffer, Theaters[theater].Suffix); 1746 cameo_ptr = MixFileClass::Retrieve(fullname); 1747 if (cameo_ptr){ 1748 ((void const *&)uclass.CameoData) = cameo_ptr; 1749 } 1750 } 1751 } 1752 } 1753 } 1754 } 1755 1756 1757 /*********************************************************************************************** 1758 * UnitTypeClass::Create_And_Place -- Creates and places a unit object onto the map. * 1759 * * 1760 * This routine is used by the scenario editor to create and place a unit object of this * 1761 * type onto the map. * 1762 * * 1763 * INPUT: cell -- The cell that the unit is to be placed into. * 1764 * * 1765 * house -- The house that the unit belongs to. * 1766 * * 1767 * OUTPUT: bool; Was the unit created and placed successfully? * 1768 * * 1769 * WARNINGS: none * 1770 * * 1771 * HISTORY: * 1772 * 05/28/1994 JLB : Created. * 1773 *=============================================================================================*/ 1774 bool UnitTypeClass::Create_And_Place(CELL cell, HousesType house) const 1775 { 1776 UnitClass * unit = new UnitClass(Type, house); 1777 if (unit) { 1778 return(unit->Unlimbo(Cell_Coord(cell), Random_Pick(DIR_N, DIR_MAX))); 1779 } 1780 return(false); 1781 } 1782 1783 1784 /*********************************************************************************************** 1785 * UnitTypeClass::Create_One_Of -- Creates a unit in limbo. * 1786 * * 1787 * This function creates a unit of this type and keeps it in limbo. A pointer to the * 1788 * created unit object is returned. It is presumed that this object will later be * 1789 * unlimboed at the correct time and place. * 1790 * * 1791 * INPUT: house -- Pointer to the house that is to own the unit. * 1792 * * 1793 * OUTPUT: Returns with a pointer to the created unit object. If the unit object * 1794 * could not be created, then NULL is returned. * 1795 * * 1796 * WARNINGS: none * 1797 * * 1798 * HISTORY: * 1799 * 06/07/1994 JLB : Created. * 1800 *=============================================================================================*/ 1801 ObjectClass * UnitTypeClass::Create_One_Of(HouseClass * house) const 1802 { 1803 return(new UnitClass(Type, house->Class->House)); 1804 } 1805 1806 1807 /*********************************************************************************************** 1808 * UnitTypeClass::Who_Can_Build_Me -- Determines which factory can build this unit type. * 1809 * * 1810 * Use this routine to examine the buildings on the map in order to determine which one * 1811 * can build the unit type. * 1812 * * 1813 * INPUT: intheory -- If this parameter is true, then no examination of whether the factory * 1814 * is currently busy is performed. It just checks to see if the unit * 1815 * could be produced "in theory". * 1816 * * 1817 * legal -- Should building prerequisite legality checks be performed as well? * 1818 * For building placements, this is usually false. For sidebar button * 1819 * adding, this is usually true. * 1820 * * 1821 * house -- The owner of the unit to be produced. * 1822 * * 1823 * OUTPUT: Returns with pointer to the factory that can produce the unit. If no suitable * 1824 * factory could be found then NULL is returned. * 1825 * * 1826 * WARNINGS: none * 1827 * * 1828 * HISTORY: * 1829 * 12/12/1994 JLB : Created. * 1830 *=============================================================================================*/ 1831 BuildingClass * UnitTypeClass::Who_Can_Build_Me(bool intheory, bool legal, HousesType house) const 1832 { 1833 BuildingClass * anybuilding = NULL; 1834 1835 for (int index = 0; index < Buildings.Count(); index++) { 1836 BuildingClass * building = Buildings.Ptr(index); 1837 1838 if (building && 1839 !building->IsInLimbo && 1840 building->House->Class->House == house && 1841 building->Class->ToBuild == RTTI_UNITTYPE && 1842 building->Mission != MISSION_DECONSTRUCTION && 1843 ((1L << building->ActLike) & Ownable) && 1844 (!legal || building->House->Can_Build(Type, building->ActLike)) && 1845 (intheory || !building->In_Radio_Contact())) { 1846 1847 if (building->IsLeader) return(building); 1848 anybuilding = building; 1849 } 1850 } 1851 return(anybuilding); 1852 } 1853 1854 1855 /*********************************************************************************************** 1856 * UnitTypeClass::As_Reference -- Fetches a reference to the unit type class specified. * 1857 * * 1858 * Use this routine to return a reference to the UnitTypeClass object as indicated by * 1859 * the unit type number speicified. * 1860 * * 1861 * INPUT: type -- The unit type number to convert into a UnitTypeClass object reference. * 1862 * * 1863 * OUTPUT: Returns with a reference to the unit type class object specified. * 1864 * * 1865 * WARNINGS: none * 1866 * * 1867 * HISTORY: * 1868 * 01/23/1995 JLB : Created. * 1869 *=============================================================================================*/ 1870 UnitTypeClass const & UnitTypeClass::As_Reference(UnitType type) 1871 { 1872 return(*Pointers[type]); 1873 } 1874 1875 1876 /*********************************************************************************************** 1877 * UnitTypeClass::Dimensions -- Determines the unit's pixel dimensions. * 1878 * * 1879 * This routine will fill in the width and height for this unit type. This width and * 1880 * height are used to render the selection rectangle and the positioning of the health * 1881 * bargraph. * 1882 * * 1883 * INPUT: width -- Reference to the width of the unit (to be filled in). * 1884 * * 1885 * height -- Reference to the height of the unit (to be filled in). * 1886 * * 1887 * OUTPUT: none * 1888 * * 1889 * WARNINGS: none * 1890 * * 1891 * HISTORY: * 1892 * 01/23/1995 JLB : Created. * 1893 *=============================================================================================*/ 1894 void UnitTypeClass::Dimensions(int &width, int &height) const 1895 { 1896 if (Type == UNIT_GUNBOAT) { 1897 width = 46; 1898 height = 18; 1899 } else { 1900 width = MaxSize-(MaxSize/4); 1901 height = MaxSize-(MaxSize/4); 1902 } 1903 } 1904 1905 /*********************************************************************************************** 1906 * UnitTypeClass::Repair_Cost -- Determines cost per "step" of repair. * 1907 * * 1908 * Use this routine to determine how much it will cost to repair the unit one * 1909 * step. A step is defined as the number of hit points returned from the Repair_Step() * 1910 * function. * 1911 * * 1912 * INPUT: none * 1913 * * 1914 * OUTPUT: Returns with the credit cost to repair this unit one step. * 1915 * * 1916 * WARNINGS: none * 1917 * * 1918 * HISTORY: * 1919 * 04/03/1995 BWG : Created. * 1920 *=============================================================================================*/ 1921 int UnitTypeClass::Repair_Cost(void) const 1922 { 1923 return(Fixed_To_Cardinal(Cost/(MaxStrength/REPAIR_STEP), REPAIR_PERCENT)); 1924 } 1925 1926 1927 /*********************************************************************************************** 1928 * UnitTypeClass::Repair_Step -- Determines the repair step rate. * 1929 * * 1930 * This routine will determine how many strength points get healed for each "step". The * 1931 * cost to repair one step is determine from the Repair_Cost() function. * 1932 * * 1933 * INPUT: none * 1934 * * 1935 * OUTPUT: Returns with the number of health points repaired for each "step". * 1936 * * 1937 * WARNINGS: none * 1938 * * 1939 * HISTORY: * 1940 * 04/03/1995 BWG : Created. * 1941 *=============================================================================================*/ 1942 int UnitTypeClass::Repair_Step(void) const 1943 { 1944 return(REPAIR_STEP); 1945 } 1946 1947 1948 /*********************************************************************************************** 1949 * UnitTypeClass::Max_Pips -- Fetches the maximum pips allowed for this unit. * 1950 * * 1951 * This routine will determine the number of pips (maximum) allowed for this unit type. * 1952 * Typically, this is the number of passengers allowed, but for harvesters, it is the * 1953 * number of credits it holds divided by 100. * 1954 * * 1955 * INPUT: none * 1956 * * 1957 * OUTPUT: Returns with the maximum number of pips allowed for this unit type. * 1958 * * 1959 * WARNINGS: none * 1960 * * 1961 * HISTORY: * 1962 * 06/26/1995 JLB : Created. * 1963 *=============================================================================================*/ 1964 int UnitTypeClass::Max_Pips(void) const 1965 { 1966 if (Type == UNIT_HARVESTER) { 1967 return(FULL_LOAD_CREDITS/100); 1968 } 1969 1970 if (IsTransporter) { 1971 return(Max_Passengers()); 1972 } 1973 return(0); 1974 }