Actor MakeExplosiveHighResist : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("NORADIUSDMG", 1)
		Stop
	}
}

Actor MakeHardenedSkin : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("DONTRIP", 1)
		Stop
	}
}

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

Actor UnMakeGhost : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("GHOST", 0)
		Stop
	}
}

Actor MakeReflective : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("REFLECTIVE", 1)
		Stop
	}
}

Actor MakeAggressive : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("MISSILEMORE", 1)
			TNT1 A 0 A_ChangeFlag("MISSILEEVENMORE", 1)
			TNT1 A 0 A_ChangeFlag("NOFEAR", 1)
		Stop
	}
}

Actor MakeFaster : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("ALWAYSFAST", 1)
		Stop
	}
}

Actor MakeFriendly : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("FRIENDLY", 1)
		Stop
	}
}

Actor UnMakeFaster : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("ALWAYSFAST", 0)
		Stop
	}
}

Actor MakeRetaliate : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("QUICKTORETALIATE", 1)
		Stop
	}
}

Actor MakePierce : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("PIERCEARMOR", 1)
		Stop
	}
}

Actor MakeNoPain : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Monster Trait Give", DND_NOPAIN, -1, -1, -1)
			TNT1 A 0 A_ChangeFlag("NOPAIN", 1)
		Stop
	}
}

Actor MakeHatred : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("NOTARGET", 1)
			TNT1 A 0 A_ChangeFlag("NOINFIGHTING", 1)
		Stop
	}
}

Actor TakeNoPain : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Monster Trait Take", DND_NOPAIN, -1, -1, -1)
			TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
		Stop
	}
}

Actor AllowFlight : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 1)
		Stop
	}
}

Actor TakeFlight : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0)
		Stop
	}
}

Actor AllowFloat : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("FLOAT", 1)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 1)
		Stop
	}
}

Actor TakeFloat : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("FLOAT", 0)
		Stop
	}
}

Actor MakePhysicalResist : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("NOBLOOD", 1)
		Stop
	}
}

Actor MakeReflectiveInvulnerable : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Monster Trait Give", 0, DND_ISBLOCKING)
			TNT1 A 0 A_SetReflective
		Stop
	}
}

Actor TakeReflectiveInvulnerable : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Monster Trait Take", 0, DND_ISBLOCKING)
			TNT1 A 0 A_UnSetReflective
		Stop
	}
}

Actor DnD_RebirthItem : DnD_Activator {
	States {
		Pickup:
			TNT1 AAA 0 A_SpawnItemEx("ReiverGhost_NoExp_NoSolid", 8, 0, height / 2, 0, 0, 0, 0, SXF_NOCHECKPOSITION | SXF_SETMASTER)
		Stop
	}
}

Actor PlayerStopper : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_PlaySound("Elite/ShockerHit", CHAN_ITEM)
		Stop
	}
}

Actor RejuvenationFX_Spawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_SpawnItemEx("RegenEffectSpawner", 0, 0, height / 4)
		Stop
	}
}

Actor DarkHealFX_Spawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_SpawnItemEx("DarkHealEffectSpawner", 0, 0, height / 4)
		Stop
	}
}

Actor MonsterFortifyCount : Inventory {
	inventory.maxamount 0x7FFFFFFF
}

Actor Rejuvenate_Script_Run : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Rejuvenation")
		Stop
	}
}

Actor ChaosMark_Script_Run : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ChangeFlag("NOTARGET", 1)
			TNT1 A 0 A_ChangeFlag("NOINFIGHTING", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Chaos Mark Script")
		Stop
	}
}

Actor ChaosMarkFX {
	Renderstyle Add
	Alpha 0.9
	+CLIENTSIDEONLY
	+NoInteraction
	States {
		Spawn:
			CMRK AB 4 Bright
		Loop
		Vanish:
			TNT1 A 1
		Stop
	}
}

Actor SubordinateSpawnFX {
	Renderstyle Add
	Alpha 1.0
	+NOINTERACTION
	+CLIENTSIDEONLY
	States {
		Spawn:
			TNT1 A 0 NoDelay A_PlaySound("Elite/SubordinateSpawn")
			RW6A EF 3 Bright
			TNT1 A 0 A_ChangeVelocity(0, 0, 2.0)
			RW6A GHI 4 Bright
			RW6A JJJJJJJJJJJ 2 Bright A_FadeOut(0.075)
		Stop
	}
}

