ACTOR GruntRandomizer:CustomInventory{+ALWAYSPICKUP}
actor BasicGrunt{
	obituary "%o got killed by a Grunt."
	health 12
	radius 20
	height 56
	mass 100
	speed 15
	painchance 180
	translation 0
	DropItem "barracudarifle" 180
	dropitem "grenades" 30
	SeeSound "bgrunt/see"
	ActiveSound "bgrunt/active"
	PainSound "bgrunt/pain"
	DeathSound "bgrunt/death"
	AttackSound " "
	MONSTER
	+FLOORCLIP
	+DONTHURTSPECIES
	+NODROPOFF
	+NOINFIGHTING
	+AVOIDMELEE
	GibHealth 40
	states{
	spawn:
		SOLN A 2 A_Look
		loop
	see:
		TNT1 A 0 A_TakeInventory("PathClear",1)
		TNT1 A 0 A_TakeInventory("CeilingClear",1)
		TNT1 A 0 A_JumpIfCloser(600,"closechase")
	farchase:
		SOLN ABCD 3 A_Chase
		goto see
	closechase:
		SOLN ABCD 3 A_FastChase
		goto see	
	missile:
		TNT1 A 0 A_Jump(10,"GrenadeCheck")
	FireWeapon:
		TNT1 A 0 A_JumpIfCloser(800,"fullfire")
	longshot:
		TNT1 A 0 A_JumpIfInventory("Grunt_ArAmmo",36,"ls_NoAmmo")
		SOLF A 1 A_FaceTarget
		TNT1 A 0 A_PlaySound("weapons/ar_fire")
		SOLF B 2 bright A_CustomMissile("arifle_tracer",43,5,frandom(-0.2,0.2),CMF_OFFSETPITCH,frandom(-0.5,0.5))
		TNT1 A 0 A_GiveInventory("Grunt_ArAmmo",1)
		SOLF A 7
		SOLF A 1 A_MonsterRefire(100,"see")
		goto missile	
	ls_NoAmmo:
		SOLF A 1 A_FaceTarget
		SOLF A 8 A_PlaySound("weapons/noammo")
		TNT1 A 0 A_PlaySound("bgrunt/noammo",CHAN_VOICE)
		TNT1 A 0 A_ChangeFlag(FRIGHTENED,1)
		goto reload_check
	fullfire:
		TNT1 A 0 A_JumpIfInventory("Grunt_ArAmmo",36,"ff_NoAmmo")
		SOF2 A 1 A_FaceTarget
		TNT1 A 0 A_PlaySound("weapons/ar_fire")
		SOF2 B 2 bright A_CustomMissile("arifle_tracer",34,9,frandom(-3.0,3.0),CMF_OFFSETPITCH,frandom(-2.0,2.0)) 
		TNT1 A 0 A_GiveInventory("Grunt_ArAmmo",1)
		SOF2 A 1 A_MonsterRefire(100,"see")
		goto missile
	ff_NoAmmo:
		SOF2 A 1 A_FaceTarget
		SOF2 A 4 A_PlaySound("weapons/noammo")
		SOF2 A 4 A_PlaySound("weapons/noammo")
		SOF2 A 4 A_PlaySound("weapons/noammo")
		TNT1 A 0 A_PlaySound("bgrunt/noammo",CHAN_VOICE)
		SOF2 A 6
		TNT1 A 0 A_ChangeFlag(FRIGHTENED,1)
		goto reload_check
	reload_check:
		TNT1 A 0 A_JumpIfCloser(600,"retreat")
	reload:
		SOLN A 20 A_PlaySound("weapons/reload")
		TNT1 A 0 A_TakeInventory("Grunt_ArAmmo",36)
		TNT1 A 0 A_TakeInventory("Grunt_RetreatTimer",6)
		TNT1 A 0 A_ChangeFlag(FRIGHTENED,0)
		goto see	
	retreat:
		TNT1 A 0 A_JumpIfInventory("Grunt_RetreatTimer",8,"Reload")
		SOLN ABCD 3 A_Wander
		TNT1 A 0 A_GiveInventory("Grunt_RetreatTimer",1)
		loop
	GrenadeCheck:
		TNT1 A 0 A_JumpIfCloser(600,"GrenadeToss")
		goto see
	GrenadeToss:
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_CustomMissile("checker",45,0,0,CMF_AIMDIRECTION,0)
		TNT1 A 0 A_CustomMissile("top_checker",45,0,0,CMF_AIMDIRECTION,35)
		SOLN A 7 A_FaceTarget
		TNT1 A 0 A_JumpIfInventory("PathClear",1,"fireweapon")
		TNT1 A 0 A_PlaySound("bgrunt/grenadetoss",CHAN_VOICE)
		SOLG A 8 A_FaceTarget
		TNT1 A 0 A_PlaySound("grenade/pin")
		TNT1 A 0 A_TakeInventory("PathClear",1)
		SOLG BC 2 A_FaceTarget
		TNT1 A 0 A_JumpIfInventory("CeilingClear",1,"GrToss_Part")
	GrToss_Full:
		TNT1 A 0 A_JumpIfCloser(256,"grtoss1")
		TNT1 A 0 A_JumpIfCloser(352,"grtoss2")
		TNT1 A 0 A_JumpIfCloser(480,"grtoss3")
		TNT1 A 0 A_JumpIfCloser(544,"grtoss4")
		TNT1 A 0 A_JumpIfCloser(600,"grtoss5")
		goto grtoss2
	GrToss_Part:
		TNT1 A 0 A_TakeInventory("CeilingClear",1)
		TNT1 A 0 A_JumpIfCloser(256,"grtoss1")
		TNT1 A 0 A_JumpIfCloser(352,"grtoss2")
		TNT1 A 0 A_JumpIfCloser(480,"grtoss3")
	grtoss1:
		SOLG D 2 A_CustomMissile("GruntGrenade",45,-15,0,CMF_AIMDIRECTION,-10)
		goto grenfinish
	grtoss2:
		SOLG D 2 A_CustomMissile("GruntGrenade",45,-15,0,CMF_AIMDIRECTION,0)
		goto grenfinish
	grtoss3:
		SOLG D 2 A_CustomMissile("GruntGrenade",45,-15,0,CMF_AIMDIRECTION,15)
		goto grenfinish
	grtoss4:
		SOLG D 2 A_CustomMissile("GruntGrenade",45,-15,0,CMF_AIMDIRECTION,30)
		goto grenfinish
	grtoss5:
		SOLG D 2 A_CustomMissile("GruntGrenade",45,-15,0,CMF_AIMDIRECTION,35)
		goto grenfinish
	grenfinish:
		SOLG EF 2
		SOLG G 30
		goto see
	pain:
		SOLH A 2 
		SOLH A 4 A_Pain
		goto see
	death:
		TNT1 A 0 A_Jump(255,"dth1","dth2","dth3","dth4")		
	dth1:
		SOD1 A 4 A_Scream
		SOD1 B 4 A_NoBlocking
		SOD1 CDEFGH 4
		SOD1 I -1
		stop		
	dth2:
		SOD2 A 4 A_Scream
		SOD2 B 4 A_NoBlocking
		SOD2 CDEF 4
		SOD2 G -1
		stop
	dth3:
		SOD2 A 4 A_Scream
		SOD2 B 4 A_NoBlocking
		SOD2 CDHI 4
		SOD2 J -1
		stop
	dth4:
		SOD3 A 4 A_Scream
		SOD3 B 4 A_NoBlocking
		SOD3 CD 4
		SOD3 E -1
		stop
	XDeath:
		TNT1 A 0			
		TNT1 A 1 A_SpawnItemEx("SoldierXDeath",0,0,0,0,0,0,0,SXF_TRANSFERTRANSLATION)
		TNT1 A 0 A_NoBlocking
		stop
	Raise:
		SOD1 EDCBA 5
		goto See}}
