Actor Golgoth : McM_Monster replaces Cyberdemon {
	tag "Golgoth"
	obituary "%o was removed from existence by Golgoth."
	health 4000
	radius 40
	height 110
	ProjectilePassHeight 144
	mass 16384
	speed 4
	painchance 12
	seesound "Golgoth/See"
	painsound "Golgoth/Pain"
	deathsound "Golgoth/Die"
	activesound "Golgoth/Act"
	DamageFactor "GolgothRail", 0
	Scale 1.15
	MONSTER
	var int user_count;
	const int trace_count = 60;
	const int dash_speedmin = 12;
	const int dash_speedmax = 16;
	const int arc_count = 20;
	const int arc_inc = 8;
	const int golg_railrange = 2048;
	+BOSS
	+BOSSDEATH
	+QUICKTORETALIATE
	+MISSILEMORE
	+MISSILEEVENMORE
	+NORADIUSDMG
	+DONTHURTSPECIES
	+DONTHARMSPECIES
	+DONTBLAST
	+NODROPOFF
	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("Golgoth Health Check")
		IdleLoop:
			MOMD A 10 A_Look
		loop
		See:
			MOMD AAAAAA 1 A_Chase("", "", CHF_NOPLAYACTIVE)
			MOMD AAAAAA 1 A_Chase
		loop
		Melee:
		Goto Missile
		FromMelee:
			TNT1 A 0 A_Jump(96, "Forget")
		Goto Missile
		Forget:
			MOMD A 3
		Goto See
		Missile:
			TNT1 A 0 A_JumpIfInventory("MCM_Bool", 1, "Less50Decide")
		MissileDecide:
			TNT1 A 0 A_Jump(144, "DarkLance", "MeteorDash")
		Meteor:
			MOMD E 6 A_FaceTarget
			MOMD F 5 A_FaceTarget
			TNT1 A 0 A_CustomMissile("GolgothMeteor", 82.8, 27.6, 0, CMF_AIMOFFSET)
			MOMD G 6 A_CustomMissile("GolgothMeteor", 82.8, -27.6, 0, CMF_AIMOFFSET)
			TNT1 A 0 A_FaceTarget
			MOMD G 6 ACS_NamedExecuteAlways("Golgoth Monster Shoot", 0, 1)
			MOMD FE 2 A_FaceTarget
		Goto See
		DarkLance:
			TNT1 A 0 A_JumpIfCloser(golg_railrange, "ContinueLance")
		Goto Meteor
		ContinueLance:
			TNT1 A 0 A_SetUserVar("user_count", 0)
			MOMD E 6 A_FaceTarget
			TNT1 A 0 A_PlaySound("Golgoth/RailLoop", 7)
			TNT1 A 0 A_JumpIfInventory("MCM_Bool", 1, "FastLance")
			MOMD F 5 A_FaceTarget
		LanceLoop:
			TNT1 A 0 A_JumpIf(user_count == trace_count, "LanceShoot")
			TNT1 A 0 A_FaceTarget
			MOMD G 1 Light("GOLGOTHPINKLIGHT2") A_CustomBulletAttack(0, 0, 1, 1, "GolgothPuff", golg_railrange)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			TNT1 A 0 A_FaceTarget
			MOMD G 1 Light("GOLGOTHPINKLIGHT2") A_CustomBulletAttack(0, 0, 1, 0, "GolgothPuff", golg_railrange)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		FastLance:
			MOMD F 5 A_FaceTarget
		FastLanceLoop:
			TNT1 A 0 A_JumpIf(user_count == trace_count / 2, "LanceShoot")
			TNT1 A 0 A_FaceTarget
			MOMD G 1 Light("GOLGOTHPINKLIGHT2") A_CustomBulletAttack(0, 0, 1, 1, "GolgothPuff", golg_railrange)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			MOMD G 1 Light("GOLGOTHPINKLIGHT2") A_CustomBulletAttack(0, 0, 1, 0, "GolgothPuff", golg_railrange)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		LanceShoot:
			TNT1 A 0 A_StopSound(7)
			TNT1 A 0 A_PlaySound("Golgoth/Rail", 5)
			TNT1 A 0 A_FaceTarget
			MOMD G 1 Light("GOLGOTHPINKLIGHT2") A_CustomBulletAttack(0, 0, 1, 8, "GolgothPuff2", golg_railrange)
			MOMD G 8
		Goto See
		MeteorDash:
			TNT1 A 0 A_PlaySound("monster/blur")
			TNT1 A 0 A_Jump(128, "DashLeft")
		Goto DashRight
		MeteorDashCont:
			MOMD E 5 A_FaceTarget
			MOMD F 4 A_FaceTarget
			MOMD G 5 ACS_NamedExecuteAlways("Golgoth Monster Shoot", 0, 2)
			TNT1 A 0 A_Jump(96, "MeteorDash")
		Goto See
		DashLeft:
			TNT1 A 0 A_SetUserVar("user_count", random(dash_speedmin, dash_speedmax))
			MOMD D 1 A_FaceTarget
			TNT1 A 0 A_ChangeVelocity(user_count * cos(angle - 45), user_count * sin(angle - 45), velz, CVF_REPLACE)
			MOMD DDDDDDDDDDDDD 1 A_SpawnItemEx("GolgothDashTrail_Left")
		Goto MeteorDashCont
		DashRight:
			TNT1 A 0 A_SetUserVar("user_count", random(dash_speedmin, dash_speedmax))
			MOMD B 1 A_FaceTarget
			TNT1 A 0 A_ChangeVelocity(user_count * cos(angle + 45), user_count * sin(angle + 45), velz, CVF_REPLACE)
			MOMD BBBBBBBBBBBBB 1 A_SpawnItemEx("GolgothDashTrail_Right")
		Goto MeteorDashCont
		Less50Decide:
			TNT1 A 0 A_JumpIfInventory("MCM_BehaviorToggle", 1, "DecideForReal")
		Goto MissileDecide
		DecideForReal:
			TNT1 A 0 A_Jump(160, "FireArc", "OrangeSoul")
		Goto MissileDecide
		OrangeSoul:
			MOMD H 5 A_FaceTarget
			MOMD I 4 A_FaceTarget
			TNT1 A 0 A_SetAngle(angle + frandom(-10.0, 10.0))
			MOMD J 8 A_CustomMissile("GolgothOrangeSoul", 55.2)
			MOMD IH 2
		Goto See
		FireArc:
			TNT1 A 0 A_JumpIfCloser(640, "FireArcGo")
		Goto MissileDecide
		FireArcGo:
			TNT1 A 0 A_SetUserVar("user_count", 0)
			MOMD H 5 A_FaceTarget
			TNT1 A 0 A_PlaySound("Golgoth/FireCircle", 5)
			MOMD I 4 A_FaceTarget
			TNT1 A 0 A_PlaySound("Golgoth/FireCircleGo")
		FireArcLoop1:
			MOMD J 0 A_JumpIf(user_count == arc_count, "FireArc1Finish")
			MOMD J 0 A_CustomMissile("GolgothFlames", 96, 0, user_count * arc_inc, CMF_ABSOLUTEANGLE)
			MOMD J 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		FireArc1Finish:
			TNT1 A 0 A_SetUserVar("user_count", 0)
			MOMD J 24
			TNT1 A 0 A_PlaySound("Golgoth/FireCircleGo")
		FireArcLoop2:
			MOMD J 0 A_JumpIf(user_count == arc_count, "FireArc2Finish")
			MOMD J 0 A_CustomMissile("GolgothFlames", 32, 0, 120 + user_count * arc_inc, CMF_ABSOLUTEANGLE)
			MOMD J 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		FireArc2Finish:
			MOMD J 0 A_SetUserVar("user_count", 0)
			MOMD J 24
			MOMD J 0 A_PlaySound("Golgoth/FireCircleGo")
		FireArcLoop3:
			MOMD J 0 A_JumpIf(user_count == arc_count, "FireArc3Finish")
			MOMD J 0 A_CustomMissile("GolgothFlames", 64, 0, 240 + user_count * arc_inc, CMF_ABSOLUTEANGLE)
			MOMD J 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		FireArc3Finish:
			MOMD JIH 5
		Goto See
		Pain:
			TNT1 A 0 A_StopSound(7)
			MOMD K 4 A_Pain
			MOMD K 4
		Goto See
		Death:
			TNT1 A 0 A_StopSound(7)
			MOMD L 16 A_Scream
			MOMD M 6
			TNT1 A 0 A_PlaySound("Golgoth/Explode", CHAN_BODY)
			MOMD MMMMMNNNNN 1
			TNT1 A 0 A_NoBlocking
			MOMD OOOOPPPPQQQQRRRR 1
			MOMD T -1 A_BossDeath
		Stop
		Death.Corpse:
			MOMD T -1
		Stop
	}
}