Actor SubordinateFXSpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_SpawnItemEx("SubordinateSpawnFX", 0, 0, height / 2 + 12)
			TNT1 A 0 A_SpawnItemEx("ExplosionFlare", 0, 0, height / 2 + 12)
			TNT1 AAAAAAAAAAA 0 A_SpawnItemEx("InterventionFX", random(-8,8), random(-8,8), random(-8,8) + height / 2, random(-12,12), random(-12,12), random(-2,12))
		Stop
	}
}

Actor RepelPulseFXSpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_SpawnItemEx("TorrasqueDeflectFX", 0, 0, 32)
			TNT1 A 0 A_SpawnItemEx("GrayFlare", 0, 0, height / 2 + 8.0)
		Stop
	}
}

Actor Repel_Script_Run : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Repel")
		Stop
	}
}

Actor Cripple_Script_Run : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Cripple")
		Stop
	}
}

Actor Phasing_Script_Run : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Phasing")
		Stop
	}
}

Actor CrippleSlower : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("CrippleSlowPower", 1, "SkipSound")
			TNT1 A 0 A_PlaySound("Elite/CrippleFX")
		SkipSound:
			TNT1 A 0 A_GiveInventory("CrippleSlowPower", 1)
		Stop
	}
}

Actor CrippleSlowPower : PowerSpeed {
	Speed 0.5
	Powerup.Duration 35
	//Powerup.Color "99 66 00"
	//+INVENTORY.NOSCREENBLINK
}

Actor RuinationStacks : Inventory {
	inventory.maxamount 7
}

Actor RuinationHardDebuff : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration -5
	Powerup.Color "33 33 99"
}

Actor RuinBlend : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_SetBlend("33 33 99", 1.0, 35)
		Stop
	}
}

Actor ViolentRetaliation_Proj {
	Radius 6
	Height 12
	Damage (5 * random(4, 5))
	Scale 0.65
	Gravity 0.33
	Projectile
	DeathSound "Mafibus/Hit"
	Decal Scorch
	damagetype "FattyFire"
	+DONTBLAST
	-NOGRAVITY
	States {
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DnD Pierce Check")
		SpawnLoop:
			MFBL A 0 A_PlaySoundEx("Mafibus/Loop", "SoundSlot7", 1, -1)
			MFBL AAAABBBBCCCC 1 Bright A_SpawnItemEx("MafibusBallTrail", 0, 0, 0, 0, 0, 0, 0, 128)
		Loop
		Death:
			TNT1 A 0 A_SpawnItemEx("OrangeParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAAA 0 A_SpawnItemEx("ExplosionFX2", 0, 0, 0, frandom(-1, 1), frandom(-1, 1), frandom(-1, 1))
			TNT1 AAAAAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			MFBL A 0 A_StopSoundEx("SoundSlot7")
			TNT1 A 0 A_Explode(64, 96, 0)
			MFBL DE 4 Bright
			MFBL F 4 Bright A_SetTranslucent(0.7, 1)
			MFBL G 4 Bright A_SetTranslucent(0.4, 1)
			MFBL HI 4 Bright
		Stop
	}
}

Actor DnD_ViolentRetaliationItem : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_ThrowGrenade("ViolentRetaliation_Proj", frandom(-15, -8 + height / 2), random(-13, 13),frandom(2, 9),0)
		Stop
	}
}

Actor EliteReflectingShield {
	+MISSILE
	+NOGRAVITY
	+NOCLIP
	+CLIENTSIDEONLY
	+NOINTERACTION
	const float ai = 12.0;
	var int user_angle;
	States {
		Spawn:
			TNT1 A 0 NoDelay A_SetUserVar("user_angle", angle)
			TNT1 A 2 ACS_NamedExecuteAlways("DnD Align Elite FX")
		SpawnLoop:
            REFL AA 1 Bright A_Warp(AAPTR_TARGET, score + 8, 0, mass, user_angle, WARPF_INTERPOLATE | WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Elite Clear"), "Disappear")
			TNT1 A 0 A_SetUserVar("user_angle", (user_angle + ai) % 360)
		Loop
		Death:
		Disappear:
			TNT1 A 1 ACS_NamedExecuteWithResult("DnD Remove Actor - CS")
		Stop
		Remove:
			TNT1 A 1
		Stop
	}
}

// Colliders

enum {
	DND_REVENANT_COLLIDER
};

Actor RevenantCollider {
	Height 56
	Radius 20
	+SOLID
	States {
		Spawn:
			TNT1 A 1
		Stop
	}
}