Actor DreamingGod : McM_Monster replaces SpiderMastermind {
	tag "The Dreaming God"
	obituary "%o was disintegrated for gazing upon The Dreaming God."
	health 4750
	radius 60
	height 100
	ProjectilePassHeight 144
	mass 16384
	speed 5
	painchance 8
	seesound "Dreamer/See"
	painsound "Dreamer/See"
	deathsound "Dreamer/Die"
	activesound "Dreamer/Act"
	Scale 0.85
	MONSTER
	+FLOORCLIP
	+BOSS
	+BOSSDEATH
	+QUICKTORETALIATE
	+MISSILEMORE
	+MISSILEEVENMORE
	+NORADIUSDMG
	+DONTBLAST
	+DONTHURTSPECIES
	+DONTHARMSPECIES
	const int dreamer_burn = 3;
	states {
		Idle:
			TNT1 A 0 A_JumpIfInventory("MCM_HealthSet", 1, "IdleLoop")
			TNT1 A 0 A_GiveInventory("MCM_HealthSet", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("Set Max Health")
			TNT1 A 0 ACS_NamedExecuteAlways("Dreamer Burn", 0, dreamer_burn)
		IdleLoop:
			TCHR A 10 A_Look
		loop
		See:
			TCHR AAAAA 1 A_Chase("", "", CHF_NOPLAYACTIVE)
			TCHR BBBBB 1 A_Chase
			TCHR CCCCC 1 A_Chase("", "", CHF_NOPLAYACTIVE)
			TNT1 A 0 A_PlaySound("Dreamer/Hoof")
			TNT1 A 0 A_SpawnItemEx("DreamerStomp")
			TCHR DDDDD 1 A_Chase
			TCHR EEEEE 1 A_Chase("", "", CHF_NOPLAYACTIVE)
			TCHR FFFFF 1 A_Chase
			TNT1 A 0 A_PlaySound("Dreamer/Hoof")
			TNT1 A 0 A_SpawnItemEx("DreamerStomp")
		loop
		Missile:
			TNT1 A 0 A_GiveInventory("TchernoLightningShooter", 1)
			TNT1 A 0 A_Jump(128, "Circle", "Portal", "LongRange")
		MissileRedecide:
			TNT1 A 0 A_Jump(128, "LongRange", "Portal")
		MissileNormal:
			TCHR G 5
			TNT1 A 0 A_VileTarget("DreamerDamager")
			TCHR H 3 Bright A_FaceTarget
			TCHR I 3 Bright A_FaceTarget
			TNT1 A 0 A_VileTarget("DreamerDamager")
			TCHR H 3 Bright A_FaceTarget
			TCHR I 3 Bright A_FaceTarget
			TNT1 A 0 A_CustomMissile("TchernobogMissile2", 92, 24, 0, CMF_AIMOFFSET)
			TNT1 A 0 A_CustomMissile("TchernobogMissile", 92, -24, 0, CMF_AIMOFFSET)
			TCHR J 6 Bright
			TCHR G 5
		Goto See
		NoBehaviorRedecide:
			TNT1 A 0 A_Jump(128, "LongRange")
		Goto MissileNormal
		LongRange:
			TNT1 A 0 A_Jump(64, "SkipToLong")
			TNT1 A 0 A_JumpIfCloser(416, "MissileNormal")
		SkipToLong:
			TCHR G 5
			TNT1 A 0 A_VileTarget("DreamerDamager")
			TCHR H 3 Bright A_FaceTarget
			TCHR I 3 Bright A_FaceTarget
			TNT1 A 0 A_VileTarget("DreamerDamager")
			TCHR H 3 Bright A_FaceTarget
			TCHR I 3 Bright A_FaceTarget
			TNT1 A 0 A_FaceTarget
			TCHR J 3 Bright A_CustomMissile("SplitParticle1", 92)
			TNT1 A 0 A_FaceTarget
			TCHR J 3 Bright A_CustomMissile("SplitParticle2", 92)
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_CustomMissile("SplitParticle3", 92, 0, -16)
			TNT1 A 0 A_CustomMissile("SplitParticle3", 92, 0, -12)
			TNT1 A 0 A_CustomMissile("SplitParticle3", 92, 0, -8)
			TNT1 A 0 A_CustomMissile("SplitParticle3", 92, 0, -4)
			TNT1 A 0 A_CustomMissile("SplitParticle3", 92, 0, 16)
			TNT1 A 0 A_CustomMissile("SplitParticle3", 92, 0, 12)
			TNT1 A 0 A_CustomMissile("SplitParticle3", 92, 0, 8)
			TNT1 A 0 A_CustomMissile("SplitParticle3", 92, 0, 4)
			TCHR J 3 Bright A_CustomMissile("SplitParticle3", 92)
			TNT1 A 0 A_FaceTarget
			TCHR J 3 Bright A_CustomMissile("SplitParticle4", 92)
			TNT1 A 0 A_FaceTarget
			TCHR J 3 Bright A_CustomMissile("SplitParticle5", 92)
			TCHR G 5
		Goto See
		Portal:
			TNT1 A 0 A_JumpIfInventory("MCM_BehaviorToggle", 1, "ContinuePortal")
		Goto NoBehaviorRedecide
		ContinuePortal:
			TNT1 A 0 A_JumpIfInventory("TchernoPortalCooldown", 1, "MissileNormal")
			TNT1 AAA 0 A_PlaySoundEx("Dreamer/Cast", 7, 0, ATTN_NONE)
			TCHR G 5 
			TCHR HIHI 3 Bright
			TNT1 A 0 A_SpawnItem("TchernoPortal", 0, 192)
			TNT1 A 0 A_GiveInventory("TchernoPortalCooldown", 1)
			TCHR J 6 Bright A_CustomMissile("ActualTchernoPortal", 144)
			TCHR K 8
		Goto See
		Circle:
			TNT1 A 0 A_JumpIfInventory("MCM_BehaviorToggle", 1, "ContinueCircleCheck")
		Goto NoBehaviorRedecide
		ContinueCircleCheck:
			TNT1 A 0 A_JumpIfCloser(520, "CircleContinue")
		Goto MissileRedecide
		CircleContinue:
			TNT1 AAA 0 A_PlaySoundEx("Dreamer/Cast", 7, 0, ATTN_NONE)
			TCHR G 5 
			TCHR HIHIHIHI 3 Bright A_FaceTarget
			TCHR J 6 Bright A_SpawnItem("TchernoExplosionCircle", 0, 128)
			TCHR G 8
		Goto See
		Pain:
			TNT1 A 0 A_JumpIfHealthLower(2 * ACS_NamedExecuteWithResult("Spawn Health Receive") / 3, "PainX")
			TCHR L 11 A_Pain
		Goto See
		PainX:
			TNT1 A 0 A_JumpIfInventory("MCM_BehaviorToggle", 1, "SkipPainX")
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 0, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 45, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 90, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 135, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 180, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 225, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 270, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 335, CMF_AIMDIRECTION)
			TNT1 A 0 Radius_quake(2,18,0,256,0)
			TCHR L 11 A_PlaySound("Dreamer/Pain")
		SkipPainX:
			TNT1 A 0
		Goto See
		Death:
			TCHR L 9 A_Scream
			TNT1 A 0 A_NoBlocking
			TCHR LLLLLLL 17 A_SpawnItemEx("TchernoLightningFX")
			TCHR M 7
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", 64, 0)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", -64, 0)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", 45, 45)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", -45, -45)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", 45, -45)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", -45, 45)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", 0, 64)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", 0, -64)
			TNT1 A 0 A_NoBlocking
			TCHR NO 7
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", 64, 0)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", -64, 0)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", 45, 45)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", -45, -45)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", 45, -45)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", -45, 45)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", 0, 64)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", 0, -64)
			TCHR PQ 7
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", 64, 0)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", -64, 0)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", 45, 45)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", -45, -45)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", 45, -45)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", -45, 45)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", 0, 64)
			TNT1 A 0 A_SpawnItemEx("TchernoLightningFX", 0, -64)
			TCHR Q -1 A_BossDeath
		Stop
		Death.Corpse:
			TCHR Q -1
		Stop
	}
}

