actor AcidBarrierBoss : BaseMM8BDMWep_CBM
{
	tag "$TAGC_11D"
	dropitem "AcidBarrierWepCDropped"
	Obituary "$OB_ACIDSHOT"
	
	weapon.ammotype "AcidDartAmmo"
	weapon.ammotype2 "AcidicBarrierAmmo"
	
	States
	{
		Spawn:
			C_00 F 1
			loop
		Ready:
			ACIE A 0 ACS_ExecuteWithResult(998,DYE_ACIDMAN)
			ACIE A 0 A_GunFlash
		
			// Don't let Acid do anything in speed gear until he's swimming
			ACIE A 0 A_JumpIfInventory("AcidInSpeedGear", 1, 2)
			ACIE A 0 A_JumpIfInventory("AcidSpeedGearTimer", 1, "ReadyWait")
			ACIE A 1 A_JumpIfInventory("AcidBarrierBoss", 1, 1)
			wait
			
			ACIE A 0 A_JumpIfInventory("AcidDartAmmo", 80, "Ready2")
			
			// Acid doesn't lose / gain ammo while swimming
			ACIE A 0 A_JumpIfInventory("AcidInSpeedGear", 1, 3)
			ACIE A 0 A_TakeInventory("AcidStockCount", 1)
			ACIE A 0 A_GiveInventory("AcidDartAmmo",1)
			
			ACIE A 1 A_WeaponReady(WRF_NOSECONDARY)
			Goto Ready+2
		Ready2:
			ACIE A 0 A_JumpIfInventory("AcidInSpeedGear", 1, 2)
			ACIE A 0 A_JumpIfInventory("AcidSpeedGearTimer", 1, "ReadyWait")
			ACIE A 1 A_JumpIfInventory("AcidBarrierBoss", 1, 1)
			wait
			
			ACIE A 1 A_WeaponReady
			
			// Acid doesn't lose / gain ammo while swimming
			ACIE A 0 A_JumpIfInventory("AcidInSpeedGear", 1, 3)
			ACIE A 0 A_TakeInventory("AcidStockCount", 1)
			ACIE A 0 A_GiveInventory("AcidDartAmmo",1)
			
			ACIE A 0
			Goto Ready2
		ReadyWait:
			ACIE A 1
			goto Ready+2

		Deselect:
			TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
			ACIE A 1 A_Lower
			loop
		Select:
			TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
			ACIE A 1 A_Raise
			loop
			
		Fire:
			"####" "#" 0 A_JumpIfInventory("AcidSpeedGearTimer", 140, 4)
			"####" "#" 0 A_JumpIfInventory("AcidInSpeedGear", 1, "SpeedGearFire")
			"####" "#" 0 A_JumpIfInventory("AcidStockCount", 1, "FireContinue")
			"####" "#" 1 A_JumpIfInventory("AcidBarrierBoss", 1, "DryFire")
			wait
			"####" "#" 1
			goto Ready+2
		FireContinue:
			ACIE B 0 A_TakeInventory("AcidStockCount", 70)
			
			ACIE B 0 A_GiveInventory ("AcidmanMain_CI", 1)
			ACIE B 0 A_PlaySoundEx("Weapon/AcidFire", "Weapon")
			
			ACIE B 0 A_GiveInventory("AcidDartAmmo",1)
			ACIE B 1 A_JumpIfInventory ("PowerRage_ST", 1, 1)
			ACIE C 1
			ACIE D 0 A_GiveInventory("AcidDartAmmo",1)
			ACIE D 1 A_JumpIfInventory ("PowerRage_ST", 1, 1)
			ACIE E 1 
			ACIE E 0 A_JumpIfInventory("AcidSpeedGearTimer", 1, 2)
			ACIE E 0 A_Refire
		FireEnd:
			ACIE F 0 A_GiveInventory("AcidDartAmmo",1)
			ACIE F 1 A_JumpIfInventory ("PowerRage_ST", 1, 1)
			ACIE P 1
			ACIE F 0 A_GiveInventory("AcidDartAmmo",1)
			ACIE F 1 A_JumpIfInventory ("PowerRage_ST", 1, 1)
			ACIE H 1 
			ACIE I 0 A_GiveInventory("AcidDartAmmo",1)
			ACIE I 1 A_JumpIfInventory ("PowerRage_ST", 1, 1)
			ACIE J 1
			Goto Ready+2
			
		DryFire:
			ACIE F 0 A_GiveInventory ("AcidmanMain_CI", 1)
			ACIE F 0 A_PlaySoundEx("Weapon/AcidFire", "Weapon")//BlastMainfire // I disagree this sound is worse
			
			ACIE B 0 A_GiveInventory("AcidDartAmmo",1)
			ACIE B 1 A_JumpIfInventory ("PowerRage_ST", 1, 1)
			ACIE C 1
			ACIE D 0 A_GiveInventory("AcidDartAmmo",1)
			ACIE D 1 A_JumpIfInventory ("PowerRage_ST", 1, 1)
			ACIE E 1 
		DryFireEnd:
			ACIE F 0 A_GiveInventory("AcidDartAmmo",1)
			ACIE F 1 A_JumpIfInventory ("PowerRage_ST", 1, 1)
			ACIE P 1 
			ACIE FHIJ 2 A_GiveInventory("AcidDartAmmo",1)
			Goto Ready+2
			
		SpeedGearFire:
			ACIE A 8 A_SpawnItemEx("AcidSpeedGearTimerTaker")
			goto Ready+2
			
		Altfire:
			ACIE A 0 A_JumpIf(z-floorz > 0, 3)
			ACIE A 0 A_JumpIfInventory("AcidInSpeedGear", 1, "SpeedGearAltfire")
			ACIE A 1 A_JumpIf(true, "AltfireDart")
			wait
			ACIE A 1
			goto Ready+2
		AltfireDart:
			ACIE A 0 A_GiveInventory("AcidDart_P", 1)
			ACIE AAAAAAA 1 A_GiveInventory("AcidStockCount", 30)
			ACIE A 3
			goto Ready+2
			
		SpeedGearAltfire:
			ACIE A 0 A_GiveInventory("AcidDartS_P", 1)
			ACIE A 0 A_SpawnItemEx("AcidDartTower_H", 0, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION)
			ACIE AAAAAAA 1 A_GiveInventory("AcidStockCount", 30)
			ACIE A 3
			goto Ready+2

		Flash:
			TNT1 A 1 A_JumpIfInventory("AcidShieldAnimate", 1, "FlashAnim")
			loop
		FlashAnim:
			ACIE K 0 A_TakeInventory("AcidShieldAnimate", 999)
			ACIE KLMNO 1
			goto Flash
	}
}

