Actor RedSuperShotgunner	//Red SSGer
{

	Speed 0					//ThrustThing and A_Recoil instead.
	MaxDropOffHeight 64		//Gives the marines a smaller chance of falling into pits. 63, not 64.
	PainSound "*pain"
	MaxStepHeight 56
//-----------------------------------------------------------------------
	obituary "$OB_MARINE_SSG_RED"
	Health 115
	Radius 16
	Height 56
	Mass 100
	Painchance 200
	MaxTargetRange 768
	+CANPASS
	+CANPUSHWALLS
	+CANUSEWALLS
	+FLOORCLIP
	+WINDTHRUST
	+NOBLOCKMONST
	+SOLID
	+SHOOTABLE
	+QUICKTORETALIATE
	+NODROPOFF				//In conjunction with MaxDropOffHeight.
	+ISMONSTER				//Needed for the marines to take any projectile damage in invasion mode.
	-COUNTKILL				//In conjunction with +ISMONSTER.
	+NEVERFAST				//Same as above.
	//+NOTIMEFREEZE
	+LOOKALLAROUND
	-TELESTOMP
	deathsound "generic/death"

	Translation "112:127=[160,0,0]:[0,0,0]"

//AOW Base DamageFactoring-----------------------------------------------------------------------

	DesignatedTeam 1
	damagefactor "Fist", 1.0
	damagefactor "Bullet", 1.0
	damagefactor "Rifle", 1.0
	damagefactor "Explosion", 0.3
	damagefactor "Suicide", 1.0
	damagefactor "Fire", 1.0
	damagefactor "Chemical", 2.0
	damagefactor "ChemicalSpecial", 0.0
	damagefactor "Energy", 1.0
	damagefactor "AntiArmor", 0.1
	damagefactor "Time", 1.0
	damagefactor "Disarm", 0.0
	damagefactor "Deconstruction", 0.0
	damagefactor "MassDriver", 0.3	
	damagefactor "Mechstomp", 0.0
	damagefactor "Monster", 1.0

//-----------------------------------------------------------------------


	States //Sorry about the ridiculously long state names.
	{

//-----------------------------------------------------------------------
//
//					Spawn and idle states.
//
//-----------------------------------------------------------------------


	Spawn:
		PLA9 A 0
		PLA9 A 0 A_GiveInventory("IsRed", 1)
		PLA9 A 0 A_ChangeFlag("Friendly", 0)//Execute ACS script(s) here.
		PLA9 A 0 ACS_ExecuteAlways (985, 0, 1, ARMOD_NONE)
		PLA9 A 0 ACS_ExecuteAlways (SC_MARINE_INIT, 0)
		Goto EnablePushablePreIdle

	EnablePushablePreIdle: //Allows you to push marines if they are in your way while idling.
		PLA9 A 0 A_ChangeFlag ("PUSHABLE", 1)
		//PLA9 A 0 A_Jump (256, "Idle")
		Goto Idle

	Idle: //Check if pushed, then look for enemies. If Player out of sight, begin to wander. If underwater, sink down.
		PLA9 A 0 A_JumpIf (momx != 0 || momy != 0, "MomentumCheck")

		PLA9 A 1 A_LookEx (0, 0, 0, 1200, 360, "DisablePushablePreAlternateChase")
		PLA9 A 0 A_CheckSight ("DisablePushablePreAlternateWander")

		PLA9 A 0 A_JumpIf (z - floorz == 0, 4) //If non-deep water or at bottom, don't sink.
		PLA9 A 0 A_JumpIf (waterlevel == 1, "SinkDown1")
		PLA9 A 0 A_JumpIf (waterlevel == 2, "SinkDown2")
		PLA9 A 0 A_JumpIf (waterlevel == 3, "SinkDown3")
		PLA9 A 0
		PLA9 A 0 //A_Jump (256, "Idle")
		Loop


//-----------------------------------------------------------------------


	MomentumCheck:
		PLA9 A 0 A_JumpIf (momx == 0 && momy == 0, "Idle")
		PLA9 A 4
		PLA9 A 0 A_JumpIf (momx == 0 && momy == 0, "Idle")
		PLA9 B 4
		PLA9 B 0 A_JumpIf (momx == 0 && momy == 0, "Idle")
		PLA9 C 4
		PLA9 C 0 A_JumpIf (momx == 0 && momy == 0, "Idle")
		PLA9 D 4
		//PLA9 D 0 A_Jump (256, "CheckIfAnyTargetsWhilePushed")
		Goto CheckIfAnyTargetsWhilePushed


	CheckIfAnyTargetsWhilePushed: //Look for potential targets while being pushed.
		PLA9 A 0 A_LookEx (0, 0, 0, 1200, 0, "DisablePushablePreAlternateChase")
		//PLA9 A 0 A_Jump (256, "Idle")
		Goto Idle


//-----------------------------------------------------------------------


	SinkDown1: //Ankle deep.
		PLA9 A 0 ThrustThingZ (0, 2, 1, 1)
		//PLA9 A 0 A_Jump (256, "Idle")
		Goto Idle

	SinkDown2: //Waist deep.
		PLA9 A 0 ThrustThingZ (0, 1, 1, 1)
		//PLA9 A 0 A_Jump (256, "Idle")
		Goto Idle

	SinkDown3: //Cmpletely underwater. Slower sinking.
		PLA9 A 0 ThrustThingZ (0, 2, 1, 0)
		//PLA9 A 0 A_Jump (256, "Idle")
		Goto Idle








//-----------------------------------------------------------------------
//
//	Chase, check target, check if stuck/underwater and back off states.
//
//-----------------------------------------------------------------------


	See: //Simply for A_SpidRefire. Goes to "ResetTimers".
		PLA9 A 0 //Dummy frame needed.
		//PLA9 A 0 A_Jump (256, "ResetTimers")
		Goto ResetTimers

	DisablePushablePreAlternateChase:
		PLA9 A 0 A_ChangeFlag ("PUSHABLE", 0)
		//PLA9 A 0 A_Jump (256, "AlternateChase")
		Goto AlternateChase

	AlternateChase:
		PLA9 A 0 A_Jump (85, "ChaseForwardAndLeft", "ChaseForwardAndRight") //1/3 chance of straferunning.
		//PLA9 A 0 A_Jump (256, "ChaseForward")
		Goto ChaseForward


	ChaseForward:
		PLA9 A 4 A_Recoil (-3.675)
		PLA9 B 4 A_Recoil (-3.675)
		PLA9 C 4 A_Recoil (-3.675)
		PLA9 D 4 A_Recoil (-3.675)
		//PLA9 D 0 A_Jump (256, "TurnAndAcquireTargetWhileChase")
		Goto TurnAndAcquireTargetWhileChase

	ChaseForwardAndLeft: //Straferunning 28% faster.
		PLA9 A 0 ThrustThing (angle*256/360-38.7, 4, 0, 0)
		PLA9 A 4 A_Recoil (-0.504)
		PLA9 A 0 ThrustThing (angle*256/360-38.7, 4, 0, 0)
		PLA9 B 4 A_Recoil (-0.504)
		PLA9 B 0 ThrustThing (angle*256/360-38.7, 4, 0, 0)
		PLA9 C 4 A_Recoil (-0.504)
		PLA9 C 0 ThrustThing (angle*256/360-38.7, 4, 0, 0)
		PLA9 D 4 A_Recoil (-0.504)
		//PLA9 D 0 A_Jump (256, "TurnAndAcquireTargetWhileChase")
		Goto TurnAndAcquireTargetWhileChase

	ChaseForwardAndRight:
		PLA9 A 0 ThrustThing (angle*256/360+38.7, 4, 0, 0)
		PLA9 A 4 A_Recoil (-0.504)
		PLA9 A 0 ThrustThing (angle*256/360+38.7, 4, 0, 0)
		PLA9 B 4 A_Recoil (-0.504)
		PLA9 B 0 ThrustThing (angle*256/360+38.7, 4, 0, 0)
		PLA9 C 4 A_Recoil (-0.504)
		PLA9 C 0 ThrustThing (angle*256/360+38.7, 4, 0, 0)
		PLA9 D 4 A_Recoil (-0.504)
		//PLA9 D 0 A_Jump (256, "TurnAndAcquireTargetWhileChase")
		Goto TurnAndAcquireTargetWhileChase


	TurnAndAcquireTargetWhileChase: //Allows for marines to turn and acquire targets.
		PLA9 AAAAAAAAAAAAAAAA 0 A_Chase ("", "")
		//PLA9 A 0 A_Jump (256, "CheckIfTargetInLOS")
		Goto CheckIfTargetInLOS

	CheckIfTargetInLOS: //Every PLA9 A frames allows for attack or backing off. This is to make the marines animate properly.
		PLA9 A 0 A_JumpIfTargetInLOS ("TargetInLOS")
		//PLA9 A 0 A_Jump (256, "CheckIfStuck")
		Goto CheckIfStuck

	TargetInLOS:
		PLA9 A 0 A_JumpIf (health <= 39, 3) //If 39 health or lower, get more aggressive.
		PLA9 A 0 A_JumpIfCloser (256, "AlternateBackOff") //The threshold of when to back off.
		PLA9 A 0 A_Jump (random(0, 256), "CheckIfStuck") //Makes the marines less inhuman.
		PLA9 A 0 A_JumpIfCloser (4096, "Missile") //Max target range.
		//PLA9 A 0 A_Jump (256, "CheckIfStuck")
		Goto CheckIfStuck


//-----------------------------------------------------------------------


	CheckIfStuck: //This state act as a "dynamic threshold timer". Checks if there is any momentum along the x- and y- axis. If false, add to the threshold timer. If true, clear the threshold timer and check if underwater instead.
		PLA9 A 0 A_JumpIf (momx != 0 || momy != 0, "NotStuck")
		//PLA9 A 0 A_Jump (256, "Stuck")
		Goto Stuck

	NotStuck:
		PLA9 A 0 A_JumpIfInventory ("MoveBackwardsThreshold", 0, "CheckIfUnderwater")
		PLA9 A 0 A_TakeInventory ("MoveBackwardsThreshold", 1)
		//PLA9 A 0 A_Jump (256, "CheckIfUnderwater")
		Goto CheckIfUnderwater

	Stuck:
		PLA9 A 0 A_JumpIf (momx == 0 && momy == 0, "AddToMoveBackWardsThresholdTimer")
		//PLA9 A 0 A_Jump (256, "CheckIfUnderwater")
		Goto CheckIfUnderwater


//-----------------------------------------------------------------------


	CheckIfUnderWater:
		PLA9 A 0 A_JumpIf (waterlevel == 1, "Swim1")
		PLA9 A 0 A_JumpIf (waterlevel == 2, "Swim2")
		PLA9 A 0 A_JumpIf (waterlevel == 3, "Swim3")
		//PLA9 A 0 A_Jump (256, "AddToTimers") //If not underwater, add to the regular timers instead.
		Goto AddToTimers


	Swim1:
		PLA9 A 0 A_JumpIf (z - floorz == 0, 2) //If non-deep water, don't swim.
		PLA9 A 0 ThrustThingZ (0, 8, 0, 1) //Simulates jumping/swimming in water.
		PLA9 A 0
		//PLA9 A 0 A_Jump (256, "AddToTimers")
		Goto AddToTimers

	Swim2:
		PLA9 A 0 ThrustThingZ (0, 16, 0, 1)
		//PLA9 A 0 A_Jump (256, "AddToTimers")
		Goto AddToTimers

	Swim3:
		PLA9 A 0 ThrustThingZ (0, 32, 0, 1)
		//PLA9 A 0 A_Jump (256, "AddToTimers")
		Goto AddToTimers


//-----------------------------------------------------------------------


	AddToMoveBackWardsThresholdTimer:
		PLA9 A 0 A_GiveInventory ("MoveBackwardsThreshold", 1)
		//PLA9 A 0 A_Jump (256, "CheckMoveBackWardsThresholdTimer")
		Goto CheckMoveBackWardsThresholdTimer

	CheckMoveBackWardsThresholdTimer:
		PLA9 A 0 A_JumpIfInventory ("MoveBackwardsThreshold", 1, "ClearMoveBackWardsThresholdTimer")
		//PLA9 A 0 A_Jump (256, "CheckIfUnderwater")
		Goto CheckIfUnderwater

	ClearMoveBackWardsThresholdTimer:
		PLA9 A 0 A_TakeInventory ("MoveBackwardsThreshold", 1)
		//PLA9 A 0 A_Jump (256, "MoveBackwardsAlternate")
		Goto MoveBackwardsAlternate


//-----------------------------------------------------------------------


	MoveBackwardsAlternate: //Same "A_Recoil" and "ThrustThing" values as in "BackOff" states, but with jumps to a different state.
		PLA9 A 0 A_Jump (256, 1,2,3)
		PLA9 A 0
		Goto MoveBackwards
		PLA9 A 0
		Goto MoveBackwardsAndLeft
		PLA9 A 0
		Goto MoveBackwardsAndRight


	MoveBackwards:
		PLA9 A 4 A_Recoil (3.675)
		PLA9 B 4 A_Recoil (3.675)
		PLA9 C 4 A_Recoil (3.675)
		PLA9 D 4 A_Recoil (3.675)
		PLA9 D 0 A_Jump (random(128, 256), 1)
		//PLA9 D 0 A_Jump (256, "MoveBackwards")
		Goto MoveBackwards
		PLA9 D 0
		//PLA9 D 0 A_Jump (256, "AddToTimers")
		Goto AddToTimers

	MoveBackwardsAndLeft:
		PLA9 A 4 A_Recoil (0.504)
		PLA9 A 0 ThrustThing (angle*256/360+166.7, 4, 0, 0)
		PLA9 B 4 A_Recoil (0.504)
		PLA9 B 0 ThrustThing (angle*256/360+166.7, 4, 0, 0)
		PLA9 C 4 A_Recoil (0.504)
		PLA9 C 0 ThrustThing (angle*256/360+166.7, 4, 0, 0)
		PLA9 D 4 A_Recoil (0.504)
		PLA9 D 0 ThrustThing (angle*256/360+166.7, 4, 0, 0)
		PLA9 D 0 A_Jump (random(128, 256), 1)
		//PLA9 D 0 A_Jump (256, "MoveBackwardsAndLeft")
		Goto MoveBackwardsAndLeft
		PLA9 D 0
		//PLA9 D 0 A_Jump (256, "AddToTimers")
		Goto AddToTimers

	MoveBackwardsAndRight:
		PLA9 A 4 A_Recoil (0.504)
		PLA9 A 0 ThrustThing (angle*256/360-166.7, 4, 0, 0)
		PLA9 B 4 A_Recoil (0.504)
		PLA9 B 0 ThrustThing (angle*256/360-166.7, 4, 0, 0)
		PLA9 C 4 A_Recoil (0.504)
		PLA9 C 0 ThrustThing (angle*256/360-166.7, 4, 0, 0)
		PLA9 D 4 A_Recoil (0.504)
		PLA9 D 0 ThrustThing (angle*256/360-166.7, 4, 0, 0)
		PLA9 D 0 A_Jump (random(128, 256), 1)
		//PLA9 D 0 A_Jump (256, "MoveBackwardsAndRight")
		Goto MoveBackwardsAndRight
		PLA9 D 0
		//PLA9 D 0 A_Jump (256, "AddToTimers")
		Goto AddToTimers








//-----------------------------------------------------------------------
//
//	Wander, check target, check if stuck/underwater and back off states.
//
//-----------------------------------------------------------------------


	DisablePushablePreAlternateWander: //Nearly identical to chase states.
		PLA9 A 0 A_ChangeFlag ("PUSHABLE", 0)
		//PLA9 A 0 A_Jump (256, "AlternateWander")
		Goto AlternateWander

	AlternateWander:
		PLA9 A 0 A_Jump (85, "WanderForwardAndLeft", "WanderForwardAndRight")
		//PLA9 A 0 A_Jump (256, "WanderForward")
		Goto WanderForward

	WanderForward:
		PLA9 A 4 A_Recoil (-3.675)
		PLA9 B 4 A_Recoil (-3.675)
		PLA9 C 4 A_Recoil (-3.675)
		PLA9 D 4 A_Recoil (-3.675)
		//PLA9 D 0 A_Jump (256, "TurnAndAcquireTargetWhileWander")
		Goto TurnAndAcquireTargetWhileWander

	WanderForwardAndLeft:
		PLA9 A 0 ThrustThing (angle*256/360-38.7, 4, 0, 0)
		PLA9 A 4 A_Recoil (-0.504)
		PLA9 A 0 ThrustThing (angle*256/360-38.7, 4, 0, 0)
		PLA9 B 4 A_Recoil (-0.504)
		PLA9 B 0 ThrustThing (angle*256/360-38.7, 4, 0, 0)
		PLA9 C 4 A_Recoil (-0.504)
		PLA9 C 0 ThrustThing (angle*256/360-38.7, 4, 0, 0)
		PLA9 D 4 A_Recoil (-0.504)
		//PLA9 D 0 A_Jump (256, "TurnAndAcquireTargetWhileWander")
		Goto TurnAndAcquireTargetWhileWander

	WanderForwardAndRight:
		PLA9 A 0 ThrustThing (angle*256/360+38.7, 4, 0, 0)
		PLA9 A 4 A_Recoil (-0.504)
		PLA9 A 0 ThrustThing (angle*256/360+38.7, 4, 0, 0)
		PLA9 B 4 A_Recoil (-0.504)
		PLA9 B 0 ThrustThing (angle*256/360+38.7, 4, 0, 0)
		PLA9 C 4 A_Recoil (-0.504)
		PLA9 C 0 ThrustThing (angle*256/360+38.7, 4, 0, 0)
		PLA9 D 4 A_Recoil (-0.504)
		//PLA9 D 0 A_Jump (256, "TurnAndAcquireTargetWhileWander")
		Goto TurnAndAcquireTargetWhileWander


	TurnAndAcquireTargetWhileWander:
		PLA9 AAAAAAAAAAAAAAAA 0 A_Wander
		PLA9 A 0 A_LookEx (0, 0, 0, 1200, 0, "CheckIfTargetInLOS")
		//PLA9 A 0 A_Jump (256, "CheckIfStuckWhileWander")
		Goto CheckIfStuckWhileWander


//-----------------------------------------------------------------------


	CheckIfStuckWhileWander:
		PLA9 A 0 A_JumpIf (momx != 0 || momy != 0, "NotStuckWhileWander")
		//PLA9 A 0 A_Jump (256, "StuckWhileWander")
		Goto StuckWhileWander

	NotStuckWhileWander:
		PLA9 A 0 A_JumpIfInventory ("MoveBackwardsThreshold", 0, "CheckIfUnderwaterWhileWander")
		PLA9 A 0 A_TakeInventory ("MoveBackwardsThreshold", 1)
		//PLA9 A 0 A_Jump (256, "CheckIfUnderwaterWhileWander")
		Goto CheckIfUnderwaterWhileWander

	StuckWhileWander:
		PLA9 A 0 A_JumpIf (momx == 0 && momy == 0, "AddToMoveBackWardsThresholdTimerWhileWander")
		//PLA9 A 0 A_Jump (256, "CheckIfUnderwaterWhileWander")
		Goto CheckIfUnderwaterWhileWander


//-----------------------------------------------------------------------


	CheckIfUnderwaterWhileWander:
		PLA9 A 0 A_JumpIf (waterlevel == 1, "SwimWhileWander1")
		PLA9 A 0 A_JumpIf (waterlevel == 2, "SwimWhileWander2")
		PLA9 A 0 A_JumpIf (waterlevel == 3, "SwimWhileWander3")
		//PLA9 A 0 A_Jump (256, "AlternateWander")
		Goto AlternateWander


	SwimWhileWander1:
		PLA9 A 0 A_JumpIf (z - floorz == 0, 2)
		PLA9 A 0 ThrustThingZ (0, 8, 0, 1)
		PLA9 A 0
		//PLA9 A 0 A_Jump (256, "AlternateWander")
		Goto AlternateWander

	SwimWhileWander2:
		PLA9 A 0 ThrustThingZ (0, 16, 0, 1)
		//PLA9 A 0 A_Jump (256, "AlternateWander")
		Goto AlternateWander

	SwimWhileWander3:
		PLA9 A 0 ThrustThingZ (0, 32, 0, 1)
		//PLA9 A 0 A_Jump (256, "AlternateWander")
		Goto AlternateWander


//-----------------------------------------------------------------------


	AddToMoveBackWardsThresholdTimerWhileWander:
		PLA9 A 0 A_GiveInventory ("MoveBackwardsThreshold", 1)
		//PLA9 A 0 A_Jump (256, "CheckMoveBackWardsThresholdTimerWhileWander")
		Goto CheckMoveBackWardsThresholdTimerWhileWander

	CheckMoveBackWardsThresholdTimerWhileWander:
		PLA9 A 0 A_JumpIfInventory ("MoveBackwardsThreshold", 1, "ClearMoveBackWardsThresholdTimerWhileWander")
		//PLA9 A 0 A_Jump (256, "CheckIfUnderwaterWhileWander")
		Goto CheckIfUnderwaterWhileWander

	ClearMoveBackWardsThresholdTimerWhileWander:
		PLA9 A 0 A_TakeInventory ("MoveBackwardsThreshold", 1)
		//PLA9 A 0 A_Jump (256, "MoveBackwardsAlternateWhileWander")
		Goto MoveBackwardsAlternateWhileWander


//-----------------------------------------------------------------------


	MoveBackwardsAlternateWhileWander:
		PLA9 A 0 A_Jump (256, 1,2,3)
		PLA9 A 0
		Goto MoveBackwardsWhileWander
		PLA9 A 0
		Goto MoveBackwardsAndLeftWhileWander
		PLA9 A 0
		Goto MoveBackwardsAndRightWhileWander


	MoveBackwardsWhileWander:
		PLA9 A 4 A_Recoil (3.675)
		PLA9 B 4 A_Recoil (3.675)
		PLA9 C 4 A_Recoil (3.675)
		PLA9 D 4 A_Recoil (3.675)
		PLA9 D 0 A_Jump (random(128, 256), 1)
		//PLA9 D 0 A_Jump (256, "MoveBackwardsWhileWander")
		Goto MoveBackwardsWhileWander
		PLA9 A 0
		//PLA9 A 0 A_Jump (256, "AlternateWander")
		Goto AlternateWander

	MoveBackwardsAndLeftWhileWander:
		PLA9 A 4 A_Recoil (0.504)
		PLA9 A 0 ThrustThing (angle*256/360+166.7, 4, 0, 0)
		PLA9 B 4 A_Recoil (0.504)
		PLA9 B 0 ThrustThing (angle*256/360+166.7, 4, 0, 0)
		PLA9 C 4 A_Recoil (0.504)
		PLA9 C 0 ThrustThing (angle*256/360+166.7, 4, 0, 0)
		PLA9 D 4 A_Recoil (0.504)
		PLA9 D 0 ThrustThing (angle*256/360+166.7, 4, 0, 0)
		PLA9 D 0 A_Jump (random(128, 256), 1)
		//PLA9 D 0 A_Jump (256, "MoveBackwardsAndLeftWhileWander")
		Goto MoveBackwardsAndLeftWhileWander
		PLA9 D 0
		//PLA9 D 0 A_Jump (256, "AlternateWander")
		Goto AlternateWander

	MoveBackwardsAndRightWhileWander:
		PLA9 A 4 A_Recoil (0.504)
		PLA9 A 0 ThrustThing (angle*256/360-166.7, 4, 0, 0)
		PLA9 B 4 A_Recoil (0.504)
		PLA9 B 0 ThrustThing (angle*256/360-166.7, 4, 0, 0)
		PLA9 C 4 A_Recoil (0.504)
		PLA9 C 0 ThrustThing (angle*256/360-166.7, 4, 0, 0)
		PLA9 D 4 A_Recoil (0.504)
		PLA9 D 0 ThrustThing (angle*256/360-166.7, 4, 0, 0)
		PLA9 D 0 A_Jump (random(128, 256), 1)
		//PLA9 D 0 A_Jump (256, "MoveBackwardsAndRightWhileWander")
		Goto MoveBackwardsAndRightWhileWander
		PLA9 D 0
		//PLA9 D 0 A_Jump (256, "AlternateWander")
		Goto AlternateWander








//-----------------------------------------------------------------------
//
//			Back off from target and missile states.
//
//-----------------------------------------------------------------------


	AlternateBackOff: //Same formula as in the chase states, but only backwards movement and different jumps.
		PLA9 A 0 A_Jump (256, 1,2,3)
		PLA9 A 0
		Goto BackOffBackwards
		PLA9 A 0
		Goto BackOffBackwardsAndLeft
		PLA9 A 0
		Goto BackOffBackwardsAndRight

	BackOffBackwards:
		PLA9 A 0 A_FaceTarget
		PLA9 A 4 A_Recoil (3.675)
		PLA9 B 4 A_Recoil (3.675)
		PLA9 C 4 A_Recoil (3.675)
		PLA9 D 4 A_Recoil (3.675)
		PLA9 D 0 A_JumpIf (health <= 50, "Missile") //A bit desperate.
		PLA9 D 0 A_Jump (random(128, 256), 1)
		//PLA9 D 0 A_Jump (256, "BackOffBackwards")
		Goto BackOffBackwards
		PLA9 D 0 A_SpidRefire
		PLA9 D 0 //A_Jump (256, "Missile")
		Goto Missile

	BackOffBackwardsAndLeft:
		PLA9 A 0 A_FaceTarget
		PLA9 A 4 A_Recoil (0.504)
		PLA9 B 0 ThrustThing (angle*256/360+166.7, 4, 0, 0)
		PLA9 B 4 A_Recoil (0.504)
		PLA9 B 0 ThrustThing (angle*256/360+166.7, 4, 0, 0)
		PLA9 C 4 A_Recoil (0.504)
		PLA9 C 0 ThrustThing (angle*256/360+166.7, 4, 0, 0)
		PLA9 D 4 A_Recoil (0.504)
		PLA9 D 0 ThrustThing (angle*256/360+166.7, 4, 0, 0)
		PLA9 D 0 A_JumpIf (health <= 50, "Missile")
		PLA9 D 0 A_Jump (random(128, 256), 1)
		//PLA9 D 0 A_Jump (256, "BackOffBackwardsAndLeft")
		Goto BackOffBackwardsAndLeft
		PLA9 D 0 A_SpidRefire
		PLA9 D 0 //A_Jump (256, "Missile")
		Goto Missile

	BackOffBackwardsAndRight:
		PLA9 A 0 A_FaceTarget
		PLA9 A 4 A_Recoil (0.504)
		PLA9 A 0 ThrustThing (angle*256/360-166.7, 4, 0, 0)
		PLA9 B 4 A_Recoil (0.504)
		PLA9 B 0 ThrustThing (angle*256/360-166.7, 4, 0, 0)
		PLA9 C 4 A_Recoil (0.504)
		PLA9 C 0 ThrustThing (angle*256/360-166.7, 4, 0, 0)
		PLA9 D 4 A_Recoil (0.504)
		PLA9 D 0 ThrustThing (angle*256/360-166.7, 4, 0, 0)
		PLA9 D 0 A_JumpIf (health <= 50, "Missile")
		PLA9 D 0 A_Jump (random(128, 256), 1)
		//PLA9 D 0 A_Jump (256, "BackOffBackwardsAndRight")
		Goto BackOffBackwardsAndRight
		PLA9 D 0 A_SpidRefire
		PLA9 D 0 //A_Jump (256, "Missile")
		Goto Missile


	Missile:
		PLA9 E 0 A_JumpIfInventory("SSGFireCooldown", 1, "AlternateChase")
		PLA9 E 0 A_JumpIfInTargetInventory("IsRed", 1, "ClearTarget")
		PLA9 E 0 A_JumpIfInTargetInventory("StealthMode", 3, 2)
		PLA9 E 0 A_JumpIfInTargetInventory("StealthMode", 2, "ClearTarget")
		PLA9 E 0 A_JumpIfCloser(1024, 1)
		Goto AlternateChase
		PLA9 E 0 A_Jump (256, 1, 2)
		PLA9 E 0
		Goto Missile2+1
		PLA9 E 0
		Goto Missile3+1
	Missile2:
		PLA9 E 0 A_Jump (random(64, 256), 1)
		Goto Missile3+1
		PLA9 E 0 A_JumpIfInTargetInventory("IsRed", 1, "ClearTarget")
		PLA9 E 0 A_JumpIfInTargetInventory("StealthMode", 3, 2)
		PLA9 E 0 A_JumpIfInTargetInventory("StealthMode", 2, "ClearTarget")
		PLA9 E 0 A_JumpIfCloser(1024, 1)
		Goto AlternateChase
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 0 A_CustomBulletAttack (15.7, 11.7, 20, 5, "HandgunPuff", 1, 512)
		PLA9 E 0 A_PlayWeaponSound ("weapons/sshotf")
		PLA9 E 0 A_GiveInventory("SSGFireCooldown")
		PLA9 E 0 NoiseAlert (0, 0)
		PLA9 F 1 Bright A_Recoil (-0.368856)
		PLA9 F 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 F 0 A_FaceTarget
		PLA9 F 1 Bright A_Recoil (-0.368856)
		PLA9 F 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 F 0 A_FaceTarget
		PLA9 F 1 Bright A_Recoil (-0.368856)
		PLA9 F 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 F 0 A_FaceTarget
		PLA9 F 1 Bright A_Recoil (-0.368856)
		PLA9 F 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 F 0 A_FaceTarget
		PLA9 F 1 Bright A_Recoil (-0.368856)
		PLA9 F 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 F 0 A_FaceTarget
		PLA9 F 1 Bright A_Recoil (-0.368856)
		PLA9 F 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 F 0 A_FaceTarget
		PLA9 F 1 Bright A_Recoil (-0.368856)
		PLA9 F 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 F 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 0 A_PlayWeaponSound ("weapons/sshoto")
		PLA9 A 0 NoiseAlert (0, 0)
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 0 A_PlayWeaponSound ("weapons/sshotl")
		PLA9 D 0 NoiseAlert (0, 0)
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 0 A_PlayWeaponSound ("weapons/sshotc")
		PLA9 C 0 NoiseAlert (0, 0)
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 D 0 A_ClearTarget
		PLA9 D 0 A_Chase ("", "")
		PLA9 D 0 A_SpidRefire
		PLA9 D 0 A_Jump (random(0, 64), 1)
		Goto Missile2
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 A 0 A_Jump (random(128, 256), 44)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-192, 1, 0, 0)
		PLA9 D 0 A_SpidRefire
		Goto Missile2
		PLA9 D 0 A_SpidRefire
		Goto Missile2
	Missile3:
		PLA9 E 0 A_Jump (random(64, 256), 1)
		Goto Missile2+1
		PLA9 E 0 A_JumpIfInTargetInventory("IsRed", 1, "ClearTarget")
		PLA9 E 0 A_JumpIfInTargetInventory("StealthMode", 3, 2)
		PLA9 E 0 A_JumpIfInTargetInventory("StealthMode", 2, "ClearTarget")
		PLA9 E 0 A_JumpIfCloser(1024, 1)
		Goto AlternateChase
		PLA9 A 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 0 A_CustomBulletAttack (11.2, 7.1, 20, 5, "HandgunPuff", 768)
		PLA9 E 0 A_PlayWeaponSound ("weapons/sshotf")
		PLA9 E 0 A_GiveInventory("SSGFireCooldown")
		PLA9 E 0 NoiseAlert (0, 0)
		PLA9 F 1 Bright A_Recoil (-0.368856)
		PLA9 F 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 F 0 A_FaceTarget
		PLA9 F 1 Bright A_Recoil (-0.368856)
		PLA9 F 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 F 0 A_FaceTarget
		PLA9 F 1 Bright A_Recoil (-0.368856)
		PLA9 F 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 F 0 A_FaceTarget
		PLA9 F 1 Bright A_Recoil (-0.368856)
		PLA9 F 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 F 0 A_FaceTarget
		PLA9 F 1 Bright A_Recoil (-0.368856)
		PLA9 F 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 F 0 A_FaceTarget
		PLA9 F 1 Bright A_Recoil (-0.368856)
		PLA9 F 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 F 0 A_FaceTarget
		PLA9 F 1 Bright A_Recoil (-0.368856)
		PLA9 F 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 F 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 E 1 A_Recoil (-0.368856)
		PLA9 E 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 E 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 0 A_PlayWeaponSound ("weapons/sshoto")
		PLA9 A 0 NoiseAlert (0, 0)
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 0 A_PlayWeaponSound ("weapons/sshotl")
		PLA9 D 0 NoiseAlert (0, 0)
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 0 A_PlayWeaponSound ("weapons/sshotc")
		PLA9 C 0 NoiseAlert (0, 0)
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 D 0 A_ClearTarget
		PLA9 D 0 A_Chase ("", "")
		PLA9 D 0 A_SpidRefire
		PLA9 D 0 A_Jump (random(0, 64), 1)
		Goto Missile3
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 A 0 A_Jump (random(128, 256), 44)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 A 1 A_Recoil (-0.368856)
		PLA9 A 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 A 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 B 1 A_Recoil (-0.368856)
		PLA9 B 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 B 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 C 1 A_Recoil (-0.368856)
		PLA9 C 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 C 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 D 0 A_FaceTarget
		PLA9 D 1 A_Recoil (-0.368856)
		PLA9 D 0 ThrustThing (angle*256/360-64, 1, 0, 0)
		PLA9 D 0 A_SpidRefire
		Goto Missile3
		PLA9 D 0 A_SpidRefire
		Goto Missile3








//-----------------------------------------------------------------------
//
//				Pain, death and respawn states.
//
//-----------------------------------------------------------------------


	Pain.FireSpecial:
		Goto DisablePushablePreAlternatePainBackOff
	Pain.Fire:
		PLA9 G 0 ACS_ExecuteAlways(974, 0)
		Goto DisablePushablePreAlternatePainBackOff
	Pain.ChemicalSpecial:
		Goto DisablePushablePreAlternatePainBackOff
	Pain.Chemical:
		PLA9 G 0 ACS_ExecuteAlways(361, 0)
		Goto DisablePushablePreAlternatePainBackOff

	Pain:
		PLA9 G 0
		PLA9 G 0 //A_Jump (256, "DisablePushablePreAlternatePainBackOff")
		Goto DisablePushablePreAlternatePainBackOff

	DisablePushablePreAlternatePainBackOff: //If woken up by getting hurt, clear the +PUSHABLE flag.
		PLA9 G 0 A_ChangeFlag ("PUSHABLE", 0)
		//PLA9 G 0 A_Jump (256, "AlternatePainBackOff")
		Goto AlternatePainBackOff


//-----------------------------------------------------------------------


	AlternatePainBackOff:
		PLA9 G 0 A_Jump (256, 2,3)
		PLA9 G 0
		Goto PainBackOffBackwards
		PLA9 G 0
		Goto PainBackOffBackwardsAndLeft
		PLA9 G 0
		Goto PainBackOffBackwardsAndRight


	PainBackOffBackwards:
		PLA9 G 0 A_FaceTarget
		PLA9 G 4 A_Recoil (3.675)
		PLA9 G 0 A_Pain
		PLA9 G 4 A_Recoil (3.675)
		//PLA9 G 0 A_Jump (256, "CheckIfTargetInLOS") //Try to attack right back if possible.
		Goto CheckIfTargetInLOS

	PainBackOffBackwardsAndLeft:
		PLA9 G 0 A_FaceTarget
		PLA9 G 4 A_Recoil (0.504)
		PLA9 G 0 ThrustThing (angle*256/360+166.7, 4, 0, 0)
		PLA9 G 0 A_Pain
		PLA9 G 4 A_Recoil (0.504)
		PLA9 G 0 ThrustThing (angle*256/360+166.7, 4, 0, 0)
		//PLA9 G 0 A_Jump (256, "CheckIfTargetInLOS")
		Goto CheckIfTargetInLOS

	PainBackOffBackwardsAndRight:
		PLA9 G 0 A_FaceTarget
		PLA9 G 4 A_Recoil (0.504)
		PLA9 G 0 ThrustThing (angle*256/360-166.7, 4, 0, 0)
		PLA9 G 0 A_Pain
		PLA9 G 4 A_Recoil (0.504)
		PLA9 G 0 ThrustThing (angle*256/360-166.7, 4, 0, 0)
		//PLA9 G 0 A_Jump (256, "CheckIfTargetInLOS")
		Goto CheckIfTargetInLOS


//-----------------------------------------------------------------------


	Death:
		PLA9 H 8
		PLA9 I 6 A_PlayerScream
		PLA9 J 6 A_NoBlocking
		PLA9 KLM 6
		PLA9 N -1
		Stop

	XDeath:
		PLA9 O 4
		PLA9 P 0 A_NoBlocking
		PLA9 PPP 0 A_SpawnItemEx("Credits1",random(-4,4),random(-4,4),random(32,48),random(-4,4),random(-4,4),random(4,8),0,0,128)
		PLA9 P 0 A_SpawnItemEx("PowerupCrate",random(-4,4),random(-4,4),random(32,48),random(2,4),random(-2,2),random(2,4),0,0,230)
		PLA9 P 0 A_Scream
		PLA9 P 0 A_PlaySound ("misc/gib", 7)
		PLA9 P 0 A_PlaySound ("misc/gib", 6)
		PLA9 P 4 A_SpawnItemEx ("MarineGoreExplosion")
		PLA9 Q 4 A_SpawnItemEx ("MarineGoreExplosion2")
		PLA9 R 4 A_SpawnItemEx ("MarineGoreExplosion3")
		PLA9 STUV 4
		PLA9 W -1
		stop

	Death.MassDriver:
	Death.AntiArmor:
	Death.Explosion:
		PLA9 H 0 ThrustThing(angle*256/360+(random(0,192)), random(20,40), 1, 0)
		PLA9 H 1 ThrustThingZ(0,45,0,0)
		PLA9 H 0 A_Jump(128,"Death")
		goto XDeath

	Death.FireSpecial:
	Death.Fire:
		// stop all sound channels
		PLA9 A 0 A_StopSound (0) PLA9 A 0 A_StopSound (4)
		PLA9 A 0 A_StopSound (1) PLA9 A 0 A_StopSound (5)
		PLA9 A 0 A_StopSound (2) PLA9 A 0 A_StopSound (6)
		PLA9 A 0 A_StopSound (3) PLA9 A 0 A_StopSound (7)
		DISR K 0 A_SpawnItemEx("BurningCorpse",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
		DISR K 0 A_NoBlocking
		PLA9 N -1 A_SetTranslucent(0.0,0)
		stop

	Death.ChemicalSpecial:
	Death.Chemical:
		// stop all sound channels
		PLA9 A 0 A_StopSound (0) PLA9 A 0 A_StopSound (4)
		PLA9 A 0 A_StopSound (1) PLA9 A 0 A_StopSound (5)
		PLA9 A 0 A_StopSound (2) PLA9 A 0 A_StopSound (6)
		PLA9 A 0 A_StopSound (3) PLA9 A 0 A_StopSound (7)
		DISR K 0 A_SpawnItemEx("ChemicalCorpse",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
		DISR K 0 A_NoBlocking
		PLA9 N -1 A_SetTranslucent(0.0,0)
		stop

	Dismiss:
		TNT1 A 0 A_SpawnItemEx ("TeleportFog", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
		stop






//-----------------------------------------------------------------------
//
//						Timer states.
//
//-----------------------------------------------------------------------


	AddToTimers:
		PLA9 A 0 A_GiveInventory ("ClearTarget", 1)
		PLA9 A 0 A_CheckSight ("AddToNoPlayerInSightTimer") //No point in adding a counter if the Player has been out of sight for only a few frames.

		PLA9 A 0 A_JumpIfInventory ("NoPlayerInSight", 0, "CheckTimers")
		PLA9 A 0 A_TakeInventory ("NoPlayerInSight", 128) //If Player in sight, clear this timer. Otherwise, the marine will sometimes suddenly stop and start idling when you go around a corner.
		//PLA9 A 0 A_Jump (256, "CheckTimers")
		Goto CheckTimers
	//These two act as one state.
	AddToNoPlayerInSightTimer:
		PLA9 A 0 A_GiveInventory ("NoPlayerInSight", 1)
		//PLA9 A 0 A_Jump (256, "CheckTimers")
		Goto CheckTimers

	CheckTimers:
		PLA9 A 0 A_JumpIfInventory ("ClearTarget", 1, "ClearTarget")
		PLA9 A 0 A_JumpIfInventory ("NoPlayerInSight", 128, "CheckIfPlayerInSight")
		//PLA9 A 0 A_Jump (256, "AlternateChase")
		Goto AlternateChase


	ClearTarget:
		PLA9 A 0 A_TakeInventory ("ClearTarget", 1)
		PLA9 A 0 A_ClearTarget
		//PLA9 A 0 A_Jump (256, "CheckTimers") //In case both of the timers have been reached, check again so that the other one will reset as well.
		Goto CheckTimers

	CheckIfPlayerInSight:
		PLA9 A 0 A_TakeInventory ("NoPlayerInSight", 128)
		PLA9 A 0 A_CheckSight ("EnablePushablePreIdle")
		//PLA9 A 0 A_Jump (256, "CheckTimers")
		Goto CheckTimers


//-----------------------------------------------------------------------


	ResetTimers: //This is ONLY connected to "See", "Missile" and "Pain" states. Reset timers so that the marines don't all of sudden decide to idle in the middle of a battle.
		PLA9 A 0 A_JumpIfInventory ("ClearTarget", 0, 4)
		PLA9 A 0 A_TakeInventory ("ClearTarget", 2)
		PLA9 A 0 A_JumpIfInventory ("NoPlayerInSight", 0, 2)
		PLA9 A 0 A_TakeInventory ("NoPlayerInSight", 128)
		PLA9 A 0
		//PLA9 A 0 A_Jump (256, "AlternateChase")
		Goto AlternateChase
	}
}
