// Actor code by TheUltimateDoomer, sprites by Eriance, modified by TheUltimateDoomer and me
ACTOR "Death Staff" : Weapon {  
	Weapon.SelectionOrder 666  
	Weapon.AmmoType "Souls" 
	Weapon.AmmoGive 15
	Weapon.AmmoUse 1
	Weapon.SlotNumber 8
	Weapon.KickBack 150
	Inventory.PickupMessage "Death Staff now serves your will... for now."
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 2.1
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.7
	States {
		Spawn:
			LICS Y -1
			Stop
		Ready: 
			LICS A 1 A_WeaponReady 
			Loop 
		Deselect: 
			TNT1 A 0 A_TakeInventory("P_PurpleFire", 1)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot8", 1)
			LICS A 1 A_Lower 
			TNT1 A 0 A_Lower
			Loop 
		Select: 
			TNT1 A 0 A_GiveInventory("P_PurpleFire", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot8", 1)
			TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
			TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_DEATHSTAFF)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 128)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_1, 200, 2 | (3 << 16))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_2, 8, 16 | (24 << 16))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_3, 1, 6 | (12 << 16))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_4, 8)
		SelectLoop:
			LICS A 1 A_Raise
			TNT1 A 0 A_Raise
			Loop 
		Fire: 
			LICS BCD 4 Bright
			TNT1 A 0 A_PlayWeaponSound ("weapons/deathstfire")
			TNT1 A 0 A_GunFlash
			TNT1 A 0 Radius_Quake(4,2,0,1,0)
			LICS E 4 Bright A_GiveInventory("DeathStaffShooter1", 1)
			LICS DCBA 4 Bright
			Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "Continue")
			TNT1 A 0 A_JumpIfInventory("Souls", 9, "Continue")
			LICS A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			Goto Ready
		Continue:
			TNT1 A 0 A_PlayWeaponSound ("weapons/deathstfire2")
			LICS FGHI 1
			LICX AB 1
			LICS JKLMNOPQRSTU 1 Bright
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_PlayWeaponSound ("weapons/deathstfire")
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("Souls", 9)
		NoTake:
			TNT1 A 0 Radius_Quake(12,4,0,1,0)
			LICS V 1 Bright A_GiveInventory("DeathStaffShooter2", 1)
			LICS E 3 Bright
			LICS DCBA 4 Bright
			Goto Ready
		Flash:
			TNT1 A 3 A_Light2
			TNT1 A 3 A_Light0
			Goto LightDone
	}
}

Actor DeathStaffShooter1 : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_JumpIfInventory("DnD_QuestReward_DreamingGodBonus", 1, "Full")
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile ("VolcanoFireball5", 0, 1, 0, 0)
		Stop
		Full:
			TNT1 A 0 A_FireCustomMissile ("VolcanoFireball5_FullDMG", 0, 1, 0, 0)
		Stop
	}
}


Actor DeathStaffShooter2 : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_JumpIfInventory("DnD_QuestReward_DreamingGodBonus", 1, "Full")
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile ("HellfireLinkFL", -18, 0, 0, 0)
			TNT1 A 0 A_FireCustomMissile ("HellfireLinkFR", 18, 0, 0, 0)
			TNT1 A 0 A_FireCustomMissile ("HellfireLinkCL", -18, 0, 0, 0)
			TNT1 A 0 A_FireCustomMissile ("HellfireLinkCR", 18, 0, 0, 0)
			TNT1 A 0 A_FireCustomMissile ("HellfireLinkC", 0, 0, 0, 0)
			TNT1 A 0 A_FireCustomMissile ("HellfireLinkF", 0, 0, 0, 0)
		Stop
		Full:
			TNT1 A 0 A_FireCustomMissile ("HellfireLinkFL_FullDMG", -18, 0, 0, 0)
			TNT1 A 0 A_FireCustomMissile ("HellfireLinkFR_FullDMG", 18, 0, 0, 0)
			TNT1 A 0 A_FireCustomMissile ("HellfireLinkCL_FullDMG", -18, 0, 0, 0)
			TNT1 A 0 A_FireCustomMissile ("HellfireLinkCR_FullDMG", 18, 0, 0, 0)
			TNT1 A 0 A_FireCustomMissile ("HellfireLinkC_FullDMG", 0, 0, 0, 0)
			TNT1 A 0 A_FireCustomMissile ("HellfireLinkF_FullDMG", 0, 0, 0, 0)
		Stop
	}
}

Actor VolcanoFireBall5Exp : BaseExplosionDamage {
	DamageType "SoulType"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_Explode (2 * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER), 128)
		Stop
	}
}

Actor VolcanoFireBall5Exp_FullDMG : VolcanoFireBall5Exp {
	DamageType "SoulTypeFull"
	+FORCERADIUSDMG
}

Actor VolcanoFireBall5Exp2 : BaseExplosionDamage {
	DamageType "SoulType"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Explode (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER), 128)
			TNT1 A 1 A_Explode (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER), 128, 0)
		Stop
	}
}

Actor VolcanoFireBall5Exp2_FullDMG : VolcanoFireBall5Exp2 {
	DamageType "SoulTypeFull"
	+FORCERADIUSDMG
}

ACTOR VolcanoFireball5 {
	Radius 16
	Height 32
	Speed 40
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER))
	DamageType "SoulType"
	PROJECTILE
	SeeSound "weapons/deathstfire"
	DeathSound "weapons/deathstexp1"
	Decal "Scorch"
	+MTHRUSPECIES
	+DONTBLAST
	+DONTSPLASH
	States {
		Spawn:
			VOL3 AB 4 BRIGHT A_SpawnItemEx("LichPuff",0,0,0,0,0,0,0,0,0)
			Loop
		Death:
			TNT1 A 0 A_SpawnItemEx ("DeathStaffFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 A 0 A_JumpIFInTargetInventory("Ability_ExplosionMastery", 1, "LessDmg")
			TNT1 A 0 A_SpawnItem("VolcanoFireBall5Exp")
		Continue:
			VOL3 C 0 A_CustomMissile ("VolcanoFireball6", 8, 0, 0, 2, 64)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball7", 8, 0, 72, 2, 56)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball8", 8, 0, 144, 2, 48)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball7", 8, 0, 216, 2, 56)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball6", 8, 0, 288, 2, 64)

			VOL3 C 0 A_CustomMissile ("VolcanoFireball8", 8, 0, 24, 2, 64)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball6", 8, 0, 96, 2, 56)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball7", 8, 0, 168, 2, 48)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball6", 8, 0, 240, 2, 56)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball8", 8, 0, 312, 2, 64)

			VOL3 C 0 A_CustomMissile ("VolcanoFireball7", 8, 0, 48, 2, 64)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball8", 8, 0, 120, 2, 56)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball6", 8, 0, 192, 2, 48)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball8", 8, 0, 264, 2, 56)
			VOL3 C 2 BRIGHT A_CustomMissile ("VolcanoFireball7", 8, 0, 336, 2, 64)
			VOL3 DEFGH 2 BRIGHT
			Stop
		LessDmg:
			TNT1 A 0 A_SpawnItem("VolcanoFireBall5Exp2")
		Goto Continue
	}
}

