actor Neptune : VCBaseClass
{
Player.ScoreIcon "NEPTMUGS"
player.startitem "BaseFlagPack", 1
player.displayname "Neptune"
player.soundclass "Neptunec"
player.startitem "SaltWaterBoss"
player.startitem "UltimateAttackItem2"
player.startitem "UltSoundWatcherSpawn2"
player.startitem "Base56Ammo", 56
player.startitem "IsFromGB5"
player.viewheight 48
player.jumpz 10
States
{
Animation0:
Spawn:
NEPT B 0 
NEPT B 1 A_JumpIf(z-floorz>0,"Jumping")
NEPT A 0
NEPT A 1 A_JumpIf(z-floorz>0,"Jumping")
Goto Spawn+2
See:
NEPT BBBBBCCCCCDDDDDEEEEE 1 A_JumpIf(z-floorz>0, "Jumping")
Goto Spawn+1
Jumping:
NEPT I 1 A_JumpIf(z-floorz<=0,"Spawn")
wait
Animation1:
Missile:
NEPT LLLLL 1 A_JumpIf(z-floorz>0,"JumpingMissile")
Goto Spawn+2
Animation2:
Missile2:
NEPT OOOOO 1 A_JumpIf(z-floorz>0,"JumpingMissile2")
Goto Spawn+2
Animation3:
Missile3:
NEPT FFFFF 1 A_JumpIf(z-floorz>0,"JumpingMissile3")
Goto Spawn+2
JumpingMissile:
NEPT MMMMM 1 A_JumpIf(z-floorz<=0,"Missile")
Goto Jumping
JumpingMissile2:
NEPT PPPPP 1 A_JumpIf(z-floorz<=0,"Missile2")
Goto Jumping
JumpingMissile3:
NEPT JJJJJ 1 A_JumpIf(z-floorz<=0,"Missile3")
Goto Jumping
Animation4:
SaltWaterJump:
NEPT MMM 1
Goto Jumping
ClassPain:
NEPT HHHHHHHHHH 2 A_SpawnItem("PainFX",0,3)
Goto Spawn+1
ClassDeath:
NEPT H 0
NEPT H 20 ACS_ExecuteAlways(999,0,0)
NEPT H 0 A_PlayerScream
NEPT H 0 A_SpawnItemEx("FakeDeathFXMMV", 0, 0, 32, 0, 0, 0, 0, 1)
NOFX A 1 A_CheckPlayerDone
wait
WeaponGetM:
NEPT H 0 A_JumpIfInTargetInventory("SaltWaterWepM",1,2)
NEPT H 0 A_GiveToTarget("WeaponGetter")
NEPT H 0 A_GiveToTarget("SaltWaterWepM")
goto ClassDeath
}
}

