Actor HookDrillWep_V_NormalBar : NormalBar{Args 217, 183}
Actor HookDrillWep_V_ScriptBar : ScriptBar{}
Actor HookDrillWep_V : BaseMM8BDMWep
{
Weapon.AmmoUse 14
Weapon.AmmoGive 28
Weapon.SlotNumber 6
Inventory.Pickupmessage "$PU_HOOKDRILL"
Obituary "$OB_HOOKDRILL"
Tag "$TAG_HOOKDRILL"
weapon.ammotype "HookDrillAmmo_V"
inventory.icon "HKDRICON"
States
{
SpawnLoop:
HKDR Z -1
loop
ReadyC: Goto Ready+1
Ready:
HKDR A 0 ACS_NamedExecuteWithResult("core_weaponcolor",COLOR_HOOKDRILL)
HKDR A 1 A_WeaponReady(WRF_NOBOB)
HKDR A 0 A_GiveInventory("HookDrillNo_P_V")
Goto Ready+1
Deselect:
HKDR A 0
goto DeselectSwap
Select:
HKDR A 0
goto SelectSwap
Fire:
HKDR A 0 A_JumpIfNoAmmo("NoAmmo")
TNT1 A 0 A_JumpIfInventory("WireHookShotDelay",1,"TooSoon")
HKDR A 1 offset(0,42)
HKDR A 1 offset(0,62)
HKDR A 1 offset(0,82)
HKDR A 1 offset(0,102)
TNT1 A 0 A_GiveInventory("WireHookShotDelay",1)
TNT1 A 0 A_PlaySoundEx("weapon/hookdrillfireoff","Weapon")
TNT1 A 0 A_SpawnItemEx("HookDrill_V",0,16,16,0,0,1)
TNT1 A 0 A_GiveInventory("HookDrillAnimFlag_V",1)
TNT1 A 0 A_TakeInventory("HookDrillAmmo_V",14,TIF_NOTAKEINFINITE)
FireLoop:
TNT1 A 1 offset(0,102) A_JumpIfInventory("HookDrillCanFallFlag_V",1,"FireLoop2Start")
TNT1 A 0 A_GiveInventory("HookDrillTimer2_V",1)
TNT1 A 0 A_JumpIfInventory("HookDrillTimer2_V",175,"FireEnd")
FireLoopCheck:
TNT1 A 0 A_JumpIfInventory("HookDrillAnimFlag_V",1,"FireLoop")
Goto Ready+1
FireLoop2Start:
TNT1 A 0 A_TakeInventory("HookDrillCanFallFlag_V",1)
TNT1 A 0 A_ChangeVelocity(0,0,0,CVF_REPLACE)
FireLoop2:
TNT1 A 0 offset(0,102) A_JumpIf(CallACS("vile_ButtonCheck",32,1) == 1, "FireEnd")
TNT1 A 1 offset(0,102) A_JumpIf(CallACS("vile_ButtonCheck",1,1) == 1, "FireMeleeStart")
TNT1 A 0 A_GiveInventory("HookDrillTimer2_V",1)
TNT1 A 0 A_JumpIfInventory("HookDrillTimer2_V",175,"FireEnd")
FireLoopCheck:
TNT1 A 0 A_JumpIfInventory("HookDrillAnimFlag_V",1,"FireLoop2")
Goto Ready+1
FireMeleeStart:
TNT1 A 4
TNT1 A 0 A_TakeInventory("HookDrillAnimFlag_V",999)
TNT1 A 0 A_TakeInventory("HookDrillTimer2_V",999)
TNT1 A 0 A_TakeInventory("HookDrillCeilingFlag_V",999)
TNT1 A 0 A_GiveInventory("HookDrillStopFlag_V",1)
TNT1 A 0 A_TakeInventory("HookDrillCanFallFlag_V",1)
TNT1 A 0 SetPlayerProperty(0,0,3)
TNT1 A 0 SetPlayerProperty(0,0,4)
HKDR B 1 offset(0,102)
HKDR B 1 offset(0,82)
HKDR B 1 offset(0,62)
HKDR B 1 offset(0,42)
goto FireMeleeLoop
FireMeleeLoop:
TNT1 A 0 A_GiveInventory("HookDrillTimer3_V",4)
TNT1 A 0 A_JumpIfInventory("HookDrillTimer3_V",175,"FireEnd2")
HKDR B 0 A_JumpIf(CallACS("vile_ButtonCheck",32) == 1, "FireEnd")
HKDR B 1 A_JumpIf(CallACS("vile_ButtonCheck",1) == 1, "FireMeleeDrill")
HKDR B 0 A_JumpIf(CallACS("vile_ButtonCheck",32) == 1, "FireEnd")
HKDR B 1 A_JumpIf(CallACS("vile_ButtonCheck",1) == 1, "FireMeleeDrill")
HKDR B 0 A_JumpIf(CallACS("vile_ButtonCheck",32) == 1, "FireEnd")
HKDR B 1 A_JumpIf(CallACS("vile_ButtonCheck",1) == 1, "FireMeleeDrill")
HKDR B 0 A_JumpIf(CallACS("vile_ButtonCheck",32) == 1, "FireEnd")
HKDR B 1 A_JumpIf(CallACS("vile_ButtonCheck",1) == 1, "FireMeleeDrill")
loop
FireMeleeDrill:
HKDR B 0 A_PlaySoundEx("weapon/drillfly","Weapon")
HKDR B 0 A_GiveInventory("HookDrillMeleeFireFlag_V",1)
HKDR B 1
HKDR C 1
HKDR D 1 ACS_NamedExecute("vile_statechange",0,2)
HKDR B 1 A_FireCustomMissile("HookDrillMelee_V",0,0,8,0)
goto FireMeleeLoop
FireEnd:
TNT1 A 4
TNT1 A 0 A_TakeInventory("HookDrillAnimFlag_V",999)
TNT1 A 0 A_TakeInventory("HookDrillCeilingFlag_V",999)
TNT1 A 0 A_TakeInventory("HookDrillTimer2_V",999)
TNT1 A 0 A_TakeInventory("HookDrillTimer3_V",999)
TNT1 A 0 A_TakeInventory("HookDrillCanFallFlag_V",1)
TNT1 A 0 SetPlayerProperty(0,0,3)
TNT1 A 0 SetPlayerProperty(0,0,4)
HKDR A 1 offset(0,102)
HKDR A 1 offset(0,92)
HKDR A 1 offset(0,82)
HKDR A 1 offset(0,72)
HKDR A 1 offset(0,62)
HKDR A 1 offset(0,52)
HKDR A 1 offset(0,42)
HKDR AAAAAAAAAA 1 offset(0,33) A_GiveInventory("HookDrillNo_P_V")
Goto Ready+1
FireEnd2:
HKDR B 1 offset(0,42) A_TakeInventory("HookDrillFlashEndFlag_V",1)
HKDR B 1 offset(0,62)
HKDR B 0 A_TakeInventory("HookDrillTimer3_V",999)
TNT1 A 0 A_TakeInventory("HookDrillCanFallFlag_V",1)
HKDR B 1 offset(0,82)
HKDR B 1 offset(0,102)
HKDR A 1 offset(0,82)
HKDR A 1 offset(0,62)
HKDR A 1 offset(0,42)
HKDR AAAAAAAAAA 1 offset(0,33) A_GiveInventory("HookDrillNo_P_V")
Goto Ready+1

ClassAltfire:
HKDR A 0 
goto Super::Altfire
TooSoon:
Goto Ready+1
NoAmmo:
HKDR A 1 ACS_NamedExecuteAlways("core_noammo", 0)
Goto Ready+1
}
}

