Actor TargetMaximumHealth : DnD_Info {}
Actor TargetCurrentHealth : DnD_Info {}
Actor TargetLevel : DnD_Info {}
Actor TargetIsWhat : DnD_Info {}
Actor TargetMonId : DnD_Info {}
Actor TargetHealthBarColor : DnD_Info {}
Actor TargetIsElite : DnD_Boolean {}
Actor TargetFortify : DnD_Info {}
Actor TargetTID : DnD_Info {}

Actor TargetPickCooldown : PowerProtection {
	damagefactor "normal", 1.0
	powerup.duration -1
}

// Identification of the monster
Actor MonsterID : DnD_Info {}
Actor MonsterLevel : DnD_Info {}
Actor MonsterBaseHealth : DnD_Info {}
Actor MonsterMaxHealth : DnD_Info {}
Actor MonsterNameSkip : DnD_Info {}
Actor EnemyInDisguise : DnD_Boolean {}
Actor ForcedMonsterLevel : DnD_Info {}
Actor FriendlyInDisguise : DnD_Boolean {} 
Actor MonsterIsElite : DnD_Boolean {}
Actor MonsterProperties : DnD_Info {} // used by custom monsters

Actor LegendaryKills : DnD_Info { }
Actor LegendaryDamageDealt : DnD_Info { }

Actor MagicCausedDeath : DnD_Boolean { }
Actor BookofDeadCausedDeath : DnD_Boolean { }

Actor MonsterRegenPause : DnD_Boolean { }

// Monster IDs - Classic

const int pfff = 0;

// these match monsterclassid data in dnd_monsterdata.h
enum {
	DND_ZOMBIEMANID,
	DND_SHOTGUNNERID,
	DND_CHAINGUNGUYID,
	DND_DEMONID,
	DND_SPECTREID,
	DND_IMPID,
	DND_CACODEMONID,
	DND_PAINELEMENTALID,
	DND_LOSTSOULID,
	DND_REVENANTID,
	DND_HELLKNIGHTID,
	DND_BARONID,
	DND_FATSOID,
	DND_ARACHNOTRONID,
	DND_ARCHVILEID,
	DND_SPIDERMASTERMINDID,
	DND_CYBERDEMONID,
	DND_NAZIID
};

// Monster info for custom monsters
enum {
	DND_MTYPE_DEMON_POW = 1,
	DND_MTYPE_UNDEAD_POW = 2,
	DND_MTYPE_MAGICAL_POW = 4,
	DND_MTYPE_ROBOTIC_POW = 8,
	DND_MTYPE_ZOMBIE_POW = 16,
	DND_MTYPE_HUMAN_POW = 32
};

// Monster Traits

enum {
	// weaknesses
	DND_ENERGY_WEAKNESS,
	DND_SILVER_WEAKNESS,
	DND_FIRE_WEAKNESS,
	DND_ICE_WEAKNESS,
	DND_MAGIC_WEAKNESS,
	DND_ELEMENTAL_WEAKNESS,
	
	// resists
	DND_EXPLOSIVE_RESIST,
	DND_BULLET_RESIST,
	DND_ENERGY_RESIST,
	DND_MAGIC_RESIST,
	DND_ELEMENTAL_RESIST,
	
	// immune
	DND_EXPLOSIVE_IMMUNE,
	DND_EXPLOSIVE_NONE,
	DND_BULLET_IMMUNE,
	DND_ENERGY_IMMUNE,
	DND_MAGIC_IMMUNE,
	DND_ELEMENTAL_IMMUNE,
	
	// other
	DND_GHOST,
	DND_HARDENED_SKIN,
	DND_REFLECTIVE,
	DND_MINIONS,
	DND_CURSE,
	
	DND_HEAL,
	DND_BLOCK,
	DND_SPLIT,
	DND_RAISE,
	DND_TELEPORT,
	
	DND_RESURRECT,
	DND_MOBILITY,
	DND_HOMING,
	DND_POISON,
	DND_DEATH,

	DND_RAGE,
	DND_PIERCE,
	DND_AGGRESSIVE,
	DND_EXTRAFAST,
	DND_FASTREACTION,
	
	DND_NOPAIN,
	DND_EXTRASTRONG,
	DND_VITAL,
	DND_ARMORPEN,
	DND_PET,
	