Actor GolgothRailFX {
	XScale 0.8
	Renderstyle Add
	Alpha 1.0
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			MOMP I 1 Bright A_FadeOut(0.075)
		Loop
	}
}

Actor GolgothRailFX_Tracer : GolgothRailFX {
	XScale 0.6
	YScale 0.8
	States {
		Spawn:
			MOMP I 1 Bright A_FadeOut(0.33)
		Loop
	}
}

Actor GolgothPuff {
	+PUFFGETSOWNER
	+ALWAYSPUFF
	+BLOODLESSIMPACT
	-ALLOWPARTICLES
	+PUFFONACTORS
	+NOGRAVITY
	+NOBLOCKMAP
	+HITTRACER
	DamageType "GolgothRail"
	States {
		Spawn:
			TNT1 A 1 NoDelay ACS_NamedExecuteAlways("Golgoth Laser Trail Fake", 0, ACS_NamedExecuteWithResult("MCM Get Target"))
			TNT1 A 3 A_GiveInventory("GolgothSlow", 1, AAPTR_TRACER)
		Stop
	}
}

Actor GolgothPuff2 : GolgothPuff {
	States {
		Spawn:
			TNT1 A 1 NoDelay ACS_NamedExecuteAlways("Golgoth Laser Trail", 0, ACS_NamedExecuteWithResult("MCM Get Target"))
			TNT1 A 3 A_GiveInventory("GolgothWeaken", 1, AAPTR_TRACER)
		Stop
	}
}

