
// *** REHAULED BY CHEBMASTER -- A NEAR TOTAL REWRITE OF MARINE CODE. 
// The evil and friendly marines now use common code base and synthetic state machines

#include MARINES_npcs.txt

//***Che: the DoomEd numbers below are supposed to be *enemies*!
// Just load any map with them in Zandronum barebones without any mods -- they will attack you!
// Oblige 6 even has an option for adding them as monsters to the maps generated.
// But beginning with BD21 (or earlier?) they were re-defined as "PrePlacedMarineXXX", friendly
//  so all maps relying on them as enemies became broken, overran with humongous crowds of friendly marines.

// This wee Cheb fixed that.


/*
  I repeat again: these are *CHAOS* marines. Baddies.
  9101 = MarineFist
  9102 = MarineBerserk
  9103 = MarineChainsaw
  9104 = MarinePistol  -rifle
  9105 = MarineShotgun
  9106 = MarineSSG
  9107 = MarineChaingun
  9108 = MarineRocket
  9109 = MarinePlasma
  9110 = MarineRailgun
  9111 = MarineBFG
*/

// FBD & Chebskies-EDAY place the friendly marines at 17801..17811


/*
	captured marine spawn chance
	40% rifle
	36% shotgun
	20% minigun
	16.2% plasma
	4% super shotgun
	1.9% rocket launcher
	1.8% railgun
	0.1% bfg 9000
*/	


//chainsaw use MAR1 P to distinguish in the editor from evil marines

ACTOR Marine_Chainsaw: MarineNPCAbstract 17803
{
	// all now inherit muted green from the base class
	//Translation "112:127=117:127" // green, but darker - the same as the rifle variation
	DropItem "Chain_saw"
	States
	{
		Spawn:
			PLA1 A 0 NODELAY A_SetUserVar("user_npc_type", 8)
			"----" A 0 A_SetUserVar("user_default_weapon", 3) // chainsaw
			"----" A 0 A_SetUserVar("user_melee_weapon", 3) // chainsaw
			Goto SetupDefaults
	}
}


ACTOR Marine_Rifle: MarineNPCAbstract 17804
{
	// all now inherit muted green from the base class
	//Translation "112:127=117:127" // green, but darker
	DropItem "RifleDrop"
	States
	{
		Spawn:
			MAR2 A 0 NODELAY A_SetUserVar("user_npc_type", 0)
			"----" A 0 A_SetUserVar("user_default_weapon", 4) // rifle
			"----" A 0 A_SetUserVar("user_melee_weapon", 1) // punch
			Goto SetupDefaults
	}
}

ACTOR Marine_AfroGuy: MarineNPCAbstract 17812
{
	// muted green uniform, darker skin
	Translation "112:127=[148,183,117]:[10,15,9]", "48:79=64:79", "208:223=64:79"
	DropItem "RifleDrop"
	States
	{
		Spawn:
			MTRF C 0 NODELAY A_SetUserVar("user_npc_type", 9)
			"----" A 0 A_SetUserVar("user_default_weapon", 4) // rifle
			"----" A 0 A_SetUserVar("user_melee_weapon", 2) // berserk
			Goto SetupDefaults
	}
}

ACTOR Marine_Athena: MarineNPCAbstract 17813
{
	// all now inherit muted green from the base class

	DeathSound "fbd_athena/death"
	PainSound "fbd_athena/pain"	
	
	DropItem "RifleDrop"
	States
	{
		Spawn:
			MAR2 A 0 NODELAY A_SetUserVar("user_npc_type", 10)
			"----" A 0 A_SetUserVar("user_default_weapon", 4) // rifle
			"----" A 0 A_SetUserVar("user_melee_weapon", 1) // punch
			"----" A 0 A_SetUserVar("user_voice_set", CHE_ATHENA)
			Goto SetupDefaults
	}
}

ACTOR Marine_Shotgun: MarineNPCAbstract 17805
{
	DropItem "Shotgun"
	// all now inherit muted green from the base class
	//Translation "112:127=96:111" // gray
	States
	{
		Spawn:
			PLA3 A 0 NODELAY A_SetUserVar("user_npc_type", 1)
			"----" A 0 A_SetUserVar("user_default_weapon", 5)
			"----" A 0 A_SetUserVar("user_melee_weapon", 1) // punch (10% chainsaw)			
			Goto SetupDefaults			
	}
}


ACTOR Marine_SSG: MarineNPCAbstract 17806
{
	DropItem "SSGSpawner"
	// all now inherit muted green from the base class
	//Translation "112:122=96:111", "123:127=[39,39,39]:[0,0,0]"
	States
	{
		Spawn:
			PLA3 A 0 NODELAY A_SetUserVar("user_npc_type", 6)
			"----" A 0 A_SetUserVar("user_default_weapon", 6)
			"----" A 0 A_SetUserVar("user_melee_weapon", 2) // berserk
			Goto SetupDefaults			
	}
}


