Actor FieldKit : CustomInventory
{
  Inventory.PickupMessage "You got a field kit"
  Inventory.PickupSound "Misc/I_PkUp"
  Inventory.UseSound "Items/fieldkit"
  Inventory.Icon "FKITC0"
  Inventory.MaxAmount 3
  Inventory.InterHubAmount 3
  +INVENTORY.UNDROPPABLE
  +INVENTORY.INVBAR
  +INVENTORY.PERSISTENTPOWER
  States
  {
  Spawn:
    FKIT A -1
	Stop
	Use:
		TNT1 A 0 A_JumpIf(!ACS_NamedExecuteWithResult("DnD Can Pick Health Item", 1), "Failed")
		TNT1 A 0 ACS_NamedExecuteAlways("DnD Health Pickup", 0, 25 + 13 * ACS_ExecuteWithResult(918, 2, 1))
		TNT1 A 0 A_GiveInventory("DnD_UseNoArtifact", 1)
		TNT1 A 0 A_GiveInventory("RemoveAilments", 1)
		TNT1 A 0 ACS_NamedExecuteAlways("DnD On Artifact Use")
	Stop
	Failed:
		TNT1 A 1
	Fail
  }
}

Actor RemoveAilments : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration -1
}

actor Salvationsphere : CustomInventory {
	Inventory.PickupMessage "Salvationsphere!"
	Inventory.Amount 1
	Inventory.MaxAmount 1
	Inventory.PickupSound "misc/p_pkup"
	Inventory.UseSound "items/salvation"
	Inventory.Icon "ARTISALV"
	Renderstyle Add
	+INVENTORY.FANCYPICKUPSOUND
	+INVENTORY.UNDROPPABLE
	+INVBAR
	+COUNTITEM
	+FLOATBOB
	states {
		Spawn:
			SALV ABCDE 3 Bright
		loop
		Use:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Health Pickup", 0, 100 + 50 * ACS_ExecuteWithResult(918, 2, 1), 1)
			TNT1 A 0 A_GiveInventory("Salvate")
			TNT1 A 0 A_GiveInventory("DnD_UseNoArtifact", 1)
			TNT1 A 0 A_GiveInventory("SalvationEffectGiver")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD On Artifact Use")
		Stop
	}
}

//Alternate Salvation

actor Salvate : ArtiTeleport
{
  +INVENTORY.AUTOACTIVATE
  +INVENTORY.ALWAYSPICKUP
}

Actor PortableShield : CustomInventory
{
  Inventory.PickupMessage "Shield!"
  Inventory.Amount 1
  Inventory.MaxAmount 3
  Inventory.PickupSound "misc/p_pkup"
  Inventory.UseSound "items/shield"
  Inventory.Icon "ELPDP"
  Inventory.InterHubAmount 3
  +INVENTORY.UNDROPPABLE
  +INVENTORY.PERSISTENTPOWER
  +INVBAR
  States
  {
	Spawn:
		ELPD A -1
	Stop
	Use:
		TNT1 A 0 A_JumpIfInventory("Invulnerable_Better", 1, "Failed") // invul sphere
		TNT1 A 0 A_JumpIfInventory("P_Invulnerable", 1, "Failed")
		TNT1 A 0 A_GiveInventory("DnD_UseNoArtifact", 1)
		TNT1 A 0 A_JumpIfInventory("Ability_Arcanery", 1, "Better")
		TNT1 A 0 A_GiveInventory("ShieldPowerupGiver", 1)
		TNT1 A 0 ACS_NamedExecuteAlways("DnD On Artifact Use")
	Stop
	Better:
		TNT1 A 0 A_GiveInventory("ShieldPowerupGiver2", 1)
	Stop
	Failed:
		TNT1 A 0
	Fail
  }
}

Actor ShieldPowerupGiver : PowerProtection
{
	damagefactor "normal", 0.0
	powerup.duration -5
	Powerup.Color "5F 2F 00", 0.325
	+INVENTORY.ADDITIVETIME
}

Actor ShieldPowerupGiver2 : PowerProtection
{
	damagefactor "normal", 0.0
	powerup.duration 262 // 7.5 seconds approx
	Powerup.Color "5F 2F 00", 0.325
	+INVENTORY.ADDITIVETIME
}

Actor FakeBloodPower : PowerProtection
{
	damagefactor "normal", 1.0
	powerup.duration -30
	Powerup.Color "192 5 5"
}

