/*
For tweaking, see comments.
*/

ACTOR Skellytun : actor
{
	Species "Skellytun"
	Health 250
	Radius 20
	Height 56
	Mass 500
	Speed 14
	PainChance 80
 	Painchance "BarrelGrab", 0
	Monster
	MeleeThreshold 196
	+MISSILEMORE 
	+MISSILEEVENMORE
	+FLOORCLIP 
	+BRIGHT
	+dontoverlap
	+noblooddecals
	+DONTCORPSE
	bloodtype blackbonespray
	SeeSound "skeleton/sight"
	PainSound "skellytun/pain"
	DeathSound "skeleton/death"
	ActiveSound "skeleton/active"
	HitObituary "%o has been pummeled by a chaos revenant"
	Obituary "%o got boned by a chaos revenant"
	States
	{
	Spawn:
		INCA AB 8 Bright A_Look
		goto see
	See:
		INCA AABBCCDDEEFF 2 Bright   A_Chase
		Loop
	Melee:
		INCA G 1 Bright A_FaceTarget
		INCA G 4 Bright A_PlaySound("skellytun/woosh")
		INCA H 3 Bright A_FaceTarget
	MeleeFinal:
		TNT1 A 0 A_TakeInventory("SkellytunFrustrated",0x7FFFFFFF)
		INCA H 1 Bright A_FaceTarget
		TNT1 A 0 A_CustomMeleeAttack(random(1,10)*4,"skellytun/punch","none", "POWdrainer") //----------------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.
		INCA I 6 Bright
		Goto See
	Missile:
		TNT1 A 0 A_JumpIfCloser(600, "JumpDecide")//------------------------------------The range at which skellytun will attempt to jump punch
		Goto BoneThrow	
	JumpDecide:
		TNT1 A 0 A_Jump(80, "JumpPunch") //--------------------------------------------if it's in range, very good chance of jump-punching
		Goto BoneThrow //---------------------------------------------------------------else, toss its head out
	JumpPunch:
		TNT1 A 0 A_JumpIfInventory("SkellytunFrustrated",10,"AngrySpin")//-----------------By checking at 10 and giving random(3,4) every fail, it will grow angry every 3 to 4 attempts
		INCA G 6 Bright 																	//(weighted toward 3)
		INCA G 1 Bright A_FaceTarget
		TNT1 A 0 A_PlaySound("Skeleton/Sight")
		TNT1 A 0 A_Stop
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 ThrustThingZ(0,30,0,1)//-------------------------------------------------To adjust the height and distance of the jump,
		TNT1 A 0 ThrustThing(angle*256/360, 20, 0, 0)//-----------------------------------------look here
		INCA G 1 Bright A_PlaySound("Skeleton/Sight")
		INCA GGGGGGGGGGG 1 Bright A_JumpIfCloser(90, "MeleeFinal") //---------------------how close the skellytun needs to be when jumping before it attempts to punch
		INCA G 1 Bright A_GiveInventory("SkellytunFrustrated",random(3,4))
		Goto See
	AngrySpin:
		TNT1 A 0
		TNT1 A 0 A_TakeInventory("SkellytunFrustrated",0x7FFFFFFF)
		TNT1 A 0 A_TakeInventory("SkellytunSpinLoop",0x7FFFFFFF)
		TNT1 A 0 A_Stop
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_PlaySound("skellytun/angry",2)
		TNT1 A 0 ThrustThingZ(0,30,0,1)//-------------------------------------------------Every leap attack type thrust is the same across 
		TNT1 A 0 ThrustThing(angle*256/360, 20, 0, 0)//-----------------------------------------------all state types but feel free to change
		INCA G 4 Bright 
	SpinLoop:
		INCA G 1 Bright A_SetAngle(55+Angle)
		TNT1 A 0 A_GiveInventory ("skellytunspinpunch",1)
		TNT1 A 0 A_Playsound("skellytun/spinwoosh",3)
		TNT1 A 0 A_GiveInventory("SkellytunSpinLoop",1)
		loop
	BoneThrow:
		TNT1 A 0 A_Jump(256, "BoneThrow1", "BoneThrow2", "BoneThrow3")
	BoneThrow1:
		INCA G 1 Bright A_FaceTarget
		INCA G 6 Bright
		INCA H 6 Bright A_FaceTarget
		INCA I 6 Bright
		TNT1 A 0 A_PlaySound("Skeleton/Swing")
		TNT1 A 0 A_CustomMissile("SkellytunBone1",32,-30,0,1)//----------------------------------Add or remove bones for pattern straight throw here
		TNT1 A 0 A_CustomMissile("SkellytunBone3",32,0,0,1)
		TNT1 A 0 A_CustomMissile("SkellytunBone1",32,30,0,1)
		goto See
	BoneThrow2:
		INCA G 1 Bright A_FaceTarget
		INCA G 6 Bright
		INCA H 6 Bright A_FaceTarget
		INCA I 6 Bright
		TNT1 A 0 A_PlaySound("Skeleton/Swing")//----------Add bones to the bone cluster here. It throws a variable number and the way the jumps work, it is weighted for lower amounts
		TNT1 AAA 0 A_CustomMissile("SkellytunBone2",random(28, 48),random(-30,30)*4,random(-6,6)*2,random(5,30)*2)
		TNT1 A 0 A_Jump(90, "See")
		TNT1 A 0 A_CustomMissile("SkellytunBone2",random(28, 48),random(-30,30)*4,random(-4,4)*2,random(5,30)*2)
		TNT1 A 0 A_Jump(90, "See")
		TNT1 A 0 A_CustomMissile("SkellytunBone2",random(28, 48),random(-30,30)*4,random(-3,4)*2,random(5,30)*2)
		TNT1 A 0 A_Jump(90, "See")
		TNT1 A 0 A_CustomMissile("SkellytunBone2",random(28, 48),random(-30,30)*4,random(-5,6)*2,random(5,30)*2)
		TNT1 A 0 A_Jump(90, "See")
		TNT1 A 0 A_CustomMissile("SkellytunBone2",random(28, 48),random(-30,30)*4,random(-3,6)*2,random(5,30)*2)
		TNT1 A 0 A_Jump(90, "See")
		TNT1 A 0 A_CustomMissile("SkellytunBone2",random(28, 48),random(-30,30)*4,random(-3,7)*2,random(5,30)*2)
		TNT1 A 0 A_Jump(90, "See")
		TNT1 A 0 A_CustomMissile("SkellytunBone2",random(28, 48),random(-30,30)*4,random(-6,6)*2,random(5,30)*2)	
		//TNT1 A 0 ACS_ExecuteWithResult(990, 0, 2, 0) //scroton's "arcing actor" script for jumping, used for projectiles -- couldn't get it to work, concept abandoned
		goto See
	BoneThrow3:
		INCA G 1 A_FaceTarget
		INCA G 6
		INCA H 6 A_FaceTarget
		INCA I 6
		TNT1 A 0 A_PlaySound("Skeleton/Swing")
		TNT1 A 0 A_CustomMissile("SkellytunBone3")//-------------------------------------The homing boner
		goto See  
	Pain:
		TNT1 A 0
 		TNT1 A 0 A_TakeInventory ("PowerKickedStatus",999)
		INCA L 5
		TNT1 A 0 a_playsound ("skeleton/allpain",0,1,0,0.5)
		INCA L 5 A_Pain
		Goto See
	Pain.Dazer:
    Pain.Superkick:
		TNT1 A 0
		INCA L 5
		TNT1 A 0 a_playsound ("skeleton/allpain",0,1,0,0.5)
		TNT1 A 0 A_GiveInventory ("KickDazer",1)
		INCA L 5 A_Pain
		Goto Dazed
    Dazed:
		INCA L 2
		INCA L 1 A_SetAngle (angle+15)
		INCA L 1 A_JumpIfInventory ("PowerKickedStatus",1,"Dazed")
		Goto See
	
	Death:
		INCA L 1
		INCA L 1 A_Scream
		INCA L 1 A_NoBlocking
		TNT1 A 0 a_scream
		TNT1 A 0 a_playsound ("skeleton/gib",0,1,0,0.6)
		TNT1 AAAAAAAAAAAAA 0 a_spawnitemex ("SkellytunSkullDeath",random(-16,16),random(-16,16),42,random(-100,100)/20.0,random(-100,100)/20.0,random(-100,100)/20.0,0)
		TNT1 AAAAAAAAA 0 a_spawnitemex("blackbones",0,0,32,random(-20,15),random(-8,16),random(5,10))
		TNT1 AAAAAA 0 a_spawnitemex("blackbones",0,0,32,random(-8,18),random(-3,18),random(5,10))
		ISKL AAAAAAA 0 a_spawnitemex("blackbones",0,0,32,random(-20,9),random(-5,20),10)
		ISKL AAAAA 0 a_spawnitemex("blackbones",0,0,32,random(-13,10),random(-8,20),12)
		TNT1 A 10
		Stop
	Death.superkick:	
		INCA M 1 A_Scream 
		INCA M 1 a_scalevelocity (0.1)
 		INCA M 1 a_stop
		INCA M 1 A_NoBlocking
		TNT1 A 0 a_changeflag ("NOCLIP",1)
		TNT1 A 0 a_changeflag ("NOGRAVITY",1)
		INCA 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")
		INCA N 1
		INCA O 2		

	kickfly:
		INCA OOOOOOO 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.blazice:
		TNT1 A 0
		INCA L 2 a_scream
		INIC 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)
		INIC B 90 bright
		INIC 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) 
		TNT1 AAAA 0 a_spawnitemex ("icefragment",0,0,0,random(-6,16),random(-4,6),8) 
		stop
	death.fatalslash:
		TNT1 A 0
		INCA L 2 a_scream
		INIC A 4 a_noblocking
		INCA L 15 
	randomwait:
		FDCR A 1 a_jump (20,"split")
		loop
	split:
		FDCR AABBCC 5
		FDCR DE 2 
		FDCR FGHIJ 3 bright  A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,30), 0,0,0, 0, SXF_NOCHECKPOSITION,80)
		FDCR J 1 bright  A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,30), 0,0,0, 0, SXF_NOCHECKPOSITION,80)
		FDCR J 1 bright  A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,30), 0,0,0, 0, SXF_NOCHECKPOSITION,80)
		FDCR J 1 bright  A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,30), 0,0,0, 0, SXF_NOCHECKPOSITION,80)
		FDCR J 1 bright  A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,30), 0,0,0, 0, SXF_NOCHECKPOSITION,80)
		FDCR J 1 bright  A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,30), 0,0,0, 0, SXF_NOCHECKPOSITION,80)
	exploding:
		FDCR J 1 bright 
		TNT1 A 1 bright A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,30), 0,0,0, 0, SXF_NOCHECKPOSITION, 80)
		FDCR J 1 bright 
		TNT1 A 1 bright A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,30), 0,0,0, 0, SXF_NOCHECKPOSITION, 80)
		FDCR J 1 bright 
		TNT1 A 1 bright A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,30), 0,0,0, 0, SXF_NOCHECKPOSITION, 80)
		FDCR J 1 bright a_jump (100,"reallydie")
		TNT1 A 1 bright A_SpawnItemEx ("fatalburst", frandom(-20,20),frandom(-20,20),frandom(10,30), 0,0,0, 0, SXF_NOCHECKPOSITION, 80)
		loop
	reallydie:
		TNT1 A 0
		TNT1 A 1 a_spawnitemex ("fataldrawdeath",0,0,30)
		stop
	Raise:
		INCA Q 5
		INCA PONML 5
		Goto See
	}
}