Actor TchernoLightningShooter : MCM_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfHealthLower(2 * ACS_NamedExecuteWithResult("Spawn Health Receive") / 3, "Go")
		Stop
		Go:
			TNT1 A 0 A_JumpIfInventory("MCM_BehaviorToggle", 1, "GoForReal")
		Stop
		GoForReal:
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 0, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 45, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 90, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 135, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 180, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 225, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 270, CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("TchernoLightning", 0, 0, 335, CMF_AIMDIRECTION)
		Stop
	}
}

actor TchernobogMissile {
	Decal Scorch
	radius 16
	height 9
	XScale 0.95
	YScale 0.675
	speed 25
	RENDERSTYLE ADD
	damage (24 * random(3, 5))
	PROJECTILE
	+DONTSPLASH
	+DONTBLAST
	+DONTREFLECT
	DamageType "CyberExp"
	deathsound "Cerberus/Explode"
    alpha 0.75
	states {
		Spawn:
			TROK A 1 bright A_SpawnItem ("TfireTrail",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK A 1 bright A_SpawnItem ("TfireTrail",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK A 1 bright A_SpawnItem ("TfireTrail",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK B 1 bright A_SpawnItem ("TfireTrail",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK B 1 bright A_SpawnItem ("TfireTrail",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK B 1 bright A_SpawnItem ("TfireTrail",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK C 1 bright A_SpawnItem ("TfireTrail",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK C 1 bright A_SpawnItem ("TfireTrail",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK C 1 bright A_SpawnItem ("TfireTrail",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK D 1 bright A_SpawnItem ("TfireTrail",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK D 1 bright A_SpawnItem ("TfireTrail",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK D 1 bright A_SpawnItem ("TfireTrail",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK E 1 bright A_SpawnItem ("TfireTrail",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK E 1 bright A_SpawnItem ("TfireTrail",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK E 1 bright A_SpawnItem ("TfireTrail",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
		loop
		Death:
			TNT1 A 0 A_SpawnItem("TchernobogExplosion")
			TNT1 A 0 Radius_quake(2,8,0,16,0)
			TEX2 ABC 3 bright    
			TNT1 A 0 Radius_Quake (1,10,0,16,0)
			TEX2 DEFG 3 bright
			TEX2 HIJ 2 bright
			TEX2 KL 2 bright
		stop
	}
}

Actor TchernobogMissile2 : TchernobogMissile {
	States {
		Spawn:
			TROK A 1 bright A_SpawnItem ("TfireTrail2",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK A 1 bright A_SpawnItem ("TfireTrail2",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK A 1 bright A_SpawnItem ("TfireTrail2",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK B 1 bright A_SpawnItem ("TfireTrail2",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK B 1 bright A_SpawnItem ("TfireTrail2",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK B 1 bright A_SpawnItem ("TfireTrail2",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK C 1 bright A_SpawnItem ("TfireTrail2",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK C 1 bright A_SpawnItem ("TfireTrail2",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK C 1 bright A_SpawnItem ("TfireTrail2",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK D 1 bright A_SpawnItem ("TfireTrail2",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK D 1 bright A_SpawnItem ("TfireTrail2",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK D 1 bright A_SpawnItem ("TfireTrail2",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK E 1 bright A_SpawnItem ("TfireTrail2",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK E 1 bright A_SpawnItem ("TfireTrail2",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
			TROK E 1 bright A_SpawnItem ("TfireTrail2",random(-2,-1),0+random(-1,1),0,0)
			TNT1 A 0 A_SpawnItem("TFlyFX")
		Loop
	}
}

Actor DreamerBurnCount : Inventory {
	inventory.maxamount 32
}

Actor TFlyFX {
	Renderstyle Add
	Alpha 0.85
	Scale 0.325
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			TNT1 A 2 NoDelay A_jump(128, "Other")
		SpawnLoop:
			TMIS A 1 A_FadeOut(0.0625)
		Loop
		Other:
			TMIS B 1 A_FadeOut(0.0625)
		Loop
	}
}

Actor TchernobogExplosion {
	+FORCERADIUSDMG
	+NOGRAVITY
	+MISSILE
	States {
		Spawn:
			TNT1 A 8 NoDelay A_Explode(128, 160, 0)
			TNT1 AAAAAA 4 A_Explode(28, 160, 0)
		Stop
	}
}

Actor DreamerStomp {
	+DONTSPLASH
	+PAINLESS
	+NOTIMEFREEZE
	+BLOODLESSIMPACT
	+NODAMAGETHRUST
	+DONTBLAST
	Radius 1
	Height 1
	Obituary "%o got too close to The Dreaming God."
    States {
		Spawn:
			TNT1 A 1
			TNT1 A 1 A_Explode(128, 128, 0)
		Stop	
	}
}

Actor TFireTrail {
	radius 1
	height 1
	RENDERSTYLE ADD
	Scale 0.33
	alpha 0.9
	+NOINTERACTION
	+CLIENTSIDEONLY
	+RANDOMIZE
	States {
		Spawn:
			TNT1 A 0 NoDelay A_Jump(220,1,2,3,4,5,6,7)
			TFIR ABCDEFGH 4 bright
		stop
	}
}

Actor TFireTrail2 : TFireTrail {
	States {
		Spawn:
		    TNT1 A 0 NoDelay A_Jump(220,1,2,3,4,5,6,7)
			TFIR IJKLMNOP 4 bright
		Stop
	}
}

Actor DreamerDamager {
	Height 1
	Radius 1
	DamageType Fire
	+NOGRAVITY
	States {
		Spawn:
			TNT1 A 1 NoDelay A_Explode(2, 36, 0, 0, 36)
			TNT1 A 1 A_GiveInventory("DreamerBurnCount", random(1, 3), AAPTR_TRACER)
		Stop
	}
}

Actor DreamerBurnFireSpawner {
	const int spawn_count = 8;
	var int user_counter;
	+NOINTERACTION
	+CLIENTSIDEONLY
	States {
		Spawn:
			TNT1 A 1 NoDelay A_SetUserVar("user_counter", 0)
		SpawnLoop:
			TNT1 A 0 A_JumpIf(user_counter == spawn_count, "Finish")
			TNT1 A 0 A_Jump(128, "Other")
			TNT1 A 1 A_SpawnItemEx("TFireTrail", frandom(-32, 32), frandom(-32, 32), frandom(0, 48), 0, 0, frandom(1, 4))
			TNT1 A 0 A_SetUserVar("user_counter", user_counter + 1)
		Loop
		Other:
			TNT1 A 1 A_SpawnItemEx("TFireTrail2", frandom(-32, 32), frandom(-32, 32), frandom(0, 48), 0, 0, frandom(1, 4))
			TNT1 A 0 A_SetUserVar("user_counter", user_counter + 1)
		Goto SpawnLoop
		Finish:
			TNT1 A 0
		Stop
	}
}

Actor DreamerBurnFXStarter : MCM_Activator {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("Dreamer Burn FX", 0, 17)
		Stop
	}
}

Actor TchernoExplosion 
{
	Speed 40
	Radius 8
	Height 8
	Scale 0.85
	PROJECTILE
	Damage 0
	+RIPPER
	+FLOORHUGGER
	+BLOODLESSIMPACT
	+FORCERADIUSDMG
	Obituary "%o was disemboweled by The Dreaming God."
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_PlaySound("Cerberus/Explode")
			TEX2 A 3 Bright A_Explode(24, 128, 0)
			TNT1 A 0 A_SpawnItem("TFlyFX", 0, 32)
			TEX2 A 2 Bright A_Explode(24, 128, 0)
			TNT1 A 0 A_SpawnItem("TFlyFX", 0, 32)
			TEX2 B 3 Bright A_Explode(48, 128, 0)
			TNT1 A 0 A_SpawnItem("TFlyFX", 0, 32)
			TEX2 B 2 Bright A_Explode(48, 128, 0)
			TNT1 A 0 A_SpawnItem("TFlyFX", 0, 32)
			TEX2 C 3 Bright A_Explode(96, 128, 0)
			TNT1 A 0 A_SpawnItem("TFlyFX", 0, 32)
			TEX2 C 2 Bright A_Explode(96, 128, 0)
		Death:
			TNT1 A 0 A_Stop
			TEX2 DEFGHIJKL 3 Bright A_Explode(36, 128, 0)
		Stop
	}
}

Actor TchernoExplosionHigh : TchernoExplosion {
	-FLOORHUGGER
}

Actor TchernoExplosionCircle {
	Radius 1
	Height 1
	+MISSILE
	+NOGRAVITY
	+NOCLIP
	States {
		Spawn:
			TNT1 A 1
			TNT1 A 0 A_CustomMissile("TchernoExplosionHigh", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 2 A_CustomMissile("TchernoExplosion", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)			
			TNT1 A 0 A_CustomMissile("TchernoExplosionHigh", 0, 0, 30, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 2 A_CustomMissile("TchernoExplosion", 0, 0, 30, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("TchernoExplosionHigh", 0, 0, 60, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 2 A_CustomMissile("TchernoExplosion", 0, 0, 60, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("TchernoExplosionHigh", 0, 0, 90, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 2 A_CustomMissile("TchernoExplosion", 0, 0, 90, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("TchernoExplosionHigh", 0, 0, 120, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 2 A_CustomMissile("TchernoExplosion", 0, 0, 120, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("TchernoExplosionHigh", 0, 0, 150, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 2 A_CustomMissile("TchernoExplosion", 0, 0, 150, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("TchernoExplosionHigh", 0, 0, 180, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 2 A_CustomMissile("TchernoExplosion", 0, 0, 180, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("TchernoExplosionHigh", 0, 0, 210, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 2 A_CustomMissile("TchernoExplosion", 0, 0, 210, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("TchernoExplosionHigh", 0, 0, 240, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 2 A_CustomMissile("TchernoExplosion", 0, 0, 240, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("TchernoExplosionHigh", 0, 0, 270, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 2 A_CustomMissile("TchernoExplosion", 0, 0, 270, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("TchernoExplosionHigh", 0, 0, 300, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 2 A_CustomMissile("TchernoExplosion", 0, 0, 300, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("TchernoExplosionHigh", 0, 0, 330, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 2 A_CustomMissile("TchernoExplosion", 0, 0, 330, CMF_AIMDIRECTION | CMF_TRACKOWNER)
		Stop
	}
}

actor SplitParticleFX
{
  radius 1
  height 1
  Speed 10
  Scale 0.2
  PROJECTILE
  +NOBLOCKMAP
  +DONTSPLASH
  +RANDOMIZE
  -NOGRAVITY
  -SOLID
  +CLIENTSIDEONLY
  RENDERSTYLE ADD
  states
  {
  Spawn:
    EYEP A 0 bright
    EYEP A 10 bright
    EYEP A 200 bright A_LowGravity
    stop
    EYEP B 10 bright
    EYEP B 200 bright A_LowGravity
    stop
    EYEP C 10 bright
    EYEP C 200 bright A_LowGravity
    stop
    EYEP D 10 bright
    EYEP D 200 bright A_LowGravity
    stop
    EYEP E 10 bright
    EYEP E 200 bright A_LowGravity
    stop
    EYEP F 10 bright
    EYEP F 200 bright A_LowGravity
    stop
  Death:
    EYEP F 1
    stop
  }
}

actor SplitParticleAfterLight
{
	Radius 8
	Height 8
	Scale 0.5
	+CLIENTSIDEONLY
	+NOINTERACTION
	States
	{
		Spawn:
			TNT1 A 4
			TNT1 A 1
		Stop
	}
}

Actor SplitTrail_A {
	+NOINTERACTION
	+CLIENTSIDEONLY
	Renderstyle Add
	Alpha 0.85
	Scale 0.65
	States {
		Spawn:
			TNT1 A 1
		SpawnLoop:
			EYEB A 1 A_FadeOut(0.075)
			TNT1 A 0 A_SetScale(scalex - 0.05, scaley - 0.05)
		Loop
	}
}

Actor SplitTrail_B : SplitTrail_A {
	States {
		SpawnLoop:
			EYEB B 1 A_FadeOut(0.075)
			TNT1 A 0 A_SetScale(scalex - 0.05, scaley - 0.05)
		Loop
	}
}

Actor SplitTrail_C : SplitTrail_A {
	States {
		SpawnLoop:
			EYEB C 1 A_FadeOut(0.075)
			TNT1 A 0 A_SetScale(scalex - 0.05, scaley - 0.05)
		Loop
	}
}

Actor SplitTrail_D : SplitTrail_A {
	States {
		SpawnLoop:
			EYEB D 1 A_FadeOut(0.075)
			TNT1 A 0 A_SetScale(scalex - 0.05, scaley - 0.05)
		Loop
	}
}

Actor SplitParticle1
{
	Height 12
	Radius 6
	PROJECTILE
	Damage (36)
	Speed 40
	seesound "Dreamer/Blast"
	deathsound "Dreamer/BlastExp"
	Obituary "%o couldn't stand against the power of The Dreaming God."
	RenderStyle Add
	Alpha 0.8
	Scale 0.65
	+DONTBLAST
	+DONTSPLASH
	States
	{
		Spawn:
			EYEB A 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_A", 0, 0)
			EYEB A 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_A", 0, 0)
			EYEB B 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_B", 0, 0)
			EYEB B 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_B", 0, 0)
			EYEB C 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_C", 0, 0)
			EYEB C 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_C", 0, 0)
			EYEB D 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_D", 0, 0)
			EYEB D 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_D", 0, 0)
		Loop
		Death:
			TNT1 A 0 A_Explode(24, 96, 0, 0, 48)
			TNT1 EEEEEEEEEEEEEEEEEE 0 A_CustomMissile("SplitParticleFX", 0, 0, random(0,360), 2, random(-90,90))
			TNT1 A 0 A_SpawnItemEx("SplitParticleAfterLight")
			TNT1 A 1
		stop
	}
}

Actor SplitParticle2 : SplitParticle1
{
	States
	{
		Spawn:
			TNT1 AAAAAAAA 0 A_BishopMissileWeave
		SpawnLoop:
			EYEB A 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_A", 0, 0)
			EYEB A 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_A", 0, 0)
			EYEB B 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_B", 0, 0)
			EYEB B 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_B", 0, 0)
			EYEB C 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_C", 0, 0)
			EYEB C 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_C", 0, 0)
			EYEB D 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_D", 0, 0)
			EYEB D 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_D", 0, 0)
		Loop
	}
}

Actor SplitParticle3 : SplitParticle1
{
	States
	{
		Spawn:
			TNT1 AAAAAAAAAAAA 0 A_BishopMissileWeave
		SpawnLoop:
			EYEB A 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_A", 0, 0)
			EYEB A 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_A", 0, 0)
			EYEB B 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_B", 0, 0)
			EYEB B 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_B", 0, 0)
			EYEB C 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_C", 0, 0)
			EYEB C 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_C", 0, 0)
			EYEB D 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_D", 0, 0)
			EYEB D 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_D", 0, 0)
		Loop
	}
}

Actor SplitParticle4 : SplitParticle1
{
	States
	{
		Spawn:
			TNT1 AAAAAAAAAAAAAAAA 0 A_BishopMissileWeave
		SpawnLoop:
			EYEB A 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_A", 0, 0)
			EYEB A 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_A", 0, 0)
			EYEB B 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_B", 0, 0)
			EYEB B 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_B", 0, 0)
			EYEB C 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_C", 0, 0)
			EYEB C 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_C", 0, 0)
			EYEB D 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_D", 0, 0)
			EYEB D 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_D", 0, 0)
		Loop
	}
}

Actor SplitParticle5 : SplitParticle1
{
	States
	{
		Spawn:
			TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_BishopMissileWeave
		SpawnLoop:
			EYEB A 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_A", 0, 0)
			EYEB A 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_A", 0, 0)
			EYEB B 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_B", 0, 0)
			EYEB B 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_B", 0, 0)
			EYEB C 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_C", 0, 0)
			EYEB C 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_C", 0, 0)
			EYEB D 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_D", 0, 0)
			EYEB D 1 Bright A_Weave(1, 1, 2, 2)
			TNT1 A 0 A_SpawnItem("SplitTrail_D", 0, 0)
		Loop
	}
}

Actor ActualTchernoPortal {
	Radius 1
	Height 1
	+MISSILE
	+NOCLIP
	+NOGRAVITY
	var int user_count;
	States {
		Spawn:
			TNT1 A 150 NoDelay A_SetUserVar("user_count", 0)
		SpawnLoop:
			TNT1 A 0 A_JumpIf(user_count == 24, "Finish")
			TNT1 A 5 A_CustomMissile("TchernoSoul", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER, frandom(-90, 90))
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Finish:
			TNT1 A 1
		Stop
	}
}

Actor TchernoPortal {
	Renderstyle Translucent
	Alpha 0.075
	Scale 0.0
	+NOINTERACTION
	+CLIENTSIDEONLY
	const int steps = 12;
	var int user_counter;
	var int user_scale;
	States {
		Spawn:
			TNT1 A 0 NoDelay A_SetUserVar("user_counter", 0)
			TNT1 A 0 A_SetUserVar("user_scale", 0.075)
			TNT1 AA 0 A_PlaySoundEx("Dreamer/Burn", CHAN_BODY)
		SpawnLoop:
			TNT1 A 0 A_JumpIf(user_counter == steps, "Stay")
			TNT1 A 0 A_SetScale(user_scale / 100.0, user_scale / 100.0)
			TNT1 A 0 A_SetTranslucent(alpha + 0.01)
			TPR1 A 2 Bright
			TNT1 A 0 A_SetUserVar("user_scale", user_scale + 1)
			TNT1 A 0 A_SetScale(user_scale / 100.0, user_scale / 100.0)
			TNT1 A 0 A_SetTranslucent(alpha + 0.01)
			TPR1 B 2 Bright
			TNT1 A 0 A_SetUserVar("user_scale", user_scale + 1)
			TNT1 A 0 A_SetScale(user_scale / 100.0, user_scale / 100.0)
			TNT1 A 0 A_SetTranslucent(alpha + 0.01)
			TPR1 C 2 Bright
			TNT1 A 0 A_SetUserVar("user_scale", user_scale + 1)
			TNT1 A 0 A_SetScale(user_scale / 100.0, user_scale / 100.0)
			TNT1 A 0 A_SetTranslucent(alpha + 0.01)
			TPR1 D 2 Bright
			TNT1 A 0 A_SetUserVar("user_scale", user_scale + 1)
			TNT1 A 0 A_SetScale(user_scale / 100.0, user_scale / 100.0)
			TNT1 A 0 A_SetTranslucent(alpha + 0.01)
			TPR1 E 2 Bright
			TNT1 A 0 A_SetUserVar("user_scale", user_scale + 1)
			TNT1 A 0 A_SetScale(user_scale / 100.0, user_scale / 100.0)
			TNT1 A 0 A_SetTranslucent(alpha + 0.01)
			TPR1 F 2 Bright A_SetUserVar("user_counter", user_counter + 1)
			TNT1 A 0 A_SetUserVar("user_scale", user_scale + 1)
		Loop
		Stay:
			TNT1 A 0 A_SetUserVar("user_counter", 0)
		StayLoop:
			TNT1 A 0 A_JumpIf(user_counter == steps, "Fade")
			TPR1 ABCDEF 2 Bright
			TNT1 A 0 A_SetUserVar("user_counter", user_counter + 1)
		Loop
		Fade:
			TNT1 A 0 A_JumpIf(user_counter == steps / 5, "Finish")
			TNT1 A 0 A_SetUserVar("user_scale", user_scale - 5)
			TNT1 A 0 A_SetScale(user_scale / 100.0, user_scale / 100.0)
			TNT1 A 0 A_SetTranslucent(alpha - 0.05)
			TPR1 A 2 Bright
			TNT1 A 0 A_SetUserVar("user_scale", user_scale - 5)
			TNT1 A 0 A_SetScale(user_scale / 100.0, user_scale / 100.0)
			TNT1 A 0 A_SetTranslucent(alpha - 0.05)
			TPR1 B 2 Bright
			TNT1 A 0 A_SetUserVar("user_scale", user_scale - 5)
			TNT1 A 0 A_SetScale(user_scale / 100.0, user_scale / 100.0)
			TNT1 A 0 A_SetTranslucent(alpha - 0.05)
			TPR1 C 2 Bright
			TNT1 A 0 A_SetUserVar("user_scale", user_scale - 5)
			TNT1 A 0 A_SetScale(user_scale / 100.0, user_scale / 100.0)
			TNT1 A 0 A_SetTranslucent(alpha - 0.05)
			TPR1 D 2 Bright
			TNT1 A 0 A_SetUserVar("user_scale", user_scale - 5)
			TNT1 A 0 A_SetScale(user_scale / 100.0, user_scale / 100.0)
			TNT1 A 0 A_SetTranslucent(alpha - 0.05)
			TPR1 E 2 Bright
			TNT1 A 0 A_SetUserVar("user_scale", user_scale - 5)
			TNT1 A 0 A_SetScale(user_scale / 100.0, user_scale / 100.0)
			TNT1 A 0 A_SetTranslucent(alpha - 0.05)
			TPR1 F 2 Bright A_SetUserVar("user_counter", user_counter + 1)
		Loop
		Finish:
			TNT1 AAAAAAAAAAAAAAAAAAAAA 0 A_CustomMissile("SplitParticleFX", 0, 0, random(0,360), 2, random(-90,90))
			TNT1 A 4 A_PlaySound("Dreamer/BlastExp")
		Stop
	}
}

Actor TchernoSoulTrail {
	+NOINTERACTION
	+CLIENTSIDEONLY
	Renderstyle Add
	Alpha 0.85
	States {
		Spawn:
			TNT1 A 1
			TNT1 A 0 A_Jump(256, "A", "B", "C", "D", "E")
		A:
			PHAM A 0
		Goto Anim
		B:
			PHAM B 0
		Goto Anim
		C:
			PHAM C 0
		Goto Anim
		D:
			PHAM D 0
		Goto Anim
		E:
			PHAM E 0
		Goto Anim
		Anim:
			"####" "#" 1 A_FadeOut(0.1)
		Loop
	}
}

Actor TchernoSoul {
	PROJECTILE
	Height 8
	Radius 4
	Scale 0.9
	Renderstyle Add
	Alpha 0.1
	Speed 7
	Damage (5) 
	BounceType Hexen
	BounceCount 6
	BounceFactor 0.9
	ActiveSound "Dreamer/Soul"
	DeathSound "whiteballbdeth"
	ReactionTime 20
	+SEEKERMISSILE
	+PIERCEARMOR
	+DONTREFLECT
	+DONTBLAST
	+LOOKALLAROUND
	+SKYEXPLODE
	+DONTBLAST
	States {
		Spawn:
			PHAM AAAAAAAAAAAAAAAAAAAA 1 A_SetTranslucent(alpha + 0.0375)
			TNT1 A 0 A_ScaleVelocity(4.0)
			TNT1 A 0 A_LoopActiveSound
		SpawnLoop:
			PHAM A 3 Bright A_SeekerMissile(8, 8, SMF_LOOK | SMF_CURSPEED)
			TNT1 A 0 A_SpawnItem("TchernoSoulTrail")
			PHAM B 3 Bright A_SeekerMissile(8, 8, SMF_LOOK | SMF_CURSPEED)
			TNT1 A 0 A_SpawnItem("TchernoSoulTrail")
			PHAM C 3 Bright A_SeekerMissile(8, 8, SMF_LOOK | SMF_CURSPEED)
			TNT1 A 0 A_SpawnItem("TchernoSoulTrail")
			PHAM D 3 Bright A_SeekerMissile(8, 8, SMF_LOOK | SMF_CURSPEED)
			TNT1 A 0 A_SpawnItem("TchernoSoulTrail")
			PHAM E 3 Bright A_SeekerMissile(8, 8, SMF_LOOK | SMF_CURSPEED)
			TNT1 A 0 A_SpawnItem("TchernoSoulTrail")
			TNT1 A 0 A_CountDown
		Loop
		Death:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_StopSound(CHAN_BODY)
			PHAM FGHI 3
		Stop
	}
}

Actor TchernoPortalCooldown : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration -18
}

Actor TchernoLightningFX {
	Renderstyle Translucent
	Alpha 1.0
	Yscale 1.5
	Xscale 1.15
	+NOINTERACTION
	+CLIENTSIDEONLY
	States {
		Spawn:
			TNT1 A 0 NoDelay A_PlaySound("Dreamer/Thunder")
			TNT1 A 0 A_Jump(128, "Other")
			TLIG A 4
			TLIG AAAAAAAAAA 1 A_FadeOut(0.1)
		Stop
		Other:
			TLIG B 4
			TLIG BBBBBBBBBB 1 A_FadeOut(0.1)
		Stop
	}
}

Actor TchernoLightning {
	PROJECTILE
	Damage 0
	Speed 8
	ReactionTime 4
	const int vel = 10;
	Renderstyle Translucent
	Alpha 0.0
	var int user_phase;
	+THRUACTORS
	+FLOORHUGGER
	States {
		Spawn:
			TNT1 A 0 NoDelay A_SetUserVar("user_phase", 1)
		SpawnLoop:
			LLSS A 3 Bright A_ChangeVelocity(vel * cos(angle), vel * sin(angle), velz, CVF_REPLACE)
			TNT1 A 0 A_SetTranslucent(alpha + 0.125 * user_phase)
			TNT1 A 0 A_SetAngle(angle + 7.5)
			TNT1 A 0 A_JumpIf(alpha == 1.0, "DoDamage")
			TNT1 A 0 A_JumpIf(alpha == 0.0, "ShiftPhase")
		Goto SpawnLoop
		DoDamage:
			TNT1 A 0 A_Explode(48, 64, 0, 0, 40)
			TNT1 A 0 A_SpawnItem("TchernoLightningFX")
			TNT1 A 0 A_CountDown
		ShiftPhase:
			TNT1 A 0 A_SetUserVar("user_phase", -user_phase - 2)
		Goto SpawnLoop
	}
}