// Dropper Item
Actor AccessorySpawner {
	+NOINTERACTION
	States {
		Spawn:
			TNT1 A 0 NoDelay A_Jump(256, "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "16", "m17")
		Stop
		1:
			TNT1 A 0 A_SpawnItem("Accessory_1")
		Stop
		2:
			TNT1 A 0 A_SpawnItem("Accessory_2")
		Stop
		3:
			TNT1 A 0 A_SpawnItem("Accessory_3")
		Stop
		4:
			TNT1 A 0 A_SpawnItem("Accessory_4")
		Stop
		5:
			TNT1 A 0 A_SpawnItem("Accessory_5")
		Stop
		6:
			TNT1 A 0 A_SpawnItem("Accessory_6")
		Stop
		7:
			TNT1 A 0 A_SpawnItem("Accessory_7")
		Stop
		8:
			TNT1 A 0 A_SpawnItem("Accessory_8")
		Stop
		9:
			TNT1 A 0 A_SpawnItem("Accessory_9")
		Stop
		10:
			TNT1 A 0 A_SpawnItem("Accessory_10")
		Stop
		11:
			TNT1 A 0 A_SpawnItem("Accessory_11")
		Stop
		12:
			TNT1 A 0 A_SpawnItem("Accessory_12")
		Stop
		13:
			TNT1 A 0 A_SpawnItem("Accessory_13")
		Stop
		14:
			TNT1 A 0 A_SpawnItem("Accessory_14")
		Stop
		16: // 15 is replacement
			TNT1 A 0 A_SpawnItem("Accessory_16")
		Stop
		m17:
			TNT1 A 0 A_SpawnItem("Accessory_17")
		Stop
	}
}

Actor Accessory_0 : DnD_Boolean { }

Actor Accessory_1 : Inventory {
	inventory.maxamount 1
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Talisman of Wisdom!\c-"
	inventory.pickupsound "Items/Accessory"
	Height 24
	Radius 16
	+FLOATBOB
	+NEVERRESPAWN
	+INVENTORY.BIGPOWERUP
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			ACC1 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_2 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Talisman of Greed!\c-"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			ACC2 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_3 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Demon Bane!\c-"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			ACC3 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_4 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Amulet of Hellfire!\c-"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			ACC4 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_5 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Angelic Ankh!\c-"
	States {
		Spawn:
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			ACC5 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_6 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Pendant of Reflection!\c-"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			ACC6 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_7 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Nether Mask!\c-"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			ACC7 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_8 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Taltos Ring!\c-"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			ACC8 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_9 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Hate Shard!\c-"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			ACC9 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_10 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Hand of Artemis!\c-"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			AC10 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_11 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Scroll of Agamotto!\c-"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			AC11 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_12 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Gryphon Boots!\c-"
	Scale 0.5
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			AC12 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_13 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Lich Arm!\c-"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			AC13 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_14 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Sigil of Elements!\c-"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			AC14 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_15 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Celestial Relic!\c-"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			AC15 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_16 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Veil of the Assassin!\c-"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			AC16 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

Actor Accessory_17 : Accessory_1 {
	inventory.pickupmessage "\ccAccessory     : \c[Y5]Hunter's Talisman!\c-"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_PlaySound("RareDrop")
		SpawnLoop:
			AC17 A 24 A_SpawnItem("AccessoryEffectSpawner")
		Loop
	}
}

// Hold current used accessory index of player
Actor Accessory_Index : Ammo { 
	inventory.amount 1
	inventory.maxamount 0x7FFFFFFF
	ammo.backpackamount 0
	ammo.backpackmaxamount 0x7FFFFFFF
	+IGNORESKILL
}

Actor TaltosEffect : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("GHOST", 1)
			TNT1 A 0 A_SetTranslucent(0.5)
		Stop
	}
}

Actor TaltosUnsetEffect : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_ChangeFlag("GHOST", 0)
			TNT1 A 0 A_SetTranslucent(1.0)
		Stop
	}
}

Actor TaltosUp : DnD_Boolean {}

const float DEMONBANE_GAIN = 1.0;

Actor DemonBaneCheck : DnD_Boolean { }

