actor MegaWaterS : VCBaseClass
{
Player.ScoreIcon "MEGWMUGS"
player.startitem "BaseFlagPack", 1
player.displayname "MegaWaterS"
player.soundclass "MegaWaterSc"
player.startitem "MegaHarpoonBoss"
player.startitem "UltimateAttackItem2"
player.startitem "UltSoundWatcherSpawn2"
player.startitem "Base56Ammo", 56
player.startitem "IsFromWW"
player.viewheight 51
player.forwardmove 0.8,0.8
player.sidemove 0.78,0.78
player.jumpz 10
States
{
Spawn:
MWSZ B 0 
MWSZ B 1 A_JumpIf(z-floorz>0, "Jumping")
MWSZ A 1 A_JumpIf(z-floorz>0, "Jumping")
Goto Spawn+2
See:
MWSZ BBBBBCCCCCDDDDDEEEEE 1 A_JumpIf(z-floorz>0, "Jumping")
Goto Spawn+1
Jumping:
MWSZ I 1 A_JumpIf(z-floorz<=0, "Spawn")
wait
Animation1:
Missile:
MWSZ F 1 A_JumpIf(z-floorz>0, "JumpingMissile")
MWSH F 0 A_JumpIfInventory("AltFlag",1,"Missile")
MWSZ FFFF 1 A_JumpIf(z-floorz>0, "JumpingMissile")
Missile2:
MWSZ GGGG 1 A_JumpIf(z-floorz>0, "JumpingMissile2")
Goto Spawn+2
JumpingMissile:
MWSZ J 1 A_JumpIf(z-floorz<=0, "Missile")
MWSH J 0 A_JumpIfInventory("AltFlag",1,"JumpingMissile")
MWSZ JJJJ 1 A_JumpIf(z-floorz<=0, "Missile")
JumpingMissile2:
MWSZ JJJJ 1 A_JumpIf(z-floorz<=0, "Missile2")
Goto Jumping
ClassPain:
MWSZ HHHHHHHHHH 2 A_SpawnItem("PainFX",0,3)
Goto Spawn+1
WeaponGetM:
ClassDeath:
MWSZ H 0
MWSZ H 20 ACS_ExecuteAlways(999,0,0)
BLT1 H 0 A_PlayerScream
MWSZ H 0 A_SpawnItemEx("FakeDeathFXMMWT", 0, 0, 32)
NOFX A 1 A_CheckPlayerDone
wait
}
}

const int HARPOON_HORZ = 9;
const int HARPOON_SPAWN_HEIGHT = 8;