actor CloseBasicGrunt:BasicGrunt{
	Obituary "%o got killed by a CQB Grunt."
	Health 18
	Speed 17
	PainChance 180
	translation "112:127=152:159"
	DropItem "hydrashotgun" 180
	dropitem "grenades" 30
	SeeSound "bgrunt/see"
	ActiveSound "bgrunt/active"
	PainSound "bgrunt/pain"
	DeathSound "bgrunt/death"
	States{ 
	missile:
		TNT1 A 0 A_Jump(10,"GrenadeCheck")
	FireWeapon:
		TNT1 A 0 A_JumpIfCloser(864,"sfire")
		goto see
	sfire:
		TNT1 A 0 A_JumpIfInventory("CAGrunt_AutoAmmo",16,"NoAmmo")
		SOF2 A 1 A_FaceTarget
		TNT1 A 0 A_PlaySound("weapons/hs_fire")
		TNT1 AAAAAAAAA 0 A_CustomMissile("pellet_tracer",34,9,frandom(-4.0,4.0),CMF_OFFSETPITCH,frandom(-3.0,3.0)) 
		SOF2 B 2 bright 
		TNT1 A 0 A_GiveInventory("CAGrunt_AutoAmmo",1)
		SOF2 A 5
		SOF2 A 1 A_MonsterRefire(100,"see")
		goto missile	
	NoAmmo:
		SOF2 A 1 A_FaceTarget
		SOF2 A 8 A_PlaySound("weapons/noammo")
		SOF2 A 8 A_PlaySound("weapons/noammo")
		TNT1 A 0 A_PlaySound("bgrunt/noammo",CHAN_VOICE)
		TNT1 A 0 A_ChangeFlag(FRIGHTENED,1)	
		goto reload_check
	reload_check:
		TNT1 A 0 A_JumpIfCloser(600,"retreat")
	reload:
		SOLN A 25 A_PlaySound("weapons/reload")
		TNT1 A 0 A_TakeInventory("CAGrunt_AutoAmmo",16)
		TNT1 A 0 A_TakeInventory("Grunt_RetreatTimer",6)
		TNT1 A 0 A_ChangeFlag(FRIGHTENED,0)
		goto see	
	retreat:
		TNT1 A 0 A_JumpIfInventory("Grunt_RetreatTimer",8,"Reload")
		SOLN ABCD 3 A_Wander
		TNT1 A 0 A_GiveInventory("Grunt_RetreatTimer",1)
		loop
	GrenadeCheck:
		TNT1 A 0 A_JumpIfCloser(600,"GrenadeToss")
		goto see
	GrenadeToss:
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_CustomMissile("checker",45,0,0,CMF_AIMDIRECTION,0)
		TNT1 A 0 A_CustomMissile("top_checker",45,0,0,CMF_AIMDIRECTION,35)
		SOLN A 7 A_FaceTarget
		TNT1 A 0 A_JumpIfInventory("PathClear",1,"fireweapon")
		TNT1 A 0 A_PlaySound("bgrunt/grenadetoss",CHAN_VOICE)
		SOLG A 8 A_FaceTarget
		TNT1 A 0 A_PlaySound("grenade/pin")
		TNT1 A 0 A_TakeInventory("PathClear",1)
		SOLG BC 2 A_FaceTarget
		TNT1 A 0 A_JumpIfInventory("CeilingClear",1,"GrToss_Part")
		TNT1 A 0 A_Jump(256,"GrToss_Full")
		Goto GrToss_Full}}