actor AcidBarrierItem : CustomInventory
{
	inventory.amount 1
	inventory.maxamount 1
	inventory.icon "ACIDICON"
	tag "$TAGC_11D2"
	scale 2.0
	+INVBAR
	States
	{
		Spawn:
			RSH1 W 1
			loop
		Use:
			TNT1 A 0 A_JumpIfInventory("AcidicBarrierAmmo",0,2)
			TNT1 A 0 A_JumpIfInventory("AcidBarrierBoss",1,"No")
			wait
			TNT1 A 0 A_PlaySoundEx("weapon/acidbarrier", "SoundSlot5")
			TNT1 A 0 A_SpawnItemEx("AcidBarrierShieldFX_H", 0, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION)
			TNT1 A 0 A_SpawnItemEx("AcidBarrierHandler")
			fail
		No:
			TNT1 A 0
			fail
	}
}

actor AcidBarrierPop : CustomInventory
{
	States
	{
		Pickup:
			TNT1 A 0 A_PlaySoundEx("classes/burstpop", "SoundSlot5")
			stop
	}
}

actor AcidShieldAnimate : Inventory
{
	inventory.amount 1
	inventory.maxamount 1
}

actor AcidStockCount : Inventory 
{
	inventory.amount 1
	inventory.maxamount 840
}

actor AcidSpeedGearTimer : Inventory 
{
	inventory.amount 1
	inventory.maxamount 175
}

actor AcidInSpeedGear : Inventory
{
	inventory.amount 1
	inventory.maxamount 1
}

