Class Bloodfiend : Demon
{
  Default
  {
    Health 250;
    PainChance 140;
    Speed 12;
    Radius 30;
    Height 56;
    Mass 450;
    Obituary "%o succumbed to a Bloodfiend's bile.";
    HitObituary "%o was mauled by a Bloodfiend.";
    SeeSound "Monster/sg2sit";
    AttackSound "Monster/sg2atk";
    PainSound "demon/Pain";
    DeathSound "monster/sg2dth";
    ActiveSound "demon/sg2act";
    Monster;
    +FloorClip
    +LongMeleeRange
    +DontHarmClass
  }

  States
  {
  Spawn:
    SAR2 AB 10 A_Look();
    Loop;
  See:
    SAR2 AABBCCDD 2 A_Chase();
    Loop;
  Melee:
    SAR2 EF 8 A_FaceTarget();
    SAR2 G 8 A_SargAttack();
    Goto See;
  Missile:
    SAR2 GF 8 A_FaceTarget();
    SAR2 E 8
    {
      A_PlaySound("Weapons/bloodf");
      A_SpawnProjectile("Bloodshot",22,0,-1,0,0);
      A_SpawnProjectile("Bloodshot",22,0, 1,0,0);
    }
    Goto See;
  Pain:
    SAR2 H 2;
    SAR2 H 2 A_Pain();
    Goto See;
  Death:
    SAR2 I 8;
    SAR2 J 8 A_Scream();
    SAR2 K 4;
    SAR2 L 4 A_NoBlocking();
    SAR2 M 4;
    SAR2 N -1;
    Stop;
  Raise:
    SAR2 NMLKJI 5;
    Goto See;
  }
}

Class Bloodshot : Actor
{
  Default
  {
    Radius 3;
    Height 3;
    Speed 20;
    Damage 2;
    RenderStyle "Translucent";
	Scale 0.8;
    Alpha 0.80;
    DeathSound "weapons/bloodx";
    Projectile;
    +ThruGhost
  }

  States
  {
  Spawn:
    FGOR A 2 Bright A_CStaffMissileSlither();
    FGOR A 0 A_SpawnItemEx("Bloodtrail",0,0,0,0,0,0,128);
    FGOR B 2 Bright A_CStaffMissileSlither();
    FGOR B 0 A_SpawnItemEx("Bloodtrail",0,0,0,0,0,0,128);
    Loop;
  Death:
    FGOR CDE 3 Bright;
    Stop;
  }
}

Class Bloodtrail : Actor
{
  Default
  {
    Radius 1;
    Height 1;
    RenderStyle "Translucent";
	Scale 0.5;
    Alpha 0.67;
    Projectile;
  }

  States
  {
  Spawn:
    TNT1 A 3;
    FGOR FGH 3 BRIGHT;
    Stop;
  }
}

Class Lurker : Bloodfiend
{
  Default
  {
    RenderStyle "Translucent";
    Obituary "%o didn't See the lurker that was shooting at him.";
    HitObituary "%o didn't See the lurker right in front of him.";
    //DropItem "BloodAmmo";
    Alpha 0.25;
  }
}



