actor BlackSwelterWep_NormalBar : NormalBar{args 144, 78}
actor BlackSwelterWep_ScriptBar : ScriptBar{}
actor BlackSwelterWep : BaseMM8BDMWep
{
Weapon.Ammouse 7
Weapon.AmmoGive 28
Weapon.SlotNumber 6
Obituary "$OB_BLACKSWELTER"
Tag "$TAG_BLACKSWELTER"
Inventory.Pickupmessage "$PU_BLACKSWELTER"
weapon.ammotype "BlackSwelterAmmo"
inventory.icon "BSWTICON"
States
{
SpawnLoop:
BSWT Z 1
loop
Ready:
BSWT J 0 ACS_NamedExecuteWithResult("core_weaponcolor",COLOR_BLACKSWELTER)
BSWT J 0 A_JumpIfInventory("BlackSwelterCooldownFlag",1,"ReadyCooldown")
BSWT J 1 A_WeaponReady
Goto Ready+1
ReadyC: Goto Ready+1
ReadyCooldown:
BSWT J 1 A_WeaponReady(WRF_NOFIRE)
Goto Ready+1

Deselect:
BSWT J 0
goto DeselectSwap
Select:
BSWT K 0
goto SelectSwap
Fire:
BSWT J 0 A_JumpIfNoAmmo("NoAmmo")
BSWT K 0 A_TakeInventory("BlackSwelterAmmo",7,TIF_NOTAKEINFINITE)
TNT1 A 0 A_PlaySoundEx("Weapon/BlackSwelter","Weapon")
BSWT K 3 A_SpawnItemEx("BlackSwelterSpawn",0,0,16)
HPMK A 0 A_GiveInventory("BlackSwelterCooldownFlag",1)
HPMK A 0 A_SpawnItemEx("BlackSwelterCooldowner")

BSWT LMNOP 2
BSWT J 3
goto Ready+1
NoAmmo:
BSWT J 1 ACS_NamedExecute("core_noammo",0)
goto Ready+1
}
}

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

actor BlackSwelterSpawn : BasicWatcher
{
    var int user_shockwave;
    States
    {
    Spawn:
        TNT1 A 0
        TNT1 A 0 A_SetUserVar(user_shockwave, 5)
        TNT1 A 0 A_JumpIf(true, "ExplodeLoop")
        TNT1 A 10
        stop
    ExplodeLoop:
        TNT1 A 0 A_SpawnItemEx("BlackSwelterShockWave", 10, 0, 10, 1.0, 0, 0, user_shockwave*(360/5), SXF_MULTIPLYSPEED)
        TNT1 A 0 A_SpawnItemEx("BlackSwelterShockWave2", 10, 0, 10, 1.0, 0, 0, user_shockwave*(360/5)+45, SXF_MULTIPLYSPEED)
        TNT1 A 0 A_SetUserVar(user_shockwave, user_shockwave-1)
        TNT1 A 0 A_JumpIf(user_shockwave > 0, "ExplodeLoop")
        stop
    End:
        TNT1 A 0
        stop
    }
}

actor BlackSwelterShockWave : BasicProjectile
{
+FORCEXYBILLBOARD
+NOINTERACTION
Radius 38
Height 10
damage (0)
damagetype "BlackSwelter"
Obituary "$OB_BLACKSWELTER"
speed 0
args 25, 5000, 16, 36
reactiontime 35
var int user_PierceRipper;
var int user_FuckingDamage;
States
{
Spawn:
BSWT X 0
BSWT X 0 A_Setangle(angle+args[ARGC_MAXTURN]/args[ARGC_TURNDIVISOR])
Spawn2:
BSWT XXYY 1 A_GiveInventory("BlackSwelterWaveFunc", 1)
Spawn3:
BSWT XXYY 1 A_GiveInventory("BlackSwelterWaveFunc2", 1)
loop
Death:
TNT1 AAAA 0 A_SpawnItemEX("CaveStoryExplosionSmoke",0,0,0,random(-2,2),random(-2,2),random(-2,2))
TNT1 A 2 A_Explode(CallACS("vile_cbm_damage",30), 32, 0, 0, 32)
stop
}
}

actor BlackSwelterShockWave2 : BlackSwelterShockWave
{
args 12, 5000, -16, -56
}


actor BlackSwelterWaveFunc : CustomInventory
{
var int user_FuckingDamage;
    States
    {
    Pickup:
        TNT1 A 0 A_CountDown
        TNT1 A 0 A_Explode(CallACS("vile_cbm_damage",7), 32, 0, 0, 32)
        TNT1 A 0 A_GiveInventory("RotateFunc", 1)
        stop
    }
}

actor BlackSwelterWaveFunc2 : CustomInventory
{
var int user_FuckingDamage;
    States
    {
    Pickup:
        TNT1 A 0 A_CountDown
        TNT1 A 0 A_Explode(CallACS("vile_cbm_damage",18), 32, 0, 0, 32)
        TNT1 A 0 A_GiveInventory("RotateFunc", 1)
        stop
    }
}


actor BlackSwelterCooldownFlag : Once {}

actor BlackSwelterCooldowner : BasicCooldowner
{
reactiontime 80
States
{
Spawn:
TNT1 A 0
Spawn2:
TNT1 A 1 A_GiveInventory("BlackSwelterCooldownerFunc",1)
loop
Death:
TNT1 A 0 A_TakeFromTarget("BlackSwelterCooldownFlag",1)
stop
}
}

actor BlackSwelterCooldownerFunc : BasicCooldownerFunc
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInTargetInventory("BlackSwelterCooldownFlag",1,"PickupBasic")
goto PickupRemove
}
}
