actor NeapolitanBombWep_NormalBar : NormalBar{args 36, 165}
actor NeapolitanBombWep : BaseMM8BDMWep
{
Weapon.AmmoUse 3
Weapon.AmmoGive 28
Weapon.SlotNumber 5
Inventory.Pickupmessage "$PU_NEAPOLITANBOMB"
Obituary "$OB_NEAPOLITANBOMB"
Tag "$TAG_NEAPOLITANBOMB"
weapon.ammotype "NeapolitanBombAmmo"
inventory.icon "NEABICON"
States
{
SpawnLoop:
NEAB Z 1
loop
Ready:
NEAB A 0 ACS_NamedExecuteWithResult("core_weaponcolor",COLOR_NEAPOLITANBOMB)
NEAB A 1 A_WeaponReady
Goto Ready+1
ReadyC: Goto Ready+1
Deselect:
NEAB A 0 
goto DeselectSwap
Select:
NEAB A 0 
goto SelectSwap
Fire:
NEAB A 0 A_JumpIfNoAmmo("NoAmmo")
NEAB A 0 A_PlaySoundEx("weapon/mbuster", "Weapon")
NEAB A 0 A_FireCustomMissile("NeapolitanBomb",0,1,8,0)
NEAB BC 7
NEAB A 15 
NEAB A 0 A_Refire
Goto Ready+1
NoAmmo:
NEAB A 1 ACS_NamedExecuteAlways("core_noammo",0)
Goto Ready+1
}
}

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