Class HectebusClone : Actor
{
  Default
  {
    Health 1500;
    Radius 56;
    Height 80;
    Scale 1.25;
    Speed 12;
    PainChance 100;
    BloodColor "73 00 00";
    Mass 1500;
    SeeSound "Hectebus/Sight";
    PainSound "Hectebus/Pain";
    DeathSound "Hectebus/Death";
    ActiveSound "Hectebus/Active";
    Obituary "%o was cremated by a Hectebus.";
    Monster;
    +FloorClip
    +MissileMore
	
  }

  States
  {
  Spawn:
    HECT AAAAAAAAAABBBBBBBBBB 1 A_Look();
    Loop;
  See:
    HECT ABC 6 A_Chase();
    HECT D 0 A_PlaySound("Hectebus/Step", CHAN_7);
    HECT DEF 6 A_Chase();
    HECT A 0 A_PlaySound("Hectebus/Step", CHAN_7);
    Loop;
  Missile:
    HECT G 0 A_PlaySound("Hectebus/Attack", CHAN_6);
    HECT GGGG 4 A_FaceTarget();
    HECT G 0 A_Jump(64, "Missile2");
  Missile1:
    HECT U 4 Bright A_SpawnProjectile("Hecteball", 35, 41, 0);
    HECT IGG 4 A_FaceTarget();
    HECT K 0 A_SpidReFire();
    HECT V 4 Bright A_SpawnProjectile("Hecteball", 35, -41, 0);
    HECT IGG 4 A_FaceTarget();
    HECT K 0 A_Jump(96, "See");
    HECT K 0 A_SpidReFire();
    Loop;
  Missile2:
    HECT H 4 Bright
    {
      A_SpawnProjectile("Hecteball", 35,  41, Random(-4, 2));
      A_SpawnProjectile("Hecteball", 35, -41, Random(-2, 4));
    }
    HECT IGG 4 A_FaceTarget();
    HECT H 4 Bright
    {
      A_SpawnProjectile("Hecteball", 35,  41, Random(-4, 2));
      A_SpawnProjectile("Hecteball", 35, -41, Random(-2, 4));
    }
    HECT IGG 4 A_FaceTarget();
    HECT H 4 Bright
    {
      A_SpawnProjectile("Hecteball", 35,  41, Random(-4, 2));
      A_SpawnProjectile("Hecteball", 35, -41, Random(-2, 4));
    }
    HECT IGG 4 A_FaceTarget();
    HECT K 0 A_Jump(200, "See");
    HECT K 0 A_SpidReFire();
    Loop;
  Pain:
    HECT J 8 A_Pain();
    Goto See;
  Death:
    HECT K 6 A_Scream();
    HECT LM 6;
    HECT N 6 A_Fall();
    HECT OPQRS 6;
    HECT T -1;
    Stop;
  }
}

Class Hecteball : Actor //Hectebus Fireball
{
  Default
  {
    Radius 10;
    Height 8;
    Speed 20;
    Damage 16;
    RenderStyle "Add";
    Alpha 0.97;
    SeeSound "Imp/Attack";
    DeathSound "Imp/ShotX";
    Decal "Scorch";
    Projectile;
  }

  States
  {
  Spawn:
    HECF AB 4 Bright;
    Loop;
  Death:
    HECF CDE 4 Bright;
    Stop;
  }
}


Class DarkDevil : DoomImp
{
  Default
  {
    obituary "%o was scorched by a Dark Devil.";
    hitobituary "%o was shredded by a Dark Devil.";
    health 160;
    radius 20;
    height 56;
    mass 120;
    speed 12;
    painchance 110;
    seesound "monster/ddvsit";
    painsound "monster/ddvpai";
    deathsound "monster/ddvdth";
    activesound "monster/ddvact";
    MONSTER;
    +FLOORCLIP
    +DONTHARMCLASS
    +MISSILEMORE
	
  }

  states
  {
  Spawn:
    DDVL AB 10 A_Look();
    loop;
  See:
    DDVL AABBCCDD 3 A_Chase();
    loop;
  Missile:
    DDVL EF 5 A_FaceTarget();
    DDVL GGG 3 A_CustomComboAttack("DarkDevilBall",32,3,"imp/melee");
    DDVL G 0 A_Jump(200, "EndMissile");
    DDVL GGGGGG 3 A_CustomComboAttack("DarkDevilBall",32,3,"imp/melee");
  EndMissile:
    DDVL G 3;
    goto See;
  Melee:
    DDVL EF 5 A_FaceTarget();
    DDVL G 6 A_CustomComboAttack("DarkDevilBall",32,8,"imp/melee");
    goto See;
  Pain:
    DDVL H 2;
    DDVL H 2 A_Pain();
    goto See;
  Death:
    DDVL I 0 A_jump(130,"death2");
    DDVL I 8;
    DDVL J 8 A_Scream();
    DDVL K 6;
    DDVL L 6 A_NoBlocking();
    DDVL M -1;
    stop;
  Death2:
    DDVL N 5;
    DDVL O 5 A_Scream();
    DDVL P 5 A_NoBlocking();
    DDVL Q 5;
    DDVL R -1;
    stop;
  XDeath:
    DDVL S 5;
    DDVL T 5 A_XScream();
    DDVL U 5;
    DDVL V 5 A_NoBlocking();
    DDVL WXY 5;
    DDVL Z -1;
    stop;
  Raise:
    DDVL ML 8;
    DDVL KJI 6;
    goto See;
  }
}

