const int CLR_TSUNADEAMBUSH = 3523;

actor TsunadeAmbushWep_NormalBar : NormalBar { args 110, 220 }

actor TsunadeAmbushWep : BaseMM8BDMWep
{
Weapon.AmmoUse 4
Weapon.AmmoGive 28
Weapon.SlotNumber 5
Obituary "$OB_TSUNADEAMBUSH"
Tag "$TAG_TSUNADEAMBUSH"
Inventory.Pickupmessage "$PU_TSUNADEAMBUSH"
weapon.ammotype "TsunadeAmbushAmmo"
inventory.icon "TSAMICO"
States
{
SpawnLoop:
TSAM X -1
loop
Ready:
TSAM E 0 ACS_NamedExecuteWithResult("core_weaponcolor",CLR_TSUNADEAMBUSH)
TSAM E 1 A_WeaponReady
Goto Ready+1
Deselect:
TSAM E 0
goto DeselectSwap
Select:
TSAM E 0
goto SelectSwap
Fire:
TSAM E 0 A_JumpIfNoAmmo("NoAmmo")
TSAM E 0 A_SpawnItemEx("TsunadeSmokeBombP",52*cos(pitch),0,28-(52*sin(pitch)))
TSAM EFG 1
TSAM H 0 A_PlaySoundEx("weapon/crackerthrow","Weapon")
TSAM H 0 A_FireCustomMissile("TsunadeAmbush",0,1,8,0)
TSAM HIJK 1
TNT1 A 24
TSAM LM 2
TSAM E 0 A_Refire
Goto Ready+1
NoAmmo:
TSAM E 1 ACS_NamedExecuteAlways("core_noammo",0)
Goto Ready+1
}
}

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

actor TsunadeSmokeBomb : BasicGraphicEffect
{
Translation "198:198=220:220", "192:192=110:110"
renderstyle "Translucent"
States
{
SpawnFrame:
TNT1 A 0
TNT1 A 0 A_PlaySoundEx("misc/10w3elvs","Voice")
KMUM HGFED 2
stop
}
}
actor TsunadeSmokeBombP : TsunadeSmokeBomb
{
States
{
SpawnFrame:
TNT1 A 0
TNT1 A 0 ACS_NamedExecuteWithResult("core_alphaprojectile", CallACS("core_getptrtid", AAPTR_TARGET), APROJ_TEAM, 19661, 192) //6553
goto Super::SpawnFrame
}
}

actor TsunadeAmbushTimer : BasicWatcher
{
reactiontime 5
States
{
Spawn:
TNT1 A 0
TNT1 A 35
TNT1 A 0 A_CountDown
loop
Death:
TNT1 A 0 A_GiveInventory("CutterFlag",1)
TNT1 A 1
wait
}
}