actor HeavyGrunt:BasicGrunt replaces chaingunguy{
	obituary "%o was anihilated by a Heavy Grunt."
	health 40
	Speed 20
	translation "112:127=[180,80,0]:[40,18,0]"
	dropitem "barracudarifle" 192
	dropitem "arifle_ammo" 64
	dropitem "grenades" 64
	PainChance 70
	SeeSound "hgrunt/see"
	ActiveSound "hgrunt/active"
	PainSound "hgrunt/pain"
	DeathSound "hgrunt/death"
	GibHealth 50
	states{
	Missile:
		TNT1 A 0 A_Jump(8,"GrenadeCheck")
	FireWeapon:
		TNT1 A 0 A_JumpIfCloser(900,"fullfire")
	longshot:
		TNT1 A 0 A_JumpIfInventory("Grunt_ArAmmo",36,"ls_NoAmmo")
		SOLF A 1 A_FaceTarget
		TNT1 A 0 A_PlaySound("weapons/ar_fire")
		SOLF B 2 bright A_CustomMissile("arifle_tracer",43,5,0,CMF_OFFSETPITCH,frandom(-0.2,0.2))
		TNT1 A 0 A_GiveInventory("Grunt_ArAmmo",1)
		SOLF A 7
		SOLF A 1 A_MonsterRefire(100,"see")
		goto missile	
	ls_NoAmmo:
		SOLF A 1 A_FaceTarget
		SOLF A 8 A_PlaySound("weapons/noammo")
		TNT1 A 0 A_PlaySound("hgrunt/noammo",CHAN_VOICE)
		TNT1 A 0 A_ChangeFlag(FRIGHTENED,1)
		goto reload_check
	fullfire:
		TNT1 A 0 A_JumpIfInventory("Grunt_ArAmmo",36,"ff_NoAmmo")
		SOF2 A 1 A_FaceTarget
		TNT1 A 0 A_PlaySound("weapons/ar_fire")
		SOF2 B 2 bright A_CustomMissile("arifle_tracer",34,9,frandom(-2.4,2.4),CMF_OFFSETPITCH,frandom(-1.4,1.4)) 
		TNT1 A 0 A_GiveInventory("Grunt_ArAmmo",1)
		SOF2 A 1 A_MonsterRefire(100,"see")
		goto missile
	ff_NoAmmo:
		SOF2 A 1 A_FaceTarget
		SOF2 A 4 A_PlaySound("weapons/noammo")
		SOF2 A 4 A_PlaySound("weapons/noammo")
		SOF2 A 4 A_PlaySound("weapons/noammo")
		TNT1 A 0 A_PlaySound("hgrunt/noammo",CHAN_VOICE)
		SOF2 A 6
		TNT1 A 0 A_ChangeFlag(FRIGHTENED,1)
		goto reload_check
	reload_check:
		TNT1 A 0 A_JumpIfCloser(600,"retreat")
	reload:
		SOLN A 20 A_PlaySound("weapons/reload")
		TNT1 A 0 A_TakeInventory("Grunt_ArAmmo",36)
		TNT1 A 0 A_TakeInventory("Grunt_RetreatTimer",6)
		TNT1 A 0 A_ChangeFlag(FRIGHTENED,0)
		goto see	
	retreat:
		TNT1 A 0 A_JumpIfInventory("Grunt_RetreatTimer",8,"Reload")
		SOLN ABCD 3 A_Wander
		TNT1 A 0 A_GiveInventory("Grunt_RetreatTimer",1)
		loop
	GrenadeCheck:
		TNT1 A 0 A_JumpIfCloser(600,"GrenadeToss")
		goto see
	GrenadeToss:
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_CustomMissile("checker",45,0,0,CMF_AIMDIRECTION,0)
		TNT1 A 0 A_CustomMissile("top_checker",45,0,0,CMF_AIMDIRECTION,35)
		SOLN A 7 A_FaceTarget
		TNT1 A 0 A_JumpIfInventory("PathClear",1,"fireweapon")
		TNT1 A 0 A_PlaySound("hgrunt/grenadetoss",CHAN_VOICE)
		SOLG A 8 A_FaceTarget
		TNT1 A 0 A_PlaySound("grenade/pin")
		TNT1 A 0 A_TakeInventory("PathClear",1)
		SOLG BC 2 A_FaceTarget
		TNT1 A 0 A_JumpIfInventory("CeilingClear",1,"GrToss_Part")
		TNT1 A 0 A_Jump(256,"GrToss_Full")
		Goto GrToss_Full}}
