actor GrenadierRevenant : actor replaces revenant
{
	Health 300
	Radius 20
	Height 56
	Mass 500
	Speed 10
	PainChance 100
	Monster
	meleerange 55
	MeleeThreshold 100
 	Painchance "BarrelGrab", 0
	+FLOORCLIP
	+DONTHARMSPECIES
	+noblooddecals
	Species "GeoRev"
    bloodtype RevBoneSpray
	SeeSound "skeleton/sight"
	PainSound "skellytun/pain"
	DeathSound "skeleton/death"
	ActiveSound "skeleton/active"
	MeleeSound "skeleton/melee"
	HitObituary "%o was smashed by a Grenadier revenant."
	Obituary  "%o couldn't evade a Grenadier revenant's geo shot"
	dropitem "lilchest" 8
	States
	{
	Spawn:
		GREV AB 10 A_Look
		Loop
	See:
		GREV AABBCCDDEEFF 2 A_Chase
		Loop
	Missile:
		TNT1 A 0
		TNT1 A 0 A_Jumpifcloser (250,"bonethrow")
	longrange:
		GREV G 0 Bright A_FaceTarget
		GREV G 10 Bright A_FaceTarget
		TNT1 A 0 A_Jump (80, "homingshot")
		GREV H 2 A_CustomMissile ("Geoshot",56,-12)
		GREV H 2 A_CustomMissile ("GeoRing",58,-12)
		GREV I 5 A_FaceTarget
		Goto See
	Homingshot:
		GREV H 2 A_CustomMissile ("GeoHomingshot",56,-12)
		GREV H 2 A_CustomMissile ("GeoRing",58,-12)
		GREV I 5 A_FaceTarget
		Goto See
	bonethrow:
		GREV J 1 A_FaceTarget
		GREV J 4 A_PlaySound ("skellytun/woosh")
		GREV K 5 A_FaceTarget
		TNT1 A 0 A_CustomMissile("ThrownBone",32,0,0,1)
		GREV L 4
		TNT1 A 0 A_Jump (120, "bonethrow")
		TNT1 A 0 A_Jump (30,"longrange")
		Goto See
		
	Melee:
		GREV J 1 A_FaceTarget
		GREV J 5 A_PlaySound("skellytun/woosh")
		GREV K 4 A_FaceTarget
		TNT1 A 0 A_CustomMeleeAttack(random(1,10)*4,"skellytun/punch","none") //----------------This is a custom replication of the basic revenant punch damage
		TNT1 A 0 ACS_ExecuteWithResult(990,0,1,1)//flyback//------------------------------------Change arg4 for higher knockback distances. 2 is pretty big tho.
		GREV L 4
		Goto See
	Pain:
		GREV M 5
		TNT1 A 0 A_PlaySound ("skeleton/allpain",0,1,0,0.5)
		TNT1 A 0 A_TakeInventory ("PowerTerrorStatus",999)
		TNT1 A 0 A_TakeInventory ("PowerKickedStatus",999)
		GREV M 5 A_Pain
		Goto See
	Pain.Dazer:
    Pain.Superkick:
		GREV M 5
		TNT1 A 0 A_PlaySound ("skeleton/allpain",0,1,0,0.5)
		TNT1 A 0 A_GiveInventory ("KickDazer",1)
		GREV M 5 A_Pain
		Goto Dazed
    Dazed:
		GREV M 2
		GREV M 1 A_SetAngle (angle+15)
		GREV M 1 A_JumpIfInventory ("PowerKickedStatus",1,"Dazed")
		Goto See
	Death:
		GREV M 4
		GREV N 5 A_Scream
		GREV O 5 A_NoBlocking
		GREV P 4
		TNT1 A 0 A_PlaySound ("hellfos/fall",0)
		GREV Q 4
		GREV R 5
		GREV S 2
		GREV S -1
		Stop	
	Xdeath:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx("bonergib1",0,0,0,frandom(-10,10),frandom(-10,10),frandom(8,11),0,SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SpawnItemEx("bonergib2",0,0,0,frandom(-15,15),frandom(-10,10),frandom(8,16),0,SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SpawnItemEx("bonergib2",0,0,0,frandom(-10,15),frandom(-10,10),frandom(8,16),0,SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SpawnItemEx("bonergib3",0,0,0,frandom(-10,10),frandom(-10,10),frandom(8,15),0,SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SpawnItemEx("bonergib3",0,0,0,frandom(-10,10),frandom(-10,10),frandom(8,18),0,SXF_NOCHECKPOSITION)
		TNT1 A 0 ThrustThingZ (0,35,0,1)
		TNT1 A 0 ThrustThing(angle*256/360+128, 3, 0, 0)		
		TNT1 A 0 A_PlaySound ("skeleton/gib",0,1,0,0.6)
		TNT1 A 0 A_NoBlocking
		TNT1 AAAAAA 0 A_SpawnItemEx("BoneGib",0,0,0,random(-10,10),random(-10,10),random(11,15))
		TNT1 AAAAAA 0 A_SpawnItemEx("BoneGib",0,0,0,random(-14,18),random(-15,19),random(11,15))
		TNT1 AAAAAA 0 A_SpawnItemEx("BoneGib",0,0,0,random(-8,15),random(-20,13),random(11,15))
		GRGB M 5
	flyback:
		GRGB N 1 A_JumpIf(Abs(VelZ) <= 0.01, "Land")
		loop
	land:
		GRGB P 1 ThrustThingZ (0,15,0,1)
		TNT1 A 0 A_PlaySound ("hellfos/fall",0)
		GRGB OPQ 1
		GRGB Q -1
		stop
	death.superkick:
		GREV M 1 A_Scream
		GREV M 1 A_ScaleVelocity (0.1)
		GREV M 1 A_Stop
		GREV M 1 A_NoBlocking
		TNT1 A 0 A_ChangeFlag ("NOCLIP",1)
		TNT1 A 0 A_ChangeFlag ("NOGRAVITY",1)
		GREV M 1 A_FaceTarget
		TNT1 A 0 ThrustThingZ (0,80,0,1)
		TNT1 A 0 ThrustThing(angle*256/360+128, 110, 1, 0)
		TNT1 A 0 A_SpawnItemEx ("kickdeathsound")
		TNT1 A 0 A_SpawnItemEx("bonergib4",0,0,4,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SpawnItemEx("bonergib1",0,0,70,0,0,3,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SpawnItemEx("bonergib3",0,50,20,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SpawnItemEx("bonergib3",0,-50,20,0,0,0,0,SXF_NOCHECKPOSITION)
  		GRGB O 1
  		GRGB N 2
	kickfly:
		GRGB MMMMMMM 1 A_SpawnItemEx ("KustamParticle",random(-8,8),random(-8,8),random(-10,10),random(-120,120)/15.0,random(-130,130)/12.0,random(-110,110)/17.0,0)
		TNT1 A 0 a_fadeout (0.02)
		loop
	Death.Sentinelarm:
		GREV N 2 A_Scream
		TNT1 A 0 ThrustThingZ (0,50,0,1)
		GREV N 3 
		GREV O 5 A_NoBlocking
		GREV P 4
		TNT1 A 0 a_nogravity
		TNT1 A 0 A_Stop
		TNT1 A 0 A_PlaySound ("Kustam/OCKill",CHAN_VOICE,1,0,0.4)
		TNT1 A 0 A_PlaySound ("Kustam/OCKill",5,1,0,0.6)
		TNT1 A 0 A_PlaySound ("Kustam/OCKill",6,1,0,0.6)
		TNT1 A 0 A_PlaySound ("Kustam/OCKill",7,1,0,0.6)
		OCKL ABCDEF 2 bright
		stop
		
	death.blazice:
		GREV M 2 A_Scream
		GRIC A 2 A_NoBlocking
		TNT1 A 0 A_PlaySound ("swordtech/freezedeath")
		TNT1 A 0 a_fadeout (0.20)
		TNT1 AAAAAAAAAAAA 0 A_SpawnItemEx ("iceparticle",random(-8,8),random(-8,8),32,random(-100,100)/10.0,random(-100,100)/10.0,random(-100,100)/20.0,0,160)
		GRIC B 90 bright
		GRIC C 2 bright
		TNT1 A 0 A_PlaySound ("swordtech/iceshatter")
		TNT1 AAA 0 A_SpawnItemEx ("icefragment",0,0,0,random(-10,10),random(-10,10),10) 
		TNT1 AAAA 0 A_SpawnItemEx ("icefragment",0,0,0,random(-4,13),random(-8,13),8) 
		stop
	death.fatalslash:
		GREV M 2 A_Scream
		GRIC A 4 A_NoBlocking
		GREV M 15
	randomwait:
		FDGR A 1 A_Jump (20,"split")
		loop
	split:
		FDGR AABBCC 5
		FDGR DE 2
		FDGR FGHIJ 3 bright A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,35), 0,0,0, 0, SXF_NOCHECKPOSITION,80)
		FDGR J 1 bright A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,35), 0,0,0, 0, SXF_NOCHECKPOSITION,80)
		FDGR J 1 bright A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,35), 0,0,0, 0, SXF_NOCHECKPOSITION,80)
		FDGR J 1 bright A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,35), 0,0,0, 0, SXF_NOCHECKPOSITION,80)
		FDGR J 1 bright A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,35), 0,0,0, 0, SXF_NOCHECKPOSITION,80)
		FDGR J 1 bright A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,35), 0,0,0, 0, SXF_NOCHECKPOSITION,80)
	exploding:
		FDGR J 1
		TNT1 A 1 A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,35), 0,0,0, 0, SXF_NOCHECKPOSITION, 80)
		FDGR J 1
		TNT1 A 1 A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,35), 0,0,0, 0, SXF_NOCHECKPOSITION, 80)
		FDGR J 1
		TNT1 A 1 A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,35), 0,0,0, 0, SXF_NOCHECKPOSITION, 80)
		FDGR J 1 A_Jump (100,"reallydie")
		TNT1 A 1 A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,35), 0,0,0, 0, SXF_NOCHECKPOSITION, 80)
		loop
	reallydie:
		TNT1 A 0 
		TNT1 A 1 A_SpawnItemEx ("fataldrawdeath",0,0,30)
		stop
	Raise:
		GREV S 5
		GREV RQPONM 5
		TNT1 A 0 A_Jump (60, "chaosexplode")
		Goto See
	Chaosexplode:
 		TNT1 A 0
		TNT1 A 0 A_ChangeFlag("NOPAIN", 1)
		GREV A 8
        GREV M 6 A_Pain
    	GREV A 8
        GREV M 6 A_Pain
    	GREV A 8
        GREV M 6 A_Pain
        TNT1 A 0 A_Scream
        TNT1 A 0 A_NoBlocking
		TNT1 A 0 a_radiusgive ("chaoslaugh",650,RGF_MONSTERS)
		TNT1 A 0 A_SpawnItemEx("skellytun",0,0,12,random(-6,6),random(-8,8),random(6,10),0,SXF_NOCHECKPOSITION)
		TNT1 A 0 A_PlaySound ("bonelord/explode",0,1,0,0.6)
		TNT1 A 0 Radius_Quake (4,20,0,32,0)
		TNT1 A 0 A_SpawnItem ("bigbloodsplatter")
		TNT1 AAAAAAAAAAAA 0 A_SpawnItem ("newbloodsplatter") 
		TNT1 AAAAAAAA 0 A_SpawnItemEx("RevBoneGib",0,0,0,random(-30,30),random(-30,30),10)
		ISKL AAAAAAA 0 A_SpawnItemEx("RevHipBoneGib",0,0,32,random(-10,10),random(-10,10),10)
		ISKL AAAAA 0 A_SpawnItemEx("RevRibBoneGib",0,0,32,random(-10,10),random(-10,10),12)
		TNT1 AAA 0 A_SpawnItemEx("RevBoneGib",0,0,0,random(-30,30),random(-30,30),10)
		TNT1 A 4
		TNT1 A 0 A_SpawnItemEx("skellytun",0,0,12,random(-6,6),random(-8,8),random(6,10),0,SXF_NOCHECKPOSITION)
		TNT1 A 20
		stop
		
	}
}	