ACTOR SkullSparkly 
{
	+clientsideonly
	+NOINTERACTION
	States
	{
		Spawn:
			TNT1 AA 1 A_SpawnItemEx("SkullSparkle", 0, random(-5,5), random(-2,2))
			TNT1 A 0 A_Jump(127, "Done")
			TNT1 A 1 A_SpawnItemEx("SkullSparkle", 0, random(-5,5), random(-2,2))
			TNT1 A 0 A_Jump(127, "Done")
			TNT1 A 1 A_SpawnItemEx("SkullSparkle", 0, random(-5,5), random(-2,2))
			TNT1 A 0 A_Jump(127, "Done")
		Done:
			TNT1 A 0
			Stop
	}
}

ACTOR SkullSparkly2 
{
	+clientsideonly
	+NOINTERACTION
	States
	{
		Spawn:
			TNT1 AA 1 A_SpawnItemEx("SkullSparkle2", random(-20,20), random(-30,30), random(-25,15))
			TNT1 A 0 A_Jump(127, "Done")
			TNT1 AA 1 A_SpawnItemEx("SkullSparkle2", random(-20,20), random(-30,30), random(-25,15))
			TNT1 A 0 A_Jump(127, "Done")
			TNT1 AA 1 A_SpawnItemEx("SkullSparkle2", random(-20,20), random(-30,30), random(-25,15))
			TNT1 A 0 A_Jump(127, "Done")
		Done:
			TNT1 A 0
			Stop
	}
}