	DND_ISBLOCKING,
	
	DND_SUMMONED,
	DND_REVIVED,
	DND_ICECREATURE,
	DND_FIRECREATURE,
	DND_STONECREATURE,
	DND_EARTHCREATURE,
	
	DND_BLOODLESS,
	DND_VIOLENTRETALIATION,
	DND_THIEF,
	DND_HEXFUSION,
	DND_REBIRTH,
	DND_VENOMANCER,
	DND_FRIGID,
	DND_SCORCHED,
	DND_INSULATED,
	DND_REJUVENATING,
	
	DND_HATRED,
	DND_SHOCKER,
	DND_VAMPIRISM,
	DND_FORTIFIED,
	DND_SUBORDINATE,
	DND_REPEL,
	DND_PHANTASM_TRAIT,
	DND_CRIPPLE,
	DND_RUINATION,
	DND_NUCLEAR,
	DND_SILENT,
	DND_OSMIUM,
	DND_PHASING,
	DND_OTHERWORLDGRIP,
	DND_THUNDERSTRUCK,
	DND_TEMPORALBUBBLE,
	DND_BLACKOUT,
	DND_ENSHROUDED,

	// not rollable special
	DND_ETHEREAL,
	DND_MARKOFCHAOS,
	
	DND_LEGENDARY,
	
	DND_NODROPS
};

const int DND_FORCEDLEVEL = 7;
const int DND_PASSLEVEL = 8;

Actor DnD_AttachedFXBase {
	+MISSILE
	+NOGRAVITY
	+NOCLIP
	+CLIENTSIDEONLY
	+NOTONAUTOMAP
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 2 ACS_NamedExecuteAlways("DnD Align Elite FX")
			TNT1 A 35 A_Jump(256, "SpawnLoop")
		Wait
		Disappear:
			TNT1 A 1 ACS_NamedExecuteWithResult("DnD Remove Actor - CS")
		Stop
	}
}

Actor EliteSpecialFX : DnD_AttachedFXBase {
	Height 2
	Radius 1
	Translation "112:127=%[0.00,0.00,0.00]:[1.79,1.88,0.02]"
	Scale 0.3
	Renderstyle Add
	Alpha 0.66
	Speed 1
	const float f = 0.0475;
	States {
		SpawnLoop:
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeOut(f)
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeOut(f)
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeOut(f)
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeOut(f)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Fade")
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeOut(f)
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeOut(f)
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeOut(f)
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeOut(f)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Fade")
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeIn(f)
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeIn(f)
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeIn(f)
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeIn(f)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Fade")
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeIn(f)
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeIn(f)
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeIn(f)
			SKFX A 1 Bright A_Warp(AAPTR_TARGET, 32, 32, mass, 5, WARPF_USECALLERANGLE | WARPF_INTERPOLATE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_FadeIn(f)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Fade")
		Loop
		Death:
		Fade:
			TNT1 A 3 ACS_NamedExecuteWithResult("DnD Remove Actor - CS")
		Stop
		Remove:
			TNT1 A 1
		Stop
	}
}

Actor EliteFXRunner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_CustomMissile("EliteSpecialFX", 32, 0, 0, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("EliteSpecialFX", 32, 0, 90, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("EliteSpecialFX", 32, 0, 180, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("EliteSpecialFX", 32, 0, 270, CMF_AIMDIRECTION)
			TNT1 A 0 A_CheckFlag("REFLECTIVE", "ReflectSpawn")
		Stop
		ReflectSpawn:
			TNT1 A 0 A_CustomMissile("EliteReflectingShield", 32, 0, 0, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("EliteReflectingShield", 32, 0, 120, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("EliteReflectingShield", 32, 0, 240, CMF_AIMDIRECTION)
		Stop
	}
}

Actor DnD_PetIcon : DnD_AttachedFXBase {
	Scale 0.4
	States {
		SpawnLoop:
            AMIN AAA 1 Bright A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
		Loop
		Death:
		Remove:
			TNT1 A 1
		Stop
	}
}

Actor DnD_PetEffectSpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_CustomMissile("DnD_PetIcon", 32, 0, 0, CMF_AIMDIRECTION)
		Stop
	}
}

Actor DnD_BlindIcon : DnD_AttachedFXBase {
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 ACS_NamedExecuteAlways("DnD Align Elite FX")
			TNT1 A 1 A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
		SpawnLoop:
            ESYM EEEE 1 Bright A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
			TNT1 A 0 A_JumpIfInTargetInventory("BlindCancelledSignal", 1, "Disappear")
			ESYM FFFF 1 Bright A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
			TNT1 A 0 A_JumpIfInTargetInventory("BlindCancelledSignal", 1, "Disappear")
			ESYM GGGG 1 Bright A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
			TNT1 A 0 A_JumpIfInTargetInventory("BlindCancelledSignal", 1, "Disappear")
			ESYM HHHH 1 Bright A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
			TNT1 A 0 A_JumpIfInTargetInventory("BlindCancelledSignal", 1, "Disappear")
		Loop
		Death:
			TNT1 A 1 ACS_NamedExecuteWithResult("DnD Remove Actor - CS")
		Stop
		Remove:
			TNT1 A 1
		Stop
	}
}

Actor DnD_NormalBlindSpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_CustomMissile("DnD_BlindIcon", 32, 0, 0, CMF_AIMDIRECTION)
		Stop
	}
}