Actor NetherCheck : DnD_Boolean {}
Actor HateCheck : DnD_Boolean {}

Actor HellfireCheck : DnD_Boolean { }

Actor PendantPower : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration -5
	powerup.color "176 108 176"
}

Actor PendantSlow : PowerSpeed {
	Speed 0.75
	powerup.duration -5
}

Actor ReflectCount : Inventory {
	inventory.maxamount 6
}

Actor CanDeflect : DnD_Boolean { }

Actor PendantEffect : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_Jump(52, "CheckPendant")
		Stop
		CheckPendant:
			TNT1 A 0 a_JumpIfInventory("PendantPower", 1, "Failed")
			TNT1 A 0 A_JumpIfInventory("CanDeflect", 1, "CheckCount")
		Stop
		CheckCount:
			TNT1 A 0 A_JumpIfInventory("ReflectCount", 0, "Failed")
		Success:
			TNT1 A 0 A_SetReflectiveInvulnerable
			TNT1 A 0 A_PlaySound("Reflection/On", 5)
			TNT1 A 0 A_GiveInventory("P_Invulnerable", 1)
			TNT1 A 0 A_GiveInventory("PendantPower", 1)
			TNT1 A 0 A_GiveInventory("PendantSlow", 1)
			TNT1 A 0 A_GiveInventory("ReflectCount", 1)
			TNT1 A 0 A_GiveInventory("PendantFXSpawner", 1)
			TNT1 A 0 ACS_ExecuteAlways(921, 0, 0, 35 * 5)
		Stop
		Failed:
			TNT1 A 0
		Stop
	}
}

Actor PendantFXSpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_FireCustomMissile("ReflectionFX_1", 0, 0)
			TNT1 A 0 A_FireCustomMissile("ReflectionFX_2", 0, 0)
			TNT1 A 0 A_FireCustomMissile("ReflectionFX_3", 0, 0)
		Stop
	}
}

Actor ChangeReflect : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_PlaySound("Reflection/Off", 5)
			// this invul doesnt do anything other than protect so
			//TNT1 A 0 A_JumpIfInventory("Invulnerable_Better", 1, "JustUnreflect")
			TNT1 A 0 A_UnsetReflectiveInvulnerable
		Stop
		JustUnreflect:
			TNT1 A 0 A_UnsetReflective
		Stop
	}
}

Actor ReflectionFX_1 {
	Projectile
	+NOBLOCKMAP
	+NOCLIP
	+CLIENTSIDEONLY
	+RIPPER
	+BLOODLESSIMPACT
	Renderstyle Add
	Alpha 0.75
	Radius 2
	Height 2
	var int user_angle;
	var int user_count;
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_count", 0)
			TNT1 A 0 A_SetUserVar("user_angle", 0)
		SpawnLoop:
			TNT1 A 0 A_JumpIf(user_count == 175, "Fade")
			RFX0 A 1 Bright ACS_ExecuteAlways(922, 0, 1, 72, 3)
			TNT1 A 0 A_SpawnItem("ReflectionFXTrail")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Fade:
			TNT1 A 0 A_Stop
			RFX0 GHIJ 2 Bright
		Stop
	}
}

Actor ReflectionFX_2 : ReflectionFX_1 {
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_count", 0)
			TNT1 A 0 A_SetUserVar("user_angle", 120)
		SpawnLoop:
			TNT1 A 0 A_JumpIf(user_count == 175, "Fade")
			RFX0 A 1 Bright ACS_ExecuteAlways(922, 0, 2, 72, 3)
			TNT1 A 0 A_SpawnItem("ReflectionFXTrail")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Fade:
			TNT1 A 0 A_Stop
			RFX0 GHIJ 2 Bright
		Stop
	}
}

Actor ReflectionFX_3 : ReflectionFX_1 {
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_count", 0)
			TNT1 A 0 A_SetUserVar("user_angle", 240)
		SpawnLoop:
			TNT1 A 0 A_JumpIf(user_count == 175, "Fade")
			RFX0 A 1 Bright ACS_ExecuteAlways(922, 0, 3, 72, 3)
			TNT1 A 0 A_SpawnItem("ReflectionFXTrail")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Fade:
			TNT1 A 0 A_Stop
			RFX0 GHIJ 2 Bright
		Stop
	}
}

