Actor NeedleCrusherWep_V_NormalBar : NormalBar {Args 209, 220}
actor NeedleCrusherWep_V : BaseMM8BDMWep
{
Weapon.AmmoUse 6
Weapon.AmmoGive 60
Weapon.SlotNumber 4
Inventory.Pickupmessage "$PU_NEEDLECRUSHER"
Obituary "$OB_NEEDLECRUSHER"
Tag "$TAG_NEEDLECRUSHER"
weapon.ammotype "NeedleCrusherAmmo_V"
inventory.icon "NDCRICON"
States
{
SpawnLoop:
NDCR A 1
loop
ReadyC: Goto Ready+1
Ready:
NDCR B 0 ACS_NamedExecuteWithResult("core_weaponcolor",COLOR_NEEDLECRUSHER)
NDCR B 1 A_WeaponReady
Goto Ready+1
Deselect:
NDCR B 0
goto DeselectSwap
Select:
NDCR B 0
goto SelectSwap
Fire:
NDCR B 0 A_JumpIfNoAmmo("NoAmmo")
NDCR B 0 A_PlaySoundEx("weapon/lasertrident","Weapon")
NDCR B 0 A_FireCustomMissile("NeedleCrusher_V",0,1,8,0)
NDCR CD 3
NDCR D 13
NDCR C 1
NDCR B 8
NDCR B 0 A_Refire
Goto Ready+1
NoAmmo:
NDCR B 1 ACS_NamedExecuteAlways("core_noammo", 0)
Goto Ready+1
}
}

actor NeedleCrusherAmmo_V : Ammo
{
inventory.amount 1
inventory.maxamount 60
+INVENTORY.IGNORESKILL
}

actor NeedleCrusherMaster_V : BasicProjectile
{
    +NOCLIP
    +NOINTERACTION
    +THRUGHOST
    Radius 13
    Height 13
    damage (0)
    speed 30
	Translation "192:192=209:209", "198:198=220:220"
}

actor NeedleCrusher_V : NeedleCrusherMaster_V
{
States
{
Spawn:
NHED A 0
NHED A 0 ACS_NamedExecuteWithResult("core_drawhookshot", ACS_NamedExecuteWithResult("core_gettarget"), 32, 8, DHS_MAXDIST + 1024)
NHED A 0 A_SpawnItemEx("NeedleCrusherWallDetector_V", 0, 0, 0, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM|SXF_TRANSFERPOINTERS)
NHED AA 1 A_SpawnItemEx("NeedleCrusherDamager_V",0,0,0,2,0,0)
NHED A 0 A_SpawnItemEx("ThunderClawPegHelper")
NHED AAAAAAAA 1 A_SpawnItemEx("NeedleCrusherDamager_V",0,0,0,2,0,0)
NHED A 0 A_SpawnItemEx("ThunderClawPegHelper")
NHED A 0 A_ScaleVelocity(0.5)
NHED AA 1 A_SpawnItemEx("NeedleCrusherDamager_V",0,0,0,2,0,0)
NHED A 0 A_SpawnItemEx("ThunderClawPegHelper")
NHED A 0 A_ScaleVelocity(0.5)
NHED AA 1 A_SpawnItemEx("NeedleCrusherDamager_V",0,0,0,2,0,0)
NHED A 0 A_SpawnItemEx("ThunderClawPegHelper")
NHED A 0 A_ScaleVelocity(-2.0)
NHED AA 1 A_SpawnItemEx("NeedleCrusherDamager_V",0,0,0,2,0,0)
NHED A 0 A_SpawnItemEx("ThunderClawPegHelper")
NHED A 0 A_CustomMissile("ReturningNeedleCrusher_V",0,0,0,0)
stop
}
}

Actor NeedleCrusher_VFX : BasicGraphicEffect
{
+NOTIMEFREEZE
Translation "192:192=209:209", "198:198=220:220"
States
{
SpawnFrame:
NHED C 0
NHED C 1
stop
}
}

