actor AssaultLanceWep_NormalBar : NormalBar { args 228, 232 }
actor AssaultLanceWep : BaseMM8BDMWep
{
dropitem "AssaultLanceWep"
Weapon.AmmoUse 4
Weapon.AmmoGive 28
Weapon.SlotNumber 4
Inventory.Pickupmessage "$PU_ASSAULTLANCE"
Obituary "$OB_ASSAULTLANCE"
Tag "$TAG_ASSAULTLANCE"
weapon.ammotype "AssaultLanceAmmo"
inventory.icon "ALNCICON"
States
{
SpawnLoop:
ALNC Z -1
loop
Ready:
ALNC A 0 ACS_NamedExecuteWithResult("core_weaponcolor",COLOR_ASSAULTLANCE)
ALNC AA 1 A_WeaponReady
Goto Ready+1
ReadyC: Goto Ready+1
Deselect:
ALNC A 0
goto DeselectSwap
Select:
ALNC A 0
goto SelectSwap
Fire:
ALNC A 0 A_JumpIfNoAmmo("NoAmmo")
ALNC B 0 A_GunFlash("Flash.ShieldRise")
ALNC BC 2
ALNC C 1 A_GiveInventory("CutterFlag", 12)
ALNC A 0 A_GiveInventory("TakeAssaultLanceAmmo",1) //sync >_>
ALNC A 0 A_TakeInventory("WeaponCharge", 999)
ALNC E 0 A_Recoil(-50)
ALNC E 0 A_PlaySoundEx("weapon/assaultlancedash","Weapon")
Goto DashAttack
DashAttack:
ALNC D 0 ACS_NamedExecuteAlways("vile_statechange",0,2)
ALNC D 1 A_GiveInventory("AssaultLance_P1",1)
ALNC D 0 A_JumpIfInventory("AssaultLanceRecoil",1,"Impact")
ALNC D 1 A_GiveInventory("AssaultLance_P1",1)
ALNC D 0 ACS_NamedExecuteAlways("vile_statechange",0,2)
ALNC D 0 A_JumpIfInventory("AssaultLanceRecoil",1,"Impact")
ALNC E 1 A_GiveInventory("AssaultLance_P2",1)
ALNC E 0 A_JumpIfInventory("AssaultLanceRecoil",1,"Impact")
ALNC E 1 A_GiveInventory("AssaultLance_P2",1)
ALNC E 0 A_JumpIfInventory("AssaultLanceRecoil",1,"Impact")
ALNC E 0 A_JumpIfInventory("CutterFlag", 1, "DashAttack")
goto DashFinish
Impact:
ALNC E 0 A_Stop
ALNC E 0 A_PlaySoundEx("weapon/assaultlancecrash", "weapon")
ALNC E 0 A_ChangeVelocity(-7, 0, 6.5, CVF_RELATIVE|CVF_REPLACE)
goto DashFinish+1
DashFinish:
ALNC E 0 A_ScaleVelocity(0.25)
ALNC A 0 ACS_NamedExecuteWithResult("core_freezeplayer",0,0)
ALNC CB 3
ALNC A 0 A_TakeInventory("CutterFlag", 999)
ALNC A 6 A_TakeInventory("WeaponCharge", 999)
ALNC AAA 2
ALNC A 2 A_GiveInventory("StopShield",1)
ALNC A 2 A_TakeInventory("StopShield",1)
ALNC A 0 A_Refire
Goto Ready+1
Flash.ShieldRise:
TNT1 A 0 A_SpawnItemEx("AssaultShieldHitbox1",36,-16,8,0,0,0,0,1)
TNT1 A 0 A_SpawnItemEx("AssaultShieldHitbox2",36,-8,8,0,0,0,0,1)
TNT1 A 0 A_SpawnItemEx("AssaultShieldHitbox3",36,0,8,0,0,0,0,1)
TNT1 A 0 A_SpawnItemEx("AssaultShieldHitbox4",36,8,8,0,0,0,0,1)
TNT1 A 0 A_SpawnItemEx("AssaultShieldHitbox5",36,16,8,0,0,0,0,1)
ALNC FGHI 2
ShieldLoop:
ALNC I 1 
ALNC I 1 A_JumpIfInventory("StopShield",1,"NoFlash")
loop
NoFlash:
ALNC IHGF 1
stop
NoAmmo:
ALNC A 1 ACS_NamedExecuteAlways("core_noammo",0)
Goto Ready+1
}
}