Class DarkDevilBall : Actor
{
  Default
  {
    Radius 8;
    Height 6;
    Speed 16;
    Damage 2;
    Scale 0.75;
    RENDERSTYLE "ADD";
    ALPHA 0.67;
    SeeSound "imp/attack";
    DeathSound "imp/shotx";
    Decal "DoomImpScorch";
    PROJECTILE;
  }

  States
  {
  Spawn:
    DKB1 AB 3 Bright A_Weave(random(-5,5), 0, random(-5,5), 0);
    Loop;
  Death:
    DKB1 CDE 4 Bright;
    Stop;
  }
}




//----------------SCIENTIST---------------//

Class FemaleScientist : Actor
{
  Default
  {
    obituary "%o was stabbed by a zombie scientist.";
    health 15;
    mass 90;
    speed 10;
    Radius 19;
    Height 52;
    painchance 200;
    seesound "fem/sight";
    painsound "fem/pain";
    deathsound "fem/death";
    activesound "fem/active";
    MONSTER;
    +FLOORCLIP
  }

  States
  {
   Spawn:
    FSZK AB 10 A_Look();
    loop;
  See:
    FSZK AABBCCDD 4 A_Chase();
    loop;
  Melee:
    FSZK E 4 A_FaceTarget();
    FSZK F 8 A_CustomMeleeAttack (random (1, 5) *5, "KnifeHit", "skeleton/swing");
    FSZK E 4;
    goto See;
  Pain:
    FSZK G 3;
    FSZK G 3 A_Pain();
    goto See;
  Death:
    FSZK H 5;
    FSZK I 5 A_Scream();
    FSZK J 5 A_NoBlocking();
    FSZK K 5;
    FSZK L 5;
    FSZK M 5;
    FSZK N -1;
    stop;
  XDeath:
    FSZK O 5;
    FSZK P 5 A_XScream();
    FSZK Q 5 A_NoBlocking();
    FSZK RSTUV 5;
    FSZK W -1;
    stop;
  Raise:
    FSZK MLKJIH 5;
    goto See;
  }
}

Class FemaleScientist2 : Actor
{
  Default
  {
    obituary "%o was bludgeoned to death by a zombie scientist.";
    health 15;
    mass 90;
    speed 10;
    Radius 19;
    Height 52;
    painchance 200;
    seesound "fem/sight";
    painsound "fem/pain";
    deathsound "fem/death";
    activesound "fem/active";
    MONSTER;
    +FLOORCLIP
  }

  States
  {
   Spawn:
    FSZW AB 10 A_Look();
    loop;
  See:
    FSZW AABBCCDD 4 A_Chase();
    loop;
  Melee:
    FSZW E 4 A_FaceTarget();
    FSZW F 8 A_CustomMeleeAttack (random (1, 5) *5, "skeleton/melee", "skeleton/swing");
    FSZW D 4;
    goto See;
  Pain:
    FSZW G 3;
    FSZW G 3 A_Pain();
    goto See;
  Death:
    FSZW H 5;
    FSZW I 5 A_Scream();
    FSZW J 5 A_NoBlocking();
    FSZW K 5;
    FSZW L 5;
    FSZW M 5;
    FSZW N -1;
    stop;
  XDeath:
    FSZW O 5;
    FSZW P 5 A_XScream();
    FSZW Q 5 A_NoBlocking();
    FSZW RSTUV 5;
    FSZW W -1;
    stop;
  Raise:
    FSZW MLKJIH 5;
    goto See;
  }
}

