

const int PZV_TURRET_ORIGIN_Z = 47;
const int PZV_MACHINEGUN_Y = -14; // relative to *turret's* origin!
const int PZV_MACHINEGUN_Z = 55;
const int PZV_CANNON_Z = 17; // relative to *turret's* origin!

// no model for the turret, remains sprite

ACTOR Panzerkampfwagen_V_Panther: FBD_EnemyMBT 17886
{
	//$category "EDAY Bosses"
	Height 70
	Species "Nazis"
	Obituary "%o was shredded to bits by a Panzer Tank."	
	
	Tag "$BOSS_PZV_PANTHER" // "Pz.Kpfw. V Panther"
	// boss name "Pz.Kpfw. V"
	
	// green-to-gray only needed for the sprite: the model has dedicated skins!
	Translation "152:159=100:107", "9:12=109:111", "48:79=96:111", "128:143=101:111", "13:15=111:111", "144:151=108:108"
	
	+DONTHARMSPECIES
	-DOHARMSPECIES // Monsters with this flag will be able to receive damage from projectile attacks from other monsters sharing the same species. By default projectiles fired by monsters belonging to the same species can only deal damage and trigger infighting via A_Explode but they deal no impact damage; this flag overrides that behavior, forcing the monster to receive impact damage from projectiles as well.
	
	States
	{
		Spawn:
			TNK1 B 0 NODELAY ACS_NamedExecuteWithResult("FBD_RunMonster", 10) // tank weak spot
			TNT1 A 0 A_GiveInventory("TargetIsABoss") // advanced monster behavior
			TNT1 A 0 A_ChangeFlag("NOPAIN", 1)
			
			TNT1 A 0 A_GiveInventory("RocketAMmo", 1) // these bosses stay put until the ACS script monitoring them allows them moving
			
			// an intangible minion monster that follows us using A_Warp and shoots in our stead
			TNT1 A 0 A_SpawnItemEx ("Pz_Kpfw_V_Turret", 0, 0, PZV_TURRET_ORIGIN_Z, velx, vely, velz, angle, SXF_SETMASTER | SXF_ABSOLUTEANGLE)
			
			TNK1 B 1 // takes 5 tics for slaughtermap init
			TNT1 A 0 ACS_NamedExecuteWithResult("AdjustHeadboxMkII", -60, 0, 1, 1) // in the ass // force create
				// cannot use z=0, headboxes treat it as "not yet initialized"
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
			Goto Standby
			
		See:
			TNK1 A 1
			TNT1 A 0 ACS_NamedExecuteWithResult("FBD_DisplayDualBossHealth", 400, 401, 7, 7)
			TNT1 A 0 A_JumpIfInventory("RocketAMmo", 1, "Halt")
			TNT1 A 0 A_PlaySound("juggernaut/engine", 4, 1, 1)
			TNT1 A 0 A_SpawnItemEx ("EnemyTnkTreadsDamage" , 60, 0, 0, 0, 0, 0, angle, SXF_ABSOLUTEANGLE | SXF_ABSOLUTEVELOCITY)
			TNT1 A 0 A_JumpIfTargetInLOS("Rolling", 0, JLOSF_DEADNOJUMP)
			Goto RollingCantSee			
	}
}

ACTOR HeavyMachinegunProjectilePzV: HeavyMachinegunProjectileEnemy
{
	+THRUSPECIES
	+DONTHARMSPECIES
	Species "Nazis"
}

ACTOR PzVTankShell: EnemyTankShell
{
	Species "Nazis" // otherwise it is blocked by the tank's body and explodes immediately
}

ACTOR PzVTankFireEffect: TankFireEffect
{
	Species "Nazis"
	+DONTHARMSPECIES
}

