/*

==WRATHCASTER==
Looking like something straight out of a metal album,
this rocket launcher fires missiles of pure compressed
anger. It doesn't feel much different compared to the old
rocket launcher you used to use to splatter demons, but 
damn, it sure looks cooler.

The rockets themselves are another story though. They reveal a 
surprise when they explode, releasing pissed off spirits that 
rush out and search for nearby demons to punch in the face.
*/


actor WrathCaster : Rend
{
	Weapon.SelectionOrder 500
	Weapon.AmmoType "SlayerGrit"
	Weapon.AmmoUse 10
	Inventory.RestrictedTo "DoomSlayer"
	-UNDROPPABLE
	-CHEATNOTWEAPON
	Tag "Wrath Caster"
	states
	{
	spawn:
		LAUN A 1
		loop
	select:
		TNT1 A 0
		TNT1 A 0 A_PlaySound ("DoomSlayer/WrathEquip")
		TNT1 A 1 A_GunFlash ("GadgetStarter",GFF_NOEXTCHANGE)
	draw:
		TNT1 AAAAAA 0 A_Raise
		TNT1 A 0 A_GiveInventory ("UsingSlayerGun",1)
		TNT1 A 0 A_JumpIfInventory ("BarrelToken",1, "BarrelGet")
		TNT1 A 0 A_JumpIfInventory ("GoldenBarrelToken",1, "GoldenBarrelGet")
		TNT1 A 0 A_GiveInventory ("UsingSlayerGun",1)
		TNT1 A 1 A_Raise
		loop
	ready:
		WCT1 ABCDEF 1 A_WeaponReady
		TNT1 A 0 A_JumpIfInventory ("SlayerGrit",15,"NormalEyeOpen")
		TNT1 A 0 A_PlaySound ("DoomSlayer/WrathEyesOpen",0,0.40)
		WCT4 B 2
		Goto EmptyReady
	NormalEyeOpen:
		TNT1 A 0
		WCT2 AAB 2 A_WeaponReady
		TNT1 A 0 A_PlaySound ("DoomSlayer/WrathOpen",0)
		TNT1 A 0 A_PlaySound ("DoomSlayer/WrathEyesOpen",0,0.60)
		WCT2 C 1 A_WeaponReady
		TNT1 A 0 A_PlaySound ("DoomSlayer/WrathEyesFlash",0,0.50)		
		WCT2 D 2 A_WeaponReady
		WCT2 E 1 A_WeaponReady
		WCT2 F 2 A_WeaponReady
		Goto RealReady
	RealReady:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory ("BarrelToken",1, "BarrelGet")
		TNT1 A 0 A_JumpIfInventory ("GoldenBarrelToken",1, "GoldenBarrelGet")
		TNT1 A 0 A_JumpIfInventory ("BFGReady", 1, "DrawBFG")
		WCT2 G 1 A_WeaponReady
		TNT1 A 0 A_JumpIfInventory ("BFGReady", 1, "DrawBFG")
		loop
	EmptyReady:
		TNT1 A 0 A_JumpIfInventory ("BarrelToken",1, "BarrelGet")
		TNT1 A 0 A_JumpIfInventory ("GoldenBarrelToken",1, "GoldenBarrelGet")
		TNT1 A 0 A_JumpIfInventory ("BFGReady", 1, "DrawBFG")
		WCT3 I 1 A_WeaponReady
		TNT1 A 0 A_JumpIfInventory ("BFGReady", 1, "DrawBFG")
		TNT1 A 0 A_JumpIfInventory ("SlayerGrit",15,"RocketLoad")
		Loop
		
	deselect:
		TNT1 A 0
		TNT1 A 0 A_JumpIfHealthLower (1, "DeadLower")
		TNT1 A 0 A_JumpIfInventory ("SlayerGrit",15,"NormalDeselect")
		WCT4 D 1
		TNT1 A 0 A_PlaySound ("DoomSlayer/WrathLower",0)
		TNT1 A 0 A_PlaySound ("DoomSlayer/holster",0,0.60)
		WCT4 EFGH 1
		Goto Holster
	NormalDeselect:
		TNT1 A 0
		TNT1 A 0 A_PlaySound ("DoomSlayer/WrathEyesClose",0)
		WCT4 ABCD 1
		TNT1 A 0 A_PlaySound ("DoomSlayer/holster",0,0.60)
		TNT1 A 0 A_PlaySound ("DoomSlayer/WrathLower",0)
		WCT4 EFGH 1
	holster:
		TNT1 A 0
		TNT1 AAAAAAAA 0 A_Lower
		TNT1 A 1 A_Lower
		loop

	fire:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory ("BarrelToken", 1, "BarrelToss")
		TNT1 A 0 A_JumpIfInventory ("GoldenBarrelToken",1, "GoldenBarrelToss")
		TNT1 A 0 A_JumpIfInventory ("BFGArmed", 1, "FireBFG")
		TNT1 A 0 A_JumpIfInventory ("SlayerGrit",10,"RealFire")
		WCT3 I 1 
		TNT1 A 0 A_PlaySound ("DoomSlayer/click",0)
		WCT3 I 1 offset (0,35)
		WCT3 I 1 offset (0,36)
		WCT3 I 1 offset (0,32)
		TNT1 A 0 A_JumpIfInventory ("BarrelToken",1,"BarrelGet")
		TNT1 A 0 A_JumpIfInventory ("BFGReady", 1, "DrawBFG")
		WCT3 I 3
		goto EmptyReady
	RealFire:
		TNT1 A 0 A_PlaySound ("DoomsSlayer/WrathPreFire",0,0.90)
		WCT3 A 2
		TNT1 A 0 A_Quake(1, 16, 0, 10) 
		TNT1 A 0 A_PlaySound ("DoomSlayer/wrathshot",CHAN_WEAPON,0.60)
		TNT1 A 0 A_FireCustomMissile ("WrathShot",0,1,0,5)
		TNT1 A 0 A_JumpIfInventory ("BarrelToken",1,"BarrelGet")
		TNT1 A 0 A_JumpIfInventory ("BFGReady", 1, "DrawBFG")
		WCT3 B 1 bright A_WeaponReady (WRF_NOPRIMARY|WRF_NOBOB)
		WCT3 C 2 bright A_WeaponReady (WRF_NOPRIMARY|WRF_NOBOB)
		WCT3 D 1 bright A_WeaponReady (WRF_NOPRIMARY|WRF_NOBOB)
		WCT3 D 2 bright A_WeaponReady (WRF_NOPRIMARY|WRF_NOBOB)
		TNT1 A 0 A_JumpIfInventory ("BarrelToken",1,"BarrelGet")
		TNT1 A 0 A_JumpIfInventory ("BFGReady", 1, "DrawBFG")
		WCT3 E 2 bright A_WeaponReady (WRF_NOPRIMARY|WRF_NOBOB)
		WCT3 F 2 A_WeaponReady (WRF_NOPRIMARY|WRF_NOBOB)
		WCT3 GHI 1 A_WeaponReady (WRF_NOPRIMARY|WRF_NOBOB)
		TNT1 A 0 A_JumpIfInventory ("SlayerGrit",15, "RocketLoad")
		goto EmptyReady
	RocketLoad:
		TNT1 A 0 A_PlaySound ("DoomSlayer/WrathOpen",0,0.80)
		WCT3 J 2
		WCT3 K 1
		WCT3 L 2
		Goto RealReady
	Altfire:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory ("BarrelToken", 1, "BarrelCancel")
		TNT1 A 0 A_JumpIfInventory ("GoldenBarrelToken",1, "GoldenBarrelCancel")
		TNT1 A 0 A_JumpIfInventory ("BFGArmed", 1, "HolsterBFG")
		WCT5 ABCD 1
		TNT1 A 0 A_PlaySound ("DoomSlayer/SwordUp")
		TNT1 A 0 A_Jump (256, "StartSlash")
		Goto AltfireEnd
	BarrelGet:
		TNT1 A 0
		TNT1 A 0 A_ClearReFire
		WCT5 ABCD 1
		TNT1 A 0 A_PlaySound ("DoomSlayer/holster",0)
		TNT1 A 0 A_TakeInventory ("UsingSlayerGun",99)
		TNT1 A 2
		TNT1 A 0 A_Jump (256, "BarrelStart")
		Goto ToolEnd

	AltfireEnd:
		TNT1 A 0 A_PlaySound ("DoomSlayer/SwordDown")
		TNT1 A 4 A_WeaponReady
		WCT6 ABCD 1
		goto RealReady
	ToolEnd:
		TNT1 A 1 A_ClearReFire
		TNT1 A 4 A_WeaponReady
		goto RealReady
	}
}