ACTOR VolcanoFireball5_FullDMG : VolcanoFireball5 {
	DamageType "SoulTypeFull"
	States {
		Death:
			TNT1 A 0 A_SpawnItemEx ("DeathStaffFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 A 0 A_JumpIFInTargetInventory("Ability_ExplosionMastery", 1, "LessDmg")
			TNT1 A 0 A_SpawnItem("VolcanoFireBall5Exp_FullDMG")
		Continue:
			VOL3 C 0 A_CustomMissile ("VolcanoFireball6_FullDMG", 8, 0, 0, 2, 64)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball7_FullDMG", 8, 0, 72, 2, 56)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball8_FullDMG", 8, 0, 144, 2, 48)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball7_FullDMG", 8, 0, 216, 2, 56)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball6_FullDMG", 8, 0, 288, 2, 64)

			VOL3 C 0 A_CustomMissile ("VolcanoFireball8_FullDMG", 8, 0, 24, 2, 64)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball6_FullDMG", 8, 0, 96, 2, 56)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball7_FullDMG", 8, 0, 168, 2, 48)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball6_FullDMG", 8, 0, 240, 2, 56)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball8_FullDMG", 8, 0, 312, 2, 64)

			VOL3 C 0 A_CustomMissile ("VolcanoFireball7_FullDMG", 8, 0, 48, 2, 64)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball8_FullDMG", 8, 0, 120, 2, 56)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball6_FullDMG", 8, 0, 192, 2, 48)
			VOL3 C 0 A_CustomMissile ("VolcanoFireball8_FullDMG", 8, 0, 264, 2, 56)
			VOL3 C 2 BRIGHT A_CustomMissile ("VolcanoFireball7_FullDMG", 8, 0, 336, 2, 64)
			VOL3 DEFGH 2 BRIGHT
			Stop
		LessDmg:
			TNT1 A 0 A_SpawnItem("VolcanoFireBall5Exp2_FullDMG")
		Goto Continue
	}
}

ACTOR VolcanoFireball6
{
		Radius 8
		Height 16
		Speed 5
		Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_3, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER))
		DamageType "SoulType"
		PROJECTILE
		+RIPPER
		+MTHRUSPECIES
		-BLOODSPLATTER
		+BLOODLESSIMPACT
		-NOGRAVITY
		+DONTSPLASH
		+DONTBLAST
		Gravity 0.2
		DeathSound "weapons/deathstexp2"
		States
		{
		Spawn:
			VOL4 ABABABABABABABABABABABAB 4 BRIGHT
			TNT1 A 0 A_Die
			Goto Death
		Death:
			TNT1 A 0 A_CustomMissile("VolcanoFireball6Fire",0,0,180,2,0)
			VOL4 EDCDEFG 2 BRIGHT
			Stop
		}
}

Actor VolcanoFireball6_FullDMG : VolcanoFireball6 {
	DamageType "SoulTypeFull"
	States {
		Spawn:
			VOL4 ABABABABABABABABABABABAB 4 BRIGHT
			TNT1 A 0 A_Die
		Goto Death
		Death:
			TNT1 A 0 A_CustomMissile("VolcanoFireball6Fire_FullDMG",0,0,180,2,0)
			VOL4 EDCDEFG 2 BRIGHT
		Stop
	}
}

Actor VolcanoFireball6Exp : BaseExplosionDamage {
	DamageType "SoulType"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_4, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER), 64, 0)
		Stop
	}
}

Actor VolcanoFireball6Exp_FullDMG : VolcanoFireball6Exp {
	DamageType "SoulTypeFull"
	+FORCERADIUSDMG
}

Actor VolcanoFireball6NOFIRE_Fall : VolcanoFireball6
{
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_4, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER))
	Species "Player"
	DamageType "SoulType"
	+THRUSPECIES
	+NOGRAVITY
	+NODAMAGETHRUST
		States
		{
		Spawn:
			VOL4 AABB 2 BRIGHT ThrustThingZ(0, 8, 1, 1)
			Loop	
		Death:
			TNT1 A 0 A_SpawnItem("VolcanoFireball6Exp")
			VOL4 EDCDEFG 2 BRIGHT
			Stop
		}
}

Actor VolcanoFireball6NOFIRE_Fall_FullDMG : VolcanoFireball6NOFIRE_Fall
{
	DamageType "SoulTypeFull"
	+FORCERADIUSDMG
		States
		{
		Spawn:
			VOL4 AABB 2 BRIGHT ThrustThingZ(0, 8, 1, 1)
			Loop	
		Death:
			TNT1 A 0 A_SpawnItem("VolcanoFireball6Exp_FullDMG")
			VOL4 EDCDEFG 2 BRIGHT
			Stop
		}
}

Actor VolcanoFireball6NOFIRE_Rise : VolcanoFireball6NOFIRE_Fall
{
		States
		{
		Spawn:
			VOL4 AABB 2 BRIGHT ThrustThingZ(0, 8, 0, 1)
			Loop
		}
}

Actor VolcanoFireball6NOFIRE_Rise_FullDMG : VolcanoFireball6NOFIRE_Fall_FullDMG
{
		States
		{
		Spawn:
			VOL4 AABB 2 BRIGHT ThrustThingZ(0, 8, 0, 1)
			Loop
		}
}

ACTOR VolcanoFireball7 : VolcanoFireball6 
{
		Speed 4
}

Actor VolcanoFireball7_FullDMG : VolcanoFireball7 {
	DamageType "SoulTypeFull"
}

ACTOR VolcanoFireball8 : VolcanoFireball6
{
		Speed 3
}

Actor VolcanoFireball8_FullDMG : VolcanoFireball8 {
	DamageType "SoulTypeFull"
}

ACTOR VolcanoFireball6Fire
{
		Radius 15
		Height 38
		Speed 1
		Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_4, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER) / 2)
		DamageType "SoulType"
		Scale 1.0
		BounceFactor 0.0
		PROJECTILE
		-NOGRAVITY
		+HEXENBOUNCE
		+RIPPER
		+BLOODLESSIMPACT
		+MTHRUSPECIES
		+DONTBLAST
		+DONTSPLASH
		States
		{
		Spawn:
			FFLG A 0 A_PlaySound ("weapons/burning")
			FFLG A 0 Thing_Stop (0)
			FFLG ABCD 4 BRIGHT A_PlaySound ("weapons/burning")
			FFLG EFGHIJKLMNOPEFGHIJKLMNOPEFGHIJKLMNOPEFGHIJKLMNOPEFGHIJKLMNOPEFGHIJKLMNOPEFGHIJKLMNOP 4 BRIGHT A_PlaySound ("ironlich/attack1f")
		Death:
			FFLG EDCBA 4 BRIGHT	A_PlaySound ("weapons/burning")
			Stop
		}
}

Actor VolcanoFireball6Fire_FullDMG : VolcanoFireball6Fire {
	DamageType "SoulTypeFull"
}

ACTOR LichPuff : PhoenixPuff
{
		Scale 2.0
}

Actor HellFireLinkFExp : BaseExplosionDamage {
	DamageType "SoulType"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_4, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER), 96)
		Stop
	}
}

Actor HellFireLinkFExp_FullDMG : HellFireLinkFExp {
	DamageType "SoulTypeFull"
	+FORCERADIUSDMG
}

Actor HellFireLinkFExp2 : BaseExplosionDamage {
	DamageType "SoulType"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER) / 2, 96, 0)
			TNT1 A 1 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER) / 2, 96)
		Stop
	}
}

Actor HellFireLinkFExp2_FullDMG : HellFireLinkFExp2 {
	DamageType "SoulTypeFull"
	+FORCERADIUSDMG
}

Actor HellFireLinkF
{
  PROJECTILE
  Radius 6
  Height 12
  Speed 24
  Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_2, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER))
  DamageType "SoulType"
  Alpha 0.85
  Renderstyle add
  Species "Player"
  Reactiontime 1
  +NODAMAGETHRUST
  +FOILINVUL
  +THRUSPECIES
  +FLOORHUGGER
  +DONTBLAST
  +DONTSPLASH
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 AAAAAAAAAA 2 Bright A_SpawnItemEx("HellFireTrailF", random(-4,4), random(-4,4))
	TNT1 A 0 A_CountDown
  Loop
  Death:
    TNT1 A 0 A_Stop
	TNT1 A 0 A_PlaySound("weapons/deathstexp2")
	TNT1 A 0 A_SpawnItemEx ("DeathStaffFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
	TNT1 A 0 A_JumpIFInTargetInventory("Ability_ExplosionMastery", 1, "LessDmg")
    FX13 I 4 Bright A_SpawnItem("HellFireLinkFExp")
    FX13 JJJJKKKKLLLLMMMM 1 Bright A_SpawnItemEx("VolcanoFireball6NOFIRE_Rise", random(-2,2), random(-2,2), 0, random(-4,4), random(-4,4))
    Stop
  LessDmg:
    FX13 I 4 Bright A_SpawnItem("HellFireLinkFExp2")
    FX13 JJJJKKKKLLLLMMMM 1 Bright A_SpawnItemEx("VolcanoFireball6NOFIRE_Rise", random(-2,2), random(-2,2), 0, random(-4,4), random(-4,4))
    Stop
  }
}