actor NeapolitanBomb : BasicProjectile
{
PROJECTILE
Obituary "$OB_NEAPOLITANBOMB"
damagetype "NeapolitanBomb"
Radius 17
Height 17
+HEXENBOUNCE
+THRUACTORS //THIS is so we don't get a division by zero error with an inside meatshot.
bouncefactor 0.5
wallbouncefactor 0.5
Damage (CallACS("vile_cbm_damage",47))
Speed 45
scale 2.5
Accuracy 12//Sections
Args 20,7 //speed, lines
States
{
Spawn:
NPBM A 1
TNT1 A 0 A_SetArg(3,Args[1]+1)
TNT1 A 0 A_SetArg(4,Accuracy)
NPBM C 1 A_ChangeFlag("THRUACTORS",0)
NPBM A 0 A_Jump(256, "Vanilla", "Strawberry", "Chocolate")
loop
Vanilla:
NPBM B 0 A_GiveInventory("WeaponCharge",1)
NPBM BABABA 3 A_ScaleVelocity(0.75)
NPBM BA 3 A_Stop
goto DeathVanilla
Strawberry:
NPBM B 0 A_GiveInventory("WeaponCharge",2)
NPBM CACACA 3 A_ScaleVelocity(0.75)
NPBM CA 3 A_Stop
goto DeathStrawberry
Chocolate:
NPBM B 0 A_GiveInventory("WeaponCharge",3)
NPBM DADADA 3 A_ScaleVelocity(0.75)
NPBM DA 3 A_Stop
goto DeathChocolate
DeathVanilla:
TNT1 A 0 A_SpawnItemEx("NeapolitanCluster_V",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
NPBM A 0 A_PlaySoundEx("weapon/neapolitanbomb", "Weapon")
MMFX FGHI 3 A_Stop
stop
DeathStrawberry:
TNT1 A 0 A_SpawnItemEx("NeapolitanCluster_S",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
NPBM A 0 A_PlaySoundEx("weapon/neapolitanbomb", "Weapon")
MMFX FGHI 3 A_Stop
stop
DeathChocolate:
TNT1 A 0 A_SpawnItemEx("NeapolitanCluster_C",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
NPBM A 0 A_PlaySoundEx("weapon/neapolitanbomb", "Weapon")
MMFX FGHI 3 A_Stop
stop
XDeath:
NPBM A 0
NPBM A 0 A_PlaySoundEx("weapon/neapolitanbomb", "Weapon")
NPBM A 0 A_JumpIfInventory("WeaponCharge",3,"DeathChocolate")
NPBM A 0 A_JumpIfInventory("WeaponCharge",2,"DeathStrawberry")
goto DeathVanilla
}
}

actor NeapolitanBombShot2-V : BasicProjectile
{
PROJECTILE
Obituary "$OB_NEAPOLITANBOMB"
damagetype "NeapolitanBombSplit"
Radius 6
Height 6
Damage (CallACS("vile_cbm_damage",17))
Speed 25
scale 2.5
reactiontime 14
States
{
Spawn:
NPBM E 1 A_CountDown
loop
Death:
MMFX FGHI 3 A_Stop
stop
}
}

actor NeapolitanBombShot2-S : NeapolitanBombShot2-V
{
PROJECTILE
States
{
Spawn:
NPBM F 1 A_CountDown
loop
}
}

actor NeapolitanBombShot2-C : NeapolitanBombShot2-V
{
PROJECTILE
States
{
Spawn:
NPBM G 1 A_CountDown
loop
}
}

actor NeapolitanCluster_V : BasicProjectile
{
damage (0)
Obituary "$OB_NEAPOLITANBOMB"
damagetype "NeapolitanBombSplit"
renderstyle none
Reactiontime 6//Sections
Args 20,6 //speed, lines
+NOINTERACTION
//Speed/lines
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_JumpIf(true, 1)
stop
TNT1 A 0 A_SetArg(3,Args[1]+1)
TNT1 A 0 A_SetArg(4,Reactiontime)
SpawnL:
TNT1 A 0 A_SpawnItemEx("NeapolitanBombShot2-V",Cos(90-180/Args[3]*Args[1])*Args[0],0,Sin(90-180/Args[3]*Args[1])*Args[0],Cos(90-180/Args[3]*Args[1])*Args[0],0,Sin(90-180/Args[3]*Args[1])*Args[0],360/Args[4]*Reactiontime,1)
TNT1 A 0 A_SetArg(1,Args[1]-1)
TNT1 A 0 A_JumpIf(Args[1]>0,"SpawnL")
TNT1 A 0 A_Countdown
TNT1 A 0 A_SetArg(1,Args[3]-1)
TNT1 A 0 A_JumpIf(Args[1]>0 && Args[3]>0,"SpawnL")
//stop
Death:
TNT1 A 0 A_SpawnItemEx("NeapolitanBombShot2-V",0,0,Args[0],0,0,Args[0],0,1)
TNT1 A 0 A_SpawnItemEx("NeapolitanBombShot2-V",0,0,-Args[0],0,0,-Args[0],0,1)
TNT1 A 1
stop
}
}

actor NeapolitanCluster_S : NeapolitanCluster_V
{
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_JumpIf(true, 1)
stop
TNT1 A 0 A_SetArg(3,Args[1]+1)
TNT1 A 0 A_SetArg(4,Reactiontime)
SpawnL:
TNT1 A 0 A_SpawnItemEx("NeapolitanBombShot2-S",Cos(90-180/Args[3]*Args[1])*Args[0],0,Sin(90-180/Args[3]*Args[1])*Args[0],Cos(90-180/Args[3]*Args[1])*Args[0],0,Sin(90-180/Args[3]*Args[1])*Args[0],360/Args[4]*Reactiontime,1)
TNT1 A 0 A_SetArg(1,Args[1]-1)
TNT1 A 0 A_JumpIf(Args[1]>0,"SpawnL")
TNT1 A 0 A_Countdown
TNT1 A 0 A_SetArg(1,Args[3]-1)
TNT1 A 0 A_JumpIf(Args[1]>0 && Args[3]>0,"SpawnL")
//stop
Death:
TNT1 A 0 A_SpawnItemEx("NeapolitanBombShot2-S",0,0,Args[0],0,0,Args[0],0,1)
TNT1 A 0 A_SpawnItemEx("NeapolitanBombShot2-S",0,0,-Args[0],0,0,-Args[0],0,1)
TNT1 A 1
stop
}
}


actor NeapolitanCluster_C : NeapolitanCluster_V
{
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_JumpIf(true, 1)
stop
TNT1 A 0 A_SetArg(3,Args[1]+1)
TNT1 A 0 A_SetArg(4,Reactiontime)
SpawnL:
TNT1 A 0 A_SpawnItemEx("NeapolitanBombShot2-C",Cos(90-180/Args[3]*Args[1])*Args[0],0,Sin(90-180/Args[3]*Args[1])*Args[0],Cos(90-180/Args[3]*Args[1])*Args[0],0,Sin(90-180/Args[3]*Args[1])*Args[0],360/Args[4]*Reactiontime,1)
TNT1 A 0 A_SetArg(1,Args[1]-1)
TNT1 A 0 A_JumpIf(Args[1]>0,"SpawnL")
TNT1 A 0 A_Countdown
TNT1 A 0 A_SetArg(1,Args[3]-1)
TNT1 A 0 A_JumpIf(Args[1]>0 && Args[3]>0,"SpawnL")
//stop
Death:
TNT1 A 0 A_SpawnItemEx("NeapolitanBombShot2-C",0,0,Args[0],0,0,Args[0],0,1)
TNT1 A 0 A_SpawnItemEx("NeapolitanBombShot2-C",0,0,-Args[0],0,0,-Args[0],0,1)
TNT1 A 1
stop
}
}


actor NeapolitanBombProtect : PowerProtection
{
Powerup.Duration 8
damagefactor "NeapolitanBomb", 0.0
damagefactor "NeapolitanBombSplit", 0.0
}
actor NeapolitanBombSplitProtect : PowerProtection
{
Powerup.Duration 2
damagefactor "NeapolitanBombSplit", 0.47
}