Actor HookDrillAmmo_V : Ammo
{
	Inventory.Amount 1
	Inventory.MaxAmount 28
	+INVENTORY.IGNORESKILL
}

Actor HookDrillNo_P_V : Powerup{Powerup.Duration 1}
actor HookDrillAnimFlag_V : Once {}

actor HookDrill_V : BasicProjectile
{
DamageType "HookDrill_V"
Obituary "$OB_HOOKDRILL"
Damage (0)
radius 13
height 12
ReactionTime 175
+THRUACTORS
+SKYEXPLODE
var int user_PTID;
var int user_CountDown;
PROJECTILE
+DONTBLAST
+DONTREFLECT
//+PAINLESS
+THRUGHOST
+NOTIMEFREEZE
+HITTRACER
-NOINTERACTION
Speed 1
scale 2.5
states
{
Spawn:
TNT1 A 0
HKDR E 0 A_SetUserVar(user_PTID, ACS_NamedExecuteWithResult("core_gettarget"))
HKDR E 0 A_GiveInventory("HookDrillTimer_V",1)
HKDR E 0 A_ScaleVelocity(44)//Speed of projectile.
goto Spawn2

Spawn2:
HKDR E 0 ACS_NamedExecuteAlways("core_drawhookshot", 0, user_PTID, 18)
HKDR E 0 A_GiveToTarget("WireHookShotDelay",1)
HKDR E 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"SuperDeath") HKDR E 0 A_JumpIf(CallACS("SkyTextureCheck")&&(z+height>=ceilingZ),"Death")
HKDR E 0 A_GiveToTarget("WireHookShotDelay",1)
HKDR E 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"SuperDeath") HKDR E 0 A_JumpIf(CallACS("SkyTextureCheck")&&(z+height>=ceilingZ),"Death")
WireLoop:
HKDR E 0 A_GiveToTarget("WireHookShotDelay",1)
HKDR E 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"SuperDeath") HKDR E 0 A_JumpIf(CallACS("SkyTextureCheck")&&(z+height>=ceilingZ),"Death")
HKDR E 0 A_CountDown
loop