Actor DnD_BlindIcon_Heavy : DnD_BlindIcon {
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 ACS_NamedExecuteAlways("DnD Align Elite FX")
			TNT1 A 1 A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
		SpawnLoop:
            ESYM IIII 1 Bright A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
			TNT1 A 0 A_JumpIfInTargetInventory("BlindCancelledSignal", 1, "Disappear")
			ESYM JJJJ 1 Bright A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
			TNT1 A 0 A_JumpIfInTargetInventory("BlindCancelledSignal", 1, "Disappear")
			ESYM KKKK 1 Bright A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
			TNT1 A 0 A_JumpIfInTargetInventory("BlindCancelledSignal", 1, "Disappear")
			ESYM LLLL 1 Bright A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
			TNT1 A 0 A_JumpIfInTargetInventory("BlindCancelledSignal", 1, "Disappear")
		Loop
	}
}

Actor DnD_HeavyBlindSpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_CustomMissile("DnD_BlindIcon_Heavy", 32, 0, 0, CMF_AIMDIRECTION)
		Stop
	}
}

Actor DnD_BlindIcon_Petrify : DnD_BlindIcon {
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 ACS_NamedExecuteAlways("DnD Align Elite FX")
			TNT1 A 1 A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
		SpawnLoop:
            ESYM AAAA 1 Bright A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
			TNT1 A 0 A_JumpIfInTargetInventory("BlindCancelledSignal", 1, "Disappear")
			ESYM BBBB 1 Bright A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
			TNT1 A 0 A_JumpIfInTargetInventory("BlindCancelledSignal", 1, "Disappear")
			ESYM CCCC 1 Bright A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
			TNT1 A 0 A_JumpIfInTargetInventory("BlindCancelledSignal", 1, "Disappear")
			ESYM DDDD 1 Bright A_Warp(AAPTR_TARGET, 0, 0, mass * 2, 0, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
			TNT1 A 0 A_JumpIfInTargetInventory("BlindCancelledSignal", 1, "Disappear")
		Loop
	}
}

Actor DnD_PetrifySpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_CustomMissile("DnD_BlindIcon_Petrify", 32, 0, 0, CMF_AIMDIRECTION)
		Stop
	}
}

Actor DnD_BlindCastCooldown : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration -5
}

