Actor Warlock : PlayerPawn
{
	Mass 400
	Painchance 256
	Player.ColorRange 112, 127
	Player.DisplayName "Warlock"
	Player.SoundClass "Mage"
	Player.ForwardMove 1.0
	Player.SideMove 1.0
	Player.StartItem "FireStaff", 1
	Player.StartItem "FireStaffAmmo", 30
	Player.StartItem "IceHands", 1
	Player.StartItem "LightningHands", 1
	Player.StartItem "LightningAmmo", 10
	Player.StartItem "IsHuman", 1
	Player.StartItem "ArrowSingle", 35
	Player.StartItem "icestaffspazzitem", 16
	Player.StartItem "firestaffspazzitem", 10
	Player.StartItem "ClassID", 7 // 13
	Player.StartItem "HumanTeam", 1
	Player.scoreicon "WARLST"
	DamageFactor "Fire2", 0.8
	DamageFactor "Grenade", 0.3
	DamageFactor "Ice2", 0.8
	DamageFactor "GhostbusterTrap", 0.0
	DamageFactor "DefilerPoisonGas", 0.5
	DamageFactor "SentryShoot", 0.0
	DamageFactor "BarbEffect", 0.0
	DamageFactor "HunterSuperIceArrowTrail2", 0.0
	DamageFactor "SjasScream", 1.1
	DamageFactor "Drone", 0.0
	DamageFactor "DimmedVision", 0.5
	DamageFactor "GhostbusterExpander", 0.0
	DamageFactor "Poison", 0.0
	DamageFactor "FlaskT2", 0.0
	DamageFactor "WarlockFireball", 0.5
	Species "Human"
	PainChance "Mohoph", 256
	PainChance "MohophRange", 256
	LimitedToTeam 0
	+NOICEDEATH
	+NODAMAGETHRUST
	+GHOST
	+NOSKIN
	+NOTARGET
	+QUICKTORETALIATE
	Player.MaxHealth 100
	Health 100
	States
	{
	Spawn:
		DAED A 1
		Loop
	See:
		DAED AB 4
//		TNT1 A 0 A_SpawnItemEx ("WarlockStomp", 0, 0, 0, 0, 0, -20, 0,0, 0) 
		DAED CD 4
//		TNT1 A 0 A_SpawnItemEx ("WarlockStomp", 0, 0, 0, 0, 0, -20, 0,0, 0) 
		Loop
	Pain:
		DAED G 4
		DAED G 4 A_Pain
		Goto Spawn
	Pain.ChokeAttack:
		DAED G 1
		TNT1 G 0 A_GiveToTarget("ChokePainHealer", 1)
		TNT1 G 0 A_GiveToTarget("VomitPoints", 2)
		DAED G 8 A_Pain
		Goto Spawn
	Pain.CreepStun:
		TNT1 G 0 HealThing(1)
		TNT1 G 0 A_Pain
		DAED G 18 ACS_ExecuteAlways(986,0)
		Goto Spawn
	Pain.CreeperHealBall:
		DAED G 1
		DAED G 0 A_GiveToTarget("CreeperHealBallHealer", 1)
		DAED G 8 A_Pain
		Goto Spawn
	Pain.Impale:
		TNT1 A 0 ThrustThingZ(0,10,0,1)
		Goto Pain
	Pain.DimmedVision:
		TNT1 A 0 A_Pain
		TNT1 A 0 A_GiveInventory("VisionDimmer", 1)
		TNT1 A 0 A_GiveInventory("VisionDimEffect", 1) // ACS_ExecuteAlways(753, 0)
		TNT1 A 0 ACS_ExecuteAlways(754, 0)
		TNT1 A 0 HealThing(1)
		DAED G 7
		Goto Spawn	
	Pain.MorgBat:
		TNT1 A 0 A_giveToTarget("MorgHeal", 3)
		Goto Pain		
	Pain.Mohoph:
		DAED G 1
		TNT1 A 0 A_GiveToTarget("MohophHeal", 1)
		goto Pain
	Pain.MohophRange:
		DAED G 1
		TNT1 AAA 0 A_GiveToTarget("MohophHeal", 1)
		Goto Pain
	Missile:
		DAED F 8 bright
		Goto Spawn
	Teleportation:
		TNT1 A 0 A_SpawnItemEx("TeleportEffect1")
		TNT1 A 0 A_SpawnItemEx("TeleportBlast")
		TNT1 A 0 A_ChangeFlag(FLOORHUGGER, 1)
		TNT1 A 0 A_ChangeFlag(SOLID, 0)
		TNT1 A 0 A_SetTranslucent(0.15, 1)
		TNT1 A 0 A_SetReflectiveInvulnerable
		TNT1 A 0 ACS_ExecuteAlways(998, 0, 1)
		DAED E 5 Bright
		TNT1 A 0 A_Recoil(-100)
		DAED F 3 Bright
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 2, 0, 2, 0)
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 4, 64, 2, 0)
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 4, -64, 2 ,0)		
		DAED F 3 Bright
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 2, 0, 2, 0)
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 4, 64, 2, 0)
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 4, -64, 2 ,0)
		DAED F 3 Bright
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 2, 0, 2, 0)
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 4, 64, 2, 0)
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 4, -64, 2 ,0)
		DAED F 3 Bright
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 2, 0, 2, 0)
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 4, 64, 2, 0)
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 4, -64, 2 ,0)
		DAED F 3 Bright
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 2, 0, 2, 0)
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 4, 64, 2, 0)
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 4, -64, 2 ,0)
		DAED F 3 Bright
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 2, 0, 2, 0)
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 4, 64, 2, 0)
		TNT1 A 0 A_CustomMissile("ShadowSmokeSpawner", 4, 4, -64, 2 ,0)
		TNT1 A 0 A_Stop
		DAED F 1 Bright
		TNT1 A 0 ACS_ExecuteAlways(998, 0, 2)
		TNT1 A 0 A_SetTranslucent(1.0, 0)
		TNT1 A 0 A_ChangeFlag(FLOORHUGGER, 0)
		TNT1 A 0 A_ChangeFlag(SOLID, 1)
		TNT1 A 0 A_UnSetReflectiveInvulnerable
		TNT1 A 0 A_SpawnItemEx("TeleportBlast")
		TNT1 A 0 A_SpawnItemEx("TeleportEffect2")
		DAED F 1 Bright
		Goto Spawn
	Death:
	DeathAnim:
		TNT1 A 0 A_GiveToTarget("KilledWarlock", 1)
		TNT1 A 0 A_GiveToTarget("TotalKillCount", 1)
		TNT1 A 0 A_GiveToTarget("HumanKillCount", 1)
		TNT1 A 0 A_GiveToTarget("LowHPKill", 1)
		TNT1 A 0 A_GiveToTarget("CheckAchievements", 1)
		TNT1 A 0 A_JumpIfInventory("SkullRodItemCheck", 2, "DeathSoul")
		DAED H 6
		DAED I 6 A_PlayerScream
		DAED JK 6
		DAED L 6 A_NoBlocking
		DAED M 6
		DAED N -1 
		Stop	
	DeathSoul:
		TNT1 A 0 A_SpawnItemEx("WarlockSoul", 0, 0, 0, 0, 0, 12)
		TNT1 A 0 A_SpawnItemEx("GhoulSoul", 0, 0, -4, 0, 0, random(4,6), SXF_ABSOLUTEMOMENTUM)
		DAED H 6
		DAED I 6 A_PlayerScream
		DAED JK 6
		DAED L 6 A_NoBlocking
		DAED M 6
		DAED N -1 
		Stop	
	GibDeath:
	Death.ImpaleBite:
		TNT1 A 0 A_GiveToTarget("ImpaleKill", 1)
		TNT1 A 0 A_GiveToTarget("DoubleImpaleKill", 1)
		TNT1 A 0 A_GiveToTarget("JitterskullPoints", 1)
		TNT1 A 0 A_GiveToTarget("VomitPoints", 10)
		TNT1 A 0 A_GiveToTarget("KilledWarlock", 1)
		TNT1 A 0 A_GiveToTarget("TotalKillCount", 1)
		TNT1 A 0 A_GiveToTarget("HumanKillCount", 1)
		TNT1 A 0 A_GiveToTarget("CheckAchievements", 1)
		TNT1 A 0 A_GiveToTarget("Crunched",1)
		TNT1 A 0 A_JumpIfInventory("SkullRodItemCheck", 2, "GibDeathSoul")
		TNT1 A 0 A_PlaySound("Gibbage/XSplat")
		TNT1 A 0 A_PlaySound("Gibbage/PlayerGib") 
		TNT1 A 0 A_NoBlocking 
		TNT1 A 0 A_SpawnItemEx("GIBBER", 0, 0, 0, 0, 0, 0, 0, 160, 0)
		DAED A 1
		BLAN A -1
		Stop
	GibDeathSoul:
		TNT1 A 0 A_SpawnItemEx("GhoulSoul", 0, 0, -4, 0, 0, random(4,6), SXF_ABSOLUTEMOMENTUM)
		TNT1 A 0 A_SpawnItemEx("WarlockSoul", 0, 0, 0, 0, 0, 12)
		TNT1 A 0 A_PlaySound("Gibbage/XSplat")
		TNT1 A 0 A_PlaySound("Gibbage/PlayerGib")
		TNT1 A 0 A_NoBlocking
		TNT1 A 0 A_SpawnItemEx("GIBBER", 0, 0, 0, 0, 0, 0, 0, 160, 0)
		DAED A 1
		BLAN A -1
		Stop
	Death.CreeperHealBall:
		TNT1 A 0 A_GiveToTarget("CreeperHealBallHealer", 1)
		TNT1 A 0 A_GiveToTarget("CreepHealKill", 1)
		TNT1 A 0 A_GiveToTarget("HealBallsFired", 1)
		TNT1 A 0 A_GiveToTarget("CreeperMaxCharge", 1)
        Goto DeathAnim
	Death.CreeperMelee:
		TNT1 A 0 A_PlaySoundEx("CreeperAttack","Body")
		TNT1 A 0 A_GiveToTarget("CreeperHeal",1)
		TNT1 A 0 A_SpawnItemEx("SoulSprite", 0, 0, 0, 0, 0, 2)
		TNT1 A 0 A_GiveToTarget("CreeperMeleeKill", 1)
		TNT1 A 0 A_GiveToTarget("HealBallsFired", 1)
		TNT1 A 0 A_GiveToTarget("CreeperMaxCharge", 1)