ACTOR SkullSparkle2
{
	Scale 0.8
	+clientsideonly
	+NOINTERACTION
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(127, 3)
			GMAG AABBCCDD 2 A_FadeOut(0.1)
			Stop
	}
}


ACTOR SkullSparkle
{
	Scale 0.8
	+clientsideonly
	+NOINTERACTION
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_Jump(215, "sparkle2","sparkle3","sparkle4")
		sparkle1:
			TNT1 A 0 ThrustThingZ (0, 4, 1,0)
		sparkle1.fade:
			GMAG A 1 Bright A_FadeOut(0.1)
			loop
		sparkle2:
			TNT1 A 0 ThrustThingZ (0, 4, 1,0)
		sparkle2.fade:
			GMAG B 1 Bright A_FadeOut(0.1)
			loop
		sparkle3:
			TNT1 A 0 ThrustThingZ (0, 4, 1,0)
		sparkle3.fade:
			GMAG C 1 Bright A_FadeOut(0.1)
			loop
		sparkle4:
			TNT1 A 0 ThrustThingZ (0, 4, 1,0)
		sparkle4.fade:
			GMAG D 1 Bright A_FadeOut(0.1)
			loop
	}
}

ACTOR SkullTest1
{
	+NOGRAVITY
	States
	{
	Spawn:
		SKCA ABCDEFJK 6 Bright
		Loop
	}
}








