Actor MCM_Lurker : McM_Monster replaces DoomImp {
	MONSTER
	obituary "%o was electrocuted by a Lurker."
	hitobituary "%o received 2000 Volts from a Lurker."
	health 85
	radius 20
	height 56
	mass 144
	speed 8
	painchance 144
	MeleeRange 108
	+DONTHURTSPECIES
	+DONTHARMSPECIES
	+FLOORCLIP
	seesound "Lurker/See"
	painsound "Lurker/Pain"
	deathsound "Lurker/Die"
	activesound "Lurker/Act"
	MaxTargetRange 408
	DamageFactor "LurkerDmg", 0
	Tag "Lurker"
	Species "Lurker"
	const float ang_var = 8.0;
	const int lurker_dmg = 6;
	States {
		Idle:
			VULG AB 10 A_Look
		loop
		See:
			VULG A 3 A_Chase
			VULG A 2 A_Chase
			VULG B 3 A_Chase
			VULG B 2 A_Chase
			VULG C 3 A_Chase
			VULG C 2 A_Chase
			VULG D 3 A_Chase
			VULG D 2 A_Chase
		loop
		Melee:
			TNT1 A 0 A_JumpIfInventory("MCM_BehaviorToggle", 1, "MeleeCont")
		Goto Missile
		MeleeCont:
			VULG E 5 A_FaceTarget
			VULG FF 4 A_FaceTarget
			VULG F 2
			TNT1 A 0 A_PlaySound("Lurker/Lightning")
			TNT1 AAAAAAAA 0 A_CustomRailgun(lurker_dmg / 2, 0, None, None, RGF_SILENT|RGF_NOPIERCING, 0, 128, "LurkerPuff", 36, 16, 144, 0, 14, 0, "LurkerLightningTrail")
			VULG G 8 
		goto See
		Missile:
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_PlaySound("Lurker/Fire", 7)
			VULG E 5 Light("LurkerLight") ACS_NamedExecuteAlways("Lurker Attack FX")
			TNT1 A 0 A_FaceTarget
			VULG E 5 Light("LurkerLight") ACS_NamedExecuteAlways("Lurker Attack FX")
			TNT1 A 0 A_FaceTarget
			VULG E 5 Light("LurkerLight") ACS_NamedExecuteAlways("Lurker Attack FX")
			TNT1 A 0 A_FaceTarget
			VULG E 5 Light("LurkerLight") ACS_NamedExecuteAlways("Lurker Attack FX")
			TNT1 A 0 A_FaceTarget
			VULG E 5 Light("LurkerLight") ACS_NamedExecuteAlways("Lurker Attack FX")
			TNT1 A 0 A_FaceTarget
			VULG E 5 Light("LurkerLight") ACS_NamedExecuteAlways("Lurker Attack FX")
			VULG F 4
			TNT1 A 0 A_PlaySound("Lurker/Lightning", CHAN_AUTO)
			VULG G 6 A_CustomRailgun(lurker_dmg, 0, None, None, RGF_SILENT|RGF_NOPIERCING, 0, 64, "LurkerPuff", 0, 0, 484, 0, 14, 0, "LurkerLightningTrail")
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_SetAngle(angle + frandom(-ang_var, ang_var))
			TNT1 A 0 A_PlaySound("Lurker/Lightning", CHAN_AUTO)
			VULG G 5 A_CustomRailgun(lurker_dmg, 0, None, None, RGF_SILENT|RGF_NOPIERCING, 0, 64, "LurkerPuff", 0, 0, 484, 0, 14, 0, "LurkerLightningTrail")
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_SetAngle(angle + frandom(-ang_var, ang_var))
			TNT1 A 0 A_PlaySound("Lurker/Lightning", CHAN_AUTO)
			VULG G 5 A_CustomRailgun(lurker_dmg, 0, None, None, RGF_SILENT|RGF_NOPIERCING, 0, 64, "LurkerPuff", 0, 0, 484, 0, 14, 0, "LurkerLightningTrail")
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_SetAngle(angle + frandom(-ang_var, ang_var))
			TNT1 A 0 A_PlaySound("Lurker/Lightning", CHAN_AUTO)
			VULG G 5 A_CustomRailgun(lurker_dmg, 0, None, None, RGF_SILENT|RGF_NOPIERCING, 0, 64, "LurkerPuff", 0, 0, 484, 0, 14, 0, "LurkerLightningTrail")
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_PlaySound("Lurker/Lightning", CHAN_AUTO)
			VULG G 6 A_CustomRailgun(lurker_dmg, 0, None, None, RGF_SILENT|RGF_NOPIERCING, 0, 64, "LurkerPuff", 0, 0, 484, 0, 14, 0, "LurkerLightningTrail")
		goto See
		Pain:
			TNT1 A 0 A_StopSound(7)
			VULG H 3
			VULG H 2 A_Pain
		goto See
		Death:
			VULG I 6
			VULG J 5 A_Scream
			TNT1 A 0 A_SpawnItemEx("LurkerDeathScream", 0, 0, 20)
			VULG KL 3
			VULG M 6 A_NoBlocking
			VULG N -1
		stop 
		Raise:
			VULG ML 6
			VULG KJI 4
		goto See
		Death.Corpse:
			VULG N -1
		Stop
	}
}

Actor LurkerDeathScream {
	RENDERSTYLE ADD
	ALPHA 0.7
	+NOINTERACTION
	+CLIENTSIDEONLY
	States {
		Spawn:
			TNT1 A 0 NoDelay A_PlaySound("Lurker/DeathScream")
			SHGH ABCDEFG 4 Bright
		Stop
	}
}