Actor HellFireLinkF_FullDMG : HellFireLinkF {
	DamageType "SoulTypeFull"
	States {
  Death:
    TNT1 A 0 A_Stop
	TNT1 A 0 A_PlaySound("weapons/deathstexp2")
	TNT1 A 0 A_SpawnItemEx ("DeathStaffFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
	TNT1 A 0 A_JumpIFInTargetInventory("Ability_ExplosionMastery", 1, "LessDmg")
    FX13 I 4 Bright A_SpawnItem("HellFireLinkFExp_FullDMG")
    FX13 JJJJKKKKLLLLMMMM 1 Bright A_SpawnItemEx("VolcanoFireball6NOFIRE_Rise_FullDMG", random(-2,2), random(-2,2), 0, random(-4,4), random(-4,4))
    Stop
  LessDmg:
    FX13 I 4 Bright A_SpawnItem("HellFireLinkFExp2_FullDMG")
    FX13 JJJJKKKKLLLLMMMM 1 Bright A_SpawnItemEx("VolcanoFireball6NOFIRE_Rise_FullDMG", random(-2,2), random(-2,2), 0, random(-4,4), random(-4,4))
    Stop
	}
}

Actor HellFireLinkC : HellFireLinkF
{
	-FLOORHUGGER
	+CEILINGHUGGER
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 AAAAAAAAAA 2 Bright A_SpawnItemEx("HellFireTrailC", random(-4,4), random(-4,4))
	TNT1 A 0 A_CountDown
  Loop
  Death:
    TNT1 A 0 A_Stop
	TNT1 A 0 A_PlaySound("weapons/deathstexp2")
	TNT1 A 0 A_SpawnItemEx ("DeathStaffFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
	TNT1 A 0 A_JumpIFInTargetInventory("Ability_ExplosionMastery", 1, "LessDmg")
    FX1U I 4 Bright A_SpawnItem("HellFireLinkFExp")
    FX1U JJJJKKKKLLLLMMMM 1 Bright A_SpawnItemEx("VolcanoFireball6NOFIRE_Fall", random(-2,2), random(-2,2), -16, random(-4,4), random(-4,4))
    Stop
  LessDmg:
    FX13 I 4 Bright A_SpawnItem("HellFireLinkFExp2")
    FX13 JJJJKKKKLLLLMMMM 1 Bright A_SpawnItemEx("VolcanoFireball6NOFIRE_Rise", random(-2,2), random(-2,2), 0, random(-4,4), random(-4,4))
    Stop
  }	
}

Actor HellFireLinkC_FullDMG : HellFireLinkC
{
  DamageType "SoulTypeFull"
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 AAAAAAAAAA 2 Bright A_SpawnItemEx("HellFireTrailC", random(-4,4), random(-4,4))
	TNT1 A 0 A_CountDown
  Loop
  Death:
    TNT1 A 0 A_Stop
	TNT1 A 0 A_PlaySound("weapons/deathstexp2")
	TNT1 A 0 A_SpawnItemEx ("DeathStaffFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
	TNT1 A 0 A_JumpIFInTargetInventory("Ability_ExplosionMastery", 1, "LessDmg")
    FX1U I 4 Bright A_SpawnItem("HellFireLinkFExp_FullDMG")
    FX1U JJJJKKKKLLLLMMMM 1 Bright A_SpawnItemEx("VolcanoFireball6NOFIRE_Fall_FullDMG", random(-2,2), random(-2,2), -16, random(-4,4), random(-4,4))
    Stop
  LessDmg:
    FX13 I 4 Bright A_SpawnItem("HellFireLinkFExp2_FullDMG")
    FX13 JJJJKKKKLLLLMMMM 1 Bright A_SpawnItemEx("VolcanoFireball6NOFIRE_Rise_FullDMG", random(-2,2), random(-2,2), 0, random(-4,4), random(-4,4))
    Stop
  }	
}

Actor HellFireLinkFL : HellFireLinkF
{
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 AAAAAA 2 Bright A_SpawnItemEx("HellFireTrailF", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 A_CountDown
  Loop
  }
}

Actor HellFireLinkFL_FullDMG : HellFireLinkF_FullDMG {
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 AAAAAA 2 Bright A_SpawnItemEx("HellFireTrailF", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 A_CountDown
  Loop
  }
}

Actor HellFireLinkFR : HellFireLinkFL
{
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 AAAAAA 2 Bright A_SpawnItemEx("HellFireTrailF", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 A_CountDown
  Loop
  }
}

Actor HellFireLinkFR_FullDMG : HellFireLinkFL_FullDMG
{
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 AAAAAA 2 Bright A_SpawnItemEx("HellFireTrailF", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailF_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 A_CountDown
  Loop
  }
}

Actor HellFireLinkCL : HellFireLinkC
{
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 AAAAAA 2 Bright A_SpawnItemEx("HellFireTrailC", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 A_CountDown
  Loop
  }
}

Actor HellFireLinkCL_FullDMG : HellFireLinkC_FullDMG
{
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 AAAAAA 2 Bright A_SpawnItemEx("HellFireTrailC", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360+64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 A_CountDown
  Loop
  }
}

Actor HellFireLinkCR : HellFireLinkCL
{
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 AAAAAA 2 Bright A_SpawnItemEx("HellFireTrailC", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 A_CountDown
  Loop	
  }
}

Actor HellFireLinkCR_FullDMG : HellFireLinkCL_FullDMG
{
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 AAAAAA 2 Bright A_SpawnItemEx("HellFireTrailC", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 ThrustThing(angle*256/360-64, 8, 0, 0)
	TNT1 A 2 Bright A_SpawnItemEx("HellFireTrailC_FullDMG", random(-4,4), random(-4,4))
	TNT1 A 0 A_CountDown
  Loop	
  }
}

Actor HellFireTrailFExp : BaseExplosionDamage {
	DamageType "SoulType"
	States {
		Spawn:
			TNT1 A 0
			TNT1 AA 4 A_Explode(random(6, 8) * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_4, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER), 72, 0)
			TNT1 AAAA 5 A_Explode(random(6, 8) * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_4, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER), 72, 0)
			TNT1 AAA 4 A_Explode(random(6, 8) * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_4, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER), 72, 0)
		Stop
	}
}

Actor HellFireTrailFExp_FullDMG : HellFireTrailFExp {
	DamageType "SoulTypeFull"
	+FORCERADIUSDMG
}

ACTOR HellFireTrailF : HellFireLinkF
{
  Radius 8
  Height 16
  Speed 0
  States
  {
  Spawn:
	TNT1 A 0 NoDelay A_SpawnItem("HellFireTrailFExp")
    FX13 DC 4 Bright 
    FX13 BCDE 5 Bright
    FX13 FGH 4 Bright
    Stop
  }
}

Actor HellFireTrailF_FullDMG : HellFireTrailF {
  States
  {
  Spawn:
	TNT1 A 0 NoDelay A_SpawnItem("HellFireTrailFExp_FullDMG")
    FX13 DC 4 Bright 
    FX13 BCDE 5 Bright
    FX13 FGH 4 Bright
    Stop
  }
}

Actor HellFireTrailC : HellFireTrailF
{
	-FLOORHUGGER
	+CEILINGHUGGER
  States
  {
  Spawn:
	TNT1 A 0 NoDelay A_SpawnItem("HellFireTrailFExp")
    FX1U DC 4 Bright
    FX1U BCDE 5 Bright
    FX1U FGH 4 Bright
    Stop
  }	
}