Actor SaltWaterBoss : VCBaseWeapon
{
weapon.ammotype "Base56Ammo"
weapon.ammouse 4
Weapon.AmmoType2 "BaseAltfireAmmo"
Weapon.AmmoUse2 112
Weapon.AmmoGive2 112
Obituary "$OB_NEPTUNE1"
States
{
Ready:
NEPH A 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",1,4)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,112))
TNT1 A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
NEPH A 1 A_WeaponReady(WRF_NOPRIMARY*CallACS("VC_AmmoCheck",1,4)|WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,112))
TNT1 A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
TNT1 A 0 A_GiveInventory("Base56Ammo",1)
TNT1 A 0 A_GiveInventory("BaseAltfireAmmo",2)
Loop

Deselect:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
NEPH A 1 A_Lower
Loop
Select:
TNT1 A 0 ACS_ExecuteAlways(991,0,5968)
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
NEPH A 1 A_Raise
Loop

Fire:
TNT1 A 0 A_PlaySoundEx("weapon/MMVShot","Weapon")
TNT1 A 0 A_FireCustomMissile("SaltWaterSD",0,1,0,5)
NEPH BXXXXXXXX 1 ACS_NamedExecuteWithResult("VC_SetState",3)
TNT1 AAA 1 ACS_NamedExecuteWithResult("VC_SetState",2)
TNT1 AAA 1 ACS_NamedExecuteWithResult("VC_SetState",1)
NEPH XXXHIA 1
Goto Ready

Altfire:
TNT1 A 0 A_JumpIfInventory("NoAltfire",1,"Ready")
TNT1 A 0 A_GunFlash("SeaLunging")
NEPH A 1 A_Jump(256,"JumpHold")
wait

JumpAgain:
TNT1 A 0 A_PlaySoundEx("weapon/saltwatersplash","body")
TNT1 A 0 A_SpawnItemEx("SaltWaterSplashSD")
Goto JumpHold

JumpHold:
TNT1 A 0 A_Stop
TNT1 A 0 ThrustThingZ(0,100,0,1)
TNT1 A 0 A_PlaySoundEx("weapon/superarmuse","Weapon")
NEPH CDDDD 1
Goto JumpWait

JumpWait:
TNT1 A 0 A_JumpIf(z-floorz<=0,"Land")
NEPH D 1 A_JumpIf(momz<=0,"LandWait")
TNT1 A 0 A_JumpIfInventory("CutterFlag",175,"AltEnd")
NEPH D 1 A_Jump(256,"JumpWait")
wait

LandWait:
TNT1 A 0 A_JumpIf(z-floorz<=0,"Land")
NEPH D 1 A_JumpIf(momz>0,"JumpWait")
TNT1 A 0 A_SpawnItemEx("LungeHitBox",0,0,0,momx,momy,momz)
TNT1 A 0 A_JumpIfInventory("NeptuneLungeExtend",1,"JumpAgain")
TNT1 A 0 A_JumpIfInventory("CutterFlag",175,"AltEnd")
NEPH D 1 A_Jump(256,"LandWait")
wait

Land:
TNT1 A 0 A_GunFlash("SeaLanded")
NEPH E 1 Offset(0,36) A_GiveInventory("NeptuneM2Handler",1)
NEPH E 1 Offset(0,28)
NEPH E 1 Offset(0,36)
NEPH E 1 Offset(0,35)
NEPH E 1 Offset(0,29)
NEPH E 1 Offset(0,34)
NEPH E 1 Offset(0,30)
NEPH E 1 Offset(0,33)
NEPH E 1 Offset(0,31)
NEPH EFFGGCC 1 A_WeaponReady(WRF_NOFIRE)
TNT1 A 0 A_GunFlash("EndFlash")
Goto Ready

AltEnd:
TNT1 A 0 A_GunFlash("EndFlash")
NEPH FFGGCC 1 
Goto Ready

UltimateAttack:
TNT1 A 0 A_TakeInventory("UltAttackFlag",1)
TNT1 A 0 A_GiveInventory("NeptuneUltCooldown",1)
TNT1 A 0 ACS_NamedExecuteAlways("VC_UltimateText",0,109)
TNT1 A 0 A_PlaySoundEx("classes/ultimateactivation","Auto")
NEPH A 1 A_Jump(256,"UltJumpHold")
wait

UltJumpAgain:
TNT1 A 0 A_PlaySoundEx("weapon/saltwatersplash","body")
TNT1 A 0 A_SpawnItemEx("SaltWaterSplashSD")
Goto UltJumpHold

UltJumpHold:
TNT1 A 0 A_GunFlash("SeaLunging2")
TNT1 A 0 A_Stop
TNT1 A 0 ThrustThingZ(0,150,0,1)
TNT1 A 0 A_PlaySoundEx("weapon/superarmuse","Weapon")
NEPH CDDDD 1
Goto UltJumpWait

UltJumpWait:
TNT1 A 0 A_CheckFloor("UltLand")//A_JumpIf(z-floorz<=0,"UltLand")
NEPH D 1 A_JumpIf(momz<=0,"UltLandWait")
TNT1 A 0 A_JumpIfInventory("CutterFlag",175,"AltEnd")
NEPH D 1 A_Jump(256,"UltJumpWait")
wait

UltLandWait:
TNT1 A 0 A_JumpIf(z-floorz<=0,"UltLand")
NEPH D 1 A_JumpIf(momz>0,"UltJumpWait")
TNT1 A 0 A_SpawnItemEx("LungeHitBox",0,0,0,momx,momy,momz)
TNT1 A 0 A_JumpIfInventory("NeptuneLungeExtend",1,"UltJumpAgain")
TNT1 A 0 A_JumpIfInventory("CutterFlag",175,"AltEnd")
NEPH D 1 A_Jump(256,"UltLandWait")
wait

UltLand:
TNT1 A 0 A_Quake(3,20,0,300,0)
TNT1 A 0 A_SpawnItemEx("SaltWaterSplashSD")
TNT1 A 0 A_PlaySoundEx("weapon/saltwatersplash","Auto")
TNT1 A 0 A_FireCustomMissile("SaltWaterRainMaker",0,0)
TNT1 A 0 A_GunFlash("SeaLanded")
NEPH E 2 A_TakeInventory("MediumShortUltimateAmmo",100)//40)
TNT1 A 0 A_JumpIfInventory("MediumShortUltimateAmmo",1,"UltJumpAgain")
NEPH E 1 Offset(0,36)
NEPH E 1 Offset(0,28)
NEPH E 1 Offset(0,36)
NEPH E 1 Offset(0,35)
NEPH E 1 Offset(0,29)
NEPH E 1 Offset(0,34)
NEPH E 1 Offset(0,30)
NEPH E 1 Offset(0,33)
NEPH E 1 Offset(0,31)
NEPH FGCAA 1 A_WeaponReady(WRF_NOFIRE)
TNT1 A 0 A_GunFlash("EndFlash")
TNT1 A 1 A_Jump(256,"Ready")
wait

SeaLunging:
TNT1 A 0 ThrustThingZ(0,-6,0,1)
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",4)
TNT1 A 0 A_ChangeVelocity(CallACS("VC_XYMob",24),0,momz,CVF_RELATIVE|CVF_REPLACE)
TNT1 A 1 A_JumpIfInventory("IsDead",1,"EndFlash")
TNT1 A 0 A_GiveInventory("CutterFlag",1)
loop

SeaLanded:
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",2)
TNT1 A 0 A_JumpIfInventory("IsDead",1,"EndFlash")
TNT1 A 1 A_Stop
loop

SeaLunging2:
TNT1 A 0 ThrustThingZ(0,-12,0,1)
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",4)
TNT1 A 1 A_JumpIfInventory("IsDead",1,"EndFlash")
loop

EndFlash:
TNT1 A 0 A_TakeInventory("CutterFlag",999)
stop
}
}