//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//========================
//======PROJECTILE========
//========================


actor wrathshot
{
	Radius 11
	Height 8
	Speed 30
	+Thruspecies
	Species "friendly"
	Damage (150)
	Projectile
	+RANDOMIZE
	SeeSound "weapons/rocklf"
	obituary "%o got blasted by %k"

	var int User_SkostPower;	
	States
	{
	spawn:
		TNT1 A 0
		WRML A 15 bright
		Goto Ignite
	Ignite:		
		WRML A 1 bright A_PlaySound ("DoomSlayer/wrathshot",0,1,0,0.70)
		TNT1 A 0 A_SetUserVar("User_SkostPower", User_SkostPower+1)
		TNT1 A 0 A_SetTranslucent (0.90, 1)
		WRML A 2 A_SetScale (0.80,0.80)
		WRML A 2 A_SetScale (1.50,1.50)
		WRML A 2 A_SetScale (2.80,2.80)
		WRML A 1 A_SetScale (2.50,2.50)
		TNT1 A 0 A_SpawnItemEx ("LavaLazerTrail",frandom(-2,2),frandom(-2,2),frandom(-2,2))
		TNT1 A 0 A_SpawnItemEx ("LavaLazerSmoke",frandom(-4,4),frandom(-4,4),frandom(-4,4))
		TNT1 A 0 A_SpawnItemEx ("Missilefire",Frandom(-5,5),Frandom(-5,5),Frandom(-5,5),Frandom(-50,50)/20.0,Frandom(-50,50)/20.0,Frandom(-50,50)/20.0,0,160)
		Goto SkostFlight
	SkostFlight:
		WRML A 1 bright
		TNT1 A 0 A_SpawnItemEx ("LavaLazerTrail",frandom(-2,2),frandom(-2,2),frandom(-2,2))
		TNT1 A 0 A_SpawnItemEx ("LavaLazerSmoke",frandom(-4,4),frandom(-4,4),frandom(-4,4))
		TNT1 A 0 A_SpawnItemEx ("Missilefire",Frandom(-5,5),Frandom(-5,5),Frandom(-5,5),Frandom(-50,50)/20.0,Frandom(-50,50)/20.0,Frandom(-50,50)/20.0,0,160)
		loop
	Xdeath:
		TNT1 A 0
		TNT1 A 1
		TNT1 AAA 0 A_GiveInventory ("SlayerToolCharger",1, AAPTR_TARGET)
		goto Death
	death:
		TNT1 A 0
		TNT1 A 0 A_Stop
		TNT1 A 0 A_PlaySound ("DoomSlayer/wrathnormal",0)
		TNT1 A 0 A_SetScale (1,1)
		TNT1 A 0 A_SetTranslucent (1, 0)
		WRML B 1 bright
		WRML B 4 bright A_Explode (128,128,1,1)
		TNT1 A 0 Radius_Quake (2,6,0,10,0)
		TNT1 A 0 A_JumpIf (User_SkostPower >= 1, 2)
		TNT1 A 0 A_Jump (256, 8)
		TNT1 A 0 A_PlaySound ("DoomSlayer/wrathexplode",0)
		TNT1 A 0 A_SpawnItemEx ("SkostEffect",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SpawnItemEx ("skost",0,0,10,10,0,0,0,SXF_TRANSFERPOINTERS|SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SpawnItemEx ("skost",0,0,10,10,0,0,90,SXF_TRANSFERPOINTERS|SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SpawnItemEx ("skost",0,0,10,10,0,0,180,SXF_TRANSFERPOINTERS|SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SpawnItemEx ("skost",0,0,10,10,0,0,270,SXF_TRANSFERPOINTERS|SXF_NOCHECKPOSITION)
		TNT1 A 0 A_SpawnItemEx ("skost",0,0,10,10,0,0,360,SXF_TRANSFERPOINTERS|SXF_NOCHECKPOSITION)
		TNT1 AAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerTrail",frandom(-21,21),frandom(-21,21),frandom(-21,21),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerEmber2",frandom(-16,16),frandom(-16,16),frandom(-16,16),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerSmoke2",frandom(-4,4),frandom(-4,4),frandom(-4,4),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerSmoke",frandom(-4,4),frandom(-4,4),frandom(-4,4),0,0,frandom(1,2))
		WRML C 3 bright
		WRML EFGH 2 bright
		stop
	}
}


//------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------

//========================
//=====SKULL GHOSTS=======
//========================

//Look at him! Do you see his dumb little ghost face?
//He is like a skull ghost!
//A skooooosstt. -Vulkan
actor skost
{
	Speed 20
	Radius 10
	Height 6
	Damage (10)
	Projectile
	+SEEKERMISSILE
	+FOILINVUL
	+SKYEXPLODE
	+NOEXPLODEFLOOR
	+HEXENBOUNCE
	+bright
	+thruspecies
	+DONTREFLECT
	+FORCEPAIN
	species "Friendly"
	RenderStyle Translucent
	Alpha 0.4
	obituary "%o was clobbered by %k's Skosts."
	reactiontime 20
	states
	{
	spawn:
		TNT1 A 0
		SKOS A 1 A_SpawnItemEx ("SkostTrail")
		SKOS A 1 
		SKOS A 1 A_SeekerMissile(90,90,SMF_LOOK|SMF_PRECISE,240)
		TNT1 A 0 A_Countdown
		loop
	death:
		SKOS BCD 4
		SKOS E 1 A_FadeOut (0.10)
		wait
	Xdeath:
		TNT1 A 0
		SKPN A 2 A_PlaySound ("skeleton/swing",0)
		SKPN B 1
		SKPN C 8 A_PlaySound ("skeleton/melee",0)
		SKPN C 6
		SKPN C 1 A_FadeOut (0.05)
		wait
	}
}


//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//========================
//========VISUALS=========
//========================

ACTOR Missilefire
{
	radius 3
	height 6
	speed 10
	scale 0.20
	projectile
	-nogravity
	+nointeraction
	+FLOORCLIP
	+DONTSPLASH
	+thruactors
	+NOTELEPORT
	+clientsideonly
	States
	{
	spawn:
		TNT1 A 0
		TNT1 A 2
		MFIR ABCDE 1 bright
		MFIR FGHI 1  Bright
		Stop
	}
}

actor SkostTrail
{
	+NOINTERACTION
	+clientsideonly
	+NOTELEPORT
	Radius 4
	Height 5
	Renderstyle add
	scale 1
	Alpha 0.85
	States
	{
	spawn:
		TNT1 A 0
		SKOS FGH 3
		SKOS I 1 A_FadeOut (0.30)
		wait
	death:
		TNT1 A 0
		TNT1 A 1
		stop
	}
}

actor SkostEffect
{
	+NOINTERACTION
	+clientsideonly
	+NOTELEPORT
	Radius 4
	Height 5
	Renderstyle add
	scale 2
	Alpha 0.85
	States
	{
	spawn:
		TNT1 A 0
		SKOS BC 2
		SKOS D 1
	FadingOutLoop:
		SKOS E 1 A_SetScale (scalex * frandom(1.10,1.15),scaley * frandom(1.10,1.15))
		TNT1 A 0 A_FadeOut (0.15)
		Loop
	death:
		TNT1 A 0
		TNT1 A 1
		stop
	}
}


ACTOR LavaLazerTrail
{
	+NOBLOCKMAP
	+NOGRAVITY
	+ALLOWPARTICLES
	+RANDOMIZE
	RenderStyle Add
	Alpha 0.5
	Scale 0.20
	+clientsideonly
	+NOTELEPORT
	Mass 5
	States
	{
	Spawn:
		LVLZ A 2 Bright A_FadeOut(0.1)
		LVLZ A 2 Bright A_FadeOut(0.1)
		LVLZ B 2 Bright A_FadeOut(0.1)
		LVLZ C 2 Bright A_FadeOut(0.1)
		LVLZ D 2 Bright A_FadeOut(0.1)
	fade:
		LVLZ D 2 Bright A_FadeOut(0.1)
		loop
	}
}

ACTOR LavaLazerEmber1
{
	+NOBLOCKMAP
	+NOGRAVITY
	+ALLOWPARTICLES
	+RANDOMIZE
	+NOTELEPORT
	RenderStyle Add
	Alpha 0.5
	Scale 0.1
	+clientsideonly
	Mass 5
	States
	{
	Spawn:
		LVLZ A 2 Bright A_FadeOut(0.04)
		LVLZ A 2 Bright A_FadeOut(0.1)
		LVLZ B 2 Bright A_FadeOut(0.1)
		LVLZ C 2 Bright A_FadeOut(0.1)
		LVLZ D 2 Bright A_FadeOut(0.1)
	fade:
		LVLZ D 2 Bright A_FadeOut(0.1)
		loop
	}
}

ACTOR LavaLazerEmber2
{
	+NOBLOCKMAP
	+ALLOWPARTICLES
	+RANDOMIZE
	+NOTELEPORT
	Gravity 0.2
	RenderStyle Add
	Alpha 0.5
	Scale 0.05
	Mass 5
	+clientsideonly
	States
	{
	Spawn:
		LVLZ A 35 Bright
		LVLZ AAAAAAAAAAAAAAAAA 2 Bright A_FadeOut(0.04)
		Stop
	}
}

actor LavaLazerEmber3 : LavaLazerEmber2
{
	states
	{
	spawn:
		LVLZ A 20 Bright
		LVLZ A 1 Bright A_FadeOut(0.10)
		wait
	}
}

actor LavaLazerSmoke
{
    Radius 1
    Height 1
	Scale 0.05
	Alpha 0.1
    Projectile
    +NOCLIP
	+NOTELEPORT
	+clientsideonly
    States
    {
	Spawn:
		TNT1 A 3
		SMOK ABCDEFGHIJKLMNOPQ 3 A_FadeIn(0.02)
		Stop
	}
}

actor LavaLazerSmoke2 : LavaLazerSmoke
{
    Radius 1
    Height 1
	Scale 0.10
	Alpha 0.6
    States
    {
	Spawn:
		TNT1 A 2
		SMOK ABCDEFGHIJKLMNOPQ 2 A_FadeOut(0.1)
		Stop
    }
}