actor geoshot
{
	Radius 11
	Height 8
	Speed 20
	Damage (25)
	Projectile
	+THRUSPECIES
	+THRUGHOST
	species "enemyshot"
	+bright
	SeeSound "GeoRev/Shot"
	DeathSound "GeoRev/Break"
	States
	{
	Spawn:
		REVS A 1 A_SpawnItemEx ("geotrail")
		REVS B 1 A_SpawnItemEx ("geotrail")
		REVS C 1 A_SpawnItemEx ("geotrail")
		REVS D 1 A_SpawnItemEx ("geotrail")
		REVS E 1 A_SpawnItemEx ("geotrail")
		REVS D 1 A_SpawnItemEx ("geotrail")
		REVS C 1 A_SpawnItemEx ("geotrail")
		REVS B 1 A_SpawnItemEx ("geotrail")
		REVS A 1 A_SpawnItemEx ("geotrail")
		Loop
	Death:
		REVS FGHIJK 2
		Stop
	}
}

actor geotrail
{
	+NOCLIP
	+clientsideonly
	+NOBLOCKMAP
	+NOGRAVITY
	renderstyle add
	alpha 0.5
	States
	{
	spawn:
		TNT1 A 0
		TNT1 A 2
		REVS ABCDE 1
		stop
	}
}

