Commit a6ec8d11 authored by Accensus's avatar Accensus
Browse files

- Converted Viper Wave to ZScript and revamped the L3 effect.

parent bd0408cd
//MECHANICS
ACTOR ViperWaveWeapon : BEWeaponBase
{
Inventory.Icon "WEAP13"
Weapon.SlotNumber 1
Weapon.BobStyle Inverse
Weapon.BobSpeed 2.3
Weapon.BobRangeX 0.5
Weapon.BobRangeY 0.3
Weapon.AmmoType1 "AmmoViperWave"
Weapon.AmmoType2 "AmmoRapidEnergy"
Weapon.UpSound "beplayer/weapswitchviperwave"
BEWeaponBase.ReloadProperties "weapons/viperwavereloadstage1", "weapons/viperwavereloadstage2", "weapons/viperwavereloadstage3"
BEWeaponBase.Sprite "WEAPH13"
BEWeaponBase.Type 2
BEWeaponBase.Special 3
BEWeaponBase.Element 4
BEWeaponBase.Attributes 4, 4, 2, 5
BEWeaponBase.Durability 1200
BEWeaponBase.EffectTexts "- Shots inflict poison status on enemies.", "- Additional spiraling shots are fired.", "- Slain enemies release a poison nova."
BEWeaponBase.FlavorText "Good idea at first, making use of an unstable quantum matter source to create weapons that destroy anything on hitting it. Then you learn that the instability extends so far as its flight path. Thankfully they seem to melt things good--the power is unreal."
+WEAPON.ALT_AMMO_OPTIONAL
+WEAPON.NO_AUTO_SWITCH
+WEAPON.CHEATNOTWEAPON
Tag "Viper Wave"
States
{
Spawn:
PVPW A 0
Goto Super::Spawn
Ready:
_WVW A 1 A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4)
Loop
_WVW A 1 Offset( 0, 80) //Head here after Sub-Weapon usage.
_WVW A 1 Offset( 0, 60)
_WVW A 1 Offset( 0, 43)
TNT1 A 0 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
Goto Ready
Deselect:
TNT1 AA 0 A_Lower
_WVW A 1 A_Lower
Loop
Select:
TNT1 AA 0 A_Raise
_WVW A 1 A_Raise
Loop
Fire:
_WVW A 0 A_CheckWeaponFire
_WVW A 0 A_JumpIf(A_GetWeaponLevel() >= 3,"FireL3")
_WVW A 0 A_JumpIf(A_GetWeaponLevel() == 2,"FireL2")
_WVW B 1 Bright A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_AlertMonsters
_WVW A 0 A_PlaySound("weapons/viperwaveshot")
_WVW A 0 A_FireBEProjectile("ViperWaveProjectile",frandom(-2,2),0,-8,-2,0,frandom(-2,2))
_WVW A 0 A_TakeAmmo
_WVW A 0 A_TakeDurability(1)
_WVW A 0 A_CheckWeaponFire
_WVW C 1 Bright A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_GunFlash
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW FGF 1 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 2 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_PlaySound("weapons/viperwaveshot")
_WVW D 1 Bright A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_AlertMonsters
_WVW A 0 A_FireBEProjectile("ViperWaveProjectileB",frandom(-2,2),0,8,-2,0,frandom(-2,2))
_WVW A 0 A_TakeAmmo
_WVW A 0 A_TakeDurability(1)
_WVW E 1 Bright A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_GunFlash
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW HIH 1 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 1 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4)
_WVW A 1 A_ReFire
Goto Ready
FireL2:
_WVW A 0 A_CheckWeaponFire
_WVW A 0 A_JumpIf(A_GetWeaponLevel() >= 3,"FireL3")
_WVW B 1 Bright A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_AlertMonsters
_WVW A 0 A_PlaySound("weapons/viperwaveshot")
_WVW A 0 A_FireBEProjectile("ViperWaveProjectile",frandom(-2,2),0,-8,-2,0,frandom(-2,2))
_WVW A 0 A_FireBEProjectile("ViperWaveProjectileC",1,0,-8,-2,0,0)
_WVW A 0 A_TakeAmmo
_WVW A 0 A_TakeDurability(1)
_WVW A 0 A_CheckWeaponFire
_WVW C 1 Bright A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_GunFlash
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW FGF 1 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 2 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_PlaySound("weapons/viperwaveshot")
_WVW D 1 Bright A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_AlertMonsters
_WVW A 0 A_FireBEProjectile("ViperWaveProjectileB",frandom(-2,2),0,8,-2,0,frandom(-2,2))
_WVW A 0 A_FireBEProjectile("ViperWaveProjectileD",-1,0,8,-2,0,0)
_WVW A 0 A_TakeAmmo
_WVW A 0 A_TakeDurability(1)
_WVW E 1 Bright A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_GunFlash
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW HIH 1 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 1 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4)
_WVW A 1 A_ReFire
Goto Ready
FireL3:
_WVW A 0 A_CheckWeaponFire
_WVW B 1 Bright A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_AlertMonsters
_WVW A 0 A_PlaySound("weapons/viperwaveshot")
_WVW A 0 A_FireBEProjectile("ViperWaveProjectileVenom",frandom(-2,2),0,-8,-2,0,frandom(-2,2))
_WVW A 0 A_FireBEProjectile("ViperWaveProjectileVenomC",1,0,-8,-2,0,0)
_WVW A 0 A_TakeAmmo
_WVW A 0 A_TakeDurability(1)
_WVW A 0 A_CheckWeaponFire
_WVW C 1 Bright A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_GunFlash
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW FGF 1 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 2 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_PlaySound("weapons/viperwaveshot")
_WVW D 1 Bright A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_AlertMonsters
_WVW A 0 A_FireBEProjectile("ViperWaveProjectileVenomB",frandom(-2,2),0,8,-2,0,frandom(-2,2))
_WVW A 0 A_FireBEProjectile("ViperWaveProjectileVenomD",-1,0,8,-2,0,0)
_WVW A 0 A_TakeAmmo
_WVW A 0 A_TakeDurability(1)
_WVW E 1 Bright A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_GunFlash
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW HIH 1 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 1 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4|WRF_NOBOB)
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY|WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3|WRF_ALLOWUSER4)
_WVW A 1 A_ReFire
Goto Ready
Flash:
TNT1 A 1 Bright A_Light1
TNT1 A 1 Bright A_Light0
Stop
}
}
ACTOR ViperWaveProjectile : BEPlayerProjectile
{
Radius 4
Height 4
Damage (5*random(4,5))
DamageType "ViperWave"
//PoisonDamage 25,6,0
Speed 35
Scale 0.35
PROJECTILE
+BRIGHT
+THRUSPECIES
Species "Player"
Gravity 0.8
States
{
Spawn:
TSXP B 1
TSXP B 0 A_SpawnItemEx("ViperWaveTail",0,0,0,0,0)
TSXP B 1
TSXP B 0 A_SpawnItemEx("ViperWaveTail",0,0,0,0,0)
TSXP B 1
TSXP B 0 A_SpawnItemEx("ViperWaveTail",0,0,0,0,0)
TSXP B 1
TSXP B 0 A_SpawnItemEx("ViperWaveTail",0,0,0,0,0)
TSXP B 1
TSXP B 0 A_SpawnItemEx("ViperWaveTail",0,0,0,0,0)
TSXP B 1
TSXP B 0 A_SpawnItemEx("ViperWaveTail",0,0,0,0,0)
SpawnFall:
TSXP B 0 A_SpawnItemEx("ViperWaveTail",0,0,0,0,0)
TSXP B 1 A_Weave(5,0,3.5,0)
Loop
Death:
QSPF A 0 A_PlaySound("weapons/viperwaveimpact",CHAN_AUTO,1,0)
QSPF A 0 A_SetScale(1.0)
QSPF A 0 A_JumpIf(GetCvar("bulleteye_fxreduction") == 1,9)
QSPF AAAAAAAA 0 A_CustomMissile("ViperWaveImpactSparkFX",0,0,random(0,360),CMF_AIMDIRECTION,random(-12,18))
QSPF ABCDEE 1
Stop
}
}
ACTOR ViperWaveProjectileB : ViperWaveProjectile
{
WeaveIndexXY 32
}
ACTOR ViperWaveProjectileC : BEPlayerProjectile
{
Radius 4
Height 4
Damage (4*random(4,6))
DamageType "ViperWave"
Speed 35
Scale 0.35
PROJECTILE
+BRIGHT
+THRUSPECIES
Species "Player"
Gravity 0.8
WeaveIndexXY 0
WeaveIndexZ 48
States
{
Spawn:
TSXP B 1
TSXP B 0 A_SpawnItemEx("ViperWaveTail",0,0,0,0,0)
TSXP B 1
TSXP B 0 A_SpawnItemEx("ViperWaveTail",0,0,0,0,0)
TSXP B 1
TSXP B 0 A_SpawnItemEx("ViperWaveTail",0,0,0,0,0)
TSXP B 1
TSXP B 0 A_SpawnItemEx("ViperWaveTail",0,0,0,0,0)
TSXP B 1
TSXP B 0 A_SpawnItemEx("ViperWaveTail",0,0,0,0,0)
TSXP B 1
TSXP B 0 A_SpawnItemEx("ViperWaveTail",0,0,0,0,0)
SpawnFall:
TSXP B 0 A_SpawnItemEx("ViperWaveTail",0,0,0,0,0)
TSXP B 1 A_Weave(5,5,3.5,3)
Loop
Death:
QSPF A 0 A_PlaySound("weapons/viperwaveimpact",CHAN_AUTO,1,0)
QSPF A 0 A_SetScale(1.0)
QSPF A 0 A_JumpIf(GetCvar("bulleteye_fxreduction") == 1,9)
QSPF AAAAAAAA 0 A_CustomMissile("ViperWaveImpactSparkFX",0,0,random(0,360),CMF_AIMDIRECTION,random(-12,18))
QSPF ABCDEE 1
Stop
}
}
ACTOR ViperWaveProjectileD : ViperWaveProjectileC
{
WeaveIndexXY 0
WeaveIndexZ 48
}
ACTOR ViperWaveProjectileVenom : ViperWaveProjectile
{
+ADDITIVEPOISONDAMAGE
+ADDITIVEPOISONDURATION
PoisonDamage 25,6,0
PoisonDamageType "ViperWaveVenom"
}
ACTOR ViperWaveProjectileVenomB : ViperWaveProjectileB
{
+ADDITIVEPOISONDAMAGE
+ADDITIVEPOISONDURATION
PoisonDamage 25,6,0
PoisonDamageType "ViperWaveVenom"
}
ACTOR ViperWaveProjectileVenomC : ViperWaveProjectileC
{
+ADDITIVEPOISONDAMAGE
+ADDITIVEPOISONDURATION
PoisonDamage 25,6,0
PoisonDamageType "ViperWaveVenom"
}
ACTOR ViperWaveProjectileVenomD : ViperWaveProjectileD
{
+ADDITIVEPOISONDAMAGE
+ADDITIVEPOISONDURATION
PoisonDamage 25,6,0
PoisonDamageType "ViperWaveVenom"
WeaveIndexXY 0
WeaveIndexZ 48
}
ACTOR ViperWaveTail
{
Radius 2
Height 2
Scale 0.5
RenderStyle Add
Alpha 0.4
+NOINTERACTION
+THRUACTORS
+BRIGHT
States
{
Spawn:
TSXP B 1 A_SetScale(0.3)
TSXP B 0 A_SpawnItemEx("ViperWaveTailB",0,0,0,0,0)
TSXP B 1 A_SetScale(0.25)
TSXP B 0 A_SpawnItemEx("ViperWaveTailB",0,0,0,0,0)
TSXP B 1 A_SetScale(0.2)
TSXP B 0 A_SpawnItemEx("ViperWaveTailB",0,0,0,0,0)
TSXP B 1 A_SetScale(0.15)
TSXP B 0 A_SpawnItemEx("ViperWaveTailB",0,0,0,0,0)
Stop
Death:
TSXP B 1 A_FadeOut (0.1)
Loop
}
}
ACTOR ViperWaveTailB
{
Radius 2
Height 2
Scale 0.5
RenderStyle Add
Alpha 0.4
+NOINTERACTION
+THRUACTORS
+BRIGHT
States
{
Spawn:
TSXP B 3 A_SetScale(0.3)
TSXP B 3 A_SetScale(0.25)
TSXP B 3 A_SetScale(0.2)
TSXP B 3 A_SetScale(0.15)
Stop
Death:
TSXP B 1 A_FadeOut (0.1)
Loop
}
}
ACTOR ViperWaveImpactSparkFX
{
Projectile
Radius 2
Height 2
Speed 6
RenderStyle Add
Alpha 0.8
Scale 0.1
+DONTSPLASH
+THRUACTORS
-NOGRAVITY
+DROPOFF
+BRIGHT
States
{
Spawn:
TSXP B 1
Loop
Death:
TSXP B 1 A_FadeOut(0.1)
Loop
}
}
ACTOR PoisonNovaSpawner
{
Radius 2
Height 2
Speed 0
-SHOOTABLE
+BRIGHT
+MOVEWITHSECTOR
+NOCLIP
+DONTBLAST
+THRUACTORS
var int user_poisonnovaring;
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_SetUserVar("user_poisonnovaring",0)
NovaFX:
TNT1 A 0 A_CustomMissile("PoisonNovaFX",20,0,user_poisonnovaring,CMF_AIMDIRECTION)
TNT1 A 0 A_SetUserVar("user_poisonnovaring",user_poisonnovaring+1)
TNT1 A 0 A_JumpIf(user_poisonnovaring==360,"EndNovaFX")
Loop
EndNovaFX:
TNT1 A 0
Stop
}
}
ACTOR ViperWaveNovaDMG
{
Speed 2
Radius 6
Height 7
Damage (0)
Species "Player"
PROJECTILE
+THRUACTORS
+THRUSPECIES
+DONTBLAST
+BRIGHT
Radius 10
Height 10
States
{
Spawn:
TNT1 A 1
TNT1 A 0 A_Explode(100,260,0,1,180,0,0,"BEDummyPuff","ViperWave")
Stop
Death:
TNT1 A 0
Stop
}
}
ACTOR PoisonNovaFX //Aesthetic. Deals no damage.
{
Speed 20
Radius 8
Height 5
RenderStyle Stencil
StencilColor "Green"
Alpha 1.0
Scale 0.2
PROJECTILE
+BRIGHT
+THRUACTORS
+NOCLIP
+DONTBLAST
+NOINTERACTION
States
{
Spawn:
TQFX A 0
TQFX AA 1
TQFX AA 3 A_SetScale(0.5,0.1)
TQFX A 1 A_SetScale(0.6,0.05)
TQFX A 1
Death:
TQFX A 1
TQFX A 0 A_FadeOut(0.1)
Loop
}
}
\ No newline at end of file
......@@ -19,7 +19,6 @@
#include "Actors/Weapons/Tech/RapidVulcan.txt"
#include "Actors/Weapons/Area/StormMine.txt"
#include "Actors/Weapons/Area/VolleyShot.txt"
#include "Actors/Weapons/Rapid/ViperWave.txt"
#include "Actors/Weapons/Rapid/Repeater.txt"
#include "Actors/Weapons/Power/TripleWyvern.txt"
#include "Actors/Weapons/Tech/WingedReaver.txt"
......
......@@ -107,12 +107,6 @@ class BEEnemyBase : Actor
A_SpawnItemEx("LockedChestKey", random(-8, 8), 0, random(0, 16), random(-2, 2), 0, random(5, 12), random(0, 359), SXF_NOCHECKPOSITION);
}
if (mod == 'ViperWaveVenom')
{
A_SpawnItemEx("PoisonNovaSpawner", 0, 0, 0);
A_SpawnItemEx("ViperWaveNovaDMG", 0, 0, 10);
}
//----------------------
// EQUIPMENT HANDLING
//----------------------
......
class ViperWaveWeapon : BEWeaponBase
{
override void OnReload()
{
ThinkerIterator Iterator = ThinkerIterator.Create("BEEnemyBase", STAT_DEFAULT);
BEEnemyBase Enemy;
while (Enemy = BEEnemyBase(Iterator.Next()))
{
if (Enemy.PoisonDamageTypeReceived == 'ViperWaveVenom')
{
for (int i = 0; i < 360; i += 1)
{
Enemy.A_SpawnItemEx("PoisonNovaFX", 0, 0, Enemy.Height / 3, 20, 0, 0, i);
}
int ExpDamage = int(100 * (1.0 - (Ammo1.Amount / double(Ammo1.MaxAmount))));
// [Ace] Using XF_NOTMISSILE breaks behaviour. I have no idea why or how.
Enemy.A_Explode(ExpDamage, 260, XF_HURTSOURCE, true, 180, 0, 0, null, 'ViperWave');
}
}
}
Default
{
Inventory.Icon "WEAP13";
Weapon.BobStyle "Inverse";
Weapon.BobSpeed 2.3;
Weapon.BobRangeX 0.5;
Weapon.BobRangeY 0.3 ;
Weapon.AmmoType1 "AmmoViperWave";
Weapon.AmmoType2 "AmmoRapidEnergy";
Weapon.UpSound "beplayer/weapswitchviperwave";
BEWeaponBase.ReloadProperties "weapons/viperwavereloadstage1", "weapons/viperwavereloadstage2", "weapons/viperwavereloadstage3";
BEWeaponBase.Sprite "WEAPH13";
BEWeaponBase.Type WType_Rapid;
BEWeaponBase.Special WSpecial_Accuracy;
BEWeaponBase.Element WElement_Poison;
BEWeaponBase.Attributes 4, 4, 2, 5;
BEWeaponBase.Durability 1200;
BEWeaponBase.EffectTexts "- Shots inflict poison status on enemies.", "- Additional spiraling shots are fired.", "- Trigger poison novas on enemies affected by the Viper Wave's poison when reloading. Damage is proportionate to how empty the mag is.";
BEWeaponBase.FlavorText "Good idea at first, making use of an unstable quantum matter source to create weapons that destroy anything on hitting it. Then you learn that the instability extends so far as its flight path. Thankfully they seem to melt things good--the power is unreal.";
+WEAPON.ALT_AMMO_OPTIONAL
+WEAPON.NO_AUTO_SWITCH
+WEAPON.CHEATNOTWEAPON
Tag "Viper Wave";
}
States
{
Spawn:
PVPW A 0;
Goto Super::Spawn;
Ready:
_WVW A 1 A_WeaponReady(WRF_ALLOWRELOAD | WRF_ALLOWZOOM | WRF_ALLOWUSER1 | WRF_ALLOWUSER2 | WRF_ALLOWUSER3 | WRF_ALLOWUSER4);
Loop;
Deselect:
TNT1 AA 0 A_Lower;
_WVW A 1 A_Lower;
Loop;
Select:
TNT1 AA 0 A_Raise;
_WVW A 1 A_Raise;
Loop;
Fire:
_WVW A 0 A_CheckWeaponFire;
_WVW B 1 Bright A_WeaponReady(WRF_NOPRIMARY | WRF_ALLOWRELOAD | WRF_ALLOWZOOM | WRF_ALLOWUSER1 | WRF_ALLOWUSER2 | WRF_ALLOWUSER3 | WRF_ALLOWUSER4 | WRF_NOBOB);
_WVW C 1 Bright
{
A_AlertMonsters();
A_StartSound("weapons/viperwaveshot");
A_FireBEProjectile("ViperWaveProjectile"..(invoker.WeaponLevel >= 3 ? "Venom" : ""), frandom(-2, 2), 0, -8, -2, 0, frandom(-2, 2));
if (invoker.WeaponLevel >= 2)
{
A_FireBEProjectile("ViperWaveProjectile"..(invoker.WeaponLevel >= 3 ? "Venom" : "").."C", 1, 0, -8, -2, 0, 0);
}
A_TakeAmmo();
A_TakeDurability(1);
}
_WVW A 0 A_CheckWeaponFire();
_WVW A 0 A_GunFlash;
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY | WRF_ALLOWRELOAD | WRF_ALLOWZOOM | WRF_ALLOWUSER1 | WRF_ALLOWUSER4 | WRF_NOBOB);
_WVW FGF 1 A_WeaponReady(WRF_NOPRIMARY | WRF_ALLOWRELOAD | WRF_ALLOWZOOM | WRF_ALLOWUSER1 | WRF_ALLOWUSER4 | WRF_NOBOB);
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY | WRF_ALLOWRELOAD | WRF_ALLOWZOOM | WRF_ALLOWUSER1 | WRF_ALLOWUSER4 | WRF_NOBOB);
_WVW A 2 A_WeaponReady(WRF_NOPRIMARY | WRF_ALLOWRELOAD | WRF_ALLOWZOOM | WRF_ALLOWUSER1 | WRF_ALLOWUSER4 | WRF_NOBOB);
_WVW D 1 Bright A_WeaponReady(WRF_NOPRIMARY | WRF_ALLOWRELOAD | WRF_ALLOWZOOM | WRF_ALLOWUSER1 | WRF_ALLOWUSER2 | WRF_ALLOWUSER3 | WRF_ALLOWUSER4 | WRF_NOBOB);
_WVW E 1 Bright
{
A_AlertMonsters();
A_StartSound("weapons/viperwaveshot");
A_FireBEProjectile("ViperWaveProjectile"..(invoker.WeaponLevel >= 3 ? "Venom" : "").."B", frandom(-2, 2), 0, 8, -2, 0, frandom(-2, 2));
if (invoker.WeaponLevel >= 2)
{
A_FireBEProjectile("ViperWaveProjectile"..(invoker.WeaponLevel >= 3 ? "Venom" : "").."D", 1, 0, 8, -2, 0, 0);
}
A_TakeAmmo();
A_TakeDurability(1);
}
_WVW A 0 A_CheckWeaponFire();
_WVW A 0 A_GunFlash;
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY | WRF_ALLOWRELOAD | WRF_ALLOWZOOM | WRF_ALLOWUSER1 | WRF_ALLOWUSER2 | WRF_ALLOWUSER3 | WRF_ALLOWUSER4 | WRF_NOBOB);
_WVW HIH 1 A_WeaponReady(WRF_NOPRIMARY | WRF_ALLOWRELOAD | WRF_ALLOWZOOM | WRF_ALLOWUSER1 | WRF_ALLOWUSER2 | WRF_ALLOWUSER3 | WRF_ALLOWUSER4 | WRF_NOBOB);
_WVW A 1 A_WeaponReady(WRF_NOPRIMARY | WRF_ALLOWRELOAD | WRF_ALLOWZOOM | WRF_ALLOWUSER1 | WRF_ALLOWUSER2 | WRF_ALLOWUSER3 | WRF_ALLOWUSER4 | WRF_NOBOB);
_WVW A 0 A_WeaponReady(WRF_NOPRIMARY | WRF_ALLOWRELOAD | WRF_ALLOWZOOM | WRF_ALLOWUSER1 | WRF_ALLOWUSER2 | WRF_ALLOWUSER3 | WRF_ALLOWUSER4);
_WVW A 1 A_ReFire;
Goto Ready;
Flash:
TNT1 A 1 Bright A_Light1;
TNT1 A 1 Bright A_Light0;
Stop;
}
}
class ViperWaveProjectile : BEPlayerProjectile
{
Default
{
Radius 4;
Height 4;
DamageFunction 5 * random(4, 5);
DamageType "ViperWave";
Speed 35;
Scale 0.35;
+BRIGHT
+THRUSPECIES
Species "Player";
}
States
{
Spawn:
TSXP BBBBBB 1 A_SpawnItemEx("ViperWaveTail");
TSXP B 0 A_Jump(255, "SpawnFall");
Stop;
SpawnFall:
TSXP B 1
{
A_SpawnItemEx("ViperWaveTail");
A_Weave(5, 0, 3.5, 0);
}
Loop;
Death:
QSPF A 0 A_StartSound("weapons/viperwaveimpact");
QSPF A 0 A_SetScale(1.0);
QSPF A 0 A_JumpIf(GetCvar("bulleteye_fxreduction") == 1, 9);
QSPF AAAAAAAA 0 A_SpawnItemEx("ViperWaveImpactSparkFX", 0, 0, 0, 6, 0, frandom(-1.0, 2.0), random(0, 360));
QSPF ABCDEE 1;
Stop;
}
}
class ViperWaveProjectileB : ViperWaveProjectile
{
Default
{
WeaveIndexXY 32;
}
}
class ViperWaveProjectileC : ViperWaveProjectile
{
Default
{
DamageFunction 4 * random(4, 6);
WeaveIndexXY 0;
WeaveIndexZ 48;
}
States
{
SpawnFall:
TSXP B 1
{
A_SpawnItemEx("ViperWaveTail");
A_Weave(5, 5, 3.5, 3);
}
Loop;
}
}