actor AssaultLanceAmmo : Ammo
{
inventory.amount 1
inventory.maxamount 28
+INVENTORY.IGNORESKILL
}
actor AssaultLanceProtect : PowerProtection
{
Powerup.Duration 8
DamageFactor "AssaultLance", 0.0
}

actor TakeAssaultLanceAmmo : CustomInventory
{
states
{
Pickup:
TNT1 A 0 A_TakeInventory("AssaultLanceAmmo", 4, TIF_NOTAKEINFINITE)
stop
}
}

actor AssaultLance : BasicProjectile
{
    PROJECTILE +THRUGHOST
    Obituary "$OB_ASSAULTLANCE"
    Damagetype "AssaultLance"
    height 24
    radius 24
	scale 2.5
    speed 32
	+DONTREFLECT
    Damage (CallACS("vile_cbm_damage",33))
	var int user_PierceRipper;

    States
    {
    Spawn:
        TNT1 A 0
        TNT1 A 1
        stop
    Death:
        TNT1 A 0 A_GiveToTarget("AssaultLanceRecoil", 1)
		TNT1 A 0 A_Explode(CallACS("vile_cbm_damage",33),64,0,0,32)
		TNT1 UUVVWWXX 1 A_SpawnItemEx("PropBlowerEffect")
        stop
    }
}


actor AssaultLanceFX_Lance : BasicGraphicEffect
{
    States
    {
    SpawnFrame:
        ALNC K 1
        stop
    }
}

actor AssaultLanceFX_Shield : BasicGraphicEffect
{
    States
    {
    SpawnFrame:
        ALNC J 1
        stop
    }
}

actor AssaultLanceFX_Boost1 : BasicGraphicEffect
{
    States
    {
    SpawnFrame:
        ALNC X 1
        stop
    }
}

actor AssaultLanceFX_Boost2 : BasicGraphicEffect
{
    States
    {
    SpawnFrame:
        ALNC Y 1
        stop
    }
}

actor AssaultLance_P1 : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_ChangeVelocity(40,0,0,CVF_RELATIVE|CVF_REPLACE)
TNT1 A 0 A_SpawnItemEx("AssaultLance", 24, 0, 32, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM)
TNT1 A 0 A_SpawnItemEx("AssaultLanceFX_Lance", 24, 10, 32, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM)
TNT1 A 0 A_SpawnItemEx("AssaultLanceFX_Shield", 24, -15, 18, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM)
TNT1 A 0 A_SpawnItemEx("AssaultLanceFX_Boost1", -16, 0, 24, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM)
TNT1 D 0 A_TakeInventory("CutterFlag", 1)
stop
}
}

actor AssaultLance_P2 : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_ChangeVelocity(40,0,0,CVF_RELATIVE|CVF_REPLACE)
TNT1 A 0 A_SpawnItemEx("AssaultLance", 24, 0, 32, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM)
TNT1 A 0 A_SpawnItemEx("AssaultLanceFX_Lance", 24, 10, 32, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM)
TNT1 A 0 A_SpawnItemEx("AssaultLanceFX_Shield", 24, -15, 18, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM)
TNT1 A 0 A_SpawnItemEx("AssaultLanceFX_Boost2", -16, 0, 24, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM)
TNT1 A 0 A_TakeInventory("CutterFlag", 1)
stop
}
}

actor AssaultLanceRecoil : Powerup
{
    powerup.duration 10
}

actor AssaultShieldHitbox1 : BasicShieldHitbox
{
Meleerange 96
Accuracy -16
Mass 8
}
actor AssaultShieldHitbox2 : AssaultShieldHitbox1
{
Accuracy -8
}
actor AssaultShieldHitbox3 : AssaultShieldHitbox1
{
Accuracy 0
}
actor AssaultShieldHitbox4 : AssaultShieldHitbox1
{
Accuracy 8
}
actor AssaultShieldHitbox5 : AssaultShieldHitbox1
{
Accuracy 16
}

actor AssaultLanceKnockback : Vile_KnockbackHelper
{
Mass 20
Accuracy 0
}