//		TNT1 A 0 A_GiveToTarget("GhoulAmmo", 1)
		TNT1 A 0 ACS_ExecuteAlways(997,0)
		Goto DeathAnim
	Death.SjasScream:
        TNT1 A 0 A_GiveToTarget("SjasScreamKill", 1)
        TNT1 A 0 A_GiveToTarget("SjasMeleeMulti", 1)
		Goto DeathAnim
    Death.JitterMelee:
        TNT1 A 0 A_GiveToTarget("JitterMeleeKill", 1)
        TNT1 A 0 A_GiveToTarget("JitterMeleeMulti", 1)
        Goto GibDeath
    Death.CreepStun:
        TNT1 A 0 A_GiveToTarget("CreepStunKill", 1)
		TNT1 A 0 A_GiveToTarget("HealBallsFired", 1)
		TNT1 A 0 A_GiveToTarget("CreeperMaxCharge", 1)
        Goto DeathAnim
    Death.ChokeVomit:
        TNT1 A 0 A_GiveToTarget("ChokeVomitKill", 1)
        Goto DeathAnim
    Death.ChokeAttack:
        TNT1 A 0 A_GiveToTarget("ChokeAttackKill", 1)
		TNT1 A 0 A_GiveToTarget("ChokeDeathHealer", 1)
        Goto GibDeath
	Death.ChokeVomit:
		TNT1 A 0 A_GiveToTarget("ChokeVomitKill", 1)
		Goto DeathAnim	
	Death.ChokeFeast:
		TNT1 A 0 A_GiveToTarget("ChokeFeasTKill", 1)
		Goto DeathAnim		
    Death.ChokeBloodBall:
		TNT1 A 0 A_GiveToTarget("VomitPoints", 15)
        TNT1 A 0 A_GiveToTarget("ChokeBloodBallKill", 1)
		TNT1 A 0 A_GiveToTarget("ChokeBloodBallMulti", 1)
        Goto DeathAnim
    Death.FrostbiteMelee:
        TNT1 A 0 A_GiveToTarget("FrostbiteMeleeKill", 1)
        Goto GibDeath
	Death.FrostbiteMortar:
		TNT1 A 0 A_GiveToTarget("FrostyMortarKill", 1)
		Goto DeathAnim		
    Death.FrostbiteIceBreath:
		TNT1 A 0 A_NoBlocking
		TNT1 A 0 A_PlayerScream
		TNT1 A 0 A_GiveToTarget("FrostyBreathMulti", 1)
		TNT1 A 0 A_GiveToTarget("FrostbiteIceBreathKill", 1)
		TNT1 A 0 A_GiveToTarget("TotalKillCount", 1)
		TNT1 A 0 A_GiveToTarget("HumanKillCount", 1)
		TNT1 A 0 A_GiveToTarget("KilledWarlock", 1)
		TNT1 A 0 A_GiveToTarget("CheckAchievements", 1)
		TNT1 A 0 A_SpawnItemEx("WarlockIceDeath", 0, 0, 0, 0, 0, 0)
		TNT1 A 0 A_JumpIfInventory("SkullRodItemCheck", 2, "FrostDeathSoul")
		DAED H 1
		BLAN A -1
		Stop
	FrostDeathSoul:
		TNT1 A 0 A_SpawnItemEx("GhoulSoul", 0, 0, -4, 0, 0, random(4,6), SXF_ABSOLUTEMOMENTUM)
		TNT1 A 0 A_SpawnItemEx("WarlockSoul", 0, 0, 0, 0, 0, 12)
		DAED H 1
		BLAN A -1
		Stop
    Death.Impale:
        TNT1 A 0 A_GiveToTarget("ImpaleKill", 1)
		TNT1 A 0 A_GiveToTarget("DoubleImpaleKill", 1)
        Goto DeathAnim	
    Death.IceFiendMelee:
		TNT1 A 0 A_GiveToTarget("NightmareMeleeKill", 1)
	Death.DimmedVision:
	DimVisionDeath:
		TNT1 A 0 A_JumpIfInventory("VisionDimmer", 1, 1)
		Goto FadeDeath
		TNT1 A 0 A_GiveToTarget("NightmareHealer", 1)
		TNT1 A 0 A_GiveToTarget("DimDurationEffect", 2)
		TNT1 A 0 A_GiveToTarget("InvisibleCounter", 0)
		TNT1 A 0 A_GiveToTarget("DimmedMeleeKill", 1)
		TNT1 A 0 A_Jump(192, 3)
		TNT1 AA 0 A_PlaySoundEx("IcefiendBackstab1", 5, 0, 1)
		Goto FadeDeath
		TNT1 A 0 A_Jump(192, 3)
		TNT1 AA 0 A_PlaySoundEx("IcefiendBackstab2", 5, 0, 1)
		Goto FadeDeath
		TNT1 A 0 A_Jump(192, 3)
		TNT1 AA 0 A_PlaySoundEx("IcefiendBackstab3", 5, 0, 1)
		Goto FadeDeath
		TNT1 AA 0 A_PlaySoundEx("IcefiendBackstab4", 5, 0, 1)
	    Goto FadeDeath
	Death.NightmareCleave:
		TNT1 A 0 A_GiveToTarget("CleaveKill", 1)
		TNT1 A 0 A_JumpIfInventory("VisionDimmer", 1, "DimVisionDeath")
	    Goto FadeDeath			
	FadeDeath:
	    TNT1 A 0 A_GiveToTarget("InvisibleCounter", 8)
		TNT1 A 0 A_GiveToTarget("KilledWarlock", 1)
		TNT1 A 0 A_GiveToTarget("TotalKillCount", 1)
		TNT1 A 0 A_GiveToTarget("HumanKillCount", 1)
		TNT1 A 0 A_GiveToTarget("LowHPKill", 1)
		TNT1 A 0 A_GiveToTarget("CheckAchievements", 1)
		DAED G 1
		TNT1 A 0 A_SpawnItemEx("FadeWarlock", 0, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION)
		TNT1 A 0 A_JumpIfInventory("SkullRodItemCheck", 2, 2)		
		BLAN A -1
	Stop
		TNT1 A 0 A_SpawnItemEx("GhoulSoul", 0, 0, -4, 0, 0, random(4,6), SXF_ABSOLUTEMOMENTUM)
		TNT1 A 0 A_SpawnItemEx("WarlockSoul", 0, 0, 0, 0, 0, 12)
		BLAN A -1
	Stop
	Death.MohophRange:
	Death.Mohoph:
		PLAY A 0 A_GiveToTarget("TransWarlock",1)
		TNT1 A 0 A_GiveToTarget("MorphAmmo", 2)
		PLAY A 0 A_PlaySoundEx("MohophKill","Body")
		TNT1 A 0 A_GiveToTarget("MohophKill", 1)
		TNT1 A 0 A_GiveToTarget("KilledWarlock2", 1)
		TNT1 A 0 A_GiveToTarget("MohophWarlockCheck", 1)
		TNT1 A 0 A_GiveToTarget("MohophWarlockText", 1)
		TNT1 A 0 A_JumpIfInTargetInventory("MohophJustMorphed", 1, 2)
		TNT1 A 0 A_Jump(256, 2)
		TNT1 A 0 A_GiveToTarget("JustMorphedKill", 1)		
		TNT1 A 0 ACS_ExecuteAlways(514, 0, 6)
		PLAY A 0 ACS_ExecuteAlways(976,0)
		Goto DeathAnim
	Death.MorgMelee:
		TNT1 A 0 A_GiveToTarget("MorgBatAmmo", 2)
		TNT1 A 0 A_GiveToTarget("MorgMeleeKill", 1)
		TNT1 A 0 A_GiveToTarget("MorgMulti", 1)
		Goto DeathAnim
	Death.MorgBat:
		TNT1 A 0 A_GiveToTarget("MorgBatKill", 1)
		Goto DeathAnim			
	}
}