ACTOR GolgothWeaken : PowerProtection {
    DamageFactor "Normal", 1.5
	powerup.color "60 15 45"
	powerup.duration -5
}

ACTOR GolgothSlow : PowerSpeed {
	Speed 0.75
	powerup.color "60 15 45"
	powerup.duration -2
}

Actor GolgothDashTrail_Left {
	Renderstyle Translucent
	Alpha 1.0
	Scale 1.15
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			MOMD D 1 A_FadeOut(0.075)
		Loop
	}
}

Actor GolgothDashTrail_Right : GolgothDashTrail_Left {
	States {
		Spawn:
			MOMD B 1 A_FadeOut(0.075)
		Loop
	}
}

Actor GolgothPuffy : Puffy {
	+CLIENTSIDEONLY
	+NOINTERACTION
	Scale 1.15
}

Actor GolgothMeteor {
	Projectile
	Speed 28
	Height 16
	Radius 8
	Damage (48)
	seesound "lavdatk"
	DeathSound "Golgoth/MeteorExplode"
	+DONTBLAST
	States {
		Spawn:
			MOMP AAABBBCCC 1 Bright A_SpawnItemEx("GolgothPuffy", random2[BeastPuff]()*0.015625, random2[BeastPuff]()*0.015625, random2[BeastPuff]()*0.015625, frandom(-1, 1), frandom(-1, 1), frandom(-1, 1),0,SXF_ABSOLUTEPOSITION, 64)
		Loop
		Death:
			TNT1 A 0 A_Explode(40, 128)
			MOMP DEFGH 3 Bright
		Stop
	}
}

