/*

==LILK'S AXE==
Initial concept supplied by Terminusest13
Sprites are a model rip of the Black Axem
ranger's axe.

Lilk's Axe is a weapon from another era, where cold 
steel met with magic to wage wars, brought into 
a more modern age. The exact origins of this weapon
are unknown. But Arti seems to know how to make
use of this weapon.

The axe is capable of cleaving through most demons
with ease, as well as stealing some of the lifeforce
from its targets and giving it to the wielder for a
small boost of health. As alternate attack, the axe
can project a smaller ethereal axe that splits into
more axes if it manages to connect with a target.

These attacks drain the weapon, and once dry, the
axe will become a more mundane weapon until enough
blows are struck for it to reawaken once more.
*/

Actor SkillAxe : weapon 
{
	Weapon.SelectionOrder 500
	Weapon.AmmoUse 0
	weapon.ammouse2 0
	Weapon.AmmoGive2 0
	Weapon.AmmoType "Skill"
	Weapon.AmmoType2 "Skill"
	scale 0.50
	weapon.bobstyle smooth
	weapon.bobrangex 0.1
	weapon.bobrangey 0.6
	weapon.bobspeed 2
	Inventory.RestrictedTo "Artificer"
	+floatbob
	Inventory.PickupMessage "You've found Lilk's Axe!"
	+noalert
	+NOAUTOAIM
	Tag "Lilk's Axe"
	states
	{
	spawn:
		AXPK A 15 bright
		AXPK A 5
		loop
	select:
		TNT1 A 0
		TNT1 A 0 A_playsound ("Axe/draw",0)
	draw:
		TNT1 A 0
		SAXE AAAA 0 a_raise
		SAXE A 1 a_raise
		loop
	deselect:
		TNT1 A 0
		TNT1 A 0 a_jumpifhealthlower (1, "deadlower")
		TNT1 A 0 a_playsound ("Axe/holster",0)
	holster:
		TNT1 A 0
		TNT1 A 0 a_takeinventory ("secretaction", 99)
		SAXE A 1 a_lower
		SAXE AA 0 a_lower
		loop
	deadlower:
		TNT1 A 0
		TNT1 A 0
		TNT1 AAAAAAAAAAAAA 0 a_lower
		TNT1 A 1 a_lower
		wait
	ready:
		TNT1 A 0 a_jumpifinventory ("skill", 50, "axepowerup")
		TNT1 A 0 a_jumpifinventory ("skillchecker", 1, "manaready")
		SAXE A 1 a_weaponready
		loop
	axepowerup:
		TNT1 A 0
		TNT1 A 0 a_giveinventory ("Skillchecker",1)
		MIDL A 1 bright a_weaponready
	manaready:
		MIDL A 1 bright a_weaponready
		MIDL A 1 bright a_weaponready
		MIDL A 1 bright a_weaponready
		MIDL B 1 bright a_weaponready
		MIDL B 1 bright a_weaponready
		MIDL B 1 bright a_weaponready
	skillcheck:
		TNT1 A 0
		TNT1 A 0 a_jumpifinventory ("skill", 5, "manaready")
		TNT1 A 0 a_takeinventory ("SkillChecker",99)
		SAXE A 1 a_weaponready
		goto ready
	fire:
		TNT1 A 0 a_jumpifinventory ("skillchecker", 1, "manaswing")
		TNT1 A 0 a_jumpifinventory ("skill", 50, "axepowerup")
		SAXE BCDD 1
		AXAT A 2
		TNT1 A 0 A_PlaySound("Axe/Swing",0)
		AXAT B 1 
		AXAT C 1 A_FireCustomMissile ("WeakAxeAttack")
		AXAT DE 1
		TNT1 A 8
		TNT1 A 1 a_jumpifinventory ("skill", 50, "ManaStarter")
		TNT1 A 1 a_jumpifinventory ("skillchecker", 1, "ManaReset")
	AxeReset:
		AXRS AB 1
		AXRS CD 1 a_weaponready
		AXRS DEEFF 1 a_weaponready
		goto ready
	manaswing:
		MIDL BCDD 1 bright
		MXAT A 2 bright
		TNT1 A 0 a_playsound ("Axe/PowerSwing",0)
		TNT1 A 0 A_PlaySound("Axe/Swing",0)
		MXAT B 1 bright
		MXAT C 1 A_FireCustomMissile ("AxeAttack")
		MXAT DE 1 bright
		TNT1 A 10
		TNT1 A 1 a_jumpifinventory ("Skill",1,"ManaReset")
		TNT1 A 1 a_takeinventory ("SkillChecker",99)		
		goto AxeReset
	
	//This state is identical to the skillcheck, but it has
	//the reset animation after finishing a swing
	ManaReset:
		TNT1 A 0
		MXRS AB 1 bright
		MXRS CD 1 bright a_weaponready
		MXRS DEEFF 1 bright a_weaponready
		goto ready
	ManaStarter:
		TNT1 A 0
		MXRS AB 1 bright a_giveinventory ("SkillChecker",1)
		MXRS CD 1 bright a_weaponready
		MXRS DEEFF 1 bright a_weaponready
		goto ready

	
	altfire:
		TNT1 A 0
		TNT1 A 0 a_jumpifinventory ("skillchecker", 1, "ThrowCheck")
		SAXE A 1 a_weaponready (WRF_NOFIRE)
		goto Ready
	ThrowCheck:
		TNT1 A 0
		TNT1 A 0 a_jumpifinventory("skill", 10, "AxeThrow")
		MIDL A 1 bright a_weaponready (WRF_NOSECONDARY)
		MIDL A 1 bright a_weaponready (WRF_NOSECONDARY)
		MIDL A 1 bright a_weaponready (WRF_NOSECONDARY)
		MIDL B 1 bright a_weaponready (WRF_NOSECONDARY)
		MIDL B 1 bright a_weaponready (WRF_NOSECONDARY)
		MIDL B 1 bright a_weaponready (WRF_NOSECONDARY)
		goto Ready
	AxeThrow:
		MIDL BCDD 1 bright
		MXAT A 2 bright
		TNT1 A 0 a_playsound ("Axe/PowerSwing",0)
		TNT1 A 0 A_PlaySound("Axe/Swing",0)
		MXAT B 1 bright
		TNT1 A 0 a_takeinventory ("skill",10)
		MXAT C 1 A_FireCustomMissile ("AxeShot")
		TNT1 A 0 A_FireCustomMissile ("AxeAttack")
		MXAT DE 1 bright
		TNT1 A 10
		TNT1 A 1 a_jumpifinventory ("Skill",1,"ManaReset")
		TNT1 A 1 a_takeinventory ("SkillChecker",99)		
		goto AxeReset
	}
}