actor AcidDartAmmo : Ammo
{
	inventory.amount 1
	inventory.maxamount 340
	+INVENTORY.IGNORESKILL
}

actor AcidicBarrierAmmo : Ammo
{
	inventory.amount 1
	inventory.maxamount 280
	+INVENTORY.IGNORESKILL
}

actor AcidicBarrierArmor : BasicArmorPickup
{
	armor.savepercent 99.1
	armor.saveamount 15
}

actor AcidBarrierHandler : BasicHelper // BasicWatcher
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_TakeFromTarget("AcidicBarrierAmmo", 1)
			TNT1 A 0 A_GiveToTarget("AcidShieldAnimate", 1)
			TNT1 A 1 A_GiveToTarget("AcidicBarrierArmor", 15)
		SpawnLoop:
			TNT1 A 0 A_JumpIf(!CallACS("core_targetexists"), "Death")
			
			TNT1 A 0 A_JumpIfInTargetInventory("BasicArmor", 1, 2)
			TNT1 A 0 A_JumpIfInTargetInventory("AcidBarrierBoss", 1, "SpeedGear")
			
			PLY1 A 1 A_TakeFromTarget("AcidicBarrierAmmo", 5)
			
			TNT1 A 0 A_JumpIfInTargetInventory("AcidicBarrierAmmo", 1, "SpawnLoop")
			TNT1 A 1 A_JumpIfInTargetInventory("AcidBarrierBoss", 1, "Death")
			wait
			
		SpeedGear:
			TNT1 A 0 A_GiveToTarget("AcidIndicateSpeedGear", 1)
			TNT1 A 0 A_GiveToTarget("AcidSpeedGearTimer", 175)
			TNT1 A 0 A_GiveToTarget("AcidDartAmmo", 340)
			TNT1 A 0 A_TakeFromTarget("AcidicBarrierAmmo", 999)
			TNT1 A 0 A_TakeFromTarget("BasicArmor", 999)
		SpeedGearLoop:
			TNT1 A 0 A_JumpIf(!CallACS("core_targetexists"), "SilentDeath")
			
			TNT1 A 0 A_JumpIf(CallACS("gond_acidman_floor_check"), "GiveBuffs")
			TNT1 A 1 A_GiveToTarget("AcidSpeedGearFX_P")
			TNT1 A 1 A_JumpIf(CallACS("gond_acidman_floor_check"), "GiveBuffs")
			loop
			
		GiveBuffs:
			TNT1 A 0 A_GiveToTarget("AcidToggleSwim", 1)
		SwimLoop:
			TNT1 A 0 A_JumpIf(!CallACS("core_targetexists"), "SilentDeath")
			
			TNT1 A 1 A_GiveToTarget("AcidSwimming", 1)
			TNT1 A 0 A_TakeFromTarget("AcidSpeedGearTimer", 1)
			
			TNT1 A 0 A_JumpIfInTargetInventory("AcidSpeedGearTimer", 1, "SwimLoop")
			TNT1 A 1 A_JumpIfInTargetInventory("AcidBarrierBoss",1,1)
			wait
			TNT1 A 0 A_GiveToTarget("AcidToggleOffSwim", 1)
			goto SilentDeath
			
		Death:
			TNT1 A 0 A_GiveToTarget("AcidBarrierPop", 1)
			TNT1 A 0 A_TakeFromTarget("BasicArmor", 9999)
		SilentDeath:
			TNT1 A 0 A_TakeFromTarget("AcidicBarrierAmmo", 999)
		RestockLoop:
			TNT1 A 0 A_JumpIf(!CallACS("core_targetexists"), "RestockEnd")
			
			TNT1 A 0 A_GiveToTarget("AcidicBarrierAmmo",1)
			TNT1 A 1 A_JumpIfInTargetInventory("AcidicBarrierAmmo", 0, "RestockEnd")
			loop
		RestockEnd:
			TNT1 A 0
			stop
	}
}

actor AcidBarrierShieldFX_H : BasicHelper
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEX("AcidBarrierShieldFX", 0, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION)
			stop
	}
}

