1 #ifndef __MONSTER_DEFINITIONS_H 2 #define __MONSTER_DEFINITIONS_H 3 4 /* 5 MONSTER_DEFINITIONS.H 6 7 Copyright (C) 1991-2001 and beyond by Bungie Studios, Inc. 8 and the "Aleph One" developers. 9 10 This program is free software; you can redistribute it and/or modify 11 it under the terms of the GNU General Public License as published by 12 the Free Software Foundation; either version 3 of the License, or 13 (at your option) any later version. 14 15 This program is distributed in the hope that it will be useful, 16 but WITHOUT ANY WARRANTY; without even the implied warranty of 17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 GNU General Public License for more details. 19 20 This license is contained in the file "COPYING", 21 which is included with this source code; it is available online at 22 http://www.gnu.org/licenses/gpl.html 23 24 Monday, May 30, 1994 9:04:01 PM 25 26 Jan 30, 2000 (Loren Petrich): 27 Changed "class" to "_class" to make data structures more C++-friendly 28 29 Feb 3, 2000 (Loren Petrich): 30 Added VacBobs and their physics 31 32 Oct 26, 2000 (Mark Levin) 33 Added some includes that this file depends on 34 */ 35 36 #include "effects.h" 37 #include "items.h" 38 #include "map.h" 39 #include "monsters.h" 40 #include "projectiles.h" 41 #include "SoundManagerEnums.h" 42 43 44 /* ---------- macros */ 45 46 #define TYPE_IS_NEUTRAL(definition,type) (!((definition->friends|definition->enemies)&monster_definitions[type]._class)) 47 #define TYPE_IS_ENEMY(definition,type) (definition->enemies&monster_definitions[type]._class) 48 #define TYPE_IS_FRIEND(definition,type) (definition->friends&monster_definitions[type]._class) 49 50 /* ---------- constants */ 51 52 enum /* monster classes */ 53 { 54 _class_player_bit, 55 _class_human_civilian_bit, 56 _class_madd_bit, 57 _class_possessed_hummer_bit, 58 59 _class_defender_bit, 60 61 _class_fighter_bit, 62 _class_trooper_bit, 63 _class_hunter_bit, 64 _class_enforcer_bit, 65 _class_juggernaut_bit, 66 _class_hummer_bit, 67 68 _class_compiler_bit, 69 _class_cyborg_bit, 70 _class_assimilated_civilian_bit, 71 72 _class_tick_bit, 73 _class_yeti_bit, 74 75 _class_player= 1<<_class_player_bit, 76 _class_human_civilian= 1<<_class_human_civilian_bit, 77 _class_madd= 1<<_class_madd_bit, 78 _class_possessed_hummer= 1<<_class_possessed_hummer_bit, 79 _class_human= _class_player|_class_human_civilian|_class_madd|_class_possessed_hummer, 80 81 _class_defender= 1<<_class_defender_bit, 82 83 _class_fighter= 1<<_class_fighter_bit, 84 _class_trooper= 1<<_class_trooper_bit, 85 _class_hunter= 1<<_class_hunter_bit, 86 _class_enforcer= 1<<_class_enforcer_bit, 87 _class_juggernaut= 1<<_class_juggernaut_bit, 88 _class_pfhor= _class_fighter|_class_trooper|_class_hunter|_class_enforcer|_class_juggernaut, 89 90 _class_compiler= 1<<_class_compiler_bit, 91 _class_cyborg= 1<<_class_cyborg_bit, 92 _class_assimilated_civilian= 1<<_class_assimilated_civilian_bit, 93 _class_hummer= 1<<_class_hummer_bit, 94 _class_client= _class_compiler|_class_assimilated_civilian|_class_cyborg|_class_hummer, 95 96 _class_tick= 1<<_class_tick_bit, 97 _class_yeti= 1<<_class_yeti_bit, 98 _class_native= _class_tick|_class_yeti, 99 100 _class_hostile_alien= _class_pfhor|_class_client, 101 _class_neutral_alien= _class_native 102 }; 103 104 // old Marathon monster classes 105 enum 106 { 107 _class_player_m1 = 0x01, 108 _class_human_civilian_m1 = 0x02, 109 _class_madd_m1 = 0x04, 110 _class_fighter_m1 = 0x08, 111 _class_trooper_m1 = 0x10, 112 _class_hunter_m1 = 0x20, 113 _class_enforcer_m1 = 0x40, 114 _class_juggernaut_m1 = 0x80, 115 // unused 0x100 116 _class_compiler_m1 = 0x200, 117 _class_hulk = 0x400, 118 // unused 0x800 119 _class_looker = 0x1000, 120 // unused 0x2000, 121 _class_wasp = 0x4000, 122 _class_assimilated_civilian_m1 = 0x8000, 123 124 _class_client_m1 = _class_compiler_m1|_class_hulk|_class_assimilated_civilian_m1, 125 _class_pfhor_m1 = _class_fighter_m1|_class_trooper_m1|_class_hunter_m1|_class_enforcer_m1|_class_juggernaut_m1 126 127 }; 128 129 enum /* intelligence: maximum polygon switches before losing lock */ 130 { 131 _intelligence_low= 2, 132 _intelligence_average= 3, 133 _intelligence_high= 8 134 }; 135 136 enum /* door retry masks */ 137 { 138 _slow_door_retry_mask= 63, 139 _normal_door_retry_mask= 31, 140 _fast_door_retry_mask= 15, 141 _vidmaster_door_retry_mask= 3 142 }; 143 144 enum /* flags */ 145 { 146 _monster_is_omniscent= 0x1, /* ignores line-of-sight during find_closest_appropriate_target() */ 147 _monster_flys= 0x2, 148 _monster_is_alien= 0x4, /* moves slower on slower levels, etc. */ 149 _monster_major= 0x8, /* type -1 is minor */ 150 _monster_minor= 0x10, /* type +1 is major */ 151 _monster_cannot_be_dropped= 0x20, /* low levels cannot skip this monster */ 152 _monster_floats= 0x40, /* exclusive from flys; forces the monster to take +�h gradually */ 153 _monster_cannot_attack= 0x80, /* monster has no weapons and cannot attack (runs constantly to safety) */ 154 _monster_uses_sniper_ledges= 0x100, /* sit on ledges and hurl shit at the player (ranged attack monsters only) */ 155 _monster_is_invisible= 0x200, /* this monster uses _xfer_invisibility */ 156 _monster_is_subtly_invisible= 0x400, /* this monster uses _xfer_subtle_invisibility */ 157 _monster_is_kamakazi= 0x800, /* monster does shrapnel damage and will suicide if close enough to target */ 158 _monster_is_berserker= 0x1000, /* below 1/4 vitality this monster goes berserk */ 159 _monster_is_enlarged= 0x2000, /* monster is 1.25 times normal height */ 160 _monster_has_delayed_hard_death= 0x4000, /* always dies soft, then switches to hard */ 161 _monster_fires_symmetrically= 0x8000, /* fires at �dy, simultaneously */ 162 _monster_has_nuclear_hard_death= 0x10000, /* player�s screen whites out and slowly recovers */ 163 _monster_cant_fire_backwards= 0x20000, /* monster can�t turn more than 135� to fire */ 164 _monster_can_die_in_flames= 0x40000, /* uses humanoid flaming body shape */ 165 _monster_waits_with_clear_shot= 0x80000, /* will sit and fire (slowly) if we have a clear shot */ 166 _monster_is_tiny= 0x100000, /* 0.25-size normal height */ 167 _monster_attacks_immediately= 0x200000, /* monster will try an attack immediately */ 168 _monster_is_not_afraid_of_water= 0x400000, 169 _monster_is_not_afraid_of_sewage= 0x800000, 170 _monster_is_not_afraid_of_lava= 0x1000000, 171 _monster_is_not_afraid_of_goo= 0x2000000, 172 _monster_can_teleport_under_media= 0x4000000, 173 _monster_chooses_weapons_randomly= 0x8000000, 174 /* monsters unable to open doors have door retry masks of NONE */ 175 /* monsters unable to switch levels have min,max ledge deltas of 0 */ 176 /* monsters unstopped by bullets have hit frames of NONE */ 177 178 // pseudo flags set when reading Marathon 1 physics 179 _monster_weaknesses_cause_soft_death = 0x10000000, 180 _monster_screams_when_crushed = 0x20000000, 181 _monster_makes_sound_when_activated = 0x40000000, // instead of when locking on a target 182 _monster_can_grenade_climb = 0x80000000, // only applies to player 183 }; 184 185 enum /* monster speeds (world_distance per tick); also used for projectiles */ 186 { 187 _speed_slow= WORLD_ONE/120, 188 _speed_medium= WORLD_ONE/80, 189 _speed_almost_fast= WORLD_ONE/70, 190 _speed_fast= WORLD_ONE/40, 191 _speed_superfast1= WORLD_ONE/30, 192 _speed_superfast2= WORLD_ONE/28, 193 _speed_superfast3= WORLD_ONE/26, 194 _speed_superfast4= WORLD_ONE/24, 195 _speed_superfast5= WORLD_ONE/22, 196 _speed_blinding= WORLD_ONE/20, 197 _speed_insane= WORLD_ONE/10 198 }; 199 200 #define NORMAL_MONSTER_GRAVITY (WORLD_ONE/120) 201 #define NORMAL_MONSTER_TERMINAL_VELOCITY (WORLD_ONE/14) 202 203 /* ---------- monster definition structures */ 204 205 struct attack_definition 206 { 207 int16 type; 208 int16 repetitions; 209 angle error; /* �error is added to the firing angle */ 210 world_distance range; /* beyond which we cannot attack */ 211 int16 attack_shape; /* attack occurs when keyframe is displayed */ 212 213 world_distance dx, dy, dz; /* +dy is right, +dx is out, +dz is up */ 214 }; 215 216 struct monster_definition /* <128 bytes */ 217 { 218 int16 collection; 219 220 int16 vitality; 221 uint32 immunities, weaknesses; 222 uint32 flags; 223 224 int32 _class; /* our class */ 225 int32 friends, enemies; /* bit fields of what classes we consider friendly and what types we don�t like */ 226 227 _fixed sound_pitch; 228 int16 activation_sound, friendly_activation_sound, clear_sound; 229 int16 kill_sound, apology_sound, friendly_fire_sound; 230 int16 flaming_sound; /* the scream we play when we go down in flames */ 231 int16 random_sound, random_sound_mask; /* if moving and locked play this sound if we get time and our mask comes up */ 232 233 int16 carrying_item_type; /* an item type we might drop if we don�t explode */ 234 235 world_distance radius, height; 236 world_distance preferred_hover_height; 237 world_distance minimum_ledge_delta, maximum_ledge_delta; 238 _fixed external_velocity_scale; 239 int16 impact_effect, melee_impact_effect, contrail_effect; 240 241 int16 half_visual_arc, half_vertical_visual_arc; 242 world_distance visual_range, dark_visual_range; 243 int16 intelligence; 244 int16 speed, gravity, terminal_velocity; 245 int16 door_retry_mask; 246 int16 shrapnel_radius; /* no shrapnel if NONE */ 247 struct damage_definition shrapnel_damage; 248 249 shape_descriptor hit_shapes; 250 shape_descriptor hard_dying_shape, soft_dying_shape; /* minus dead frame */ 251 shape_descriptor hard_dead_shapes, soft_dead_shapes; /* NONE for vanishing */ 252 shape_descriptor stationary_shape, moving_shape; 253 shape_descriptor teleport_in_shape, teleport_out_shape; 254 255 /* which type of attack the monster actually uses is determined at attack time; typically 256 melee attacks will occur twice as often as ranged attacks because the monster will be 257 stopped (and stationary monsters attack twice as often as moving ones) */ 258 int16 attack_frequency; 259 struct attack_definition melee_attack; 260 struct attack_definition ranged_attack; 261 }; 262 263 // So as not to repeat in script_instructions.cpp (Pfhortran) 264 #ifndef DONT_REPEAT_DEFINITIONS 265 266 /* ---------- monster definitions */ 267 268 struct monster_definition monster_definitions[NUMBER_OF_MONSTER_TYPES]; 269 const struct monster_definition original_monster_definitions[NUMBER_OF_MONSTER_TYPES]= 270 { 271 { /* _monster_marine (can�t be used as a regular monster) */ 272 _collection_player, /* shape collection */ 273 20, 0, 0, /* vitality, immunities, weaknesses */ 274 _monster_cannot_be_dropped|_monster_can_die_in_flames, /* flags */ 275 276 _class_player, 277 _class_human, /* friends */ 278 -1, /* enemies */ 279 280 _normal_frequency, /* sound pitch */ 281 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 282 NONE, /* flaming death sound */ 283 NONE, 0, /* random sound, random sound mask */ 284 285 NONE, /* carrying item type */ 286 287 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 288 0, /* preferred hover height */ 289 0, 0, 290 (3*FIXED_ONE)/4, /* external velocity scale */ 291 _effect_player_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 292 293 0, 0, /* half visual arc, half vertical visual arc */ 294 0, 0, /* visual range, dark visual range */ 295 _intelligence_low, /* intelligence */ 296 _speed_almost_fast, /* speed */ 297 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 298 _normal_door_retry_mask, /* door retry mask */ 299 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 300 301 0, /* being hit */ 302 0, 0, /* dying hard (popping), dying soft (falling) */ 303 0, 0, /* hard dead frames, soft dead frames */ 304 0, 0, /* stationary shape, moving shape (no permutations) */ 305 0, 0, /* teleport in shape, teleport out shape */ 306 }, 307 308 { /* _monster_tick_minor */ 309 BUILD_COLLECTION(_collection_tick, 0), /* shape collection */ 310 0, 0, 0, /* vitality, immunities, weaknesses */ 311 _monster_is_alien|_monster_minor|_monster_flys|_monster_has_delayed_hard_death|_monster_cannot_attack, /* flags */ 312 313 _class_tick, /* class */ 314 -1, /* friends */ 315 0, /* enemies */ 316 317 _normal_frequency, /* sound pitch */ 318 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 319 NONE, /* flaming death sound */ 320 _snd_tick_chatter, 0, /* random sound, random sound mask */ 321 322 NONE, /* carrying item type */ 323 324 WORLD_ONE_HALF, WORLD_ONE_HALF, /* radius, height */ 325 0, /* preferred hover height */ 326 INT16_MIN, INT16_MAX, /* minimum ledge delta, maximum ledge delta */ 327 FIXED_ONE, /* external velocity scale */ 328 NONE, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 329 330 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 331 30*WORLD_ONE, 15*WORLD_ONE, /* visual range, dark visual range */ 332 _intelligence_low, /* intelligence */ 333 _speed_blinding, /* speed */ 334 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 335 NONE, /* door retry mask */ 336 NONE, {NONE, _alien_damage, 30, 10, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 337 338 0, /* being hit */ 339 6, 3, /* dying hard (popping), dying soft (falling) */ 340 5, 5, /* hard dead frames, soft dead frames */ 341 1, 1, /* stationary shape, moving shape (no permutations) */ 342 UNONE, UNONE, /* teleport in shape, teleport out shape */ 343 344 2*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 345 346 /* melee attack */ 347 { 348 NONE, /* melee attack type */ 349 }, 350 351 /* ranged attack */ 352 { 353 NONE, /* ranged attack type */ 354 } 355 }, 356 357 { /* _monster_tick_major */ 358 BUILD_COLLECTION(_collection_tick, 0), /* shape collection */ 359 0, 0, 0, /* vitality, immunities, weaknesses */ 360 _monster_is_alien|_monster_major|_monster_flys|_monster_has_delayed_hard_death|_monster_cannot_attack, /* flags */ 361 362 _class_tick, /* class */ 363 -1, /* friends */ 364 0, /* enemies */ 365 366 _higher_frequency, /* sound pitch */ 367 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 368 NONE, /* flaming death sound */ 369 _snd_tick_chatter, 0, /* random sound, random sound mask */ 370 371 NONE, /* carrying item type */ 372 373 WORLD_ONE/5, WORLD_ONE_FOURTH, /* radius, height */ 374 0, /* preferred hover height */ 375 INT16_MIN, INT16_MAX, /* minimum ledge delta, maximum ledge delta */ 376 FIXED_ONE, /* external velocity scale */ 377 NONE, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 378 379 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 380 30*WORLD_ONE, 15*WORLD_ONE, /* visual range, dark visual range */ 381 _intelligence_low, /* intelligence */ 382 _speed_blinding, /* speed */ 383 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 384 NONE, /* door retry mask */ 385 2*WORLD_ONE, {_damage_explosion, _alien_damage, 40, 20, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 386 387 0, /* being hit */ 388 4, 3, /* dying hard (popping), dying soft (falling) */ 389 5, 5, /* hard dead frames, soft dead frames */ 390 1, 1, /* stationary shape, moving shape (no permutations) */ 391 UNONE, UNONE, /* teleport in shape, teleport out shape */ 392 393 2*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 394 395 /* melee attack */ 396 { 397 NONE, /* melee attack type */ 398 }, 399 400 /* ranged attack */ 401 { 402 NONE, /* ranged attack type */ 403 } 404 }, 405 406 { /* _monster_tick_kamakazi */ 407 BUILD_COLLECTION(_collection_tick, 0), /* shape collection */ 408 0, 0, 0, /* vitality, immunities, weaknesses */ 409 _monster_is_alien|_monster_flys|_monster_is_kamakazi|_monster_has_delayed_hard_death, /* flags */ 410 411 _class_tick, /* class */ 412 0, /* friends */ 413 -1, /* enemies */ 414 415 _normal_frequency, /* sound pitch */ 416 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 417 NONE, /* flaming death sound */ 418 NONE, 0, /* random sound, random sound mask */ 419 420 NONE, /* carrying item type */ 421 422 WORLD_ONE/5, WORLD_ONE_FOURTH, /* radius, height */ 423 0, /* preferred hover height */ 424 -5*WORLD_ONE, 5*WORLD_ONE, /* minimum ledge delta, maximum ledge delta */ 425 FIXED_ONE, /* external velocity scale */ 426 NONE, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 427 428 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 429 30*WORLD_ONE, 15*WORLD_ONE, /* visual range, dark visual range */ 430 _intelligence_low, /* intelligence */ 431 _speed_blinding, /* speed */ 432 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 433 NONE, /* door retry mask */ 434 WORLD_ONE, {_damage_explosion, _alien_damage, 30, 10, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 435 436 0, /* being hit */ 437 6, 4, /* dying hard (popping), dying soft (falling) */ 438 5, 5, /* hard dead frames, soft dead frames */ 439 0, 1, /* stationary shape, moving shape (no permutations) */ 440 UNONE, UNONE, /* teleport in shape, teleport out shape */ 441 442 2*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 443 444 /* melee attack */ 445 { 446 _projectile_minor_energy_drain, /* melee attack type */ 447 5000, /* repetitions */ 448 0, /* error */ 449 WORLD_ONE, /* range */ 450 451 2, /* melee attack shape */ 452 453 0, 0, WORLD_ONE_HALF, /* dx, dy, dz */ 454 }, 455 456 /* ranged attack */ 457 { 458 NONE, /* ranged attack type */ 459 } 460 }, 461 462 { /* _monster_compiler_minor */ 463 BUILD_COLLECTION(_collection_compiler, 0), /* shape collection */ 464 160, FLAG(_damage_flame)|FLAG(_damage_lava), FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 465 _monster_is_alien|_monster_minor|_monster_floats|_monster_can_teleport_under_media, /* flags */ 466 467 _class_compiler, /* class */ 468 _class_compiler, /* friends */ 469 _class_human|_class_native|_class_defender, /* enemies */ 470 471 _normal_frequency, /* sound pitch */ 472 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 473 NONE, /* flaming dying sound */ 474 NONE, 0, /* random sound, random sound mask */ 475 476 NONE, /* carrying item type */ 477 478 WORLD_ONE/5, WORLD_ONE, /* radius, height */ 479 0, /* preferred hover height */ 480 INT16_MIN, INT16_MAX, /* minimum ledge delta, maximum ledge delta */ 481 0, /* external velocity scale */ 482 NONE, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 483 484 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 485 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 486 _intelligence_high, /* intelligence */ 487 _speed_superfast2, /* speed */ 488 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 489 _vidmaster_door_retry_mask, /* door retry mask */ 490 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 491 492 7, /* being hit */ 493 UNONE, 2, /* dying hard (popping), dying soft (falling) */ 494 UNONE, UNONE, /* hard dead frames, soft dead frames */ 495 0, 3, /* stationary shape, moving shape */ 496 0, 0, /* teleport in shape, teleport out shape */ 497 498 3*TICKS_PER_SECOND, /* attack frequency */ 499 500 /* melee attack */ 501 { 502 NONE, /* melee attack type */ 503 }, 504 505 /* ranged attack */ 506 { 507 _projectile_compiler_bolt_minor, /* ranged attack type */ 508 0, /* repetitions */ 509 NUMBER_OF_ANGLES/200, /* error angle */ 510 20*WORLD_ONE, /* range */ 511 1, /* ranged attack shape */ 512 513 WORLD_ONE/16, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 514 } 515 }, 516 517 { /* _monster_compiler_major */ 518 BUILD_COLLECTION(_collection_compiler, 1), /* shape collection */ 519 200, FLAG(_damage_flame)|FLAG(_damage_lava), FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 520 _monster_is_alien|_monster_major|_monster_floats|_monster_can_teleport_under_media, /* flags */ 521 522 _class_compiler, /* class */ 523 _class_compiler, /* friends */ 524 _class_human|_class_native|_class_defender, /* enemies */ 525 526 _higher_frequency, /* sound pitch */ 527 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 528 NONE, /* flaming dying sound */ 529 NONE, 0, /* random sound, random sound mask */ 530 531 NONE, /* carrying item type */ 532 533 WORLD_ONE/5, WORLD_ONE, /* radius, height */ 534 0, /* preferred hover height */ 535 INT16_MIN, INT16_MAX, /* minimum ledge delta, maximum ledge delta */ 536 0, /* external velocity scale */ 537 NONE, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 538 539 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 540 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 541 _intelligence_high, /* intelligence */ 542 _speed_superfast3, /* speed */ 543 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 544 _vidmaster_door_retry_mask, /* door retry mask */ 545 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 546 547 7, /* being hit */ 548 UNONE, 2, /* dying hard (popping), dying soft (falling) */ 549 UNONE, UNONE, /* hard dead frames, soft dead frames */ 550 0, 3, /* stationary shape, moving shape */ 551 0, 0, /* teleport in shape, teleport out shape */ 552 553 4*TICKS_PER_SECOND, /* attack frequency */ 554 555 /* melee attack */ 556 { 557 NONE, /* melee attack type */ 558 }, 559 560 /* ranged attack */ 561 { 562 _projectile_compiler_bolt_major, /* ranged attack type */ 563 0, /* repetitions */ 564 0, /* error angle */ 565 20*WORLD_ONE, /* range */ 566 1, /* ranged attack shape */ 567 568 WORLD_ONE/16, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 569 } 570 }, 571 572 { /* _monster_compiler_minor_invisible */ 573 BUILD_COLLECTION(_collection_compiler, 0), /* shape collection */ 574 160, FLAG(_damage_flame)|FLAG(_damage_lava), FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 575 _monster_is_alien|_monster_minor|_monster_floats|_monster_is_invisible|_monster_can_teleport_under_media, /* flags */ 576 577 _class_compiler, /* class */ 578 _class_compiler, /* friends */ 579 _class_human|_class_native|_class_defender, /* enemies */ 580 581 _normal_frequency, /* sound pitch */ 582 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 583 NONE, /* flaming dying sound */ 584 NONE, 0, /* random sound, random sound mask */ 585 586 NONE, /* carrying item type */ 587 588 WORLD_ONE/5, WORLD_ONE, /* radius, height */ 589 0, /* preferred hover height */ 590 INT16_MIN, INT16_MAX, /* minimum ledge delta, maximum ledge delta */ 591 0, /* external velocity scale */ 592 NONE, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 593 594 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 595 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 596 _intelligence_high, /* intelligence */ 597 _speed_superfast4, /* speed */ 598 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 599 _vidmaster_door_retry_mask, /* door retry mask */ 600 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 601 602 7, /* being hit */ 603 UNONE, 2, /* dying hard (popping), dying soft (falling) */ 604 UNONE, UNONE, /* hard dead frames, soft dead frames */ 605 0, 3, /* stationary shape, moving shape */ 606 0, 0, /* teleport in shape, teleport out shape */ 607 608 3*TICKS_PER_SECOND, /* attack frequency */ 609 610 /* melee attack */ 611 { 612 NONE, /* melee attack type */ 613 }, 614 615 /* ranged attack */ 616 { 617 _projectile_compiler_bolt_minor, /* ranged attack type */ 618 0, /* repetitions */ 619 NUMBER_OF_ANGLES/200, /* error angle */ 620 20*WORLD_ONE, /* range */ 621 1, /* ranged attack shape */ 622 623 WORLD_ONE/16, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 624 } 625 }, 626 627 { /* _monster_compiler_major_invisible */ 628 BUILD_COLLECTION(_collection_compiler, 1), /* shape collection */ 629 200, FLAG(_damage_flame)|FLAG(_damage_lava), FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 630 _monster_is_alien|_monster_major|_monster_floats|_monster_is_subtly_invisible|_monster_can_teleport_under_media, /* flags */ 631 632 _class_compiler, /* class */ 633 _class_compiler, /* friends */ 634 _class_human|_class_native|_class_defender, /* enemies */ 635 636 _higher_frequency, /* sound pitch */ 637 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 638 NONE, /* flaming dying sound */ 639 NONE, 0, /* random sound, random sound mask */ 640 641 NONE, /* carrying item type */ 642 643 WORLD_ONE/5, WORLD_ONE, /* radius, height */ 644 0, /* preferred hover height */ 645 INT16_MIN, INT16_MAX, /* minimum ledge delta, maximum ledge delta */ 646 0, /* external velocity scale */ 647 NONE, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 648 649 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 650 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 651 _intelligence_high, /* intelligence */ 652 _speed_superfast5, /* speed */ 653 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 654 _vidmaster_door_retry_mask, /* door retry mask */ 655 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 656 657 7, /* being hit */ 658 UNONE, 2, /* dying hard (popping), dying soft (falling) */ 659 UNONE, UNONE, /* hard dead frames, soft dead frames */ 660 0, 3, /* stationary shape, moving shape */ 661 0, 0, /* teleport in shape, teleport out shape */ 662 663 4*TICKS_PER_SECOND, /* attack frequency */ 664 665 /* melee attack */ 666 { 667 NONE, /* melee attack type */ 668 }, 669 670 /* ranged attack */ 671 { 672 _projectile_compiler_bolt_major, /* ranged attack type */ 673 0, /* repetitions */ 674 0, /* error angle */ 675 20*WORLD_ONE, /* range */ 676 1, /* ranged attack shape */ 677 678 WORLD_ONE/16, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 679 } 680 }, 681 682 { /* _monster_fighter (minor) */ 683 BUILD_COLLECTION(_collection_fighter, 0), /* shape collection */ 684 40, 0, 0, /* vitality, immunities, weaknesses */ 685 _monster_is_alien|_monster_minor|_monster_can_die_in_flames, /* flags */ 686 687 _class_fighter, /* class */ 688 _class_pfhor, /* friends */ 689 _class_human|_class_native|_class_defender, /* enemies */ 690 691 _normal_frequency, /* sound pitch */ 692 _snd_fighter_activate, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 693 _snd_fighter_wail, /* dying flaming */ 694 _snd_fighter_chatter, 15, /* random sound, random sound mask */ 695 696 NONE, /* carrying item type */ 697 698 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 699 0, /* preferred hover height */ 700 -4*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 701 (3*FIXED_ONE)/4, /* external velocity scale */ 702 _effect_fighter_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 703 704 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 705 30*WORLD_ONE, 2*WORLD_ONE, /* visual range, dark visual range */ 706 _intelligence_high, /* intelligence */ 707 _speed_superfast1, /* speed */ 708 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 709 _normal_door_retry_mask, /* door retry mask */ 710 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 711 712 4, /* being hit */ 713 1, 3, /* dying hard (popping), dying soft (falling) */ 714 6, 5, /* hard dead frames, soft dead frames */ 715 7, 0, /* stationary shape, moving shape */ 716 12, 12, /* teleport in shape, teleport out shape */ 717 718 4*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 719 720 /* melee attack */ 721 { 722 _projectile_staff, /* melee attack type */ 723 0, /* repetitions */ 724 0, /* error */ 725 WORLD_ONE, /* range */ 726 727 2, /* melee attack shape */ 728 729 0, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 730 }, 731 732 /* ranged attack */ 733 { 734 NONE, /* ranged attack type */ 735 0, /* repetitions */ 736 0, /* error angle */ 737 12*WORLD_ONE, /* range */ 738 3, /* ranged attack shape */ 739 740 0, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 741 } 742 }, 743 744 { /* _monster_fighter (major) */ 745 BUILD_COLLECTION(_collection_fighter, 1), /* shape collection */ 746 80, 0, 0, /* vitality, immunities, weaknesses */ 747 _monster_is_alien|_monster_major|_monster_is_berserker|_monster_can_die_in_flames, /* flags */ 748 749 _class_fighter, /* class */ 750 _class_pfhor, /* friends */ 751 _class_human|_class_native|_class_defender, /* enemies */ 752 753 _lower_frequency, /* sound pitch */ 754 _snd_fighter_activate, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 755 _snd_fighter_wail, /* dying flaming */ 756 _snd_fighter_chatter, 15, /* random sound, random sound mask */ 757 758 NONE, /* carrying item type */ 759 760 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 761 0, /* preferred hover height */ 762 -4*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 763 (3*FIXED_ONE)/4, /* external velocity scale */ 764 _effect_fighter_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 765 766 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 767 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 768 _intelligence_high, /* intelligence */ 769 _speed_superfast2, /* speed */ 770 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 771 _normal_door_retry_mask, /* door retry mask */ 772 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 773 774 4, /* being hit */ 775 1, 3, /* dying hard (popping), dying soft (falling) */ 776 6, 5, /* hard dead frames, soft dead frames */ 777 7, 0, /* stationary shape, moving shape */ 778 12, 12, /* teleport in shape, teleport out shape */ 779 780 2*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 781 782 /* melee attack */ 783 { 784 _projectile_staff, /* melee attack type */ 785 0, /* repetitions */ 786 0, /* error */ 787 WORLD_ONE, /* range */ 788 789 2, /* melee attack shape */ 790 791 0, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 792 }, 793 794 /* ranged attack */ 795 { 796 NONE, /* ranged attack type */ 797 0, /* repetitions */ 798 0, /* error angle */ 799 12*WORLD_ONE, /* range */ 800 3, /* ranged attack shape */ 801 802 0, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 803 } 804 }, 805 806 { /* _monster_fighter (minor projectile) */ 807 BUILD_COLLECTION(_collection_fighter, 2), /* shape collection */ 808 80, 0, 0, /* vitality, immunities, weaknesses */ 809 _monster_is_alien|_monster_minor|_monster_uses_sniper_ledges|_monster_can_die_in_flames, /* flags */ 810 811 _class_fighter, /* class */ 812 _class_pfhor, /* friends */ 813 _class_human|_class_native|_class_defender, /* enemies */ 814 815 _normal_frequency, /* sound pitch */ 816 _snd_fighter_activate, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 817 _snd_fighter_wail, /* dying flaming */ 818 _snd_fighter_chatter, 15, /* random sound, random sound mask */ 819 820 NONE, /* carrying item type */ 821 822 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 823 0, /* preferred hover height */ 824 -4*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 825 (3*FIXED_ONE)/4, /* external velocity scale */ 826 _effect_fighter_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 827 828 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 829 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 830 _intelligence_high, /* intelligence */ 831 _speed_superfast3, /* speed */ 832 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 833 _normal_door_retry_mask, /* door retry mask */ 834 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 835 836 4, /* being hit */ 837 1, 3, /* dying hard (popping), dying soft (falling) */ 838 6, 5, /* hard dead frames, soft dead frames */ 839 7, 0, /* stationary shape, moving shape */ 840 12, 12, /* teleport in shape, teleport out shape */ 841 842 4*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 843 844 /* melee attack */ 845 { 846 _projectile_staff, /* melee attack type */ 847 0, /* repetitions */ 848 0, /* error */ 849 WORLD_ONE, /* range */ 850 851 2, /* melee attack shape */ 852 853 WORLD_ONE/16, 0, WORLD_ONE_FOURTH, /* dx, dy, dz */ 854 }, 855 856 /* ranged attack */ 857 { 858 _projectile_staff_bolt, /* ranged attack type */ 859 0, /* repetitions */ 860 NUMBER_OF_ANGLES/150, /* error angle */ 861 12*WORLD_ONE, /* range */ 862 2, /* ranged attack shape */ 863 864 WORLD_ONE/16, 0, WORLD_ONE_FOURTH, /* dx, dy, dz */ 865 } 866 }, 867 868 { /* _monster_fighter (major projectile) */ 869 BUILD_COLLECTION(_collection_fighter, 3), /* shape collection */ 870 80, 0, 0, /* vitality, immunities, weaknesses */ 871 _monster_is_alien|_monster_major|_monster_uses_sniper_ledges|_monster_is_berserker|_monster_can_die_in_flames, /* flags */ 872 873 _class_fighter, /* class */ 874 _class_pfhor, /* friends */ 875 _class_human|_class_native|_class_defender, /* enemies */ 876 877 _higher_frequency, /* sound pitch */ 878 _snd_fighter_activate, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 879 _snd_fighter_wail, /* dying flaming */ 880 _snd_fighter_chatter, 15, /* random sound, random sound mask */ 881 882 NONE, /* carrying item type */ 883 884 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 885 0, /* preferred hover height */ 886 -4*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 887 (3*FIXED_ONE)/4, /* external velocity scale */ 888 _effect_fighter_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 889 890 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 891 30*WORLD_ONE, 5*WORLD_ONE, /* visual range, dark visual range */ 892 _intelligence_high, /* intelligence */ 893 _speed_superfast4, /* speed */ 894 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 895 _normal_door_retry_mask, /* door retry mask */ 896 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 897 898 4, /* being hit */ 899 1, 3, /* dying hard (popping), dying soft (falling) */ 900 6, 5, /* hard dead frames, soft dead frames */ 901 7, 0, /* stationary shape, moving shape */ 902 12, 12, /* teleport in shape, teleport out shape */ 903 904 3*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 905 906 /* melee attack */ 907 { 908 _projectile_staff, /* melee attack type */ 909 1, /* repetitions */ 910 0, /* error */ 911 WORLD_ONE, /* range */ 912 913 2, /* melee attack shape */ 914 915 WORLD_ONE/16, 0, WORLD_ONE_FOURTH, /* dx, dy, dz */ 916 }, 917 918 /* ranged attack */ 919 { 920 _projectile_staff_bolt, /* ranged attack type */ 921 1, /* repetitions */ 922 NUMBER_OF_ANGLES/150, /* error angle */ 923 12*WORLD_ONE, /* range */ 924 2, /* ranged attack shape */ 925 926 WORLD_ONE/16, 0, WORLD_ONE_FOURTH, /* dx, dy, dz */ 927 } 928 }, 929 930 { /* _civilian_crew "bob" */ 931 BUILD_COLLECTION(_collection_civilian, 0), /* shape collection */ 932 20, 0, 0, /* vitality, immunities, weaknesses */ 933 _monster_attacks_immediately|_monster_is_omniscent|_monster_cannot_be_dropped|_monster_waits_with_clear_shot|_monster_can_die_in_flames|_monster_uses_sniper_ledges, /* flags */ 934 935 _class_human_civilian, /* class */ 936 _class_human, /* friends */ 937 (_class_hostile_alien^_class_assimilated_civilian)|_class_native, /* enemies */ 938 939 _normal_frequency, /* sound pitch */ 940 _snd_human_activation, _snd_kill_the_player, _snd_human_clear, _snd_human_trash_talk, _snd_human_apology, _snd_human_stop_shooting_me_you_bastard, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 941 _snd_human_wail, /* dying flaming */ 942 _snd_human_chatter, 0x1f, /* random sound, random sound mask */ 943 944 _i_magnum_magazine, /* carrying item type */ 945 946 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 947 0, /* preferred hover height */ 948 -2*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 949 FIXED_ONE, /* external velocity scale */ 950 _effect_civilian_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 951 952 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 953 30*WORLD_ONE, WORLD_ONE, /* visual range, dark visual range */ 954 _intelligence_high, /* intelligence */ 955 _speed_blinding, /* speed */ 956 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 957 _vidmaster_door_retry_mask, /* door retry mask */ 958 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 959 960 10, /* being hit */ 961 2, 1, /* dying hard (popping), dying soft (falling) */ 962 4, 3, /* hard dead frames, soft dead frames */ 963 6, 0, /* stationary shape, moving shape */ 964 9, 8, /* teleport in shape, teleport out shape */ 965 966 3*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 967 968 /* melee attack */ 969 { 970 NONE, /* melee attack type */ 971 }, 972 973 /* ranged attack */ 974 { 975 _projectile_pistol_bullet, /* ranged attack type */ 976 1, /* repetitions */ 977 NUMBER_OF_ANGLES/150, /* error angle */ 978 10*WORLD_ONE, /* range */ 979 5, /* ranged attack shape */ 980 981 0, 0, WORLD_ONE*3/4, /* dx, dy, dz */ 982 } 983 }, 984 985 { /* _civilian_science "fred" */ 986 BUILD_COLLECTION(_collection_civilian, 1), /* shape collection */ 987 25, 0, 0, /* vitality, immunities, weaknesses */ 988 _monster_attacks_immediately|_monster_is_omniscent|_monster_cannot_be_dropped|_monster_waits_with_clear_shot|_monster_can_die_in_flames|_monster_uses_sniper_ledges, /* flags */ 989 990 _class_human_civilian, /* class */ 991 _class_human|_class_assimilated_civilian, /* friends */ 992 (_class_hostile_alien^_class_assimilated_civilian)|_class_native, /* enemies */ 993 994 _normal_frequency, /* sound pitch */ 995 _snd_human_activation, _snd_kill_the_player, _snd_human_clear, _snd_human_trash_talk, _snd_human_apology, _snd_human_stop_shooting_me_you_bastard, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 996 _snd_human_wail, /* dying flaming */ 997 _snd_human_chatter, 0x1f, /* random sound, random sound mask */ 998 999 _i_magnum_magazine, /* carrying item type */ 1000 1001 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 1002 0, /* preferred hover height */ 1003 -2*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 1004 FIXED_ONE, /* external velocity scale */ 1005 _effect_civilian_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 1006 1007 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 1008 30*WORLD_ONE, WORLD_ONE, /* visual range, dark visual range */ 1009 _intelligence_high, /* intelligence */ 1010 _speed_blinding, /* speed */ 1011 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1012 _vidmaster_door_retry_mask, /* door retry mask */ 1013 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 1014 1015 10, /* being hit */ 1016 2, 1, /* dying hard (popping), dying soft (falling) */ 1017 4, 3, /* hard dead frames, soft dead frames */ 1018 6, 0, /* stationary shape, moving shape */ 1019 9, 8, /* teleport in shape, teleport out shape */ 1020 1021 3*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 1022 1023 /* melee attack */ 1024 { 1025 NONE, /* melee attack type */ 1026 }, 1027 1028 /* ranged attack */ 1029 { 1030 _projectile_pistol_bullet, /* ranged attack type */ 1031 2, /* repetitions */ 1032 NUMBER_OF_ANGLES/150, /* error angle */ 1033 13*WORLD_ONE, /* range */ 1034 5, /* ranged attack shape */ 1035 1036 0, 0, WORLD_ONE*3/4, /* dx, dy, dz */ 1037 } 1038 }, 1039 1040 { /* _civilian_security "steve" */ 1041 BUILD_COLLECTION(_collection_civilian, 2), /* shape collection */ 1042 30, 0, 0, /* vitality, immunities, weaknesses */ 1043 _monster_attacks_immediately|_monster_is_omniscent|_monster_cannot_be_dropped|_monster_waits_with_clear_shot|_monster_can_die_in_flames|_monster_uses_sniper_ledges, /* flags */ 1044 1045 _class_human_civilian, /* class */ 1046 _class_human|_class_assimilated_civilian, /* friends */ 1047 (_class_hostile_alien^_class_assimilated_civilian)|_class_native, /* enemies */ 1048 1049 _normal_frequency, /* sound pitch */ 1050 _snd_human_activation, _snd_kill_the_player, _snd_human_clear, _snd_human_trash_talk, _snd_human_apology, _snd_human_stop_shooting_me_you_bastard, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1051 _snd_human_wail, /* dying flaming */ 1052 _snd_human_chatter, 0x1f, /* random sound, random sound mask */ 1053 1054 _i_magnum, /* carrying item type */ 1055 1056 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 1057 0, /* preferred hover height */ 1058 -2*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 1059 FIXED_ONE, /* external velocity scale */ 1060 _effect_civilian_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 1061 1062 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 1063 30*WORLD_ONE, WORLD_ONE, /* visual range, dark visual range */ 1064 _intelligence_high, /* intelligence */ 1065 _speed_blinding, /* speed */ 1066 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1067 _vidmaster_door_retry_mask, /* door retry mask */ 1068 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 1069 1070 10, /* being hit */ 1071 2, 1, /* dying hard (popping), dying soft (falling) */ 1072 4, 3, /* hard dead frames, soft dead frames */ 1073 6, 0, /* stationary shape, moving shape */ 1074 9, 8, /* teleport in shape, teleport out shape */ 1075 1076 TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 1077 1078 /* melee attack */ 1079 { 1080 NONE, /* melee attack type */ 1081 }, 1082 1083 /* ranged attack */ 1084 { 1085 _projectile_pistol_bullet, /* ranged attack type */ 1086 5, /* repetitions */ 1087 NUMBER_OF_ANGLES/150, /* error angle */ 1088 17*WORLD_ONE, /* range */ 1089 5, /* ranged attack shape */ 1090 1091 0, 0, WORLD_ONE*3/4, /* dx, dy, dz */ 1092 } 1093 }, 1094 1095 { /* _civilian_assimilated "evil bob" */ 1096 BUILD_COLLECTION(_collection_civilian, 3), /* shape collection */ 1097 30, 0, 0, /* vitality, immunities, weaknesses */ 1098 _monster_is_alien|_monster_is_kamakazi|_monster_can_die_in_flames, /* flags */ 1099 1100 _class_assimilated_civilian, 1101 _class_pfhor, /* friends */ 1102 _class_player|_class_defender, /* enemies */ 1103 1104 _normal_frequency, /* sound pitch */ 1105 NONE, NONE, NONE, NONE, NONE, _snd_human_stop_shooting_me_you_bastard, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1106 _snd_human_wail, /* dying flaming */ 1107 _snd_assimilated_human_chatter, 0xf, /* random sound, random sound mask */ 1108 1109 NONE, /* carrying item type */ 1110 1111 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 1112 0, /* preferred hover height */ 1113 -2*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 1114 FIXED_ONE, /* external velocity scale */ 1115 _effect_assimilated_civilian_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 1116 1117 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 1118 15*WORLD_ONE, WORLD_ONE, /* visual range, dark visual range */ 1119 _intelligence_high, /* intelligence */ 1120 _speed_blinding, /* speed */ 1121 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1122 _vidmaster_door_retry_mask, /* door retry mask */ 1123 WORLD_ONE, {_damage_explosion, _alien_damage, 80, 40, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 1124 1125 10, /* being hit */ 1126 11, UNONE, /* dying hard (popping), dying soft (falling) */ 1127 4, 0, /* hard dead frames, soft dead frames */ 1128 6, 0, /* stationary shape, moving shape */ 1129 8, UNONE, /* teleport in shape, teleport out shape */ 1130 1131 2*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 1132 1133 /* melee attack */ 1134 { 1135 NONE, /* melee attack type */ 1136 }, 1137 1138 /* ranged attack */ 1139 { 1140 NONE, /* ranged attack type */ 1141 } 1142 }, 1143 1144 { /* _monster_hummer_minor (small hummer) */ 1145 BUILD_COLLECTION(_collection_hummer, 0), /* shape collection */ 1146 40, 0, FLAG(_damage_fusion_bolt)|FLAG(_damage_compiler_bolt)|FLAG(_damage_electrical_staff), /* vitality, immunities, weaknesses */ 1147 _monster_is_alien|_monster_flys|_monster_minor|_monster_has_delayed_hard_death, /* flags */ 1148 1149 _class_hummer, /* class */ 1150 _class_pfhor|_class_client, /* friends */ 1151 _class_human|_class_native|_class_defender, /* enemies */ 1152 1153 _normal_frequency, /* sound pitch */ 1154 _snd_hummer_activate, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1155 NONE, /* flaming death sound */ 1156 NONE, 0, /* random sound, random sound mask */ 1157 1158 NONE, /* carrying item type */ 1159 1160 WORLD_ONE/4, WORLD_ONE_HALF, /* radius, height */ 1161 WORLD_ONE_FOURTH, /* preferred hover height */ 1162 -5*WORLD_ONE, 5*WORLD_ONE, /* minimum ledge delta, maximum ledge delta */ 1163 FIXED_ONE, /* external velocity scale */ 1164 _effect_hummer_spark, _effect_metallic_clang, _effect_rocket_contrail, /* impact effect, melee impact effect, contrail effect */ 1165 1166 HALF_CIRCLE, QUARTER_CIRCLE, /* half visual arc, half vertical visual arc */ 1167 30*WORLD_ONE, 15*WORLD_ONE, /* visual range, dark visual range */ 1168 _intelligence_low, /* intelligence */ 1169 _speed_blinding, /* speed */ 1170 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1171 _normal_door_retry_mask, /* door retry mask */ 1172 NONE, {NONE, _alien_damage, 30, 10, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 1173 1174 0, /* being hit */ 1175 3, 2, /* dying hard (popping), dying soft (falling) */ 1176 4, UNONE, /* hard dead frames, soft dead frames */ 1177 0, 0, /* stationary shape, moving shape (no permutations) */ 1178 0, 0, /* teleport in shape, teleport out shape */ 1179 1180 3*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 1181 1182 /* melee attack */ 1183 { 1184 NONE, /* melee attack type */ 1185 }, 1186 1187 /* ranged attack */ 1188 { 1189 _projectile_minor_hummer, /* ranged attack type */ 1190 0, /* repetitions */ 1191 3, /* error angle */ 1192 12*WORLD_ONE, /* range */ 1193 1, /* ranged attack shape */ 1194 1195 0, 0, 0, /* dx, dy, dz */ 1196 } 1197 }, 1198 1199 { /* _monster_hummer_major (big hummer) */ 1200 BUILD_COLLECTION(_collection_hummer, 1), /* shape collection */ 1201 60, 0, FLAG(_damage_fusion_bolt)|FLAG(_damage_compiler_bolt)|FLAG(_damage_electrical_staff), /* vitality, immunities, weaknesses */ 1202 _monster_is_alien|_monster_flys|_monster_major|_monster_has_delayed_hard_death, /* flags */ 1203 1204 _class_hummer, /* class */ 1205 _class_pfhor|_class_client, /* friends */ 1206 _class_human|_class_native|_class_defender, /* enemies */ 1207 1208 _normal_frequency, /* sound pitch */ 1209 _snd_hummer_activate, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1210 NONE, /* flaming death sound */ 1211 NONE, 0, /* random sound, random sound mask */ 1212 1213 NONE, /* carrying item type */ 1214 1215 WORLD_ONE/4, WORLD_ONE_HALF, /* radius, height */ 1216 WORLD_ONE_FOURTH, /* preferred hover height */ 1217 -5*WORLD_ONE, 5*WORLD_ONE, /* minimum ledge delta, maximum ledge delta */ 1218 FIXED_ONE, /* external velocity scale */ 1219 _effect_hummer_spark, _effect_metallic_clang, _effect_rocket_contrail, /* impact effect, melee impact effect, contrail effect */ 1220 1221 HALF_CIRCLE, QUARTER_CIRCLE, /* half visual arc, half vertical visual arc */ 1222 30*WORLD_ONE, 15*WORLD_ONE, /* visual range, dark visual range */ 1223 _intelligence_low, /* intelligence */ 1224 _speed_blinding, /* speed */ 1225 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1226 _normal_door_retry_mask, /* door retry mask */ 1227 NONE, {NONE, _alien_damage, 30, 10, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 1228 1229 0, /* being hit */ 1230 3, 2, /* dying hard (popping), dying soft (falling) */ 1231 4, UNONE, /* hard dead frames, soft dead frames */ 1232 0, 0, /* stationary shape, moving shape (no permutations) */ 1233 0, 0, /* teleport in shape, teleport out shape */ 1234 1235 2*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 1236 1237 /* melee attack */ 1238 { 1239 NONE, /* melee attack type */ 1240 }, 1241 1242 /* ranged attack */ 1243 { 1244 _projectile_minor_hummer, /* ranged attack type */ 1245 2, /* repetitions */ 1246 5, /* error angle */ 1247 12*WORLD_ONE, /* range */ 1248 1, /* ranged attack shape */ 1249 1250 0, 0, 0, /* dx, dy, dz */ 1251 } 1252 }, 1253 1254 { /* _monster_hummer_big_minor (big hummer) */ 1255 BUILD_COLLECTION(_collection_hummer, 2), /* shape collection */ 1256 40, 0, FLAG(_damage_fusion_bolt)|FLAG(_damage_compiler_bolt)|FLAG(_damage_electrical_staff), /* vitality, immunities, weaknesses */ 1257 _monster_is_alien|_monster_flys|_monster_minor|_monster_has_delayed_hard_death, /* flags */ 1258 1259 _class_hummer, /* class */ 1260 _class_pfhor|_class_client, /* friends */ 1261 _class_human|_class_native|_class_defender, /* enemies */ 1262 1263 _higher_frequency, /* sound pitch */ 1264 _snd_hummer_activate, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1265 NONE, /* flaming death sound */ 1266 NONE, 0, /* random sound, random sound mask */ 1267 1268 NONE, /* carrying item type */ 1269 1270 WORLD_ONE/4, WORLD_ONE_HALF, /* radius, height */ 1271 WORLD_ONE_FOURTH, /* preferred hover height */ 1272 -5*WORLD_ONE, 5*WORLD_ONE, /* minimum ledge delta, maximum ledge delta */ 1273 FIXED_ONE, /* external velocity scale */ 1274 _effect_hummer_spark, _effect_metallic_clang, _effect_rocket_contrail, /* impact effect, melee impact effect, contrail effect */ 1275 1276 HALF_CIRCLE, QUARTER_CIRCLE, /* half visual arc, half vertical visual arc */ 1277 30*WORLD_ONE, 15*WORLD_ONE, /* visual range, dark visual range */ 1278 _intelligence_low, /* intelligence */ 1279 _speed_blinding, /* speed */ 1280 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1281 _normal_door_retry_mask, /* door retry mask */ 1282 NONE, {NONE, _alien_damage, 30, 10, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 1283 1284 0, /* being hit */ 1285 3, 2, /* dying hard (popping), dying soft (falling) */ 1286 4, UNONE, /* hard dead frames, soft dead frames */ 1287 0, 0, /* stationary shape, moving shape (no permutations) */ 1288 0, 0, /* teleport in shape, teleport out shape */ 1289 1290 3*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 1291 1292 /* melee attack */ 1293 { 1294 NONE, /* melee attack type */ 1295 }, 1296 1297 /* ranged attack */ 1298 { 1299 _projectile_minor_hummer, /* ranged attack type */ 1300 0, /* repetitions */ 1301 3, /* error angle */ 1302 12*WORLD_ONE, /* range */ 1303 1, /* ranged attack shape */ 1304 1305 0, 0, 0, /* dx, dy, dz */ 1306 } 1307 }, 1308 1309 { /* _monster_hummer_big_major (angry hummer) */ 1310 BUILD_COLLECTION(_collection_hummer, 3), /* shape collection */ 1311 60, 0, FLAG(_damage_fusion_bolt)|FLAG(_damage_compiler_bolt)|FLAG(_damage_electrical_staff), /* vitality, immunities, weaknesses */ 1312 _monster_is_alien|_monster_flys|_monster_major|_monster_has_delayed_hard_death, /* flags */ 1313 1314 _class_hummer, /* class */ 1315 _class_pfhor|_class_client, /* friends */ 1316 _class_human|_class_native|_class_defender, /* enemies */ 1317 1318 _higher_frequency, /* sound pitch */ 1319 _snd_hummer_activate, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1320 NONE, /* flaming death sound */ 1321 NONE, 0, /* random sound, random sound mask */ 1322 1323 NONE, /* carrying item type */ 1324 1325 WORLD_ONE/4, WORLD_ONE_HALF, /* radius, height */ 1326 WORLD_ONE_FOURTH, /* preferred hover height */ 1327 -5*WORLD_ONE, 5*WORLD_ONE, /* minimum ledge delta, maximum ledge delta */ 1328 FIXED_ONE, /* external velocity scale */ 1329 _effect_hummer_spark, _effect_metallic_clang, _effect_rocket_contrail, /* impact effect, melee impact effect, contrail effect */ 1330 1331 HALF_CIRCLE, QUARTER_CIRCLE, /* half visual arc, half vertical visual arc */ 1332 30*WORLD_ONE, 15*WORLD_ONE, /* visual range, dark visual range */ 1333 _intelligence_low, /* intelligence */ 1334 _speed_blinding, /* speed */ 1335 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1336 _normal_door_retry_mask, /* door retry mask */ 1337 NONE, {NONE, _alien_damage, 30, 10, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 1338 1339 0, /* being hit */ 1340 3, 2, /* dying hard (popping), dying soft (falling) */ 1341 4, UNONE, /* hard dead frames, soft dead frames */ 1342 0, 0, /* stationary shape, moving shape (no permutations) */ 1343 0, 0, /* teleport in shape, teleport out shape */ 1344 1345 2*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 1346 1347 /* melee attack */ 1348 { 1349 NONE, /* melee attack type */ 1350 }, 1351 1352 /* ranged attack */ 1353 { 1354 _projectile_minor_hummer, /* ranged attack type */ 1355 2, /* repetitions */ 1356 5, /* error angle */ 1357 12*WORLD_ONE, /* range */ 1358 1, /* ranged attack shape */ 1359 1360 0, 0, 0, /* dx, dy, dz */ 1361 } 1362 }, 1363 1364 { /* _monster_hummer_possessed (hummer from durandal) */ 1365 BUILD_COLLECTION(_collection_hummer, 4), /* shape collection */ 1366 60, 0, FLAG(_damage_fusion_bolt)|FLAG(_damage_compiler_bolt)|FLAG(_damage_electrical_staff), /* vitality, immunities, weaknesses */ 1367 _monster_flys|_monster_has_delayed_hard_death|_monster_attacks_immediately, /* flags */ 1368 1369 _class_possessed_hummer, /* class */ 1370 _class_human, /* friends */ 1371 _class_pfhor|_class_client|_class_native, /* enemies */ 1372 1373 _lower_frequency, /* sound pitch */ 1374 _snd_hummer_activate, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1375 NONE, /* flaming death sound */ 1376 NONE, 0, /* random sound, random sound mask */ 1377 1378 NONE, /* carrying item type */ 1379 1380 WORLD_ONE/4, WORLD_ONE_HALF, /* radius, height */ 1381 WORLD_ONE_FOURTH, /* preferred hover height */ 1382 -5*WORLD_ONE, 5*WORLD_ONE, /* minimum ledge delta, maximum ledge delta */ 1383 FIXED_ONE, /* external velocity scale */ 1384 _effect_hummer_spark, _effect_metallic_clang, _effect_rocket_contrail, /* impact effect, melee impact effect, contrail effect */ 1385 1386 HALF_CIRCLE, QUARTER_CIRCLE, /* half visual arc, half vertical visual arc */ 1387 30*WORLD_ONE, 15*WORLD_ONE, /* visual range, dark visual range */ 1388 _intelligence_low, /* intelligence */ 1389 _speed_blinding, /* speed */ 1390 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1391 _normal_door_retry_mask, /* door retry mask */ 1392 NONE, {NONE, _alien_damage, 30, 10, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 1393 1394 0, /* being hit */ 1395 3, 2, /* dying hard (popping), dying soft (falling) */ 1396 4, UNONE, /* hard dead frames, soft dead frames */ 1397 0, 0, /* stationary shape, moving shape (no permutations) */ 1398 0, 0, /* teleport in shape, teleport out shape */ 1399 1400 2*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 1401 1402 /* melee attack */ 1403 { 1404 NONE, /* melee attack type */ 1405 }, 1406 1407 /* ranged attack */ 1408 { 1409 _projectile_durandal_hummer, /* ranged attack type */ 1410 1, /* repetitions */ 1411 5, /* error angle */ 1412 12*WORLD_ONE, /* range */ 1413 1, /* ranged attack shape */ 1414 1415 0, 0, 0, /* dx, dy, dz */ 1416 } 1417 }, 1418 1419 { /* _monster_cyborg_minor */ 1420 BUILD_COLLECTION(_collection_cyborg, 0), /* shape collection */ 1421 300, 0, FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 1422 _monster_is_alien|_monster_minor|_monster_uses_sniper_ledges, /* flags */ 1423 1424 _class_cyborg, /* class */ 1425 _class_cyborg, /* friends */ 1426 _class_human|_class_native|_class_defender, /* enemies */ 1427 1428 _normal_frequency, /* sound pitch */ 1429 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1430 NONE, /* flaming dying sound */ 1431 NONE, 0, /* random sound, random sound mask */ 1432 1433 NONE, /* carrying item type */ 1434 1435 WORLD_ONE/4, (4*WORLD_ONE)/5, /* radius, height */ 1436 0, /* preferred hover height */ 1437 -WORLD_ONE, WORLD_ONE/4, /* minimum ledge delta, maximum ledge delta */ 1438 FIXED_ONE/4, /* external velocity scale */ 1439 _effect_cyborg_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 1440 1441 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 1442 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 1443 _intelligence_high, /* intelligence */ 1444 _speed_superfast5, /* speed */ 1445 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1446 _vidmaster_door_retry_mask, /* door retry mask */ 1447 WORLD_ONE, {_damage_explosion, _alien_damage, 60, 0, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 1448 1449 0, /* being hit */ 1450 3, UNONE, /* dying hard (popping), dying soft (falling) */ 1451 5, UNONE, /* hard dead frames, soft dead frames */ 1452 0, 1, /* stationary shape, moving shape */ 1453 0, 0, /* teleport in shape, teleport out shape */ 1454 1455 4*TICKS_PER_SECOND, /* attack frequency */ 1456 1457 /* melee attack */ 1458 { 1459 NONE, 1460 }, 1461 1462 /* ranged attack */ 1463 { 1464 _projectile_minor_cyborg_ball, /* ranged attack type */ 1465 0, /* repetitions */ 1466 0, /* error angle */ 1467 10*WORLD_ONE, /* range */ 1468 2, /* ranged attack shape */ 1469 1470 WORLD_ONE/16, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 1471 } 1472 }, 1473 1474 { /* _monster_cyborg_major */ 1475 BUILD_COLLECTION(_collection_cyborg, 1), /* shape collection */ 1476 450, 0, FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 1477 _monster_is_alien|_monster_major|_monster_uses_sniper_ledges, /* flags */ 1478 1479 _class_cyborg, /* class */ 1480 _class_cyborg, /* friends */ 1481 _class_human|_class_native|_class_defender, /* enemies */ 1482 1483 _normal_frequency, /* sound pitch */ 1484 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1485 NONE, /* flaming dying sound */ 1486 NONE, 0, /* random sound, random sound mask */ 1487 1488 NONE, /* carrying item type */ 1489 1490 WORLD_ONE/4, (4*WORLD_ONE)/5, /* radius, height */ 1491 0, /* preferred hover height */ 1492 -WORLD_ONE, WORLD_ONE/4, /* minimum ledge delta, maximum ledge delta */ 1493 FIXED_ONE/4, /* external velocity scale */ 1494 _effect_cyborg_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 1495 1496 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 1497 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 1498 _intelligence_high, /* intelligence */ 1499 _speed_superfast4, /* speed */ 1500 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1501 _vidmaster_door_retry_mask, /* door retry mask */ 1502 WORLD_ONE, {_damage_explosion, _alien_damage, 60, 0, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 1503 1504 0, /* being hit */ 1505 3, UNONE, /* dying hard (popping), dying soft (falling) */ 1506 5, UNONE, /* hard dead frames, soft dead frames */ 1507 0, 1, /* stationary shape, moving shape */ 1508 0, 0, /* teleport in shape, teleport out shape */ 1509 1510 3*TICKS_PER_SECOND, /* attack frequency */ 1511 1512 /* melee attack */ 1513 { 1514 NONE, 1515 }, 1516 1517 /* ranged attack */ 1518 { 1519 _projectile_minor_cyborg_ball, /* ranged attack type */ 1520 1, /* repetitions */ 1521 0, /* error angle */ 1522 10*WORLD_ONE, /* range */ 1523 2, /* ranged attack shape */ 1524 1525 WORLD_ONE/16, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 1526 } 1527 }, 1528 1529 { /* _monster_cyborg_flame_minor */ 1530 BUILD_COLLECTION(_collection_cyborg, 0), /* shape collection */ 1531 300, 0, FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 1532 _monster_is_alien|_monster_minor|_monster_uses_sniper_ledges, /* flags */ 1533 1534 _class_cyborg, /* class */ 1535 _class_cyborg, /* friends */ 1536 _class_human|_class_native|_class_defender, /* enemies */ 1537 1538 _lower_frequency, /* sound pitch */ 1539 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1540 NONE, /* flaming dying sound */ 1541 NONE, 0, /* random sound, random sound mask */ 1542 1543 NONE, /* carrying item type */ 1544 1545 WORLD_ONE/4, (4*WORLD_ONE)/5, /* radius, height */ 1546 0, /* preferred hover height */ 1547 -WORLD_ONE, WORLD_ONE/4, /* minimum ledge delta, maximum ledge delta */ 1548 FIXED_ONE/4, /* external velocity scale */ 1549 _effect_cyborg_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 1550 1551 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 1552 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 1553 _intelligence_high, /* intelligence */ 1554 _speed_superfast4, /* speed */ 1555 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1556 _vidmaster_door_retry_mask, /* door retry mask */ 1557 WORLD_ONE, {_damage_explosion, _alien_damage, 60, 0, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 1558 1559 0, /* being hit */ 1560 3, UNONE, /* dying hard (popping), dying soft (falling) */ 1561 5, UNONE, /* hard dead frames, soft dead frames */ 1562 0, 1, /* stationary shape, moving shape */ 1563 0, 0, /* teleport in shape, teleport out shape */ 1564 1565 4*TICKS_PER_SECOND, /* attack frequency */ 1566 1567 /* melee attack */ 1568 { 1569 _projectile_flamethrower_burst, /* ranged attack type */ 1570 15, /* repetitions */ 1571 0, /* error angle */ 1572 2*WORLD_ONE, /* range */ 1573 4, /* ranged attack shape */ 1574 1575 WORLD_ONE/16, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 1576 }, 1577 1578 /* ranged attack */ 1579 { 1580 _projectile_major_cyborg_ball, /* ranged attack type */ 1581 0, /* repetitions */ 1582 0, /* error angle */ 1583 10*WORLD_ONE, /* range */ 1584 2, /* ranged attack shape */ 1585 1586 WORLD_ONE/16, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 1587 } 1588 }, 1589 1590 { /* _monster_cyborg_flame_major */ 1591 BUILD_COLLECTION(_collection_cyborg, 0), /* shape collection */ 1592 450, 0, FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 1593 _monster_is_alien|_monster_major|_monster_uses_sniper_ledges, /* flags */ 1594 1595 _class_cyborg, /* class */ 1596 _class_cyborg, /* friends */ 1597 _class_human|_class_native|_class_defender, /* enemies */ 1598 1599 _lower_frequency, /* sound pitch */ 1600 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1601 NONE, /* flaming dying sound */ 1602 NONE, 0, /* random sound, random sound mask */ 1603 1604 NONE, /* carrying item type */ 1605 1606 WORLD_ONE/4, (4*WORLD_ONE)/5, /* radius, height */ 1607 0, /* preferred hover height */ 1608 -WORLD_ONE, WORLD_ONE/4, /* minimum ledge delta, maximum ledge delta */ 1609 FIXED_ONE/4, /* external velocity scale */ 1610 _effect_cyborg_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 1611 1612 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 1613 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 1614 _intelligence_high, /* intelligence */ 1615 _speed_superfast4, /* speed */ 1616 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1617 _vidmaster_door_retry_mask, /* door retry mask */ 1618 WORLD_ONE, {_damage_explosion, _alien_damage, 60, 0, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 1619 1620 0, /* being hit */ 1621 3, UNONE, /* dying hard (popping), dying soft (falling) */ 1622 5, UNONE, /* hard dead frames, soft dead frames */ 1623 0, 1, /* stationary shape, moving shape */ 1624 0, 0, /* teleport in shape, teleport out shape */ 1625 1626 3*TICKS_PER_SECOND, /* attack frequency */ 1627 1628 /* melee attack */ 1629 { 1630 _projectile_flamethrower_burst, /* ranged attack type */ 1631 15, /* repetitions */ 1632 0, /* error angle */ 1633 2*WORLD_ONE, /* range */ 1634 4, /* ranged attack shape */ 1635 1636 WORLD_ONE/16, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 1637 }, 1638 1639 /* ranged attack */ 1640 { 1641 _projectile_major_cyborg_ball, /* ranged attack type */ 1642 0, /* repetitions */ 1643 0, /* error angle */ 1644 10*WORLD_ONE, /* range */ 1645 2, /* ranged attack shape */ 1646 1647 WORLD_ONE/16, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 1648 } 1649 }, 1650 1651 { /* _monster_enforcer_minor */ 1652 BUILD_COLLECTION(_collection_enforcer, 0), /* shape collection */ 1653 120, 0, 0, /* vitality, immunities, weaknesses */ 1654 _monster_is_alien|_monster_minor|_monster_uses_sniper_ledges|_monster_can_die_in_flames|_monster_waits_with_clear_shot, /* flags */ 1655 1656 _class_enforcer, /* class */ 1657 _class_pfhor, /* friends */ 1658 _class_human|_class_native|_class_defender, /* enemies */ 1659 1660 _normal_frequency, /* sound pitch */ 1661 _snd_enforcer_activate, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1662 _snd_fighter_wail, /* flaming dying sound */ 1663 NONE, 0, /* random sound, random sound mask */ 1664 1665 _i_alien_shotgun, /* carrying item type */ 1666 1667 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 1668 0, /* preferred hover height */ 1669 -2*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 1670 (3*FIXED_ONE)/4, /* external velocity scale */ 1671 _effect_enforcer_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 1672 1673 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 1674 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 1675 _intelligence_high, /* intelligence */ 1676 _speed_superfast4, /* speed */ 1677 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1678 _vidmaster_door_retry_mask, /* door retry mask */ 1679 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 1680 1681 0, /* being hit */ 1682 6, 3, /* dying hard (popping), dying soft (falling) */ 1683 7, 4, /* hard dead frames, soft dead frames */ 1684 0, 1, /* stationary shape, moving shape */ 1685 0, 0, /* teleport in shape, teleport out shape */ 1686 1687 4*TICKS_PER_SECOND, /* attack frequency */ 1688 1689 /* melee attack */ 1690 { 1691 NONE, /* melee attack type */ 1692 }, 1693 1694 /* ranged attack */ 1695 { 1696 _projectile_alien_weapon, /* ranged attack type */ 1697 8, /* repetitions */ 1698 2, /* error angle */ 1699 15*WORLD_ONE, /* range */ 1700 2, /* ranged attack shape */ 1701 1702 WORLD_ONE/16, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 1703 } 1704 }, 1705 1706 { /* _monster_enforcer_major */ 1707 BUILD_COLLECTION(_collection_enforcer, 1), /* shape collection */ 1708 160, 0, 0, /* vitality, immunities, weaknesses */ 1709 _monster_is_alien|_monster_major|_monster_uses_sniper_ledges|_monster_can_die_in_flames|_monster_waits_with_clear_shot, /* flags */ 1710 1711 _class_enforcer, /* class */ 1712 _class_pfhor, /* friends */ 1713 _class_human|_class_native|_class_defender, /* enemies */ 1714 1715 _higher_frequency, /* sound pitch */ 1716 _snd_enforcer_activate, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1717 _snd_fighter_wail, /* flaming dying sound */ 1718 NONE, 0, /* random sound, random sound mask */ 1719 1720 _i_alien_shotgun, /* carrying item type */ 1721 1722 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 1723 0, /* preferred hover height */ 1724 -2*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 1725 (3*FIXED_ONE)/4, /* external velocity scale */ 1726 _effect_enforcer_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 1727 1728 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 1729 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 1730 _intelligence_high, /* intelligence */ 1731 _speed_blinding, /* speed */ 1732 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1733 _vidmaster_door_retry_mask, /* door retry mask */ 1734 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 1735 1736 0, /* being hit */ 1737 6, 3, /* dying hard (popping), dying soft (falling) */ 1738 7, 4, /* hard dead frames, soft dead frames */ 1739 0, 1, /* stationary shape, moving shape */ 1740 0, 0, /* teleport in shape, teleport out shape */ 1741 1742 2*TICKS_PER_SECOND, /* attack frequency */ 1743 1744 /* melee attack */ 1745 { 1746 NONE, /* melee attack type */ 1747 }, 1748 1749 /* ranged attack */ 1750 { 1751 _projectile_alien_weapon, /* ranged attack type */ 1752 12, /* repetitions */ 1753 5, /* error angle */ 1754 20*WORLD_ONE, /* range */ 1755 2, /* ranged attack shape */ 1756 1757 WORLD_ONE/16, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH/2, /* dx, dy, dz */ 1758 } 1759 }, 1760 1761 { /* _monster_hunter_minor */ 1762 BUILD_COLLECTION(_collection_hunter, 0), /* shape collection */ 1763 200, FLAG(_damage_flame), FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 1764 _monster_is_alien|_monster_uses_sniper_ledges|_monster_minor, /* flags */ 1765 1766 _class_hunter, /* class */ 1767 _class_pfhor, /* friends */ 1768 _class_human|_class_native|_class_defender, /* enemies */ 1769 1770 _normal_frequency, /* sound pitch */ 1771 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1772 NONE, /* flaming death sound */ 1773 NONE, 0, /* random sound, random sound mask */ 1774 1775 NONE, /* carrying item type */ 1776 1777 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 1778 0, /* preferred hover height */ 1779 -WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 1780 FIXED_ONE_HALF, /* external velocity scale */ 1781 _effect_hunter_spark, _effect_metallic_clang, NONE, /* impact effect, melee impact effect, contrail effect */ 1782 1783 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 1784 30*WORLD_ONE, 4*WORLD_ONE, /* visual range, dark visual range */ 1785 _intelligence_high, /* intelligence */ 1786 _speed_superfast3, /* speed */ 1787 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1788 _normal_door_retry_mask, /* door retry mask */ 1789 2*WORLD_ONE, {_damage_explosion, _alien_damage, 60, 30, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 1790 1791 7, /* being hit */ 1792 3, 9, /* dying hard (popping), dying soft (falling) */ 1793 6, 10, /* hard dead frames, soft dead frames */ 1794 1, 0, /* stationary shape, moving shape (no permutations) */ 1795 1, 1, /* teleport in shape, teleport out shape */ 1796 1797 2*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 1798 1799 /* melee attack */ 1800 { 1801 NONE, /* melee attack type */ 1802 }, 1803 1804 /* ranged attack */ 1805 { 1806 _projectile_hunter, /* ranged attack type */ 1807 2, /* repetitions */ 1808 3, /* error angle */ 1809 12*WORLD_ONE, /* range */ 1810 2, /* ranged attack shape */ 1811 1812 0, WORLD_ONE/8, WORLD_ONE_HALF+WORLD_ONE_FOURTH, /* dx, dy, dz */ 1813 } 1814 }, 1815 1816 { /* _monster_hunter_major */ 1817 BUILD_COLLECTION(_collection_hunter, 1), /* shape collection */ 1818 300, FLAG(_damage_flame), FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 1819 _monster_is_alien|_monster_uses_sniper_ledges|_monster_major, /* flags */ 1820 1821 _class_hunter, /* class */ 1822 _class_pfhor, /* friends */ 1823 _class_human|_class_native|_class_defender, /* enemies */ 1824 1825 _higher_frequency, /* sound pitch */ 1826 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1827 NONE, /* flaming death sound */ 1828 NONE, 0, /* random sound, random sound mask */ 1829 1830 NONE, /* carrying item type */ 1831 1832 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 1833 0, /* preferred hover height */ 1834 -WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 1835 FIXED_ONE_HALF, /* external velocity scale */ 1836 _effect_hunter_spark, _effect_metallic_clang, NONE, /* impact effect, melee impact effect, contrail effect */ 1837 1838 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 1839 30*WORLD_ONE, 4*WORLD_ONE, /* visual range, dark visual range */ 1840 _intelligence_high, /* intelligence */ 1841 _speed_superfast5, /* speed */ 1842 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1843 _normal_door_retry_mask, /* door retry mask */ 1844 2*WORLD_ONE, {_damage_explosion, _alien_damage, 60, 30, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 1845 1846 7, /* being hit */ 1847 3, 9, /* dying hard (popping), dying soft (falling) */ 1848 6, 10, /* hard dead frames, soft dead frames */ 1849 1, 0, /* stationary shape, moving shape (no permutations) */ 1850 1, 1, /* teleport in shape, teleport out shape */ 1851 1852 2*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 1853 1854 /* melee attack */ 1855 { 1856 NONE, /* melee attack type */ 1857 }, 1858 1859 /* ranged attack */ 1860 { 1861 _projectile_hunter, /* ranged attack type */ 1862 5, /* repetitions */ 1863 3, /* error angle */ 1864 12*WORLD_ONE, /* range */ 1865 2, /* ranged attack shape */ 1866 1867 0, WORLD_ONE/8, WORLD_ONE_HALF+WORLD_ONE_FOURTH, /* dx, dy, dz */ 1868 } 1869 }, 1870 1871 { /* _monster_trooper_minor */ 1872 BUILD_COLLECTION(_collection_trooper, 0), /* shape collection */ 1873 110, 0, 0, /* vitality, immunities, weaknesses */ 1874 _monster_is_alien|_monster_minor|_monster_uses_sniper_ledges|_monster_is_berserker|_monster_can_die_in_flames, /* flags */ 1875 1876 _class_trooper, /* class */ 1877 _class_pfhor, /* friends */ 1878 _class_human|_class_native|_class_defender, /* enemies */ 1879 1880 _normal_frequency, /* sound pitch */ 1881 _snd_fighter_activate, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1882 _snd_fighter_wail, /* dying flaming */ 1883 _snd_fighter_chatter, 15, /* random sound, random sound mask */ 1884 1885 NONE, /* carrying item type */ 1886 1887 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 1888 0, /* preferred hover height */ 1889 -4*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 1890 (3*FIXED_ONE)/4, /* external velocity scale */ 1891 _effect_trooper_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 1892 1893 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 1894 30*WORLD_ONE, WORLD_ONE, /* visual range, dark visual range */ 1895 _intelligence_high, /* intelligence */ 1896 _speed_superfast3, /* speed */ 1897 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1898 _normal_door_retry_mask, /* door retry mask */ 1899 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 1900 1901 4, /* being hit */ 1902 UNONE, 3, /* dying hard (popping), dying soft (falling) */ 1903 0, 7, /* hard dead frames, soft dead frames */ 1904 1, 0, /* stationary shape, moving shape */ 1905 1, 1, /* teleport in shape, teleport out shape */ 1906 1907 4*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 1908 1909 /* melee attack */ 1910 { 1911 _projectile_trooper_bullet, /* melee attack type */ 1912 3, /* repetitions */ 1913 30, /* error */ 1914 3*WORLD_ONE, /* range */ 1915 1916 2, /* melee attack shape */ 1917 1918 0, -WORLD_ONE/10, WORLD_ONE_HALF-WORLD_ONE_FOURTH/4, /* dx, dy, dz */ 1919 }, 1920 1921 /* ranged attack */ 1922 { 1923 _projectile_trooper_grenade, /* ranged attack type */ 1924 0, /* repetitions */ 1925 10, /* error angle */ 1926 10*WORLD_ONE, /* range */ 1927 9, /* ranged attack shape */ 1928 1929 -WORLD_ONE/10, WORLD_ONE/8, WORLD_ONE_HALF-WORLD_ONE_FOURTH/8, /* dx, dy, dz */ 1930 } 1931 }, 1932 1933 { /* _monster_trooper_major */ 1934 BUILD_COLLECTION(_collection_trooper, 1), /* shape collection */ 1935 200, 0, 0, /* vitality, immunities, weaknesses */ 1936 _monster_is_alien|_monster_major|_monster_uses_sniper_ledges|_monster_is_berserker|_monster_can_die_in_flames, /* flags */ 1937 1938 _class_trooper, /* class */ 1939 _class_pfhor, /* friends */ 1940 _class_human|_class_native|_class_defender, /* enemies */ 1941 1942 _lower_frequency, /* sound pitch */ 1943 _snd_fighter_activate, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 1944 _snd_fighter_wail, /* dying flaming */ 1945 _snd_fighter_chatter, 15, /* random sound, random sound mask */ 1946 1947 NONE, /* carrying item type */ 1948 1949 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 1950 0, /* preferred hover height */ 1951 -4*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 1952 (3*FIXED_ONE)/4, /* external velocity scale */ 1953 _effect_trooper_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 1954 1955 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 1956 30*WORLD_ONE, WORLD_ONE, /* visual range, dark visual range */ 1957 _intelligence_high, /* intelligence */ 1958 _speed_superfast3, /* speed */ 1959 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 1960 _fast_door_retry_mask, /* door retry mask */ 1961 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 1962 1963 4, /* being hit */ 1964 UNONE, 3, /* dying hard (popping), dying soft (falling) */ 1965 0, 7, /* hard dead frames, soft dead frames */ 1966 1, 0, /* stationary shape, moving shape */ 1967 1, 1, /* teleport in shape, teleport out shape */ 1968 1969 2*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 1970 1971 /* melee attack */ 1972 { 1973 _projectile_trooper_bullet, /* melee attack type */ 1974 8, /* repetitions */ 1975 10, /* error */ 1976 3*WORLD_ONE, /* range */ 1977 1978 2, /* melee attack shape */ 1979 1980 -WORLD_ONE/10, WORLD_ONE/8, WORLD_ONE_HALF-WORLD_ONE_FOURTH/8, /* dx, dy, dz */ 1981 }, 1982 1983 /* ranged attack */ 1984 { 1985 _projectile_trooper_grenade, /* ranged attack type */ 1986 1, /* repetitions */ 1987 5, /* error angle */ 1988 12*WORLD_ONE, /* range */ 1989 9, /* ranged attack shape */ 1990 1991 0, -WORLD_ONE/10, WORLD_ONE_HALF-WORLD_ONE_FOURTH/4, /* dx, dy, dz */ 1992 } 1993 }, 1994 1995 { /* _monster_mother_of_all_cyborgs */ 1996 BUILD_COLLECTION(_collection_cyborg, 0), /* shape collection */ 1997 1500, 0, FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 1998 _monster_is_enlarged|_monster_is_alien|_monster_cannot_be_dropped|_monster_uses_sniper_ledges, /* flags */ 1999 2000 _class_cyborg, /* class */ 2001 0, /* friends */ 2002 _class_human|_class_native|_class_defender, /* enemies */ 2003 2004 _lower_frequency, /* sound pitch */ 2005 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2006 NONE, /* flaming dying sound */ 2007 NONE, 0, /* random sound, random sound mask */ 2008 2009 NONE, /* carrying item type */ 2010 2011 WORLD_ONE/3, WORLD_ONE + WORLD_ONE/5, /* radius, height */ 2012 0, /* preferred hover height */ 2013 -WORLD_ONE, WORLD_ONE/4, /* minimum ledge delta, maximum ledge delta */ 2014 FIXED_ONE/4, /* external velocity scale */ 2015 _effect_cyborg_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 2016 2017 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2018 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 2019 _intelligence_high, /* intelligence */ 2020 _speed_superfast4, /* speed */ 2021 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 2022 _vidmaster_door_retry_mask, /* door retry mask */ 2023 3*WORLD_ONE, {_damage_explosion, _alien_damage, 140, 40, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 2024 2025 0, /* being hit */ 2026 3, UNONE, /* dying hard (popping), dying soft (falling) */ 2027 5, UNONE, /* hard dead frames, soft dead frames */ 2028 0, 1, /* stationary shape, moving shape */ 2029 0, 0, /* teleport in shape, teleport out shape */ 2030 2031 2*TICKS_PER_SECOND, /* attack frequency */ 2032 2033 /* melee attack */ 2034 { 2035 _projectile_flamethrower_burst, /* ranged attack type */ 2036 15, /* repetitions */ 2037 0, /* error angle */ 2038 2*WORLD_ONE, /* range */ 2039 4, /* ranged attack shape */ 2040 2041 WORLD_ONE/16, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH, /* dx, dy, dz */ 2042 }, 2043 2044 /* ranged attack */ 2045 { 2046 _projectile_major_cyborg_ball, /* ranged attack type */ 2047 0, /* repetitions */ 2048 0, /* error angle */ 2049 10*WORLD_ONE, /* range */ 2050 2, /* ranged attack shape */ 2051 2052 WORLD_ONE/16, 0, WORLD_ONE_HALF+WORLD_ONE_FOURTH, /* dx, dy, dz */ 2053 } 2054 }, 2055 2056 { /* _monster_mother_of_all_hunters */ 2057 BUILD_COLLECTION(_collection_hunter, 2), /* shape collection */ 2058 1500, FLAG(_damage_flame), FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 2059 _monster_is_alien|_monster_is_enlarged|_monster_uses_sniper_ledges|_monster_cannot_be_dropped, /* flags */ 2060 2061 _class_hunter, /* class */ 2062 _class_pfhor, /* friends */ 2063 _class_human|_class_native|_class_defender, /* enemies */ 2064 2065 _lower_frequency, /* sound pitch */ 2066 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2067 NONE, /* flaming death sound */ 2068 NONE, 0, /* random sound, random sound mask */ 2069 2070 NONE, /* carrying item type */ 2071 2072 WORLD_ONE/4, WORLD_ONE+WORLD_ONE/6, /* radius, height */ 2073 0, /* preferred hover height */ 2074 -WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 2075 FIXED_ONE_HALF, /* external velocity scale */ 2076 _effect_hunter_spark, _effect_metallic_clang, NONE, /* impact effect, melee impact effect, contrail effect */ 2077 2078 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2079 30*WORLD_ONE, 4*WORLD_ONE, /* visual range, dark visual range */ 2080 _intelligence_high, /* intelligence */ 2081 _speed_superfast1, /* speed */ 2082 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 2083 _normal_door_retry_mask, /* door retry mask */ 2084 4*WORLD_ONE, {_damage_explosion, _alien_damage, 140, 50, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 2085 2086 7, /* being hit */ 2087 3, UNONE, /* dying hard (popping), dying soft (falling) */ 2088 6, 8, /* hard dead frames, soft dead frames */ 2089 1, 0, /* stationary shape, moving shape (no permutations) */ 2090 1, 1, /* teleport in shape, teleport out shape */ 2091 2092 2*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 2093 2094 /* melee attack */ 2095 { 2096 NONE, /* melee attack type */ 2097 }, 2098 2099 /* ranged attack */ 2100 { 2101 _projectile_hunter, /* ranged attack type */ 2102 5, /* repetitions */ 2103 3, /* error angle */ 2104 12*WORLD_ONE, /* range */ 2105 2, /* ranged attack shape */ 2106 2107 0, WORLD_ONE/8, WORLD_ONE_HALF+WORLD_ONE_FOURTH, /* dx, dy, dz */ 2108 } 2109 }, 2110 2111 { /* _monster_sewage_yeti */ 2112 BUILD_COLLECTION(_collection_yeti, 0), /* shape collection */ 2113 100, 0, 0, /* vitality, immunities, weaknesses */ 2114 _monster_is_not_afraid_of_sewage|_monster_is_alien|_monster_is_berserker, /* flags */ 2115 2116 _class_yeti, /* class */ 2117 _class_yeti, /* friends */ 2118 _class_pfhor|_class_human|_class_defender, /* enemies */ 2119 2120 _normal_frequency, /* sound pitch */ 2121 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2122 NONE, /* dying flaming */ 2123 NONE, 15, /* random sound, random sound mask */ 2124 2125 NONE, /* carrying item type */ 2126 2127 WORLD_ONE/4, WORLD_ONE-1, /* radius, height */ 2128 0, /* preferred hover height */ 2129 -2*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 2130 3*FIXED_ONE/4, /* external velocity scale */ 2131 _effect_sewage_yeti_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 2132 2133 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2134 30*WORLD_ONE, WORLD_ONE, /* visual range, dark visual range */ 2135 _intelligence_low, /* intelligence */ 2136 _speed_superfast5, /* speed */ 2137 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 2138 _slow_door_retry_mask, /* door retry mask */ 2139 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 2140 2141 12, /* being hit */ 2142 UNONE, 3, /* dying hard (popping), dying soft (falling) */ 2143 UNONE, 4, /* hard dead frames, soft dead frames */ 2144 0, 1, /* stationary shape, moving shape */ 2145 UNONE, UNONE, /* teleport in shape, teleport out shape */ 2146 2147 2*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 2148 2149 /* melee attack */ 2150 { 2151 _projectile_yeti, /* melee attack type */ 2152 0, /* repetitions */ 2153 0, /* error */ 2154 WORLD_ONE, /* range */ 2155 13, /* melee attack shape */ 2156 2157 0, 0, 4*WORLD_ONE/5, /* dx, dy, dz */ 2158 }, 2159 2160 /* ranged attack */ 2161 { 2162 _projectile_sewage_yeti, /* ranged attack type */ 2163 0, /* repetitions */ 2164 NUMBER_OF_ANGLES/150, /* error angle */ 2165 12*WORLD_ONE, /* range */ 2166 2, /* ranged attack shape */ 2167 2168 WORLD_ONE/3, WORLD_ONE/6, 4*WORLD_ONE/5, /* dx, dy, dz */ 2169 } 2170 }, 2171 2172 { /* _monster_water_yeti */ 2173 BUILD_COLLECTION(_collection_yeti, 1), /* shape collection */ 2174 250, 0, 0, /* vitality, immunities, weaknesses */ 2175 _monster_is_not_afraid_of_water|_monster_is_alien|_monster_is_berserker, /* flags */ 2176 2177 _class_yeti, /* class */ 2178 _class_yeti, /* friends */ 2179 _class_pfhor|_class_human|_class_defender, /* enemies */ 2180 2181 _normal_frequency, /* sound pitch */ 2182 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2183 NONE, /* dying flaming */ 2184 NONE, 15, /* random sound, random sound mask */ 2185 2186 NONE, /* carrying item type */ 2187 2188 WORLD_ONE/4, WORLD_ONE-1, /* radius, height */ 2189 0, /* preferred hover height */ 2190 -2*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 2191 3*FIXED_ONE/4, /* external velocity scale */ 2192 _effect_water_yeti_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 2193 2194 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2195 30*WORLD_ONE, WORLD_ONE, /* visual range, dark visual range */ 2196 _intelligence_low, /* intelligence */ 2197 _speed_superfast5, /* speed */ 2198 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 2199 _slow_door_retry_mask, /* door retry mask */ 2200 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 2201 2202 12, /* being hit */ 2203 UNONE, 3, /* dying hard (popping), dying soft (falling) */ 2204 UNONE, 4, /* hard dead frames, soft dead frames */ 2205 0, 1, /* stationary shape, moving shape */ 2206 UNONE, UNONE, /* teleport in shape, teleport out shape */ 2207 2208 TICKS_PER_SECOND/2, /* attack frequency (for both melee and ranged attacks) */ 2209 2210 /* melee attack */ 2211 { 2212 _projectile_yeti, /* melee attack type */ 2213 1, /* repetitions */ 2214 0, /* error */ 2215 WORLD_ONE, /* range */ 2216 13, /* melee attack shape */ 2217 2218 0, WORLD_ONE/6, 4*WORLD_ONE/5, /* dx, dy, dz */ 2219 }, 2220 2221 /* ranged attack */ 2222 { 2223 NONE 2224 } 2225 }, 2226 2227 { /* _monster_lava_yeti */ 2228 BUILD_COLLECTION(_collection_yeti, 2), /* shape collection */ 2229 200, FLAG(_damage_flame)|FLAG(_damage_alien_projectile)|FLAG(_damage_fusion_bolt)|FLAG(_damage_lava), 0, /* vitality, immunities, weaknesses */ 2230 _monster_is_not_afraid_of_lava|_monster_is_alien|_monster_is_berserker, /* flags */ 2231 2232 _class_yeti, /* class */ 2233 _class_yeti, /* friends */ 2234 _class_pfhor|_class_human|_class_defender, /* enemies */ 2235 2236 _normal_frequency, /* sound pitch */ 2237 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2238 NONE, /* dying flaming */ 2239 NONE, 15, /* random sound, random sound mask */ 2240 2241 NONE, /* carrying item type */ 2242 2243 WORLD_ONE/4, WORLD_ONE-1, /* radius, height */ 2244 0, /* preferred hover height */ 2245 -2*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 2246 3*FIXED_ONE/4, /* external velocity scale */ 2247 _effect_lava_yeti_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 2248 2249 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2250 30*WORLD_ONE, WORLD_ONE, /* visual range, dark visual range */ 2251 _intelligence_low, /* intelligence */ 2252 _speed_blinding, /* speed */ 2253 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 2254 _slow_door_retry_mask, /* door retry mask */ 2255 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 2256 2257 12, /* being hit */ 2258 UNONE, 3, /* dying hard (popping), dying soft (falling) */ 2259 UNONE, 4, /* hard dead frames, soft dead frames */ 2260 0, 1, /* stationary shape, moving shape */ 2261 UNONE, UNONE, /* teleport in shape, teleport out shape */ 2262 2263 TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 2264 2265 /* melee attack */ 2266 { 2267 _projectile_yeti, /* melee attack type */ 2268 0, /* repetitions */ 2269 0, /* error */ 2270 WORLD_ONE, /* range */ 2271 13, /* melee attack shape */ 2272 2273 0, 0, 4*WORLD_ONE/5, /* dx, dy, dz */ 2274 }, 2275 2276 /* ranged attack */ 2277 { 2278 _projectile_lava_yeti, /* ranged attack type */ 2279 1, /* repetitions */ 2280 NUMBER_OF_ANGLES/150, /* error angle */ 2281 12*WORLD_ONE, /* range */ 2282 2, /* ranged attack shape */ 2283 2284 WORLD_ONE/3, WORLD_ONE/6, 4*WORLD_ONE/5, /* dx, dy, dz */ 2285 } 2286 }, 2287 2288 { /* _monster_defender_minor */ 2289 BUILD_COLLECTION(_collection_defender, 0), /* shape collection */ 2290 160, 0, FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 2291 _monster_flys|_monster_waits_with_clear_shot, /* flags */ 2292 2293 _class_defender, /* class */ 2294 _class_defender, /* friends */ 2295 _class_pfhor|_class_client|_class_native, /* enemies */ 2296 2297 _normal_frequency, /* sound pitch */ 2298 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2299 NONE, /* flaming dying sound */ 2300 NONE, 0, /* random sound, random sound mask */ 2301 2302 NONE, /* carrying item type */ 2303 2304 WORLD_ONE/5, WORLD_ONE, /* radius, height */ 2305 WORLD_ONE/4, /* preferred hover height */ 2306 INT16_MIN, INT16_MAX, /* minimum ledge delta, maximum ledge delta */ 2307 FIXED_ONE, /* external velocity scale */ 2308 NONE, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 2309 2310 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2311 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 2312 _intelligence_high, /* intelligence */ 2313 _speed_blinding, /* speed */ 2314 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 2315 _vidmaster_door_retry_mask, /* door retry mask */ 2316 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 2317 2318 3, /* being hit */ 2319 UNONE, 6, /* dying hard (popping), dying soft (falling) */ 2320 UNONE, UNONE, /* hard dead frames, soft dead frames */ 2321 0, 0, /* stationary shape, moving shape */ 2322 8, 8, /* teleport in shape, teleport out shape */ 2323 2324 3*TICKS_PER_SECOND, /* attack frequency */ 2325 2326 /* melee attack */ 2327 { 2328 NONE, /* melee attack type */ 2329 }, 2330 2331 /* ranged attack */ 2332 { 2333 _projectile_minor_defender, /* ranged attack type */ 2334 2, /* repetitions */ 2335 NUMBER_OF_ANGLES/200, /* error angle */ 2336 20*WORLD_ONE, /* range */ 2337 2, /* ranged attack shape */ 2338 2339 WORLD_ONE/8, -WORLD_ONE/4+WORLD_ONE/10, WORLD_ONE_HALF, /* dx, dy, dz */ 2340 } 2341 }, 2342 2343 { /* _monster_defender_major */ 2344 BUILD_COLLECTION(_collection_defender, 1), /* shape collection */ 2345 240, 0, FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 2346 _monster_flys|_monster_waits_with_clear_shot, /* flags */ 2347 2348 _class_defender, /* class */ 2349 _class_defender, /* friends */ 2350 _class_pfhor|_class_client|_class_native, /* enemies */ 2351 2352 _higher_frequency, /* sound pitch */ 2353 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2354 NONE, /* flaming dying sound */ 2355 NONE, 0, /* random sound, random sound mask */ 2356 2357 NONE, /* carrying item type */ 2358 2359 WORLD_ONE/5, WORLD_ONE, /* radius, height */ 2360 WORLD_ONE/4, /* preferred hover height */ 2361 INT16_MIN, INT16_MAX, /* minimum ledge delta, maximum ledge delta */ 2362 FIXED_ONE, /* external velocity scale */ 2363 NONE, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 2364 2365 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2366 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 2367 _intelligence_high, /* intelligence */ 2368 _speed_blinding, /* speed */ 2369 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 2370 _vidmaster_door_retry_mask, /* door retry mask */ 2371 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 2372 2373 3, /* being hit */ 2374 UNONE, 6, /* dying hard (popping), dying soft (falling) */ 2375 UNONE, UNONE, /* hard dead frames, soft dead frames */ 2376 0, 0, /* stationary shape, moving shape */ 2377 8, 8, /* teleport in shape, teleport out shape */ 2378 2379 2*TICKS_PER_SECOND, /* attack frequency */ 2380 2381 /* melee attack */ 2382 { 2383 NONE, /* melee attack type */ 2384 }, 2385 2386 /* ranged attack */ 2387 { 2388 _projectile_major_defender, /* ranged attack type */ 2389 4, /* repetitions */ 2390 NUMBER_OF_ANGLES/100, /* error angle */ 2391 20*WORLD_ONE, /* range */ 2392 2, /* ranged attack shape */ 2393 2394 WORLD_ONE/8, -WORLD_ONE/4+WORLD_ONE/10, WORLD_ONE_HALF, /* dx, dy, dz */ 2395 } 2396 }, 2397 2398 { /* _monster_juggernaut_minor */ 2399 BUILD_COLLECTION(_collection_juggernaut, 0), /* shape collection */ 2400 2500, 0, FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 2401 _monster_minor|_monster_is_alien|_monster_cant_fire_backwards|_monster_has_nuclear_hard_death| 2402 _monster_has_delayed_hard_death|_monster_cannot_be_dropped|_monster_fires_symmetrically| 2403 _monster_chooses_weapons_randomly|_monster_flys, /* flags */ 2404 2405 _class_juggernaut, /* class */ 2406 _class_juggernaut, /* friends */ 2407 _class_human|_class_client|_class_native, /* enemies */ 2408 2409 _normal_frequency, /* sound pitch */ 2410 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2411 NONE, /* flaming dying sound */ 2412 NONE, 0, /* random sound, random sound mask */ 2413 2414 NONE, /* carrying item type */ 2415 2416 WORLD_ONE, 2*WORLD_ONE, /* radius, height */ 2417 WORLD_ONE, /* preferred hover height */ 2418 INT16_MIN, INT16_MAX, /* minimum ledge delta, maximum ledge delta */ 2419 0, /* external velocity scale */ 2420 _effect_juggernaut_spark, _effect_metallic_clang, NONE, /* impact effect, melee impact effect, contrail effect */ 2421 2422 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2423 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 2424 _intelligence_high, /* intelligence */ 2425 _speed_blinding, /* speed */ 2426 NORMAL_MONSTER_GRAVITY/4, NORMAL_MONSTER_TERMINAL_VELOCITY/4, /* gravity, terminal velocity */ 2427 NONE, /* door retry mask */ 2428 5*WORLD_ONE, {_damage_explosion, _alien_damage, 350, 50, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 2429 2430 UNONE, /* being hit */ 2431 6, 5, /* dying hard (popping), dying soft (falling) */ 2432 8, 8, /* hard dead frames, soft dead frames */ 2433 0, 0, /* stationary shape, moving shape */ 2434 7, 7, /* teleport in shape, teleport out shape */ 2435 2436 2*TICKS_PER_SECOND, /* attack frequency */ 2437 2438 /* melee attack */ 2439 { 2440 _projectile_alien_weapon, /* melee attack type */ 2441 10, /* repetitions */ 2442 5, /* error */ 2443 15*WORLD_ONE, /* range */ 2444 1, /* melee attack shape */ 2445 2446 WORLD_ONE/4, WORLD_ONE_HALF+WORLD_ONE/8, WORLD_ONE-WORLD_ONE/4-WORLD_ONE/16, /* dx, dy, dz */ 2447 }, 2448 2449 /* ranged attack */ 2450 { 2451 _projectile_juggernaut_missile, /* ranged attack type */ 2452 0, /* repetitions */ 2453 40, /* error angle */ 2454 25*WORLD_ONE, /* range */ 2455 2, /* ranged attack shape */ 2456 2457 0, WORLD_ONE_HALF, WORLD_ONE+WORLD_ONE_HALF, /* dx, dy, dz */ 2458 } 2459 }, 2460 2461 { /* _monster_juggernaut_major */ 2462 BUILD_COLLECTION(_collection_juggernaut, 1), /* shape collection */ 2463 5000, 0, FLAG(_damage_fusion_bolt), /* vitality, immunities, weaknesses */ 2464 _monster_major|_monster_is_alien|_monster_cant_fire_backwards|_monster_has_nuclear_hard_death| 2465 _monster_has_delayed_hard_death|_monster_cannot_be_dropped|_monster_fires_symmetrically| 2466 _monster_chooses_weapons_randomly|_monster_flys, /* flags */ 2467 2468 _class_juggernaut, /* class */ 2469 _class_juggernaut, /* friends */ 2470 _class_human|_class_client|_class_native, /* enemies */ 2471 2472 _normal_frequency, /* sound pitch */ 2473 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2474 NONE, /* flaming dying sound */ 2475 NONE, 0, /* random sound, random sound mask */ 2476 2477 NONE, /* carrying item type */ 2478 2479 WORLD_ONE, 2*WORLD_ONE, /* radius, height */ 2480 WORLD_ONE, /* preferred hover height */ 2481 INT16_MIN, INT16_MAX, /* minimum ledge delta, maximum ledge delta */ 2482 0, /* external velocity scale */ 2483 _effect_juggernaut_spark, _effect_metallic_clang, NONE, /* impact effect, melee impact effect, contrail effect */ 2484 2485 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2486 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 2487 _intelligence_high, /* intelligence */ 2488 _speed_blinding, /* speed */ 2489 NORMAL_MONSTER_GRAVITY/4, NORMAL_MONSTER_TERMINAL_VELOCITY/4, /* gravity, terminal velocity */ 2490 NONE, /* door retry mask */ 2491 5*WORLD_ONE, {_damage_explosion, _alien_damage, 350, 50, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 2492 2493 UNONE, /* being hit */ 2494 6, 5, /* dying hard (popping), dying soft (falling) */ 2495 8, 8, /* hard dead frames, soft dead frames */ 2496 0, 0, /* stationary shape, moving shape */ 2497 7, 7, /* teleport in shape, teleport out shape */ 2498 2499 2*TICKS_PER_SECOND, /* attack frequency */ 2500 2501 /* melee attack */ 2502 { 2503 _projectile_alien_weapon, /* melee attack type */ 2504 20, /* repetitions */ 2505 5, /* error */ 2506 15*WORLD_ONE, /* range */ 2507 1, /* melee attack shape */ 2508 2509 WORLD_ONE/4, WORLD_ONE_HALF+WORLD_ONE/8, WORLD_ONE-WORLD_ONE/4-WORLD_ONE/16, /* dx, dy, dz */ 2510 }, 2511 2512 /* ranged attack */ 2513 { 2514 _projectile_juggernaut_missile, /* ranged attack type */ 2515 1, /* repetitions */ 2516 40, /* error angle */ 2517 25*WORLD_ONE, /* range */ 2518 2, /* ranged attack shape */ 2519 2520 0, WORLD_ONE_HALF, WORLD_ONE+WORLD_ONE_HALF, /* dx, dy, dz */ 2521 } 2522 }, 2523 2524 { /* _monster_tiny_fighter */ 2525 BUILD_COLLECTION(_collection_fighter, 1), /* shape collection */ 2526 40, 0, 0, /* vitality, immunities, weaknesses */ 2527 _monster_is_tiny|_monster_is_berserker|_monster_can_die_in_flames, /* flags */ 2528 2529 _class_fighter, /* class */ 2530 _class_pfhor, /* friends */ 2531 (_class_human&~_class_player)|_class_native|_class_defender, /* enemies */ 2532 2533 FIXED_ONE+FIXED_ONE_HALF, /* sound pitch */ 2534 _snd_fighter_activate, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2535 _snd_fighter_wail, /* dying flaming */ 2536 _snd_fighter_chatter, 15, /* random sound, random sound mask */ 2537 2538 NONE, /* carrying item type */ 2539 2540 WORLD_ONE/12, (4*WORLD_ONE)/12, /* radius, height */ 2541 0, /* preferred hover height */ 2542 -8*WORLD_ONE, WORLD_ONE/6, /* minimum ledge delta, maximum ledge delta */ 2543 FIXED_ONE/2, /* external velocity scale */ 2544 _effect_fighter_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 2545 2546 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2547 30*WORLD_ONE, 3*WORLD_ONE, /* visual range, dark visual range */ 2548 _intelligence_high, /* intelligence */ 2549 _speed_fast, /* speed */ 2550 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 2551 _normal_door_retry_mask, /* door retry mask */ 2552 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 2553 2554 4, /* being hit */ 2555 1, 3, /* dying hard (popping), dying soft (falling) */ 2556 6, 5, /* hard dead frames, soft dead frames */ 2557 7, 0, /* stationary shape, moving shape */ 2558 12, 12, /* teleport in shape, teleport out shape */ 2559 2560 2*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 2561 2562 /* melee attack */ 2563 { 2564 _projectile_staff, /* melee attack type */ 2565 0, /* repetitions */ 2566 0, /* error */ 2567 WORLD_ONE, /* range */ 2568 2569 2, /* melee attack shape */ 2570 2571 0, 0, WORLD_ONE/5, /* dx, dy, dz */ 2572 }, 2573 2574 /* ranged attack */ 2575 { 2576 NONE, /* ranged attack type */ 2577 } 2578 }, 2579 2580 { /* _monster_tiny_bob */ 2581 BUILD_COLLECTION(_collection_civilian, 0), /* shape collection */ 2582 10, 0, 0, /* vitality, immunities, weaknesses */ 2583 _monster_attacks_immediately|_monster_is_omniscent|_monster_cannot_be_dropped|_monster_waits_with_clear_shot|_monster_can_die_in_flames|_monster_uses_sniper_ledges|_monster_is_tiny, /* flags */ 2584 2585 _class_human_civilian, /* class */ 2586 _class_human, /* friends */ 2587 (_class_hostile_alien^_class_assimilated_civilian)|_class_native, /* enemies */ 2588 2589 FIXED_ONE+FIXED_ONE_HALF, /* sound pitch */ 2590 _snd_human_activation, _snd_kill_the_player, _snd_human_clear, _snd_human_trash_talk, _snd_human_apology, _snd_human_stop_shooting_me_you_bastard, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2591 _snd_human_wail, /* dying flaming */ 2592 _snd_human_chatter, 0x1f, /* random sound, random sound mask */ 2593 2594 NONE, /* carrying item type */ 2595 2596 WORLD_ONE/12, (4*WORLD_ONE)/12, /* radius, height */ 2597 0, /* preferred hover height */ 2598 -WORLD_ONE, WORLD_ONE/6, /* minimum ledge delta, maximum ledge delta */ 2599 FIXED_ONE/2, /* external velocity scale */ 2600 _effect_civilian_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 2601 2602 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2603 30*WORLD_ONE, WORLD_ONE, /* visual range, dark visual range */ 2604 _intelligence_high, /* intelligence */ 2605 _speed_superfast2, /* speed */ 2606 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 2607 _vidmaster_door_retry_mask, /* door retry mask */ 2608 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 2609 2610 10, /* being hit */ 2611 2, 1, /* dying hard (popping), dying soft (falling) */ 2612 4, 3, /* hard dead frames, soft dead frames */ 2613 6, 0, /* stationary shape, moving shape */ 2614 9, 8, /* teleport in shape, teleport out shape */ 2615 2616 3*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 2617 2618 /* melee attack */ 2619 { 2620 NONE, /* melee attack type */ 2621 }, 2622 2623 /* ranged attack */ 2624 { 2625 _projectile_pistol_bullet, /* ranged attack type */ 2626 1, /* repetitions */ 2627 NUMBER_OF_ANGLES/150, /* error angle */ 2628 10*WORLD_ONE, /* range */ 2629 5, /* ranged attack shape */ 2630 2631 0, 0, WORLD_ONE/5, /* dx, dy, dz */ 2632 } 2633 }, 2634 2635 { /* _monster_tiny_yeti */ 2636 BUILD_COLLECTION(_collection_yeti, 2), /* shape collection */ 2637 100, FLAG(_damage_flame)|FLAG(_damage_alien_projectile)|FLAG(_damage_fusion_bolt)|FLAG(_damage_lava), 0, /* vitality, immunities, weaknesses */ 2638 _monster_is_not_afraid_of_lava|_monster_is_berserker|_monster_is_tiny, /* flags */ 2639 2640 _class_yeti, /* class */ 2641 _class_yeti, /* friends */ 2642 (_class_human&~_class_player)|_class_pfhor, /* enemies */ 2643 2644 FIXED_ONE+FIXED_ONE_HALF, /* sound pitch */ 2645 NONE, NONE, NONE, NONE, NONE, NONE, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2646 NONE, /* dying flaming */ 2647 NONE, 15, /* random sound, random sound mask */ 2648 2649 NONE, /* carrying item type */ 2650 2651 WORLD_ONE/12, (4*WORLD_ONE)/12, /* radius, height */ 2652 0, /* preferred hover height */ 2653 -WORLD_ONE, WORLD_ONE/6, /* minimum ledge delta, maximum ledge delta */ 2654 FIXED_ONE/2, /* external velocity scale */ 2655 _effect_lava_yeti_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 2656 2657 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2658 30*WORLD_ONE, WORLD_ONE, /* visual range, dark visual range */ 2659 _intelligence_low, /* intelligence */ 2660 _speed_superfast2, /* speed */ 2661 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 2662 _slow_door_retry_mask, /* door retry mask */ 2663 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 2664 2665 12, /* being hit */ 2666 UNONE, 3, /* dying hard (popping), dying soft (falling) */ 2667 UNONE, 4, /* hard dead frames, soft dead frames */ 2668 0, 1, /* stationary shape, moving shape */ 2669 UNONE, UNONE, /* teleport in shape, teleport out shape */ 2670 2671 TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 2672 2673 /* melee attack */ 2674 { 2675 _projectile_yeti, /* melee attack type */ 2676 0, /* repetitions */ 2677 0, /* error */ 2678 WORLD_ONE, /* range */ 2679 13, /* melee attack shape */ 2680 2681 0, 0, WORLD_ONE/5, /* dx, dy, dz */ 2682 }, 2683 2684 /* ranged attack */ 2685 { 2686 _projectile_lava_yeti, /* ranged attack type */ 2687 1, /* repetitions */ 2688 NUMBER_OF_ANGLES/150, /* error angle */ 2689 12*WORLD_ONE, /* range */ 2690 2, /* ranged attack shape */ 2691 2692 0, 0, WORLD_ONE/5, /* dx, dy, dz */ 2693 } 2694 }, 2695 2696 // LP addition: the VacBobs: 2697 // they drop either fusion batteries or fusion guns as appropriate, 2698 // they shoot "minor" fusion bolts (those that don't flip switches) 2699 2700 { /* _civilian_fusion_crew "bob" */ 2701 BUILD_COLLECTION(_collection_civilian_fusion, 0), /* shape collection */ 2702 20, 0, 0, /* vitality, immunities, weaknesses */ 2703 _monster_attacks_immediately|_monster_is_omniscent|_monster_cannot_be_dropped|_monster_waits_with_clear_shot|_monster_can_die_in_flames|_monster_uses_sniper_ledges, /* flags */ 2704 2705 _class_human_civilian, /* class */ 2706 _class_human, /* friends */ 2707 (_class_hostile_alien^_class_assimilated_civilian)|_class_native, /* enemies */ 2708 2709 _normal_frequency, /* sound pitch */ 2710 _snd_civilian_fusion_activation, _snd_civilian_fusion_kill_the_player, _snd_civilian_fusion_clear, _snd_civilian_fusion_trash_talk, _snd_civilian_fusion_apology, _snd_civilian_fusion_stop_shooting_me_you_bastard, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2711 _snd_civilian_fusion_wail, /* dying flaming */ 2712 _snd_civilian_fusion_chatter, 0x1f, /* random sound, random sound mask */ 2713 2714 _i_plasma_magazine, /* carrying item type */ 2715 2716 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 2717 0, /* preferred hover height */ 2718 -2*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 2719 FIXED_ONE, /* external velocity scale */ 2720 _effect_civilian_fusion_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 2721 2722 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2723 30*WORLD_ONE, WORLD_ONE, /* visual range, dark visual range */ 2724 _intelligence_high, /* intelligence */ 2725 _speed_blinding, /* speed */ 2726 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 2727 _vidmaster_door_retry_mask, /* door retry mask */ 2728 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 2729 2730 10, /* being hit */ 2731 2, 1, /* dying hard (popping), dying soft (falling) */ 2732 4, 3, /* hard dead frames, soft dead frames */ 2733 6, 0, /* stationary shape, moving shape */ 2734 9, 8, /* teleport in shape, teleport out shape */ 2735 2736 3*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 2737 2738 /* melee attack */ 2739 { 2740 NONE, /* melee attack type */ 2741 }, 2742 2743 /* ranged attack */ 2744 { 2745 _projectile_fusion_bolt_minor, /* ranged attack type */ 2746 1, /* repetitions */ 2747 NUMBER_OF_ANGLES/150, /* error angle */ 2748 10*WORLD_ONE, /* range */ 2749 5, /* ranged attack shape */ 2750 2751 0, 0, WORLD_ONE*3/4, /* dx, dy, dz */ 2752 } 2753 }, 2754 2755 { /* _civilian_fusion_science "fred" */ 2756 BUILD_COLLECTION(_collection_civilian_fusion, 1), /* shape collection */ 2757 25, 0, 0, /* vitality, immunities, weaknesses */ 2758 _monster_attacks_immediately|_monster_is_omniscent|_monster_cannot_be_dropped|_monster_waits_with_clear_shot|_monster_can_die_in_flames|_monster_uses_sniper_ledges, /* flags */ 2759 2760 _class_human_civilian, /* class */ 2761 _class_human|_class_assimilated_civilian, /* friends */ 2762 (_class_hostile_alien^_class_assimilated_civilian)|_class_native, /* enemies */ 2763 2764 _normal_frequency, /* sound pitch */ 2765 _snd_civilian_fusion_activation, _snd_civilian_fusion_kill_the_player, _snd_civilian_fusion_clear, _snd_civilian_fusion_trash_talk, _snd_civilian_fusion_apology, _snd_civilian_fusion_stop_shooting_me_you_bastard, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2766 _snd_civilian_fusion_wail, /* dying flaming */ 2767 _snd_civilian_fusion_chatter, 0x1f, /* random sound, random sound mask */ 2768 2769 _i_plasma_magazine, /* carrying item type */ 2770 2771 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 2772 0, /* preferred hover height */ 2773 -2*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 2774 FIXED_ONE, /* external velocity scale */ 2775 _effect_civilian_fusion_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 2776 2777 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2778 30*WORLD_ONE, WORLD_ONE, /* visual range, dark visual range */ 2779 _intelligence_high, /* intelligence */ 2780 _speed_blinding, /* speed */ 2781 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 2782 _vidmaster_door_retry_mask, /* door retry mask */ 2783 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 2784 2785 10, /* being hit */ 2786 2, 1, /* dying hard (popping), dying soft (falling) */ 2787 4, 3, /* hard dead frames, soft dead frames */ 2788 6, 0, /* stationary shape, moving shape */ 2789 9, 8, /* teleport in shape, teleport out shape */ 2790 2791 3*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 2792 2793 /* melee attack */ 2794 { 2795 NONE, /* melee attack type */ 2796 }, 2797 2798 /* ranged attack */ 2799 { 2800 _projectile_fusion_bolt_minor, /* ranged attack type */ 2801 2, /* repetitions */ 2802 NUMBER_OF_ANGLES/150, /* error angle */ 2803 13*WORLD_ONE, /* range */ 2804 5, /* ranged attack shape */ 2805 2806 0, 0, WORLD_ONE*3/4, /* dx, dy, dz */ 2807 } 2808 }, 2809 2810 { /* _civilian_fusion_security "steve" */ 2811 BUILD_COLLECTION(_collection_civilian_fusion, 2), /* shape collection */ 2812 30, 0, 0, /* vitality, immunities, weaknesses */ 2813 _monster_attacks_immediately|_monster_is_omniscent|_monster_cannot_be_dropped|_monster_waits_with_clear_shot|_monster_can_die_in_flames|_monster_uses_sniper_ledges, /* flags */ 2814 2815 _class_human_civilian, /* class */ 2816 _class_human|_class_assimilated_civilian, /* friends */ 2817 (_class_hostile_alien^_class_assimilated_civilian)|_class_native, /* enemies */ 2818 2819 _normal_frequency, /* sound pitch */ 2820 _snd_civilian_fusion_activation, _snd_civilian_fusion_kill_the_player, _snd_civilian_fusion_clear, _snd_civilian_fusion_trash_talk, _snd_civilian_fusion_apology, _snd_civilian_fusion_stop_shooting_me_you_bastard, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2821 _snd_civilian_fusion_wail, /* dying flaming */ 2822 _snd_civilian_fusion_chatter, 0x1f, /* random sound, random sound mask */ 2823 2824 _i_plasma_pistol, /* carrying item type */ 2825 2826 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 2827 0, /* preferred hover height */ 2828 -2*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 2829 FIXED_ONE, /* external velocity scale */ 2830 _effect_civilian_fusion_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 2831 2832 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2833 30*WORLD_ONE, WORLD_ONE, /* visual range, dark visual range */ 2834 _intelligence_high, /* intelligence */ 2835 _speed_blinding, /* speed */ 2836 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 2837 _vidmaster_door_retry_mask, /* door retry mask */ 2838 NONE, {NONE, 0, 0, 0}, /* shrapnel radius, shrapnel damage */ 2839 2840 10, /* being hit */ 2841 2, 1, /* dying hard (popping), dying soft (falling) */ 2842 4, 3, /* hard dead frames, soft dead frames */ 2843 6, 0, /* stationary shape, moving shape */ 2844 9, 8, /* teleport in shape, teleport out shape */ 2845 2846 TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 2847 2848 /* melee attack */ 2849 { 2850 NONE, /* melee attack type */ 2851 }, 2852 2853 /* ranged attack */ 2854 { 2855 _projectile_fusion_bolt_minor, /* ranged attack type */ 2856 5, /* repetitions */ 2857 NUMBER_OF_ANGLES/150, /* error angle */ 2858 17*WORLD_ONE, /* range */ 2859 5, /* ranged attack shape */ 2860 2861 0, 0, WORLD_ONE*3/4, /* dx, dy, dz */ 2862 } 2863 }, 2864 2865 { /* _civilian_fusion_assimilated "evil bob" */ 2866 BUILD_COLLECTION(_collection_civilian_fusion, 3), /* shape collection */ 2867 30, 0, 0, /* vitality, immunities, weaknesses */ 2868 _monster_is_alien|_monster_is_kamakazi|_monster_can_die_in_flames, /* flags */ 2869 2870 _class_assimilated_civilian, 2871 _class_pfhor, /* friends */ 2872 _class_player|_class_defender, /* enemies */ 2873 2874 _normal_frequency, /* sound pitch */ 2875 NONE, NONE, NONE, NONE, NONE, _snd_civilian_fusion_stop_shooting_me_you_bastard, /* sounds: activation, friendly activation, clear, kill, apology, friendly-fire */ 2876 _snd_civilian_fusion_wail, /* dying flaming */ 2877 _snd_assimilated_civilian_fusion_chatter, 0xf, /* random sound, random sound mask */ 2878 2879 NONE, /* carrying item type */ 2880 2881 WORLD_ONE/5, (4*WORLD_ONE)/5, /* radius, height */ 2882 0, /* preferred hover height */ 2883 -2*WORLD_ONE, WORLD_ONE/3, /* minimum ledge delta, maximum ledge delta */ 2884 FIXED_ONE, /* external velocity scale */ 2885 _effect_assimilated_civilian_fusion_blood_splash, NONE, NONE, /* impact effect, melee impact effect, contrail effect */ 2886 2887 QUARTER_CIRCLE, QUARTER_CIRCLE/3, /* half visual arc, half vertical visual arc */ 2888 15*WORLD_ONE, WORLD_ONE, /* visual range, dark visual range */ 2889 _intelligence_high, /* intelligence */ 2890 _speed_blinding, /* speed */ 2891 NORMAL_MONSTER_GRAVITY, NORMAL_MONSTER_TERMINAL_VELOCITY, /* gravity, terminal velocity */ 2892 _vidmaster_door_retry_mask, /* door retry mask */ 2893 WORLD_ONE, {_damage_explosion, _alien_damage, 80, 40, FIXED_ONE}, /* shrapnel radius, shrapnel damage */ 2894 2895 10, /* being hit */ 2896 11, UNONE, /* dying hard (popping), dying soft (falling) */ 2897 4, 0, /* hard dead frames, soft dead frames */ 2898 6, 0, /* stationary shape, moving shape */ 2899 8, UNONE, /* teleport in shape, teleport out shape */ 2900 2901 2*TICKS_PER_SECOND, /* attack frequency (for both melee and ranged attacks) */ 2902 2903 /* melee attack */ 2904 { 2905 NONE, /* melee attack type */ 2906 }, 2907 2908 /* ranged attack */ 2909 { 2910 NONE, /* ranged attack type */ 2911 } 2912 }, 2913 }; 2914 2915 // Added for the convenience of the 1-2-3 Converter 2916 uint8 *unpack_monster_definition(uint8 *Stream, monster_definition *Objects, size_t Count); 2917 uint8 *pack_monster_definition(uint8 *Stream, monster_definition *Objects, size_t Count); 2918 2919 #endif 2920 2921 #endif 2922 2923