actor HeavyCloseGrunt:BasicGrunt{
	Obituary "%o was nailed by a Heavy CQB Grunt."
	Health 55
	Radius 20
	Height 56
	Speed 23
	PainChance 100
	translation "112:127=[0,133,66]:[0,26,13]"
	DropItem "raptorshotgun" 224
	dropitem "grenades" 30
	AttackSound ""
	SeeSound "hgrunt/see"
	ActiveSound "hgrunt/active"
	PainSound "hgrunt/pain"
	DeathSound "hgrunt/death"
	DamageFactor "frag_boom",1.5
	GibHealth 50
	States{ 
	spawn:
		SOLN A 2 A_Look
		loop
	see:
		TNT1 A 0 A_TakeInventory("PathClear",1)
		TNT1 A 0 A_TakeInventory("CeilingClear",1)
		TNT1 A 0 A_JumpIfCloser(500,"closechase")
	farchase:
		SOLN ABCD 3 A_Chase
		goto see
	closechase:
		SOLN ABCD 3 A_FastChase
		goto see	
	missile:
		TNT1 A 0 A_Jump(96,"GrenadeCheck")
	FireWeapon:
		TNT1 A 0 A_JumpIfCloser(500,"sfire")
		goto see
	sfire:
		TNT1 A 0 A_JumpIfInventory("HAGrunt_RaptorAmmo",4,"NoAmmo")
		SOF2 AAAA 3 A_FaceTarget
		SOF2 A 1 A_FaceTarget
		SOF2 B 3 bright A_PlaySound("weapons/cs_fire",CHAN_AUTO) 
		TNT1 AAAAAAAAAAA 0 A_CustomMissile("grunt_raptornail",30,0,random(-6,6),CMF_OFFSETPITCH,random(-3,3)) 
		TNT1 A 0 A_GiveInventory("HAGrunt_RaptorAmmo",1)
		SOF2 A 10
		SOLN B 20  A_PlaySound("weapons/cs_cock",CHAN_AUTO)
		SOLN B 1 A_MonsterRefire(128,"see")
		goto missile
	NoAmmo:
		SOF2 A 1 A_FaceTarget
		SOF2 A 10 A_PlaySound("weapons/noammo")
		TNT1 A 0 A_PlaySound("hgrunt/noammo",CHAN_VOICE)
		SOF2 A 6
		TNT1 A 0 A_ChangeFlag(FRIGHTENED,1)	
		goto reload_check
	reload_check:
		TNT1 A 0 A_JumpIfCloser(600,"retreat")
	reload:
		SOLN A 25 A_PlaySound("hgrunt/shotgunreload")
		SOLN A 20 A_PlaySound("weapons/cs_cock",CHAN_AUTO)
		TNT1 A 0 A_TakeInventory("HAGrunt_RaptorAmmo",4)
		TNT1 A 0 A_TakeInventory("Grunt_RetreatTimer",6)
		TNT1 A 0 A_ChangeFlag(FRIGHTENED,0)
		goto see	
	retreat:
		TNT1 A 0 A_JumpIfInventory("Grunt_RetreatTimer",8,"Reload")
		SOLN ABCD 3 A_Wander
		TNT1 A 0 A_GiveInventory("Grunt_RetreatTimer",1)
		loop
	GrenadeCheck:
		TNT1 A 0 A_JumpIfCloser(600,"GrenadeToss")
		goto see
	GrenadeToss:
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_CustomMissile("checker",45,0,0,CMF_AIMDIRECTION,0)
		TNT1 A 0 A_CustomMissile("top_checker",45,0,0,CMF_AIMDIRECTION,35)
		SOLN A 7 A_FaceTarget
		TNT1 A 0 A_JumpIfInventory("PathClear",1,"fireweapon")
		TNT1 A 0 A_PlaySound("hgrunt/grenadetoss",CHAN_VOICE)
		SOLG A 8 A_FaceTarget
		TNT1 A 0 A_PlaySound("grenade/pin")
		TNT1 A 0 A_TakeInventory("PathClear",1)
		SOLG BC 2 A_FaceTarget
		TNT1 A 0 A_JumpIfInventory("CeilingClear",1,"GrToss_Part")
		TNT1 A 0 A_Jump(256,"GrToss_Full")
		Goto GrToss_Full}}