actor axeattack : fastprojectile
{
	Projectile
	speed 70
	damage (120)
	obituary "%o was outskilled by %k."
	+BLOODSPLATTER
	+thruspecies
	+dontblast
	+dontreflect
	species "player"
	height 8
	radius 8
	scale 1.25
	mass 80000
	states
	{
	Spawn:
		TNT1 AA 1
		stop
	crash:
	Death:
		TNT1 A 0
		TNT1 A 1
		TNT1 A 0 A_PlaySound("Axe/Wall", CHAN_AUTO)
		TNT1 A 0 A_SpawnDebris("WWStyleBulletSpark")
		TNT1 A 0 radius_quake (1,4,0,5,0)
		TNT1 A 5 
		stop
	Xdeath:
		TNT1 A 0
		TNT1 A 1
		TNT1 A 0 A_PlaySound("Axe/Hit", CHAN_AUTO)
		TNT1 A 0 A_playsound ("Axe/ShotHit",0)
		TNT1 A 0 a_takefromtarget ("Skill",5)
		TNT1 A 0 A_GiveInventory("Axedrain",1, AAPTR_TARGET)
		TNT1 A 0 radius_quake (2,7,0,8,0)
		SPX1 ABCDE 2 Bright
		TNT1 A 5
		stop
	}
}