Actor IceHands : Weapon
{
	Weapon.SelectionOrder 2
	Weapon.SlotNumber 1
	Inventory.Icon "MHUDA0"
	+WEAPON.NOAUTOAIM
//	+WEAPON.DONTBOB
	+INVENTORY.UNDROPPABLE
	+NOALERT 
	States
	{
	Ready:
		CONE A 1 A_WeaponReady
		Loop
	Deselect:
		CONE A 1 A_Lower
		TNT1 A 0 A_Lower
		Loop
	Select:
		CONE A 0 ACS_ExecuteAlways (700, 0, WM_MAGE_ICEHANDS)
		CONE A 1 A_Raise
		TNT1 A 0 A_Raise
		Goto Select+1
	Fire:
		CONE BCD 1
		goto Hold
	Hold:
		CONE EFGH 1 BRIGHT
		CONE E 0 A_FireCustomMissile ("IceShards", 0, 0, 0, 0, 0, 0) 
		CONE E 0 A_FireCustomMissile ("IceShards", 2, 0, 0, 0, 0, 0)
		CONE E 0 A_FireCustomMissile ("IceShards", -2, 0, 0, 0, 0, 0)
		CONE E 0 A_FireCustomMissile ("IceShards", 0, 0, 0, 0, 0, 2) 
		CONE E 0 A_FireCustomMissile ("IceShards", 0, 0, 0, 0, 0, -2)
		CONE E 0 A_PlaySound ("MageMissileF")
		CONE IJKLMNOPQRSTU 1 bright
		CONE VZ 1 
		CON2 ABCDEFGH 1
		CON2 I 1 a_refire
		CONE DCB 1
		Goto Ready
	AltFire:
		CONX ABC 1
		CONX DEF 1 BRIGHT
		TNT1 A 0 A_FireCustomMissile("MiniIceShards", 0, 0, 6)
		TNT1 A 0 A_PlaySoundEx("MageMissileF", 5)		
		CONX GHI 1 BRIGHT
		TNT1 A 0 A_FireCustomMissile("MiniIceShards", 0, 0, 10)
		TNT1 A 0 A_PlaySoundEx("MageMissileF", 5)			
	firego:
		TNT1 A 0
		TNT1 A 0 a_jumpifinventory("icestaffspazzitem", 1, "spazz")
		CONX J 1 BRIGHT 
		CONX IHGDEF 1 BRIGHT
		CONY C 1
		CONX C 1
		CONY B 1
		CONX B 1
		CONY A 1
		TNT1 A 0 a_giveinventory("icestaffspazzitem", 16)
		CONX A 1
		goto ready
	spazz:
		TNT1 A 0
		TNT1 A 0 a_takeinventory("icestaffspazzitem", 1)
		TNT1 A 0 a_giveinventory("icetimer", 1)
		TNT1 A 0 a_jumpifinventory("icestaffspazzitem", 1, "nigg")
		TNT1 A 0
		goto firego
	nigg:
		TNT1 A 0
		TNT1 A 0 a_jump(256, "spazz1", "spazz2", "spazz3", "spazz4", "spazz5", "spazz6", "spazz7", "spazz8")
	spazz1:
		CONX K 1 bright
		TNT1 A 0 a_jumpifinventory("icetimer", 0, "spazzfire1")
		goto spazz
	spazz2:
		CONX L 1 bright
		TNT1 A 0 a_jumpifinventory("icetimer", 0, "spazzfire2")
		goto spazz
	spazz3:
		CONX M 1 bright
		TNT1 A 0 a_jumpifinventory("icetimer", 0, "spazzfire3")
		goto spazz
	spazz4:
		CONX N 1 bright
		TNT1 A 0 a_jumpifinventory("icetimer", 0, "spazzfire4")
		goto spazz
	spazz5:
		CONX O 1 bright
		TNT1 A 0 a_jumpifinventory("icetimer", 0, "spazzfire5")
		goto spazz
	spazz6:
		CONX P 1 bright
		TNT1 A 0 a_jumpifinventory("icetimer", 0, "spazzfire6")
		goto spazz
	spazz7:
		CONX Q 1 bright
		TNT1 A 0 a_jumpifinventory("icetimer", 0, "spazzfire7")
		goto spazz
	spazz8:
		CONX R 1 bright
		TNT1 A 0 a_jumpifinventory("icetimer", 0, "spazzfire8")
		goto spazz
	spazzfire1:
		TNT1 A 0 bright
		TNT1 A 0 bright a_takeinventory("icetimer", 5)
		TNT1 A 0 bright A_FireCustomMissile("MiniIceShards", 0, 0, 7)
		TNT1 A 0 A_PlaySoundEx("MageMissileF", 5)	
		goto spazz
	spazzfire2:
		TNT1 A 0 bright
		TNT1 A 0 bright a_takeinventory("icetimer", 5)
		TNT1 A 0 bright A_FireCustomMissile("MiniIceShards", 0, 0, 13)
		TNT1 A 0 A_PlaySoundEx("MageMissileF", 5)	
		goto spazz
	spazzfire3:
		TNT1 A 0 bright
		TNT1 A 0 bright a_takeinventory("icetimer", 5)
		TNT1 A 0 bright A_FireCustomMissile("MiniIceShards", 0, 0, 10, 3)
		TNT1 A 0 A_PlaySoundEx("MageMissileF", 5)	
		goto spazz
	spazzfire4:
		TNT1 A 0 bright
		TNT1 A 0 bright a_takeinventory("icetimer", 5)
		TNT1 A 0 bright A_FireCustomMissile("MiniIceShards", 0, 0, 10, -3)
		TNT1 A 0 A_PlaySoundEx("MageMissileF", 5)	
		goto spazz
	spazzfire5:
		TNT1 A 0 bright
		TNT1 A 0 bright a_takeinventory("icetimer", 5)
		TNT1 A 0 bright A_FireCustomMissile("MiniIceShards", 0, 0, 7, 3)
		TNT1 A 0 A_PlaySoundEx("MageMissileF", 5)	
		goto spazz
	spazzfire6:
		TNT1 A 0 bright
		TNT1 A 0 bright a_takeinventory("icetimer", 5)
		TNT1 A 0 bright A_FireCustomMissile("MiniIceShards", 0, 0, 13, -3)
		TNT1 A 0 A_PlaySoundEx("MageMissileF", 5)	
		goto spazz
	spazzfire7:
		TNT1 A 0 bright
		TNT1 A 0 bright a_takeinventory("icetimer", 5)
		TNT1 A 0 bright A_FireCustomMissile("MiniIceShards", 0, 0, 13, 3)
		TNT1 A 0 A_PlaySoundEx("MageMissileF", 5)	
		goto spazz
	spazzfire8:
		TNT1 A 0 bright
		TNT1 A 0 bright a_takeinventory("icetimer", 5)
		TNT1 A 0 bright A_FireCustomMissile("MiniIceShards", 0, 0, 7, -3)
		TNT1 A 0 A_PlaySoundEx("MageMissileF", 5)	
		goto spazz
	}
}

actor icetimer : inventory
{
	inventory.maxamount 4
}

actor icestaffspazzitem : inventory
{
	inventory.maxamount 16
}

