//$GZDB_SKIP

//It appears when monster explodes.


//Destroyable body code taken from q2tc demo.
Actor DestroyableBodyThing // this thing does not work on Zandronum
{
	Radius 25
	Height 10
	Health 150
	Mass 0x7fffffff
	+NOTARGETSWITCH
//	Projectile
	+NOTAUTOAIMED
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_Warp(AAPTR_MASTER,0,0,0,0,WARPF_NOCHECKPOSITION,1)
		Stop
		TNT1 A 1 A_SetShootable
		TNT1 A 1 //A_JumpIfInTargetInventory(ResurrectedToken,1,"Null")
		Loop
	Death:
	Crush:
		TNT1 A 0 A_RemoveMaster
		TNT1 A 0 A_SpawnItemEx("Dusk_GenericMonsterGore",0,0,0,0,0,0,0,32)
		TNT1 A 5 //A_XScream
		Stop
	}
}


Actor DestroyableBodyCrowThing // this thing does not work on Zandronum
{
	Radius 25
	Height 10
	Health 150
	Mass 0x7fffffff
	+NOTARGETSWITCH
//	Projectile
	+NOTAUTOAIMED
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_Warp(AAPTR_MASTER,0,0,0,0,WARPF_NOCHECKPOSITION,1)
		Stop
		TNT1 A 1 A_SetShootable
		TNT1 A 1 //A_JumpIfInTargetInventory(ResurrectedToken,1,"Null")
		Loop
	Death:
	Crush:
		TNT1 A 0 A_RemoveMaster
		TNT1 A 0 A_SpawnItemEx("Dusk_ScarecrowGore",0,0,0,0,0,0,0,32)
		TNT1 A 5 //A_XScream
		Stop
	}
}



Actor Dusk_GenericMonsterExplosion
{
//    SpawnID 201
//    +NOINTERACTION
    Radius 2
    Height 2
	Damage (25)
	+CLIENTSIDEONLY

	RenderStyle Add
    Alpha 1.0
    Scale 0.85
    //SeeSound "weapons/rocklx"
    States
    {
    Spawn:
		TNT1 A 1 A_Explode(25)

TNT1 A 0 A_ChangeFlag("NoInteraction",True)
        X09C AB 1 Bright Light("OrangeBigPoint3")
        X09C CD 1 Bright Light("OrangeMediumPoint2")
        X09C EF 1 Bright Light("OrangeSmallPoint2")
        X09C GHIJKLMN 1 Bright
        X09C OPQRSTUVWXYZ 1 Bright
        X09D ABCDEFGHIJKLMNOP 1 Bright
        Stop
    }
}




//Dusk gore is pretty much classic nashgore with several tweaks on its code to make it behave like Dusk..
//So, big credits to nash.


//Blood particles spawned by Gib actors.
ACTOR Blood_PartFX
{
	+NOBLOCKMAP
+NOINTERACTION
+CLIENTSIDEONLY
	Gravity 0.25//125
	RenderStyle Stencil
	StencilColor Red

	Scale 0.55
	States
	{
	Spawn:
		PART A 1 A_FadeOut(0.01)
		Loop
	}
}



//Blood cloud. For extra fanciness.
ACTOR Blood_CloudFX
{
	+NOGRAVITY
	+NOBLOCKMAP
+NOINTERACTION
+CLIENTSIDEONLY
	RenderStyle Stencil
	Alpha 0.7
	StencilColor Red

	Scale 1.0
	States
	{
	Spawn:
		BLCL A 1 A_FadeOut(0.01)		BLCL A 0 A_SetScale(scalex+0.0725)
		BLCL A 1 A_FadeOut(0.01)		BLCL A 0 A_SetScale(scalex+0.065)
		BLCL A 1 A_FadeOut(0.01)		BLCL A 0 A_SetScale(scalex+0.0525)
		BLCL A 1 A_FadeOut(0.01)		BLCL A 0 A_SetScale(scalex+0.0375)
		BLCL A 1 A_FadeOut(0.01)		BLCL A 0 A_SetScale(scalex+0.0225)
	SpawnPost:
		BLCL A 1 A_FadeOut(0.01)		BLCL A 0 A_SetScale(scalex*1.0125)
		Loop
	}
}