actor AcidBarrierShieldFX : BaseShieldWarper
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteWithResult("gond_acidman_shieldwarper")
			ACBA AABB 1 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
		SpawnLoop:
			ACBA CCCDDD 1 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
			goto SpawnLoop
		Pop:
			BMBU G 1 A_SetScale(3.0)
			stop
	}
}

actor AcidSpeedGearTimerTaker : BasicHelper
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_TakeFromTarget("AcidSpeedGearTimer", 999)
			stop
	}
}

actor AcidIndicateSpeedGear : CustomInventory
{
	States
	{
		Pickup:
			TNT1 A 0 A_SetBlend("00 F8 FC",0.75, 5)
			TNT1 A 0 A_PlaySoundEx("classes/skullabs","Body")
			stop
	}
}

actor AcidmanSwimEnterExitFX_H : BasicHelper
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("MMSplash")
			stop
	}
}			

actor AcidToggleSwim : CustomInventory
{
	States
	{
		Pickup:
			TNT1 A 0 
			TNT1 A 0 A_GiveInventory("AcidInSpeedGear",1)
			TNT1 A 0 A_SpawnItemEx("AcidmanSwimEnterExitFX_H")
			TNT1 A 0 A_GiveInventory("InvulnerableOn_Pickup",1)
			TNT1 A 0 A_TakeInventory("UnSolid",1)
			TNT1 A 0 A_ChangeFlag("THRUACTORS",1)
			TNT1 A 0 A_ChangeFlag("NONSHOOTABLE",1)
			TNT1 A 0 A_ChangeFlag("SOLID",0)
			TNT1 A 0 A_ChangeFlag("PICKUP",0)
			TNT1 A 0 A_ChangeFlag("FLOORHUGGER",1)
			TNT1 A 0 A_SetTranslucent(0.0,0)
			TNT1 A 0 ACS_ExecuteWithResult(CORE_ACS_191,APROP_Speed,4,3)
			TNT1 A 0 ACS_ExecuteWithResult(CORE_ACS_191,APROP_JumpZ,0,1)
			TNT1 A 0 ThrustThingZ(0,40,1,0)
			stop
	}
}

actor AcidSwimming : CustomInventory
{
	States
	{
		Pickup:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0,0,1,0)//Fix running over fans/bubbles
			TNT1 A 0 A_SpawnItemEx("AcidSwimFX_H",0,0,0,0,0,0,0,SXF_TRANSFERTRANSLATION)
			TNT1 A 0 A_JumpIfInventory("AcidSwimSoundDelay",1,2)
			TNT1 A 0 A_JumpIfInventory("AcidBarrierBoss",1,"Sound")
			TNT1 A 0
			stop
		Sound:
			TNT1 A 0 A_GiveInventory("AcidSwimSoundDelay", 1)
			TNT1 A 0 A_PlaySound("misc/waterslide",1,0.75)
			stop
	}
}

actor AcidSwimFX_H : BasicHelper
{
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 AAA 0 A_SpawnItemEx("AcidSwimFX",0,0,0,random(-5,5),random(-5,5),random(5,15),0,SXF_TRANSFERTRANSLATION)
			stop
	}
}

actor AcidSwimFX
{
	+MISSILE
	+THRUACTORS
	+DONTBLAST
	+CLIENTSIDEONLY
	height 1
	radius 1
	renderstyle translucent
	alpha 1.0
	scale 1.5
	speed 28
	States
	{
		Spawn:
			ACBA E 0
			ACBA EEFFGG 1 A_FadeOut(0.05)
			loop
	}
}

actor AcidSwimSoundDelay : Powerup
{
	+INVENTORY.ALWAYSPICKUP
	powerup.duration 6
}