Actor IceShards
{
	Speed 40
	Radius 4
	Height 6 
	Scale 0.5
	Mass 0
	Damage (10)
	DamageType "WarlockIceShards"
	Obituary "%o was frozen by %k."
	PROJECTILE
	+SKYEXPLODE
	States
	{
	Spawn:
		ICMG A 1 BRIGHT
		ICMG A 0 A_spawnitem("iceshardtrail")
		ICMG A 1 BRIGHT
		ICMG A 0 A_spawnitem("iceshardtrail")
		ICMG B 1 BRIGHT
		ICMG A 0 A_spawnitem("iceshardtrail")
		ICMG B 1 BRIGHT
		ICMG A 0 A_spawnitem("iceshardtrail")
		Loop
	Death:
		ICMG C 0 A_PlaySound("FireStaffH")
		ICMG A 1 bright
		ICMG A 0 a_fadeout(0.1)
		ICMG A 1 bright
		ICMG A 0 a_fadeout(0.1)
		ICMG B 1 bright
		ICMG A 0 a_fadeout(0.1)
		ICMG B 1 bright
		ICMG A 0 a_fadeout(0.1)
		ICMG A 1 bright
		ICMG A 0 a_fadeout(0.1)
		ICMG A 1 bright
		ICMG A 0 a_fadeout(0.1)
		ICMG B 1 bright
		ICMG A 0 a_fadeout(0.1)
		ICMG B 1 bright
		ICMG A 0 a_fadeout(0.1)
		ICMG A 1 bright
		ICMG A 0 a_fadeout(0.1)
		ICMG A 1 bright
		ICMG A 0 a_fadeout(0.1)
		ICMG B 1 bright
		ICMG A 0 a_fadeout(0.1)
		ICMG B 1 bright
		ICMG A 0 a_fadeout(0.1)
		Loop
	}
}

actor iceshardtrail
{
	+NOBLOCKMAP
	-SOLID
	+NOGRAVITY
	+CLIENTSIDEONLY
	renderstyle translucent
	alpha 0.6
	states
	{
		Spawn:
		ICMG A 1 bright
		ICMG A 0 a_fadeout(0.1)
		ICMG A 1 bright
		ICMG A 0 a_fadeout(0.1)
		ICMG B 1 bright
		ICMG A 0 a_fadeout(0.1)
		ICMG B 1 bright
		ICMG A 0 a_fadeout(0.1)
		Loop
	}
}

Actor MiniIceShards : IceShards
{
	Speed 54
	Radius 2
	Height 3
	Scale 0.85
	Damage (12)
	Alpha 0.75
	RenderStyle Add
	States
	{
		Spawn:
			SHRD AB 2 bright
		Loop
		Death:
			TNT1 A 0 A_PlaySound("FrostTeeth")
			SHEX ABCDE 3 Bright
		Stop
	}
}

Actor LightningAmmo : Ammo
{
	Inventory.Amount 1
	Inventory.MaxAmount 15
	Inventory.Icon "ICSPE0"
	Ammo.BackpackAmount 1
	Ammo.BackpackMaxAmount 15
	+IGNORESKILL
	States
	{
	Spawn:
		TNT1 A -1
		Stop
	}
}	

Actor LightningHands : weapon
{
	Weapon.SelectionOrder 3
	Weapon.SlotNumber 2
	Weapon.YAdjust 20
	Weapon.AmmoUse 1
	Weapon.AmmoGive 10
	Weapon.AmmoUse2 1
	Weapon.AmmoType "LightningAmmo"
	Weapon.AmmoType2 "LightningAmmo"
	Inventory.Icon "MHUDC0"
	+WEAPON.NOAUTOAIM
//	+WEAPON.DONTBOB
	+INVENTORY.UNDROPPABLE
	+NOALERT 
	States
	{
	Ready:
		ICHN BBBBB 1 Bright A_WeaponReady
		ICHN B 1 Bright A_PlaysoundEx("ElectricHands","Weapon")
		ICHN CCCCC 1 Bright A_WeaponReady
		ICHN C 1 Bright A_PlaysoundEx("ElectricHands","Weapon")
		ICHN BBBBB 1 Bright A_WeaponReady
		ICHN AAAAA 1 Bright A_WeaponReady
		ICHN A 1 Bright A_PlaysoundEx("ElectricHands","weapon")
		Loop
	Deselect:
		ICHN A 1 bright A_Lower
		TNT1 A 0 A_Lower
		Loop
	Select:
		ICHN A 0 ACS_ExecuteAlways (700, 0, WM_MAGE_LIGHTNING)
		ICHN A 1 bright A_Raise 
		TNT1 A 0 A_Raise
		Goto Select+1
	Fire:
		TNT1 A 0 A_GiveInventory("UsedAmmo", 1)
		ICHN DEFGH 1 bright
		TNT1 A 0 A_PlayWeaponSound("LightningHandsFire")
		TNT1 A 0 A_FireCustomMissile("LightningPlasma")
		ICHN IJKLMNOPQRSTUV 1 bright
		TNT1 A 10
		ICHU ABCDEFGHIJKL 1 bright
		Goto Ready
	Altfire:
		TNT1 A 0 A_GiveInventory("UsedAmmo", 1)
		ICHN DEFGH 1 bright
		TNT1 A 0 A_PlayWeaponSound("LightningHandsFire")
	    TNT1 A 0 A_FireCustomMissile("VOIDSPHERE")
		ICHN IJKLMNOPQRSTUV 1 bright
		TNT1 A 10
		ICHU ABCDEFGHIJKL 1 bright
		Goto Ready
	}
}

ACTOR VoidSphere
{
  Radius 12
   Height 6
   Speed 24
   Damage (32)
   DamageType "WarlockLightning"
   +NODAMAGETHRUST
   PROJECTILE
   RENDERSTYLE ADD
   Alpha 0.80
   +FORCEXYBILLBOARD
   +MTHRUSPECIES
   DeathSound "Warlock/VoidExplode"
   Obituary "%o was proven to be null and void by %k."
   ReactionTime 14
   const int r = 32;
   const int ang_inc = 20;
  states
  {
  Spawn:
    LFX1 STUVW 1 BRIGHT
	TNT1 A 0 A_SetAngle(angle + 90) // you are the center of the ball
	SpawnLoop:
    LFX1 S 1 BRIGHT A_CustomMissile("StormParticle",0,0,0,CMF_TRACKOWNER|CMF_AIMDIRECTION,-1)
	TNT1 A 0 A_SetAngle(ang_inc + angle)
	TNT1 A 0 A_ChangeVelocity(r * cos(angle), r * sin(angle), velz, CVF_REPLACE)
    LFX1 T 1 BRIGHT A_CustomMissile("StormParticle",0,0,0,CMF_TRACKOWNER|CMF_AIMDIRECTION,-1)
	TNT1 A 0 A_SetAngle(ang_inc + angle)
	TNT1 A 0 A_ChangeVelocity(r * cos(angle), r * sin(angle), velz, CVF_REPLACE)
	LFX1 U 1 BRIGHT A_CustomMissile("StormParticle",0,0,0,CMF_TRACKOWNER|CMF_AIMDIRECTION,-1)
	TNT1 A 0 A_Explode(8, 64, 0)
	TNT1 A 0 A_SetAngle(ang_inc + angle)
	TNT1 A 0 A_ChangeVelocity(r * cos(angle), r * sin(angle), velz, CVF_REPLACE)
	LFX1 V 1 BRIGHT A_CustomMissile("StormParticle",0,0,0,CMF_TRACKOWNER|CMF_AIMDIRECTION,-1)
	TNT1 A 0 A_SetAngle(ang_inc + angle)
	TNT1 A 0 A_ChangeVelocity(r * cos(angle), r * sin(angle), velz, CVF_REPLACE)
	LFX1 W 1 BRIGHT A_CustomMissile("StormParticle",0,0,0,CMF_TRACKOWNER|CMF_AIMDIRECTION,-1)
	TNT1 A 0 A_SetAngle(ang_inc + angle)
	TNT1 A 0 A_ChangeVelocity(r * cos(angle), r * sin(angle), velz, CVF_REPLACE)
	TNT1 A 0 A_Countdown
	Loop
    Death:
	LFX1 S 2 Bright A_Explode(8,48,0)
	TNT1 A 0 A_FadeOut(0.16)
	LFX1 T 2 Bright A_Explode(8,48,0)
	TNT1 A 0 A_FadeOut(0.16)
	LFX1 U 2 Bright A_Explode(8,48,0)
	TNT1 A 0 A_FadeOut(0.16)
	LFX1 V 2 Bright A_Explode(8,48,0)
	TNT1 A 0 A_FadeOut(0.16)
	LFX1 W 2 Bright A_Explode(8,48,0)
	TNT1 A 0 A_FadeOut(0.16)
      stop
  }
}

ACTOR StormParticle
{
   Radius 8
   Height 12
   Speed 34
   Damage (15)
   DamageType "WarlockLightning"
   PROJECTILE
   RENDERSTYLE ADD
   Alpha 0.80
   DeathSound "Warlock/VoidZap"
   +FORCEXYBILLBOARD
   Obituary "%o was proven to be null and void by %k."
   States
   {
   Spawn:
      LFX1 XYZ 5 Bright
      Loop
   Death:
      DLIT DEFGHIJKLMNO 1 Bright
      Stop
   }
}