//Generic gore spawner, randomizes actors directions and sizes.
Actor Dusk_GenericMonsterGore
{
//    SpawnID 201
    +NOINTERACTION
    Radius 2
    Height 2
    RenderStyle Add
    Alpha 1.0
    Scale 1.0
    SeeSound "monster/explodegore"
    States
    {
    Spawn:
TNT1 A 0 NoDelay A_PlaySound("monster/explodegore")
	TNT1 A 0 A_CheckSightOrRange (2048,"Crash")
TROO N 0 A_SpawnItemEx("Blood_CloudFX",0,0,0,frandom(0.25,1.25),frandom(0.25,1.25),frandom(-0.5,1),random(0,179),128)
TROO N 0 A_SpawnItemEx("Blood_CloudFX",0,0,0,frandom(0.25,1.25),frandom(0.25,1.25),frandom(-0.5,1),random(180,359),128)
	TNT1 A 0 A_CheckSightOrRange (1024,"Crash")
    
TROO N 0 A_SpawnItemEx("Dusk_GibGenerator",0,0,0,0,0,0,0,128)
TROO N 0 A_SpawnItemEx("Dusk_GibGenerator",0,0,0,0,0,0,0,128)
	TNT1 A 0 A_CheckSightOrRange (768,"Crash")

TROO N 0 A_SpawnItemEx("Blood_CloudFX",0,0,0,frandom(0.25,1.25),frandom(0.25,1.25),frandom(-0.5,1),random(0,179),128)
TROO N 0 A_SpawnItemEx("Blood_CloudFX",0,0,0,frandom(0.25,1.25),frandom(0.25,1.25),frandom(-0.5,1),random(180,359),128)
	TNT1 A 0 A_CheckSightOrRange (512,"Crash")
TROO N 0 A_SpawnItemEx("Dusk_GibGenerator",0,0,0,0,0,0,0,128)
TROO N 0 A_SpawnItemEx("Dusk_GibGenerator",0,0,0,0,0,0,0,128)
TROO N 0 A_SpawnItemEx("Dusk_GibGenerator",0,0,0,0,0,0,0,128)
        Stop
Crash:
TNT1 A 0 
Stop

    }
}







//Choose between giblets of random sizes.
actor Dusk_GibGenerator
{
-SOLID
states
{
Spawn:
FBLD D 0 A_JumpIf(waterlevel > 1, "Crash")
TNT1 A 0 
TNT1 A 0 A_Jump(128, 8)
TNT1 A 0 A_Jump(128, 4)
TNT1 A 0 A_Jump(128, 2)
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib4", 1, 1.1, 1.1)
stop
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib", 1, 1.1, 1.1)
stop
TNT1 A 0 A_Jump(128, 2)
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib3", 1, 1.1, 1.1)
stop
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib", 1, 1.1, 1.1)
stop
TNT1 A 0 A_Jump(128, 4)
TNT1 A 0 A_Jump(128, 2)
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib3", 1, 1.1, 1.1)
stop
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib", 1, 1.1, 1.1)
stop
TNT1 A 0 A_Jump(128, 2)
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib2", 1, 1.1, 1.1)
stop
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib", 1, 1.1, 1.1)
stop

Crash:
TNT1 A 0 
Stop
}
}