////////////////////////////////////////////////////////////////////////////////////////////////
actor GruntSpawner:RandomSpawner replaces Zombieman{
	DropItem "BasicGrunt" 256,10
	DropItem "CloseBasicGrunt" 256,2}
actor GruntSpawner2:GruntSpawner replaces ShotgunGuy{
	DropItem "BasicGrunt"
	DropItem "CloseBasicGrunt"}
actor Grunt_ArAmmo:Inventory{Inventory.MaxAmount 36}
actor CAGrunt_AutoAmmo:Inventory{Inventory.MaxAmount 16}
actor HAGrunt_RaptorAmmo:Inventory{Inventory.MaxAmount 4}
actor Grunt_RetreatTimer:Inventory{Inventory.MaxAmount 8}
actor Grunt_GrenReady:Inventory{Inventory.MaxAmount 1}
// General Soldier Gibs //
actor soldierxdeath{
	states{
	spawn:
		TNT1 A 0 NoDelay A_PlaySound("gore/explode")
		TNT1 AA 0 A_SpawnItemEx("gore_bloodmist",random(-2,2),random(-2,2),8,frandom(-0.4,0.4),frandom(-0.4,0.4),0,random(1,360),SXF_TRANSFERTRANSLATION)
		TNT1 AAAAA 0 A_CustomMissile("gore_fleshbit",25,0,random(0,180),2,random(20,120))
		TNT1 AAAAA 0 A_CustomMissile("gore_fleshbit",25,0,random(181,360),2,random(20,120))
		TNT1 AAA 0 A_CustomMissile("gib_spawner",25,0,random(0,180),2,random(20,120))
		TNT1 AAA 0 A_CustomMissile("gib_spawner",25,0,random(181,360),2,random(20,120))
		TNT1 A 0 A_SpawnItem("Soldier_ArmsGibSpawn")
		TNT1 A 0 A_SpawnItem("Soldier_ArmsGibSpawn")
		TNT1 A 0 A_CustomMissile("SoldierLeg_Gib",25,0,random(0,180),2,random(50,160))
		TNT1 A 0 A_CustomMissile("SoldierLeg_Gib",25,0,random(181,360),2,random(50,160))
		TNT1 A 0 A_CustomMissile("SoldierHead_Gib",25,0,random(0,360),2,random(50,160))
		TNT1 A 4
		TNT1 AAAAA 0 A_CustomMissile("gore_fleshbit",25,0,random(0,180),2,random(20,120))
		TNT1 AAAAA 0 A_CustomMissile("gore_fleshbit",25,0,random(181,360),2,random(20,120))
		stop}}	