actor Axedrain : custominventory 
{
	inventory.maxamount 1
	+INVENTORY.AUTOACTIVATE
	states
	{
	pickup:
		TNT1 A 0
		TNT1 A 0 a_jumpifhealthlower(100, "drain")
		stop
	drain:
		TNT1 A 0
		TNT1 A 0 a_jumpifhealthlower(31, "Heal3")
		TNT1 A 0 a_jumpifhealthlower(51, "Heal2")
		TNT1 AAA 0 a_spawnitemex ("CAHealEffect",random(-4,12),random(-3,12),random(-10,10),random(-100,100)/20.0,random(-100,100)/20.0,random(-100,100)/20.0,0,160)
		TNT1 A 0 a_playsound ("Axe/LowDrain",0)
		TNT1 A 1 a_giveinventory ("health", 5)
		stop
	Heal2:
		TNT1 A 0 
		TNT1 AAAAAA 0 a_spawnitemex ("CAHealEffect",random(-4,12),random(-3,12),random(-10,10),random(-100,100)/20.0,random(-100,100)/20.0,random(-100,100)/20.0,0,160)
		TNT1 A 0 a_playsound ("Axe/MidDrain",0)
		TNT1 A 1 a_giveinventory ("health", 10)
		stop
	Heal3:
		TNT1 A 0 
		TNT1 AAAAAAAAAAA 0 a_spawnitemex ("CAHealEffect",random(-4,12),random(-3,12),random(-10,10),random(-100,100)/20.0,random(-100,100)/20.0,random(-100,100)/20.0,0,160)
		TNT1 A 0 a_playsound ("Axe/HighDrain",0)
		TNT1 A 1 a_giveinventory ("health", 15)
		stop
	}
}



Actor WeakAxeAttack : AxeAttack
{
	damage (30)
	scale 1.15
	renderstyle add
	alpha 0.95
	states
	{
	Xdeath:
		TNT1 A 0
		TNT1 A 1
		TNT1 A 0 A_PlaySound("Axe/Hit", CHAN_AUTO)
		TNT1 A 0 a_giveinventory ("Skill",random(5,8),AAPTR_TARGET)
		TNT1 A 0 radius_quake (2,7,0,8,0)
		SPX2 ABCDEE 1 Bright
		TNT1 A 5
		stop
	}
}