Actor HellFireTrailC_FullDMG : HellFireTrailC
{
  States
  {
  Spawn:
	TNT1 A 0 NoDelay A_SpawnItem("HellFireTrailFExp_FullDMG")
    FX1U DC 4 Bright
    FX1U BCDE 5 Bright
    FX1U FGH 4 Bright
    Stop
  }	
}

ACTOR Razorfang : Weapon
{	
   Inventory.PickupSound "misc/haha"
   Inventory.PickupMessage "You got the Razorfang."
   Obituary "%o was torn apart by %k's Razorfang."
   Weapon.AmmoType "Souls"
   Weapon.AmmoGive 15
   Weapon.SelectionOrder 40
   Weapon.AmmoUse 2
   Weapon.SlotNumber 8
   +INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 2.1
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.7
   States
   {
   Spawn:
      WRAZ A -1
      Loop
   Ready:
      RAZG A 0 A_JumpIfInventory("RazorCount",1,7)
      RAZG BCDEFG 3 A_weaponReady
      Goto Ready
      RAZG HIJKJI 3 A_WeaponReady
      Goto Ready+8
   Deselect:
      TNT1 A 0 A_TakeInventory("P_PlasmaFire", 1)
	  TNT1 A 0 A_TakeInventory("H_WeaponSlot8", 1)
      RAZG A 1 A_Lower
	  TNT1 A 0 A_Lower
      Loop
   Select:
      TNT1 A 0 A_GiveInventory("P_PlasmaFire", 1)
	  TNT1 A 0 A_GiveInventory("H_WeaponSlot8", 1)
	  TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
	  TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_RAZORFANG)
	  TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 12, 4 | (6 << 16))
      TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_1, 2, 5 | (9 << 16))
	  TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_2, 8)
	SelectLoop:
      RAZG A 1 A_Raise
	  TNT1 A 0 A_Raise
      Loop
   Fire:
      RAZG E 0 A_JumpIfInventory("RazorCount",1,"Secondary")
      RAZG L 1 A_Playsound("weapons/boltfi")
	  RAZX AB 2
	  TNT1 A 0 A_GunFlash
	  TNT1 A 0 A_GiveInventory("RazorShooter1", 1)
      RAZG M 1 Bright A_SetPitch(pitch - 6.0)
	  RAZG M 1 Bright A_SetPitch(pitch + 0.5)
	  RAZX CCDDEEFFGGH 1 Bright A_SetPitch(pitch + 0.5)
	  RAZX H 1 Bright
	  RAZX IJ 2 Bright
	  RAZG A 4
      Goto Ready
   Secondary:
      TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "ContinueNoTake")
      RAZG A 0 A_JumpIfInventory("Souls", 4, "Continue")
      Goto AltFire
   Continue:
      TNT1 A 0 A_TakeInventory("Souls",4)
   ContinueNoTake:
      RAZG N 1 A_Playsound("weapons/boltf2")
	  RAZX KL 2
	  TNT1 A 0 A_GunFlash
	  TNT1 A 0 Radius_Quake(4,2,0,1,0)
      RAZG O 3 Bright A_GiveInventory("RazorShooter2", 1)
	  RAZX MN 2 Bright
      RAZG P 2 Bright
	  RAZX QRS 2 Bright 
	  RAZG JIH 2 Bright
      Goto Ready
   AltFire:
      RAZG A 0 A_JumpIfInventory("RazorCount",1,7)
      RAZG A 0 A_GiveInventory("RazorCount",1)
      RAZG A 2 A_PlaySound("door/flsd1a")
      RAZG HIJK 4
      Goto Ready
      RAZG A 0 A_TakeInventory("RazorCount",1)
      RAZG A 2 A_PlaySound("door/flsd1a")
      RAZG KJIH 4
      Goto Ready
	  Flash:
		TNT1 A 4 A_Light2
		TNT1 A 4 A_Light0
	  Goto LightDone
   }
}

ACTOR RazorShot1
{
   Radius 4
   Height 8
   Speed 50
   Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER))
   DamageType "SoulType"
   PROJECTILE
   +THRUGHOST
   +RIPPER
   +FORCEXYBILLBOARD
   +MTHRUSPECIES
   +DONTBLAST
   DeathSound "weapons/glahit"
   States
   {
   Spawn:
      RFX1 PPPPPPPP 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
      TNT1 AAAAAAAAA 0 A_SpawnItemEx("RazorShot2",0,0,0,25,random(-6,6),(momz*0.5)+random(-3,3),0,0,0)
      stop
   Death:
      RFX1 L 0 Bright A_SetTranslucent(0.67,1)
      RFX1 LMNO 4 Bright
      stop
   }
}

ACTOR RazorShot1_FullDMG : RazorShot1 {
   DamageType "SoulTypeFull"
   +THRUACTORS
   DeathSound "weapons/glahit"
   States {
	   Spawn:
		  RFX1 P 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
		  TNT1 A 0 A_CustomMissile("RazorShot1_Damager")
		  RFX1 P 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
		  TNT1 A 0 A_CustomMissile("RazorShot1_Damager")
		  RFX1 P 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
		  TNT1 A 0 A_CustomMissile("RazorShot1_Damager")
		  RFX1 P 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
		  TNT1 A 0 A_CustomMissile("RazorShot1_Damager")
		  RFX1 P 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
		  TNT1 A 0 A_CustomMissile("RazorShot1_Damager")
		  RFX1 P 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
		  TNT1 A 0 A_CustomMissile("RazorShot1_Damager")
		  RFX1 P 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
		  TNT1 A 0 A_CustomMissile("RazorShot1_Damager")
		  RFX1 P 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
		  TNT1 A 0 A_CustomMissile("RazorShot1_Damager")
		  TNT1 AAAAAAAAA 0 A_SpawnItemEx("RazorShot2",0,0,0,25,random(-6,6),(momz*0.5)+random(-3,3),0,0,0)
		  stop
	   Death:
		  RFX1 L 0 Bright A_SetTranslucent(0.67,1)
		  RFX1 LMNO 4 Bright
		  stop
   }
}

Actor RazorShot1_Damager : DnD_FakeDamager {
	Radius 4
	Height 8
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER))
	DamageType "SoulType"
	Speed 32
}

ACTOR RazorShot2
{
   Radius 2
   Height 4
   Speed 35
   Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER))
   DamageType "SoulType"
   PROJECTILE
   +THRUGHOST
   +FORCEXYBILLBOARD
   +MTHRUSPECIES
   +DONTBLAST
   DeathSound "weapons/thornx"
   States
   {
   Spawn:
      RFX1 A 1 Bright A_SpawnItemEx("RazorTrail",0,0,0,0,0,0,0,128,0)
      loop
   Death:
      RFX1 G 0 Bright A_SetTranslucent(0.67,1)
      RFX1 GHIJCDEF 3 Bright
      stop
   }
}

Actor RazorShot2_FullDMG : RazorShot2 {
	DamageType "SoulTypeFull"
	+THRUACTORS
	States {
		Spawn:
			RFX1 A 1 Bright A_SpawnItemEx("RazorTrail",0,0,0,0,0,0,0,128,0)
			TNT1 A 0 A_CustomMissile("RazorShot2_Damager", 0, 0, 0, CMF_TRACKOWNER)
		loop
	}
}

Actor RazorShot2_Damager : DnD_FakeDamager {
	Radius 2
	Height 4
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER))
	DamageType "SoulTypeFull"
	Speed 32
}

ACTOR Razortrail
{   
   Radius 1
   Height 1
   RENDERSTYLE ADD
   ALPHA 0.50
   +NOGRAVITY
   +NOBLOCKMAP
   +FORCEXYBILLBOARD
   States
   {
   Spawn:
      RFX1 BCDEF 3 Bright
      Stop 
   }
}

Actor RazorSkullExp : BaseExplosionDamage {
	DamageType "SoulType"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_2, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER), 40,0)
		Stop
	}
}

Actor RazorSkullExp_FullDMG : BaseExplosionDamage {
	DamageType "SoulTypeFull"
	+FORCERADIUSDMG
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_2, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER), 40,0)
		Stop
	}
}