// Gibs
actor Dusk_GenericGib
{
health 1
radius 8
height 8
mass 1
scale 0.2
+CORPSE
Gravity 0.7
+NOTELEPORT
	+CLIENTSIDEONLY
states
{
Spawn:
//	TNT1 A 0 A_CheckSightOrRange (1024,"Spawn_None")
//	TNT1 A 0 A_CheckSightOrRange (876,"Spawn_Low")
//	TNT1 A 0 A_CheckSightOrRange (512,"Spawn_Mid")
//	TNT1 A 0 A_CheckSightOrRange (256,"Spawn_High")
//Spawn_Max:
FBLD D 0 A_JumpIf(waterlevel > 1, "Crash")
	TNT1 A 0 A_CheckSightOrRange (512,"Spawn_None")
GEEB A 1 A_SpawnItemEx("Blood_PartFX", random2[BoltSpark]()*0.015625, random2[BoltSpark]()*0.015625, 0, 0,0,frandom(-0.1,-1),0,SXF_ABSOLUTEPOSITION, 50)
Loop

Spawn_None:
FBLD D 0 A_JumpIf(waterlevel > 1, "Crash_Low")
GEEB A 1 
Loop




Crash:
	TNT1 A 0 A_CheckSightOrRange (512,"Crash_Low")
GEEB AAAAAAAAAAAAAAAA 2 A_SpawnItemEx("Blood_PartFX", random2[BoltSpark]()*0.015625, random2[BoltSpark]()*0.015625, 0, 0,0,0,0,SXF_ABSOLUTEPOSITION, 50)
Crash_Low:
GEEB A 2100 
GEEB AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_FadeOut(0.02)
stop
}
}
actor Dusk_GenericGib2 :Dusk_GenericGib		{	scale 0.3	}
actor Dusk_GenericGib3 :Dusk_GenericGib		{	scale 0.25	}
actor Dusk_GenericGib4 :Dusk_GenericGib		{	scale 0.275	}

actor Dusk_GenericGibBig :Dusk_GenericGib	{	scale 0.45	}












//Explosive variation
Actor Dusk_ExplosiveMonsterGore
{
//    SpawnID 201
    +NOINTERACTION
    Radius 2
    Height 2
    RenderStyle Add
    Alpha 1.0
    Scale 1.0
    SeeSound "monster/explodegore"
    States
    {
    Spawn:
TNT1 A 0 NoDelay A_PlaySound("monster/explodegore")
	TNT1 A 0 A_CheckSightOrRange (2048,"Crash")
TROO N 0 A_SpawnItemEx("Blood_CloudFX",0,0,12,frandom(0.25,1.25),frandom(0.25,1.25),frandom(-0.5,1),random(0,179),128)
TROO N 0 A_SpawnItemEx("Blood_CloudFX",0,0,12,frandom(0.25,1.25),frandom(0.25,1.25),frandom(-0.5,1),random(180,359),128)
	TNT1 A 0 A_CheckSightOrRange (1024,"Crash")
TROO N 0 A_SpawnItemEx("Dusk_ExplosiveGibGen",0,0,12,0,0,0,0,128)
TROO N 0 A_SpawnItemEx("Dusk_ExplosiveGibGen",0,0,12,0,0,0,0,128)
	TNT1 A 0 A_CheckSightOrRange (768,"Crash")

TROO N 0 A_SpawnItemEx("Blood_CloudFX",0,0,12,frandom(0.25,1.25),frandom(0.25,1.25),frandom(-0.5,1),random(0,179),128)
TROO N 0 A_SpawnItemEx("Blood_CloudFX",0,0,12,frandom(0.25,1.25),frandom(0.25,1.25),frandom(-0.5,1),random(180,359),128)
	TNT1 A 0 A_CheckSightOrRange (512,"Crash")
TROO N 0 A_SpawnItemEx("Dusk_ExplosiveGibGen",0,0,12,0,0,0,0,128)
TROO N 0 A_SpawnItemEx("Dusk_ExplosiveGibGen",0,0,12,0,0,0,0,128)
TROO N 0 A_SpawnItemEx("Dusk_ExplosiveGibGen",0,0,12,0,0,0,0,128)
        Stop
Crash:
TNT1 A 0 
Stop
    }
}




//Choose between giblets of random sizes.
actor Dusk_ExplosiveGibGen
{
-SOLID
states
{
Spawn:
FBLD D 0 A_JumpIf(waterlevel > 1, "Crash")
TNT1 A 0
TNT1 A 0 A_Jump(128, 8)
TNT1 A 0 A_Jump(128, 4)
TNT1 A 0 A_Jump(128, 2)
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib4", 1, 1.5, 1.5)
stop
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib", 1, 1.5, 1.5)
stop
TNT1 A 0 A_Jump(128, 2)
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib3", 1, 1.5, 1.5)
stop
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib", 1, 1.5, 1.5)
stop
TNT1 A 0 A_Jump(128, 4)
TNT1 A 0 A_Jump(128, 2)
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib3", 1, 1.5, 1.5)
stop
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib", 1, 1.5, 1.5)
stop
TNT1 A 0 A_Jump(128, 2)
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib2", 1, 1.5, 1.5)
stop
TNT1 A 1 A_SpawnDebris("Dusk_GenericGib", 1, 1.5, 1.5)
stop
}
}







