CnC_Remastered_Collection

Command and Conquer: Red Alert
Log | Files | Refs | README | LICENSE

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 }