Actor ReflectionFXTrail {
	+CLIENTSIDEONLY
	+NOGRAVITY
	+NOCLIP
	Renderstyle Add
	Alpha 0.75
	
	States {
		Spawn:
			RFX0 BCDEF 1 Bright
		Stop
	}
}

Actor CanIntervene : DnD_Boolean { }
Actor Intervened : DnD_Boolean { }
Actor InterventionSelected : DnD_Boolean { }

Actor Intervention : PowerInvulnerable {
	powerup.duration -8
	powerup.color "77 77 30"
}

Actor InterventionFX {
	Height 1
	Radius 1
	Speed 4
	Damage 0
	Alpha 0.9
	Scale 0.25
	Renderstyle Add
	+NOINTERACTION
	+CLIENTSIDEONLY
	States {
		Spawn:
			GSOL Y 4 Bright A_FadeOut(0.075)
		Wait
	}
}

Actor InterventionFXBig : InterventionFX {
	Scale 0.5
	States {
		Spawn:
			GSOL XXXXXXX 4 Bright ThrustThingZ(0, 3, 0, 1)
			GSOL X 4 Bright A_FadeOut(0.05)
		Goto Spawn+7
	}
}

Actor InterventionFXSpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_PlaySound("Intervention", 5)
			TNT1 AAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("InterventionFX", random(-8,8), random(-8,8), random(-8,8), random(-12,12), random(-12,12), random(-2,12))
			TNT1 A 0 A_SpawnItemEx("InterventionFXBig", 0, 0, 16)
		Stop
	}
}

Actor HateWeakness : PowerProtection {
	damagefactor "normal", 1.0
	powerup.duration -5
}

Actor ArtemisPower : PowerInfiniteAmmo {
	-INVENTORY.INTERHUBSTRIP
	powerup.duration 0x7FFFFFFF
}

Actor ArtemisCheck : DnD_Boolean { }

Actor CurseImmunity : PowerProtection {
	damagefactor "normal", 1.0
	powerup.duration 0x7FFFFFFF
}

Actor GryphonCheck : DnD_Boolean { }

Actor AgamottoCheck : Dnd_Boolean { }

Actor AgamottoOffense : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration 0x7FFFFFFF
}

Actor AgamottoDefense : PowerProtection {
	damagefactor "normal", 1.0
	powerup.duration 0x7FFFFFFF
}

Actor LichCheck : DnD_Boolean { }

Actor SigilCheck : Inventory {
	inventory.maxamount 4
}

Actor ElementPower_Fire : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration -20
}

Actor ElementPower_Ice : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration -20
}

Actor ElementPower_Lightning : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration -20
}

Actor ElementPower_Earth : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration -20
}

Actor CelestialCheck : DnD_Boolean { }

Actor HunterTalismanCheck : DnD_Boolean { }
Actor HunterTalismanCooldown : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration -10
}

const int talisman_mark_timer = 10;
Actor HunterTalismanDebuff : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration -10
}

Actor HunterTalismanMarkBool : DnD_Boolean { }

Actor HunterTalismanMarker : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Talisman Mark Timer",0 , talisman_mark_timer)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Talisman Mark")
		Stop
	}
}

Actor HunterTalismanHealFXSpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("InvulnerabilitySphereFX", random(-32, 32), random(-32, 32), random(8, 24), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
		Stop
	}
}

Actor HunterTalismanNovaFX {
	RenderStyle Add
	Alpha 0.65
	Scale 0.65
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			TNT1 A 0 NoDelay Thing_ChangeTID(0, SPECIAL_FX_TID)
		    D5FX GGHHII 2 A_SpawnItemEx("HunterTalismanNovaTrailFX")
			D5FX JK 3
			D5FX L 2
		Stop
	}
}

Actor HunterTalismanNovaTrailFX : HunterTalismanNovaFX {
	Scale 0.4
	States {
		Spawn:
			TNT1 A 0 NoDelay Thing_ChangeTID(0, SPECIAL_FX_TID)
		    D5FX GHI 3
			D5FX JK 2
			D5FX L 1
		Stop
	}
}