Actor FakeBloodPowerBetter : PowerProtection
{
	damagefactor "normal", 1.0
	powerup.duration -45
	Powerup.Color "192 5 5"
}

Actor BloodRune : CustomInventory
{
	inventory.pickupmessage "Rune!"
	inventory.maxamount 1
	inventory.icon "BRUICO"
	+INVENTORY.UNDROPPABLE
	+INVBAR
	States
	{
		Spawn:
			ELPD A -1
		Stop
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UseNoArtifact", 1)
			TNT1 A 1 ACS_NamedExecuteAlways("DnD Blood Rune", 0, 0)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD On Artifact Use")
		Stop
	}
}

Actor TripleDamage : CustomInventory
{
	inventory.pickupmessage "Rune!"
	inventory.maxamount 1
	inventory.usesound "items/triple"
	inventory.icon "ARTIDMG"
	+INVENTORY.UNDROPPABLE
	+INVBAR
	States
	{
		Spawn:
			TNT1 A 1
		Stop
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UseNoArtifact", 1)
			TNT1 A 0 A_JumpIfInventory("Ability_Arcanery", 1, "Better")
			TNT1 A 0 A_GiveInventory("TripleDamagePower", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD On Artifact Use")
		Stop
		Better:
			TNT1 A 0 A_GiveInventory("TripleDamagePower2", 1)
		Stop
	}
}

Actor TripleDamagePower : PowerDamage
{
	damagefactor "normal", 1.0
	powerup.duration -15
	Powerup.Color Redmap
}


Actor TripleDamagePower2 : PowerDamage
{
	damagefactor "normal", 1.0
	powerup.duration 787
	Powerup.Color Redmap
}

Actor BookPuff : BulletPuff {
	+MTHRUSPECIES
	+PUFFONACTORS
	DamageType "BookOfTheDead"
	States {
		Crash:
			TNT1 A 1
		Stop
		Spawn:
			TNT1 AA 0 A_PlaySound("items/bookofthedeadhit")
			TNT1 A 0 A_GiveToTarget("Souls", 1)
			TNT1 AAAAAAAA 0 A_SpawnItemEx("UndeadParticleFX",0,0,8,random(-4, 4),random(-4, 4),random(2, 5),0,143)
			SRBA EE 2 A_SpawnItemEx("UndeadParticleFX",0,0,8,random(-4, 4),random(-4, 4),random(2, 5),0,143)
			SRBA FF 2 A_SpawnItemEx("UndeadParticleFX",0,0,8,random(-4, 4),random(-4, 4),random(2, 5),0,143)
			SRBA GG 2 A_SpawnItemEx("UndeadParticleFX",0,0,8,random(-4, 4),random(-4, 4),random(2, 5),0,143)
			SRBA HH 2 A_SpawnItemEx("UndeadParticleFX",0,0,8,random(-4, 4),random(-4, 4),random(2, 5),0,143)
			SRBA I 4
			SRBA J 2
		Fade:
			SRBA J 1 A_Fadeout(0.035)
		Loop
	}
}

Actor BookofTheDead : CustomInventory
{
	inventory.maxamount 1
	inventory.icon "BOTDG0"
	inventory.usesound "items/bookofthedead"
	+INVENTORY.UNDROPPABLE
	+INVBAR
	Decal ""
	States
	{
		Spawn:
			TNT1 A 1
		Stop
		Use:
			TNT1 A 0 A_AlertMonsters
			TNT1 A 0 A_GiveInventory("DnD_UseNoArtifact", 1)
			TNT1 A 0 A_SpawnItemEx("UndeadParticleFX2", 32, 0)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD On Artifact Use")
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Do Scan Attack", ACS_NamedExecuteWithResult("DND Player Damage Scale", 4000, DND_DAMAGECATEGORY_OCCULT, DND_ISARTIFACT), DND_DAMAGETYPE_OCCULT, 81 | (DND_SCANNER_BOOK << 16), DND_DAMAGEFLAG_DISTANCEGIVESDAMAGE | DND_DAMAGEFLAG_SELFORIGIN)
		Stop
	}
}

Actor UndeadParticleFX
{
	Height 1
	Radius 1
	Alpha 0.75
	Renderstyle Add
	+CLIENTSIDEONLY
	+NOGRAVITY
	Scale 0.75
	States
	{
		Spawn:
			SRBA D 2 A_FadeOut(0.075)
		Loop
	}
}

Actor UndeadParticleFX2 : UndeadParticleFX {
	Alpha 0.9
	Scale 1.15
	States {
		Spawn:
			SRBA K 2 A_FadeOut(0.075)
		Loop
	}
}

Actor BladeVortex : CustomInventory
{
	inventory.maxamount 1
	inventory.icon "SHRUB0"
	inventory.usesound "items/bladevortex"
	+INVENTORY.UNDROPPABLE
	+INVBAR
	States
	{
		Spawn:
			TNT1 A 1
		Stop
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UseNoArtifact", 1)
			TNT1 A 0 A_AlertMonsters
			TNT1 A 0 A_SetBlend("FF FF FF", 1.0, 35)
			TNT1 A 0 A_JumpIfInventory("Ability_Arcanery", 1, "Better")
			TNT1 A 0 A_GiveInventory("VortexTimer", 1)
			TNT1 A 0 ACS_ExecuteAlways(974, 0, 128)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD On Artifact Use")
		Stop
		Better:
			TNT1 A 0 A_GiveInventory("VortexTimer2", 1)
			TNT1 A 0 ACS_ExecuteAlways(974, 0, 128)
		Stop
	}
}

Actor VortexTimer : PowerProtection
{
	damagefactor "normal", 1.0
	powerup.duration -20
}

Actor VortexTimer2 : PowerProtection
{
	damagefactor "normal", 1.0
	powerup.duration -30
}

Actor VortexBlade : DnD_ExplosiveBase {
	Species "Player"
	+THRUSPECIES
	+THRUACTORS
	+NOCLIP
	+NODAMAGETHRUST
	+FORCERADIUSDMG
	+DONTREFLECT
	Radius 5
	Height 8
	Speed 8
	Scale 0.4
	var int user_count;
	States {
		SpawnState:
			TNT1 A 0 A_SetUserVar("user_count", 0)
			TNT1 A 0 A_SetUserVar("user_expdmg", ACS_NamedExecuteWithResult("DND Player Damage Scale", 40, DND_DAMAGECATEGORY_MELEE, DND_ISARTIFACT | DND_USETARGET))
			TNT1 A 0 A_SetUserVar("user_expradius", 18 * (1.0 + ACS_NamedExecuteWithResult("DND Explosion Radius Retrieve", DND_USETARGET) * exprad_factor))
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
			TNT1 A 0 A_SetUserVar("user_damagetype", DND_DAMAGETYPE_OCCULT)
		ExplosionLoopA:
			SHFL A 3
		Goto DoExplosionDamage
		ExplosionLoopB:
			SHFL B 3
		Goto DoExplosionDamage
		ExplosionLoopC:
			SHFL C 3
		Goto DoExplosionDamage
		ExplosionLoopD:
			SHFL D 3
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 0 A_SetUserVar("user_count", (user_count + 1) % 4)
			TNT1 A 0 A_JumpIf(user_count == 0, "ExplosionLoopA")
			TNT1 A 0 A_JumpIf(user_count == 1, "ExplosionLoopB")
			TNT1 A 0 A_JumpIf(user_count == 2, "ExplosionLoopC")
			TNT1 A 0 A_JumpIf(user_count == 3, "ExplosionLoopD")
			TNT1 A 1
		Stop
		Death:
			TNT1 A 2
		Stop		
	}
}

Actor StatReset : CustomInventory {
  Inventory.PickupMessage "You got a stat reset wowo"
  Inventory.PickupSound "Misc/I_PkUp"
  Inventory.Icon "SRESA0"
  Inventory.MaxAmount 1
  +INVENTORY.UNDROPPABLE
  +INVBAR
  States
  {
	Spawn:
		TNT1 A -1
	Stop
	Use:
		TNT1 A 0 A_PlaySound("items/statreset", CHAN_AUTO)
		TNT1 A 0 ACS_ExecuteAlways(832)
	Stop
  }
}

Actor DnD_Artifact_MapBits : DnD_Info { }

Actor Radsuit_Portable : CustomInventory {
	Inventory.PickupSound "Misc/I_PkUp"
	Inventory.MaxAmount 1
	Inventory.Icon "RADSICO"
	+INVENTORY.UNDROPPABLE
	+INVBAR
	States {
		Spawn:
			TNT1 A -1
		Stop
		Use:
			TNT1 A 0 A_PlaySound("items/radsuit", CHAN_AUTO)
			TNT1 A 0 A_GiveInventory("RadSuit2", 1)
		Stop
	}
}