actor AcidToggleOffSwim : CustomInventory
{
	States
	{	
		Pickup:
			TNT1 A 0 
			TNT1 A 0 A_TakeInventory("AcidInSpeedGear",999)
			TNT1 A 0 A_TakeInventory("AcidSpeedGearTimer",999)
			TNT1 A 0 A_SpawnItemEx("AcidmanSwimEnterExitFX_H")
			TNT1 A 0 A_GiveInventory("InvulnerableOff_Pickup",1)
			TNT1 A 0 A_TakeInventory("UnSolid",1)
			TNT1 A 0 A_ChangeFlag("THRUACTORS",0)
			TNT1 A 0 A_ChangeFlag("NONSHOOTABLE",0)
			TNT1 A 0 A_SpawnItemEx("ResolidifyPlayer_H")
			TNT1 A 0 A_ChangeFlag("PICKUP",1)
			TNT1 A 0 A_ChangeFlag("FLOORHUGGER",0)
			TNT1 A 0 A_SetTranslucent(1.0,0)
			TNT1 A 0 ACS_ExecuteWithResult(CORE_ACS_191,APROP_Speed,1,1)
			TNT1 A 0 ACS_ExecuteWithResult(CORE_ACS_191,APROP_JumpZ,12,1)
			TNT1 A 0 ThrustThingZ(0,70,0,0)
			stop
	}
}

const int ACIDMAN_HORI_BOOST = 32;
const int ACIDMAN_VERT_BOOST = 4;
actor AcidDart_P : CustomInventory
{
	States
	{
		Pickup:
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==21,"P_LF")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==19,"P_RF")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==17,"P_F")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==13,"P_LB")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==11,"P_RB")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==9,"P_B")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==5,"P_L")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==3,"P_R")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==1,"P_None")
			goto P_None

		P_R://Right (2)
			TNT1 A 0 A_ChangeVelocity(0, -ACIDMAN_HORI_BOOST, momz + (ACIDMAN_VERT_BOOST * (z - floorz <= 0)), CVF_RELATIVE|CVF_REPLACE)
			goto End
		P_L://Left (4)
			TNT1 A 0 A_ChangeVelocity(0, ACIDMAN_HORI_BOOST, momz + (ACIDMAN_VERT_BOOST * (z - floorz <= 0)), CVF_RELATIVE|CVF_REPLACE)
			goto End
		P_B://Back (8)
			TNT1 A 0 A_ChangeVelocity(-ACIDMAN_HORI_BOOST, 0, momz + (ACIDMAN_VERT_BOOST * (z - floorz <= 0)), CVF_RELATIVE|CVF_REPLACE)
			goto End
		P_None:
		P_F://Forward (16)
			TNT1 A 0 A_ChangeVelocity(ACIDMAN_HORI_BOOST, 0, momz + (ACIDMAN_VERT_BOOST * (z - floorz <= 0)), CVF_RELATIVE|CVF_REPLACE)
			goto End

		P_RB:
			TNT1 A 0 A_ChangeVelocity(sin(-45) * ACIDMAN_HORI_BOOST, sin(-45) * ACIDMAN_HORI_BOOST, momz + (ACIDMAN_VERT_BOOST * (z - floorz <= 0)), CVF_RELATIVE|CVF_REPLACE)
			goto End
		P_LB:
			TNT1 A 0 A_ChangeVelocity(sin(-45) * ACIDMAN_HORI_BOOST, sin(45) * ACIDMAN_HORI_BOOST, momz + (ACIDMAN_VERT_BOOST * (z - floorz <= 0)), CVF_RELATIVE|CVF_REPLACE)
			goto End

		P_RF:
			TNT1 A 0 A_ChangeVelocity(sin(45) * ACIDMAN_HORI_BOOST, sin(-45) * ACIDMAN_HORI_BOOST, momz + (ACIDMAN_VERT_BOOST * (z - floorz <= 0)), CVF_RELATIVE|CVF_REPLACE)
			goto End
		P_LF:
			TNT1 A 0 A_ChangeVelocity(sin(45) * ACIDMAN_HORI_BOOST, sin(45) * ACIDMAN_HORI_BOOST, momz + (ACIDMAN_VERT_BOOST * (z - floorz <= 0)), CVF_RELATIVE|CVF_REPLACE)
			goto End
			
		End:
			TNT1 A 0 A_SpawnItemEX("AcidSpeedGearFX_H")
			TNT1 A 0 A_PlaySound("weapon/TerraQuickDash", CHAN_BODY, 0.875)
			TNT1 A 0 A_TakeInventory("AcidDartAmmo", 85, TIF_NOTAKEINFINITE)
			stop
	}
}