Death:
HKDR E 0
goto Deathloop
XDeath:
Crash:
HKDR E 0
HKDR E 0 A_JumpIfInventory("HookDrillTimer_V",1,"Death2")
goto SuperDeathPoof//Kill hook early if it never got through the Spawn state.
Death2:
HKDR E 0 A_PlaySoundEx("weapon/crashland","Weapon")
goto DeathLoop
DeathLoop:
HKDR E 0 A_GiveToTarget("WireHookShotDelay",1)
HKDR E 0 ACS_NamedExecuteAlways("vile_hookshot_hook_drill",0,user_PTID,30,0)
HKDR E 0 A_JumpIfCloser(64,"DeathLoop2Start")
HKDR EFEF 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"SuperDeath")
loop
DeathLoop2Start:
HKDR E 0 A_GiveToTarget("HookDrillStop_V",1)
HKDR E 0 A_GiveToTarget("HookDrillCanFallFlag_V",1)
DeathLoop2:
HKDR E 0 A_GiveToTarget("WireHookShotDelay",1)
HKDR E 0 A_PlaySoundEx("weapon/drillshredder","Body")
HKDR EEEEE 0 A_SpawnItemEx("DrillSplasherDebrisNotClientSide_V",random(-8,8),random(-8,8),-8,random(-8,8),random(-8,8),-8,0,SXF_TRANSFERPOINTERS)
HKDR E 0 A_SetUserVar("user_CountDown",user_CountDown + 4)
HKDR E 0 A_JumpIf(user_CountDown == 175, "SuperDeath")
TNT1 A 0 A_JumpIfInTargetInventory("HookDrillTimer2_V",175,"SuperDeath")
TNT1 A 0 A_JumpIfInTargetInventory("HookDrillTimer3_V",175,"SuperDeath")
TNT1 A 0 A_JumpIfInTargetInventory("HookDrillNo_P_V",1,"SuperDeath")
TNT1 A 0 A_JumpIfInTargetInventory("HookDrillStopFlag_V",1,"DeathLoop3Start")
HKDR EFEF 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"SuperDeath")
loop
DeathLoop3Start:
HKDR E 0 A_SetUserVar("user_CountDown",0)
HKDR E 0 A_TakeFromTarget("HookDrillStopFlag_V",1)
HKDR E 0 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_USECALLERANGLE|WARPF_NOCHECKPOSITION)
HKDR E 0 A_ChangeFlag("CEILINGHUGGER",1)
HKDR E 0 A_ChangeFlag("NOCLIP",1)
HKDR E 0 ACS_NamedExecuteAlways("core_drawhookshot", 0, user_PTID, 18)
DeathLoop3:
HKDR E 0 A_PlaySoundEx("weapon/drillshredder","Body")
HKDR E 0 A_SetUserVar("user_CountDown",user_CountDown + 4)
HKDR E 0 A_JumpIf(user_CountDown == 175, "SuperDeath")
TNT1 A 0 A_JumpIfInTargetInventory("HookDrillTimer3_V",175,"SuperDeath")
TNT1 A 0 A_JumpIfInTargetInventory("HookDrillNo_P_V",1,"SuperDeath")
HKDR E 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"SuperDeath") TNT1 A 0 ACS_NamedExecuteWithResult("Vile_HookDrillFollowPlayer")
HKDR F 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"SuperDeath") TNT1 A 0 ACS_NamedExecuteWithResult("Vile_HookDrillFollowPlayer")
HKDR E 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"SuperDeath") TNT1 A 0 ACS_NamedExecuteWithResult("Vile_HookDrillFollowPlayer")
HKDR F 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"SuperDeath") TNT1 A 0 ACS_NamedExecuteWithResult("Vile_HookDrillFollowPlayer")
HKDR EEEEE 0 A_SpawnItemEx("DrillSplasherDebrisNotClientSide_V",random(-8,8),random(-8,8),-8,random(-8,8),random(-8,8),-8,0,SXF_TRANSFERPOINTERS|SXF_NOCHECKPOSITION)
loop
SuperDeathPoof:
HKDR E 0 A_PlaySoundEx("weapon/adapterreturn","Weapon")
HKDR E 0 A_TakeFromTarget("WireAdaptorDelay",1)
HKDR E 0 A_TakeFromTarget("HookDrillAnimFlag_V",1)
HKDR E 0 A_TakeFromTarget("HookDrillCeilingFlag_V",1)
HKDR E 0 A_ChangeFlag("NOINTERACTION",1)
HKDR E 0 A_ChangeFlag("CEILINGHUGGER",0)
HKDR E 0 A_ChangeFlag("NOCLIP",0)
HKDR E 6 A_Stop
stop
SuperDeath:
HKDR E 0 A_TakeFromTarget("WireAdaptorDelay",1)
HKDR E 0 A_TakeFromTarget("HookDrillAnimFlag_V",1)
HKDR E 0 A_TakeFromTarget("HookDrillCeilingFlag_V",1)
HKDR E 0 A_SpawnItemEx("HookDrillEndFX_V",0,0,0,0,0,0,0,1)
HKDR E 0 A_ChangeFlag("CEILINGHUGGER",0)
HKDR E 0 A_ChangeFlag("NOCLIP",0)
stop
}
}

