ACTOR StupidRatSpit : Weapon
{
	Inventory.RestrictedTo "StupidRatClass"
	Weapon.SelectionOrder 1900
	Obituary "%k got spat on"
	+WEAPON.WIMPY_WEAPON
	Inventory.Pickupmessage "$PICKUP_PISTOL_DROPPED"
	Tag "Spit it out!"
	States
	{
	Ready: 
		TNT1 A 0 A_JumpIf(CallACS("GetCVAR_sv_infiniteammo")==1, "SvInfAmmo")
	ReadyLoop1:
		TNT1 A 0 A_GiveInventory("StupidRatHoldingSpit")
		SRWS DEFG 4 bright A_WeaponReady(WRF_NOBOB)
		Loop
	Deselect:
		TNT1 A 0 ACS_NamedExecuteAlways("StupidRatViewHeightreset")
		TNT1 A 0 SetPlayerProperty(0,0,PROP_FROZEN)
		TNT1 A 0 A_TakeInventory("StupidRatHoldingSpit")
		SRWS A 0 A_Lower
		Loop
	Select:
		TNT1 A 0 ACS_NamedExecuteAlways("RatSpitState")
		SelectLoop:
		SRWS A 0 A_Raise
		Loop
	SvInfAmmo:
		TNT1 A 0 ACS_NamedExecuteAlways("StupidRatShootingClips",0,0)
		TNT1 A 0 ACS_NamedExecuteAlways("StupidRatShootingShells",0,0)
		TNT1 A 0 ACS_NamedExecuteAlways("StupidRatShootingRockets",0,0)
		TNT1 A 0 ACS_NamedExecuteAlways("StupidRatShootingCells",0,0)
		TNT1 A 0 ACS_NamedExecute("StupidRatRechargeClips")
		TNT1 A 0 ACS_NamedExecute("StupidRatRechargeShells")
		TNT1 A 0 ACS_NamedExecute("StupidRatRechargeRockets")
		TNT1 A 0 ACS_NamedExecute("StupidRatRechargeCells")
	Ready2: 
		TNT1 A 0 A_JumpIf(CallACS("GetCVAR_sv_infiniteammo")==0, "Ready")
		TNT1 A 0 A_GiveInventory("StupidRatHoldingSpit")
		SRWS DEFG 4 bright A_WeaponReady(WRF_NOBOB)
		Loop
  //Firing
	Fire:
		PISG A 0 
		PISG A 0 A_jumpifinventory("StupidRatSpitType",4,"SpitCells")
		PISG A 0 A_jumpifinventory("StupidRatSpitType",3,"SpitRockets")
		SRWS A 0 A_jumpifinventory("StupidRatSpitType",2,"SpitShells")
		Goto SpitClips
	SpitCells:
		TNT1 A 0 ACS_NamedExecuteAlways("StupidRatShootingCells",0,1)
		TNT1 A 0 A_JumpIf(CallACS("GetCVAR_byoc_oprat")==1, "SpitCells2")
		TNT1 A 0 A_JumpIfinventory("StupidRatCell",1,"SpitCells2")
		Goto DontHold

	SpitCells2:
		TNT1 A 0 SetPlayerProperty(0,1,PROP_FROZEN)
		TNT1 A 0 A_PlaySound("characters/stupidrat/StupidRatStomachGrowl")
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,39)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,40)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,42)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,45)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,49)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,56)
		SRWS C 6 bright 
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,48)
		SRWS C 0 bright ACS_NamedExecuteAlways("StupidRatViewHeightReset")
		TNT1 A 0 SetPlayerProperty(0,0,PROP_FROZEN)
		
	VomitCells0:
		SRWS C 1 A_JumpIf(CallACS("GetCVAR_byoc_oprat")==1, "VomitCellsFree")
		Goto VomitCells
	VomitCells: 
		TNT1 A 0 A_TakeInventory("StupidRatCell",6)
	VomitCells2: 
		TNT1 A 0 A_PlaySound("characters/stupidrat/burp",7)
		TNT1 A 0 A_Quake (4,10,0,20,"NOSOUND")
		TNT1 A 0  bright A_FireCustomMissile("StupidRatPlasmaBall",random(-10,10),0,0,0,0,random(-5,5))
		SRWS H 1  bright A_FireCustomMissile("StupidRatPlasmaBall",random(-10,10),0,0,0,0,random(-5,5))
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack1State")
		TNT1 A 0  bright A_FireCustomMissile("StupidRatPlasmaBall",random(-10,10),0,0,0,0,random(-5,5))
		SRWS I 1  bright A_FireCustomMissile("StupidRatPlasmaBall",random(-10,10),0,0,0,0,random(-5,5))
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack2State")
		SRWS I 1 bright A_JumpIfInventory("StupidRatCell",1,"ContinueVomitCells")
		Goto EndVomitCells
	VomitCellsFree: 
		TNT1 A 0 A_PlaySound("characters/stupidrat/burp",7)
		TNT1 A 0 A_Quake (4,10,0,20,"NOSOUND")
		TNT1 A 0  bright A_FireCustomMissile("StupidRatPlasmaBall",random(-10,10),0,0,0,0,random(-5,5))
		SRWS H 1  bright A_FireCustomMissile("StupidRatPlasmaBall",random(-10,10),0,0,0,0,random(-5,5))
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack1State")
		TNT1 A 0  bright A_FireCustomMissile("StupidRatPlasmaBall",random(-10,10),0,0,0,0,random(-5,5))
		SRWS I 1  bright A_FireCustomMissile("StupidRatPlasmaBall",random(-10,10),0,0,0,0,random(-5,5))
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack2State")
		TNT1 A 0 A_refire("VomitCellsFree")
		Goto EndVomitCells
	ContinueVomitCells:
		TNT1 A 0 A_refire("VomitCells")
	EndVomitCells:
		TNT1 A 0
		Goto Ready
	SpitRockets:
		TNT1 A 0 ACS_NamedExecuteAlways("StupidRatShootingRockets",0,1)
		TNT1 A 0 A_JumpIf(CallACS("GetCVAR_byoc_oprat")==1, "SpitRockets2")
		TNT1 A 0 bright A_JumpIfinventory("StupidRatRocketAmmo",1,"SpitRockets2")
	Goto DontHold

	SpitRockets2:
		TNT1 A 0 SetPlayerProperty(0,1,PROP_FROZEN)
		TNT1 A 0 A_PlaySound("characters/stupidrat/StupidRatStomachGrowl")
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,39)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,40)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,42)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,45)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,49)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,56)
		SRWS C 6 bright 
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,48)
		SRWS C 0 bright ACS_NamedExecuteAlways("StupidRatViewHeightReset")
		TNT1 A 0 SetPlayerProperty(0,0,PROP_FROZEN)
	
	VomitRockets0:
		TNT1 A 0 A_Quake (4,10,0,20,"NOSOUND")
		SRWS C 1 A_JumpIf(CallACS("GetCVAR_byoc_oprat")==1, "VomitRocketsFree")
		Goto VomitRockets
	VomitRockets:
		TNT1 A 0 A_TakeInventory("StupidRatRocketAmmo",3)
	VomitRockets2:
		TNT1 A 0 A_PlaySound("characters/stupidrat/burp",0)
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack1State")
		TNT1 A 0 bright A_FireCustomMissile("StupidRatRocket",random(-13,13),0,0,0,0,random(-3,3))
		TNT1 A 0 bright A_FireCustomMissile("StupidRatRocket",random(-13,13),0,0,0,0,random(-3,3))
		SRWS H 2 bright A_FireCustomMissile("StupidRatRocket",random(-13,13),0,0,0,0,random(-3,3))
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack2State")
		SRWS I 2 bright
		SRWS I 1 bright A_JumpIfInventory("StupidRatRocketAmmo",1,"ContinueVomitRockets")
		Goto EndVomitRockets
	VomitRocketsFree:
		TNT1 A 0 A_PlaySound("characters/stupidrat/burp",0)
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack1State")
		TNT1 A 0 bright A_FireCustomMissile("StupidRatRocket",random(-13,13),0,0,0,0,random(-3,3))
		TNT1 A 0 bright A_FireCustomMissile("StupidRatRocket",random(-13,13),0,0,0,0,random(-3,3))
		SRWS H 2 bright A_FireCustomMissile("StupidRatRocket",random(-13,13),0,0,0,0,random(-3,3))
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack2State")
		SRWS I 2 bright
		TNT1 A 0 A_refire("VomitRocketsFree")
		Goto EndVomitRockets
	ContinueVomitRockets:
		TNT1 A 0 A_refire("VomitRockets")
	EndVomitRockets:
		TNT1 A 0
		Goto Ready
	SpitShells: //Poops all shots at once
		TNT1 A 0 ACS_NamedExecuteAlways("StupidRatShootingShells",0,1)
		TNT1 A 0 A_JumpIf(CallACS("GetCVAR_byoc_oprat")==1, "SpitShells2")
		TNT1 A 0 bright A_JumpIfinventory("StupidRatShell",1,"SpitShells2")
		Goto DontHold

	SpitShells2:
		TNT1 A 0 SetPlayerProperty(0,1,PROP_FROZEN)
		TNT1 A 0 A_PlaySound("characters/stupidrat/StupidRatStomachGrowl")
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,39)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,40)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,42)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,45)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,49)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,56)
		SRWS C 6 bright 
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,48)
		SRWS C 0 bright ACS_NamedExecuteAlways("StupidRatViewHeightReset")
		TNT1 A 0 SetPlayerProperty(0,0,PROP_FROZEN)
		TNT1 A 0 A_Quake (ACS_NamedExecuteWithResult("CountStupidRatShellAmmo")/2,ACS_NamedExecuteWithResult("CountStupidRatShellAmmo")/4+1,0,20,"NOSOUND")
	ConsumeShellAndShoot0:
		SRWS C 1 A_JumpIf(CallACS("GetCVAR_byoc_oprat")==1, "RatShellShootLoopFree")
		Goto ConsumeShellAndShoot
	ConsumeShellAndShoot:
		SRWS I 0 bright A_JumpIfInventory("StupidRatShell",4,"RatShellShootLoop")
		TNT1 A 0 A_PlaySound("characters/stupidrat/burp",0)
		Goto SpitShellEnd
	RatShellShootLoop:
	// 	SRWS H 0 A_FireBullets (14, 8, ACS_NamedExecuteWithResult("CountStupidRatShellAmmo"), 5, "StupidRatBulletpuff",FBF_NORANDOM)
		SRWS H 0 A_FireBullets (10, 6, 16, 6, "StupidRatBulletpuff",FBF_NORANDOM)
		TNT1 A 0 A_TakeInventory("StupidRatShell",4)
		Goto ConsumeShellAndShoot
	RatShellShootLoopFreeDelay:
		SRWS H 10
	RatShellShootLoopFree:
	 	SRWS H 0 A_FireBullets (14, 8, ACS_NamedExecuteWithResult("CountStupidRatShellAmmo"), 5, "StupidRatBulletpuff",FBF_NORANDOM)
		SRWS H 0 A_FireBullets (10, 6, 16, 6, "StupidRatBulletpuff",FBF_NORANDOM)
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack1State")
		SRWS H 1 bright A_PlaySound ("weapons/sshotf", CHAN_WEAPON)
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack2State")
		TNT1 A 0 A_JumpIf(CallACS("GetCVAR_byoc_oprat")==1, "RatShellGodRefire")
		Goto RatShellGodRefireEnd
	RatShellGodRefire:
		TNT1 A 0 A_Refire("RatShellShootLoopFreeDelay")
	RatShellGodRefireEnd:
		TNT1 A 0 A_PlaySound("characters/stupidrat/burp",0)
		Goto Ready

	SpitShellEnd:
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack1State")
		SRWS H 6 bright A_PlaySound ("weapons/sshotf", CHAN_WEAPON)
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack2State")
		SRWS I 5 bright
		TNT1 A 0 A_takeinventory("StupidRatShell",0)
		Goto Ready
	SpitClips:
		TNT1 A 0 ACS_NamedExecuteAlways("StupidRatShootingClips",0,1)
		TNT1 A 0 A_JumpIf(CallACS("GetCVAR_byoc_oprat")==1, "SpitClips2")
		TNT1 A 0 bright A_JumpIfinventory("StupidRatClip",1,"SpitClips2")
		Goto DontHold

	SpitClips2:
		TNT1 A 0 SetPlayerProperty(0,1,PROP_FROZEN)
		TNT1 A 0 A_PlaySound("characters/stupidrat/StupidRatStomachGrowl")
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,39)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,40)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,42)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,45)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,49)
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,56)
		SRWS C 6 bright 
		SRWS C 3 bright ACS_NamedExecuteAlways("StupidRatViewHeight",0,48)
		SRWS C 0 bright ACS_NamedExecuteAlways("StupidRatViewHeightReset")
		TNT1 A 0 SetPlayerProperty(0,0,PROP_FROZEN)
	VomitClips0:
		TNT1 A 0 A_Quake (3,10,0,20,"NOSOUND")
		SRWS C 1 A_JumpIf(CallACS("GetCVAR_byoc_oprat")==1, "VomitClipsFree")
		Goto VomitClips
	VomitClips:
		TNT1 A 0 A_TakeInventory("StupidRatClip",3) 
	VomitClips2:
		TNT1 A 0 A_PlaySound("characters/stupidrat/burp",7)
		SHT2 A 0 A_FireBullets (8, 4, -1, 5, "StupidRatBulletpuff",FBF_NORANDOM)
		SHT2 A 0 A_FireBullets (8, 4, -1, 5, "StupidRatBulletpuff",FBF_NORANDOM)
		SHT2 A 0 A_FireBullets (8, 4, -1, 5, "StupidRatBulletpuff",FBF_NORANDOM)
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack1State")
		SRWS H 1 bright A_PlaySound("weapons/chngun", CHAN_WEAPON)
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack2State")
		TNT1 A 0 A_PlaySound("weapons/chngun", CHAN_WEAPON)
		TNT1 A 0 A_JumpIf(CallACS("GetCVAR_byoc_oprat")==1, "ContinueVomitClip")
		SRWS I 1 bright A_JumpIfInventory("StupidRatClip",1,"ContinueVomitClip")
		Goto EndVomitClip
	VomitClipsFree:
		TNT1 A 0 A_PlaySound("characters/stupidrat/burp",7)
		SHT2 A 0 A_FireBullets (8, 4, -1, 5, "StupidRatBulletpuff",FBF_NORANDOM)
		SHT2 A 0 A_FireBullets (8, 4, -1, 5, "StupidRatBulletpuff",FBF_NORANDOM)
		SHT2 A 0 A_FireBullets (8, 4, -1, 5, "StupidRatBulletpuff",FBF_NORANDOM)
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack1State")
		SRWS H 1 bright A_PlaySound("weapons/chngun", CHAN_WEAPON)
		TNT1 A 0 bright ACS_NamedExecuteAlways("RatSpitAttack2State")
		TNT1 A 0 A_PlaySound("weapons/chngun", CHAN_WEAPON)
		SRWS I 1
		TNT1 A 0 A_refire("VomitClipsFree")
		Goto EndVomitClip
	ContinueVomitClip:
		TNT1 A 0 A_refire("VomitClips")
	EndVomitClip:
		TNT1 A 0
		Goto Ready
	Spawn:
		PIST A -1
		Stop
  //Change firemode for spit
	Altfire:
		PISG A 0 A_jumpifinventory("StupidRatSpitType",0,"ResetSpitType")
		SRWS B 1 bright A_giveinventory("StupidRatSpitType",1)
		SRWS CACB 1 bright 
		TNT1 a 0 A_PlaySound("characters/stupidrat/release")
	DontHold:
		SRWS C 1 bright
		PISG A 0 A_Refire("DontHold")
		Goto Ready
  ResetSpitType:
		SRWS C 0 A_takeinventory("StupidRatSpitType",0)
		PISG A 0 A_giveinventory("StupidRatSpitType",1)
		SRWS CACB 1 bright 
		TNT1 a 0 A_PlaySound("characters/stupidrat/release")
		Goto DontHold
	}
}

Actor StupidRatSpitting : CustomInventory {Inventory.MaxAmount 1}