enum {
	DND_ARMOR_BONUS,
	DND_ARMOR_GREEN,
	DND_ARMOR_YELLOW,
	DND_ARMOR_BLUE,
	DND_ARMOR_RED,
	
	DND_ARMOR_GUNSLINGER,
	DND_ARMOR_OCCULT,
	DND_ARMOR_DEMO,
	DND_ARMOR_ENERGY,
	DND_ARMOR_ELEMENTAL,
	
	DND_ARMOR_SUPER,
	DND_ARMOR_CYBERNETIC,
	DND_ARMOR_DUELIST,
	DND_ARMOR_NECRO,
	DND_ARMOR_KNIGHT,
	DND_ARMOR_RAVAGER
};

const int DND_BASE_ARMORCAP = 300;

Actor DnD_ArmorType : DnD_Info { }

Actor DnD_ArmorBonus : BasicArmorBonus {
	Armor.SavePercent 33.335
	Armor.SaveAmount 1
	Armor.MaxSaveAmount 16000
	inventory.icon "BON2A0"
}

Actor NewArmorBonus : CustomInventory replaces ArmorBonus {
	Radius 20
	Height 16
	Renderstyle Translucent
	inventory.pickupmessage "\ccArmor pickup  : \c[Y5]Armor Bonus x 1\c-"
	inventory.pickupsound "items/armorbonus"
	+COUNTITEM
	States {
		Spawn:
			BON2 ABCDCB 4
		Loop
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DND Armor Give", 0, DND_ARMOR_BONUS, 1)
		Stop
	}
}

Actor NewGreenArmor : BasicArmorPickup {
	Inventory.Icon "ARM1A0"
	Armor.SavePercent 33.335
	Armor.SaveAmount 1
}