const int ACIDMAN_S_HORI_BOOST = 32;
actor AcidDartS_P : CustomInventory
{
	States
	{
		Pickup:
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==21,"P_LF")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==19,"P_RF")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==17,"P_F")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==13,"P_LB")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==11,"P_RB")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==9,"P_B")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==5,"P_L")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==3,"P_R")
			TNT1 A 0 A_JumpIf(CallACS("cbm_FetchMovementInput")==1,"P_None")
			goto P_None

		P_R://Right (2)
			TNT1 A 0 A_ChangeVelocity(0, -ACIDMAN_S_HORI_BOOST, momz, CVF_RELATIVE|CVF_REPLACE)
			goto End
		P_L://Left (4)
			TNT1 A 0 A_ChangeVelocity(0, ACIDMAN_S_HORI_BOOST, momz, CVF_RELATIVE|CVF_REPLACE)
			goto End
		P_B://Back (8)
			TNT1 A 0 A_ChangeVelocity(-ACIDMAN_S_HORI_BOOST, 0, momz, CVF_RELATIVE|CVF_REPLACE)
			goto End
		P_None:
		P_F://Forward (16)
			TNT1 A 0 A_ChangeVelocity(ACIDMAN_S_HORI_BOOST, 0, momz, CVF_RELATIVE|CVF_REPLACE)
			goto End

		P_RB:
			TNT1 A 0 A_ChangeVelocity(sin(-45) * ACIDMAN_S_HORI_BOOST, sin(-45) * ACIDMAN_S_HORI_BOOST, momz, CVF_RELATIVE|CVF_REPLACE)
			goto End
		P_LB:
			TNT1 A 0 A_ChangeVelocity(sin(-45) * ACIDMAN_S_HORI_BOOST, sin(45) * ACIDMAN_S_HORI_BOOST, momz, CVF_RELATIVE|CVF_REPLACE)
			goto End

		P_RF:
			TNT1 A 0 A_ChangeVelocity(sin(45) * ACIDMAN_S_HORI_BOOST, sin(-45) * ACIDMAN_S_HORI_BOOST, momz, CVF_RELATIVE|CVF_REPLACE)
			goto End
		P_LF:
			TNT1 A 0 A_ChangeVelocity(sin(45) * ACIDMAN_S_HORI_BOOST, sin(45) * ACIDMAN_S_HORI_BOOST, momz, CVF_RELATIVE|CVF_REPLACE)
			goto End
			
		End:
			//TNT1 A 0 A_SpawnItemEX("AcidSpeedGearFX_H")
			//TNT1 A 0 A_PlaySound("weapon/TerraQuickDash", CHAN_BODY, 0.875)
			TNT1 A 0 A_TakeInventory("AcidDartAmmo", 85, TIF_NOTAKEINFINITE)
			stop
	}
}

actor AcidSpeedGearFX_H : BasicHelper
{
	reactiontime 4
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 1
			TNT1 A 1 A_GiveToTarget("AcidSpeedGearFX_P")
			TNT1 A 1 A_CountDown
			loop
	}
}

actor AcidSpeedGearFX_P : CustomInventory
{
	States
	{
		Pickup:
			TNT1 A 0 A_SpawnItemEx("AcidSpeedGearFX",0,0,0,0,0,0,0,SXF_TRANSFERTRANSLATION)
			stop
	}
}

actor AcidSpeedGearFX : BasicClientSide
{
	+MISSILE
	+BRIGHT
	RenderStyle Translucent
	Alpha 0.99
	Speed 50
	States
	{
		Spawn:
			TNT1 A 3
			ACIY L 2
			ACIY L 2 A_FadeOut(0.2)
			wait
	}
}