Actor HookDrill_VFX : WireAdaptorHookFX
{
States
{
Spawn:
TNT1 A 0
HKDR G 1
Stop
}
}

actor HookDrillStop_V : CustomInventory
{
States
{
Pickup:
TNT1 A 0 SetPlayerProperty(0,1,3)
TNT1 A 0 SetPlayerProperty(0,1,4)
TNT1 A 0 A_GiveInventory("HookDrillCeilingFlag_V",1)
TNT1 A 0 A_ChangeVelocity(0,0,0,CVF_REPLACE)
stop
}
}

actor HookDrillCeilingFlag_V : Once {}
actor HookDrillCanFallFlag_V : Once {}

actor DrillSplasherDebrisNotClientSide_V : BasicProjectile
{
+HEXENBOUNCE
bouncefactor 0.36
wallbouncefactor 0.36
bouncecount 2
PROJECTILE
-NOGRAVITY
Damage (CallACS("vile_cbm_damage",11))
Height 16
Radius 16
Scale 2.5
Speed 27
+DONTSPLASH
Obituary "$OB_HOOKDRILL"
DamageType "HookDrillDebris_V"
states
{
Spawn:
TNT1 A 0
TNT1 A 0 A_Jump(256,"Debris1","Debris2","Debris3","Debris4")
Debris1:
TNT1 A 1
DRSL A 1
wait
Debris2:
TNT1 A 1
DRSL B 1
wait
Debris3:
TNT1 A 1
DRSL C 1
wait
Debris4:
TNT1 A 1
DRSL E 1
wait
Death:
TNT1 A 0 A_SpawnItemEx("ExplosionEffect1",0,0,0,0,0,0,0,1)
Stop
}
}