//Vanilla monsters gib replacements
// Modify all the internal monsters

//Taken from Nashgore, modified for Doosk.

actor DuskGore_ZombieMan : ZombieMan replaces ZombieMan
{
states
{
	XDeath:
//TNT1 A 0 A_PlaySound("monster/explodegore")
		TNT1 A 0 A_NoBlocking

        TNT1 A 1 A_SpawnItemEx("Dusk_GenericMonsterGore",0,0,0,0,0,0,0,32)
		TNT1 A 1
		Stop

}
}

actor DuskGore_ShotgunGuy : ShotgunGuy replaces ShotgunGuy
{
states
{
	XDeath:
//TNT1 A 0 A_PlaySound("monster/explodegore")
		TNT1 A 0 A_NoBlocking

        TNT1 A 1 A_SpawnItemEx("Dusk_GenericMonsterGore",0,0,0,0,0,0,0,32)
		TNT1 A 1
		Stop

}
}

actor DuskGore_ChaingunGuy : ChaingunGuy replaces ChaingunGuy
{
states
{
	XDeath:
//TNT1 A 0 A_PlaySound("monster/explodegore")
		TNT1 A 0 A_NoBlocking

        TNT1 A 1 A_SpawnItemEx("Dusk_GenericMonsterGore",0,0,0,0,0,0,0,32)
		TNT1 A 1
		Stop

}
}

actor DuskGore_DoomImp : DoomImp replaces DoomImp
{
states
{
	XDeath:
//TNT1 A 0 A_PlaySound("monster/explodegore")
		TNT1 A 0 A_NoBlocking

        TNT1 A 1 A_SpawnItemEx("Dusk_GenericMonsterGore",0,0,0,0,0,0,0,32)
		TNT1 A 1
		Stop

}
}

ACTOR DuskGore_Demon : Demon replaces Demon
{
states
{
	XDeath:
//TNT1 A 0 A_PlaySound("monster/explodegore")
		TNT1 A 0 A_NoBlocking

        TNT1 A 1 A_SpawnItemEx("Dusk_GenericMonsterGore",0,0,0,0,0,0,0,32)
		TNT1 A 1
		Stop

}
}







//Scarecrow gore.
Actor Dusk_ScarecrowGore
{
//    SpawnID 201
    +NOINTERACTION
    Radius 2
    Height 2
    RenderStyle Add
    Alpha 1.0
    Scale 1.0
    SeeSound "monster/explodecrowgore"
    States
    {
    Spawn:
TNT1 A 0 NoDelay A_PlaySound("monster/explodecrowgore")
	TNT1 A 0 A_CheckSightOrRange (1024,"Crash")
    
TROO N 0 A_SpawnItemEx("Dusk_GibCrowGenerator",0,0,0,0,0,0,0,128)
TROO N 0 A_SpawnItemEx("Dusk_GibCrowGenerator",0,0,0,0,0,0,0,128)
	TNT1 A 0 A_CheckSightOrRange (512,"Crash")
TROO N 0 A_SpawnItemEx("Dusk_GibCrowGenerator",0,0,0,0,0,0,0,128)
TROO N 0 A_SpawnItemEx("Dusk_GibCrowGenerator",0,0,0,0,0,0,0,128)
TROO N 0 A_SpawnItemEx("Dusk_GibCrowGenerator",0,0,0,0,0,0,0,128)
        Stop
Crash:
TNT1 A 0 
Stop

    }
}