Actor MegaHarpoonBoss : VCBaseWeapon
{
weapon.ammotype "Base56Ammo"
weapon.ammouse 2
Obituary "$OB_MEGAWATERSAGOJO1"
States
{
Ready:
TNT1 A 0
MWSH A 0 A_GiveInventory("Base56Ammo",2)
MWSH A 1 A_WeaponReady MWSH A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") MWSH A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
MWSH A 1 A_WeaponReady MWSH A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") MWSH A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
MWSH A 1 A_WeaponReady MWSH A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") MWSH A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
MWSH A 1 A_WeaponReady MWSH A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") MWSH A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
Goto Ready
Deselect:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
MWSH A 1 A_Lower
Loop
Select:
TNT1 A 0 ACS_ExecuteAlways(991,0,941)
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
MWSH A 1 A_Raise
Loop
User1:
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",1)
TNT1 A 0 A_PlaySoundEx("misc/splash","Weapon")
TNT1 A 0 A_PlaySoundEx("weapon/bubbleswim","Body")
MWSH A 0 A_SpawnItemEx("MWSBlast",30,0,36)
MWSH AAAAAAAAAAAAAAAA 0 A_FireCustomMissile("MWSBubble",frandom(-5,5),0,HARPOON_HORZ,HARPOON_SPAWN_HEIGHT,0,frandom(-5,5))
MWSH BCCCCCCCCCCCBA 2
Goto Ready
Fire:
TNT1 A 0 A_PlaySoundEx("weapon/pshot","Weapon")
MWSH A 0 A_FireCustomMissile("MegaHarpoon",0,0,HARPOON_HORZ,HARPOON_SPAWN_HEIGHT)
MWSH BCBAAAAAAAAA 2
Goto Ready
Altfire:
RATU A 0 A_JumpIfInventory("NoAltfire",1,"Ready")
TNT1 A 0 A_GiveInventory("AltFlag",1)
MWSH BC 1
MegaHose:
MWSH A 0 A_JumpIfInventory("Base56Ammo",2,1)
Goto MegaHoseNoAmmoEnd
MWSH C 0 A_PlaySoundEx("weapon/WaterHose","Weapon")
MWSH A 0 A_TakeInventory("Base56Ammo",1)
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag1",1,2)
MWSH A 0 A_TakeInventory("Base56Ammo",1)
MWSH CCC 1 A_GiveInventory("MWSAltHandler")
MWSH C 0 A_ReFire("MegaHose")
MegaHoseEnd:
TNT1 A 0 A_TakeInventory("AltFlag",99)
MWSH CBA 2 A_ClearRefire
Goto Ready
MegaHoseNoAmmoEnd:
MWSH C 1 A_ClearRefire
TNT1 A 0 A_TakeInventory("AltFlag",99)
MWSH CBA 2
Goto Ready
UltimateAttack:
MWSH A 1
TNT1 A 0 ACS_NamedExecuteAlways("VC_UltimateText",0,119)
TNT1 A 0 A_PlaySoundEx("classes/ultimateactivation","Auto")
TNT1 A 0 A_GiveInventory("PowerUltBuildCooldown",1)
TNT1 A 0 A_PlaySoundEx("weapon/WaterShieldForm","Weapon")
MWSH DDEEFFGG 1 A_TakeInventory("MediumShortUltimateAmmo",26)
MWSH GGFFEEDD 1 A_GiveInventory("WaterShieldBarFill",14)
TNT1 A 0 A_GiveInventory("BaseCustomFlag1")
TNT1 A 0 A_GiveInventory("NoPushFlag",1)
TNT1 A 0 A_GunFlash
TNT1 A 0 A_GiveInventory("WaterShieldVision")
//TNT1 A 0 A_TakeInventory("WaterShieldBarFill",100)
TNT1 A 0 A_GiveInventory("WaterShieldBarFill",100)
TNT1 A 0 A_SpawnItemEx("WaterShieldWatcher")
ACIF A 0 A_SpawnItemEx("WaterShieldVisual")
//TNT1 A 0 A_TakeInventory("BasicArmorRecord",999)
//TNT1 A 0 A_GiveInventory("BasicArmorRecord",CallACS("VC_ArmorCheck"))
TNT1 A 0 A_TakeInventory("UltAttackFlag",1)
Goto Ready
Flash:
TNT1 A 1 A_ChangeFlag("PICKUP",1)
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag1",1,"Flash")
TNT1 A 0 A_GiveInventory("WaterShieldCancel",1)
TNT1 A 0 A_ChangeFlag("PICKUP",1)
stop
}
}

actor MegaHarpoon
{
Translation "198:198=116:116"
PROJECTILE
damagetype "MegaWaterS"
Obituary "$OB_MEGAWATERSAGOJO1"
var int user_HarpoonDamage;
Damage (12 + user_HarpoonDamage)//(4 + user_HarpoonDamage)
radius 6
height 9
Speed 100
scale 2.5
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode", 1)
TNT1 A 0 A_JumpIf(momz>48, "Up")
TNT1 A 0 A_JumpIf(momz>36, "VeryHigh")
TNT1 A 0 A_JumpIf(momz>24, "High")
TNT1 A 0 A_JumpIf(momz>12, "SlightlyHigh")
TNT1 A 0 A_JumpIf(momz<-48, "Down")
TNT1 A 0 A_JumpIf(momz<-36, "VeryLow")
TNT1 A 0 A_JumpIf(momz<-24, "Low")
TNT1 A 0 A_JumpIf(momz<-12, "SlightlyLow")
goto Forward
Up:
MWS1 A 3
goto Next
VeryHigh:
MWS1 B 3
goto Next
High:
MWS1 C 3
goto Next
SlightlyHigh:
MWS1 D 3
goto Next
Forward:
MWS1 E 3
goto Next
SlightlyLow:
MWS1 F 3
goto Next
Low:
MWS1 G 3
goto Next
VeryLow:
MWS1 H 3
goto Next
Down:
MWS1 I 3
goto Next
Next:
MWS1 "#" 0 A_SetUserVar("user_HarpoonDamage", 1)
MWS1 "#" 0 A_JumpIf(user_HarpoonDamage > 33, 3)
MWS1 "#" 0 A_SetUserVar("user_HarpoonDamage", user_HarpoonDamage + 4)
MWS1 "#" 1
Goto Next+1
MWS1 "#####" 0 A_SpawnItemEx("MWSHarpoonFX",0,0,0,random(-12,-6),0,random(-12,12),random(-45,45))
MWS1 "#" 1 A_SpawnItemEx("MWSHarpoonFX",0,0,0,random(-12,-6),0,random(-12,12),random(-45,45))
Goto Next+1
XDeath:
Death:
TNT1 A 0
stop
}
}