Class ZombieScientist : Actor
{
  Default
  {
    obituary "%o was axe-murdered by a zombie scientist.";
    health 20;
    mass 90;
    speed 8;
    Radius 20;
    Height 52;
    painchance 200;
    seesound "grunt/sight";
    painsound "grunt/pain";
    deathsound "grunt/death";
    activesound "grunt/active";
    MONSTER;
    +FLOORCLIP
  }

  States
  {
   Spawn:
    SCZA AB 10 A_Look();
    loop;
  See:
    SCZA AABBCCDD 4 A_Chase();
    loop;
  Melee:
    SCZA E 8 A_FaceTarget();
    SCZA F 16 A_CustomMeleeAttack (random (2, 6) *5, "KnifeHit", "skeleton/swing");
    SCZA E 4;
    goto See;
  Pain:
    SCZA G 3;
    SCZA G 3 A_Pain();
    goto See;
  Death:
    SCZA H 5;
    SCZA I 5 A_Scream();
    SCZA J 5 A_NoBlocking();
    SCZA K 5;
    SCZA L 5;
    SCZA M 5;
    SCZA N -1;
    stop;
  XDeath:
    SCZA O 5;
    SCZA P 5 A_XScream();
    SCZA Q 5 A_NoBlocking();
    SCZA RSTUV 5;
    SCZA W -1;
    stop;
  Raise:
    SCZA MLKJIH 5;
    goto See;
  }
}



//----------------BRUISERDEMON--------------//

Class BruiserDemon : Actor
{
  Default
  {
    Health 1500;
    Radius 24;
    Height 64;
    Mass 2000;
    Speed 8;
    PainChance 15;
    SeeSound "superbaron/scream";
    PainSound "superbaron/pain";
    DeathSound "superbaron/death";
    ActiveSound "superbaron/act";
    Obituary "%o was slaughtered by a Bruiserdemon.";
    HitObituary "%o was cremated by a Bruiserdemon.";
    Scale 1.25;
    Monster;
    +Boss
    +FloorClip
    +LookAllAround
    +MissileEvenMore
    +NoRadiusDmg
	
  }

  States
  {
  Spawn:
    BRUS AB 10 Bright A_Look();
    Loop;
  See:
    BRUS AABBCCDD 3 Bright A_Chase();
    Loop;
  Melee:
    BRUS EF 6 Bright A_FaceTarget();
    BRUS G 6 Bright A_BasicAttack(20, "baron/melee", "BruiserBall", 32);
    Goto See;
  Missile:
    BRUS E 0 Bright A_Jump(144, "Missile2");
    BRUS EF 6 Bright A_FaceTarget();
    BRUS G 6 Bright A_SpawnProjectile("BruiserBall");
    BRUS G 0 Bright A_Jump(96, 1);
    Goto See;
    BRUS HI 6 Bright A_FaceTarget();
    BRUS J 6 Bright A_SpawnProjectile("BruiserBall");
    Goto See;
  Missile2:
    BRUS E 0 Bright A_Jump(96, "Missile3");
    BRUS E 6 Bright A_FaceTarget();
    BRUS F 4 Bright A_FaceTarget();
    BRUS F 2 Bright A_SpawnProjectile("BruiserBall2",56,0,-40,0);
    BRUS G 1 Bright A_SpawnProjectile("BruiserBall2",56,0,-30,0);
    BRUS G 1 Bright A_SpawnProjectile("BruiserBall2",56,0,-20,0);
    BRUS G 1 Bright A_SpawnProjectile("BruiserBall2",56,0,-10,0);
    BRUS G 1 Bright A_SpawnProjectile("BruiserBall2",56,0,  0,0);
    BRUS G 1 Bright A_SpawnProjectile("BruiserBall2",56,0, 10,0);
    BRUS G 1 Bright A_SpawnProjectile("BruiserBall2",56,0, 20,0);
    BRUS G 0 Bright A_Jump(96, 1);
    Goto See;
    BRUS H 6 Bright A_FaceTarget();
    BRUS I 4 Bright A_FaceTarget();
    BRUS I 2 Bright A_SpawnProjectile("BruiserBall2",56,0, 40,0);
    BRUS J 1 Bright A_SpawnProjectile("BruiserBall2",56,0, 30,0);
    BRUS J 1 Bright A_SpawnProjectile("BruiserBall2",56,0, 20,0);
    BRUS J 1 Bright A_SpawnProjectile("BruiserBall2",56,0, 10,0);
    BRUS J 1 Bright A_SpawnProjectile("BruiserBall2",56,0,  0,0);
    BRUS J 1 Bright A_SpawnProjectile("BruiserBall2",56,0,-10,0);
    BRUS J 1 Bright A_SpawnProjectile("BruiserBall2",56,0,-20,0);
    Goto See;
  Missile3:
    BRUS KL 6 Bright A_FaceTarget();
    BRUS M 2 Bright A_SpawnProjectile("BruiserFireSpawner",16,0,-15,0);
    BRUS M 2 Bright A_SpawnProjectile("BruiserFireSpawner",16,0,  0,0);
    BRUS M 2 Bright A_SpawnProjectile("BruiserFireSpawner",16,0, 15,0);
    Goto See;
  Pain:
    BRUS N 5 Bright A_Pain();
    Goto See;
  Death:
    BRUD A 6 Bright A_Scream();
    BRUD BCDEFG 4 Bright;
    BRUD H 4 Bright A_Fall();
    BRUD IJKLMNOP 4 Bright;
    BRUD QRSTUV 4;
    BRUD W -1;
    Stop;
  }
}