Actor FireStaffAmmo : Ammo
{
	Inventory.Amount 5
	Inventory.MaxAmount 50
	Inventory.Icon "REDMAGEB"
	Ammo.BackpackAmount 5
	Ammo.BackpackMaxAmount 50
	+IGNORESKILL
	States
	{
	Spawn:
		TNT1 A -1
		Stop
	}
}

actor firestaffspazzitem : inventory
{
	inventory.maxamount 10
}

Actor FireStaff : Weapon
{
	Weapon.SelectionOrder 1
	Weapon.Slotnumber 3
	Weapon.AmmoUse 1
	Weapon.AmmoGive 40
	Weapon.KickBack 150
	Weapon.YAdjust 20
	Weapon.AmmoType "FireStaffAmmo"
	Inventory.Icon "MHUDB0"
	+WEAPON.NOAUTOAIM
	States
	{
	Spawn:
		TNT1 A -1
		Stop
	Select:
		HELL A 0 ACS_ExecuteAlways (700, 0, WM_MAGE_FIRESTAFF)
		HELL A 1 A_Raise
		TNT1 A 0 A_Raise
		Goto Select+1
	Deselect:
		HELL A 1 A_Lower
		TNT1 A 0 A_Lower
		Loop
	Ready:
		HELL A 3 A_WeaponReady
		HELL A 1 A_jump(18, "coolskullanimation")
		Loop
	coolskullanimation:
		HELL BCDEFGH 3 A_WeaponReady
		goto ready
	Fire:
		TNT1 A 0 A_GiveInventory("UsedAmmo", 1)
		HELL G 0 A_FireCustomMissile("FireBallMage")
		HELL G 0 A_PlaySound("FireStaffF")
		HELL GHIJKLMNOPQRSTUV 1 BRIGHT
		HELL WXYZ 1
		HEL2 ABC 1
		Goto Ready
	AltFire:
		TNT1 A 0 A_GiveInventory("UsedAmmo", 1)
		HELL G 0 A_JumpIfInventory("FireStaffAmmo", 5, "TrueFire")
		Goto Ready 
	TrueFire:
		HEL2 D 0 A_jumpifinventory("firestaffspazzitem", 1, "punishment")
		HELL G 0 A_TakeInventory("FireStaffAmmo",5)
		HELL G 0 A_FireCustomMissile("FlamePillarSpawner")
		HELL G 0 A_PlaySound("FireStaffF")
		HELL JKLMNOPQRSTUV 1 BRIGHT
		HELL WXYZ 1
		HEL2 ABC 1
		HELL A 0 a_giveinventory("firestaffspazzitem", 10)
		Goto Ready
	Punishment:
		HEL2 D 0
		HEL2 D 0 a_takeinventory("firestaffspazzitem", 1)
		HEL2 D 0 A_jump(256, "spazz1", "spazz2", "spazz3", "spazz4", "spazz5", "spazz6", "spazz7", "spazz8")
		spazz1:
		HEL2 E 1 bright
		goto TrueFire
		spazz2:
		HEL2 F 1 bright
		goto TrueFire
		spazz3:
		HEL2 G 1 bright
		goto TrueFire
		spazz4:
		HEL2 H 1 bright
		goto TrueFire
		spazz5:
		HEL2 I 1 bright
		goto TrueFire
		spazz6:
		HEL2 J 1 bright
		goto TrueFire
		spazz7:
		HEL2 K 1 bright
		goto TrueFire
		spazz8:
		HEL2 L 1 bright
		goto TrueFire
	}
}

Actor FlamePillarExploder
{
	Speed 0
	Height 1
	Radius 1
	Damage (0)
	Obituary "%o was disemboweled by %k's pillars of flame."
	DamageType "WarlockBigFireball"
	PROJECTILE
	+RIPPER
	+BLOODLESSIMPACT
	+DONTREFLECT
	States
	{
		Spawn:
			TNT1 A 0
		Goto Death
		Death:
			TNT1 A 1 A_Explode(9, 72, 0)
			TNT1 A 1
		Stop
	}
}

Actor PillarofFlame : FlamePillarExploder
{
	Speed 0
	Height 1
	Radius 1
	Damage (0)
	Obituary "%o was disemboweled by %k's pillars of flame."
	DamageType "WarlockBigFireball"
	+FLOORHUGGER
	+THRUACTORS
	States
	{
		Spawn:
			DGFL A 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL B 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL C 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL D 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL E 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL F 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL G 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL H 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL I 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL J 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL K 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL L 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL M 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL N 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL O 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL P 2 bright
			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL R 2 bright
//			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL S 2 bright
//			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL T 2 bright
//			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL U 2 bright
//			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL V 2 bright
//			TNT1 A 0 A_SpawnItem("FlamePillarExploder")
			DGFL W 2 bright	
		Stop
	}
}

Actor FlamePillarSpawner
{
	Radius 1
	Height 1
	Speed 24
	Damage (0)
	Obituary "%o was disemboweled by %k's pillars of flame."
	DamageType "WarlockBigFireball"
	Projectile
	-SOLID
	+FLOORHUGGER
	+NODAMAGETHRUST
	+RIPPER
	+DONTREFLECT
	States
	{
		Spawn:
			FWPR A 7 Bright
			TNT1 A 0 A_PlaySound("Warlock/FireColumn")
			TNT1 A 0 A_CustomMissile("PillarOfFlame", 0, -24, 0, CMF_AIMDIRECTION, 0)
			TNT1 A 0 A_CustomMissile("PillarOfFlame", 0, 24, 0, CMF_AIMDIRECTION, 0)
			FWPR B 7 Bright
			TNT1 A 0 A_PlaySound("Warlock/FireColumn")
			TNT1 A 0 A_CustomMissile("PillarOfFlame", 0, -24, 0, CMF_AIMDIRECTION, 0)
			TNT1 A 0 A_CustomMissile("PillarOfFlame", 0, 24, 0, CMF_AIMDIRECTION, 0)
			FWPR A 7 Bright
			TNT1 A 0 A_PlaySound("Warlock/FireColumn")
			TNT1 A 0 A_CustomMissile("PillarOfFlame", 0, -24, 0, CMF_AIMDIRECTION, 0)
			TNT1 A 0 A_CustomMissile("PillarOfFlame", 0, 24, 0, CMF_AIMDIRECTION, 0)
			FWPR B 7 Bright
			TNT1 A 0 A_PlaySound("Warlock/FireColumn")
			TNT1 A 0 A_CustomMissile("PillarOfFlame", 0, -24, 0, CMF_AIMDIRECTION, 0)
			TNT1 A 0 A_CustomMissile("PillarOfFlame", 0, 24, 0, CMF_AIMDIRECTION, 0)
			FWPR A 7 Bright
			TNT1 A 0 A_PlaySound("Warlock/FireColumn")
			TNT1 A 0 A_CustomMissile("PillarOfFlame", 0, -24, 0, CMF_AIMDIRECTION, 0)
			TNT1 A 0 A_CustomMissile("PillarOfFlame", 0, 24, 0, CMF_AIMDIRECTION, 0)
			FWPR B 7 Bright
			TNT1 A 0 A_PlaySound("Warlock/FireColumn")
			TNT1 A 0 A_CustomMissile("PillarOfFlame", 0, -24, 0, CMF_AIMDIRECTION, 0)
			TNT1 A 0 A_CustomMissile("PillarOfFlame", 0, 24, 0, CMF_AIMDIRECTION, 0)
			Stop
	}
}

Actor FireBallMage
{
	Speed 56
	Radius 16
	Height 24
	Mass 0
	Damage (10)
	DamageType "WarlockFireball"
	Obituary "%o was burned by %k's fireball"
	PROJECTILE
	Scale 1.25
	+SKYEXPLODE
	States
	{
	Spawn:
	    MSP2 A 1 bright a_spawnitem("fireballsmoke")
		MSP2 A 1 bright a_spawnitem("fireballsmoke")
		MSP2 B 1 bright a_spawnitem("fireballsmoke")
		MSP2 B 1 bright a_spawnitem("fireballsmoke")
		MSP2 C 1 bright a_spawnitem("fireballsmoke")
		MSP2 C 1 bright a_spawnitem("fireballsmoke")
		MSP2 D 1 bright a_spawnitem("fireballsmoke")
		MSP2 D 1 bright a_spawnitem("fireballsmoke")
		
		Loop
	Death:
		MSP1 G 0 A_PlaySound("FireStaffH")
		MSP1 G 0 A_Explode(20, 48, XF_HURTSOURCE, 0, 28)
		MSP1 GHIJKLMNOP 2 Bright
		TNT1 A 0
		Stop
	}
}

ACTOR fireballSmoke
{   
   Radius 0
   Height 1
   Speed 0
   PROJECTILE
   scale 1.0
   RENDERSTYLE Translucent
   +clientsideonly
	alpha 0.35
   States
   {
   Spawn:
      TNT1 A 3
      SMK2 ABCDE 2 Bright
      Stop 
   }
}