const int HUNTERTALISMAN_DIST = 384;

Actor HunterTalismanEffector : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_RadiusGive("HunterTalismanMarker", 432, RGF_MONSTERS)
			TNT1 A 0 A_SpawnItemEx("HunterTalismanNovaFX", 0, 0, 24, 9)
			TNT1 A 0 A_SpawnItemEx("HunterTalismanNovaFX", 0, 0, 24, 9, 9)
			TNT1 A 0 A_SpawnItemEx("HunterTalismanNovaFX", 0, 0, 24, -9)
			TNT1 A 0 A_SpawnItemEx("HunterTalismanNovaFX", 0, 0, 24, -9, -9)
			TNT1 A 0 A_SpawnItemEx("HunterTalismanNovaFX", 0, 0, 24, -9, 9)
			TNT1 A 0 A_SpawnItemEx("HunterTalismanNovaFX", 0, 0, 24, 9, -9)
			TNT1 A 0 A_SpawnItemEx("HunterTalismanNovaFX", 0, 0, 24, 0, -9)
			TNT1 A 0 A_SpawnItemEx("HunterTalismanNovaFX", 0, 0, 24, 0, 9)
		Stop
	}
}

Actor HunterTalismanFX {
	Radius 1
	Height 1
	Renderstyle Add
	Alpha 0.01
	Scale 0.33
	var int user_count;
	+NOINTERACTION
	+NOCLIP
	+CLIENTSIDEONLY
	States {
		Spawn:
			TNT1 A 1
			TNT1 A 0 Thing_ChangeTID(0, SPECIAL_FX_TID)
			TNT1 A 0 A_SetUserVar("user_count", 0)
			// 16 frames
		SpawnLoop:
			TNT1 A 0 A_JumpIf(user_count == talisman_mark_timer * 2, "Fade")
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 J 1 A_SetTranslucent(1.0 * sin(22.5))
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 K 1 A_SetTranslucent(1.0 * sin(45))
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 L 1 A_SetTranslucent(1.0 * sin(67.5))
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 M 1 A_SetTranslucent(1.0 * sin(90))
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 N 1 A_SetTranslucent(1.0 * sin(112.5))
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 O 1 A_SetTranslucent(1.0 * sin(135))
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 P 1 A_SetTranslucent(1.0 * sin(157.5))
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 Q 1 A_SetTranslucent(1.0 * sin(157.5))
			TNT1 A 0 A_JumpIfInTargetInventory("Mo_Died", 1, "Fade")
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 R 1 A_SetTranslucent(1.0 * sin(157.5))
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 S 1 A_SetTranslucent(1.0 * sin(135))
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 T 1 A_SetTranslucent(1.0 * sin(112.5))
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 U 1 A_SetTranslucent(1.0 * sin(90))
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 V 1 A_SetTranslucent(1.0 * sin(67.5))
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 X 1 A_SetTranslucent(1.0 * sin(45))
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 W 1 A_SetTranslucent(1.0 * sin(22.5))
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 Y 1 A_SetTranslucent(1.0 * sin(360))
			TNT1 A 0 A_Warp(AAPTR_TARGET, 0, 0, 48, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE)
			DB04 Z 1 A_SetTranslucent(1.0 * sin(22.5))
			TNT1 A 0 A_JumpIfInTargetInventory("Mo_Died", 1, "Fade")
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Fade:
			"####" "########" 1 A_FadeOut(0.1)
		Stop
	}
}

Actor VeilCheck : DnD_Boolean { }
Actor VeilNextAttack : PowerProtection {
	damagefactor "normal", 1.0
	powerup.duration -5
}

Actor VeilCooldown : PowerProtection {
	damagefactor "normal", 1.0
	powerup.duration -5
}

Actor VeilMarkTimer : PowerProtection {
	damagefactor "normal", 1.0
	powerup.duration -5
}

Actor VeilHealFXSpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_PlaySound("VeilOfAssassin/Drain", 7)
			TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("UberSphereFX", random(-32, 32), random(-32, 32), random(8, 24), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
		Stop
	}
}