actor SaltWaterSD
{
PROJECTILE
-NOGRAVITY
+USEBOUNCESTATE
+BOUNCEONCEILINGS
+FORCEXYBILLBOARD
Obituary "$OB_NEPTUNE1"
damagetype "NeptuneRust"
Damage (18)
Speed 54
gravity 1.8
Height 12
Radius 12
Scale 2.5
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 1 ThrustThingZ(0,30,0,1)
SW4T B 1
wait
Bounce.Ceiling:
TNT1 A 0 A_ChangeFlag(USEBOUNCESTATE,False)
TNT1 A 0 A_ChangeFlag(BOUNCEONCEILINGS,False)
TNT1 A 0 A_ChangeVelocity(momx, momy, momz-1,CVF_REPLACE)
goto Spawn+3
Death:
TNT1 A 0 A_SpawnItemEx("SaltWaterSplashSD")
TNT1 A 0 A_SpawnItemEx("SaltWaterBitSD",0,0,0,0.8,0,0.5, 12,SXF_MULTIPLYSPEED)
TNT1 A 0 A_SpawnItemEx("SaltWaterBitSD",0,0,0,1.0,0,0.5,  0,SXF_MULTIPLYSPEED)
TNT1 A 0 A_SpawnItemEx("SaltWaterBitSD",0,0,0,0.8,0,0.5,-12,SXF_MULTIPLYSPEED)
stop
XDeath:
TNT1 AAA 0 A_SpawnItemEx("SaltWaterBitDieSD",frandom(-32, 32),frandom(-32, 32),frandom(-32, 32),0,0,0,0,1)
stop
}
}

actor SaltWaterBitSD
{
PROJECTILE
-NOGRAVITY
+HEXENBOUNCE
+FORCEXYBILLBOARD
Obituary "$OB_NEPTUNE1"
damagetype "Neptune"
bouncecount 2
Damage (9)
Speed 20
Height 10
Radius 10
Scale 2.5
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
SW4T F 1
SW4T F 0 A_ChangeFlag(HEXENBOUNCE,False)
SW4T F 1
wait
Death:
TNT1 A 0 A_SpawnItemEx("SaltWaterBitDieSD")
stop
}
}