actor Soldier_ArmsGibSpawn{
	states{
	spawn:
		NULL A 0
		NULL A 0 A_Jump(224,"arm1","arm2")
		stop
	arm1:
		TNT1 A 0 A_CustomMissile("SoldierArm1_Gib",25,0,random(0,360),2,random(50,160)) 
		stop
	arm2:
		TNT1 A 0 A_CustomMissile("SoldierArm2_Gib",25,0,random(0,360),2,random(50,160))		
		stop}}
actor SoldierArm1_Gib{
	health 1
	radius 10
	height 10
	mass 1
	speed 8
	gravity 0.5
	bouncetype "doom"
	bouncefactor 0.3
	BounceSound "blood/splat"
	DeathSound "blood/splat"
	PROJECTILE
	-NOGRAVITY
	+CORPSE
	+NOTELEPORT
	states{
	spawn:
		SOGA ABCDEFGH 2 A_SpawnItemEx("blood_spray",0,0,0,random(-2,2),random(-2,2),random(-2,2),random(0,360),SXF_TRANSFERTRANSLATION)
		loop
	death:
		SOGA I -1
		stop}}
actor SoldierArm2_Gib:SoldierArm1_Gib{
	states{
	spawn:
		SOGB ABCDEFGH 2 A_SpawnItemEx("blood_spray",0,0,0,random(-2,2),random(-2,2),random(-2,2),random(0,360),SXF_TRANSFERTRANSLATION)
		loop
	death:
		SOGB I -1
		stop}}
actor SoldierLeg_Gib:SoldierArm1_Gib{
	states{
	spawn:
		TNT1 A 0
		TNT1 A 0 A_Jump(224,"l1")
		stop
	l1:
		SOGL ABCDEFGH 2 A_SpawnItemEx("blood_spray",0,0,0,random(-2,2),random(-2,2),random(-2,2),random(0,360),SXF_TRANSFERTRANSLATION)
		loop
	death:
		SOGL I -1
		stop}}
actor SoldierHead_Gib:SoldierArm1_Gib{
	states{
	spawn:
		TNT1 A 0
		TNT1 A 0 A_Jump(224,"h1")
		stop
	h1:	
		SOGH ABCDEFGH 2 A_SpawnItemEx("blood_spray",0,0,0,random(-2,2),random(-2,2),random(-2,2),random(0,360),SXF_TRANSFERTRANSLATION)
		loop
	death:
		SOGH I -1
		stop}}