Actor MaledictExploder // this is necessary, calling A_Explode in actor can cause unwanted effects.
{
	Speed 0
	Height 4
	Radius 4
	Damage (0)
	Obituary "$OB_MALEDICT"
	DamageType "Maledict"
	PROJECTILE
	+BLOODLESSIMPACT
	+RIPPER
	States
	{
		Spawn:
			TNT1 A 0
		Goto Death
		Death:
			TNT1 A 1 A_Explode(random(32,40), 144, 0)
			TNT1 A 1
		Stop
	}
}

Actor LightningPlasma : FastProjectile
{
	Alpha 0.84
//	Decal "PlasmaDecal"
	DamageType "WarlockLightning"
	Radius 12
	Height 6
	Speed 100
	Scale 0.85
	SeeSound "LightningHandsFire"
	DeathSound "MageElectricalStorm"
	Damage (random(12,16))
	Obituary "%o was fried by %k's lightning ball."
	Translation "0:255=176:191"
	RenderStyle Add
	+SKYEXPLODE
	States
	{
	Spawn:
		WLBR AB 2 bright
		Loop
	Death:
		ICSP G 3 bright A_SpawnItemEx("LightningExplosion")
		ICSP HIJK 3 bright 
		Stop
	}
}

Actor LightningExplosion
{
	DamageType "WarlockLightning"
	SeeSound "WarlockLightning"
	Obituary "%o was caught in %k's void trap."
	RenderStyle Add
	Scale 1.15
	Alpha 0.75
	PROJECTILE
	+RIPPER
	+BLOODLESSIMPACT
	+NOGRAVITY
	+SKYEXPLODE
	States
	{
	Spawn:
		TNT1 A 1
		Goto Death
	Death: 
		THUN DE 2 bright
		TNT1 A 0 A_Playsound("BarbSwordDeath")
		TNT1 A 0 A_Explode(40, 72, 0)
		THUN DEF 3 bright
		TNT1 A 0 A_Playsound("BarbSwordDeath")
		TNT1 A 0 A_Explode(48, 84, 0)
		THUN ED 2 bright
		TNT1 A 0 A_Playsound("BarbSwordDeath")
		TNT1 A 0 A_Explode(56, 96, 0)
		THUN EFG 3 bright
		TNT1 A 0 A_Playsound("BarbSwordDeath")
		TNT1 A 0 A_Explode(48, 84, 0)
		THUN FED 2 bright
		TNT1 A 0 A_Explode(40, 72, 0)
		THUN P 3 bright A_Fadeout(0.125)
		THUN AAAA 0 A_SpawnItemEx("MagmaSmallBall", 0, 0, 0, random(-20,20), random(-20,20), random(-20,20))
		THUN P 3 bright A_Fadeout(0.125)
		THUN AAAA 0 A_SpawnItemEx("MagmaSmallBall", 0, 0, 0, random(-20,20), random(-20,20), random(-20,20))		
		THUN P 3 bright A_Fadeout(0.125)
		THUN AAAA 0 A_SpawnItemEx("MagmaSmallBall", 0, 0, 0, random(-20,20), random(-20,20), random(-20,20))		
		THUN P 3 bright A_Fadeout(0.125)
		THUN AAAA 0 A_SpawnItemEx("MagmaSmallBall", 0, 0, 0, random(-20,20), random(-20,20), random(-20,20))		
		THUN P 3 bright A_Fadeout(0.125)
		THUN AAAA 0 A_SpawnItemEx("MagmaSmallBall", 0, 0, 0, random(-20,20), random(-20,20), random(-20,20))		
		THUN P 3 bright A_Fadeout(0.125)
		THUN AAAA 0 A_SpawnItemEx("MagmaSmallBall", 0, 0, 0, random(-20,20), random(-20,20), random(-20,20))		
		THUN P 3 bright A_Fadeout(0.125)
		THUN AAAA 0 A_SpawnItemEx("MagmaSmallBall", 0, 0, 0, random(-20,20), random(-20,20), random(-20,20))		
		Loop
	}
}	

Actor MagmaSmallBall
{
	Radius 8
	Height 8
	Speed 10
	Mass 25
	PROJECTILE
	-ACTIVATEPCROSS
	-ACTIVATEIMPACT
	-NOGRAVITY
	RenderStyle Add
	DamageType "WarlockMagmaSmall"
	Obituary "%o got caught in the aftermath of %k's fireball."
	States
	{
	Spawn:
		FX10 ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC 6 Bright A_Explode(3, 9, 0)
		Goto Death
	Death:
		FX10 DEFG 5 Bright A_Explode(3, 6, 0)
		Stop
	}
}

actor PurpleStaffAmmo : Ammo
{
	inventory.amount 1
	inventory.maxamount 50
	inventory.icon "PURPA0"
	+IGNORESKILL
}

actor MaledictCooldownF : PowerDamage
{
	damagefactor "nothing", 1.0
	powerup.duration -5
}

Actor SkullRod2 : Weapon
{
	Weapon.SelectionOrder 4
	Weapon.Slotnumber 4
	Weapon.AmmoUse 1
	Weapon.AmmoGive 50
	Weapon.KickBack 150
	Weapon.AmmoType "PurpleStaffAmmo"
	Weapon.AmmoType2 "PurpleStaffAmmo"
	Inventory.Icon "SKHUA0"
	Scale 0.7
	+WEAPON.NOAUTOAIM
	States
	{
	Spawn:
		WSST J -1
		Stop
	Select:
		WSST A 0 ACS_ExecuteAlways (700, 0, WM_MAGE_SKULL)
		WSST A 1 A_Raise
		TNT1 A 0 A_Raise
		Goto Select+1
	Deselect:
		WSST A 1 A_Lower
		TNT1 A 0 A_Lower
		Loop
	Ready:
		WSST A 48 A_WeaponReady
		WSST A 0 A_JumpIfInventory("PurpleStaffAmmo", 50, "Ready")
		WSST A 0 A_GiveInventory("PurpleStaffAmmo", 10)
		WSST A 0 A_PlaySound("weapons/creepercharge")
		WSST A 0 ACS_ExecuteAlways(706, 0, 1)
		Loop
	Fire:
		TNT1 A 0 A_GiveInventory("UsedAmmo", 1)
		WSST B 2 bright
		WSST C 3 bright
		WSST A 0 A_PlayWeaponSound("SkullShoot")
		WSST A 0 A_FireCustomMissile("SkullRodBall", 0, 1)
		WSST D 3 bright
		WSST E 2 bright
		WSST A 2 A_Refire
		Goto Ready
	AltFire:
		WSST A 1
		TNT1 A 0 A_GiveInventory("UsedAmmo", 1)
		WSST A 0 A_JumpIfInventory("PurpleStaffAmmo", 15, 1)
		GoTo Ready
		WSST A 0 A_JumpIfInventory("MaledictCooldownF", 1, "Ready")
		WSST A 0 A_PlaySound("MaledictStart", 5)
		WSST A 24
		WSST FGH 3 bright
		WSST A 0 A_PlayWeaponSound("MaledictLaunch")
		WSST A 0 A_FireCustomMissile("BigCurseBall", 0, 1)
		WSST A 0 A_TakeInventory("PurpleStaffAmmo", 15)
		TNT1 A 0 ACS_ExecuteAlways(908, 0, 3)
		WSST A 0 A_GiveInventory("MaledictCooldownF", 1)
		WSST I 3 bright
		WSST A 25
		Goto Ready
	}
}

Actor PurpleParticle
{
	+NOINTERACTION
	Scale 0.16
	RenderStyle Add
	States
	{
	Spawn:
		WSST K 3 Bright A_FadeOut(0.08)
		Loop
	}
}

Actor PurpleParticle2 : PurpleParticle
{
	+NOINTERACTION
	Scale 0.06
	RenderStyle Add
	States
	{
	Spawn:
		WSST K 2 Bright A_FadeOut(0.08)
		Loop
	}
}

Actor PurpleExploder : MaledictExploder
{
	Damagetype "PurpleMagic"
	Obituary "%o was sent to the netherworld by %k's magic."
	States
	{
		Spawn:
			TNT1 A 0
		Goto Death
		Death:
			TNT1 A 1 A_Explode(12, 48, 0)
			TNT1 A 1
		Stop
	}
}

Actor ZOMGLIGHT
{
	+NOGRAVITY
	States
	{
		Spawn:
			TNT1 ABCD 4
		Stop
	}
}