actor SaltWaterSplashSD
{
-SOLID
+NOGRAVITY
+NOINTERACTION
+CLIENTSIDEONLY
height 4
radius 4
scale 2.5
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 0 A_PlaySoundEx("weapon/saltwatergb","body")
TNT1 A 0 A_CheckFloor("Floor")
SW4T ST 4
stop
Floor:
SW4T CDE 4
stop
}
}

actor SaltWaterBitDieSD : SaltWaterSplashSD
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 0 A_PlaySoundEx("weapon/saltwaterbit","body")
SW4T GHI 3
stop
}
}

actor LungeHitBox
{
species "DustManType"
+THRUSPECIES
PROJECTILE
+DONTBLAST
+DONTREFLECT
-NOBLOCKMAP
Obituary "$OB_NEPTUNE3"
damagetype "NeptuneLunge"
damage (25)
Radius 32
Height 32
Speed 20
scale 2.5
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_JumpIfInTargetInventory("NeptuneLungeExtend",1,"Death")
stop
XDeath:
TNT1 A 0 A_GiveToTarget("NeptuneLungeExtend",5)
Death:
TNT1 A 0
stop
}
}

actor NeptuneLungeExtend : Powerup
{
    powerup.duration 5
}

Actor NeptuneLungeProtect : PowerProtection
{
	Powerup.Duration 10
	DamageFactor "NeptuneLunge", 0.0
}

actor SaltWaterRainRadius
{
	+NOINTERACTION
	+NOGRAVITY
	+CLIENTSIDEONLY
	+FORCEXYBILLBOARD
	-SOLID
	scale 2.5
	height 1
	radius 1
	ReactionTime 2//3
	var int user_x;
	var int user_angle;
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		SpawnReset:
		TNT1 A 0 A_SetUserVar("user_x",96)
		TNT1 A 0 A_SetUserVar("user_angle",0)
		SpawnLoop:
		TNT1 A 0 A_SpawnItemEx("SaltWaterRainDroplet", user_x, 0, 512, 0, 0, -60, user_angle, SXF_ABSOLUTEANGLE|SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SetUserVar("user_angle", user_angle + 6)
		TNT1 A 0 A_JumpIf(user_angle >= 360,1)
		loop
		TNT1 A 0 A_CountDown
		TNT1 A 0 A_SetUserVar("user_angle",0)
		TNT1 A 0 A_SetUserVar("user_x",user_x+96)
		loop
		Death:
		TNT1 A 0
		stop
	}
}

actor SaltWaterRainDroplet : BasicClientSide
{
-NOINTERACTION
-NOGRAVITY
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
SW4T F 1 A_CheckFloor("Death")
wait
Death:
TNT1 A 1 A_SpawnItemEx("SaltWaterBitDieSD")
stop
}
}

actor SaltWaterRainAOE
{
species "DustManType"
+THRUSPECIES
+MISSILE
-SOLID
-DONTBLAST
+NOGRAVITY
+RIPPER
+SKYEXPLODE
+NOINTERACTION
+DONTSPLASH
+THRUGHOST
+THRUACTORS
+DONTREFLECT
Obituary "$OB_NEPTUNE2"
Damage (0)
Radius 2
Height 2
Scale 2.5
DamageType "Neptune"
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_Explode(25,170,0,0,170)
stop
}
}

actor SaltWaterRainMaker
{
PROJECTILE
+FLOORHUGGER
+NOEXPLODEFLOOR
+THRUACTORS
+DONTREFLECT
Damage(0)
Speed 30
Height 8
Radius 8
States
{
Spawn:
TNT1 A 0
TNT1 A 3 A_SpawnItemEx("UltSaltWaterSDStart",0,Random(-160,160),14,0,0,50)
TNT1 A 0 A_GiveInventory("CutterFlag",1)
TNT1 A 0 A_JumpIfInventory("CutterFlag",50,"EndRain")
loop
EndRain:
TNT1 A 0
stop
}
}

actor UltSaltWaterSDStart
{
PROJECTILE
+SKYEXPLODE
+THRUACTORS
+DONTREFLECT
Damage(0)
Height 8
Radius 8
States
{
Spawn:
TNT1 A 5
TNT1 A 0 A_SpawnItemEx("UltSaltWaterSD",0,0,-6)
stop
Death:
TNT1 A 1 A_SpawnItemEx("UltSaltWaterSD",0,0,-6)
stop
}
}