Actor PetrifyBlindFX {
	renderstyle Add
	radius 1
	height 1
	Scale 0.2
	Alpha 0.5
	+MISSILE
	+NOGRAVITY
	+NOCLIP
	+CLIENTSIDEONLY
	states {
		Spawn:
			TNT1 A 1 NoDelay A_Warp(AAPTR_TARGET, mass, mass, 0, 0, WARPF_INTERPOLATE | WARPF_USECALLERANGLE | WARPF_NOCHECKPOSITION)
		SpawnLoop:
			FLAR DD 1 bright A_Warp(AAPTR_TARGET, mass, mass, 0, 0, WARPF_INTERPOLATE | WARPF_USECALLERANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIfInTargetInventory("BlindCancelledSignal", 1, "Disappear")
		Loop
		Disappear:
			TNT1 A 0
		Stop
	}
}

Actor NormalBlindFX : PetrifyBlindFX {
	states {
		Spawn:
			TNT1 A 1 NoDelay A_Warp(AAPTR_TARGET, mass, mass, 0, 0, WARPF_INTERPOLATE | WARPF_USECALLERANGLE | WARPF_NOCHECKPOSITION)
		SpawnLoop:
			FLAR CC 1 bright A_Warp(AAPTR_TARGET, mass, mass, 0, 0, WARPF_INTERPOLATE | WARPF_USECALLERANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIfInTargetInventory("BlindCancelledSignal", 1, "Disappear")
		Loop
	}
}

Actor HeavyBlindFX : PetrifyBlindFX {
	states {
		Spawn:
			TNT1 A 1 NoDelay A_Warp(AAPTR_TARGET, mass, mass, 0, 0, WARPF_INTERPOLATE | WARPF_USECALLERANGLE | WARPF_NOCHECKPOSITION)
		SpawnLoop:
			FLAR AA 1 bright A_Warp(AAPTR_TARGET, mass, mass, 0, 0, WARPF_INTERPOLATE | WARPF_USECALLERANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIfInTargetInventory("BlindCancelledSignal", 1, "Disappear")
		Loop
	}
}

Actor CrippleAuraFX : DnD_AttachedFXBase {
	Renderstyle Add
	Alpha 0.875
	Scale 3.0
	States {
		SpawnLoop:
			TNT1 A 1 ACS_NamedExecuteWithResult("DnD Aura Scale to Match")
		RealLoop:
			AURA AAAA 1 Bright A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE | WARPF_USECALLERANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
		Loop
	}
}

Actor CrippleAuraSpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_CustomMissile("CrippleAuraFX", 0, 0, 0, CMF_AIMDIRECTION)
		Stop
	}
}

Actor ViolentAuraFX : DnD_AttachedFXBase {
	Renderstyle Add
	Alpha 0.875
	Scale 3.0
	States {
		SpawnLoop:
			TNT1 A 1 ACS_NamedExecuteWithResult("DnD Aura Scale to Match")
		RealLoop:
			AURA BBBB 1 Bright A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_INTERPOLATE | WARPF_USECALLERANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
		Loop
	}
}

Actor ViolentAuraSpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_CustomMissile("ViolentAuraFX", 0, 0, 0, CMF_AIMDIRECTION)
		Stop
	}
}

Actor MonsterNuclearExplosion {
	PROJECTILE
	Damage 0
	Damagetype "ExplosionNuclear"
	+NOCLIP
	+NOINTERACTION
	+DONTBLAST
	+DONTREFLECT
	const float r = 96.0;
	const float s = 0.33;
	const float sr = 0.4;
	var int user_d;
	Height 2
	Radius 1
	Stamina 4
	States {
		Spawn:
			TNT1 A 0 NoDelay A_SpawnItemEx("NuclearExplosionFX")
			TNT1 A 247 A_SetUserVar("user_d", 0)
			TNT1 A 0 A_PlaySound("NuclearExplosion")
			TNT1 A 5 A_Explode(mass * (1.0 + s * user_d), r * (1.0 + sr * user_d)) 
			TNT1 A 0 A_SetUserVar("user_d", user_d + 1)
			TNT1 A 4 A_Explode(mass * (1.0 + s * user_d), r * (1.0 + sr * user_d)) 
			TNT1 A 0 A_SetUserVar("user_d", user_d + 1)
			TNT1 A 3 A_Explode(mass * (1.0 + s * user_d), r * (1.0 + sr * user_d)) 
			TNT1 A 0 A_SetUserVar("user_d", user_d + 1)
			TNT1 A 3 A_Explode(mass * (1.0 + s * user_d), r * (1.0 + sr * user_d)) 
			TNT1 A 0 A_SetUserVar("user_d", user_d + 1)
			TNT1 A 3 A_Explode(mass * (1.0 + s * user_d), r * (1.0 + sr * user_d)) 
			TNT1 A 0 A_SetUserVar("user_d", user_d + 1)
			TNT1 A 3 A_Explode(mass * (1.0 + s * user_d), r * (1.0 + sr * user_d)) 
			TNT1 A 0 A_SetUserVar("user_d", user_d + 1)
			TNT1 A 3 A_Explode(mass * (1.0 + s * user_d), r * (1.0 + sr * user_d)) 
			TNT1 A 0 A_SetUserVar("user_d", user_d + 1)
			TNT1 A 3 A_Explode(mass * (1.0 + s * user_d), r * (1.0 + sr * user_d)) 
			TNT1 A 0 A_SetUserVar("user_d", user_d + 1)
			TNT1 A 3 A_Explode(mass * (1.0 + s * user_d), r * (1.0 + sr * user_d)) 
			TNT1 A 0 A_SetUserVar("user_d", user_d + 1)
			TNT1 A 3 A_Explode(mass * (1.0 + s * user_d), r * (1.0 + sr * user_d)) 
		Stop
	}
}

