
class ZDeadBody : DeadMarine
{
	bool burned;
	int bcount;
	bool plasmadeath;
	int pcount;
	bool mastercheck;

	override void PostBeginPlay()
	{
		uint otranslation = self.translation;
		self.A_SetTranslation("Burned");
		uint btranslation = self.translation;
		self.translation = otranslation;

		if (self.translation == btranslation) {
			bcount = 0;
			burned = true;
			self.A_PlaySound("FireLoop/Monsters",7,1,1);
			if(master) {mastercheck=false; master.destroy();}
		}

		self.A_SetTranslation("Burned2");
		btranslation = self.translation;
		self.translation = otranslation;

		if (self.translation == btranslation) {
			if(master) {mastercheck=false; master.destroy();}
		}

		if (Color(self.fillcolor & 0xffffff)==Color("00 00 FF")) {
			pcount = 0;
			plasmadeath = true;
		}

		if(master) mastercheck=true;

		Super.PostBeginPlay();
	}

	override bool CanCollideWith(Actor other, bool passive)
	{
		if(self.bIceCorpse) {
			if (other && other.bMISSILE && other.damagetype=="Ice")
    			{
				return false;
			}
			else if (other && !other.bMISSILE && other.species=="Dukes")
			{
				return false;
			}
		}

		if (other && other.bMISSILE && other is "ThrownPipebomb")
    		{
			return false;
		}

		return super.CanCollideWith(other, passive);
	}

	override void Die(Actor source, Actor inflictor, int dmgflags)
	{
		if (plasmadeath) {
			self.SetShade("000000");
			plasmadeath = false;
			pcount = 0;
		}

		if(master) {mastercheck=false; master.destroy();}

		super.Die(source, inflictor, dmgflags);
	}

	override int DamageMobj(Actor inflictor, Actor source, int damage, Name mod, int flags, double angle)
    	{
		if(source && source.species!="Dukes")
		{
			if(mod == 'MightyBoot') damage = 0;
		}

	        return super.DamageMobj(inflictor, source, damage, mod, flags, angle);
	}

	override void Tick()
	{
        	Super.Tick();

		if(mastercheck) {
			if(!master) {
				self.A_SpawnItemEX("DukeTeleportFog");
				Destroy();
			}
		}

		if (self.ceilingz < self.pos.z + self.height) {
			self.A_XScream();
			if (Color(self.bloodcolor & 0xffffff)==Color("AA D1 5C")) {
				self.A_SpawnItem("DukeSquishedBodyBloodGreen");
				self.A_SpawnItemEx("DukeSquishedBodyGreen", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION);
			} else {
				self.A_SpawnItem("DukeSquishedBodyBlood");
				self.A_SpawnItemEx("DukeSquishedBody", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION);
			}
			if(master) {mastercheck=false; master.destroy();}
			Destroy();
		}

	       	if (burned && self.health>0) {
			if (bcount%5==0) {
				if (bcount<=5) {
					self.A_SpawnProjectile("FlameTrailsSmall1", 0, 0, random[RIDFX](0, 360), CMF_AIMDIRECTION|CMF_BADPITCH, random[RIDFX](60, 90));
				}
				else if (bcount<=150) {
					self.A_SpawnProjectile("FlameTrails1", 0, 0, random[RIDFX](0, 360), CMF_AIMDIRECTION|CMF_BADPITCH, random[RIDFX](60, 90));
				}
				else if (bcount<=225) {
					self.A_SpawnProjectile("FlameTrailsSmall1", 0, 0, random[RIDFX](0, 360), CMF_AIMDIRECTION|CMF_BADPITCH, random[RIDFX](60, 90));
				}
				else {
					burned = false;
					bcount = 0;
					self.A_StopSound(7);
				}
			}
			bcount++;
		} else if (burned && self.health<=0) {
			burned = false;
			bcount = 0;
			self.A_StopSound(7);
		}
	       	if (plasmadeath && self.health>0) {
			if (pcount<=20) {
				self.A_SpawnItemEx("PlasmaSparkSmall",frandom[RIDFX](-self.default.radius/2.0,self.default.radius/2.0),frandom[RIDFX](-self.default.radius/2.0,self.default.radius/2.0),frandom[RIDFX](3,self.default.height/8.0*7.0),0,0,0,0,32, 200);
			}
			else if (pcount<=40) {
				self.A_SpawnItemEx("PlasmaSparkSmall",frandom[RIDFX](-self.default.radius/2.0,self.default.radius/2.0),frandom[RIDFX](-self.default.radius/2.0,self.default.radius/2.0),frandom[RIDFX](3,self.default.height/8.0*7.0),0,0,0,0,32, 220);
			}
			else if (pcount<=60) {
				self.A_SpawnItemEx("PlasmaSparkSmall",frandom[RIDFX](-self.default.radius/2.0,self.default.radius/2.0),frandom[RIDFX](-self.default.radius/2.0,self.default.radius/2.0),frandom[RIDFX](3,self.default.height/8.0*7.0),0,0,0,0,32, 240);
			}
			else {
				self.SetShade("000000");
				plasmadeath = false;
				pcount = 0;
			}
			pcount++;
		} else if (plasmadeath && self.health<=0) {
			self.SetShade("000000");
			plasmadeath = false;
			pcount = 0;
		}
	}
}