ACTOR Marine_Minigun: MarineNPCAbstract 17807
{
	DropItem "Mini_Gun"
	// all now inherit muted green from the base class
	//Translation  "112:127=32:47", "48:79=64:79" // red
	States
	{
		Spawn:
			PL42 A 0 NODELAY A_SetUserVar("user_npc_type", 2)
			"----" A 0 A_SetUserVar("user_default_weapon", 7) // minigun
			"----" A 0 A_SetUserVar("user_melee_weapon", 2) // punch
			Goto SetupDefaults
	}
}


ACTOR Marine_Rocket: MarineNPCAbstract 17808
{
	DropItem "RocketLauncher"
	// all now inherit muted green from the base class
	//translation "112:127=144:151" // brown
	States
	{
		Spawn:	
			PL5S A 0 NODELAY A_SetUserVar("user_npc_type", 3)
			"----" A 0 A_SetUserVar("user_default_weapon", 8)
			"----" A 0 A_SetUserVar("user_melee_weapon", 2) // berserk punch 			
			Goto SetupDefaults
	}
}


ACTOR Marine_PlasmaGun: MarineNPCAbstract 17809
{
	DropItem "PlasmaRifle"
	// all now inherit muted green from the base class
	//translation "112:127=[0,128,192]:[0,0,0]" // blue
	States
	{
		Spawn:
			PLA6 A 0 NODELAY A_SetUserVar("user_npc_type", 4)
			"----" A 0 A_SetUserVar("user_default_weapon", 9) // plasma
			"----" A 0 A_SetUserVar("user_melee_weapon", 2) // berserk punch			
			Goto SetupDefaults
	}
}

ACTOR Marine_Railgun: MarineNPCAbstract 17810
{
	DropItem "RailgunSpawner"
	// all now inherit muted green from the base class
	//translation "112:120=[0,128,255]:[0,75,151]", "121:123=200:207", "124:125=240:247", "126:127=0:0"
	States
	{
		Spawn:
			PLA6 A 0 NODELAY A_SetUserVar("user_npc_type", 5)
			"----" A 0 A_SetUserVar("user_default_weapon", 10)
			"----" A 0 A_SetUserVar("user_melee_weapon", 2) // berserk punch			
			Goto SetupDefaults
	}
}

ACTOR Marine_BFG: MarineNPCAbstract 17811
{
	DropItem "BFG9000Spawner"
	// all now inherit muted green from the base class
	//translation "112:121=168:177", "122:127=[140,0,98]:[60,0,30]"
	States
	{
		Spawn:
			PLA6 A 0 NODELAY A_SetUserVar("user_npc_type", 7)
			"----" A 0 A_SetUserVar("user_default_weapon", 11)
			"----" A 0 A_SetUserVar("user_melee_weapon", 2) // berserk punch			
			Goto SetupDefaults
	}
}