ACTOR GeoHomingShot
{
	Radius 11
	Height 8
	Speed 15
	Damage (35)
	Projectile
	+THRUSPECIES
	+THRUGHOST
	+BRIGHT
	species "enemyshot"
	+SEEKERMISSILE
	SeeSound "GeoRev/Shot"
	DeathSound "GeoRev/Break"
	States
	{
	Spawn:
		TNT1 A 0
		REVS M 1 A_SpawnItemEx ("geoHomingtrail")
		TNT1 A 0 A_SeekerMissile(2,4,SMF_PRECISE)
		REVS M 1 A_SpawnItemEx ("geoHomingtrail")
		TNT1 A 0 A_SeekerMissile(2,4,SMF_PRECISE)
		REVS M 1 A_SpawnItemEx ("geoHomingtrail")
		TNT1 A 0 A_PlaySound ("GeoRev/Homing",7)
		TNT1 A 0 A_SeekerMissile(2,4,SMF_PRECISE)
		REVS N 1 A_SpawnItemEx ("geoHomingtrail")
		TNT1 A 0 A_SeekerMissile(2,4,SMF_PRECISE)
		REVS N 1 A_SpawnItemEx ("geoHomingtrail")
		TNT1 A 0 A_SeekerMissile(2,4,SMF_PRECISE)
		REVS N 1 A_SpawnItemEx ("geoHomingtrail")
		TNT1 A 0 A_SeekerMissile(2,4,SMF_PRECISE)
		REVS O 1 A_SpawnItemEx ("geoHomingtrail")
		TNT1 A 0 A_SeekerMissile(2,4,SMF_PRECISE)
		REVS O 1 A_SpawnItemEx ("geoHomingtrail")
		TNT1 A 0 A_SeekerMissile(2,4,SMF_PRECISE)
		REVS O 1 A_SpawnItemEx ("geoHomingtrail")
		TNT1 A 0 A_SeekerMissile(2,4,SMF_PRECISE)
		REVS P 1 A_SpawnItemEx ("geoHomingtrail")
		TNT1 A 0 A_SeekerMissile(2,4,SMF_PRECISE)
		REVS P 1 A_SpawnItemEx ("geoHomingtrail")
		TNT1 A 0 A_SeekerMissile(2,4,SMF_PRECISE)
		REVS P 1 A_SpawnItemEx ("geoHomingtrail")
		TNT1 A 0 A_SeekerMissile(2,4,SMF_PRECISE)
		Loop
	Death:
		REVS QRSTUV 2
		Stop
	}
}