Class BruiserBall : Actor
{
  Default
  {
    Radius 16;
    Height 16;
    Speed 18;
    Damage 16;
    RenderStyle "Add";
    Alpha 0.9;
    SeeSound "imp/attack";
    DeathSound "imp/shotx";
    Decal "Scorch";
    Projectile;
    +Randomize;
  }

  States
  {
  Spawn:
    BRBA AABB 2 Bright A_SpawnItemEx("BruiserBallTrail", 0, 0, 0, 0, 0, 0, 0, 128);
    Loop;
  Death:
    BRBA KLMNOPQRSTUVWX 3 Bright;
    Stop;
  }
}

Class BruiserBall2 : Actor
{
  Default
  {
    Radius 8;
    Height 8;
    Speed 10;
    Damage 8;
    RenderStyle "Add";
    Alpha 0.9;
    SeeSound "imp/attack";
    DeathSound "imp/shotx";
    Decal "BaronScorch";
    Projectile;
    +Randomize
  }

  States
  {
  Spawn:
    BRB2 AB 6 Bright;
    Loop;
  Death:
    BRB2 CDEFGHI 3 Bright;
    Stop;
  }
}

Class BruiserFireSpawner : Actor
{
  Default
  {
    Radius 8;
    Height 8;
    Speed 12;
    Damage 0;
    Projectile;
    +Ripper
    +FloorHugger
    +BloodlessImpact
  }

  States
  {
  Spawn:
    TNT1 A 3 Bright A_SpawnProjectile("BruiserFire", 0, 0, 0, CMF_TRACKOWNER);
    TNT1 AA 3;
    Loop;
  Death:
    TNT1 A 6;
    Stop;
  }
}

Class BruiserBallTrail : Actor
{
  Default
  {
    Radius 1;
    Height 1;
    Speed 0;
    RenderStyle "Add";
    Alpha 0.70;
    Projectile;
    +NoClip
  }

  States
  {
  Spawn:
    BRBA CDEFGHIJ 4 Bright;
    Stop;
  }
}

Class BruiserFire : Actor
{
  Default
  {
    Radius 1;
    Height 1;
    Speed 0;
    Damage 20;
    RenderStyle "Add";
    Alpha 0.9;
    SeeSound "weapons/rocklx";
    Projectile;
    +NoClip
    +FloorHugger
  }

  States
  {
  Spawn:
    XXBF AB 3 Bright;
    XXBF C 3 Bright A_Explode(48,128,0);
    XXBF DEFGHIJKLMNOPQRST 3 Bright;
    Stop;
  }
}