ACTOR Pz_Kpfw_V_Turret: EnemyMBTTurret
{
	Height 2 // because unlike MBT's turret this one is not on the ground but floats @ 61 map unit height
	//	(since I'm too lazy to change the sprite's origin)
		
	Scale 1.3
	+FORCEXYBILLBOARD
	+DONTHARMSPECIES
	-DOHARMSPECIES // Monsters with this flag will be able to receive damage from projectile attacks from other monsters sharing the same species. By default projectiles fired by monsters belonging to the same species can only deal damage and trigger infighting via A_Explode but they deal no impact damage; this flag overrides that behavior, forcing the monster to receive impact damage from projectiles as well.
	
	var int user_mg_shots;
	
	Species "Nazis"
	
	states
	{
		Spawn:
			TNT1 A 0 A_GiveInventory("TargetIsABoss") // advanced monster behavior
		Live:
		Idle:
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			// copy aggro from the body
			TNT1 A 0 A_TransferPointer(AAPTR_MASTER, AAPTR_DEFAULT, AAPTR_TARGET, AAPTR_TARGET)
			TNT1 A 0 A_JumpIfTargetInLOS("See", 0, JLOSF_DEADNOJUMP)
			TNT1 A 0 A_JumpIfInventory("TankIsDead", 1, "Jam", AAPTR_MASTER)
			Loop
			
		See:
			//***Che: after the tank dies to weak spot but before it exploses
			TNT1 A 0 A_JumpIfInventory("TankIsDead", 1, "Jam", AAPTR_MASTER)
			
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			
			TNT1 A 0 A_JumpIfInventory("TankIsDead", 1, "Jam", AAPTR_MASTER)
			TNT1 A 0 A_TransferPointer(AAPTR_MASTER, AAPTR_DEFAULT, AAPTR_TARGET, AAPTR_TARGET)
			TNT1 A 0 A_JumpIfTargetInLOS(1, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT)
			Goto Idle
			TNT1 A 0
			
		See2:	
			TAPZ AAAAAAA 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			// copy aggro from the body
			TNT1 A 0 A_TransferPointer(AAPTR_MASTER, AAPTR_DEFAULT, AAPTR_TARGET, AAPTR_TARGET)	
			
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(6)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(6)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(6)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(6)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(6)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			
		Missile:
			TNT1 A 0 A_JumpIfInventory("TankIsDead", 1, "Jam", AAPTR_MASTER)
			TNT1 A 0 A_TransferPointer(AAPTR_MASTER, AAPTR_DEFAULT, AAPTR_TARGET, AAPTR_TARGET)
			TNT1 A 0 A_JumpIfTargetInLOS(1, 0, JLOSF_DEADNOJUMP)
			Goto See
			TNT1 A 0 A_JumpIfTargetInLOS(1, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT)
			Goto Idle
			
			TNT1 A 0
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			
		Rotate:	
			//***Che: after the tank dies to weak spot but before it exploses
			TAPZ T 0 A_JumpIfInventory("TankIsDead", 1, "Jam", AAPTR_MASTER)
			TAPZ T 1 A_Warp(AAPTR_MASTER, 0, 0, 0, 0, WARPF_USECALLERANGLE )
			TAPZ T 0 A_FaceTarget(6)
			TAPZ T 0 A_TransferPointer(AAPTR_MASTER, AAPTR_DEFAULT, AAPTR_TARGET, AAPTR_TARGET)
			TAPZ T 0 A_JumpIfTargetInLOS("Shoot", 6, JLOSF_NOSIGHT | JLOSF_DEADNOJUMP) // we locked in
			TAPZ T 0 A_JumpIfTargetInLOS("Rotate", 0, JLOSF_DEADNOJUMP) // in sight but outside of our firing arc - keep rotating
			Goto Idle // out of sight or no target			
			
		Jam: //***Che
			// stops other infighting tanks from kicking this dead horse 
			// (they keep attacking it because they aggro at this turret 
			//  but the turret is not dead until the tank base deletes it on it final explosion)
			TNT1 A 0 A_ChangeFlag("NOTARGET", 1)
			TNT1 A 0 A_ChangeFlag("NEVERTARGET", 1) // NPCs too!
		StayJammed:
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			Loop
			
		Shoot:
			
			//***Che: after the tank dies to weak spot but before it explodes
			"----" A 0 A_JumpIfInventory("TankIsDead", 1, "Jam", AAPTR_MASTER)			
			TNT1 A 0 A_JumpIfTargetInLOS(1, 0, JLOSF_DEADNOJUMP)
			Goto See
			
			// no kinslayer check: not designed to infight
			// no etarget type check: not designed to fight other tanks
			
			TNT1 A 0 A_Jump(192, "Cannon")
			
			
			TAPZ A 1 A_FaceTarget
			TNT1 A 0 A_SetUserVar("user_mg_shots", Random(6,14))
			
		MachinegunLoop:	
				TNT1 A 0 A_PlaySound("TANKMG", 1)
				TNT1 A 0 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
				TNT1 A 0 A_JumpIfInventory("TankIsDead", 1, "Jam", AAPTR_MASTER)
				
				//***Che: do NOT adjust aim if target goes out of sight or is invisible
				TNT1 A 0 A_JumpIf(CallAcs("FBD_TargetIsInvisible"), 6)
				TNT1 A 0 A_JumpIfTargetInLOS(2, 0, JLOSF_DEADNOJUMP)
				TNT1 A 0 A_Jump(256, 4)
				TAPZ A 1 A_FaceTarget
				// the auto-aimed version
				//***Che cannot check on the projectile's side because target inventory checks do not work for fast projectiles
				TNT1 A 0 A_CustomMissile("HeavyMachinegunProjectilePzV", PZV_MACHINEGUN_Z, PZV_MACHINEGUN_Y, random(-4, 4), 0)
				TNT1 A 0 A_Jump(256, 2)
				// the not autoaimed version
				TAPZ A 1 A_CustomMissile("HeavyMachinegunProjectilePzV", PZV_MACHINEGUN_Z, PZV_MACHINEGUN_Y, angle + random(-4, 4), CMF_ABSOLUTEANGLE | CMF_OFFSETPITCH | CMF_SAVEPITCH)
				TNT1 AAA 0 A_CustomMissile("HeavyMachinegunFlash", PZV_MACHINEGUN_Z, PZV_MACHINEGUN_Y, 0, 0)
				TNT1 A 0 A_CustomMissile("YellowFlareSmall", PZV_MACHINEGUN_Z, PZV_MACHINEGUN_Y, 0, 0)
				TNT1 A 0 A_CustomMissile("RifleCaseSpawn", PZV_MACHINEGUN_Z, PZV_MACHINEGUN_Y, 0, 0)
				
				TNT1 A 0 A_SetUserVar("user_mg_shots", user_mg_shots - 1)
				

				// Copying the chaingunner hack: keep firing at the dead player until his dead body splatters into a gory shower of innards
				TNT1 A 0 A_JumpIfTargetInLOS(2) // but only if we have a line of sight
				TNT1 A 0 A_JumpIf(true, 2)
				TNT1 A 0 A_JumpIfInTargetInventory("ChainguyguyContinue", 1, "MachinegunLoop")
				
				
				TNT1 A 0 A_JumpIf(user_mg_shots <= 0, "MachinegunLoopEnd") // always organize loops
					// in a way that keeps looping if the jump doesn't happen (Zandronum client)
					// - meaning the jump has to leat *out* of the loop, rather than provide the looping
					//
			Loop 
		
		MachinegunLoopEnd:
			
			
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			
			//***Che: after the tank dies to weak spot but before it exploses
			TNT1 A 0 A_JumpIfInventory("TankIsDead", 1, "Jam", AAPTR_MASTER)
			
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			Goto See
			
		Cannon:
		
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(6)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			
			//***Che: after the tank dies to weak spot but before it exploses
			TNT1 A 0 A_JumpIfInventory("TankIsDead", 1, "Jam", AAPTR_MASTER)
			
			//TNKZ AAA 0 A_Chase("","")
			//TAPZ A 1 A_FaceTarget
			
			
			TNT1 A 0 A_PlaySound("TANKF", 1)
			
			
			//***Che cannot check on the projectile's side because target inventory checks do not work for fast projectiles
			TNT1 A 0 A_CustomMissile("PzVTankShell", PZV_CANNON_Z, 0, random(-5, 5), 0)
			
			TNT1 A 0 A_CustomMissile("PzVTankFireEffect", PZV_CANNON_Z, 0, 0, 0)
		
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			TAPZ A 1 A_Warp(AAPTR_MASTER, 0, 0, PZV_TURRET_ORIGIN_Z, 0, WARPF_USECALLERANGLE )
			TAPZ A 1 A_FaceTarget(12)
			Goto Shoot
		
		Death:
			TNT1 A 0
			Stop
		XDeath:
			TNT1 A 0
			Stop
	}
}	
