//The weapon formerly known as Floor Drill. Thanks teen Hil for being a goober.
const int CLR_TRACKINGDRILL = 3524;

actor TrackingDrillWep_NormalBar : NormalBar { args 86, 117 }
actor TrackingDrillWep_ScriptBar : ScriptBar {}

actor TrackingDrillWep : BaseMM8BDMWep
{
Weapon.AmmoUse 5
Weapon.AmmoGive 28
Weapon.SlotNumber 2
Inventory.Pickupmessage "$PU_TRACKINGDRILL"
Obituary "$OB_TRACKINGDRILL"
Tag "$TAG_TRACKINGDRILL"
weapon.ammotype "TrackingDrillAmmo"
inventory.icon "TKDRICO"
States
{
SpawnLoop:
TKDR X -1
loop
Ready:
TKDR A 0 ACS_NamedExecuteWithResult("core_weaponcolor",CLR_TRACKINGDRILL)
TKDR A 1 A_WeaponReady
Goto Ready+1
Deselect:
TKDR A 0
goto DeselectSwap
Select:
TKDR A 0
goto SelectSwap
Fire:
TKDR A 0 A_JumpIfInventory("TrackingDrillFlag",1,"FireWait")
TKDR A 0 A_JumpIfNoAmmo("NoAmmo")
TKDR A 0 A_JumpIfInventory("IsBot", 1, "BotCheck")
Goto Hold
AltFire:
TKDR A 0 A_JumpIfInventory("TrackingDrillFlag",1,"FireWait")
TKDR A 0 A_JumpIfNoAmmo("NoAmmo")
Goto Hold
Hold:
TKDR A 2 A_GiveInventory("TargetMarker",1)
TKDR A 0 A_Refire
AltHold:
TKDR A 0 A_ClearRefire
TKDR A 0 A_JumpIfNoAmmo("NoAmmo")
TKDR A 0 A_SpawnItemEx("TrackingDrillTracker", 0, 8, 32, cos(pitch), 0, sin(-pitch),0,SXF_MULTIPLYSPEED)
TKDR A 0 A_GiveInventory("TrackingDrillFlag",1)
TKDR A 0 A_PlaySoundEx("weapons/mm5/napalmbombfire","Weapon")
TKDR A 0 A_SpawnItemEx("TrackingDrillStart",16,0,32)//A_FireCustomMissile("TrackingDrillStart",0,1,8,0)
TKDR A 0 A_TakeInventory("TrackingDrillAmmo",5,TIF_NOTAKEINFINITE)
TKDR BCA 3
Goto Ready+1
BotCheck:
TKDR A 2 A_GiveInventory("TargetMarker",1)
TKDR A 0 A_Jump(128, "BotCheck")
Goto Hold+2
FireWait:
TKDR A 1
Goto Ready+1
NoAmmo:
TKDR A 1 ACS_NamedExecuteAlways("core_noammo",0)
Goto Ready+1
}
}

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

actor TrackingDrillFlag : Inventory
{
inventory.amount 1
inventory.maxamount 2
}

actor TrackingDrillStart
{
PROJECTILE
+NOINTERACTION
height 1
radius 1
Speed 0
Scale 3.0
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_SpawnItemEx("TrackingDrillDown",48,0,0)
stop
}
}

actor TrackingDrillDown : BasicProjectile
{
-NOGRAVITY
//+THRUACTORS
+RIPPER
+DONTBLAST
+DONTREFLECT
Damagetype "TrackingDrill"
Obituary "$OB_TRACKINGDRILL"
Damage(CallACS("basinofweps_cbm_damage", 8))
ReactionTime 35
Translation "192:192=86:86", "198:198=117:117"
States
{
Spawn:
TKDR D 0
TKDR D 0 A_PlaySoundEx("weapons/mmb/spreaddrillsplitsmall", "Voice")
TKDR D 1 ThrustThingZ(0, 50, 1, 0)
TKDR DE 3 A_CountDown
Goto Spawn+3
Crash:
Death:
TKDR D 0 A_PlaySoundEx("weapon/spreaddrillhit", "Weapon")
TKDR DDDDDD 0 A_SpawnItemEx("TrackingDrillFX", random(-10,10), random(-10,10), 0, random(-5, 5), random(-5, 5), random(2,5))
TKDR FG 3
TNT1 A 0 A_GiveToTarget("TrackingDrillFlag",1)
stop
}
}