actor geoHomingtrail : geotrail
{
	States
	{
	spawn:
		TNT1 A 3
		REVS M 6
		stop
	}
}


Actor GeoRing
{
	+dontblast
	+notimefreeze
	+nointeraction
	+clientsideonly 
	projectile
    +FORCEXYBILLBOARD	
	+LOOKALLAROUND
	radius 2
	speed 5
    Scale 1
	renderstyle add
	alpha 0.60
	states
	{
	spawn:
		TNT1 A 0
		TRNG E 2 bright
		TRNG D 2 bright
		TRNG C 2 bright
		TRNG B 2 bright
		TRNG A 2 bright
		stop
	death:
		TNT1 A 0
		stop
	}
}

actor GeoBomb
{
	Radius 9
	Height 12
	Speed 18
	Damage (15)
	+THRUGHOST
	Projectile
	-nogravity
	gravity 0.7
	+bright
	Species "GeoRev"
	+THRUSPECIES
	SeeSound "GeoRev/Shot"
	DeathSound "GeoRev/Break"
	States
	{
	spawn:
		TNT1 A 0
		REVS W 1 ThrustThingZ (0,12,0,0)
	flight:
		REVS W 1 A_SpawnItemEx ("GeoBombtrail")
		loop
	death:
		TNT1 A 0 A_ChangeFlag ("nogravity", 1)
		TNT1 A 0 A_PlaySound ("bomberknight/explosion",0,1,0,0.50)
		TNT1 A 0 a_explode (15,120,0,0,90)
		TNT1 A 0 A_Stop
		REVS QRSTUV 2
		stop
	}
}

