actor MegaWaterSWep : BaseMM8BDMWep
{
dropitem "MegaWaterSWepCDropped"
Weapon.AmmoUse 1
Weapon.AmmoGive 28
Weapon.SlotNumber 7
Inventory.Pickupmessage "$PU_MEGAWATERBARRIER"
Obituary "$OB_MEGAWATERBARRIER"
Tag "$TAG_MEGAWATERBARRIER"
weapon.ammotype "MegaWaterSCopyAmmo"
inventory.icon "XTR0WI_T"
States
{
Spawn:
XWI0 T 1
loop
Ready:
XH0T A 0 ACS_ExecuteAlways(998,0,DYE_MEGAWATERBARRIER)
XH0T A 1 A_WeaponReady
Goto Ready+1
Deselect:
XH0T A 0 A_JumpIfInventory("ShieldCheck",1,"Deactivate")
XH0T AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
XH0T A 1 A_Lower
Goto Deselect+1
Select:
XH0T AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
XH0T A 1 A_Raise
Loop
Fire:
XH0T A 0 A_JumpIfNoAmmo("NoAmmo")
XH0T A 0 A_JumpIfInventory("ShieldCheck",1,"Finish")
XH0T A 0 A_GiveInventory("ShieldCheck",1)
XH0T A 0 A_TakeInventory("MegaWaterSCopyAmmo",1,1)
XH0T A 0 A_PlaySound("classes/MWS_Shield",4,1.0)
XH0T BC 2
XH0T C 0 A_GunFlash
XH0T D 2 A_TakeInventory("StopShield",1)
XH0T D 0 A_GiveInventory("MWSCopyShieldHitbox_P",1)
Goto BarrierActive
BarrierActive:
XH0T D 0 A_JumpIfInventory("PowerRage_ST",1,4)
XH0T D 0 A_JumpIfNoAmmo("Finish")
XH0T D 0 A_SpawnItemEx("MWSCopyShieldFX1",23,0,8,momx,momy,momz,0,8,0)
XH0T D 1 A_WeaponReady
XH0T D 0 A_JumpIfNoAmmo("Finish")
XH0T D 0 A_SpawnItemEx("MWSCopyShieldFX1",23,0,8,momx,momy,momz,0,8,0)
XH0T D 1 A_WeaponReady
XH0T D 0 A_JumpIfInventory("PowerRage_ST",1,4)
XH0T D 0 A_JumpIfNoAmmo("Finish")
XH0T D 0 A_SpawnItemEx("MWSCopyShieldFX2",23,0,8,momx,momy,momz,0,8,0)
XH0T D 1 A_WeaponReady
XH0T D 0 A_JumpIfNoAmmo("Finish")
XH0T D 0 A_SpawnItemEx("MWSCopyShieldFX2",23,0,8,momx,momy,momz,0,8,0)
XH0T D 1 A_WeaponReady
loop
Finish:
XH0T D 0 A_PlaySound("classes/ShieldPop",4,1.0)
XH0T D 0 A_GiveInventory("StopShield",1)
XH0T D 0 A_TakeInventory("ShieldCheck",9)
XH0T D 0 A_FireCustomMissile("MWSPushCopy",0,0,0,0)
XH0T C 2
XH0T BA 2 A_TakeInventory("MWSShieldCharge",99)
XH0T A 5 A_TakeInventory("StopShield",1)
Goto Ready+1
Deactivate:
XH0T D 0 A_PlaySound("classes/ShieldPop",4,1.0)
XH0T D 0 A_GiveInventory("StopShield",1)
XH0T D 0 A_TakeInventory("ShieldCheck",9)
XH0T D 0 A_FireCustomMissile("MWSPushCopy",0,0,0,0)
XH0T C 2
XH0T BA 2 A_TakeInventory("MWSShieldCharge",99)
XH0T A 5 A_TakeInventory("StopShield",1)
Goto Deselect+1

Flash:
TNT1 A 0 A_JumpIfInventory("IsDead",1,"NoFlash")
TNT1 A 2 A_GiveInventory("MWSShieldCharge",1)
TNT1 A 0 A_JumpIfInventory("ShieldCheck",1,1)
stop
TNT1 A 2 A_GiveInventory("MWSShieldCharge",1)
TNT1 A 0 A_JumpIfInventory("ShieldCheck",1,1)
stop
TNT1 A 2 A_GiveInventory("MWSShieldCharge",1)
TNT1 A 0 A_JumpIfInventory("ShieldCheck",1,1)
stop
TNT1 A 2 A_GiveInventory("MWSShieldCharge",1)
TNT1 A 0 A_JumpIfInventory("ShieldCheck",1,1)
stop
TNT1 A 2 A_GiveInventory("MWSShieldCharge",1)
TNT1 A 0 A_JumpIfInventory("ShieldCheck",1,1)
stop
TNT1 A 2 A_GiveInventory("MWSShieldCharge",1)
TNT1 A 0 A_JumpIfInventory("ShieldCheck",1,1)
stop
TNT1 A 2 A_GiveInventory("MWSShieldCharge",1)
TNT1 A 0 A_JumpIfInventory("ShieldCheck",1,1)
stop
TNT1 A 2 A_GiveInventory("MWSShieldCharge",1)
TNT1 A 0 A_JumpIfInventory("ShieldCheck",1,1)
stop
TNT1 A 2 A_GiveInventory("MWSShieldCharge",1)
TNT1 A 0 A_JumpIfInventory("ShieldCheck",1,1)
stop
TNT1 A 0 A_TakeInventory("MegaWaterSCopyAmmo",1,1)
loop
NoAmmo:
XH0T A 1 ACS_Execute(979,0)
Goto Ready+1
}
}

