mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-30 15:52:09 +00:00
208 lines
3.3 KiB
Text
208 lines
3.3 KiB
Text
// Crossbow -----------------------------------------------------------------
|
|
|
|
class Crossbow : HereticWeapon
|
|
{
|
|
Default
|
|
{
|
|
Weapon.SelectionOrder 800;
|
|
Weapon.AmmoUse 1;
|
|
Weapon.AmmoGive 10;
|
|
Weapon.AmmoType "CrossbowAmmo";
|
|
Weapon.SisterWeapon "CrossbowPowered";
|
|
Weapon.YAdjust 15;
|
|
Inventory.PickupMessage "$TXT_WPNCROSSBOW";
|
|
Tag "$TAG_CROSSBOW";
|
|
}
|
|
|
|
States
|
|
{
|
|
Spawn:
|
|
WBOW A -1;
|
|
Stop;
|
|
Ready:
|
|
CRBW AAAAAABBBBBBCCCCCC 1 A_WeaponReady;
|
|
Loop;
|
|
Deselect:
|
|
CRBW A 1 A_Lower;
|
|
Loop;
|
|
Select:
|
|
CRBW A 1 A_Raise;
|
|
Loop;
|
|
Fire:
|
|
CRBW D 6 A_FireCrossbowPL1;
|
|
CRBW EFGH 3;
|
|
CRBW AB 4;
|
|
CRBW C 5 A_ReFire;
|
|
Goto Ready;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// PROC A_FireCrossbowPL1
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
action void A_FireCrossbowPL1 ()
|
|
{
|
|
if (player == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
Weapon weapon = player.ReadyWeapon;
|
|
if (weapon != null)
|
|
{
|
|
if (!weapon.DepleteAmmo (weapon.bAltFire))
|
|
return;
|
|
}
|
|
SpawnPlayerMissile ("CrossbowFX1");
|
|
SpawnPlayerMissile ("CrossbowFX3", angle - 4.5);
|
|
SpawnPlayerMissile ("CrossbowFX3", angle + 4.5);
|
|
}
|
|
}
|
|
|
|
|
|
class CrossbowPowered : Crossbow
|
|
{
|
|
Default
|
|
{
|
|
+WEAPON.POWERED_UP
|
|
Weapon.AmmoGive 0;
|
|
Weapon.SisterWeapon "Crossbow";
|
|
Tag "$TAG_CROSSBOWP";
|
|
}
|
|
|
|
States
|
|
{
|
|
Fire:
|
|
CRBW D 5 A_FireCrossbowPL2;
|
|
CRBW E 3;
|
|
CRBW F 2;
|
|
CRBW G 3;
|
|
CRBW H 2;
|
|
CRBW A 3;
|
|
CRBW B 3;
|
|
CRBW C 4 A_ReFire;
|
|
Goto Ready;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// PROC A_FireCrossbowPL2
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
action void A_FireCrossbowPL2()
|
|
{
|
|
if (player == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
Weapon weapon = player.ReadyWeapon;
|
|
if (weapon != null)
|
|
{
|
|
if (!weapon.DepleteAmmo (weapon.bAltFire))
|
|
return;
|
|
}
|
|
SpawnPlayerMissile ("CrossbowFX2");
|
|
SpawnPlayerMissile ("CrossbowFX2", angle - 4.5);
|
|
SpawnPlayerMissile ("CrossbowFX2", angle + 4.5);
|
|
SpawnPlayerMissile ("CrossbowFX3", angle - 9.);
|
|
SpawnPlayerMissile ("CrossbowFX3", angle + 9.);
|
|
}
|
|
}
|
|
|
|
|
|
// Crossbow FX1 -------------------------------------------------------------
|
|
|
|
class CrossbowFX1 : Actor
|
|
{
|
|
Default
|
|
{
|
|
Radius 11;
|
|
Height 8;
|
|
Speed 30;
|
|
Damage 10;
|
|
Projectile;
|
|
RenderStyle "Add";
|
|
SeeSound "weapons/bowshoot";
|
|
DeathSound "weapons/bowhit";
|
|
Obituary "$OB_MPCROSSBOW";
|
|
}
|
|
|
|
States
|
|
{
|
|
Spawn:
|
|
FX03 B 1 BRIGHT;
|
|
Loop;
|
|
Death:
|
|
FX03 HIJ 8 BRIGHT;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
|
|
// Crossbow FX2 -------------------------------------------------------------
|
|
|
|
class CrossbowFX2 : CrossbowFX1
|
|
{
|
|
Default
|
|
{
|
|
Speed 32;
|
|
Damage 6;
|
|
Obituary "$OB_MPPCROSSBOW";
|
|
}
|
|
|
|
States
|
|
{
|
|
Spawn:
|
|
FX03 B 1 BRIGHT A_SpawnItemEx("CrossbowFX4", random2[BoltSpark]()*0.015625, random2[BoltSpark]()*0.015625, 0, 0,0,0,0,SXF_ABSOLUTEPOSITION, 50);
|
|
Loop;
|
|
}
|
|
}
|
|
|
|
// Crossbow FX3 -------------------------------------------------------------
|
|
|
|
class CrossbowFX3 : CrossbowFX1
|
|
{
|
|
Default
|
|
{
|
|
Speed 20;
|
|
Damage 2;
|
|
SeeSound "";
|
|
-NOBLOCKMAP
|
|
+WINDTHRUST
|
|
+THRUGHOST
|
|
}
|
|
|
|
States
|
|
{
|
|
Spawn:
|
|
FX03 A 1 BRIGHT;
|
|
Loop;
|
|
Death:
|
|
FX03 CDE 8 BRIGHT;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
// Crossbow FX4 -------------------------------------------------------------
|
|
|
|
class CrossbowFX4 : Actor
|
|
{
|
|
Default
|
|
{
|
|
+NOBLOCKMAP
|
|
Gravity 0.125;
|
|
RenderStyle "Add";
|
|
}
|
|
|
|
States
|
|
{
|
|
Spawn:
|
|
FX03 FG 8 BRIGHT;
|
|
Stop;
|
|
}
|
|
}
|
|
|