actor ReturningNeedleCrusher_V : NeedleCrusher_V
{
States
{
Spawn:
NHED B 0
NHED B 0 ACS_NamedExecuteWithResult("core_drawhookshot", ACS_NamedExecuteWithResult("core_gettarget"), 32, 8, DHS_MAXDIST + 1024)
NHED B 0 A_SpawnItemEx("NeedleCrusherWallDetectorReturn_V", 0, 0, 0, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM|SXF_TRANSFERPOINTERS)
NHED B 0 A_JumpIfCloser(64,"Death")
NHED BB 1 A_SpawnItemEx("NeedleCrusherDamager2_V",0,0,0,2,0,0)
NHED B 0 A_JumpIfCloser(64,"Death")
NHED BB 1 A_SpawnItemEx("NeedleCrusherDamager2_V",0,0,0,2,0,0)
NHED B 0 A_JumpIfCloser(64,"Death")
NHED BB 1 A_SpawnItemEx("NeedleCrusherDamager2_V",0,0,0,2,0,0)
NHED B 0 A_JumpIfCloser(64,"Death")
NHED BB 1 A_SpawnItemEx("NeedleCrusherDamager2_V",0,0,0,2,0,0)
NHED B 0 A_JumpIfCloser(64,"Death")
NHED BB 1 A_SpawnItemEx("NeedleCrusherDamager2_V",0,0,0,2,0,0)
NHED B 0 A_JumpIfCloser(64,"Death")
NHED B 0 A_CustomMissile("ReturningNeedleCrusher_V",0,0,0,0)
stop
Death:
NHED B 0
Stop
}
}

Actor ReturningNeedleCrusher_VFX : NeedleCrusher_VFX {}

actor NeedleCrusherWallDetector_V : NeedleCrusherMaster_V
{
    +THRUACTORS
    -NOCLIP
    -NOINTERACTION
    +CLIENTSIDEONLY // ?
    renderstyle "none"
    States
    {
    Spawn:
        PLY1 A 0
        PLY1 AA 1
        PLY1 AAAAAAAA 1
        PLY1 A 0 A_ScaleVelocity(0.5)
        PLY1 AA 1
        PLY1 A 0 A_ScaleVelocity(0.5)
        PLY1 AA 1
        PLY1 A 0 A_ScaleVelocity(-2.0)
        PLY1 AA 1
        PLY1 A 0
        stop
    Death:
        PLY1 A 0 A_SpawnItemEx("NeedleCrusherWallFX_V", -momx, -momy, -momz, 0, 0, 0, 0, SXF_ABSOLUTEPOSITION|SXF_TRANSFERPOINTERS)
        stop
    }
}

actor NeedleCrusherWallDetectorReturn_V : NeedleCrusherWallDetector_V
{
    States
    {
    Spawn:
        PLY1 A 0
        PLY1 AA 1 A_JumpIfCloser(64, "End")
        PLY1 AA 1 A_JumpIfCloser(64, "End")
        PLY1 AA 1 A_JumpIfCloser(64, "End")
        PLY1 AA 1 A_JumpIfCloser(64, "End")
        PLY1 AA 1 A_JumpIfCloser(64, "End")
        stop
    End:
        TNT1 A 0
        stop
    }
}

actor NeedleCrusherDamager_V : BasicProjectile
{
+DONTSPLASH
+DONTBLAST
+THRUGHOST
+DONTREFLECT
Damagetype "NeedleCrusher_V" 
Obituary "$OB_NEEDLECRUSHER"
radius 16
height 8
Damage (CallACS("vile_cbm_damage",26))
States
{
Spawn:
TNT1 A 2
stop
}
}

actor NeedleCrusherDamager2_V : NeedleCrusherDamager_V
{
Damagetype "NeedleCrusher2_V" 
}


actor NeedleCrusherWallFX_V : BasicGraphicEffect
{
    +FORCEXYBILLBOARD
    +BRIGHT
	Translation "236:236=209:209", "3:3=220:220"
    States
    {
    SpawnFrame:
        TNT1 A 0
        MCAR MN 2
        stop
    }
}

Actor NeedleCrusherProtect_V : PowerProtection
{
	Powerup.Duration 17
	DamageFactor "NeedleCrusher_V", 0.0
}
Actor NeedleCrusherProtect2_V : PowerProtection
{
	Powerup.Duration 17
	DamageFactor "NeedleCrusher2_V", 0.0
}