Actor OtherworldGripCooldown : PowerDamage {
	powerup.duration -6
	damagefactor "normal", 1.0
}

Actor OtherwordlyGripDirt {
	radius 8
	height 2
	gravity 0.5
	+CLIENTSIDEONLY
	states {
		Spawn:
			TNT1 A 1
			TNT1 A 0 A_ChangeVelocity(random(-4, 4), random(-4, 4), random(2, 5), CVF_REPLACE)
			TNT1 A 0 A_Jump(256,"A","B","C")
		Wait
		A:
			DIRT ABC 3
		Goto Finish
		B:
			DIRT DEF 3
		Goto Finish
		C:
			DIRT GHI 3
		Finish:
			TNT1 A 0 A_Stop
			DIRT JKL 3
		stop
	}
}

Actor OtherworldGripDamager {
	PROJECTILE
	Damage (10)
	Speed 0
	Height 16
	Radius 4
	Stamina 2056
	+HITTRACER
	States {
		Spawn:
			TNT1 A 4
		Stop
		XDeath:
			TNT1 A 0 A_JumpIfInventory("GryphonCheck", 1, "Skip", AAPTR_TRACER)
			TNT1 A 0 A_GiveInventory("OtherworldSlow", 1, AAPTR_TRACER)
		Death:
		Skip:
			TNT1 A 1
		Stop
	}
}

Actor OtherwordlyGripHand {
	Height 1
	Radius 1
	Damage 0
	Scale 0.75
	Renderstyle Translucent
	+THRUACTORS
	+MISSILE
	+FLOORHUGGER
	+DONTBLAST
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_PlaySound("OtherwordlyGrip")
			TNT1 AAAA 0 A_SpawnItemEx("OtherwordlyGripDirt",0,0,8,0,0,0,0,0,176)
			TNT1 A 0 A_CustomMissile("OtherworldGripDamager", 8, 0, 0, CMF_TRACKOWNER)
			GRP1 A 2 A_SpawnItemEx("OtherwordlyGripDirt",0,0,8,0,0,0,0,0,176)
			GRP1 B 2 A_SpawnItemEx("OtherwordlyGripDirt",0,0,8,0,0,0,0,0,176)
			TNT1 A 0 A_CustomMissile("OtherworldGripDamager", 8, 0, 0, CMF_TRACKOWNER)
			GRP1 C 2 A_SpawnItemEx("OtherwordlyGripDirt",0,0,8,0,0,0,0,0,176)
			GRP1 D 2 A_SpawnItemEx("OtherwordlyGripDirt",0,0,8,0,0,0,0,0,176)
			TNT1 A 0 A_CustomMissile("OtherworldGripDamager", 8, 0, 0, CMF_TRACKOWNER)
			GRP1 EF 2
			TNT1 A 0 A_CustomMissile("OtherworldGripDamager", 8, 0, 0, CMF_TRACKOWNER)
			GRP1 GHIJKL 2
			GRP1 M 35
		Goto Fade
		Fade:
			GRP1 M 2 A_Fadeout(0.02)
		Loop
	}
}

Actor ThunderstruckCooldown : PowerProtection {
	damagefactor "normal", 1.0
	powerup.duration -10
}