actor TsunadeAmbush : BasicProjectile
{
-NOGRAVITY
+RIPPER
+DONTBLAST
+SKYEXPLODE
Radius 10
Height 10
Translation "198:198=220:220", "192:192=110:110"
DamageType "TsunadeAmbush"
Obituary "$OB_TSUNADEAMBUSH"
damage (CallACS("basinofweps_cbm_damage", 20))
var int user_PierceRipper;
speed 35
States
{
Spawn:
TSAM A 0
TSAM A 0 A_SpawnItemEx("TsunadeAmbushCheck",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
TSAM A 0 A_SpawnItemEx("TsunadeAmbushTimer",0,0,0,0,0,0,0,0,0,CallACS("core_NewUniqueTID"))
TSAM A 0 ACS_NamedExecuteWithResult("core_setpointer",AAPTR_MASTER,CallACS("core_CurrentUniqueTID"),AAPTR_DEFAULT)
TSAM A 0 ACS_NamedExecuteWithResult("core_ClearUniqueTID",0)
goto SpawnLoop
SpawnLoop:
TSAM A 1 A_SpawnItemEx("TsunadeAmbushCheck",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
loop
Death:
TSAM A 0 A_Stop
TSAM A 0 A_JumpIf(IsPointerEqual(AAPTR_MASTER,AAPTR_NULL)==TRUE,"Failsafe")
goto Death2
Failsafe:
TSAM A 0 A_SpawnItemEx("TsunadeAmbushTimer",0,0,0,0,0,0,0,0,0,CallACS("core_NewUniqueTID"))
TSAM A 0 ACS_NamedExecuteWithResult("core_setpointer",AAPTR_MASTER,CallACS("core_CurrentUniqueTID"),AAPTR_DEFAULT)
TSAM A 0 ACS_NamedExecuteWithResult("core_ClearUniqueTID",0)
goto Death2
Death2:
TSAM A 0 A_SpawnItemEx("TsunadeAmbushCheck",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
TSAM A 0 A_SpawnItemEx("TsunadeAmbush2",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
stop
}
}
actor TsunadeAmbushCheck : BasicProjectile
{
Radius 10
Height 10
damage (0)
+DONTBLAST
+DONTREFLECT
+HITTRACER
DamageType "TsunadeAmbush"
Obituary "$OB_TSUNADEAMBUSH"
speed 0
States
{
Spawn:
TNT1 A 0
TNT1 A 1
stop
Death:
TNT1 A 0
stop
XDeath://hit objects
TNT1 A 0 A_CheckFlag("SHOOTABLE","Death2",AAPTR_TRACER)
stop
Death2:
TNT1 A 0 A_GiveInventory("TracerAndTargetTeamsMatchCheck",1)
TNT1 A 0 A_JumpIfInventory("TracerAndTargetTeamsMatchFlag", 1, "Death")
goto Death3
Death3:
TNT1 A 0 A_GiveInventory("CutterFlag",1,AAPTR_MASTER)
stop
}
}
actor TsunadeAmbush2 : BasicProjectile
{
+NOCLIP
+DONTBLAST
+DONTREFLECT
//-SKYEXPLODE
//-MISSILE
+THRUACTORS
speed 0
Translation "198:198=220:220", "192:192=110:110"
+SEEKERMISSILE
+LOOKALLAROUND
Radius 10
Height 10
meleerange 20
damage (0)
DamageType "TsunadeAmbush"
Obituary "$OB_TSUNADEAMBUSH"
States
{
Spawn:
TSAM A 0
TSAM A 1
TSAM A 0 A_ChangeFlag("NOCLIP",FALSE)
TSAM A 0 A_JumpIf(CallACS("basin_tsunadesky")==1,"Death")
TSAM A 0 A_PlaySoundEx("weapon/concreteshot","Weapon")
TSAM A 0 A_JumpIf(z-floorz<=0, "Floor")
TSAM A 0 A_JumpIf(ceilingz-z<=height, "Ceiling")
Walls:
TSAM B 8
TSAM B 0 A_JumpIf(IsPointerEqual(AAPTR_MASTER,AAPTR_NULL)==TRUE,"VanishW")
TSAM B 0 A_JumpIfInventory("CutterFlag",1,"VanishW",AAPTR_MASTER)
TSAM B 1 A_SeekerMissile(15, 0, SMF_LOOK|SMF_PRECISE, 256, 4)
TSAM B 0 A_JumpIfTargetInLOS("Missile", 0, JLOSF_PROJECTILE|JLOSF_DEADNOJUMP,512)
goto Walls+1
Floor:
TSAM C 8
TSAM C 0 A_JumpIf(IsPointerEqual(AAPTR_MASTER,AAPTR_NULL)==TRUE,"VanishF")
TSAM C 0 A_JumpIfInventory("CutterFlag",1,"VanishF",AAPTR_MASTER)
TSAM C 1 A_SeekerMissile(15, 0, SMF_LOOK|SMF_PRECISE, 256, 4)
TSAM C 0 A_JumpIfTargetInLOS("Missile2", 0, JLOSF_PROJECTILE|JLOSF_DEADNOJUMP,512)
goto Floor+1
Ceiling:
TSAM D 8
TSAM D 0 A_JumpIf(IsPointerEqual(AAPTR_MASTER,AAPTR_NULL)==TRUE,"VanishC")
TSAM D 0 A_JumpIfInventory("CutterFlag",1,"VanishC",AAPTR_MASTER)
TSAM D 1 A_SeekerMissile(15, 0, SMF_LOOK|SMF_PRECISE, 256, 4)
TSAM D 0 A_JumpIfTargetInLOS("Missile3", 0, JLOSF_PROJECTILE|JLOSF_DEADNOJUMP,512)
goto Ceiling+1
Missile:
TSAM A 0 //A_SeekerMissile(4, 10, SMF_PRECISE)
TSAM A 1 A_FaceTracer(0,0)
TSAM A 0 A_SpawnItemEx("TsunadeAmbush3",0,0,0,cos(pitch),0,sin(pitch),0,SXF_TRANSFERPOINTERS|SXF_MULTIPLYSPEED)
goto MissileX
Missile2:
TSAM A 0 //A_SeekerMissile(4, 10, SMF_PRECISE)
TSAM A 1 A_FaceTracer(0,0)
TSAM A 0 A_SpawnItemEx("TsunadeAmbush3",0,0,0,cos(pitch+10),0,sin(pitch+10),0,SXF_TRANSFERPOINTERS|SXF_MULTIPLYSPEED)
goto MissileX
Missile3:
TSAM A 0 //A_SeekerMissile(4, 10, SMF_PRECISE)
TSAM A 1 A_FaceTracer(0,0)
TSAM A 0 A_SpawnItemEx("TsunadeAmbush3",0,0,0,cos(pitch),0,sin(pitch),0,SXF_TRANSFERPOINTERS|SXF_MULTIPLYSPEED)
goto MissileX
MissileX:
TSAM A 0 A_PlaySoundEx("weapon/crackerthrow","Voice")
stop
VanishC:
TSAM A 0 ThrustThingZ(0, 20, 1, 1)
goto Vanish
VanishW:
TSAM A 0 A_SetAngle(angle+180)
TSAM A 0 ThrustThingZ(0, 30, 0, 1)
goto Vanish
VanishF:
TSAM A 0 ThrustThingZ(0, 45, 0, 1)
Vanish:
TSAM A 5
TSAM A 0 A_Stop
TSAM A 2
Death:
TNT1 A 0 A_RemoveMaster
TNT1 A 0 A_SpawnItemEx("TsunadeSmokeBomb")
stop
}
}
actor TsunadeAmbush3 : TsunadeAmbush
{
States
{
Spawn:
TSAM A 0
TSAM A 0 A_SpawnItemEx("TsunadeAmbushCheck",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
goto SpawnLoop
}
}