ACTOR RazorSkull
{
   Radius 8
   Height 11
   Speed 25
   Damage (random(1, 2) * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_2, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER))
   DamageType "SoulType"
   PROJECTILE
   ReactionTime 210
   BounceFactor 1
   +SEEKERMISSILE
   +SCREENSEEKER
   +RIPPER
   +THRUGHOST
   +DOOMBOUNCE
   +FORCEXYBILLBOARD
   +FORCERADIUSDMG
   +MTHRUSPECIES
   +DONTBLAST
   DeathSound "monster/dishht1"
   States
   {
   Spawn:
      RFX1 KKKKKKKKK 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
   SpawnLoop:
      RFX1 K 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
      TNT1 A 0 A_SeekerMissile(24,32)
      TNT1 A 0 A_SpawnItem("RazorSkullExp")
      TNT1 A 0 A_Countdown
      Loop
   Death:
      TNT1 A 0 A_SetTranslucent(0.67,1)
      RFX1 LMNO 4 Bright
      stop
   }
}

ACTOR RazorSkull_FullDMG : RazorSkull {
   DamageType "SoulTypeFull"
   +THRUACTORS
   States
   {
   Spawn:
      RFX1 K 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
	  TNT1 A 0 A_CustomMissile("RazorShot3_Damager", 0, 0, 0, CMF_TRACKOWNER)
	  RFX1 K 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
	  TNT1 A 0 A_CustomMissile("RazorShot3_Damager", 0, 0, 0, CMF_TRACKOWNER)
	  RFX1 K 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
	  TNT1 A 0 A_CustomMissile("RazorShot3_Damager", 0, 0, 0, CMF_TRACKOWNER)
	  RFX1 K 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
	  TNT1 A 0 A_CustomMissile("RazorShot3_Damager", 0, 0, 0, CMF_TRACKOWNER)
	  RFX1 K 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
	  TNT1 A 0 A_CustomMissile("RazorShot3_Damager", 0, 0, 0, CMF_TRACKOWNER)
	  RFX1 K 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
	  TNT1 A 0 A_CustomMissile("RazorShot3_Damager", 0, 0, 0, CMF_TRACKOWNER)
	  RFX1 K 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
	  TNT1 A 0 A_CustomMissile("RazorShot3_Damager", 0, 0, 0, CMF_TRACKOWNER)
	  RFX1 K 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
	  TNT1 A 0 A_CustomMissile("RazorShot3_Damager", 0, 0, 0, CMF_TRACKOWNER)
	  RFX1 K 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
	  TNT1 A 0 A_CustomMissile("RazorShot3_Damager", 0, 0, 0, CMF_TRACKOWNER)
   SpawnLoop:
      RFX1 K 1 Bright A_SpawnItemEx("BoneTrail",0,0,0,0,0,0,0,128,0)
	  TNT1 A 0 A_CustomMissile("RazorShot3_Damager", 0, 0, 0, CMF_TRACKOWNER)
      RFX1 K 0 A_SeekerMissile(24, 32)
      RFX1 K 0 A_SpawnItem("RazorSkullExp_FullDMG")
      RFX1 K 0 A_Countdown
      Loop
   Death:
      RFX1 L 0 Bright A_SetTranslucent(0.67,1)
      RFX1 LMNO 4 Bright
      stop
   }
}

Actor RazorShot3_Damager : DnD_FakeDamager {
	Radius 2
	Height 4
	Damage (random(1, 2) * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_2, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER))
	DamageType "SoulTypeFull"
	Speed 28
}

ACTOR Bonetrail
{   
   Radius 1
   Height 1
   Damage 0
   Scale 0.5
   +NOGRAVITY
   +NOBLOCKMAP
   +FORCEXYBILLBOARD
   RENDERSTYLE ADD
   ALPHA 0.50
   States
   {
   Spawn:
      BONE BCDEFGH 2 Bright
      Stop 
   }
}

ACTOR RazorCount : Ammo {
     Inventory.Amount 1
     Inventory.MaxAmount 1
     Ammo.BackpackAmount 0
     Ammo.BackpackMaxAmount 1
}

Actor RazorShooter1 : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_JumpIfInventory("DnD_QuestReward_DreamingGodBonus", 1, "Full")
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile("RazorShot1",0,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1",-3,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1",3,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1",-6,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1",6,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1",-9,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1",9,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1",-12,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1",12,1,0,0,0)
		Stop
		Full:
			TNT1 A 0 A_FireCustomMissile("RazorShot1_FullDMG",0,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1_FullDMG",-3,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1_FullDMG",3,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1_FullDMG",-6,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1_FullDMG",6,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1_FullDMG",-9,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1_FullDMG",9,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1_FullDMG",-12,0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorShot1_FullDMG",12,1,0,0,0)
		Stop
	}
}

Actor RazorShooter2 : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_JumpIfInventory("DnD_QuestReward_DreamingGodBonus", 1, "Full")
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile("RazorSkull",0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorSkull",-7,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorSkull",7,0,0,0)
		Stop
		Full:
			TNT1 A 0 A_FireCustomMissile("RazorSkull_FullDMG",0,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorSkull_FullDMG",-7,0,0,0)
			TNT1 A 0 A_FireCustomMissile("RazorSkull_FullDMG",7,0,0,0)
		Stop
	}
}

Actor "Sun Staff" : Weapon
{
  Inventory.PickupSound "weapons/pickup"
  Inventory.PickupMessage "Picked up the Sun Staff."
  Obituary "%o was seared by %k."
  Weapon.AmmoType "Souls"
  Weapon.AmmoGive 15
  Weapon.AmmoUse 1
  Weapon.SlotNumber 8
  +INVENTORY.UNDROPPABLE
  Weapon.BobStyle InverseSmooth
  Weapon.BobSpeed 2.1
  Weapon.BobRangeY 0.4
  Weapon.BobRangeX 0.7
  States
  {
  Spawn:
    LTBR A -1 Bright
    Stop
  Select:
    TNT1 A 0 A_GiveInventory("H_WeaponSlot8", 1)
	TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
	TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_SUNSTAFF)
	TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 20)
	TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_1, 48)
	TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_2, 36)