actor AcidmanShot
{
	PROJECTILE
	-NOGRAVITY
	
	damagetype "AcidManBoss"
	obituary "$OB_ACIDSHOT"

	damage (7)
	
	radius 14
	height 14
	speed 60
	gravity 2.5
	
	scale 2.5
	translation "192:192=104:104","198:198=110:110"
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("BULL_Tidifier", 0)
			TNT1 A 0 ThrustThingZ(0,20,0,1)
		SpawnLoop:
			ACIA AA 1 A_SpawnItemEx("AcidmanShotFX",0,0,0,0,0,0,0,1)
			TNT1 A 0 A_SpawnItemEx("AcidmanShotDripFX",-8,Random(-16,16),random(0,-8),0,0,0,0,1,216)
			ACIA BB 1 A_SpawnItemEx("AcidmanShotFX2",0,0,0,0,0,0,0,1)
			TNT1 A 0 A_SpawnItemEx("AcidmanShotDripFX",-8,Random(-16,16),random(0,-8),0,0,0,0,1,216)
			ACIA CC 1 A_SpawnItemEx("AcidmanShotFX3",0,0,0,0,0,0,0,1)
			TNT1 A 0 A_SpawnItemEx("AcidmanShotDripFX",-8,Random(-16,16),random(0,-8),0,0,0,0,1,216)
		loop
		Death:
			TNT1 A 0 A_SetGravity(0.0)
			TNT1 A 0 A_Stop
			ACIA MNOPQ 2
		Crash:
		XDeath:
			TNT1 A 0
			stop
	}
}

actor AcidmanShotB : AcidmanShot{translation "192:192=205:205","198:198=74:74"}
actor AcidmanShotR : AcidmanShot{translation "192:192=171:171","198:198=41:41"}
actor AcidmanShotO : AcidmanShot{translation "192:192=104:104","198:198=128:128"}
actor AcidmanShotP : AcidmanShot{translation "192:192=229:229","198:198=232:232"}

actor AcidmanShotFX : BasicClientSide
{
	renderstyle add
	alpha 1.0
	scale 2.0
	States
	{
		Spawn:
			ACBA E 0
		goto SpawnLoop
		SpawnLoop:
			ACIA "#####" 1 A_FadeOut(0.20)
		Stop
	}
}
actor AcidmanShotFX2 : AcidmanShotFX {States{Spawn: ACBA F 0 A_Jump(256,"SpawnLoop")}}
actor AcidmanShotFX3 : AcidmanShotFX {States{Spawn: ACBA G 0 A_Jump(256,"SpawnLoop")}}

actor AcidmanShotDripFX : BasicClientSide
{
renderstyle translucent
alpha 0.6
-NOINTERACTION
-NOGRAVITY
+NOEXPLODEFLOOR
States
{
Spawn:
AGEY "#" 0
AGEY "#" 0 A_Jump(256,"Spawn1","Spawn2","Spawn3","Spawn4","Spawn5","Spawn6","Spawn7")
Spawn1:
AGEY E 1 A_GiveInventory("CutterFlag",random(1,35))
AGEY E 0 A_JumpIfInventory("CutterFlag",70,"Death")
loop
Spawn2:
AGEY F 1 A_GiveInventory("CutterFlag",random(1,35))
AGEY F 0 A_JumpIfInventory("CutterFlag",70,"Death")
loop
Spawn3:
AGEY G 1 A_GiveInventory("CutterFlag",random(1,35))
AGEY F 0 A_JumpIfInventory("CutterFlag",70,"Death")
loop
Spawn4:
AGEY H 1 A_GiveInventory("CutterFlag",random(1,35))
AGEY H 0 A_JumpIfInventory("CutterFlag",70,"Death")
loop
Spawn5:
AGEY I 1 A_GiveInventory("CutterFlag",random(1,35))
AGEY I 0 A_JumpIfInventory("CutterFlag",70,"Death")
loop
Spawn6:
AGEY J 1 A_GiveInventory("CutterFlag",random(1,35))
AGEY J 0 A_JumpIfInventory("CutterFlag",70,"Death")
loop
Spawn7:
AGEY K 1 A_GiveInventory("CutterFlag",random(1,35))
AGEY K 0 A_JumpIfInventory("CutterFlag",70,"Death")
loop
Death:
AGEY "##########" 1 A_SetScale(scalex-0.25,scaley-0.25) 
stop
}
}

