ACTOR DeathAssassin 28913
{ 
Monster
Health 300
Radius 20
Height 56
Speed 10
Mass 100
PainChance 50
MeleeDamage 12
MeleeRange 20
Damagefactor "RedZombieDemonTech", 0
Damagefactor "ZombieRocket", 0
Damagefactor "ZombieDemonTech", 0
DamageFactor "RedZDemonTechProjectile", 0.0
Damagefactor "GeneralTracer", 0
DamageFactor "EMGEx", 0
DamageFactor "RST", 0.0
DamageFactor "SoulToxic", 0.0
DamageFactor "BeheComet", 0.0
DamageFactor "FatFlamer", 0.0
Damagefactor "HTZombie", 0.0
DamageFactor "MiniRocket", 0.0
DamageFactor "ZombieCannon", 0.0
Damagefactor "ZExplosiveBullets", 0.0
Damagefactor "ZGrenade", 0.0
+FLOORCLIP
+MISSILEMORE
+MISSILEEVENMORE
+DONTHARMSPECIES
+QUICKTORETALIATE
Species "Zombie"
DamageFactor "RedZDemonTechProjectile", 0.0
DropItem "PortableMedkit" 120
DropItem "ArmorPlate" 120
DropItem "AmmoPack" 100
DropItem "HandGrenadeAmmo" 200 1
DropItem "MineAmmo" 100 1
DropItem "NewShell" 256 8
DropItem "DemonAmmo" 162 80
DropItem "BackPack" 70 1
DropItem "QuadBarrelShotgun" 80 1
DropItem "DemonTechRifle" 80 1
DropItem "RocketLauncher" 80 1
DropItem "MarineSquadBeacon" 20 1
AttackSound ""
SeeSound "deathassassin/sight"
PainSound "deathassassin/pain"
DeathSound "deathassassin/death"
ActiveSound "superzombie/active"
MeleeSound "deathassassin/melee"
Obituary "%o was defeated by a Death Assassin."
Tag "$NEDeathAss"
var int user_lowlag;
States
 {
  Spawn:
	DASA A 0 NoDelay ACS_NamedExecuteAlways("ModifyMonster",0,1)
	Goto Idle
  Idle:
		DASA A 10 A_Look
		DASA Z 10 A_Look
		Loop
  See:
	TNT1 A 0 A_JumpIf(user_lowlag == 1,"MoreSee")
	TNT1 A 0 A_JumpIfTargetInLOS("MoreSee",0,0,0,0)
	DASA ABCD 2 A_Chase
	Loop
  MoreSee:
	TNT1 A 0 A_SetUserVar("user_lowlag",1)
		DASA AABB 2 A_Chase
		TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
		TNT1 A 0 A_JumpIfTargetInLOS("Strafing")
		DASA CCDD 2 A_Chase
		TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
		TNT1 A 0 A_Jump(46,"Phase")
		Loop
	Strafing:
		TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
		TNT1 A 0 A_Chase("","Missile",CHF_DONTMOVE)
		DASA AABB 3 A_GiveInventory("DTZombieStrafing",1)
		TNT1 A 0 A_SpawnItem("FootStep",0,0,0,0)
		TNT1 A 0 A_Chase("","Missile",CHF_DONTMOVE)
		DASA CCDD 3 A_GiveInventory("DTZombieStrafing",1)
		Goto See
	Phase:
        TNT1 A 0 A_PlaySound("phaseimp/teleport")
        DASA E 2 A_FaceTarget
        DASA E 1 A_SetTranslucent(0.75)
        DASA E 1 A_SetTranslucent(0.55)
        DASA E 1 A_SetTranslucent(0.35)
		DASA E 1 A_SetTranslucent(0.15)
		DASA E 1 A_SetTranslucent(0)
        Goto Phased
	UnPhase:
        TNT1 A 0 A_PlaySound("phaseimp/teleport")
		DASA E 1 A_SetTranslucent(0)
		DASA E 1 A_SetTranslucent(0.15)
        DASA E 1 A_SetTranslucent(0.35)
        DASA E 1 A_SetTranslucent(0.55)
        DASA E 1 A_SetTranslucent(0.75)
		TNT1 A 0 A_SetTranslucent(1)
        DASA E 2 A_FaceTarget		
        Goto See
	Phased:
        DASA AABBCCDDAABBCCDDAABBCCDDAABBCCDD 1 A_ExtChase(0,0)
        DASA AABBCCDDAABBCCDD 1 A_Chase
		TNT1 A 0 A_Jump(24,"UnPhase")
        Goto Phased+32
	Pause:
		TNT1 A 0 A_GiveInventory("DTZombieStrafing",1)
		DASA A 20 A_PlaySound("weapons/demontechsteam")
		Goto See
	PauseNoDTR:
		TNT1 A 0 A_GiveInventory("DTZombieStrafing",1)
		Goto See
	Melee:
		DASA EE 2 A_FaceTarget
        TNT1 A 0 A_SetTranslucent(1)
		TNT1 A 0 A_ChangeFlag(SLIDESONWALLS,1)
	    TNT1 A 0 ThrustThingZ(0,20,0,1)
	    DASA E 2 A_Recoil(-24)
        DASA E 5 A_FaceTarget
        DASA E 3 A_MeleeAttack
        DASA E 5 A_FaceTarget		
        Goto See
	Missile:
		TNT1 A 0 A_SetShootable
		TNT1 A 0 A_SetTranslucent(1)
		TNT1 A 0 A_JumpIfCloser(500,"Quad")
		TNT1 A 0 A_Jump(64,"Rocket")
	Normal: 
		TNT1 A 0 A_GiveInventory("DTZombieStrafing",1)
		DASA E 2 A_FaceTarget
		TNT1 A 0 A_CustomMissile("RedZDemonTechProjectile",35,0,random(-8,8),0)
		DASA F 2 Bright A_PlaySound("weapons/demontechfire",CHAN_WEAPON)
		TNT1 A 0 A_GiveInventory("DTZombieStrafing",1)
		TNT1 A 0 A_Jump(20,"Pause")
		TNT1 A 0 A_GiveInventory("DTZombieStrafing",1)
		TNT1 A 0 A_SpidRefire
		Goto Normal+1
	Rocket:
		TNT1 A 0 A_GiveInventory("DTZombieStrafing",1)
		DASA E 12 A_FaceTarget
		DASA F 6 Bright A_CustomMissile("CFZombieRocket", 30, 0, 0)
		TNT1 A 0 A_GiveInventory("DTZombieStrafing",1)
		DASA E 10 A_PlaySound("rocket/drumspin")
		TNT1 A 0 A_Jump(30,"PauseNoDTR")
		TNT1 A 0 A_GiveInventory("DTZombieStrafing",1)
		TNT1 A 0 A_SpidRefire
		Goto Rocket+1
	Quad:
		TNT1 A 0 A_GiveInventory("HellCloneStrafing",1)
		DASA E 10 A_FaceTarget
		TNT1 A 0 A_PlaySound("weapons/qsgfire")
		TNT1 A 0 A_GiveInventory("HellCloneStrafing",1)
		TNT1 AAAAAAAAAAAA 0 Bright A_CustomMissile("MonsterTracer2",Random(28,34),0,Random(6,-6),0)
		DASA F 5 Bright A_CustomBulletAttack(15.4,10.6,24,Random(1,4)*3)
		TNT1 A 0 A_GiveInventory("HellCloneStrafing",1)
		DASA E 15 A_FaceTarget
		TNT1 A 0 A_PlaySound("weapons/qsgopen")
		TNT1 A 0 A_SpawnItemEx("ShellCasing", -8, 6, 36, Random(2, 6), 0, Random(1, 3), Random(-80, -90), 128)
		DASA E 1 A_SpawnItemEx("ShellCasing", -10, 6, 36, Random(2, 6), 0, Random(1, 3), Random(-80, -90), 128)
		TNT1 A 0 A_SpawnItemEx("ShellCasing", -8, 6, 38, Random(2, 6), 0, Random(1, 3), Random(-80, -90), 128)
		DASA E 2 A_SpawnItemEx("ShellCasing", -10, 6, 38, Random(2, 6), 0, Random(1, 3), Random(-80, -90), 128)
		DASA E 4 A_PlaySound("weapons/qsgshellslide")	
		DASA E 4 A_GiveInventory("HellCloneStrafing",1)
		DASA E 6 A_PlaySound("weapons/qsgclose")	
		TNT1 A 0 A_GiveInventory("HellCloneStrafing",1)
		Goto See
	Pain:
		TNT1 A 0 A_Jump(87,"PainMissile")
		TNT1 A 0 A_GiveInventory("DTZombieStrafing",1)
		DASA G 3 A_Pain
		Goto See
	PainMissile:
		DASA G 1
		DASA G 3 A_Pain
		Goto Missile
	Death:
		DASA H 5 A_Scream
		DASA I 5 A_Fall
		DASA J 5 A_SpawnItem("BodyCrash",0,0,0,0)
		DASA J 5
		DASA L -1
		Stop
	XDeath:
		DASA O 3
		DASA P 3 A_XScream
		DASA Q 3 A_SpawnItemEx("GibbedGenerator",0,0,0,0,0,0,0,128,0)
		DASA R 3 A_Fall
		DASA STUV 3
		DASA W -1 
		Stop
	Raise:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx("VileHealEffect",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		DASA LJJIH 5
		Goto See
	}
}

Actor DTZombieStrafing : CustomInventory
{
-COUNTITEM
+INVENTORY.QUIET
+INVENTORY.UNDROPPABLE
+INVENTORY.ALWAYSPICKUP
+INVENTORY.AUTOACTIVATE       
Inventory.Amount 1
Inventory.MaxAmount 0
States
	{
	Pickup:
		TNT1 A 1 
		TNT1 A 1 A_Jump(188,2)
		TNT1 A 1 A_GiveInventory("DTZombieJumping",1)
		TNT1 A 1 A_JumpIf(velx != 0 || vely != 0,2)
		TNT1 A 1 A_Jump(256,2)
		TNT1 A 1 A_Jump(235,5)
		TNT1 A 1 A_JumpIfInventory("DTStrafeSens",1,3)
		TNT1 A 1 A_GiveInventory("DTStrafeSens",1)
		TNT1 A 1 A_Jump(256,2)	
		TNT1 A 1 A_TakeInventory("DTStrafeSens",1)
		TNT1 A 1 A_JumpIfInventory("DTStrafeSens",1,3)
		TNT1 A 1 ThrustThing(angle*256/360+38.7,3,0,0)
		TNT1 A 1 A_Jump(256,2)	
		TNT1 A 1 ThrustThing(angle*256/360+38.7,-3,0,0)
		TNT1 A 1 A_FaceTarget
		TNT1 A 1 A_Jump(24,2)
		TNT1 A 1 A_JumpIfCloser(300,2)
		TNT1 A 1 A_Recoil(-1)
		Stop
		TNT1 A 1 A_Recoil(1)
		Stop	
	}
}

Actor DTZombieJumping : DTZombieStrafing
{
States
	{
	Pickup:
		TNT1 A 1 
		TNT1 A 1 A_CheckFloor(1)
		Stop
		TNT1 A 1 A_Jump(242,2)
		TNT1 A 1 ThrustThingZ(0,25,0,1)
		Stop
		TNT1 A 1
		Stop
	}
}

ACTOR DTStrafeSens : Inventory { Inventory.MaxAmount 1 }