SelectLoop:
    LTBR M 1 A_Raise
	TNT1 A 0 A_Raise
    Loop
  Deselect:
    TNT1 A 0 A_TakeInventory("H_WeaponSlot8", 1)
    TNT1 A 0 A_StopSoundEx("SoundSlot7")
    TNT1 A 0 A_JumpIfInventory("Souls", 1, 1)
    Goto Deselect2
    LTBR ON 4 Bright
    LTBR M 4
    DeselectLoop:
    LTBR M 1 A_Lower
	TNT1 A 0 A_Lower
    Loop
  Ready:
	TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "FullReady")
    LTBR M 4 A_JumpIfInventory("Souls", 1, "FullReady")
    Goto Ready2
  FullReady:
    TNT1 A 0 A_PlaySoundEx("Weapons/SunstaffRecharge", "SoundSlot6", 0)
    LTBR NO 4 Bright
  ReadyCheckAnim:
    TNT1 A 0 A_JumpIfInventory("Souls", 1, "Part2")
    Goto Ready2
  Part2:
    TNT1 A 0 A_StopSoundEx("SoundSlot7")
    LTBR BBBBCCCCDDDDEEEE 1 Bright A_WeaponReady
    Goto ReadyCheckAnim
  Fire:
    TNT1 A 0 A_PlayWeaponSound("Weapons/SunStaffFire") 
    LTBR BCD 1 Bright
	LTBX AB 1 Bright
    TNT1 A 0 A_Refire
  FinishFire:
    LTBR EDCB 2 Bright
    LTBR I 0 A_JumpIfInventory("Souls", 1, 1)
    Goto NoAmmo
    LTBR I 0
    Goto ReadyCheckAnim
  Hold:
	TNT1 A 0 A_JumpIfInventory("BeamCounter", 3, "TakeAmmo")
	TNT1 A 0 A_PlaySound("Weapons/SunStaffLoop", 7)
	TNT1 A 0 A_GunFlash
	TNT1 A 0 A_FireCustomMissile("Illuminator", 0, 0, 0, 0)
    LTBR F 2 Bright A_GiveInventory("SunShooter", 1)
	TNT1 A 0 A_GunFlash
	TNT1 A 0 A_FireCustomMissile("Illuminator", 0, 0, 0, 0)
	LTBR G 2 Bright A_GiveInventory("SunShooter", 1)
	TNT1 A 0 A_GunFlash
	TNT1 A 0 A_FireCustomMissile("Illuminator", 0, 0, 0, 0)
	LTBR H 2 Bright A_GiveInventory("SunShooter", 1)
	TNT1 A 0 A_PlaySound("Weapons/SunStaffLoop", 7)
	TNT1 A 0 A_GunFlash
	TNT1 A 0 A_FireCustomMissile("Illuminator", 0, 0, 0, 0)
	LTBR I 2 Bright A_GiveInventory("SunShooter", 1)
	TNT1 A 0 A_GiveInventory("BeamCounter", 1)
	TNT1 A 0 A_Refire
    Goto FinishFire
  TakeAmmo:
    TNT1 A 0 A_TakeInventory("BeamCounter", 3)
	TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
	TNT1 A 0 A_TakeInventory("Souls", 1)
  NoTake:
	TNT1 A 0
	Goto Hold+2
  NoAmmo:
    LTBR ON 4 Bright
    Goto Ready2
  Deselect2:
    LTBR M 1 A_Lower
	TNT1 A 0 A_Lower
    Loop
  Ready2:
    LTBR M 0 A_StopSoundEx("SoundSlot7")
    LTBR M 0 A_JumpIfInventory("Souls", 1, "Ready")
    LTBR M 1 A_WeaponReady
    Loop
  AltFire:
    TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "Continue")
    TNT1 A 0 A_JumpIfInventory("Souls", 5, "Continue")
	LTBR B 1 Bright A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	Goto Ready+5
  Continue:
    TNT1 A 0 A_PlayWeaponSound("Weapons/SunStaffCharge")
    LTBR BCDEBCDEBCDEBCD 2 Bright
    LTBR FGHIFGHIFGHI 2 Bright
    LTBR J 2 Bright
    LTBR M 0 A_SetBlend("FF FF 88", 1.0, 35)
    LTBR M 0 A_PlayWeaponSound("Weapons/SunStaffFire2")
	TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake2")
	TNT1 A 0 A_TakeInventory("Souls", 5)
  NoTake2:
	TNT1 A 0 A_GunFlash
	TNT1 A 0 Radius_Quake(12,27,0,1,0)
    LTBR M 2 Offset (0,48) A_GiveInventory("SunShooter_Alt", 1)
    LTBR M 2 Offset (0,40)
    LTBR M 2 Offset (0,36)
    LTBR M 2 Offset (0,34)
    LTBR M 10 Offset (0,32)
    LTBR M 4 A_JumpIfInventory("Souls", 1, 1)
    Goto Ready2
    LTBR M 10 A_PlaySound("Weapons/SunStaffRecharge")
    LTBR NO 4 Bright
    LTBR BCDE 3 Bright
    Goto ReadyCheckAnim
	Flash:
		TNT1 A 3 A_Light2
		TNT1 A 3 A_Light0
	Goto LightDone
  }
}

Actor BeamCounter : Inventory
{
	inventory.maxamount 3
}

ACTOR LightBeam : FastProjectile
{
	Speed 192
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER))
	DamageType "SoulType"
	Radius 12
	Height 8
	+MTHRUSPECIES
	+DONTBLAST
	+RIPPER
	+FOILINVUL
	+BLOODLESSIMPACT
	+NODAMAGETHRUST
	+THRUSPECIES
	+PAINLESS
	Species "ThruDecor"
	SeeSound ""
	Decal "BaronScorch"
	Scale 0.75
	MissileType "LightBeamSmoke"
	States
	{
		Spawn:
			TNT1 A 5
		Goto Die
		Death:
			TNT1 A 0 A_SpawnItemEx ("SunFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 AA 0 A_SpawnItemEx("LightSmoke", random(-2,2), random(-2,2), 0, random(-3,3), random(-3,3), random(-1,1), random(0,360))
			SUNP ABCDEFGH 2 BRIGHT
		Stop
		Die:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_SpawnItemEx ("SunFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			SUNP BCDEFGH 2 BRIGHT
		Stop
	}
}

Actor SunShooter : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_JumpIfInventory("DnD_QuestReward_DreamingGodBonus", 1, "Full")
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile ("LightBeam", 0, 0, 0, 8)
		Stop
		Full:
			// damage tripled for compensation of lack of ripper
			TNT1 A 0 A_RailAttack(4 * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_OCCULT, DND_ISSUPER), 0, 0, "", "", RGF_SILENT | RGF_FULLBRIGHT, 0, "LightSmoke2", 0, 0, 960, 27, 9.0, 1.0, "LightBeamSmoke", 0)
		Stop
	}
}

Actor Illuminator
{
	Mass 5
	+RIPPER
	+NOGRAVITY
	+NOCLIP
	+NOBLOCKMAP
	+BLOODLESSIMPACT
	+DONTSPLASH
	+NOTELEPORT
	+CLIENTSIDEONLY
	States 
	{ 
		Spawn: 
			ILLR A 25
		Stop
	} 
}

Actor LightSmoke
{
	Height 2
	Radius 2
	+NOGRAVITY
	+NOTELEPORT
	+CLIENTSIDEONLY
	+ALWAYSPUFF
	Alpha 0.85
	Renderstyle Translucent
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_PlaySound("weapons/SunStaffHit")
			BEAM BCDEF 2
		Stop
	}
}

Actor LightSmoke2 : LightSmoke {
	DamageType "SoulTypeFull"
	+THRUACTORS
	States {
		Spawn:
			TNT1 A 0 NoDelay A_PlaySound("weapons/SunStaffHit")
			TNT1 A 0 A_Recoil(-13.5)
			TNT1 A 1
			BEAM BCDEF 2
		Stop
	}
}

ACTOR LightBeamSmoke
{
	Alpha 0.8
	Scale 0.33
	+CLIENTSIDEONLY
	+NOGRAVITY
	+SHADOW
	+NOBLOCKMAP
	+NOTELEPORT
	States
	{
		Spawn:
			SUNP X 1 BRIGHT A_FadeOut(0.05)
		Loop
	}
}

Actor SunBurstExp : BaseExplosionDamage {
	DamageType "SoulType"
	+FORCERADIUSDMG
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_Explode(4 * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER), 128, 0)
		Stop
	}
}

Actor SunBurstExp2 : BaseExplosionDamage {
	DamageType "SoulType"
	+FORCERADIUSDMG
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_Explode(4 * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER), 128, 0)
		Stop
	}
}

Actor SunBurstExp_FullDMG : SunBurstExp  {
	DamageType "SoulTypeFull"
}

Actor SunBurstExp2_FullDMG : SunBurstExp2  {
	DamageType "SoulTypeFull"
}

Actor SunRay
{
  Radius 5
  Height 6
  Speed 16
  Projectile
  Damage 0
  -NoGravity
  +ForceXYBillBoard
  +DontSplash
  +RIPPER
  +BLOODLESSIMPACT
  +CLIENTSIDEONLY
  RenderStyle Add
  States
  {
  Spawn:
    TNT1 A 0 NoDelay Thing_ChangeTID(0, SPECIAL_FX_TID)
  SpawnLoop:
    FX01 AAABBB 1 Bright
    Loop
  Death:
    FX01 EFGH 3 Bright
    Stop
  }
}

Actor SunBeamSpawner : MinotaurFX2 {
	Radius 1
	Height 2
	Speed 20
	ReactionTime 40
	+THRUACTORS
	+CEILINGHUGGER
	-FLOORHUGGER
	States {
		Spawn:
			TNT1 A 1 NoDelay A_CustomMissile("SunBeamDamager", -1, random(-64,64), random(0,359), CMF_AIMDIRECTION|CMF_TRACKOWNER, -90)
			TNT1 A 0 A_Countdown
		Loop
		Death:
			TNT1 A 0
		Stop
	}
}