ACTOR SkullRodBall
{
	Radius 12
	Height 8
	Speed 50
	Damage (20)
	Damagetype "PurpleMagic"
	Obituary "%o was sent to the netherworld by %k's magic."
	Projectile
	Scale 0.65
	RenderStyle Add // Translucent
	DeathSound "StarHit"
	Alpha 0.85
	States
	{
	Spawn:
		WSST L 0
		WSST L 0 A_Jump(170,3,5,7)
		WSST LLMMNNOO 1 bright A_SpawnItemEx("PurpleParticle", 0, 0, 0, random(-2,0), random(-2,2), random(-2,2))
		Goto Spawn+2
	Death:
		TNT1 A 0 A_SpawnItem("PurpleExploder")
		TNT1 A 0 A_SpawnItem("ZOMGLIGHT")
		TNT1 AAAAAAA 0 A_SpawnItemEx("PurpleParticle",0,0,0,random(1,-1),random(1,-1),random(1,-1),random(0,359),0)
		WSST PQRSTU 3 bright
		Stop
	}
}

Actor BigCurseBall
{
	Damagetype "Maledict"
	Obituary "$OB_MALEDICT"
	Radius 10
	Height 12
	Speed 40
	Damage (random(16,22))
	Projectile
	Scale 1.25
	Renderstyle Add
	Alpha 0.85
	Gravity 0.9
	-NOGRAVITY
	States
	{
		Spawn:
			SBS1 ABCD 5 Bright A_SpawnItemEx("CurseBallTrail")
		Loop
		Death:
			TNT1 A 0 A_SpawnItem("MaledictExploder")
			TNT1 A 0 A_PlaySound("Malediction")
			TNT1 A 0 A_SpawnItemEx("BigCurseBallDeath", 0, 0, 0, 0, 0, 1)
			TNT1 A 0 A_SpawnItemEx("BigNathrezimLight")
			TNT1 AA 0 A_SpawnItemEx ("GIB1", 1, 1, random(8,32), random(0,5), random(0,5), 0, random(0,360), 160, 0)
			TNT1 AA 0 A_SpawnItemEx ("GIB2", 1, 1, random(8,32), random(0,5), random(0,5), 0, random(0,360), 160, 0)
			TNT1 AA 0 A_SpawnItemEx ("GIB3", 1, 1, random(8,32), random(0,5), random(0,5), 0, random(0,360), 160, 0)
			TNT1 AA 0 A_SpawnItemEx ("GIB4", 1, 1, random(8,32), random(0,5), random(0,5), 0, random(0,360), 160, 0)
			TNT1 AA 0 A_SpawnItemEx ("GIB5", 1, 1, random(8,32), random(0,5), random(0,5), 0, random(0,360), 160, 0)		
		Stop
	}
}

Actor CurseBallTrail
{
	Radius 1
	Height 1
	Renderstyle Add
	Alpha 1.25
	+NOBLOCKMAP
	+NOGRAVITY
	Scale 0.85
	States
	{
		Spawn:
			SBS1 A 2 bright A_Fadeout(0.15)
		Loop
	}
}

Actor BigCurseBall2 : BigCurseBall
{
	DamageType "Maledict2"
	Obituary "%o couldn't withstand the dreadful curse of %k."
}

Actor BigCurseBallDeath
{
  Radius 1
  Height 1
  +NoGravity
  +NoClip
  RenderStyle Translucent
  Alpha 0.8
  States
  {
  Spawn:
    BSBL GHIJKL 4 Bright
    BSBL L 2 Bright A_FadeOut(0.05)
    Goto Spawn+6
  }
}

Actor BigNathrezimLight
{ 	
	+NOGRAVITY
	States
	{
		Spawn:
			OMG1 A 16
		Stop
	}
}

Actor MaledictDamageAmp : PowerProtection
{
	Powerup.Duration -6
	DamageFactor "Normal", 1.25
}

actor MaledictCooldown : PowerDamage
{
	damagefactor "nothing", 1.0
	powerup.duration -6
}

Actor MaledictAmpPower: PowerupGiver
{
	Inventory.MaxAmount 1
	Powerup.Type MaledictDamageAmp
	Powerup.Duration -6
	+AUTOACTIVATE
	States
	{
		Spawn:
			TNT1 A 1
		Stop
	}
}

Actor MaledictStart : CustomInventory
{
	inventory.maxamount 1
	+ALWAYSPICKUP
	+AUTOACTIVATE
	
	States
	{
		Pickup:
			TNT1 A 0 ACS_ExecuteAlways(854, 0)
		Stop
	}
}

Actor MaledictFader : CustomInventory
{
	inventory.maxamount 1
	+ALWAYSPICKUP
	+AUTOACTIVATE
	
	States
	{
		Pickup:
			TNT1 A 0 ACS_ExecuteAlways(850, 0)
		Stop
	}
}

actor TeleportCooldown : PowerDamage
{
	damagefactor "nothing", 1.0
	powerup.duration -9
}

actor GhoulSoul
{
  Radius 2
  Height 2
  Speed 1
  Alpha 0
  Scale 0.5
  RenderStyle Add
  +CLIENTSIDEONLY
  +NOINTERACTION
  +RIPPER
  +NOGRAVITY
  States
  {
  Spawn:
    DAMD A 0 BRIGHT
    DAMD A 1 BRIGHT A_PlaySoundEx("GhoulSoulSpawn", 5)
    //fall through
  FadeIn:
    DAMD A 2 BRIGHT A_SetTranslucent (0.05, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.1, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.15, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.2, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.25, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.3, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.35, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.4, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.45, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.5, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.55, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.6, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.65, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.7, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.75, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.8, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.85, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.9, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (0.95, 1)
    DAMD A 2 BRIGHT A_SetTranslucent (1, 1)
  Linger:
    DAMD A 4 BRIGHT
  FadeOut:
    DAMD A 1 BRIGHT A_FadeOut(0.025)
    loop
  }
}

Actor GhoulSouls : CustomInventory
{
	Inventory.Amount 1
	Inventory.MaxAmount 32
	inventory.icon "SOULA0"
	+INVBAR
	+INVENTORY.UNDROPPABLE
	+AUTOACTIVATE
	states
	{
	Spawn:
		TNT1 A 1
		Stop
	Use:
		TNT1 A 1 ACS_ExecuteAlways(853, 0)
		TNT1 A 0 A_PlaySoundEx ("ConsumeSoul", 6)
		TNT1 A 0 A_SpawnItemEx ("SoulEffectSpawner")
		TNT1 A 0 A_GiveInventory ("SoulConsumed",1)
		TNT1 A 0 A_GiveInventory ("CheckAchievements",1)
		Stop
	}	
}

Actor SoulConsumed : Inventory
{
	Inventory.Amount 1
	Inventory.MaxAmount 255
}

Actor BoneShieldItem : CustomInventory
{
	inventory.amount 1
	inventory.maxamount 1
	inventory.icon "SBONA0"
	+INVBAR
	+INVENTORY.UNDROPPABLE
	states
	{
	Spawn:
		TNT1 A 1
		Stop
	Use:
		TNT1 A 1 ACS_ExecuteAlways(767, 0, 1)
		TNT1 AA 0 A_PlaySoundEx ("BoneShieldActivate", 6)
		Stop
	}
}

Actor BoneShieldArmor : BasicArmorBonus
{
	inventory.icon "SBONA0"
	Armor.SavePercent 100.0
	Armor.SaveAmount 75
	Armor.MaxSaveAmount 150
}

Actor WSoulHP : Health
{
	Inventory.Amount 150
	Inventory.MaxAmount 150
}

Actor WarlockSoul : CustomInventory
{
	Inventory.MaxAmount 1
	Inventory.PickupMessage "Consumed a powerful warlock's soul!"
	Inventory.PickupSound "soulpickup"
	+FLOATBOB
//	+ALWAYSPICKUP
	+AUTOACTIVATE
	  States
	  {
	  Spawn:
		WMSO ABCDCB 6 Bright
		Loop
		Pickup:
			TNT1 A 0 A_JumpIfInventory("HumanTeam", 1, 1)
		Fail
			TNT1 A 0 A_GiveInventory("WSoulHP", 1)
		Stop
	  }
}

Actor BoneExplosion
{
	Speed 0
	Height 4
	Radius 4
	Damage (0)
	Obituary "%o was mutilated by %k's boneshield."
	DamageType "BoneShield"
	PROJECTILE
	+RIPPER
	States
	{
		Spawn:
			TNT1 A 0
		Goto Death
		Death:
			TNT1 A 1 A_Explode(random(48,56), 108, 0)
			TNT1 A 1
		Stop
	}
}

Actor TeleportEffect1
{
  Radius 1
  Height 1
  +NoGravity
  +NoClip
  RenderStyle Translucent
  Alpha 0.8
  States
  {
  Spawn:
    X010 YXWVUTSRQPONMLKJIHGFEDCA 2 Bright A_Fadeout(0.035)
    Stop
  }
}

Actor TeleportEffect2 : TeleportEffect1
{
  States
  {
  Spawn:
    X010 ACDEFGHIJKLMNOPQRSTUVWXY 2 Bright A_Fadeout(0.035)
    Stop
  }
}

Actor TeleportationItem : CustomInventory
{
	inventory.amount 1
	inventory.maxamount 10
	inventory.icon "WTELA0"
	+INVBAR
	+INVENTORY.UNDROPPABLE
	states
	{
	Spawn:
		TNT1 A 1
		Stop
	Use:
		TNT1 A 1
		TNT1 A 0 A_JumpIfInventory("TeleportCooldown", 1, "Failure")
		TNT1 A 1 ACS_ExecuteAlways(774, 0, FAS_WarlockTeleport)
		TNT1 AA 0 A_PlaySoundEx ("WarlockTeleport", 6)
		TNT1 A 0 ACS_ExecuteAlways(908, 0, 4)
		TNT1 A 0 A_GiveInventory("TeleportCooldown", 1)
		Stop
	Failure:
		TNT1 A 1
		Fail
	}
}

Actor SkullRodItemCheck : Inventory
{
	inventory.amount 1
	inventory.maxamount 1
}

Actor SmokeExploder : MaledictExploder
{
	Obituary "%o was lost in shadows of %k."
	DamageType "ShadowBlast"
	States
	{
		Spawn:
			TNT1 A 1
		Goto Death
		Death:
			TNT1 A 1 A_Explode(random(32,44), 128, 0)
			TNT1 A 1
		Stop
	}
}

Actor ShadowSmoke
{
	Radius 1
	Height 1
	+FLOORHUGGER
	RenderStyle Add
	States
	{
		Spawn:
			X117 ABCDEGHIJKLMNOPQRSTUVWXYZ 1 A_FadeOut(0.025)
		Stop
	}
}

Actor ShadowSmokeSpawner
{
	Radius 1
	Height 1
	Projectile
	Speed 32
	Damage (0)
	Obituary "%o was lost in shadows of %k."
	DamageType "ShadowBlast"	
	+RIPPER
	+BLOODLESSIMPACT
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 4 A_SpawnItem("ShadowSmoke")
			TNT1 A 0 A_SpawnItem("SmokeExploder")
			TNT1 A 4 A_SpawnItem("ShadowSmoke")
			TNT1 A 0 A_SpawnItem("SmokeExploder")
			TNT1 A 4 A_SpawnItem("ShadowSmoke")
			TNT1 A 0 A_SpawnItem("SmokeExploder")
			TNT1 A 4 A_SpawnItem("ShadowSmoke")
			TNT1 A 0 A_SpawnItem("SmokeExploder")
			TNT1 A 4 A_SpawnItem("ShadowSmoke")
			TNT1 A 0 A_SpawnItem("SmokeExploder")
		Stop
	}
}