actor TrackingDrillTracker : BasicFastProjectile
{
+BRIGHT
+DONTSPLASH
+DONTBLAST
+DONTREFLECT
+THRUGHOST
+SKYEXPLODE
+NOTARGETSWITCH
+HITTRACER
damagetype "TrackingDrill"
Obituary "$OB_TRACKINGDRILL"
Speed 1000
Damage (0)
Radius 6
Height 6
Translation "192:192=86:86", "198:198=117:117"
renderstyle "Translucent"
var int user_z;
States
{
Spawn:
TNT1 A 5
Goto Death
XDeath:
TNT1 A 0 ACS_NamedExecuteWithResult("basin_drilloffset")
Death:
TNT1 A 0
TNT1 A 0 A_JumpIfInventory("MM8BDMPlayer", 1, "PrepTracer", AAPTR_TRACER)
TNT1 A 0 A_Stop
Latch:
TNT1 A 1 A_JumpIfInTargetInventory("TrackingDrillFlag",2,"Ticking")
TNT1 A 0 A_Warp(AAPTR_TRACER,0,0,user_z,angle,WARPF_COPYINTERPOLATION|WARPF_ABSOLUTEOFFSET|WARPF_ABSOLUTEANGLE)
loop
PrepTracer:
TNT1 A 0 ACS_NamedExecuteWithResult("core_changeClientProperty", APROP_Alpha, 39321, AAPTR_TRACER) // 0.6 * 65536
Goto Latch
Ticking:
TNT1 A 0 A_GiveInventory("CutterFlag",1)
TKDR L 0 A_PlaySoundEx("misc/BombCount","Voice")
TNT1 AAAA 1 A_Warp(AAPTR_TRACER,0,0,user_z,angle,WARPF_COPYINTERPOLATION|WARPF_ABSOLUTEOFFSET|WARPF_ABSOLUTEANGLE)
TKDR LLLL 1 A_Warp(AAPTR_TRACER,0,0,user_z,angle,WARPF_COPYINTERPOLATION|WARPF_ABSOLUTEOFFSET|WARPF_ABSOLUTEANGLE)
TNT1 AAAA 1 A_Warp(AAPTR_TRACER,0,0,user_z,angle,WARPF_COPYINTERPOLATION|WARPF_ABSOLUTEOFFSET|WARPF_ABSOLUTEANGLE)
TKDR LLLL 1 A_Warp(AAPTR_TRACER,0,0,user_z,angle,WARPF_COPYINTERPOLATION|WARPF_ABSOLUTEOFFSET|WARPF_ABSOLUTEANGLE)
TNT1 A 0 A_JumpIfInventory("CutterFlag",3,"Ticking2")
loop
Ticking2:
TNT1 A 0 A_GiveInventory("CutterFlag",1)
TKDR L 0 A_PlaySoundEx("misc/BombCount","Voice")
TNT1 AAAA 1 A_Warp(AAPTR_TRACER,0,0,user_z,angle,WARPF_COPYINTERPOLATION|WARPF_ABSOLUTEOFFSET|WARPF_ABSOLUTEANGLE)
TKDR LLLL 1 A_Warp(AAPTR_TRACER,0,0,user_z,angle,WARPF_COPYINTERPOLATION|WARPF_ABSOLUTEOFFSET|WARPF_ABSOLUTEANGLE)
TNT1 A 0 A_JumpIfInventory("CutterFlag",(3+4),"Ticking3")
loop
Ticking3:
TNT1 A 0 A_Stop
TNT1 A 0 //A_JumpIfInventory("CutterFlag",(3+4+6),2)
TNT1 A 0 A_Warp(AAPTR_TRACER,0,0,user_z,angle,WARPF_COPYINTERPOLATION|WARPF_ABSOLUTEOFFSET|WARPF_ABSOLUTEANGLE)
TNT1 A 0 A_GiveInventory("CutterFlag",1)
TKDR L 0 A_PlaySoundEx("misc/BombCount","Voice")
TNT1 AA 1
TKDR MM 1
TNT1 A 0 A_JumpIfInventory("CutterFlag",(3+4+8),"DigUp")
goto Ticking3+1
DigUp:
TNT1 A 0 A_ChangeFlag("FLOORHUGGER",1)
TNT1 A 1
TNT1 A 0 A_SpawnItemEx("TrackingDrillUp",0,0,-1024)
TNT1 A 0 A_TakeFromTarget("TrackingDrillFlag",999)
stop
}
}

actor TrackingDrillUp : BasicProjectile
{
+DONTSPLASH
+NOEXPLODEFLOOR
+NOCLIP
+DONTBLAST
+DONTREFLECT
+FLOORHUGGER
Damage (0)
damagetype "TrackingDrill"
Obituary "$OB_TRACKINGDRILL"
Radius 6
Height 6
speed 0
Translation "192:192=86:86", "198:198=117:117"
States
{
Spawn:
TNT1 A 0
TNT1 A 0 //A_Changeflag("NOCLIP",0)
TNT1 A 0 A_Changeflag("FLOORHUGGER",0)
TKDR H 0 A_PlaySoundEx("weapons/mm7/dangerwrapexplode", "Weapon")
TKDR HHHHHHHHHH 0 A_SpawnItemEx("TrackingDrillFX", random(-16,16), random(-16,16), 0, random(-12, 12), random(-12, 12), random(5,16))
TKDR H 0 A_Explode(CallACS("basinofweps_cbm_damage", 52),56,0,0,14)
TKDR H 0 A_SpawnItemEx("TrackingDrillRadius")
TKDR HI 2
TKDR J 0 ThrustThingZ(0, 40, 0, 1)
TKDR J 3
TKDR J 0 A_Stop
TKDR KJKJK 3
TNT1 A 0 A_SpawnItemEx("ExplosionEffect1", 0, 0, 10, 0, 0, 0, 0, SXF_WEPFXCOLOR)
stop
}
}

actor TrackingDrillRadius : BasicGraphicEffect
{
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,0)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,15)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,30)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,45)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,60)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,75)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,90)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,105)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,120)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,135)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,150)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,165)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,180)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,195)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,210)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,225)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,240)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,255)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,270)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,285)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,300)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,315)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,330)
TNT1 A 0 A_SpawnItemEx("TrackingDrillShockwave",0,0,0,9,0,0,345)
stop
}
}
actor TrackingDrillShockwave : BasicGraphicEffect
{
+FLOORHUGGER
Translation "0:255=117:117"
renderstyle "Translucent"
alpha 0.8
States
{
SpawnFrame:
DUOR TTT 2 A_FadeOut(0.2)
stop
}
}

actor TrackingDrillFX : RushSearchFX
{
states
{
Spawn:
TNT1 A 0
TNT1 A 0 A_GiveInventory("MM8BDMProjSpawnFuncClient",1)
TNT1 A 0 A_Jump(256, "Bit1", "Bit2", "Bit3", "Bit4", "Bit5", "Bit6", "Bit7")
goto Bit1
}
}