ACTOR MarineHeavyMG 17731
{
	//$category "FBD NPC Marines"
	Translation "112:127=[148,183,117]:[10,15,9]" // muted green
	
	var int user_npc_type;
	
	Health 120
	Radius 20
	Height 56
	Speed 0
	PainChance 200
	Monster
	+FRIENDLY
	+FLOORCLIP
	
	PainSound "*pain"
	DeathSound "DSMADTH"
	SeeSound "MRNAT"
	AttackSound None
	ActiveSound None
	Obituary "$OB_ZOMBIE"
	DamageFactor "Melee", 20.0 DamageFactor "Kick", 20.0
	DamageFactor "ExtremePunches", 20.0
	+MISSILEMORE
	Mass 999999
	States
	{
		Spawn:
			TTR2 A 1 A_Look
			Loop
		See:
			TTR2 AAA 1 A_Chase
			TNT1 A 0 A_JumpIfTargetInLOS("See")
			Goto Forget
		Forget:
			TTR2 A 1
			TNT1 A 0 A_ClearTarget
			TTR2 A 1
			Goto Spawn
		Missile:
			TTR2 A 10 A_FaceTarget
		ActualFiring:	
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
				TNT1 A 0 A_JumpIf(CheckClass("FBD_Spectro", AAPTR_TARGET, true), 4)
				TNT1 A 0 A_JumpIfTargetInLOS(2)
				TNT1 A 0 A_Jump(256, 2)
				TNT1 A 0 A_FaceTarget
			TTR2 A 4 //A_FaceTarget
			TNT1 AA 0 A_CustomMissile("HeavyMachinegunFlash",40, 10)
			TNT1 A 0 A_PlaySound("TANKMG", 1)
			TNT1 A 0 A_CustomMissile("HeavyMachinegunProjectile",40, 10, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH)
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
				TNT1 A 0 A_JumpIf(CheckClass("FBD_Spectro", AAPTR_TARGET, true), 4)
				TNT1 A 0 A_JumpIfTargetInLOS(2)
				TNT1 A 0 A_Jump(256, 2)
				TNT1 A 0 A_FaceTarget
			TTR2 A 4 //A_FaceTarget
			TNT1 AA 0 A_CustomMissile("HeavyMachinegunFlash",40, -10)
			TNT1 A 0 A_PlaySound("TANKMG", 1)
			TNT1 A 0 A_CustomMissile("HeavyMachinegunProjectile",40, -10, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH)
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
				TNT1 A 0 A_JumpIf(CheckClass("FBD_Spectro", AAPTR_TARGET, true), 4)
				TNT1 A 0 A_JumpIfTargetInLOS(2)
				TNT1 A 0 A_Jump(256, 2)
				TNT1 A 0 A_FaceTarget
			TTR2 A 4 //A_FaceTarget
			TNT1 AA 0 A_CustomMissile("HeavyMachinegunFlash",40, 10)
			TNT1 A 0 A_PlaySound("TANKMG", 1)
			TNT1 A 0 A_CustomMissile("HeavyMachinegunProjectile",40, 10, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH)
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
				TNT1 A 0 A_JumpIf(CheckClass("FBD_Spectro", AAPTR_TARGET, true), 4)
				TNT1 A 0 A_JumpIfTargetInLOS(2)
				TNT1 A 0 A_Jump(256, 2)
				TNT1 A 0 A_FaceTarget
			TTR2 A 4 //A_FaceTarget
			TNT1 AA 0 A_CustomMissile("HeavyMachinegunFlash",40, -10)
			TNT1 A 0 A_PlaySound("TANKMG", 1)
			TNT1 A 0 A_CustomMissile("HeavyMachinegunProjectile",40, -10, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH)
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
				TNT1 A 0 A_JumpIf(CheckClass("FBD_Spectro", AAPTR_TARGET, true), 4)
				TNT1 A 0 A_JumpIfTargetInLOS(2)
				TNT1 A 0 A_Jump(256, 2)
				TNT1 A 0 A_FaceTarget
			TTR2 A 4 //A_FaceTarget
			TNT1 AA 0 A_CustomMissile("HeavyMachinegunFlash",40, 10)
			TNT1 A 0 A_PlaySound("TANKMG", 1)
			TNT1 A 0 A_CustomMissile("HeavyMachinegunProjectile",40, 10, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH)
			//***Che: do NOT adjust aim if target goes out of sight or is invisible
				TNT1 A 0 A_JumpIf(CheckClass("FBD_Spectro", AAPTR_TARGET, true), 4)
				TNT1 A 0 A_JumpIfTargetInLOS(2)
				TNT1 A 0 A_Jump(256, 2)
				TNT1 A 0 A_FaceTarget
			TTR2 A 4 //A_FaceTarget
			TNT1 AA 0 A_CustomMissile("HeavyMachinegunFlash",40, -10)
			TNT1 A 0 A_PlaySound("TANKMG", 1)
			TNT1 A 0 A_CustomMissile("HeavyMachinegunProjectile",40, -10, angle, CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH)
					//***Che: do NOT adjust aim if target goes out of sight or is invisible
				TNT1 A 0 A_JumpIf(CheckClass("FBD_Spectro", AAPTR_TARGET, true), 4)
				TNT1 A 0 A_JumpIfTargetInLOS(2)
				TNT1 A 0 A_Jump(256, 2)
				TNT1 A 0 A_FaceTarget
			//Goto See
			TNT1 A 0 A_Jump(112, "See") // suppressive fire much
			Loop
		Pain:
			TTR2 A 3
			TTR2 A 3 A_Pain
			Goto See
		Death:
			"----" A 0
			"----" A 0 A_SpawnItemEx("HeavyMachineGun", 0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION,0)
			"----" A 0 A_recoil(10)
			"----" A 0 A_JumpIfInTargetInventory("IsPlayer", 1, "PretendWasntKilled")
			XPL5 A 5
			XPL5 B 5 A_Scream
			XPL5 C 5 A_NoBlocking
			XPL5 D 5
			XPL5 E -1
			Stop
			
			
		PretendWasntKilled:	
			"----" A 0
			"----" A 0 ACS_NamedExecuteWithResult("FBD_SynthMarineVoice", CHE_WATCHIT)
			"----" A 0 A_ChangeFlag("NOBLOCKMAP", 1)
			"----" A 0 A_ChangeFlag("SOLID", 0)
			"----" A 0 A_ChangeFlag("SHOOTABLE", 0)
			"----" A 0 A_SetUserVar("user_npc_type", -1)
			"----" A 0 ACS_NamedExecuteWithResult("FBD_RespawnTrlefraggedNPC") // will treat npc type = -1 as a rifle marine
		FakeDodgeRoll:
			PROL ABCDE 4 // the respawn script will set our state to "Vanish" when it succeeds
			"----" A 0 ACS_NamedExecuteWithResult("FaceClosestPlayer")
			"----" A 0 A_recoil(10)
			Loop
		Vanish:
			TNT1 A 30
			Stop			
			
	}
}

ACTOR TitlemapMarineHeavyMG: MarineHeavyMG
{
	States
	{
		Death:
			XPL5 A 5
			XPL5 B 5 A_Scream
			XPL5 C 5 A_NoBlocking
			XPL5 D 5
			XPL5 E -1
			Stop
	}
}