actor DrillSplasherDebrisNotClientSideMelee_V : DrillSplasherDebrisNotClientSide_V {Damage (1) DamageType "HookDrillMelee_V"}

Actor HookDrillMelee_V : BasicFastProjectile
{
PROJECTILE
+BLOODSPLATTER
+DONTBLAST
+FORCEXYBILLBOARD
+RIPPER
Obituary "$OB_HOOKDRILL"
DamageType "HookDrillMelee_V"
Scale 2.5
Damage (CallACS("vile_cbm_damage",7))
Radius 16
Height 16
Speed 75
states
{
Spawn:
TNT1 AA 1
goto Death2
Death:
HKDR E 0 A_PlaySoundEx("weapon/drillshredder","Body")
HKDR EEEEE 0 A_SpawnItemEx("DrillSplasherDebrisNotClientSideMelee_V",random(-8,8),random(-8,8),random(12,24),random(-8,8),random(-8,8),random(-8,8),0,SXF_TRANSFERPOINTERS)
MMFX DE 2 A_Stop
stop
Death2:
MMFX D 1 A_Stop
MMFX D 1 A_Stop
MMFX E 1 A_Stop 
MMFX E 1 A_Stop 
stop
}
}

actor HookDrillMeleeProtect_V : PowerProtection
{
	Powerup.Duration 4
	DamageFactor "HookDrillMelee", 0.0
}

actor HookDrillStopFlag_V : Powerup {powerup.duration 8}
actor HookDrillFlashEndFlag_V : Powerup {powerup.duration 8}
actor HookDrillMeleeFireFlag_V : Powerup {powerup.duration 4}

actor HookDrillEndFX_V //: BasicGraphicEffect
{
-NOGRAVITY
+THRUACTORS
+THRUGHOST
+CLIENTSIDEONLY
Damage (0)
Height 0
Radius 0
Scale 2.5
states
{
Spawn:
TNT1 AA 0 A_GiveInventory("MM8BDMProjSpawnFuncClient", 1)
HKDR H 0 A_PlaySoundEx("weapon/drillfly","Body")
HKDR H 1 A_CheckFloor("Death")
TNT1 A 1 A_CheckFloor("Death")
goto Spawn+3
Death:
TNT1 A 0 A_SpawnItemEx("ExplosionEffect1",0,0,0,0,0,0,0,1)
Stop
}}

actor HookDrillTimer_V : inventory
{
inventory.amount 1
inventory.maxamount 2
+INVENTORY.IGNORESKILL
}

actor HookDrillTimer2_V : inventory
{
inventory.amount 1
inventory.maxamount 175
+INVENTORY.IGNORESKILL
}

actor HookDrillTimer3_V : HookDrillTimer2_V {}