actor AcidmanMain_CI : TeamColor_CI
{
	States
	{
		FireX:
			TNT1 A 0 A_FireCustomMissile("AcidmanShot",0,0,8,0)
			goto Done
		FireB:
			TNT1 A 0 A_FireCustomMissile("AcidmanShotB",0,0,8,0)
			goto Done
		FireR:
			TNT1 A 0 A_FireCustomMissile("AcidmanShotR",0,0,8,0)
			goto Done
		FireO:
			TNT1 A 0 A_FireCustomMissile("AcidmanShotO",0,0,8,0)
			goto Done
		FireP:
			TNT1 A 0 A_FireCustomMissile("AcidmanShotP",0,0,8,0)
			goto Done
	}
}

actor AcidDartTower_H : BasicHelper
{
	reactiontime 6
	+FLOORHUGGER
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_JumpIf(!CallACS("core_targetExists"), "Death")
			TNT1 A 0 A_JumpIfInTargetInventory("AcidInSpeedGear", 1, 2)
			TNT1 A 1 A_JumpIfInTargetInventory("AcidBarrierBoss", 1, "Death")
			wait
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 0)
			TNT1 A 0 A_SpawnItemEx("AcidDartTower", 0, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION)
			TNT1 A 3 A_CountDown
			loop
		Death:
			TNT1 A 3 //A_GiveToTarget("VivifyDelay4")
			stop
	}
}

actor AcidDartTower
{
	PROJECTILE
	+FLOORHUGGER
	+THRUACTORS
	+THRUGHOST
	+RIPPER
	seesound "weapon/rainflush"
	
	damagetype "AcidmanTower"
	obituary "$OB_ACIDTOWER"
	
	Damage (9)
	Height 64
	radius 16
	
	Scale 2.5
	States
	{
		Spawn:
			TNT1 AA 0
			TNT1 A 0 A_PlaySoundEx("weapon/rainflush","weapon")
			ACBA IJIJIJIJIJ 1
			ACBA J 0 A_ChangeFlag("THRUACTORS", false)
			ACBA KLMNOPQRSTUVW 1 A_Explode(9,24,0,0,24)
			ACBA WVUTSRQPONMLKJI 1 A_Explode(9,24,0,0,24)
			stop
	}
}

actor AcidmanTowerProtect_P : PowerProtection
{
	damagefactor "AcidmanTower", 0.0
	powerup.duration 4
}

// I sacrifice this badness to appease SBARINFO
//soon my child. when v6b hits this //dumb lame poopypants class will not be in the game :pray:
/*actor AcidAltHUDFlag : OnceC {}

actor AcidBarrierVisualBar : Ammo
{
	inventory.amount 1
	inventory.maxamount 17
	+INVENTORY.IGNORESKILL
}

actor AcidGearAmmo : Ammo
{
	inventory.amount 1
	inventory.maxamount 100
	+INVENTORY.IGNORESKILL
}

actor AcidmanVisualDelay1 : PowerUp{Powerup.Duration 90}
actor AcidmanVisualDelay2 : PowerUp{Powerup.Duration 64}
actor AcidmanVisualDelay3 : PowerUp{Powerup.Duration 48}
actor AcidmanVisualDelay4 : PowerUp{Powerup.Duration 32}
actor AcidmanVisualDelay0 : PowerUp{Powerup.Duration 16}

actor AcidmanVisualDelay11 : PowerUp{Powerup.Duration 16}

actor AcidmanVisualDelay21 : PowerUp{Powerup.Duration 36}
actor AcidmanVisualDelay22 : PowerUp{Powerup.Duration 16}

actor AcidmanVisualDelay31 : PowerUp{Powerup.Duration 52}
actor AcidmanVisualDelay32 : PowerUp{Powerup.Duration 32}
actor AcidmanVisualDelay33 : PowerUp{Powerup.Duration 16}

actor AcidmanVisualDelay41 : PowerUp{Powerup.Duration 70}
actor AcidmanVisualDelay42 : PowerUp{Powerup.Duration 48}
actor AcidmanVisualDelay43 : PowerUp{Powerup.Duration 32}
actor AcidmanVisualDelay44 : PowerUp{Powerup.Duration 16}*/