Actor TeleportBlast
{
	Speed 0
	Height 4
	Radius 4
	Damage (0)
	Obituary "%o surely didn't expect %k to end up %p ass!"
	DamageType "ShadowBlast"
	PROJECTILE
	+RIPPER
	States
	{
		Spawn:
			TNT1 A 0
		Goto Death
		Death:
			TNT1 A 1 A_Explode(random(96,128), 160, 0)
			TNT1 A 1
		Stop
	}
}

Actor BoneShieldParticles
{
	PROJECTILE
	+BRIGHT
	Speed 42
	Height 6
	Radius 6
	Obituary "%o was mutilated by %k's boneshield."
	DamageType "BoneShield"
	Damage (random(5,9))
	DeathSound "boneparticlehit"
	States
	{
	Spawn:
		WBON A 2
		loop
	Death:
		HHPF ABCDEF 4
		Stop
	}
}

Actor BoneShieldSpark
{
	Radius 1
	Height 1
	+NoGravity
	+NoClip
	RenderStyle Translucent
	Alpha 0.75
	Scale 0.85
	+CLIENTSIDEONLY
	States
	{
		Spawn:
			WSPA A 3 A_Fadeout(0.15)
		Loop
	}
}

Actor WarlockBoneChecker : CustomInventory
{
	inventory.amount 1
	inventory.maxamount 5
	+INVENTORY.UNDROPPABLE
	+AUTOACTIVATE
	States
	{
		Spawn:
			TNT1 A 1
			Stop
		Use:
			TNT1 A 1
			TNT1 A 0 ACS_ExecuteAlways(855, 0)
			Stop
	}
}

Actor BoneFX
{
	Height 1
	Radius 1
	Damage (0)
	Projectile
	RenderStyle Add
	Alpha 0.15
	Scale 0.2
	+RIPPER
	+BLOODLESSIMPACT
	-BLOODSPLATTER
	Speed 0
	States
	{
		Spawn:
			DKFX A 3 Bright ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_FadeIn(0.1)
			DKFX B 3 Bright ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_FadeIn(0.1)
			DKFX C 3 Bright ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_FadeIn(0.1)
			DKFX D 3 Bright ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_FadeIn(0.1)
			DKFX E 3 Bright ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_FadeOut(0.1)
			DKFX F 3 Bright ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_FadeOut(0.1)
			DKFX G 3 Bright ThrustThingZ(0, 16, 0, 0)
			TNT1 A 0 A_FadeOut(0.1)
			DKFX H 3 Bright ThrustThingZ(0, 16, 0, 0)
		Stop
	}
}

// By Tormentor667
Actor SoulUseEffect
{
	+Missile
	+NoGravity
	+NoBlockmap
	+NoInteraction
	-Solid
	Radius 0
	Height 0
	RenderStyle Add
	Alpha 0.01
	Scale 0.6
	translation "0:255=196:207"
	States
	{
	Spawn:
		SPFX AAAAA 1 Bright A_FadeIn(0.2)
		SPFX AAAAAAAAAAAAAAAA 1 Bright A_FadeOut(0.06)
		Stop
	}
}

Actor SoulEffectSpawner
{
	+NoBlockMap 
	+NoGravity 
	+NoSector 
	+NoInteraction 
	+NoClip 
	-Solid 
	+CLIENTSIDEONLY
	translation "0:255=196:207"
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 1 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 0 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 1 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 0 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 0 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 0 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 0 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 0 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 0 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 0 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 0 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 0 A_SpawnItemEx("SoulUseEffect", random(-32, 32), random(-32, 32), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		Stop
	}        
}

Actor WarlockUnlockEffect
{
	+NoGravity
	+NoBlockmap
	+NoInteraction
	-Solid
	+CLIENTSIDEONLY
	Radius 0
	Height 0
	RenderStyle Add
	Alpha 0.1
	Scale 0.4
	States
	{
	Spawn:
		X123 ABCDEF 1 Bright A_FadeIn(0.2)
		X123 GHIJKLMNOPQRSTUVWXY 1 Bright A_FadeOut(0.03)
		Stop
	}
}

Actor WarlockUnlockEffectSpawner
{
	+NoBlockMap 
	+NoGravity 
	+NoSector 
	+NoInteraction 
	+NoClip 
	-Solid 
	+CLIENTSIDEONLY
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 1 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 AA 0 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 1 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 AA 0 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 AA 0 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 0 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 AA 0 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 0 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 AA 0 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 0 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 0 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		TNT1 A 1 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0) 
		TNT1 A 0 A_SpawnItemEx("WarlockUnlockEffect", random(-64, 64), random(-64, 64), random(0, 8), 0, 0, random(2,8), 0, 129, 0)
		Stop
	}        
}

Actor SoulUnlockEffectGiver : CustomInventory
{
	inventory.maxamount 1
	+AUTOACTIVATE
	+ALWAYSPICKUP
	
	States
	{
		Use:
			TNT1 A 0 A_SpawnItemEx("WarlockUnlockEffectSpawner")
		Stop
	}
}

actor WarlockStomp : CyborgStomp
{
	deathsound "WarlockStep"
	+CLIENTSIDEONLY
}

Actor SoulKeeper : Inventory
{
	inventory.amount 1
	inventory.maxamount 999
	+IGNORESKILL
}

actor WarlockLightSpawner
{
	Radius 8
	Height 8
	Scale 0.5
	+NOGRAVITY
	States
	{
		Spawn:
		TNT1 A 5
		Stop
	}
}

Actor BoneExplosionItem : CustomInventory {
	inventory.maxamount 1
	+ALWAYSPICKUP
	+AUTOACTIVATE
	States {
		Pickup:
			TNT1 A 0 A_SpawnItemEx("BoneExplosion")
			TNT1 A 0 A_SpawnItemEx("BoneShieldSpark")
			TNT1 AA 0 A_PlaySoundEx("BoneShieldShatter", 6)
			TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("BoneShieldParticles", 0, 0, 0, random(-24,24), random(-24,24), random(1,24), 0)
		Stop
	}
}