Actor ThunderstruckLightning {
	Renderstyle Add
	Alpha 0.4
	Height 1
	Radius 1
	Damage 0
	Stamina 256
	PROJECTILE
	const float fx_r = 72.0;
	const float r = 32.0;
	const float v = 5.0;
	const float a = 0.15;
	+PIERCEARMOR
	+THRUACTORS
	+DONTBLAST
	+DONTREFLECT
	+FLOORHUGGER
	Translation "0:255=%[0.00,0.00,0.00]:[0.375,0.575,0.875]"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_PlaySound("Thunderstruck/Buildup", CHAN_5)
			TNT1 A 0 A_Jump(128, "B", "C", "D", "E", "F")
			UP27 A 0
		Goto Anim
		B:
			UP27 B 0
		Goto Anim
		C:
			UP27 C 0
		Goto Anim
		D:
			UP27 D 0
		Goto Anim
		E:
			UP27 E 0
		Goto Anim
		F:
			UP27 F 0
		Goto Anim
		Anim:
			"####" "######" 0 A_SpawnItemEx("ThunderstruckLightning_Telegraph", frandom(-fx_r, fx_r), frandom(-fx_r, fx_r))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3 A_SpawnItemEx("ThunderstruckVFX", frandom(-r, r), frandom(-r, r), frandom(2, 8), frandom(-v, v), frandom(-v, v), frandom(0.5, v / 2))
			"####" "###" 1 A_FadeIn(0.4)
			"####" "#####" 0 A_CustomMissile("RocketSmoke", 0, 0, random(0, 360), 2, random(0, 180))
			"####" "########" 0 A_CustomMissile("RocketSmoke", 0, 0, random(0, 360), 2, random(0, 360))
			"####" "#########" 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 180))
			"####" "##############" 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 360))
			"####" "#" 0 A_Explode(random(8, 12) * 20, 192, 0)
			"####" "#" 0 A_PlaySound("Abaxoth/Thunder")
			"####" "###########" 1 A_FadeOut(0.05)
		Stop
	}
}

Actor ThunderstruckLightning_Telegraph {
	Alpha 0.4
	Scale 0.666
	Translation "0:255=%[0.00,0.00,0.00]:[0.375,0.575,0.875]"
	const float a = 0.15;
	Renderstyle Add
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_PlaySound("Thunderstruck/Buildup", CHAN_5)
			TNT1 A 0 A_Jump(128, "B", "C", "D", "E", "F")
			UP27 A 0
		Goto Anim
		B:
			UP27 B 0
		Goto Anim
		C:
			UP27 C 0
		Goto Anim
		D:
			UP27 D 0
		Goto Anim
		E:
			UP27 E 0
		Goto Anim
		F:
			UP27 F 0
		Goto Anim
		Anim:
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeIn(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "#" 0 A_FadeOut(a)
			"####" "#" 3
			"####" "###" 1 A_FadeIn(0.4)
			"####" "###########" 1 A_FadeOut(0.05)
		Stop
	}
}

Actor ThunderstruckVFX {
	Renderstyle Add
	Alpha 0.01
	Scale 0.25
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			TNT1 A 0 NoDelay A_Jump(256, "A", "B", "C", "D", "E", "F", "G", "H", "I", "J")
		A:
			DB08 A 0
		Goto Fade
		B:
			DB08 B 0
		Goto Fade
		C:
			DB08 C 0
		Goto Fade
		D:
			DB08 D 0
		Goto Fade
		E:
			DB08 E 0
		Goto Fade
		F:
			DB08 F 0
		Goto Fade
		G:
			DB08 G 0
		Goto Fade
		H:
			DB08 H 0
		Goto Fade
		I:
			DB08 I 0
		Goto Fade
		J:
			DB08 J 0
		Fade:
			"####" "#########" 1 A_FadeIn(0.0875)
		Out:
			"####" "#" 1 A_FadeOut(0.033)
		Loop
	}
}

Actor TemporalBubbleFX : DnD_AttachedFXBase {
	Scale 0.25
	Renderstyle Add
	Alpha 0.9
	States {
		SpawnLoop:
			TNT1 A 1 ACS_NamedExecuteWithResult("DnD Aura Scale to Match")
		RealLoop:
			TBUB AAAA 1 Bright A_Warp(AAPTR_TARGET, 0, 0, mass, 0, WARPF_INTERPOLATE | WARPF_USECALLERANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
			TNT1 A 0 A_JumpIfInTargetInventory("TemporalBubbleCooldown", 1, "Pop")
		Loop
		Pop:
			TBUB AAAAA 1 A_FadeOut(0.2)
		Stop
	}
}

Actor TemporalBubbleSpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_CustomMissile("TemporalBubbleFX", 0, 0, 0, CMF_AIMDIRECTION)
		Stop
	}
}