Actor SunBeamSpawner_FullDMG : SunBeamSpawner {
	States {
		Spawn:
			TNT1 A 1 NoDelay A_CustomMissile("SunBeamDamager_FullDMG", -1, random(-64,64), random(0,359), CMF_AIMDIRECTION|CMF_TRACKOWNER, -90)
			TNT1 A 0 A_Countdown
		Loop
	}
}

ACTOR SunBeamDamagerTrailSpawner
{
	Radius 1
	Height 1
	+NOINTERACTION
	+CLIENTSIDEONLY
    States
    {
     Spawn:
	    TNT1 A 0 NoDelay A_Jump(192, "Stopped")
		TNT1 A 1 A_SpawnItemEx("YellowBallParticle_Shrinking",0,0,0,frandom(-0.4,0.4),frandom(-0.4,0.4),frandom(-0.4,0.4),0,SXF_NOCHECKPOSITION)
	 Stopped:
		TNT1 A 1
		Stop
    }
}

Actor SunBeamDamager : FastProjectile {
	Radius 8
	Height 8
	Speed 48
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_2, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER))
	Decal "PlasmaScorchLower"
	Projectile
	+FORCEXYBILLBOARD
	+BLOODSPLATTER
	Renderstyle Add
	Alpha 0.90
	Scale 1.15
	DeathSound "Weapons/SunbeamHit"
	MissileType "SunBeamDamagerTrailSpawner"
	MissileHeight 8
	DamageType "SoulType"
	States {
		Spawn:
			FX01 A 1 Bright
		Loop
		Death:
			TNT1 A 0 A_SpawnItemEx ("SunFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 AA 0 A_SpawnItemEx("SunRay", 0, 0, 15, 8, 0, Random(4, 16), Random(0, 360), 160, 0)
			TNT1 A 0 A_SpawnItem("SunBurstExp")
			TNT1 A 1 A_SpawnItem("SunBeamExplosionFX")
		Stop
	}
}

Actor SunBeamExplosionFX {
	+CLIENTSIDEONLY
	+NOINTERACTION
	Renderstyle Add
	Alpha 0.9
	Scale 0.6
	States {
		Spawn:
			SNXP ABCDEFGHIJ 4 Bright
		Stop
	}
}

Actor SunBeamDamager_FullDMG : SunBeamDamager {
	DamageType "SoulTypeFull"
	States {
		Death:
			TNT1 A 0 A_SpawnItemEx ("SunFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 AA 0 A_SpawnItemEx("SunRay", 0, 0, 15, 8, 0, Random(4, 16), Random(0, 360), 160, 0)
			TNT1 A 0 A_SpawnItem("SunBurstExp_FullDMG")
			TNT1 A 1 A_SpawnItem("SunBeamExplosionFX")
		Stop
	}
}

Actor SunShooter_Alt : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_JumpIfInventory("DnD_QuestReward_DreamingGodBonus", 1, "Full")
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile("SunBeamSpawner", 9, 1, 0, -3)
			TNT1 A 0 A_FireCustomMissile("SunBeamSpawner", -9, 1, 0, -3)
			TNT1 A 0 A_FireCustomMissile("SunBeamSpawner", 0, 1, 0, -3)
		Stop
		Full:
			TNT1 A 0 A_FireCustomMissile("SunBeamSpawner_FullDMG", 12.5, 1, 0, -3)
			TNT1 A 0 A_FireCustomMissile("SunBeamSpawner_FullDMG", -12.5, 1, 0, -3)
			TNT1 A 0 A_FireCustomMissile("SunBeamSpawner_FullDMG", 0, 1, 0, -3)
		Stop
	}
}

Actor "Soul Reaver" : Weapon {
	Inventory.PickupSound "weapons/pickup"
	Inventory.PickupMessage "Picked up the Soul Reaver."
	Obituary "%o's soul was twisted by %k."
	Weapon.AmmoType "Souls"
	Weapon.AmmoGive 15
	Weapon.AmmoUse 15
	Weapon.SlotNumber 8
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 2.1
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.7
	States {
		Spawn:
			SREA Z -1
		Stop
		Ready:
			SREA A 1 A_WeaponReady
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("P_GrayFire", 1)
		    TNT1 A 0 A_TakeInventory("H_WeaponSlot8", 1)
			SREA A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("P_GrayFire", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot8", 1)
			TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
			TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_SOULREAVER)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 8, 4 | (6 << 16))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_1, 128)
	    SelectLoop:
			SREA A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			SREA A 1 A_JumpIfInventory("SphereMade", 2, "NoMoreSphere")
			TNT1 A 0 A_PlaySound("Weapons/SReaverBegin", 6)
			SREA CDEFGHIJ 4 Bright
			TNT1 A 0 A_Refire
			TNT1 A 0 A_PlayWeaponSound("Weapons/SReaverFire")
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_SetBlend("55 55 55", 0.75, 25)
			TNT1 A 0 Radius_Quake(12,16,0,1,0)
			TNT1 A 0 A_GiveInventory("SoulReaverShooter", 1)
			TNT1 A 0 A_GiveInventory("SphereMade", 1)
			SREA OP 5 Bright
			SREA B 4
		Goto Ready
		Hold:
			TNT1 A 0 A_GiveInventory("SoulReaverLooper", 1)
			SREA KLMN 2 Bright A_SpawnItemEx("SoulReaverDeflect", 0, 48, 32)
			TNT1 A 0 A_Refire
			TNT1 A 0 A_PlayWeaponSound("Weapons/SReaverFire")
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_SetBlend("55 55 55", 0.75, 25)
			TNT1 A 0 Radius_Quake(12,16,0,1,0)
			TNT1 A 0 A_GiveInventory("SoulReaverShooter", 1)
			TNT1 A 0 A_GiveInventory("SphereMade", 1)
			SREA OP 5 Bright
			SREA B 4
		Goto Ready
		Flash:
			TNT1 A 8 A_LightInverse
			TNT1 A 3 A_Light0
		Goto LightDone
		NoMoreSphere:
			SREA A 1
		Goto Ready
	}
}

Actor SphereMade : Inventory { 
	inventory.maxamount 2
}

Actor SoulReaverDeflect {
    Species "Player"
    +THRUSPECIES
    //+SOLID
    +SHOOTABLE
    +NOBLOOD
    +NOGRAVITY
    +NOTELEPORT
    +INVULNERABLE
    +DONTRIP
    +NOBLOODDECALS
    +FLOORCLIP
    +REFLECTIVE
	+NOTIMEFREEZE
	Height 40
	Radius 56
	States {
		Spawn:
			TNT1 A 2
		Stop
	}
}

Actor SoulReaverShooter : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_JumpIfInventory("DnD_QuestReward_DreamingGodBonus", 1, "Full")
			TNT1 A 0 A_JumpIFInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile("SoulReaverSphere", 0, 1)
		Stop
		Full:
			TNT1 A 0 A_FireCustomMissile("SoulReaverSphere_FullDMG", 0, 1)
		Stop
	}
}

Actor SoulReaverSphere {
	Height 48
	Radius 24
	Scale 1.55
	Renderstyle Add
	Alpha 0.05
	PROJECTILE
	Speed 40
	+DOOMBOUNCE
	+THRUACTORS
	var int user_count;
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_count", 0)
			TNT1 A 1
			TNT1 A 0 A_Stop
			TNT1 A 0 A_SpawnItemEx ("GrayFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			ORRB AABBCCDDAABBCCDD 1 Bright A_FadeIn(0.05)
			TNT1 A 0 A_playSound("Weapons/SReaverOpen")
		SpawnLoop:
			TNT1 A 0 A_JumpIf(16 == user_count, "Death")
			TNT1 A 0 A_CustomMissile("SoulReaverGhost", 8 * random(3, 5), 0, random(0, 360), CMF_TRACKOWNER | CMF_AIMDIRECTION, frandom(-12.0, 12.0))
			TNT1 AAA 0 A_CustomMissile("SoulReaverTinyGhost", 8 * random(3, 5), 0, random(0, 360), CMF_AIMDIRECTION, frandom(-12.0, 12.0))
			ORRB ABCD 2 Bright
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Death:
			ORRB ABCDABCDABCDABCDABCDABCDABCD 2 Bright
			TNT1 A 0 A_TakeFromTarget("SphereMade", 1)
		DeathLoop:
			ORRB AABBCCDD 1 Bright A_FadeOut(0.05)
		Loop
	}
}