actor Axeshot
{
    projectile
	+THRUSPECIES
	species "player"
	height 14
	radius 14
	damage 8
	Speed 40
    States
    {
    Spawn:
        TNT1 A 0
		TNT1 A 0 a_playsound ("Axe/PowerShot",0)
		SPAX A 1 Bright a_spawnitem ("axetrail1")
		SPAX B 1 Bright a_spawnitem ("axetrail2")
		SPAX C 1 Bright a_spawnitem ("axetrail3")
		SPAX A 1 Bright a_spawnitem ("axetrail1")
		SPAX B 1 Bright a_spawnitem ("axetrail2")
		SPAX C 1 Bright a_spawnitem ("axetrail3")
		SPAX A 1 Bright a_spawnitem ("axetrail1")
		SPAX B 1 Bright a_spawnitem ("axetrail2")
		SPAX C 1 Bright a_spawnitem ("axetrail3")
		SPAX A 1 Bright a_spawnitem ("axetrail1")
		SPAX B 1 Bright a_spawnitem ("axetrail2")
		SPAX C 1 Bright a_spawnitem ("axetrail3")
		TNT1 A 0 a_changeflag ("nogravity", 0)
    falling:
		SPAX A 1 Bright a_spawnitem ("axetrail1")
		SPAX B 1 Bright a_spawnitem ("axetrail2")
		SPAX C 1 Bright a_spawnitem ("axetrail3")
		SPAX A 1 Bright a_spawnitem ("axetrail1")
		SPAX B 1 Bright a_spawnitem ("axetrail2")
		SPAX C 1 Bright a_spawnitem ("axetrail3")
		SPAX A 1 Bright a_spawnitem ("axetrail1")
		SPAX B 1 Bright a_spawnitem ("axetrail2")
		SPAX C 1 Bright a_spawnitem ("axetrail3")
		SPAX A 1 Bright a_spawnitem ("axetrail1")
		SPAX B 1 Bright a_spawnitem ("axetrail2")
		SPAX C 1 Bright a_spawnitem ("axetrail3")
		loop

    Crash:
    XDeath:
		TNT1 A 0
		TNT1 A 0 a_playsound ("Axe/ShotHit",0)
		TNT1 A 0 a_changeflag ("nogravity", 1)
		TNT1 A 0 A_CustomMissile("AxeSpread", 0,0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("AxeSpread", 0,0, 40, CMF_AIMDIRECTION | CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("AxeSpread", 0,0, 80, CMF_AIMDIRECTION | CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("AxeSpread", 0,0, 120, CMF_AIMDIRECTION | CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("AxeSpread", 0,0, 160, CMF_AIMDIRECTION | CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("AxeSpread", 0,0, 200, CMF_AIMDIRECTION | CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("AxeSpread", 0,0, 240, CMF_AIMDIRECTION | CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("AxeSpread", 0,0, 280, CMF_AIMDIRECTION | CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("AxeSpread", 0,0, 320, CMF_AIMDIRECTION | CMF_TRACKOWNER)
		TNT1 A 0 A_CustomMissile("AxeSpread", 0,0, 360, CMF_AIMDIRECTION | CMF_TRACKOWNER)
		TNT1 A 0 a_setscale (1.5,1.5)
		SPAX DEF 2 Bright
		Stop
    Death:
        TNT1 A 0
		TNT1 A 0 a_playsound ("Axe/ShotMiss",0)
		TNT1 A 0 a_changeflag ("nogravity", 1)
		TNT1 A 0 A_stop
		TNT1 A 0 a_setscale (0.5,0.5)
		SPAX DEF 2 Bright
        Stop
    }
}

actor axetrail1
{
	alpha 0.80
	projectile
	+clientsideonly
	+dontblast
	+noclip
	+bright
	scale 1
	states
	{
	spawn:
		SPAX A 2 a_fadeout (0.09)
		loop
	}
}

actor axetrail2 : axetrail1
{
	states
	{
	spawn:
		SPAX B 2 a_fadeout (0.09)
		loop
	}
}

actor axetrail3 : axetrail1
{
	states
	{
	spawn:
		SPAX C 2 a_fadeout (0.09)
		loop
	}
}

actor AxeSpread
{
	+nointeraction
	+noclip
    projectile
	+THRUSPECIES
	+randomize
	species "player"
	speed 20
	radius 15
	height 15
    Damage 4
    +STRIFEDAMAGE
    States
    {
	spawn:
		TNT1 A 2
		TNT1 A 0 a_changeflag ("nointeraction", 0)
		TNT1 A 0 a_changeflag ("noclip", 0)
	flight:
		SPAX ABC 1 bright
		TNT1 A 0 a_changeflag ("nogravity", 0)
    falling:
		SPAX ABC 1 bright
		loop
	Xdeath:
        TNT1 A 0
		TNT1 A 0 a_nogravity
		TNT1 A 0 a_stop
		TNT1 A 0 a_playsound ("Axe/ShotHit",6,1,0,1.25)
		TNT1 A 1
		TNT1 A 0 A_Explode(5, 20, 0)
		SPAX DEF 3 Bright
        Stop		
	Death:
        TNT1 A 0
		TNT1 A 0 a_nogravity
		TNT1 A 0 a_stop
		TNT1 A 0 a_playsound ("Axe/ShotMiss",6,1,0,1.25)
		TNT1 A 1
		TNT1 A 0 A_Explode(5, 20, 0)
		SPAX DEF 3 Bright
        Stop
    }
}



Actor CAHealEffect
{ 
	Projectile
	+THRUACTORS
	States 
	{ 
	Spawn: 
		TNT1 A 0 
		TNT1 A 0 A_SpawnItemEx("CAHealBeam",frandom(-6.0,6.0),frandom(-7.0,8.0),frandom(9,16),0,0,random(6,8),0,SXF_NOCHECKPOSITION | SXF_SETMASTER) 
		TNT1 A 0 A_SpawnItemEx("CAHealBeam",frandom(-16.0,16.0),frandom(-15.0,16.0),frandom(15,23),0,0,random(6,8),0,SXF_NOCHECKPOSITION | SXF_SETMASTER) 
		TNT1 A 1 A_SpawnItemEx("CAHealBeam",frandom(-20.0,20.0),frandom(-21.0,21.0),frandom(20,36),0,0,random(6,8),0,SXF_NOCHECKPOSITION | SXF_SETMASTER) 
		stop
	Death:
		TNT1 A 1
		stop
	}
}

Actor CAHealBeam 
{
	projectile
	radius 3
	height 6
	speed .1
	renderstyle translucent
	Alpha 0.9
	XScale 0.2
	YScale 1
	+FLOORCLIP
	+bright
	+DONTSPLASH
	+NOTELEPORT
	+clientsideonly
	states
	{
	spawn:
		IBLT D random (10,18)
		IBLD D 3 a_scalevelocity (0.60)
		goto death
	death:
		TNT1 A 1
		stop
	}
}



actor Skill : ammo
{
	Inventory.PickupMessage "Axe mana (you shouldn't find this)"
	Inventory.Amount 1
	Inventory.MaxAmount 50
	Inventory.Icon "BAL1A0"
	Ammo.BackpackAmount 0
	Ammo.BackpackMaxAmount 0
	states
	{
	Spawn:
		BAL1 A -1
		stop
	}
}

actor skillchecker : inventory
{inventory.maxamount 1}
