mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-29 23:33:00 +00:00
a638cfbd6e
As a consequence it must return null in the failure case instead of asserting and all calls to this function must check for the failure case.
292 lines
5.4 KiB
Text
292 lines
5.4 KiB
Text
// Mauler -------------------------------------------------------------------
|
|
// The scatter version
|
|
|
|
class Mauler : StrifeWeapon
|
|
{
|
|
Default
|
|
{
|
|
+FLOORCLIP
|
|
Weapon.SelectionOrder 300;
|
|
Weapon.AmmoUse1 20;
|
|
Weapon.AmmoGive1 40;
|
|
Weapon.AmmoType1 "EnergyPod";
|
|
Weapon.SisterWeapon "Mauler2";
|
|
Inventory.Icon "TRPDA0";
|
|
Tag "$TAG_MAULER1";
|
|
Inventory.PickupMessage "$TXT_MAULER";
|
|
Obituary "$OB_MPMAULER1";
|
|
}
|
|
|
|
States
|
|
{
|
|
Ready:
|
|
MAUL FGHA 6 A_WeaponReady;
|
|
Loop;
|
|
Deselect:
|
|
MAUL A 1 A_Lower;
|
|
Loop;
|
|
Select:
|
|
MAUL A 1 A_Raise;
|
|
Loop;
|
|
Fire:
|
|
BLSF A 5 Bright A_FireMauler1;
|
|
MAUL B 3 Bright A_Light1;
|
|
MAUL C 2 A_Light2;
|
|
MAUL DE 2;
|
|
MAUL A 7 A_Light0;
|
|
MAUL H 7;
|
|
MAUL G 7 A_CheckReload;
|
|
Goto Ready;
|
|
Spawn:
|
|
TRPD A -1;
|
|
Stop;
|
|
}
|
|
|
|
//============================================================================
|
|
//
|
|
// A_FireMauler1
|
|
//
|
|
// Hey! This is exactly the same as a super shotgun except for the sound
|
|
// and the bullet puffs and the disintegration death.
|
|
//
|
|
//============================================================================
|
|
|
|
action void A_FireMauler1()
|
|
{
|
|
if (player == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
A_StartSound ("weapons/mauler1", CHAN_WEAPON);
|
|
Weapon weap = player.ReadyWeapon;
|
|
if (weap != null)
|
|
{
|
|
if (!weap.DepleteAmmo (weap.bAltFire, true, 2))
|
|
return;
|
|
|
|
}
|
|
player.mo.PlayAttacking2 ();
|
|
|
|
double pitch = BulletSlope ();
|
|
|
|
for (int i = 0 ; i < 20 ; i++)
|
|
{
|
|
int damage = 5 * random[Mauler1](1, 3);
|
|
double ang = angle + Random2[Mauler1]() * (11.25 / 256);
|
|
|
|
// Strife used a range of 2112 units for the mauler to signal that
|
|
// it should use a different puff. ZDoom's default range is longer
|
|
// than this, so let's not handicap it by being too faithful to the
|
|
// original.
|
|
|
|
LineAttack (ang, PLAYERMISSILERANGE, pitch + Random2[Mauler1]() * (7.097 / 256), damage, 'Hitscan', "MaulerPuff");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// Mauler Torpedo version ---------------------------------------------------
|
|
|
|
class Mauler2 : Mauler
|
|
{
|
|
Default
|
|
{
|
|
Weapon.SelectionOrder 3300;
|
|
Weapon.AmmoUse1 30;
|
|
Weapon.AmmoGive1 0;
|
|
Weapon.AmmoType1 "EnergyPod";
|
|
Weapon.SisterWeapon "Mauler";
|
|
Tag "$TAG_MAULER2";
|
|
}
|
|
|
|
States
|
|
{
|
|
Ready:
|
|
MAUL IJKL 7 A_WeaponReady;
|
|
Loop;
|
|
Deselect:
|
|
MAUL I 1 A_Lower;
|
|
Loop;
|
|
Select:
|
|
MAUL I 1 A_Raise;
|
|
Loop;
|
|
Fire:
|
|
MAUL I 20 A_FireMauler2Pre;
|
|
MAUL J 10 A_Light1;
|
|
BLSF A 10 Bright A_FireMauler2;
|
|
MAUL B 10 Bright A_Light2;
|
|
MAUL C 2;
|
|
MAUL D 2 A_Light0;
|
|
MAUL E 2 A_ReFire;
|
|
Goto Ready;
|
|
}
|
|
|
|
//============================================================================
|
|
//
|
|
// A_FireMauler2Pre
|
|
//
|
|
// Makes some noise and moves the psprite.
|
|
//
|
|
//============================================================================
|
|
|
|
action void A_FireMauler2Pre ()
|
|
{
|
|
A_StartSound ("weapons/mauler2charge", CHAN_WEAPON);
|
|
|
|
if (player != null)
|
|
{
|
|
PSprite psp = player.GetPSprite(PSP_WEAPON);
|
|
if (psp)
|
|
{
|
|
psp.x += Random2[Mauler2]() / 64.;
|
|
psp.y += Random2[Mauler2]() / 64.;
|
|
}
|
|
}
|
|
}
|
|
|
|
//============================================================================
|
|
//
|
|
// A_FireMauler2Pre
|
|
//
|
|
// Fires the torpedo.
|
|
//
|
|
//============================================================================
|
|
|
|
action void A_FireMauler2 ()
|
|
{
|
|
if (player == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
Weapon weapon = player.ReadyWeapon;
|
|
if (weapon != null)
|
|
{
|
|
if (!weapon.DepleteAmmo (weapon.bAltFire))
|
|
return;
|
|
}
|
|
player.mo.PlayAttacking2 ();
|
|
|
|
SpawnPlayerMissile ("MaulerTorpedo");
|
|
DamageMobj (self, null, 20, 'Disintegrate');
|
|
Thrust(7.8125, Angle+180.);
|
|
}
|
|
}
|
|
|
|
|
|
// Mauler "Bullet" Puff -----------------------------------------------------
|
|
|
|
class MaulerPuff : Actor
|
|
{
|
|
Default
|
|
{
|
|
+NOBLOCKMAP
|
|
+NOGRAVITY
|
|
+PUFFONACTORS
|
|
+ZDOOMTRANS
|
|
RenderStyle "Add";
|
|
DamageType "Disintegrate";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
MPUF AB 5;
|
|
POW1 ABCDE 4;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
// The Mauler's Torpedo -----------------------------------------------------
|
|
|
|
class MaulerTorpedo : Actor
|
|
{
|
|
Default
|
|
{
|
|
Speed 20;
|
|
Height 8;
|
|
Radius 13;
|
|
Damage 1;
|
|
DamageType "Disintegrate";
|
|
Projectile;
|
|
+STRIFEDAMAGE
|
|
+ZDOOMTRANS
|
|
MaxStepHeight 4;
|
|
RenderStyle "Add";
|
|
SeeSound "weapons/mauler2fire";
|
|
DeathSound "weapons/mauler2hit";
|
|
Obituary "$OB_MPMAULER";
|
|
}
|
|
|
|
States
|
|
{
|
|
Spawn:
|
|
TORP ABCD 4 Bright;
|
|
Loop;
|
|
Death:
|
|
THIT AB 8 Bright;
|
|
THIT C 8 Bright A_MaulerTorpedoWave;
|
|
THIT DE 8 Bright;
|
|
Stop;
|
|
}
|
|
|
|
//============================================================================
|
|
//
|
|
// A_MaulerTorpedoWave
|
|
//
|
|
// Launches lots of balls when the torpedo hits something.
|
|
//
|
|
//============================================================================
|
|
|
|
action void A_MaulerTorpedoWave()
|
|
{
|
|
readonly<Actor> wavedef = GetDefaultByType("MaulerTorpedoWave");
|
|
double savedz = pos.z;
|
|
angle += 180.;
|
|
|
|
// If the torpedo hit the ceiling, it should still spawn the wave
|
|
if (wavedef && ceilingz < pos.z + wavedef.Height)
|
|
{
|
|
SetZ(ceilingz - wavedef.Height);
|
|
}
|
|
|
|
for (int i = 0; i < 80; ++i)
|
|
{
|
|
Angle += 4.5;
|
|
SpawnSubMissile ("MaulerTorpedoWave", target);
|
|
}
|
|
SetZ(savedz);
|
|
}
|
|
}
|
|
|
|
|
|
// The mini torpedoes shot by the big torpedo --------------------------------
|
|
|
|
class MaulerTorpedoWave : Actor
|
|
{
|
|
Default
|
|
{
|
|
Speed 35;
|
|
Radius 13;
|
|
Height 13;
|
|
Damage 10;
|
|
DamageType "Disintegrate";
|
|
Projectile;
|
|
+STRIFEDAMAGE
|
|
+ZDOOMTRANS
|
|
MaxStepHeight 4;
|
|
RenderStyle "Add";
|
|
Obituary "$OB_MPMAULER";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
TWAV AB 9 Bright;
|
|
Death:
|
|
TWAV C 9 Bright;
|
|
Stop;
|
|
}
|
|
|
|
}
|
|
|
|
|