1 #ifndef __PROJECTILE_DEFINITIONS_H 2 #define __PROJECTILE_DEFINITIONS_H 3 4 /* 5 PROJECTILE_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 Tuesday, May 31, 1994 5:19:56 PM 25 26 Feb 4, 2000 (Loren Petrich): 27 Added SMG bullet and its ability to enter/exit liquids 28 */ 29 30 #include "effects.h" 31 #include "map.h" 32 #include "media.h" 33 #include "projectiles.h" 34 #include "SoundManagerEnums.h" 35 36 /* ---------- constants */ 37 38 enum /* projectile flags */ 39 { 40 _guided= 0x0001, 41 _stop_when_animation_loops= 0x0002, 42 _persistent= 0x0004, /* does stops doing damage and stops moving against a target, but doesn't vanish */ 43 _alien_projectile= 0x0008, /* does less damage and moves slower on lower levels */ 44 _affected_by_gravity= 0x0010, 45 _no_horizontal_error= 0x0020, 46 _no_vertical_error= 0x0040, 47 _can_toggle_control_panels= 0x0080, 48 _positive_vertical_error= 0x0100, 49 _melee_projectile= 0x0200, /* can use a monster�s custom melee detonation */ 50 _persistent_and_virulent= 0x0400, /* keeps moving and doing damage after a successful hit */ 51 _usually_pass_transparent_side= 0x0800, 52 _sometimes_pass_transparent_side= 0x1000, 53 _doubly_affected_by_gravity= 0x2000, 54 _rebounds_from_floor= 0x4000, /* unless v.z<kvzMIN */ 55 _penetrates_media= 0x8000, /* huh uh huh ... i said penetrate */ 56 _becomes_item_on_detonation= 0x10000, /* item type in .permutation field of projectile */ 57 _bleeding_projectile= 0x20000, /* can use a monster�s custom bleeding detonation */ 58 _horizontal_wander= 0x40000, /* random horizontal error perpendicular to direction of movement */ 59 _vertical_wander= 0x80000, /* random vertical movement perpendicular to direction of movement */ 60 _affected_by_half_gravity= 0x100000, 61 _penetrates_media_boundary=0x200000 // Can enter/exit liquids 62 }; 63 64 /* ---------- structures */ 65 66 struct projectile_definition 67 { 68 int16 collection, shape; /* collection can be NONE (invisible) */ 69 int16 detonation_effect, media_detonation_effect; 70 int16 contrail_effect, ticks_between_contrails, maximum_contrails; /* maximum of NONE is infinite */ 71 int16 media_projectile_promotion; 72 73 world_distance radius; /* can be zero and will still hit */ 74 world_distance area_of_effect; /* one target if ==0 */ 75 struct damage_definition damage; 76 77 uint32 flags; 78 79 world_distance speed; 80 world_distance maximum_range; 81 82 _fixed sound_pitch; 83 int16 flyby_sound, rebound_sound; 84 }; 85 86 #ifndef DONT_REPEAT_DEFINITIONS 87 88 /* ---------- projectile definitions */ 89 90 static struct projectile_definition projectile_definitions[NUMBER_OF_PROJECTILE_TYPES]; 91 const struct projectile_definition original_projectile_definitions[NUMBER_OF_PROJECTILE_TYPES]= 92 { 93 { /* player�s rocket */ 94 _collection_rocket, 0, /* collection number, shape number */ 95 _effect_rocket_explosion, NONE, /* detonation effect, media_detonation_effect */ 96 _effect_rocket_contrail, 1, NONE, /* contrail effect, ticks between contrails, maximum contrails */ 97 NONE, /* media projectile promotion */ 98 99 WORLD_ONE/8, /* radius */ 100 WORLD_ONE+WORLD_ONE_HALF, /* area-of-effect */ 101 {_damage_explosion, 0, 250, 50}, /* damage */ 102 103 _can_toggle_control_panels|_guided, /* flags */ 104 105 WORLD_ONE/4, /* speed */ 106 NONE, /* maximum range */ 107 108 _normal_frequency, /* sound pitch */ 109 _snd_rocket_flyby, NONE, /* flyby sound, rebound sound */ 110 }, 111 112 { /* player�s grenade */ 113 _collection_rocket, 3, /* collection number, shape number */ 114 _effect_grenade_explosion, _medium_media_detonation_effect, /* detonation effect, media_detonation_effect */ 115 _effect_grenade_contrail, 1, 8, /* contrail effect, ticks between contrails, maximum contrails */ 116 NONE, /* media projectile promotion */ 117 118 0, /* radius */ 119 WORLD_THREE_FOURTHS, /* area-of-effect */ 120 {_damage_explosion, 0, 80, 20}, /* damage */ 121 122 _affected_by_gravity|_can_toggle_control_panels, /* flags */ 123 124 WORLD_ONE/4, /* speed */ 125 NONE, /* maximum range */ 126 127 _normal_frequency, /* sound pitch */ 128 _snd_grenade_flyby, NONE, /* flyby sound, rebound sound */ 129 }, 130 131 { /* player�s pistol bullet */ 132 NONE, 0, /* collection number, shape number */ 133 _effect_bullet_ricochet, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 134 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 135 NONE, /* media projectile promotion */ 136 137 0, /* radius */ 138 0, /* area-of-effect */ 139 {_damage_projectile, 0, 20, 8}, /* damage */ 140 141 _bleeding_projectile|_usually_pass_transparent_side, /* flags */ 142 143 WORLD_ONE, /* speed */ 144 NONE, /* maximum range */ 145 146 _normal_frequency, /* sound pitch */ 147 NONE, NONE, /* flyby sound, rebound sound */ 148 }, 149 150 { /* player�s rifle bullet */ 151 NONE, 0, /* collection number, shape number */ 152 _effect_bullet_ricochet, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 153 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 154 NONE, /* media projectile promotion */ 155 156 0, /* radius */ 157 0, /* area-of-effect */ 158 {_damage_projectile, 0, 9, 6}, /* damage */ 159 160 _bleeding_projectile|_usually_pass_transparent_side, /* flags */ 161 162 WORLD_ONE, /* speed */ 163 NONE, /* maximum range */ 164 165 _normal_frequency, /* sound pitch */ 166 NONE, NONE, /* flyby sound, rebound sound */ 167 }, 168 169 { /* player�s shotgun bullet */ 170 NONE, 0, /* collection number, shape number */ 171 _effect_bullet_ricochet, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 172 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 173 NONE, /* media projectile promotion */ 174 175 0, /* radius */ 176 0, /* area-of-effect */ 177 {_damage_shotgun_projectile, 0, 20, 4}, /* damage */ 178 179 _bleeding_projectile|_can_toggle_control_panels|_usually_pass_transparent_side, /* flags */ 180 181 WORLD_ONE, /* speed */ 182 NONE, /* maximum range */ 183 184 _normal_frequency, /* sound pitch */ 185 NONE, NONE, /* flyby sound, rebound sound */ 186 }, 187 188 { /* electrical melee staff */ 189 NONE, 0, /* collection number, shape number */ 190 _effect_fighter_melee_detonation, NONE, /* detonation effect, media_detonation_effect */ 191 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 192 NONE, /* media projectile promotion */ 193 194 0, /* radius */ 195 0, /* area-of-effect */ 196 {_damage_electrical_staff, _alien_damage, 20, 5}, /* damage */ 197 198 _sometimes_pass_transparent_side|_alien_projectile|_melee_projectile|_penetrates_media, /* flags */ 199 200 WORLD_ONE_HALF, /* speed */ 201 WORLD_ONE, /* maximum range */ 202 203 _normal_frequency, /* sound pitch */ 204 NONE, NONE, /* flyby sound, rebound sound */ 205 }, 206 207 { /* electrical melee staff projectile */ 208 BUILD_COLLECTION(_collection_fighter, 2), 9, /* collection number, shape number */ 209 _effect_fighter_projectile_detonation, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 210 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 211 NONE, /* media projectile promotion */ 212 213 0, /* radius */ 214 0, /* area-of-effect */ 215 {_damage_electrical_staff, _alien_damage, 30, 5}, /* damage */ 216 217 _sometimes_pass_transparent_side|_alien_projectile, /* flags */ 218 219 WORLD_ONE/8, /* speed */ 220 NONE, /* maximum range */ 221 222 _normal_frequency, /* sound pitch */ 223 _snd_fighter_projectile_flyby, NONE, /* flyby sound, rebound sound */ 224 }, 225 226 { /* player�s flame thrower burst */ 227 _collection_rocket, 6, /* collection number, shape number */ 228 NONE, NONE, /* detonation effect, media_detonation_effect */ 229 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 230 NONE, /* media projectile promotion */ 231 232 WORLD_ONE/3, /* radius */ 233 0, /* area-of-effect */ 234 {_damage_flame, 0, 8, 4}, /* damage */ 235 236 _sometimes_pass_transparent_side|_stop_when_animation_loops|_persistent, /* flags */ 237 238 WORLD_ONE/3, /* speed */ 239 NONE, /* maximum range */ 240 241 _normal_frequency, /* sound pitch */ 242 NONE, NONE, /* flyby sound, rebound sound */ 243 }, 244 245 { /* _projectile_compiler_bolt_minor */ 246 BUILD_COLLECTION(_collection_compiler, 0), 4, /* collection number, shape number */ 247 _effect_compiler_bolt_minor_detonation, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 248 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 249 NONE, /* media projectile promotion */ 250 251 0, /* radius */ 252 0, /* area-of-effect */ 253 {_damage_compiler_bolt, _alien_damage, 40, 10}, /* damage */ 254 255 _sometimes_pass_transparent_side|_alien_projectile, /* flags */ 256 257 WORLD_ONE/8, /* speed */ 258 NONE, /* maximum range */ 259 260 _normal_frequency, /* sound pitch */ 261 _snd_compiler_projectile_flyby, NONE, /* flyby sound, rebound sound */ 262 }, 263 264 { /* _projectile_compiler_bolt_major */ 265 BUILD_COLLECTION(_collection_compiler, 1), 4, /* collection number, shape number */ 266 _effect_compiler_bolt_major_detonation, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 267 _effect_compiler_bolt_major_contrail, 0, NONE, /* contrail effect, ticks between contrails, maximum contrails */ 268 NONE, /* media projectile promotion */ 269 270 0, /* radius */ 271 0, /* area-of-effect */ 272 {_damage_compiler_bolt, _alien_damage, 40, 10}, /* damage */ 273 274 _sometimes_pass_transparent_side|_alien_projectile|_guided, /* flags */ 275 276 WORLD_ONE/12, /* speed */ 277 NONE, /* maximum range */ 278 279 _higher_frequency, /* sound pitch */ 280 _snd_compiler_projectile_flyby, NONE, /* flyby sound, rebound sound */ 281 }, 282 283 { /* alien weapon */ 284 _collection_rocket, 22, /* collection number, shape number */ 285 _effect_alien_weapon_ricochet, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 286 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 287 NONE, /* media projectile promotion */ 288 289 WORLD_ONE/10, /* radius */ 290 0, /* area-of-effect */ 291 {_damage_alien_projectile, _alien_damage, 20, 8}, /* damage */ 292 293 _usually_pass_transparent_side|_alien_projectile|_can_toggle_control_panels, /* flags */ 294 295 WORLD_ONE/4, /* speed */ 296 NONE, /* maximum range */ 297 298 _snd_enforcer_projectile_flyby, NONE, /* flyby sound, rebound sound */ 299 }, 300 301 { /* _projectile_fusion_minor */ 302 _collection_rocket, 11, /* collection number, shape number */ 303 _effect_minor_fusion_detonation, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 304 NONE, 0, NONE, /* contrail effect, ticks between contrails, maximum contrails */ 305 _projectile_minor_fusion_dispersal, /* media projectile promotion */ 306 307 WORLD_ONE/20, /* radius */ 308 0, /* area-of-effect */ 309 {_damage_fusion_bolt, 0, 30, 10}, /* damage */ 310 311 _usually_pass_transparent_side, /* flags */ 312 313 WORLD_ONE/4, /* speed */ 314 NONE, /* maximum range */ 315 316 _normal_frequency, /* sound pitch */ 317 _snd_fusion_flyby, NONE, /* flyby sound, rebound sound */ 318 }, 319 320 { /* _projectile_fusion_major */ 321 _collection_rocket, 12, /* collection number, shape number */ 322 _effect_major_fusion_detonation, _medium_media_detonation_effect, /* detonation effect, media_detonation_effect */ 323 _effect_major_fusion_contrail, 0, NONE, /* contrail effect, ticks between contrails, maximum contrails */ 324 _projectile_major_fusion_dispersal, /* media projectile promotion */ 325 326 WORLD_ONE/10, /* radius */ 327 0, /* area-of-effect */ 328 {_damage_fusion_bolt, 0, 80, 20}, /* damage */ 329 330 _sometimes_pass_transparent_side|_can_toggle_control_panels, /* flags */ 331 332 WORLD_ONE/3, /* speed */ 333 NONE, /* maximum range */ 334 335 _higher_frequency, /* sound pitch */ 336 _snd_fusion_flyby, NONE, /* flyby sound, rebound sound */ 337 }, 338 339 { /* _projectile_hunter */ 340 BUILD_COLLECTION(_collection_hunter, 0), 5, /* collection number, shape number */ 341 _effect_hunter_projectile_detonation, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 342 NONE, 0, NONE, /* contrail effect, ticks between contrails, maximum contrails */ 343 NONE, /* media projectile promotion */ 344 345 0, /* radius */ 346 0, /* area-of-effect */ 347 {_damage_hunter_bolt, 0, 15, 5}, /* damage */ 348 349 _usually_pass_transparent_side|_alien_projectile, /* flags */ 350 351 WORLD_ONE/4, /* speed */ 352 NONE, /* maximum range */ 353 354 _normal_frequency, /* sound pitch */ 355 _snd_hunter_projectile_flyby, NONE, /* flyby sound, rebound sound */ 356 }, 357 358 { /* _projectile_fist */ 359 NONE, 0, /* collection number, shape number */ 360 _effect_fist_detonation, NONE, /* detonation effect, media_detonation_effect */ 361 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 362 NONE, /* media projectile promotion */ 363 364 WORLD_ONE/4, /* radius */ 365 0, /* area-of-effect */ 366 {_damage_fist, 0, 50, 10}, /* damage (will be scaled by player�s velocity) */ 367 368 _usually_pass_transparent_side|_can_toggle_control_panels|_melee_projectile|_penetrates_media, /* flags */ 369 370 (3*WORLD_ONE)/4, /* speed */ 371 (3*WORLD_ONE)/4, /* maximum range */ 372 373 _normal_frequency, /* sound pitch */ 374 NONE, NONE, /* flyby sound, rebound sound */ 375 }, 376 377 { /* _projectile_armageddon_sphere */ 378 0 379 }, 380 381 { /* _projectile_armageddon_electricity */ 382 0 383 }, 384 385 { /* _projectile_juggernaut_rocket */ 386 _collection_rocket, 0, /* collection number, shape number */ 387 _effect_rocket_explosion, _medium_media_detonation_effect, /* detonation effect, media_detonation_effect */ 388 _effect_rocket_contrail, 1, NONE, /* contrail effect, ticks between contrails, maximum contrails */ 389 NONE, /* media projectile promotion */ 390 391 WORLD_ONE/8, /* radius */ 392 WORLD_ONE+WORLD_ONE_HALF, /* area-of-effect */ 393 {_damage_explosion, _alien_damage, 250, 50}, /* damage */ 394 395 _guided|_can_toggle_control_panels, /* flags */ 396 397 WORLD_ONE/4, /* speed */ 398 NONE, /* maximum range */ 399 400 _normal_frequency, /* sound pitch */ 401 NONE, NONE, /* flyby sound, rebound sound */ 402 }, 403 404 { /* _projectile_trooper_bullet */ 405 NONE, 0, /* collection number, shape number */ 406 _effect_bullet_ricochet, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 407 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 408 NONE, /* media projectile promotion */ 409 410 0, /* radius */ 411 0, /* area-of-effect */ 412 {_damage_projectile, _alien_damage, 15, 4}, /* damage */ 413 414 _bleeding_projectile|_usually_pass_transparent_side, /* flags */ 415 416 WORLD_ONE, /* speed */ 417 NONE, /* maximum range */ 418 419 _normal_frequency, /* sound pitch */ 420 NONE, NONE, /* flyby sound, rebound sound */ 421 }, 422 423 { /* _projectile_trooper_grenade */ 424 _collection_trooper, 5, /* collection number, shape number */ 425 _effect_grenade_explosion, _medium_media_detonation_effect, /* detonation effect, media_detonation_effect */ 426 _effect_grenade_contrail, 1, 8, /* contrail effect, ticks between contrails, maximum contrails */ 427 NONE, /* media projectile promotion */ 428 429 0, /* radius */ 430 WORLD_THREE_FOURTHS, /* area-of-effect */ 431 {_damage_explosion, _alien_damage, 40, 20}, /* damage */ 432 433 _affected_by_gravity|_can_toggle_control_panels, /* flags */ 434 435 WORLD_ONE/5, /* speed */ 436 NONE, /* maximum range */ 437 438 _normal_frequency, /* sound pitch */ 439 NONE, NONE, /* flyby sound, rebound sound */ 440 }, 441 442 { /* _projectile_minor_defender */ 443 BUILD_COLLECTION(_collection_defender, 0), 4, /* collection number, shape number */ 444 _effect_minor_defender_detonation, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 445 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 446 NONE, /* media projectile promotion */ 447 448 WORLD_ONE/4, /* radius */ 449 0, /* area-of-effect */ 450 {_damage_defender, 0, 30, 8}, /* damage */ 451 452 _usually_pass_transparent_side, /* flags */ 453 454 WORLD_ONE/8, /* speed */ 455 NONE, /* maximum range */ 456 457 _normal_frequency, /* sound pitch */ 458 _snd_defender_flyby, NONE, /* flyby sound, rebound sound */ 459 }, 460 461 { /* _projectile_major_defender */ 462 BUILD_COLLECTION(_collection_defender, 1), 4, /* collection number, shape number */ 463 _effect_major_defender_detonation, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 464 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 465 NONE, /* media projectile promotion */ 466 467 WORLD_ONE/4, /* radius */ 468 0, /* area-of-effect */ 469 {_damage_defender, 0, 30, 8}, /* damage */ 470 471 _usually_pass_transparent_side|_guided, /* flags */ 472 473 WORLD_ONE/6, /* speed */ 474 NONE, /* maximum range */ 475 476 _higher_frequency, /* sound pitch */ 477 _snd_defender_flyby, NONE, /* flyby sound, rebound sound */ 478 }, 479 480 { /* _projectile_juggernaut_missile */ 481 _collection_juggernaut, 4, /* collection number, shape number */ 482 _effect_grenade_explosion, _medium_media_detonation_effect, /* detonation effect, media_detonation_effect */ 483 _effect_juggernaut_missile_contrail, 2, NONE, /* contrail effect, ticks between contrails, maximum contrails */ 484 NONE, /* media projectile promotion */ 485 486 0, /* radius */ 487 WORLD_THREE_FOURTHS, /* area-of-effect */ 488 {_damage_explosion, _alien_damage, 40, 20}, /* damage */ 489 490 _affected_by_half_gravity|_can_toggle_control_panels|_guided|_positive_vertical_error, /* flags */ 491 492 WORLD_ONE/5, /* speed */ 493 NONE, /* maximum range */ 494 495 _normal_frequency, /* sound pitch */ 496 NONE, NONE, /* flyby sound, rebound sound */ 497 }, 498 499 { /* _projectile_minor_energy_drain */ 500 NONE, 0, /* collection number, shape number */ 501 NONE, NONE, /* detonation effect, media_detonation_effect */ 502 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 503 NONE, /* media projectile promotion */ 504 505 WORLD_ONE/8, /* radius */ 506 0, /* area-of-effect */ 507 {_damage_energy_drain, 0, 4, 0}, /* damage (will be scaled by player�s velocity) */ 508 509 _melee_projectile|_penetrates_media, /* flags */ 510 511 (3*WORLD_ONE)/4, /* speed */ 512 (3*WORLD_ONE)/4, /* maximum range */ 513 514 _normal_frequency, /* sound pitch */ 515 NONE, NONE, /* flyby sound, rebound sound */ 516 }, 517 518 { /* _projectile_major_energy_drain */ 519 NONE, 0, /* collection number, shape number */ 520 NONE, NONE, /* detonation effect, media_detonation_effect */ 521 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 522 NONE, /* media projectile promotion */ 523 524 WORLD_ONE/8, /* radius */ 525 0, /* area-of-effect */ 526 {_damage_energy_drain, 0, 8, 0}, /* damage (will be scaled by player�s velocity) */ 527 528 _melee_projectile|_penetrates_media, /* flags */ 529 530 (3*WORLD_ONE)/4, /* speed */ 531 (3*WORLD_ONE)/4, /* maximum range */ 532 533 _normal_frequency, /* sound pitch */ 534 NONE, NONE, /* flyby sound, rebound sound */ 535 }, 536 537 { /* _projectile_oxygen_drain */ 538 NONE, 0, /* collection number, shape number */ 539 NONE, NONE, /* detonation effect, media_detonation_effect */ 540 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 541 NONE, /* media projectile promotion */ 542 543 WORLD_ONE/8, /* radius */ 544 0, /* area-of-effect */ 545 {_damage_oxygen_drain, 0, 4, 0}, /* damage (will be scaled by player�s velocity) */ 546 547 _melee_projectile|_penetrates_media, /* flags */ 548 549 (3*WORLD_ONE)/4, /* speed */ 550 (3*WORLD_ONE)/4, /* maximum range */ 551 552 _normal_frequency, /* sound pitch */ 553 NONE, NONE, /* flyby sound, rebound sound */ 554 }, 555 556 { /* _projectile_hummer_slow */ 557 BUILD_COLLECTION(_collection_hummer, 0), 5, /* collection number, shape number */ 558 _effect_minor_hummer_projectile_detonation, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 559 NONE, 0, NONE, /* contrail effect, ticks between contrails, maximum contrails */ 560 NONE, /* media projectile promotion */ 561 562 0, /* radius */ 563 0, /* area-of-effect */ 564 {_damage_hummer_bolt, 0, 15, 5}, /* damage */ 565 566 _usually_pass_transparent_side|_alien_projectile, /* flags */ 567 568 WORLD_ONE/8, /* speed */ 569 NONE, /* maximum range */ 570 571 _normal_frequency, /* sound pitch */ 572 _snd_hummer_projectile_flyby, NONE, /* flyby sound, rebound sound */ 573 }, 574 575 { /* _projectile_hummer_fast */ 576 BUILD_COLLECTION(_collection_hummer, 1), 5, /* collection number, shape number */ 577 _effect_major_hummer_projectile_detonation, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 578 NONE, 0, NONE, /* contrail effect, ticks between contrails, maximum contrails */ 579 NONE, /* media projectile promotion */ 580 581 0, /* radius */ 582 0, /* area-of-effect */ 583 {_damage_hummer_bolt, 0, 15, 5}, /* damage */ 584 585 _usually_pass_transparent_side|_alien_projectile, /* flags */ 586 587 WORLD_ONE/6, /* speed */ 588 NONE, /* maximum range */ 589 590 _higher_frequency, /* sound pitch */ 591 _snd_hummer_projectile_flyby, NONE, /* flyby sound, rebound sound */ 592 }, 593 594 { /* _projectile_hummer_durandal */ 595 BUILD_COLLECTION(_collection_hummer, 1), 5, /* collection number, shape number */ 596 _effect_durandal_hummer_projectile_detonation, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 597 NONE, 0, NONE, /* contrail effect, ticks between contrails, maximum contrails */ 598 NONE, /* media projectile promotion */ 599 600 0, /* radius */ 601 0, /* area-of-effect */ 602 {_damage_hummer_bolt, 0, 15, 5}, /* damage */ 603 604 _guided|_usually_pass_transparent_side|_alien_projectile, /* flags */ 605 606 WORLD_ONE/8, /* speed */ 607 NONE, /* maximum range */ 608 609 _lower_frequency, /* sound pitch */ 610 _snd_hummer_projectile_flyby, NONE, /* flyby sound, rebound sound */ 611 }, 612 613 { /* _projectile_minor_cyborg_ball */ 614 BUILD_COLLECTION(_collection_cyborg, 0), 6, /* collection number, shape number */ 615 _effect_grenade_explosion, _medium_media_detonation_effect, /* detonation effect, media_detonation_effect */ 616 _effect_grenade_contrail, 1, 8, /* contrail effect, ticks between contrails, maximum contrails */ 617 NONE, /* media projectile promotion */ 618 619 WORLD_ONE/8, /* radius */ 620 WORLD_ONE, /* area-of-effect */ 621 {_damage_explosion, 0, 20, 10}, /* damage */ 622 623 _can_toggle_control_panels|_sometimes_pass_transparent_side|_alien_projectile|_rebounds_from_floor|_doubly_affected_by_gravity, /* flags */ 624 625 WORLD_ONE/10, /* speed */ 626 NONE, /* maximum range */ 627 628 _normal_frequency, /* sound pitch */ 629 _snd_cyborg_projectile_flyby, _snd_cyborg_projectile_bounce, /* flyby sound, rebound sound */ 630 }, 631 632 { /* _projectile_major_cyborg_ball */ 633 BUILD_COLLECTION(_collection_cyborg, 1), 6, /* collection number, shape number */ 634 _effect_grenade_explosion, _medium_media_detonation_effect, /* detonation effect, media_detonation_effect */ 635 _effect_grenade_contrail, 1, 8, /* contrail effect, ticks between contrails, maximum contrails */ 636 NONE, /* media projectile promotion */ 637 638 WORLD_ONE/8, /* radius */ 639 WORLD_ONE, /* area-of-effect */ 640 {_damage_explosion, 0, 40, 10}, /* damage */ 641 642 _guided|_can_toggle_control_panels|_sometimes_pass_transparent_side|_alien_projectile|_rebounds_from_floor|_doubly_affected_by_gravity, /* flags */ 643 644 WORLD_ONE/8, /* speed */ 645 NONE, /* maximum range */ 646 647 _lower_frequency, /* sound pitch */ 648 _snd_cyborg_projectile_flyby, _snd_cyborg_projectile_bounce, /* flyby sound, rebound sound */ 649 }, 650 651 { /* _projectile_ball */ 652 BUILD_COLLECTION(_collection_player, 0), 0, /* collection number, shape number */ 653 NONE, NONE, /* detonation effect, media_detonation_effect */ 654 NONE, 1, 8, /* contrail effect, ticks between contrails, maximum contrails */ 655 NONE, /* media projectile promotion */ 656 657 WORLD_ONE/4, /* radius */ 658 NONE, /* area-of-effect */ 659 {NONE, 0, 40, 10}, /* damage */ 660 661 _persistent_and_virulent|_penetrates_media|_becomes_item_on_detonation|_can_toggle_control_panels|_rebounds_from_floor|_doubly_affected_by_gravity|_penetrates_media, /* flags */ 662 663 0, /* speed */ 664 NONE, /* maximum range */ 665 666 _normal_frequency, /* sound pitch */ 667 NONE, _snd_ball_bounce, /* flyby sound, rebound sound */ 668 }, 669 670 { /* _projectile_minor_fusion_dispersal */ 671 _collection_rocket, 11, /* collection number, shape number */ 672 _effect_minor_fusion_dispersal, NONE, /* detonation effect, media_detonation_effect */ 673 NONE, 0, NONE, /* contrail effect, ticks between contrails, maximum contrails */ 674 NONE, /* media projectile promotion */ 675 676 WORLD_ONE/20, /* radius */ 677 WORLD_ONE, /* area-of-effect */ 678 {_damage_fusion_bolt, 0, 30, 10}, /* damage */ 679 680 0, /* flags */ 681 682 WORLD_ONE/4, /* speed */ 683 NONE, /* maximum range */ 684 685 _normal_frequency, /* sound pitch */ 686 _snd_fusion_flyby, NONE, /* flyby sound, rebound sound */ 687 }, 688 689 { /* _projectile_major_fusion_dispersal */ 690 _collection_rocket, 12, /* collection number, shape number */ 691 _effect_major_fusion_dispersal, NONE, /* detonation effect, media_detonation_effect */ 692 NONE, 0, NONE, /* contrail effect, ticks between contrails, maximum contrails */ 693 NONE, /* media projectile promotion */ 694 695 WORLD_ONE/10, /* radius */ 696 2*WORLD_ONE, /* area-of-effect */ 697 {_damage_fusion_bolt, 0, 80, 20}, /* damage */ 698 699 0, /* flags */ 700 701 WORLD_ONE/3, /* speed */ 702 NONE, /* maximum range */ 703 704 _higher_frequency, /* sound pitch */ 705 _snd_fusion_flyby, NONE, /* flyby sound, rebound sound */ 706 }, 707 708 { /* _projectile_overloaded_fusion_dispersal */ 709 _collection_rocket, 12, /* collection number, shape number */ 710 _effect_overloaded_fusion_dispersal, NONE, /* detonation effect, media_detonation_effect */ 711 NONE, 0, NONE, /* contrail effect, ticks between contrails, maximum contrails */ 712 NONE, /* media projectile promotion */ 713 714 WORLD_ONE/10, /* radius */ 715 4*WORLD_ONE, /* area-of-effect */ 716 {_damage_fusion_bolt, 0, 500, 0}, /* damage */ 717 718 0, /* flags */ 719 720 WORLD_ONE/3, /* speed */ 721 NONE, /* maximum range */ 722 723 _lower_frequency, /* sound pitch */ 724 _snd_fusion_flyby, NONE, /* flyby sound, rebound sound */ 725 }, 726 727 { /* _projectile_yeti */ 728 NONE, 0, /* collection number, shape number */ 729 _effect_yeti_melee_detonation, NONE, /* detonation effect, media_detonation_effect */ 730 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 731 NONE, /* media projectile promotion */ 732 733 0, /* radius */ 734 0, /* area-of-effect */ 735 {_damage_yeti_claws, _alien_damage, 20, 5}, /* damage */ 736 737 _sometimes_pass_transparent_side|_alien_projectile|_melee_projectile|_penetrates_media, /* flags */ 738 739 WORLD_ONE_HALF, /* speed */ 740 WORLD_ONE, /* maximum range */ 741 742 _normal_frequency, /* sound pitch */ 743 NONE, NONE, /* flyby sound, rebound sound */ 744 }, 745 746 { /* _projectile_sewage_yeti */ 747 BUILD_COLLECTION(_collection_yeti, 0), 10, /* collection number, shape number */ 748 _effect_sewage_yeti_projectile_detonation, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 749 NONE, 0, NONE, /* contrail effect, ticks between contrails, maximum contrails */ 750 NONE, /* media projectile promotion */ 751 752 0, /* radius */ 753 0, /* area-of-effect */ 754 {_damage_yeti_projectile, 0, 15, 5}, /* damage */ 755 756 _usually_pass_transparent_side|_alien_projectile|_affected_by_half_gravity, /* flags */ 757 758 WORLD_ONE/8, /* speed */ 759 NONE, /* maximum range */ 760 761 _normal_frequency, /* sound pitch */ 762 _snd_yeti_projectile_sewage_flyby, NONE, /* flyby sound, rebound sound */ 763 }, 764 765 { /* _projectile_lava_yeti */ 766 BUILD_COLLECTION(_collection_yeti, 2), 6, /* collection number, shape number */ 767 _effect_lava_yeti_projectile_detonation, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 768 NONE, 0, NONE, /* contrail effect, ticks between contrails, maximum contrails */ 769 NONE, /* media projectile promotion */ 770 771 0, /* radius */ 772 0, /* area-of-effect */ 773 {_damage_flame, 0, 30, 10}, /* damage */ 774 775 _usually_pass_transparent_side|_alien_projectile, /* flags */ 776 777 WORLD_ONE/8, /* speed */ 778 NONE, /* maximum range */ 779 780 _normal_frequency, /* sound pitch */ 781 _snd_yeti_projectile_lava_flyby, NONE, /* flyby sound, rebound sound */ 782 }, 783 784 // LP addition: SMG bullet is a clone of the rifle one, except for entering/exiting liquids 785 { /* player�s smg bullet */ 786 NONE, 0, /* collection number, shape number */ 787 _effect_bullet_ricochet, _small_media_detonation_effect, /* detonation effect, media_detonation_effect */ 788 NONE, 0, 0, /* contrail effect, ticks between contrails, maximum contrails */ 789 NONE, /* media projectile promotion */ 790 791 0, /* radius */ 792 0, /* area-of-effect */ 793 {_damage_projectile, 0, 9, 6}, /* damage */ 794 795 _bleeding_projectile|_usually_pass_transparent_side|_penetrates_media_boundary, /* flags */ 796 797 WORLD_ONE, /* speed */ 798 NONE, /* maximum range */ 799 800 _normal_frequency, /* sound pitch */ 801 NONE, NONE, /* flyby sound, rebound sound */ 802 }, 803 }; 804 805 // Added for the convenience of the 1-2-3 Converter 806 uint8 *unpack_projectile_definition(uint8 *Stream, projectile_definition *Objects, size_t Count); 807 uint8 *pack_projectile_definition(uint8 *Stream, projectile_definition *Objects, size_t Count); 808 809 #endif 810 811 #endif 812 813