actor Dusk_GibCrowGenerator
{
-SOLID
states
{
Spawn:
FBLD D 0 A_JumpIf(waterlevel > 1, "Crash")
TNT1 A 0 
TNT1 A 0 A_Jump(128, 8)
TNT1 A 0 A_Jump(128, 4)
TNT1 A 0 A_Jump(128, 2)
TNT1 A 1 A_SpawnDebris("Dusk_GenericCrowGib7", 1, 1.15, 1.15)
stop
TNT1 A 1 A_SpawnDebris("Dusk_GenericCrowGib6", 1, 1.15, 1.15)
stop
TNT1 A 0 A_Jump(128, 2)
TNT1 A 1 A_SpawnDebris("Dusk_GenericCrowGib5", 1, 1.15, 1.15)
stop
TNT1 A 1 A_SpawnDebris("Dusk_GenericCrowGib4", 1, 1.15, 1.15)
stop
TNT1 A 0 A_Jump(128, 4)
TNT1 A 0 A_Jump(128, 2)
TNT1 A 1 A_SpawnDebris("Dusk_GenericCrowGib3", 1, 1.15, 1.15)
stop
TNT1 A 1 A_SpawnDebris("Dusk_GenericCrowGib2", 1, 1.15, 1.15)
stop
TNT1 A 0 A_Jump(128, 2)
TNT1 A 1 A_SpawnDebris("Dusk_GenericCrowGib1", 1, 1.15, 1.15)
stop
TNT1 A 1 A_SpawnDebris("Dusk_GenericCrowGib", 1, 1.15, 1.15)
stop

Crash:
TNT1 A 0 
Stop
}
}


// Gibs
actor Dusk_GenericCrowGib
{
health 1
radius 8
height 8
mass 1
scale 0.225
+CORPSE
Gravity 0.4
+NOTELEPORT
	+CLIENTSIDEONLY
states
{
Spawn:
FBLD D 0 A_JumpIf(waterlevel > 1, "Crash")
SCRG A 1 
Loop

Crash:
SCRG A 2100 
SCRG AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_FadeOut(0.02)
stop

    }
}

actor Dusk_GenericCrowGib1 : Dusk_GenericCrowGib
{
states
{
Spawn:
FBLD D 0 A_JumpIf(waterlevel > 1, "Crash")
SCRG B 1 
Loop

Crash:
SCRG B 2100 
SCRG BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB 1 A_FadeOut(0.02)
stop

    }
}



actor Dusk_GenericCrowGib2 : Dusk_GenericCrowGib
{
states
{
Spawn:
FBLD D 0 A_JumpIf(waterlevel > 1, "Crash")
SCRG C 1 
Loop

Crash:
SCRG C 2100 
SCRG CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 1 A_FadeOut(0.02)
stop

    }
}



actor Dusk_GenericCrowGib3 : Dusk_GenericCrowGib
{
states
{
Spawn:
FBLD D 0 A_JumpIf(waterlevel > 1, "Crash")
SCRG D 1 
Loop

Crash:
SCRG D 2100 
SCRG DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 1 A_FadeOut(0.02)
stop

    }
}



actor Dusk_GenericCrowGib4 : Dusk_GenericCrowGib
{
states
{
Spawn:
FBLD D 0 A_JumpIf(waterlevel > 1, "Crash")
SCRG E 1 
Loop

Crash:
SCRG E 2100 
SCRG EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 1 A_FadeOut(0.02)
stop

    }
}



actor Dusk_GenericCrowGib5 : Dusk_GenericCrowGib
{
states
{
Spawn:
FBLD D 0 A_JumpIf(waterlevel > 1, "Crash")
SCRG F 1 
Loop

Crash:
SCRG F 2100 
SCRG FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1 A_FadeOut(0.02)
stop

    }
}



actor Dusk_GenericCrowGib6 : Dusk_GenericCrowGib
{
states
{
Spawn:
FBLD D 0 A_JumpIf(waterlevel > 1, "Crash")
SCRG G 1 
Loop

Crash:
SCRG G 2100 
SCRG GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG 1 A_FadeOut(0.02)
stop


    }
}



actor Dusk_GenericCrowGib7 : Dusk_GenericCrowGib
{
states
{
Spawn:
FBLD D 0 A_JumpIf(waterlevel > 1, "Crash")
SCRG H 1 
Loop

Crash:
SCRG H 2100 
SCRG HHHHHHHHHHHHHHHHHHHHHGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH 1 A_FadeOut(0.02)
stop

    }
}



actor Dusk_GenericCrowGib8 : Dusk_GenericCrowGib
{
states
{
Spawn:
FBLD D 0 A_JumpIf(waterlevel > 1, "Crash")
SCRG I 1 
Loop

Crash:
SCRG I 2100 
SCRG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 1 A_FadeOut(0.02)
stop

    }
}