actor MegaWaterSCopyAmmo : Ammo
{
inventory.amount 1
inventory.maxamount 28
+INVENTORY.IGNORESKILL
}

actor MWSCopyShieldHitbox_P : CustomInventory
{
states
{
Pickup:
TNT1 A 0 A_SpawnItemEx("MWSCopyShieldHitbox1",28,-16,8,0,0,0,0,1)
TNT1 A 0 A_SpawnItemEx("MWSCopyShieldHitbox2",28,-8,8,0,0,0,0,1)
TNT1 A 0 A_SpawnItemEx("MWSCopyShieldHitbox3",28,0,8,0,0,0,0,1)
TNT1 A 0 A_SpawnItemEx("MWSCopyShieldHitbox4",28,8,8,0,0,0,0,1)
TNT1 A 0 A_SpawnItemEx("MWSCopyShieldHitbox5",28,16,8,0,0,0,0,1)
stop
}
}

actor MWSCopyShieldHitbox1 : BasicShieldHitbox
{
Meleerange 28
Accuracy -16
Mass 8
Height 64
States
{
Pain:
TNT1 A 0
TNT1 A 0 A_SpawnItemEx("MWSCopyShieldDeathFX",0,0,10)
TNT1 A 0 A_PlaySound("item/protoreflect")
goto Spawn
}
}
actor MWSCopyShieldHitbox2 : MWSCopyShieldHitbox1
{
Accuracy -8
}
actor MWSCopyShieldHitbox3 : MWSCopyShieldHitbox1
{
Accuracy 0
}
actor MWSCopyShieldHitbox4 : MWSCopyShieldHitbox1
{
Accuracy 8
}
actor MWSCopyShieldHitbox5 : MWSCopyShieldHitbox1
{
Accuracy 16
}

actor MWSCopyShieldDeathFX : BasicClientSide
{
alpha 0.9
renderstyle add
Scale 1.5
states
{
Spawn:
KNIA L 0 A_SetScale(scaleX + 0.1, 2.5) 
KNIA L 1 A_FadeOut(0.05)
loop
}
}


actor MWSCopyShieldFX1 : ProtoShieldFX
{
Translation "200:202=210:210","203:205=196:196","206:207=118:118"
renderstyle translucent
alpha 0.5
scale 1.25
States
{
Spawn:
MWSH Q 0
MWSH Q 1
stop
}
}

actor MWSCopyShieldFX2 : MWSCopyShieldFX1
{
States
{
Spawn:
MWSH R 0
MWSH R 1
stop
}
}

actor MWSPushCopy : BasicExplosion//Same as MWSPush on MegaWaterS
{
Translation "199:199=204:204","202:202=202:202"
var int user_P;
damagetype "MegaWaterBarrier"
Obituary "$OB_MWSPUSH"
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_SetUserVar("user_P",1)
TNT1 A 0 A_JumpIfInTargetInventory("MWSShieldCharge",user_P,"SpawnAdd")
TNT1 A 1 A_Explode(user_P/6*2+9,user_P/6*20+199,0)
stop
SpawnAdd:
TNT1 A 0 A_SetUserVar("user_P",user_P+1)
TNT1 A 0 A_JumpIf(user_P>=300,"SpawnD")
goto Spawn+2
SpawnD:
TNT1 A 1 A_Explode(50,500,0)
stop
}
}

actor MWSPushCopyFX_H : BasicHelper
{
States
{
Spawn:
TNT1 A 0 //Transfer MWSShieldCharge as an Angle to spawn FX
TNT1 A 2 A_SpawnItemEx("MWSPushCopyFX_H2",0,0,0,0,0,0,CallACS("cbm_countinv_acs",305,2),5)
stop
}
}
actor MWSPushCopyFX_H2 : BasicHelper
{
States
{
Spawn:
TNT1 A 0 //Double spawn to sync online
TNT1 A 1 A_SpawnItemEx("MWSPushCopyFX",0,0,0,0,0,0,angle,5)
stop
}
}
actor MWSPushCopyFX : BasicClientside
{
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_SetArg(1,Angle)
SpawnL:
TNT1 AA 0 A_SpawnItemEx("MWS_WaterSplashFX",8,0,random(-10,10),frandom(2+Args[1]*0.1,Args[1]*0.5),0,random(3,8),random(0,359),1)
TNT1 A 0 A_CountDownArg(1)
loop
Death:
TNT1 A 1
stop
}
}