//--------------TURRET----------------------//

class HaywireTurret : Actor
{
	int dir;
	Default
	{
		//$Category Monsters
		//$Color 15
		//$Title "Haywire Turret"
		Health 500;
		Radius 22;
		Height 42;
		Speed 0;
		PainChance 10;
		Species "haywireturretspecies";
		Monster;
		MinMissileChance 0;
		-CANPASS;
		+DONTTHRUST;
		+LOOKALLAROUND;
		+NOGRAVITY;
		+AMBUSH;
		+SPAWNCEILING;
		+NOBLOOD;
		+DONTFALL;
		+NOINFIGHTSPECIES;
		SeeSound "sounds/HaywireTurret/Alert";
		PainSound "sounds/HaywireTurret/Pain";
		DeathSound "sounds/HaywireTurret/Death";
		ActiveSound "sounds/HaywireTurret/Alert";
		Obituary "%o was mistaken for an enemy by a Haywire Turret.";
	}
	States
	{
	Spawn:
		VHTD AAAAA 7 A_Look;
		Loop;
	See:
		#### A 1
		{
			if (target && !Checksight(target)) 
			{
				if (!random(0,4)) SetStateLabel("Pain");
				else SetStateLabel("TargetLost");
			}
			A_Chase();
		}
		Loop;
	TargetLost:
		VHTD A 7 
		{
			A_StartSound("HaywireTurret/Alert");
			A_Chase();
		}
		VHTD AAAA 7 A_Chase;
		Goto Pain;
	Missile:
		#### A 0
		{
			if (target)
			{
				if (PitchTo(target,targZOfs:height*0.5) > 45)
				{	
					FindTarget(3072); //find new target within radius
					SetStateLabel("Pain");
				}
				else if (PitchTo(target,targZOfs:height*0.5) > 22.5) SetStateLabel("MissileWindup2");
				else SetStateLabel("MissileWindup1");
			}
		}
	MissileWindup1:
		VHTU A 0 A_StartSound("HaywireTurret/Windup");
		VHTU AAAAAAA 3 A_FaceTarget;
		Goto MissileFire;
	MissileWindup2:
		VHTD A 0 A_StartSound("HaywireTurret/Windup");
		VHTD AAAAAAA 3 A_FaceTarget;
		Goto MissileFire;
	MissileFire:
		#### B 2 bright 
		{
			A_StartSound("HaywireTurret/Shot");
			TurretAttack(10,10);
			TurretAttack(-10,-10);
		}
		#### A 2 A_FaceTarget;
		#### B 2 bright 
		{
			A_StartSound("HaywireTurret/Shot");
			TurretAttack(10,10);
			TurretAttack(-10,-10);
		}
		#### A 2 A_FaceTarget;
		#### B 2 bright 
		{
			A_StartSound("HaywireTurret/Shot");
			TurretAttack(10,10);
			TurretAttack(-10,-10);
		}
		#### A 2 A_FaceTarget;
		#### A 0 A_Jump(256,"Pain","MissileFire","MissileFire","MissileFire");
		Goto See;
	Pain:
		#### A 0 
		{
			A_Pain();
			FindTarget(3072); //find new target within radius
			dir = randompick(-45,45);
		}	
		#### AAAAAAAA 3
		{
			A_AttachLightDef('TL3','TurretLight3');
			A_Setangle(angle+dir);
			A_SpawnParticle("yellow",SPF_FULLBRIGHT,lifetime:70,size:random(2,4),xoff:random(-4,4),yoff:random(-4,4),zoff:random(0,40),velx:random(-4,4),vely:random(-4,4),accelz:-0.5);
		}
		#### A 0 A_RemoveLight('TL3');
		#### A 0 A_Jump (96, "Pain");
		Goto See;
	Death:
		VHTU C 6 bright A_Scream;
		VHTU D 6 bright A_RemoveLight('TL3'); 
		VHTU E 6 bright A_NoBlocking;
		VHTU F 10 A_Jump (85,1);
		Goto Death+3;
		VHTU G 10 
		{
			A_StartSound("world/spark");
			for (int i = 0; i < random(5,10); i++)
			{
				A_SpawnParticle("yellow",SPF_FULLBRIGHT,lifetime:70,size:random(2,4),xoff:random(-4,4),yoff:random(-4,4),zoff:random(20,40),velx:random(-4,4),vely:random(-4,4),accelz:-0.5);
			}
		}
		Goto Death+3;
	}
}