actor MWSHarpoonFX : BasicClientSide
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode", 1)
MWSZ M 0 A_SetScale(random(0.5,1.5))
MWSZ M 0 A_Jump(256,"FX1","FX2","FX3")
goto FX2
FX1:
MWSZ M Random(3,5)
goto FXFade
FX2:
MWSZ N Random(3,5)
goto FXFade
FX3:
MWSZ O Random(3,5)
goto FXFade
FXFade:
MWSZ "#" 1 A_FadeOut(0.19)
wait
}
}

actor MegaHoseSpray
{
Translation "199:199=206:206", "202:202=68:68"
PROJECTILE
damagetype "MegaWaterSAlt"
Obituary "$OB_MEGAWATERSAGOJO2"
Damage (3)
radius 8
height 8
Speed 50
scale 1.5
gravity 1.2
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
MWSS BCDABCDAB 1
MWSS B 0 A_SetDamageType("MegaWaterSAlt3")
MWSS B 0 A_ChangeFlag("NOGRAVITY",0)
loopit:
MWSS BCDA 1
loop
End:
TNT1 A 0 A_Stop
MWSX RST 2
stop
XDeath:
TNT1 A 0 A_PlaySoundEx("weapon/WaterHose","Weapon")
TNT1 AAAAAA 0 A_SpawnItemEx("MegaHoseSplash2",0,0,0,0,random(-18,18),random(-18,18),random(0,359))
TNT1 A 2 A_SpawnItemEx("MegaHoseSplash",0,0,0,momx,momy,momz)
stop
Death:
TNT1 A 0 A_CheckFloor("FloorCeilingSplash")
TNT1 A 0 A_CheckCeiling("FloorCeilingSplash")
Goto Splash
Splash:
TNT1 A 0 A_PlaySoundEx("weapon/WaterHose","Weapon")
TNT1 A 2 A_SpawnItemEx("MegaHoseSplash",0,random(-10,10),random(-10,10),0,0,0)
stop
FloorCeilingSplash:
TNT1 A 0 A_PlaySoundEx("weapon/WaterHose","Weapon")
TNT1 A 2 A_SpawnItemEx("MegaHoseSplash2",random(-10,10),random(-10,10),0,0,0,0)
stop
}
}

actor MegaHoseSpray2 : MegaHoseSpray
{
Damage (6)
damagetype "MegaWaterSAlt2"
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
MWSS BCDA 1 A_SpawnItemEx("MWSBubble",0,random(-12,12),random(-8,8),0,0,0,0,1,128)
goto Spawn+2
Death:
TNT1 A 0 A_CheckFloor("FloorCeilingSplash")
TNT1 A 0 A_CheckCeiling("FloorCeilingSplash")
Goto Splash
XDeath:
TNT1 A 0 A_PlaySoundEx("weapon/WaterHose","Weapon")
TNT1 AAAAAAAA 0 A_SpawnItemEx("MWSBubble",0,random(-12,12),random(-8,8),random(4,12),random(-16,16),random(-6,6),0,1)
TNT1 AAAAAA 0 A_SpawnItemEx("MegaHoseSplash2",0,0,0,0,random(-18,18),random(-18,18),random(0,359))
TNT1 A 2 A_SpawnItemEx("MegaHoseSplash",0,0,0,momx,momy,momz)
stop
Splash:
TNT1 A 0 A_PlaySoundEx("weapon/WaterHose","Weapon")
TNT1 AAAAAAAA 0 A_SpawnItemEx("MWSBubble",0,random(-12,12),random(-8,8),random(4,12),random(-16,16),random(-6,6),0,1)
TNT1 A 2 A_SpawnItemEx("MegaHoseSplash",0,random(-10,10),random(-10,10),0,0,0)
stop
FloorCeilingSplash:
TNT1 A 0 A_PlaySoundEx("weapon/WaterHose","Weapon")
TNT1 AAAAAAAA 0 A_SpawnItemEx("MWSBubble",0,random(-12,12),random(-8,8),random(1,3),random(-8,8),random(-6,6),0,1)
TNT1 A 2 A_SpawnItemEx("MegaHoseSplash2",random(-10,10),random(-10,10),0,0,0,0)
stop
}
}