Actor GreenArmorPickup : CustomInventory {
	Radius 20
	Height 16
	Renderstyle Translucent
	States
	{
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DND Shared Item Init", 0, SHI_GREENARMOR)
		Idle:
			ARM1 AAAAAA 1 Light("GREENARMOR1") A_SpawnItemEx("InvulnerabilitySphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
			ARM1 BBBBBBB 1 Light("GREENARMOR2") Bright A_SpawnItemEx("InvulnerabilitySphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
		Loop
		IdlePicked:
			ARM1 B -1
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(!ACS_NamedExecuteWithResult("DND Shared Item Check"), "ActualPickup")
		Goto Failed
		ActualPickup:
			TNT1 A 0 A_JumpIf(1 == ACS_NamedExecuteWithResult("DND Armor Pickup Check", 100, DND_ARMOR_GREEN), "Success")
		Goto Failed
		Failed:
			TNT1 A 0 ACS_NamedExecuteAlways("DND Shared Item Clear Semaphore", 0)
		Fail
		Success:
			TNT1 A 0 ACS_NamedExecuteAlways("DND Shared Item Pickup", 0)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Armor Give", 0, DND_ARMOR_GREEN, 100)
			TNT1 A 0 A_GiveInventory("GreenArmorMsg", 1)
		Fail
	}
}

Actor GreenArmor_SP : GreenArmorPickup {
	inventory.pickupsound "Items/armor"
	inventory.pickupmessage "\ccArmor pickup  : \c[Y5]Green Armor 33%\c-"
	States
	{
		Spawn:
			ARM1 AAAAAA 1 Light("GREENARMOR1") A_SpawnItemEx("InvulnerabilitySphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
			ARM1 BBBBBBB 1 Light("GREENARMOR2") Bright A_SpawnItemEx("InvulnerabilitySphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
		Loop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_NamedExecuteWithResult("DND Armor Pickup Check", 100, DND_ARMOR_GREEN), "Success")
		Goto Failed
		Failed:
			TNT1 A 0
		Fail
		Success:
			TNT1 A 0 ACS_NamedExecuteAlways("DND Armor Give", 0, DND_ARMOR_GREEN, 100)
		Stop
	}
}

Actor GreenArmorMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_ExecuteAlways(985, 0, 3, SHI_GREENARMOR)
			TNT1 A 0 A_PlaySound("Items/armor", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor NewBlueArmor : BasicArmorPickup {
	Inventory.Icon "ARM2A0"
	Armor.SavePercent 50
	Armor.SaveAmount 1
}

Actor BlueArmorPickup : CustomInventory {
	Radius 20
	Height 16
	Renderstyle Translucent
	States
	{
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DND Shared Item Init", 0, SHI_BLUEARMOR)
		Idle:
			ARM2 AAAAAA 1 Light("BLUEARMOR1") A_SpawnItemEx("SoulSphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
			ARM2 BBBBBBB 1 Light("BLUEARMOR2") Bright A_SpawnItemEx("SoulSphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
		Loop
		IdlePicked:
			ARM2 B -1
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(!ACS_NamedExecuteWithResult("DND Shared Item Check"), "ActualPickup")
		Goto Failed
		ActualPickup:
			TNT1 A 0 A_JumpIf(1 == ACS_NamedExecuteWithResult("DND Armor Pickup Check", 200, DND_ARMOR_BLUE), "Success")
		Goto Failed
		Failed:
			TNT1 A 0 ACS_NamedExecuteAlways("DND Shared Item Clear Semaphore", 0)
		Fail
		Success:
			TNT1 A 0 ACS_NamedExecuteAlways("DND Shared Item Pickup", 0)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Armor Give", 0, DND_ARMOR_BLUE, 200)
			TNT1 A 0 A_GiveInventory("BlueArmorMsg", 1)
		Fail
	}
}

Actor BlueArmor_SP : GreenArmorPickup {
	inventory.pickupsound "Items/armor"
	inventory.pickupmessage "\ccArmor pickup  : \c[Y5]Blue Armor 50%\c-"
	States
	{
		Spawn:
			ARM2 AAAAAA 1 Light("BLUEARMOR1") A_SpawnItemEx("SoulSphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
			ARM2 BBBBBBB 1 Light("BLUEARMOR2") Bright A_SpawnItemEx("SoulSphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
		Loop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_NamedExecuteWithResult("DND Armor Pickup Check", 200, DND_ARMOR_BLUE), "Success")
		Goto Failed
		Failed:
			TNT1 A 0
		Fail
		Success:
			TNT1 A 0 ACS_NamedExecuteAlways("DND Armor Give", 0, DND_ARMOR_BLUE, 200)
		Stop
	}
}

Actor BlueArmorMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_ExecuteAlways(985, 0, 3, SHI_BLUEARMOR)
			TNT1 A 0 A_PlaySound("Items/armor", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor YellowArmor : BasicArmorPickup {
    Inventory.Icon "ARM3A0"
    Armor.SavePercent 41.6675
	Armor.SaveAmount 1
}

Actor YellowArmorPickup : CustomInventory {
	Radius 20
	Height 16
	Renderstyle Translucent
	States
	{
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DND Shared Item Init", 0, SHI_YELLOWARMOR)
		Idle:
			ARM3 AAAAAA 1 Light("YELLOWARMOR1")  A_SpawnItemEx("EvilSphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
			ARM3 BBBBBBB 1 Light("YELLOWARMOR2") Bright A_SpawnItemEx("EvilSphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
		Loop
		IdlePicked:
			ARM3 B -1
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(!ACS_NamedExecuteWithResult("DND Shared Item Check"), "ActualPickup")
		Goto Failed
		ActualPickup:
			TNT1 A 0 A_JumpIf(1 == ACS_NamedExecuteWithResult("DND Armor Pickup Check", 150, DND_ARMOR_YELLOW), "Success")
		Goto Failed
		Failed:
			TNT1 A 0 ACS_NamedExecuteAlways("DND Shared Item Clear Semaphore", 0)
		Fail
		Success:
			TNT1 A 0 ACS_NamedExecuteAlways("DND Shared Item Pickup", 0)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Armor Give", 0, DND_ARMOR_YELLOW, 150)
			TNT1 A 0 A_GiveInventory("YellowArmorMsg", 1)
		Fail
	}
}

Actor YellowArmor_SP : GreenArmorPickup {
	inventory.pickupsound "Items/armor"
	inventory.pickupmessage "\ccArmor pickup  : \c[Y5]Yellow Armor 42%\c-"
	States
	{
		Spawn:
			ARM3 AAAAAA 1 Light("YELLOWARMOR1")  A_SpawnItemEx("EvilSphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
			ARM3 BBBBBBB 1 Light("YELLOWARMOR2") Bright A_SpawnItemEx("EvilSphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
		Loop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_NamedExecuteWithResult("DND Armor Pickup Check", 150, DND_ARMOR_YELLOW), "Success")
		Goto Failed
		Failed:
			TNT1 A 0
		Fail
		Success:
			TNT1 A 0 ACS_NamedExecuteAlways("DND Armor Give", 0, DND_ARMOR_YELLOW, 150)
		Stop
	}
}

Actor YellowArmorMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_ExecuteAlways(985, 0, 3, SHI_YELLOWARMOR)
			TNT1 A 0 A_PlaySound("Items/armor", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor TheRedArmor : BasicArmorPickup {
	Inventory.Icon "QRARB0"
	Armor.Savepercent 75.0
	Armor.SaveAmount 1
}

Actor RedArmorPickup : CustomInventory {
	Radius 20
	Height 16
	Renderstyle Translucent
	States
	{
		Spawn:
			TNT1 A 0 NoDelay ACS_NamedExecuteAlways("DND Shared Item Init", 0, SHI_REDARMOR)
		Idle:
			QRAR AAAAAAA 1 Light("THEREDARMOR1") Bright A_SpawnItemEx("UberSphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
			QRAR BBBBBB 1 Light("THEREDARMOR2") A_SpawnItemEx("UberSphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
		Loop
		IdlePicked:
			QRAR B -1
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(!ACS_NamedExecuteWithResult("DND Shared Item Check"), "ActualPickup")
		Goto Failed
		ActualPickup:
			TNT1 A 0 A_JumpIf(1 == ACS_NamedExecuteWithResult("DND Armor Pickup Check", 300, DND_ARMOR_RED), "Success")
		Goto Failed
		Failed:
			TNT1 A 0 ACS_NamedExecuteAlways("DND Shared Item Clear Semaphore", 0)
		Fail
		Success:
			TNT1 A 0 ACS_NamedExecuteAlways("DND Shared Item Pickup", 0)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Armor Give", 0, DND_ARMOR_RED, 300)
			TNT1 A 0 A_GiveInventory("RedArmorMsg", 1)
		Fail
	}
}

Actor RedArmor_SP : GreenArmorPickup {
	inventory.pickupsound "Items/armor"
	inventory.pickupmessage "\ccArmor pickup  : \c[Y5]Red Armor 75%\c-"
	States
	{
		Spawn:
			QRAR AAAAAAA 1 Light("THEREDARMOR1") Bright A_SpawnItemEx("UberSphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
			QRAR BBBBBB 1 Light("THEREDARMOR2") A_SpawnItemEx("UberSphereFX", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, SXF_CLIENTSIDE, 0)
		Loop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_NamedExecuteWithResult("DND Armor Pickup Check", 300, DND_ARMOR_RED), "Success")
		Goto Failed
		Failed:
			TNT1 A 0
		Fail
		Success:
			TNT1 A 0 ACS_NamedExecuteAlways("DND Armor Give", 0, DND_ARMOR_RED, 300)
		Stop
	}
}

Actor RedArmorMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_ExecuteAlways(985, 0, 3, SHI_REDARMOR)
			TNT1 A 0 A_PlaySound("Items/armor", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor GreenArmorSpawner : Randomspawner replaces GreenArmor {
	DropItem "GreenArmorPickup", 255, 16
	DropItem "YellowArmorPickup", 255, 8
}

Actor BlueArmorSpawner : Randomspawner replaces BlueArmor
{
	DropItem "BlueArmorPickup", 255, 16
	DropItem "RedArmorPickup", 255, 4
}

Actor CyberneticArmor : BasicArmorPickup {
	Armor.SavePercent 45.0
	Armor.SaveAmount 1
	inventory.icon "ARM4A1"
}

Actor DuelistArmor : BasicArmorPickup {
	Armor.SavePercent 33.0
	Armor.SaveAmount 1

	DamageFactor "Bullet", 0.0
	DamageFactor "FattyBullet", 0.0
	DamageFactor "ArachnoBullet", 0.0
	DamageFactor "FattyBullet", 0.0
	DamageFactor "VileBullet", 0.0
	DamageFactor "BigSpiderBullet", 0.0
	DamageFactor "CyberBullet", 0.0
	
	inventory.icon "ARM5A0"
}

Actor NecroArmor : BasicArmorPickup {
	Armor.SavePercent 45.0
	Armor.SaveAmount 1
	inventory.icon "ARM6A0"
}

const float NECRO_BULK_SCALE = 0.1;

Actor KnightArmor : BasicArmorPickup {
	Armor.SavePercent 35.0
	Armor.SaveAmount 1
	
	DamageFactor "Melee", 0.5
	
	inventory.icon "ARM7A0"
}

Actor RavagerArmor : BasicArmorPickup {
	Armor.SavePercent 25.0
	Armor.SaveAmount 1
	inventory.icon "ARM8A0"
}

Actor GunSlingerArmor : BasicArmorPickup {
	Armor.SavePercent 25.0
	Armor.SaveAmount 1

	DamageFactor "Bullet", 0.25
	DamageFactor "FattyBullet", 0.25
	DamageFactor "ArachnoBullet", 0.25
	DamageFactor "FattyBullet", 0.25
	DamageFactor "VileBullet", 0.25
	DamageFactor "BigSpiderBullet", 0.25
	DamageFactor "CyberBullet", 0.25
	
	inventory.icon "ARM9A0"
}

Actor OccultArmor : BasicArmorPickup {
	Armor.SavePercent 25.0
	Armor.SaveAmount 1
	
	DamageFactor "DemonMagic", 0.25
	DamageFactor "ImpMagic", 0.25
	DamageFactor "ImpVoid", 0.25
	DamageFactor "CacoMagic", 0.25
	DamageFactor "CacoMagicOrange", 0.25
	DamageFactor "PaineMagic", 0.25
	DamageFactor "PaineMagicFire", 0.25
	DamageFactor "RevMagic", 0.25
	DamageFactor "BaronsMagic", 0.25
	DamageFactor "BaronVoid", 0.25
	DamageFactor "BaronsMagicFire", 0.25
	DamageFactor "FattyVoidFire", 0.25
	DamageFactor "FattyMagic", 0.25
	DamageFactor "FatsoCorrupt", 0.25
	DamageFactor "ArachnoVoid", 0.25
	DamageFactor "VileMagic", 0.25
	DamageFactor "VileStun", 0.25
    DamageFactor "VileSlow", 0.25
    DamageFactor "VileSnare", 0.25
	DamageFactor "VileGhost", 0.25
	DamageFactor "VileCurse", 0.25
	DamageFactor "BigSpiderDark", 0.25
	DamageFactor "BigSpiderVoid", 0.25
    DamageFactor "BigSpiderTornado", 0.25
    DamageFactor "BigSpiderPercent", 0.25
	
	inventory.icon "AR10A0"
}

Actor DemoArmor : BasicArmorPickup {
	Armor.SavePercent 25.0
	Armor.SaveAmount 1
	
	DamageFactor "Explosives", 0.25
	DamageFactor "ExplosivesFull", 0.25
	
	DamageFactor "Explosive", 0.25
	DamageFactor "CacoExp", 0.25
	DamageFactor "PaineExp", 0.25
	DamageFactor "RevExp", 0.25
	DamageFactor "BaronsExp", 0.25
	DamageFactor "FattyExp", 0.25
	DamageFactor "ArachnoExp", 0.25
	DamageFactor "BigSpiderExp", 0.25
	DamageFactor "CyberExp", 0.25
	
	inventory.icon "AR11A0"
}

Actor EnergyArmor : BasicArmorPickup {
	Armor.SavePercent 25.0
	Armor.SaveAmount 1
	
	DamageFactor "Energy", 0.25
	DamageFactor "Caco", 0.25
	DamageFactor "BaronPlasma", 0.25
	DamageFactor "FattyPlasma", 0.25
	DamageFactor "Arachno", 0.25
	DamageFactor "ArachnoGreen", 0.25
	DamageFactor "ArachnoYellow", 0.25
	DamageFactor "BigSpiderGreen", 0.25
	DamageFactor "BigSpiderYellow", 0.25
	DamageFactor "CyberGreen", 0.25
	DamageFactor "CyberEnergy", 0.25
	
	inventory.icon "AR12A1"
}

Actor ElementalArmor : BasicArmorPickup {
	Armor.SavePercent 25.0
	Armor.SaveAmount 1
	
	DamageFactor "DemonFire", 0.25
	DamageFactor "ImpFire", 0.25
	DamageFactor "CacoFire", 0.25
	DamageFactor "CacoPoison", 0.25
	DamageFactor "ImpPoison_Vulgar", 0.25
	DamageFactor "ImpPoison_Roach", 0.25
	DamageFactor "PaineFire", 0.25
	DamageFactor "PainePoison", 0.25
	DamageFactor "RevIce", 0.25
	DamageFactor "RevSludge", 0.25
	DamageFactor "RevPoison_Crawler", 0.25
    DamageFactor "BaronsPoison", 0.25
    DamageFactor "BaronsFire", 0.25
    DamageFactor "BaronGreen", 0.25
    DamageFactor "BaronGreenFire", 0.25
    DamageFactor "FattyFire", 0.25
    DamageFactor "FattyIce", 0.25
	DamageFactor "ArachnoFire", 0.25
	DamageFactor "VileFire", 0.25
    DamageFactor "VileBlue", 0.25
    DamageFactor "VileBlueFire", 0.25
	DamageFactor "BigSpiderFire", 0.25
	DamageFactor "BigSpiderIce", 0.25
	DamageFactor "CyberFire", 0.25
	DamageFactor "CyberLightning", 0.25
	DamageFactor "CyberIce", 0.25
	
	inventory.icon "AR14A0"
}

Actor SuperArmor : BasicArmorPickup {
	Armor.SavePercent 100.0
	Armor.SaveAmount 1
	Inventory.Icon "AR13A0"
}

Actor NecroSpikeShooter : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_SpawnItemEx("NecroSpikeSpawner", 0, 0, 32, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
		Stop
	}
}

Actor NecroSpikeSpawner {
	Height 1
	Radius 1
	Speed 0
	+THRUACTORS
	+MISSILE
	+NOGRAVITY
	var int user_counter;
	const int steps = 36;
	States {
		Spawn:
			TNT1 A 0 NoDelay A_SetUserVar("user_counter", 0)
		SpawnLoop:
			TNT1 A 0 A_JumpIf(user_counter == steps, "Finish")
			TNT1 A 0 A_CustomMissile("NecroSpike", 0, 0, user_counter * 360 / steps, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_SetUserVar("user_counter", user_counter + 1)
		Loop
		Finish:
			TNT1 A 1
		Stop
	}
}

Actor NecroSpike {
	PROJECTILE
	Speed 32
	Radius 6
	Height 12
	Damage (10 * random(6, 10) * (1.0 + NECRO_BULK_SCALE * ACS_ExecuteWithResult(918, 5, 0, DND_USETARGET)) * (1.0 + DEMONBANE_GAIN * ACS_ExecuteWithResult(918, 1, 8)) * (1.0 + (TALENT_INCREASE + TALENT_PER_DEX * ACS_ExecuteWithResult(918, 4, 0, DND_USETARGET)) * ACS_ExecuteWithResult(918, 3, TALENT_MELEE, DND_USETARGET)))
	DamageType "Magic"
	SeeSound "Armors/NecroShard"
	DeathSound "Armors/NecroShardHit"
	+FOILINVUL
	+DONTREFLECT
	States {
		Spawn:
			WBON A 1
		Loop
		Death:
			TNT1 AAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			HHPF ABCDEF 3
		Stop
	}
}

Actor CyberneticEffect : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_SpawnItem("CyberneticEffectSpawner")
			TNT1 A 0 A_SetBlend("24 36 90", 0.3, 15)
		Stop
	}
}

Actor KnightProtection : PowerProtection {
	damagefactor "normal", 0.6
	powerup.duration 0x7FFFFFFF
}

Actor RavagerPower : PowerDamage {
	damagefactor "normal", 1.5
	powerup.duration -4
	powerup.color "72 24 24"
}

Actor RavagerEffect : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_SpawnItem("DarkHealEffectSpawner")
			TNT1 A 0 A_SetBlend("72 24 24", 0.3, 15)
		Stop
	}
}

Actor GunslingerPower : PowerDamage {
	damagefactor "normal", 1.0
	damagefactor "Bullet", 1.5
	damagefactor "BulletFull", 1.5
	powerup.duration 0x7FFFFFFF
}

Actor OccultPower : PowerDamage {
	damagefactor "normal", 1.0
	damagefactor "Melee_Magic", 1.5
	damagefactor "Melee_MagicFull", 1.5
	damagefactor "Magic", 1.5
	damagefactor "Explosives_Magic", 1.5
	damagefactor "Explosives_MagicFull", 1.5
	damagefactor "MagicFire", 1.5
	damagefactor "MagicFireFull", 1.5
	damagefactor "SoulType", 1.5
	damagefactor "SoulTypeFull", 1.5
	powerup.duration 0x7FFFFFFF
}

Actor DemoPower : PowerDamage {
	damagefactor "normal", 1.0
	damagefactor "Explosives", 1.5
	damagefactor "ExplosivesFull", 1.5
	powerup.duration 0x7FFFFFFF
}

Actor EnergyPower : PowerDamage {
	damagefactor "normal", 1.0
	damagefactor "P_Rail", 1.5
	damagefactor "P_RailFull", 1.5
	damagefactor "Energy", 1.5
	damagefactor "EnergyFull", 1.5
	powerup.duration 0x7FFFFFFF
}

Actor ElementalPower : PowerDamage {
	damagefactor "normal", 1.0
	damagefactor "Fire", 1.5
	damagefactor "FireFull", 1.5
	DamageFactor "Melee_Fire", 1.5
	DamageFactor "Melee_FireFull", 1.5
	
	damagefactor "Lightning", 1.5
	damagefactor "LightningFull", 1.5
	
	damagefactor "P_Ice", 1.5
	damagefactor "P_IceFull", 1.5
	
	damagefactor "AcidRifle", 1.5
	damagefactor "AcidRifleFull", 1.5
	
	powerup.duration 0x7FFFFFFF
}