Actor LurkerLightningTrail {
	+NOINTERACTION
	Scale 0.16
	RenderStyle Add
	Translation "0:255=%[0,0,0]:[0.3,0.6,1.4]"
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	States {
		Spawn:
			TNT1 A 0 NoDelay A_Warp(AAPTR_TARGET,x,y,z,0,WARPF_NOCHECKPOSITION|WARPF_USECALLERANGLE)
			TNT1 A 0 A_SpawnItemEx("ElectDrSpark",0,0,0,frandom(-2.0, 2.0),frandom(-2.0, 2.0),frandom(-2.0, 2.0),0,SXF_NOCHECKPOSITION|SXF_TRANSFERTRANSLATION,224)
			TNT1 A 0 A_Jump(256, "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")
		1:
			HSP2 A 1 BRIGHT A_FadeOut(0.125)
			TNT1 A 0 A_Warp(AAPTR_TARGET,cos(-pitch),8+frandom(-1,1),frandom(-1,1)+32+sin(-pitch),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		Loop
		2:
			HSP2 B 1 BRIGHT A_FadeOut(0.125)
			TNT1 A 0 A_Warp(AAPTR_TARGET,cos(-pitch),8+frandom(-1,1),frandom(-1,1)+32+sin(-pitch),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		Loop
		3:
			HSP2 C 1 BRIGHT A_FadeOut(0.125)
			TNT1 A 0 A_Warp(AAPTR_TARGET,cos(-pitch),8+frandom(-1,1),frandom(-1,1)+32+sin(-pitch),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		Loop
		4:
			HSP2 D 1 BRIGHT A_FadeOut(0.125)
			TNT1 A 0 A_Warp(AAPTR_TARGET,cos(-pitch),8+frandom(-1,1),frandom(-1,1)+32+sin(-pitch),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		Loop
		5:
			HSP2 E 1 BRIGHT A_FadeOut(0.125)
			TNT1 A 0 A_Warp(AAPTR_TARGET,cos(-pitch),8+frandom(-1,1),frandom(-1,1)+32+sin(-pitch),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		Loop
		6:
			HSP2 F 1 BRIGHT A_FadeOut(0.125)
			TNT1 A 0 A_Warp(AAPTR_TARGET,cos(-pitch),8+frandom(-1,1),frandom(-1,1)+32+sin(-pitch),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		Loop
		7:
			HSP2 G 1 BRIGHT A_FadeOut(0.125)
			TNT1 A 0 A_Warp(AAPTR_TARGET,cos(-pitch),8+frandom(-1,1),frandom(-1,1)+32+sin(-pitch),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		Loop
		8:
			HSP2 H 1 BRIGHT A_FadeOut(0.125)
			TNT1 A 0 A_Warp(AAPTR_TARGET,cos(-pitch),8+frandom(-1,1),frandom(-1,1)+32+sin(-pitch),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		Loop
		9:
			HSP2 I 1 BRIGHT A_FadeOut(0.125)
			TNT1 A 0 A_Warp(AAPTR_TARGET,cos(-pitch),8+frandom(-1,1),frandom(-1,1)+32+sin(-pitch),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		Loop
		10:
			HSP2 J 1 BRIGHT A_FadeOut(0.125)
			TNT1 A 0 A_Warp(AAPTR_TARGET,cos(-pitch),8+frandom(-1,1),frandom(-1,1)+32+sin(-pitch),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		Loop
	}
}

Actor ElectDrSpark {
	Translation "0:255=%[0,0,0]:[0.75,0.75,2.0]"
	+NOINTERACTION
	Scale 0.08
	RenderStyle Add
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	Alpha 1.0
	States { 
		Spawn:
			TNT1 A 0 NoDelay A_Jump(256, "1", "2", "3", "4", "5", "6", "7", "8")
		1:
			x079 A 1 Bright A_SetScale(ScaleX+0.0025)
			TNT1 A 0 A_FadeOut(0.07)
		Loop
		2:
			x079 B 1 Bright A_SetScale(ScaleX+0.0025)
			TNT1 A 0 A_FadeOut(0.07)
		Loop
		3:
			x079 C 1 Bright A_SetScale(ScaleX+0.0025)
			TNT1 A 0 A_FadeOut(0.07)
		Loop
		4:
			x079 D 1 Bright A_SetScale(ScaleX+0.0025)
			TNT1 A 0 A_FadeOut(0.07)
		Loop
		5:
			x079 E 1 Bright A_SetScale(ScaleX+0.0025)
			TNT1 A 0 A_FadeOut(0.07)
		Loop
		6:
			x079 F 1 Bright A_SetScale(ScaleX+0.0025)
			TNT1 A 0 A_FadeOut(0.07)
		Loop
		7:
			x079 G 1 Bright A_SetScale(ScaleX+0.0025)
			TNT1 A 0 A_FadeOut(0.07)
		Loop
		8:
			x079 H 1 Bright A_SetScale(ScaleX+0.0025)
			TNT1 A 0 A_FadeOut(0.07)
		Loop
	}
}

Actor LurkerPuff {
	+CLIENTSIDEONLY
	+NOINTERACTION
	+ALWAYSPUFF
	+PUFFONACTORS
	+PUFFGETSOWNER
	DamageType "LurkerDmg"
	States {
		Spawn:
			TNT1 A 1
		Stop
	}
}

Actor LurkerFormFX {
	Scale 0.125
	Renderstyle Add
	Alpha 0.01
	const float ta = 0.875 / 3;
	+NOINTERACTION
	+CLIENTSIDEONLY
	States {
		Spawn:
			OGLP D 1 NoDelay A_FadeIn(ta)
			OGLP DD 1 A_FadeIn(ta)
		SpawnLoop:
			OGLP D 1 A_fadeOut(0.25)
		Loop
	}
}