Actor SoulReaverSphere_FullDMG : SoulReaverSphere {
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_count", 0)
			TNT1 A 1
			TNT1 A 0 A_Stop
			TNT1 A 0 A_SpawnItemEx ("GrayFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			ORRB AABBCCDDAABBCCDD 1 Bright A_FadeIn(0.05)
			TNT1 A 0 A_playSound("Weapons/SReaverOpen")
		SpawnLoop:
			TNT1 A 0 A_JumpIf(16 == user_count, "Death")
			TNT1 A 0 A_CustomMissile("SoulReaverGhost_FullDMG", 8 * random(3, 5), 0, random(0, 360), CMF_TRACKOWNER | CMF_AIMDIRECTION, frandom(-12.0, 12.0))
			TNT1 AAA 0 A_CustomMissile("SoulReaverTinyGhost", 8 * random(3, 5), 0, random(0, 360), CMF_AIMDIRECTION, frandom(-12.0, 12.0))
			ORRB ABCD 2 Bright
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Death:
			ORRB ABCDABCDABCDABCDABCDABCDABCD 2 Bright
			TNT1 A 0 A_TakeFromTarget("SphereMade", 1)
		DeathLoop:
			ORRB AABBCCDD 1 Bright A_FadeOut(0.05)
		Loop
	}
}

Actor SoulReaverExp1 : BaseExplosionDamage {
	DamageType "SoulType"
	+FORCERADIUSDMG
	+EXTREMEDEATH
	+FOILINVUL
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER), 48, 0, 0, 48)
		Stop
	}
}

Actor SoulReaverExp2 : BaseExplosionDamage {
	DamageType "SoulType"
	+FORCERADIUSDMG
	+EXTREMEDEATH
	+FOILINVUL
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER), 160, 0, 0, 160)
		Stop
	}
}

Actor SoulReaverGhost {
	PROJECTILE
	Height 24
	Radius 12
	Renderstyle Add
	Alpha 0.75
	Scale 0.85
	Speed 24
	+THRUACTORS
	+FORCERADIUSDMG
	+SEEKERMISSILE
	+SCREENSEEKER
	+LOOKALLAROUND
	+EXTREMEDEATH
	+FOILINVUL
	+HEXENBOUNCE
	+SKYEXPLODE
	var int user_count;
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_count", 0)
		SpawnLoop:
			TNT1 A 0 A_PlaySound("Weapons/SReaverGhost")
			TNT1 A 0 A_JumpIf(11 == user_count, "Vanish")
			TNT1 A 0 A_SpawnItemEx("SoulReaverExp1", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_SpawnItemEx("SoulReaverExp1", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_SpawnItemEx("SoulReaverExp1", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_SpawnItemEx("SoulReaverExp1", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_SpawnItemEx("SoulReaverExp1", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_SpawnItemEx("SoulReaverExp1", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_SpawnItemEx("SoulReaverExp1", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_SpawnItemEx("SoulReaverExp1", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Vanish:
		Death:
			TNT1 A 0 A_SpawnItem("SoulReaverExp2")
			TNT1 A 0 A_PlaySound("Weapons/SReaverExpl")
			TNT1 A 0 A_SpawnItemEx("SoulReaverGhostFX", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
			SRV2 A 1 Bright
			TNT1 A 0 A_SpawnItemEx("SoulReaverGhostFX", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
			SRV2 A 1 Bright
		Stop
	}
}

Actor SoulReaverDamager : DnD_FakeDamager {
	Height 24
	Radius 12
	Speed 32
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_OCCULT, DND_USETARGET | DND_ISSUPER))
	DamageType "SoulTypeFull"
	+EXTREMEDEATH
	+FOILINVUL
}

Actor SoulReaverGhost_FullDMG : SoulReaverGhost {
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_count", 0)
		SpawnLoop:
			TNT1 A 0 A_PlaySound("Weapons/SReaverGhost")
			TNT1 A 0 A_JumpIf(11 == user_count, "Vanish")
			TNT1 A 0 A_CustomMissile("SoulReaverDamager", 0, 0, 0, CMF_TRACKOWNER)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_CustomMissile("SoulReaverDamager", 0, 0, 0, CMF_TRACKOWNER)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_CustomMissile("SoulReaverDamager", 0, 0, 0, CMF_TRACKOWNER)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_CustomMissile("SoulReaverDamager", 0, 0, 0, CMF_TRACKOWNER)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_CustomMissile("SoulReaverDamager", 0, 0, 0, CMF_TRACKOWNER)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_CustomMissile("SoulReaverDamager", 0, 0, 0, CMF_TRACKOWNER)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_CustomMissile("SoulReaverDamager", 0, 0, 0, CMF_TRACKOWNER)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_CustomMissile("SoulReaverDamager", 0, 0, 0, CMF_TRACKOWNER)
			SRV2 AA 1 Bright A_SeekerMissile(10, 10, SMF_PRECISE | SMF_LOOK)
			TNT1 A 0 A_SpawnItem("SoulReaverGhostTrail")
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
	}
}

Actor SoulReaverGhostTrail {
	Renderstyle Add
	Alpha 0.8
	Scale 0.85
	Height 2
	Radius 2
	+CLIENTSIDEONLY
	+NOGRAVITY
	
	States {
		Spawn:
			TNT1 A 1
		SpawnLoop:
			SRV2 A 1 A_FadeOut(0.1)
		Loop
	}
}

Actor SoulReaverGhostFX {
	Height 4
	Radius 4
	Renderstyle Add
	Alpha 0.825
	Vspeed 1
	Scale 0.85
	+NOGRAVITY
	+CLIENTSIDEONLY
	
	States {
		Spawn:
			SRV3 A 5 Bright
			SRV3 B 4 Bright
			SRV3 C 3 Bright
			SRV3 DEFGHI 2 Bright
		Stop
	}
}

Actor SoulReaverTinyGhost {
	PROJECTILE
	Height 16
	Radius 8
	Renderstyle Add
	Alpha 0.75
	Speed 18
	+THRUACTORS
	+HEXENBOUNCE
	+SKYEXPLODE
	+CLIENTSIDEONLY
	var int user_count;
	States {
		Spawn:
			TNT1 A 0 A_SetUserVar("user_count", 0)
		SpawnLoop:
			TNT1 A 0 A_JumpIF(105 == user_count, "Vanish")
			SRV1 K 1 Bright
			TNT1 A 0 A_SpawnItem("SoulReaverTinyGhostTrail")
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Vanish:
			SRV1 K 1 Bright A_FadeOut(0.05)
		Loop
	}
}

Actor SoulReaverTinyGhostTrail {
	Renderstyle Add
	Alpha 0.8
	Scale 0.85
	Height 2
	Radius 2
	+CLIENTSIDEONLY
	+NOGRAVITY
	States {
		Spawn:
			TNT1 A 2
			SRV1 DEFGHIJ 1
		Stop
	}
}

Actor SoulReaverSoundTimer : PowerProtection {
	powerup.duration 17
	damagefactor "normal", 1.0
}

Actor SoulReaverLooper : CustomInventory {
	inventory.maxamount 1
	+AUTOACTIVATE
	+ALWAYSPICKUP
	
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("SoulReaverSoundTimer", 1, "Failure")
			TNT1 A 0 A_GiveInventory("SoulReaverSoundTimer", 1)
			TNT1 A 0 A_PlaySoundEx("Weapons/SReaverLoop", 7)
		Stop
		Failure:
			TNT1 A 0
		Stop
	}
}