actor MegaHoseProtect : PowerProtection
{
Powerup.Duration 4
DamageFactor "MegaWaterSAlt", 0.0
DamageFactor "MegaWaterSAlt2", 0.0
DamageFactor "MegaWaterSAlt3", 0.0
}

actor MegaHoseFlinger
{
//+SERVERSIDEONLY
PROJECTILE
+NOINTERACTION
+NOCLIP
+DONTBLAST
damage 0
radius 1
height 1
speed 0
var int user_force;
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("CannotBeMoved",1,"Death")
TNT1 A 0 A_SetUserVar("user_force",-25)
Spawn2:
TNT1 A 0 A_TransferPointer(AAPTR_TARGET,AAPTR_DEFAULT,AAPTR_TARGET,AAPTR_TRACER) //target's target to self's tracer
TNT1 A 0 A_FaceTracer
TNT1 A 0 ThrustThing(angle*256/360,user_force,1,ACS_ExecuteWithResult(257,0))
stop
Death:
TNT1 A 0
stop
}
}

actor MegaHoseSplash
{
Translation "199:199=206:206", "202:202=68:68"
+NOINTERACTION
Height 10
Radius 10
Speed 0
damage 0
scale 2.5
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode", 1)
MWSX RST 2
stop
}
}

actor MegaHoseSplash2 : MegaHoseSplash
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode", 1)
MWSX MNO 2
stop
}
}

actor WaterShieldVisual
{
Translation "199:199=204:204", "202:202=202:202"
Height 0
Radius 0
scale 2.5
+NOCLIP
-SOLID
+NOGRAVITY
+NOINTERACTION
+CLIENTSIDEONLY
+MISSILE
Renderstyle Translucent
Alpha 0.5
States
{
Spawn:
MWSS EE 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 0 A_JumpIfInTargetInventory("WaterShieldCancel",1,"Death")
TNT1 A 0 A_JumpIf(CallACS("Core_TargetExists",0) == 0, "Death")
MWSS FF 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 0 A_JumpIfInTargetInventory("WaterShieldCancel",1,"Death")
TNT1 A 0 A_JumpIf(CallACS("Core_TargetExists",0) == 0, "Death")
MWSS GG 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 0 A_JumpIfInTargetInventory("WaterShieldCancel",1,"Death")
TNT1 A 0 A_JumpIf(CallACS("Core_TargetExists",0) == 0, "Death")
MWSS HH 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 0 A_JumpIfInTargetInventory("WaterShieldCancel",1,"Death")
TNT1 A 0 A_JumpIf(CallACS("Core_TargetExists",0) == 0, "Death")
TNT1 A 0 A_JumpIfInTargetInventory("MegaHarpoonBoss",1,"Spawn")
MWSS EE 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 0 A_JumpIfInTargetInventory("WaterShieldCancel",1,"Death")
TNT1 A 0 A_JumpIf(CallACS("Core_TargetExists",0) == 0, "Death")
MWSS FF 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 0 A_JumpIfInTargetInventory("WaterShieldCancel",1,"Death")
TNT1 A 0 A_JumpIf(CallACS("Core_TargetExists",0) == 0, "Death")
MWSS GG 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 0 A_JumpIfInTargetInventory("WaterShieldCancel",1,"Death")
TNT1 A 0 A_JumpIf(CallACS("Core_TargetExists",0) == 0, "Death")
MWSS HH 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 0 A_JumpIfInTargetInventory("WaterShieldCancel",1,"Death")
TNT1 A 0 A_JumpIf(CallACS("Core_TargetExists",0) == 0, "Death")
TNT1 A 0 A_JumpIfInTargetInventory("MegaHarpoonBoss",1,"Spawn")
goto Death
Death:
TNT1 A 0
stop
}
}

