--Badnik Halo Lights--
function A_LightCheck(actor,var1,var2)
	local mob = actor
	S_StartSound(mob,sfx_motor)
	
	//brute force create copies of the halo for the additive effect//
	//otherwise it is very dim//
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	P_SpawnMobj(mob.x,mob.y,mob.z,MT_BADNIKHALOADD)
	
	mob.state = S_HALOLIGHT
end

freeslot(
"MT_BADNIKHALO", "MT_BADNIKHALOADD",
"S_HALOINACTIVE","S_HALOLIGHT","S_HALOSTATIC",
"SPR_HALL",
"sfx_motor")

sfxinfo[sfx_motor] = {
	singular = true,
	priority = 64,
	flags = SF_X4AWAYSOUND
}

//Decorative Halo//
mobjinfo[MT_BADNIKHALOADD] = {
	doomednum = 3010,
	radius = 128*FRACUNIT,
	height = 128*FRACUNIT,
	spawnstate = S_HALOSTATIC,
	flags = MF_NOGRAVITY
}

states[S_HALOSTATIC] = {
	sprite = SPR_HALL, frame = FF_ADD|A, tics = 5, nextstate = S_HALOSTATIC}

//Main Halos//
mobjinfo[MT_BADNIKHALO] = {
	--$Category Broadside Cliffs
	--$Name Badnik Halo
	--$Sprite HALLA0
	doomednum = 3011,
	radius = 128*FRACUNIT,
	height = 128*FRACUNIT,
	spawnstate = S_HALOINACTIVE,
	seestate = S_HALOLIGHT,
	raisestate = MT_BRUTEPROJECTILE,
	reactiontime = 20,
	flags = MF_NOGRAVITY
}

states[S_HALOINACTIVE] = {
	sprite = SPR_NULL, frame = A, tics = 5, nextstate = S_HALOINACTIVE}

states[S_HALOLIGHT] = {
	sprite = SPR_HALL, frame = FF_ADD|A, tics = 1000, nextstate = S_HALOLIGHT}

addHook("MobjThinker",function(mob)
	for player in players.iterate()
	-- Existence check
		if not(player.mo and player.mo.valid)
			continue
		end
		
		local real_player_x = player.mo.x/FRACUNIT
		local real_x = mob.x/FRACUNIT
		
		local real_player_y = player.mo.y/FRACUNIT
		local real_y = mob.y/FRACUNIT
			
		//the following code is only done once for the entire level//
		if abs(real_player_x-real_x) < 750 and real_player_y > -7000 and (real_y > real_player_y) then
			if mob.state == S_HALOINACTIVE then
				A_LightCheck(mob)
			end
		end
		
		if mob.state == S_HALOINACTIVE then
			mob.bullet = nil
			return
		end
		
		//shoot metal pieces at regular intervals (the spawnpoint is based on the Halo's location)//
		if real_player_x < 11000 or real_player_x > 13000 then
			return
		end
		
		if real_x < 12000 then
			local spawn_offset_x = 128*FRACUNIT
			
			if mob.state == S_HALOLIGHT and mob.tics%40 == 0 then
				mob.bullet = P_SpawnMobj(mob.x+spawn_offset_x,mob.y-3000,mob.z+(48*FRACUNIT),MT_BRUTEPROJECTILE)
				S_StartSound(mob.bullet,sfx_clank)
				mob.bullet.momy = -32*FRACUNIT
			else
				mob.bullet = nil
			end
		else
			local spawn_offset_x = -128*FRACUNIT
			
			if mob.tics%40 == 0 then
				mob.bullet = P_SpawnMobj(mob.x+spawn_offset_x,mob.y-3000,mob.z+(48*FRACUNIT),MT_BRUTEPROJECTILE)
				S_StartSound(mob.bullet,sfx_clank)
				mob.bullet.momy = -32*FRACUNIT
			else
				mob.bullet = nill
			end
		end
	end
end
,MT_BADNIKHALO)