actor geoBombTrail : geotrail
{
	States
	{
	spawn:
		TNT1 A 2
		REVS W 4
		stop
	}
}


ACTOR ThrownBone
{
	Radius 15
	Height 20
	Speed 15
	Health 10
	Damage (15)
	Scale 2
	+BRIGHT
	Projectile
	+ISMONSTER
	+THRUSPECIES
	+THRUGHOST
	+SHOOTABLE
	-NOBLOCKMAP
	-NOBLOOD
	-DORMANT
	-INVULNERABLE
	bloodtype GMOTAnoBlood
	species "enemyshot"
	deathsound "gibs/bones"
	Obituary "%o was boned by a Grenadier revenant."
	States
	{
	Spawn:
		TNT1 A 0
		RBNE A 2
		RBNE B 2
		RBNE C 2 A_PlaySound("Skeleton/Swing")
		RBNE D 2
		Loop
	Death:
		TNT1 A 0 A_SetTranslucent (0.5, 1)
		0NGB EFG 3 Bright
		Stop
	xdeath:
		TNT1 A 0 A_PlaySound ("subweapons/jabhit",0)
		TNT1 A 0 A_SetTranslucent (0.5, 1)
		0NGB EFG 3 Bright
		Stop
	}
}

actor bonergib1
{
	projectile
	+thruactors
	-nogravity
	+clientsideonly
	+NOTELEPORT
	Radius 4
	Height 5
	+bright
	states
	{
	spawn:
		GRGB ABCD 1
		loop
	death:
		TNT1 A 1
		stop
	}
}

actor bonergib2 : bonergib1
{
	states
	{
	spawn:
		GRGB EFGH 1
		loop
	}
}

actor bonergib3 : bonergib1
{
	states
	{
	spawn:
		GRGB IJKL 1
		loop
	}
}

actor bonergib4
{
	+thruactors
	-nogravity
	+clientsideonly
	+NOTELEPORT
	Radius 4
	Height 5
	+bright
	states
	{
	spawn:
		GRGB R 180
		goto death
	death:
		TNT1 A 0
		TNT1 A 0 A_PlaySound ("skeleton/gib",0,1,0,0.6)
		TNT1 AAAA 0 A_SpawnItemEx("BoneGib",0,0,0,random(-10,10),random(-10,10),random(11,15))
		TNT1 AAAA 0 A_SpawnItemEx("BoneGib",0,0,0,random(-14,18),random(-15,19),random(11,15))
		TNT1 AAAA 0 A_SpawnItemEx("BoneGib",0,0,0,random(-8,15),random(-20,13),random(11,15))
		TNT1 A 0 A_SpawnItemEx("bonergib2",0,0,0,frandom(-15,15),frandom(-10,10),frandom(8,16),0,SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SpawnItemEx("bonergib2",0,0,0,frandom(-10,15),frandom(-10,10),frandom(8,16),0,SXF_NOCHECKPOSITION)
		TNT1 A 3
		stop
	}
}
