//All of this was originally nashgore blood, all credit goes to nash for making the original, except for the "HeavyXenoBlood"
//this is mine, but based upon the look of the 'meaty' blood from immoral conduct and polished skull
// Modify the internal Blood actor to spawn flying blood
actor NewBlood
{
 game Doom
 decal BloodSplat
 scale 0.4
 speed 0
 +CLIENTSIDEONLY
 +FORCEXYBILLBOARD
 +GHOST
 +NOBLOCKMAP
 +NOGRAVITY
 +NOCLIP
 +DONTSPLASH
 -ALLOWPARTICLES
 states
 {
  Spawn:
  TNT1 AAAAAAA 0 A_SpawnDebris("FlyingBlood",0,frandom(-3,3),1)
  BLBD A 2
  BLBD B 2
  BLBD C 2
  BLBD D 2 
  BLBD E 2
  stop
 }
}

Actor XenoBlood : NewBlood
{
 states
 {
 Spawn:
  TNT1 A 0 A_SpawnDebris("FlyingXenoBlood",0,frandom(-4,2),1)
  TNT1 A 0 A_SpawnDebris("FlyingXenoBlood2",0,frandom(-4,4),1)
  TNT1 A 0 A_SpawnDebris("FlyingXenoBlood3",0,frandom(-5,3),1)
  TNT1 A 0 A_SpawnDebris("HeavyXenoBlood",0,frandom(-2,2),1)
  TNT1 A 0 A_SpawnDebris("HeavyXenoBlood",0,frandom(-2,2),1)
  XLBD A 2
  XLBD B 2
  XLBD C 2
  XLBD D 2 
  XLBD E 2
  stop
  }
}

Actor BoilerBlood: XenoBlood
{
 states
 {
 Spawn:
  TNT1 A 0 A_SpawnDebris("FlyingXenoBlood", 1,frandom(-4,2),1)
  TNT1 A 0 A_SpawnDebris("FlyingXenoBlood2",1,frandom(-4,4),1)
  TNT1 A 0 A_SpawnDebris("FlyingXenoBlood3",1,frandom(-5,3),1)
  TNT1 A 0 A_SpawnDebris("HeavyXenoBlood",  1,frandom(-2,2),1)
  TNT1 A 0 A_SpawnDebris("HeavyXenoBlood",  1,frandom(-2,2),1)
  XLBD A 2
  XLBD B 2
  XLBD C 2
  XLBD D 2 
  XLBD E 2
  stop
  }
}

ACTOR QueenBlood : XenoBlood
{
 states
 {
 Spawn:
  TNT1 A 0 A_SpawnDebris("FlyingXenoBlood",0,frandom(-4,2),1)
  TNT1 A 0 A_SpawnDebris("HeavyXenoBlood",0,frandom(-2,2),1)
  XLBD A 2
  XLBD B 2
  XLBD C 2
  XLBD D 2 
  XLBD E 2
  stop
  }
}