Actor TemporalBubbleCooldown : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration -21
}

Actor BlackoutTimer : DnD_Info { }

// from AEOD, by DBDThanatos and MajorCooke
Actor EnshroudFX : DnD_AttachedFXBase {
	RenderStyle Translucent
	Alpha 0.675
	Scale 0.475
	var int user_x;
	var int user_y;
	var int user_z;
	var int user_a;
	States {
		SpawnLoop:
			TNT1 A 0
		Choose1of4:
			TNT1 A 0 A_Jump(256,"R1","R2","R3","R4")

		R1:
			TNT1 A 0 A_Jump(256,"T1","T2","T3","T4","T5","T6","T7","T8","T9","T10","T11","T12","T13","T14","T15","T16","T17","T18","T19","T20","T21","T22")
		T1:	X038 A 0 A_Jump(256,"Behavior")
		T2:	X038 B 0 A_Jump(256,"Behavior")
		T3:	X038 C 0 A_Jump(256,"Behavior")
		T4:	X038 D 0 A_Jump(256,"Behavior")
		T5:	X038 E 0 A_Jump(256,"Behavior")
		T6:	X038 F 0 A_Jump(256,"Behavior")
		T7:	X038 G 0 A_Jump(256,"Behavior")
		T8:	X038 H 0 A_Jump(256,"Behavior")
		T9:	X038 I 0 A_Jump(256,"Behavior")
		T10:	X038 J 0 A_Jump(256,"Behavior")
		T11:	X038 K 0 A_Jump(256,"Behavior")
		T12:	X038 L 0 A_Jump(256,"Behavior")
		T13:	X038 M 0 A_Jump(256,"Behavior")
		T14:	X038 N 0 A_Jump(256,"Behavior")
		T15:	X038 O 0 A_Jump(256,"Behavior")
		T16:	X038 P 0 A_Jump(256,"Behavior")
		T17:	X038 Q 0 A_Jump(256,"Behavior")
		T18:	X038 R 0 A_Jump(256,"Behavior")
		T19:	X038 S 0 A_Jump(256,"Behavior")
		T20:	X038 T 0 A_Jump(256,"Behavior")
		T21:	X038 U 0 A_Jump(256,"Behavior")
		T22:	X038 V 0 A_Jump(256,"Behavior")
		R2:
			TNT1 A 0 A_Jump(256,"U1","U2","U3","U4","U5","U6","U7","U8","U9","U10","U11","U12","U13","U14","U15","U16","U17","U18","U19","U20","U21","U22")
		U1:	X039 A 0 A_Jump(256,"Behavior")
		U2:	X039 B 0 A_Jump(256,"Behavior")
		U3:	X039 C 0 A_Jump(256,"Behavior")
		U4:	X039 D 0 A_Jump(256,"Behavior")
		U5:	X039 E 0 A_Jump(256,"Behavior")
		U6:	X039 F 0 A_Jump(256,"Behavior")
		U7:	X039 G 0 A_Jump(256,"Behavior")
		U8:	X039 H 0 A_Jump(256,"Behavior")
		U9:	X039 I 0 A_Jump(256,"Behavior")
		U10:	X039 J 0 A_Jump(256,"Behavior")
		U11:	X039 K 0 A_Jump(256,"Behavior")
		U12:	X039 L 0 A_Jump(256,"Behavior")
		U13:	X039 M 0 A_Jump(256,"Behavior")
		U14:	X039 N 0 A_Jump(256,"Behavior")
		U15:	X039 O 0 A_Jump(256,"Behavior")
		U16:	X039 P 0 A_Jump(256,"Behavior")
		U17:	X039 Q 0 A_Jump(256,"Behavior")
		U18:	X039 R 0 A_Jump(256,"Behavior")
		U19:	X039 S 0 A_Jump(256,"Behavior")
		U20:	X039 T 0 A_Jump(256,"Behavior")
		U21:	X039 U 0 A_Jump(256,"Behavior")
		U22:	X039 V 0 A_Jump(256,"Behavior")
		R3:
			TNT1 A 0 A_Jump(256,"V1","V2","V3","V4","V5","V6","V7","V8","V9","V10","V11","V12","V13","V14","V15","V16","V17","V18","V19","V20","V21","V22")
		V1:	x040 A 0 A_Jump(256,"Behavior")
		V2:	x040 B 0 A_Jump(256,"Behavior")
		V3:	x040 C 0 A_Jump(256,"Behavior")
		V4:	x040 D 0 A_Jump(256,"Behavior")
		V5:	x040 E 0 A_Jump(256,"Behavior")
		V6:	x040 F 0 A_Jump(256,"Behavior")
		V7:	x040 G 0 A_Jump(256,"Behavior")
		V8:	x040 H 0 A_Jump(256,"Behavior")
		V9:	x040 I 0 A_Jump(256,"Behavior")
		V10:	x040 J 0 A_Jump(256,"Behavior")
		V11:	x040 K 0 A_Jump(256,"Behavior")
		V12:	x040 L 0 A_Jump(256,"Behavior")
		V13:	x040 M 0 A_Jump(256,"Behavior")
		V14:	x040 N 0 A_Jump(256,"Behavior")
		V15:	x040 O 0 A_Jump(256,"Behavior")
		V16:	x040 P 0 A_Jump(256,"Behavior")
		V17:	x040 Q 0 A_Jump(256,"Behavior")
		V18:	x040 R 0 A_Jump(256,"Behavior")
		V19:	x040 S 0 A_Jump(256,"Behavior")
		V20:	x040 T 0 A_Jump(256,"Behavior")
		V21:	x040 U 0 A_Jump(256,"Behavior")
		V22:	x040 V 0 A_Jump(256,"Behavior")
		R4:
			TNT1 A 0 A_Jump(256,"W1","W2","W3","W4","W5","W6","W7","W8","W9","W10","W11","W12","W13","W14","W15","W16","W17","W18","W19","W20","W21","W22")
		W1:	x041 A 0 A_Jump(256,"Behavior")
		W2:	x041 B 0 A_Jump(256,"Behavior")
		W3:	x041 C 0 A_Jump(256,"Behavior")
		W4:	x041 D 0 A_Jump(256,"Behavior")
		W5:	x041 E 0 A_Jump(256,"Behavior")
		W6:	x041 F 0 A_Jump(256,"Behavior")
		W7:	x041 G 0 A_Jump(256,"Behavior")
		W8:	x041 H 0 A_Jump(256,"Behavior")
		W9:	x041 I 0 A_Jump(256,"Behavior")
		W10:	x041 J 0 A_Jump(256,"Behavior")
		W11:	x041 K 0 A_Jump(256,"Behavior")
		W12:	x041 L 0 A_Jump(256,"Behavior")
		W13:	x041 M 0 A_Jump(256,"Behavior")
		W14:	x041 N 0 A_Jump(256,"Behavior")
		W15:	x041 O 0 A_Jump(256,"Behavior")
		W16:	x041 P 0 A_Jump(256,"Behavior")
		W17:	x041 Q 0 A_Jump(256,"Behavior")
		W18:	x041 R 0 A_Jump(256,"Behavior")
		W19:	x041 S 0 A_Jump(256,"Behavior")
		W20:	x041 T 0 A_Jump(256,"Behavior")
		W21:	x041 U 0 A_Jump(256,"Behavior")
		W22:	x041 V 0 A_Jump(256,"Behavior")
			
		Behavior:
			"####" "#" 0 A_SetUserVar("user_x", score * frandom(0.25, 0.925))
			"####" "#" 0 A_SetUserVar("user_y", score * frandom(0.25, 0.925))
			"####" "#" 0 A_SetUserVar("user_z", mass * frandom(0.5, 1.75))
			"####" "#" 0 A_SetUserVar("user_a", random(0, 360))
			"####" "#" 1 ACS_NamedExecuteWithResult("DnD Aura Scale to Match")
		FollowAround:
            "####" "####" 1 Bright A_Warp(AAPTR_TARGET, user_x, user_y, user_z, user_a, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
			"####" "#" 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
		Loop
	}
}

Actor EnshroudFXSpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 AAAAAAA 0 A_CustomMissile("EnshroudFX", 0, 0, 0, CMF_AIMDIRECTION)
		Stop
	}
}