actor UltSaltWaterSD : SaltWaterSD
{
-USEBOUNCESTATE
-BOUNCEONCEILINGS
+DONTREFLECT
Obituary "$OB_NEPTUNE4"
damagetype "NeptuneInstantRust"
States
{
Spawn: 
TNT1 AA 0 A_GiveInventory("ProjectileCode")
SW4T B 1 A_GiveToTarget("NeptuneUltCooldown")
wait
Death:
TNT1 A 1 A_Explode(12,150,0)//18,150,0)
XDeath:
TNT1 A 0 A_SpawnItemEx("SaltWaterSplashSD")
TNT1 AAA 0 A_SpawnItemEx("UltSaltWaterBitSD", 0, 0, 0, 1.0, 0, 0.5, random(0,360), SXF_MULTIPLYSPEED)
stop
}
}

actor UltSaltWaterBitSD : SaltWaterBitSD
{
Obituary "$OB_NEPTUNE4"
damagetype "NeptuneInstantRust"
States
{
Death:
TNT1 A 1 A_Explode(4,75,0)//9,75,0)
XDeath:
TNT1 A 0 A_SpawnItemEx("SaltWaterBitDieSD")
stop
}
}

actor RustDebuffTimer : Powerup
{
Powerup.Duration 280
}

actor RustDebuffWatcher
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
States
{
Spawn:
TNT1 A 1
TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"Death")
TNT1 A 0 A_GiveToTarget("OxidizerGiver")
TNT1 A 0 A_JumpIfInTargetInventory("NeptuneDebuffCount",2,"Rustier")
TNT1 A 0 A_JumpIfInTargetInventory("RustDebuffTimer",1,"Spawn")
TNT1 A 1
Death:
TNT1 A 0 A_TakeFromTarget("RustyMovement",999)
TNT1 A 0 A_TakeFromTarget("RustDebuffCount",999)
stop
Rustier:
TNT1 A 1
TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"Death")
TNT1 AAA 0 A_GiveToTarget("OxidizerGiver")
TNT1 A 0 A_JumpIfInTargetInventory("NeptuneDebuffCount",4,"Rustiest")
TNT1 A 0 A_JumpIfInTargetInventory("NeptuneDebuffTimer",1,"Rustier")
TNT1 A 1
goto Death
Rustiest:
TNT1 A 0
TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"Death")
TNT1 AAAAA 0 A_GiveToTarget("OxidizerGiver")
TNT1 A 0 A_JumpIfInTargetInventory("NeptuneDebuffTimer",1,"Rustiest")
TNT1 A 1
goto Death
}
}

actor NeptuneDebuffTimer : Powerup
{
Powerup.Duration 210
}

actor NeptuneDebuffCount : Inventory
{
Inventory.Amount 1
Inventory.MaxAmount 5
}

actor OxidizerGiver : CustomInventory
{
states
{
Pickup:
TNT1 A 0 A_SpawnItemEx("SaltWaterDripper",random(0,32),0,random(0,40),0,0,random(0,-1),random(0,359))
stop
}
}

actor SaltWaterDripper : BasicClientSide
{
renderstyle translucent
alpha 0.6
-NOINTERACTION
-NOGRAVITY
gravity 1.7
+NOEXPLODEFLOOR
reactiontime 25
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
SW4T F 5
loopit:
SW4T F 1 A_SetScale(scalex-0.2,scaley-0.2)
SW4T F 0 A_Countdown
loop
Death:
TNT1 A 0
stop
}
}

actor RustyMovement : PowerSpeed
{
+POWERSPEED.NOTRAIL
powerup.colormap 0.749, 0.317, 0.317
powerup.duration 0x7fffffff
Speed 0.50
}

actor RustDebuffCount : Inventory
{
Inventory.Amount 1
Inventory.MaxAmount 4
}

actor NeptuneUltCooldown : UltBuildCooldownGiver
{
	Powerup.Duration -1
}

actor NeptuneM2Handler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_Quake(2,20,0,200,0)
TNT1 A 0 A_SpawnItemEx("SaltWaterRainAOE")
TNT1 A 0 A_SpawnItemEx("SaltWaterSplashSD")
TNT1 A 0 A_SpawnItemEx("SaltWaterRainRadius")
TNT1 A 0 A_PlaySoundEx("weapon/saltwatersplash","body")
TNT1 A 0 A_TakeInventory("BaseAltfireAmmo",112)//A_TakeInventory("Base56Ammo",28)
stop
}
}