actor WaterShieldWatcher
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
-DONTBLAST
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death")
TNT1 A 0 //A_GiveToTarget("MWSArmorCheck")
TNT1 A 0 A_JumpIfInTargetInventory("WaterShieldBarFill",1,"Spawn")
TNT1 A 0
Death:
TNT1 A 0 A_TakeFromTarget("PowerUltBuildCooldown",1)
TNT1 A 0 A_TakeFromTarget("WaterShieldVision",1)
TNT1 A 0 A_TakeFromTarget("WaterShieldBarFill",100)
TNT1 A 0 A_GiveToTarget("WaterShieldDispelGiver")
TNT1 A 0 A_TakeFromTarget("BaseCustomFlag1")
TNT1 A 0 A_TakeFromTarget("NoPushFlag",1)
stop
}
}

actor WaterShieldDispelGiver : CustomInventory
{
states
{
Pickup:
TNT1 A 0 A_PlaySoundEx("weapon/WaterShieldPop","Body")
TNT1 A 0 A_PlaySoundEx("weapon/WaterShieldBreak","Auto")
TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("WaterShieldSplasher",0,0,1,random(4,8),0,random(5,10),random(0,360))
stop
}
}

actor WaterShieldSplasher
{
-NOGRAVITY
speed 4
Radius 4
Height 8
scale 2.5
gravity 1.8
PROJECTILE
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
MWSX MNO 2 ThrustThingZ(0, -4, 0, 1)
goto Spawn+2
Death:
TNT1 A 0
Stop
XDeath:
TNT1 A 0
Stop
}
}

actor WaterShieldCancel : PowerUp
{
Powerup.Duration 6
}

actor WaterShieldHealth : inventory//BasicArmorPickup
{
  //armor.saveamount 100
  //armor.savepercent 100
  inventory.amount 1
  inventory.maxamount 125//100
}

actor WaterShieldVision : PowerUp
{
	powerup.color "Blue", 0.2
	powerup.duration -999
}

actor AltFlag : Inventory
{
inventory.amount 1
inventory.maxamount 1
}

actor SprayFlag : Inventory
{
inventory.amount 1
inventory.maxamount 3
}

actor WaterShieldBarFill : Inventory
{
inventory.amount 1
inventory.maxamount 100
}

actor MWSAltHandler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag1",1,"Pickup2")
TNT1 A 0 A_FireCustomMissile("MegaHoseSpray",0,1,9,8)
stop

Pickup2:
TNT1 A 0 A_FireCustomMissile("MegaHoseSpray2",0,1,9,8)
stop
}
}

actor MWSArmorCheck : AcidArmorCheck
{
States
{
Pickup:
TNT1 A 0 A_PlaySoundEx("weapon/WaterShieldHit","Auto")
TNT1 AAAA 0 A_SpawnItemEx("WaterShieldSplasher",0,0,1,random(4,8),0,random(5,10),random(0,360))
stop
}
}

actor MWSBubble : DiveTorpBubble
{
speed 30
+FLOATBOB
States
{
Spawn:
TNT1 A 1
DIVT BBC 2
stop
}
}

actor MWSBlast : BasicExplosion
{
damagetype "MWSBlast"
Obituary "$OB_MEGAWATERSAGOJO3"
States
{
Spawn:
TNT1 A 0
TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("MWSHarpoonFX",0,0,1,random(20,40),0,random(-5,5),random(-45,45))
TNT1 AAAAAAAA 0 A_SpawnItemEx("WaterShieldSplasher",0,0,1,random(4,8),0,random(2,4),random(-30,30))
TNT1 A 1 A_Explode(13,78,0,0,78)//48,0,0,48)
stop
}
}

actor DelayHealth_CI : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_SpawnItemEx("DelayedHealthReal")
goto Death
}
}

actor DelayedHealthReal
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
Renderstyle none
States
{
Spawn:
TNT1 A 0
TNT1 A 1 
TNT1 A 1 A_GiveToTarget("Health",1)
TNT1 A 0
stop
}
}