extend class HaywireTurret
{
	array<actor> vtargets;
	void FindTarget(double rad)
	{
		actor obj;
		vtargets.clear();
		let it = BlockThingsIterator.Create(self, rad);
		while (it.Next())
		{
			obj = it.thing;
			if (obj.species != species && obj.health > 0 && Distance3D(obj) <= rad && Checksight(obj))
			{
				if (obj.player && !random(0,2)) //33% chance to target player
				{
					target = obj;
					return;
				}
				if (obj.bISMONSTER) vtargets.push(obj);
				continue;
			}
		}
		if (vtargets.size() > 0)
		{
			actor selected = vtargets[random(1,vtargets.size())-1];
			if (Checksight(selected,SF_SEEPASTSHOOTABLELINES|SF_SEEPASTBLOCKEVERYTHING)) target = selected;
		}
		else if (obj.player) target = obj;
	}
	
	void TurretAttack(int xoff, int yoff)
	{
		if (target)
		{
			double aimpitch = -PitchTo(target,height*0.5,target.height*0.5);
			double aimangle = AngleTo(target);
			double dist = 64*cos(-aimpitch);
			double zoff = aimpitch+11;
			actor Balls = spawn("TurretPlasmaball",pos+(dist*cos(aimangle+xoff),dist*sin(aimangle+yoff),zoff));
			if (Balls)
			{
				double Bspeed = Balls.speed;
				Balls.pitch = aimpitch;
				Balls.angle = aimangle;
				Balls.vel =	(Bspeed*cos(aimangle),Bspeed*sin(aimangle),Bspeed*sin(aimpitch));
			}
		}
	}
}

class TurretPlasmaball : Actor
{
	Default
	{
		Radius 6;
		Height 8;
		Speed 24;
		FastSpeed 36;
		Damage 2;
		Projectile;
		Deathsound "HaywireTurret/Hit";
		Renderstyle "Translucent";
		Alpha 1.0;
		Decal "TurretPlasmaScorch";
	}
	States
	{
	Spawn:
		VTPB AB 4 Bright;
		Loop;
	Death:
		VTPB CCCDDDEEE 2 Bright A_FadeOut(0.2);
		Stop;
	}
}

Class RocketGuy : Actor
{
  Default
  {
    Health 50;
    Radius 20;
    Height 56;
    Mass 100;
    Speed 8;
    PainChance 200;
    SeeSound "grunt/sight";
    PainSound "grunt/pain";
    Deathsound "grunt/death";
    ActiveSound "grunt/active";
    DropItem "RocketAmmo";
    Obituary "%o was splattered by the zombie's rocket.";
    Monster;
    +FLOORCLIP
  }

  States
  {
  Spawn:
    MPOS AB 10 A_Look();
    Loop;
  See:
    MPOS AABBCCDD 3 A_Chase();
    Loop;
  Missile:
    MPOS EE 10 A_FaceTarget();
    MPOS F 5;
    MPOS G 13 A_SpawnProjectile("Rocket");
    Goto See;
  Pain:
    MPOS H 2;
    MPOS H 2 A_Pain();
    Goto See;
  Death:
    MPOS I 5;
    MPOS J 5 A_Scream();
    MPOS K 5;
    MPOS L 5 A_Fall();
    MPOS M -1;
    Stop;
  XDeath:
    MPOS N 5;
    MPOS O 5 A_XScream();
    MPOS P 5;
    MPOS Q 5 A_Fall();
    MPOS RSTU 5;
    MPOS V -1;
    Stop;
  Raise:
    MPOS MLKJI 5;
    Goto See;
   }
}