actor FlyingBlood
{
 game Doom
 scale 0.35
 health 1
 radius 1
 height 1
 mass 4
 speed 14
 gravity 1.1
 renderstyle translucent
 alpha 0.4
 +MISSILE
 +CLIENTSIDEONLY
 +CORPSE
 +NOTELEPORT
 +NOBLOCKMAP
 +NODAMAGETHRUST
 +MOVEWITHSECTOR
 +THRUACTORS
 +BLOODLESSIMPACT 
 +FORCEXYBILLBOARD
 +DONTHARMSPECIES
 +DONTHURTSPECIES
 +THRUSPECIES
 Species "Xenomorph"
 states
 {
 Spawn:
  TNT1 A 0 A_CheckCeiling("Crash2")
  FBLD A 1 A_SpawnItem("FlyingBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  FBLD B 1 A_SpawnItem("FlyingBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  FBLD C 1 A_SpawnItem("FlyingBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  FBLD D 1 A_SpawnItem("FlyingBloodTrail",0,0,0,1)
  loop
 Death:
 XDeath:
 Crash:
  TNT1 A 1 A_SpawnItem("BloodSpot", 0, 0, 0, 1)
  stop
 Crash2:
  TNT1 A 0
  stop
 }
}

// Blood sprite that flies outwards and leaves trails behind
actor FlyingXenoBlood : FlyingBlood
{
 game Doom
 scale 0.35
 health 1
 radius 2
 height 2
 mass 4
 speed 14
 gravity 1.1
 renderstyle translucent
 alpha 0.4
 +MISSILE
 +CLIENTSIDEONLY
 +NOTELEPORT
 +NOBLOCKMAP
 +NODAMAGETHRUST
 +MOVEWITHSECTOR
 +BLOODLESSIMPACT 
 +FORCEXYBILLBOARD
 +DONTHARMSPECIES
 +DONTHURTSPECIES
 -CORPSE
 -THRUACTORS
 Damagetype "poison"
 Poisondamage 3
 damage 0
 species Xenomorph
 obituary "%o didn't mind showering in acid."
 states
 {
 Spawn:
  TNT1 A 0 A_CheckCeiling("Crash2")
  XBLD A 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XBLD B 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XBLD C 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XBLD D 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  loop
 Death:
 XDeath:
 Crash:
  TNT1 A 1 A_SpawnItem("XenoBloodSpot", 0, 0, 0, 1)
  stop
 Crash2:
  TNT1 A 0
  stop
 }
}

ACTOR HeavyXenoBlood : FlyingXenoBlood
{
 game Doom
 scale 0.85
 radius 2
 height 2
 mass 146
 speed 45
 gravity 4.8
 alpha 0.8
 Poisondamage 1
 obituary "%o didn't mind showering in acid."
 states
 {
 Spawn:
  XLS2 A 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  XLS2 B 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  XLS2 C 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  XLS2 D 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  loop
 Death:
 XDeath:
 Crash:
  TNT1 A 1 A_SpawnItem("HeavyXenoBloodSpot", 0, 0, 0, 1)
  stop
 Crash2:
  TNT1 A 0
  stop
 }
}

ACTOR FlyingXenoBlood2: FlyingXenoBlood
{
 states
 {
 Spawn:
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS2 A 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS2 B 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS2 C 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS2 D 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS2 E 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS2 F 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS2 G 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS2 H 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS2 I 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS2 J 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS2 K 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  loop
 }
}

ACTOR FlyingXenoBlood3: FlyingXenoBlood
{
 states
 {
 Spawn:
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS3 A 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS3 B 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS3 C 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS3 D 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS3 E 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS3 F 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS3 G 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS3 H 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS3 I 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  TNT1 A 0 A_CheckCeiling("Crash2")
  XLS3 J 1 A_SpawnItem("XenoBloodTrail",0,0,0,1)
  loop
 }
}

actor XenoBloodSpot
{
 game Doom
 radius 1
 height 1
 mass 1
 scale 0.4
 +NOTELEPORT
 -NOBLOCKMAP
 +CANNOTPUSH
 +DONTSPLASH
 +MOVEWITHSECTOR
 -NOGRAVITY
 -SOLID
 +CLIENTSIDEONLY
 +FORCEXYBILLBOARD
 states
 {
 Spawn:
  TNT1 A 0
  TNT1 A 0 A_PlaySound("blood/drip")
  TNT1 A 0 A_Jump(128,"Spot2")
  TNT1 A 0 A_Jump(192,"Spot3")
  TNT1 A 0 A_Jump(255,"Spot4")
  // make the blood spots stay on the ground. 1500 is the default duration.
 Spot2:
  TNT1 A 0 A_SpawnItemEx("MissileSmoke",0,random(-5,5)*0.1,random(-5,5)*0.1,random(-15,0)*0.1,random(-10,10)*0.1,random(-10,10)*0.1,0,0,64)
  TNT1 A 0 A_PlaySound("xeno/acidspray")
  12BS B 850
  12BS BBBBBBBBBBBBBBBB 1 A_FadeOut(0.1, true)
  stop
 Spot3:
  TNT1 A 0 A_SpawnItemEx("MissileSmoke",0,random(-5,5)*0.1,random(-5,5)*0.1,random(-15,0)*0.1,random(-10,10)*0.1,random(-10,10)*0.1,0,0,64)
  12BS C 850
  12BS CCCCCCCCCCCCCCCC 1 A_FadeOut(0.1, true)
  stop
 Spot4:
  TNT1 A 0 A_SpawnItemEx("MissileSmoke",0,random(-5,5)*0.1,random(-5,5)*0.1,random(-15,0)*0.1,random(-10,10)*0.1,random(-10,10)*0.1,0,0,64)
  TNT1 A 0 A_PlaySound("xeno/acid")
  12BS D 850 
  12BS DDDDDDDDDDDDDDDD 1 A_FadeOut(0.1, true)
  stop
 }
}

ACTOR HeavyXenoBloodSpot : XenoBloodSpot
{
 scale 0.8
 mass 11
 states
 {
 Spawn:
  TNT1 A 0
  TNT1 A 0 A_PlaySound("blood/drip")
  TNT1 A 0 A_Jump(128,"Spot2")
  TNT1 A 0 A_Jump(192,"Spot3")
  TNT1 A 0 A_Jump(255,"Spot4")
  // make the blood spots stay on the ground. 1500 is the default duration.
 Spot2:
  TNT1 A 0 A_SpawnItemEx("MissileSmoke",0,random(-5,5)*0.1,random(-5,5)*0.1,random(-15,0)*0.1,random(-10,10)*0.1,random(-10,10)*0.1,0,0,64)
  TNT1 A 0 A_PlaySound("xeno/acidspray")
  12BS B 850
  12BS BBBBBBBBBBBBBBBB 1 A_FadeOut(0.1, true)
  stop
 Spot3:
  TNT1 A 0 A_SpawnItemEx("MissileSmoke",0,random(-5,5)*0.1,random(-5,5)*0.1,random(-15,0)*0.1,random(-10,10)*0.1,random(-10,10)*0.1,0,0,64)
  12BS C 850
  12BS CCCCCCCCCCCCCCCC 1 A_FadeOut(0.1, true)
  stop
 Spot4:
  TNT1 A 0 A_SpawnItemEx("MissileSmoke",0,random(-5,5)*0.1,random(-5,5)*0.1,random(-15,0)*0.1,random(-10,10)*0.1,random(-10,10)*0.1,0,0,64)
  TNT1 A 0 A_PlaySound("xeno/acid")
  12BS D 850 
  12BS DDDDDDDDDDDDDDDD 1 A_FadeOut(0.1, true)
  stop
 }
}

actor BloodSpot
{
 states
 {
  Spawn:
	TNT1 A 0
	TNT1 A 0 A_PlaySound("blood/drip")
	TNT1 A 0 A_Jump(64,4)
	TNT1 A 0 A_Jump(128,4)
	TNT1 A 0 A_Jump(192,4)
	TNT1 A 0 A_Jump(255,4)
	// make the blood spots stay on the ground. 1500 is the default duration.
	BSPT A 500
	BSPT AAAAAAAAAAAAAAAA 1 A_FadeOut(0.1, true)
	stop
	BSPT B 500
	BSPT BBBBBBBBBBBBBBBB 1 A_FadeOut(0.1, true)
	stop
	BSPT C 500
	BSPT CCCCCCCCCCCCCCCC 1 A_FadeOut(0.1, true)
	stop
	BSPT D 500
	BSPT DDDDDDDDDDDDDDDD 1 A_FadeOut(0.1, true)
	stop
  }
}
// Blood trails spawned by FlyingBlood
actor FlyingBloodTrail
{
 game Doom
 scale 0.45
 mass 1
 speed 19
 renderstyle add
 alpha 0.6
 +LOWGRAVITY
 +NOTELEPORT
 +NOBLOCKMAP
 +CLIENTSIDEONLY
 states
 {
  Spawn:
  BTRL A 1
  BTRL B 1
  BTRL C 1
  BTRL D 1
  stop
 }
}

actor XenoBloodTrail : FlyingBloodTrail
{
 states
 {
  Spawn:
  XTRL A 1
  XTRL B 1
  XTRL C 1
  XTRL D 1
  stop
 }
}