ACTOR skellytunspinpunch : artiblastradius
{
+inventory.autoactivate
}

ACTOR SkellytunFrustrated : ammo
{
	inventory.maxamount 0x7FFFFFFF
}

//Skeleton Bones 

ACTOR SkellytunSkullDeath
{
	+NOINTERACTION
	Scale 2.0
	States
	{
	Spawn:
		0NGB EFG 3 Bright
		Stop
	}
}


//===================================================================Here are the bone actors for adjusting damages.

ACTOR SkellytunBoneBase
{
	Radius 15
	Height 20
	Health 15
	Speed 15
	FastSpeed 30
	Damage 4
	+ISMONSTER
	+THRUSPECIES
	+THRUGHOST
	+SHOOTABLE
	-NOBLOCKMAP
	-NOBLOOD
	-DORMANT
	-INVULNERABLE
	bloodtype GMOTAnoBlood
	species "enemyshot"
	Scale 1.7
	SeeSound "" //*******Bone See Sound?
	DeathSound ""//********Bone Death Sound?
}

ACTOR SkellytunBone1 : SkellytunBoneBase//straight throw
{
	Projectile
	States
	{
	Spawn:
		TNT1 A 0
		0NGB A 3 Bright
		0NGB B 3 Bright
		0NGB C 3 Bright A_PlaySound("Skeleton/Swing")
		0NGB D 3 Bright
		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 SkellytunBone2 : SkellytunBoneBase//arc bones
{
	Projectile
	-NOGRAVITY
	+THRUSPECIES
	Speed 32
	damage (7)
	+doombounce
	seesound "gibs/bones"
	BounceFactor 0.8
	BounceCount 4
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_PlaySound("silence", CHAN_VOICE)
	flying:
		TNT1 A 0
		0NGB A 3 Bright 
		0NGB B 3 Bright
		0NGB C 3 Bright
		0NGB D 3 Bright
		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 SkellytunBone3 : SkellytunBoneBase//Bouncing boner
{
	Damage (15)
	Projectile
	radius 16
	height 16
	+noblood
	+FORCEXYBILLBOARD	
	+dontblast
	+THRUSPECIES
	+Hexenbounce
	Bouncecount 2
	-noblockmap
	Speed 10
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 AAA 0 A_SpawnItemEx("SkullSparkly")
		TNT1 A 0 A_PlaySound("Skeleton/Swing",0,1,0,2.0)
		XBON A 4 Bright 
		XBON B 4 Bright 
		TNT1 AAA 0 A_SpawnItemEx("SkullSparkly")
		TNT1 A 0 A_PlaySound("Skeleton/Swing")
		XBON A 4 Bright 	
		XBON B 4 Bright
		TNT1 AAA 0 A_SpawnItemEx("SkullSparkly")
		TNT1 A 0 A_PlaySound("Skeleton/Swing",0,1,0,2.0)
		XBON A 4 Bright 
		XBON B 4 Bright 
		TNT1 AAA 0 A_SpawnItemEx("SkullSparkly")
		TNT1 A 0 A_PlaySound("Skeleton/Swing",0,1,0,2.0)
		XBON A 4 Bright
		XBON B 4 Bright 
		TNT1 A 0 A_PlaySound("Skeleton/Swing",0,1,0,2.0)
		XBON A 4 Bright 
		TNT1 AAA 0 A_SpawnItemEx("SkullSparkly")
		XBON B 4 Bright
		TNT1 A 0 A_PlaySound("Skeleton/Swing",0,1,0,2.0)
		XBON A 4 Bright 
		XBON B 4 Bright 
		TNT1 AAA 0 A_SpawnItemEx("SkullSparkly")
		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 SkellytunBone4 : SkellytunBone2//Headless Boneshower. Slightly slower and bounces less than the cluster throw bone.
{
	Speed 18
	BounceFactor 0.6
	BounceCount 3
}

//==============================================================================================================================



ACTOR SkellytunSpinLoop : Ammo
{
	inventory.maxamount 0x7FFFFFFF
}