Actor GolgothOrangeSoul {
	Projectile
	Speed 10
	Height 20
	Radius 10
	Renderstyle Add
	Alpha 1.0
	Damage(100)
	SeeSound "H2SkullWizard/Fire"
    DeathSound "H2SkullWizard/Hit"
	const int fspeed = 20;
	const int sprd = 3;
	const int circle1_count = 5;
	const int circle2_count = 8;
	const int circle3_count = 12;
	var int user_count;
	+DONTBLAST
	States {
		Spawn:
			TNT1 A 0 NoDelay A_SetUserVar("user_count", 0)
			MOMP JJJJJJJJJJJJJJJ 1 Bright A_SpawnItem("GolgothOrangeSoulTrail")
		Circle1:
			TNT1 A 0 A_JumpIf(user_count == circle1_count, "C1Finish")
			TNT1 A 0 A_SpawnItemEx("GolgothFireBall", 0, 0, 0, fspeed, 2 * sprd * sin(360 * user_count / circle1_count), sprd * cos(360 * user_count / circle1_count), 0, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		C1Finish:
			TNT1 A 0 A_SetUserVar("user_count", 0)
			MOMP JJJJJJJJJJJJJJJ 1 Bright A_SpawnItem("GolgothOrangeSoulTrail")
		Circle2:
			TNT1 A 0 A_JumpIf(user_count == circle2_count, "C2Finish")
			TNT1 A 0 A_SpawnItemEx("GolgothFireBall", 0, 0, 0, fspeed, 4 * sprd * sin(360 * user_count / circle2_count), 1.5 * sprd * cos(360 * user_count / circle2_count), 0, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		C2Finish:
			TNT1 A 0 A_SetUserVar("user_count", 0)
			MOMP JJJJJJJJJJJJJJJ 1 Bright A_SpawnItem("GolgothOrangeSoulTrail")
		Circle3:
			TNT1 A 0 A_JumpIf(user_count == circle3_count, "C3Finish")
			TNT1 A 0 A_SpawnItemEx("GolgothFireBall", 0, 0, 0, fspeed, 6 * sprd * sin(360 * user_count / circle3_count), 3 * sprd * cos(360 * user_count / circle3_count), 0, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		C3Finish:
			MOMP J 1 Bright A_SpawnItem("GolgothOrangeSoulTrail")
		Loop
		Death:
			MOMP KL 3 Bright
			MOMP M 5 Bright A_ChangeVelocity(0, 0, 2, CVF_REPLACE)
			MOMP N 6 Bright
			MOMP O 7 Bright
		Stop
	}
}

Actor GolgothOrangeSoulTrail {
	Renderstyle Add
	Alpha 1.0
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			TNT1 A 1
		SpawnLoop:
			MOMP J 1 Bright A_FadeOut(0.075)
			TNT1 A 0 A_SetScale(scalex - 0.075, scaley - 0.075)
		Loop
	}
}

Actor GolgothFlames {
	PROJECTILE
	Speed 30
	Height 12
	Radius 6
	Renderstyle Add
	Alpha 1.0
	Damage(4)
	DamageType Fire
	SeeSound "Flamethrower/Fire"
	DeathSound "Flamethrower/Hit"
	+RIPPER
	+BLOODLESSIMPACT
	+DONTBLAST
	States {
		Spawn:
			TNT1 A 2
			FRFX ABCD 2 bright A_Explode(8, 16)
			FRFX EFG 2 bright A_Explode(10, 28)
			FRFX HIJ 2 bright A_Explode(12, 40)
			FRFX KLM 2 bright A_Explode(16, 52)
			FRFX NO 2 bright
		Stop
		Death:
			FRFX HIJ 2 bright A_Explode(12, 40)
			FRFX KLM 2 bright A_Explode(16, 52)
			FRFX NO 2 bright
		Stop
	}
}

ACTOR GolgothFireBall {
	Speed 20
	Alpha 1
	Radius 8
	Height 16
	Damage (16)
	SeeSound "weapons/basiliskfire2"
	DeathSound "weapons/basiliskexpl2"
	Species "Player"
	PROJECTILE
	const int fspeed = 20;
	+DONTBLAST
	+FORCERADIUSDMG
	States {
		Spawn:
			HIB1 AB 3 Bright
			TNT1 A 0 A_ChangeVelocity(fspeed * cos(angle), fspeed * sin(angle), velz, CVF_REPLACE)
		SpawnLoop:
			HIB1 AB 3 Bright
		Loop
		Death:
			TNT1 A 0 A_SetTranslucent(0.75, 1)
			HIB1 C 3 Bright
			HIB1 DEFG 3 Bright
		stop
	}
}