-- -- ---CUSTOM BOSS--- -- --
local boss_mobj = nil
local boss_defeated = false
local boss_position_z = 0

freeslot(
"MT_BLUEHALO2",
"S_BLUEHALOSTATIC2",
"SPR_BHL2")

mobjinfo[MT_BLUEHALO2] = {
	doomednum = 3004,
	radius = 32*FRACUNIT,
	height = 32*FRACUNIT,
	spawnstate = S_BLUEHALOSTATIC2,
	flags = MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPHEIGHT
}

states[S_BLUEHALOSTATIC2] = {
	sprite = SPR_BHL2, frame = FF_FULLBRIGHT|TR_TRANS40|FF_ANIMATE|A, tics = 30, var1 = 1, var2 = 1, nextstate = S_BLUEHALOSTATIC2}

addHook("MobjThinker",function(mob)
	if mob.spritexscale == 1*FRACUNIT then
		mob.spritexscale = (3*FRACUNIT)/2
		mob.spriteyscale = (3*FRACUNIT)/2
	else
		A_FindTracer(mob,MT_LWZBOSS)
		
		if mob.tracer.valid == true and boss_defeated == false then
			A_CapeChase(mob,1+24<<16,0+-16<<16)
		else
			P_TeleportMove(mob,mob.x,mob.y,0+((boss_position_z*FRACUNIT)+(64*FRACUNIT)))
		end
	end
end
,MT_BLUEHALO2)

-- Begin, main boss object--
freeslot(
"MT_LWZBOSS", 
"SPR_EGLN",
"S_LAWNMOBILE_INIT","S_LAWNMOBILE_STANDARD","S_LAWNMOBILE_ATTACK", "S_LAWNMOBILE_PREATTACK",
"S_LAWNMOBILE_FLEE","S_LAWNMOBILE_RELIEF","S_LAWNMOBILE_DIE","S_LAWNMOBILE_EXIT")
mobjinfo[MT_LWZBOSS] = {
	--$Category Lawn World
	--$Name Lawn Boss
	--$Sprite EGLNA1
	//$Color 2
	doomednum = 2355,
	spawnstate = S_LAWNMOBILE_INIT,
	seestate = S_LAWNMOBILE_PREATTACK,
	seesound = sfx_None,
	attacksound = sfx_None,
	painstate = S_LAWNMOBILE_FLEE,
	painsound = sfx_dmpain,
	meleestate = null,
	missilestate = null,
	deathstate = S_LAWNMOBILE_DIE,
	xdeathstate = S_LAWNMOBILE_EXIT,
	deathsound = sfx_cybdth,
	activesound = sfx_telept,
	raisestate = MT_ROCKET,
	spawnhealth = 8,
	reactiontime = 200,
	painchance = 5000,
	speed = 8,
	radius = 36*FRACUNIT,
	height = 90*FRACUNIT,
	mass = sfx_None,
	damage = 3,
	dispoffset = 2,
	flags = MF_SPECIAL|MF_SHOOTABLE|MF_FLOAT|MF_NOGRAVITY|MF_BOSS
}
states[S_LAWNMOBILE_INIT] = {
	sprite = SPR_EGLN, frame = A, tics = 5, action = null, nextstate = S_LAWNMOBILE_STANDARD}
	
states[S_LAWNMOBILE_STANDARD] = {
	sprite = SPR_EGLN, frame = A, tics = 40, action = A_Look, var1 = 0+3750<<16, var2 = 1, nextstate = S_LAWNMOBILE_STANDARD}

states[S_LAWNMOBILE_PREATTACK] = {
	sprite = SPR_EGLN, frame = A, tics = 7, var1 = 7, var2 = 1, nextstate = S_LAWNMOBILE_ATTACK}
	
states[S_LAWNMOBILE_ATTACK] = {
	sprite = SPR_EGLN, frame = A, tics = 100, action = null, nextstate = S_LAWNMOBILE_RELIEF}

states[S_LAWNMOBILE_RELIEF] = {
	sprite = SPR_EGLN, frame = A, tics = 70, action = null, nextstate = S_LAWNMOBILE_STANDARD}

states[S_LAWNMOBILE_FLEE] = {
	sprite = SPR_EGLN, frame = A, tics = 70, action = A_Pain, nextstate = S_LAWNMOBILE_INIT}

states[S_LAWNMOBILE_DIE] = {
	sprite = SPR_EGLN, frame = C, tics = 50, action = null, nextstate = S_NULL}

states[S_LAWNMOBILE_EXIT] = {
	sprite = SPR_EGLN, frame = FF_ANIMATE|C, tics = 70, action = null, var1 = 1, var2 = 5, nextstate = S_LAWNMOBILE_EXIT}

--Main boss logic--
addHook("MobjThinker", function(mob)
	boss_mobj = mob
	boss_position_z = mob.z/FRACUNIT
	
	local turret = 16
	
	if mob.state == S_LAWNMOBILE_INIT then
		mob.rate = 15
		mob.storedmomX = 0
		mob.storedmomY = 0
	end
	
	if mob.health > 3 then
		mob.rate = 15
	else
		local spawnX = P_RandomRange(0,64)
		local spawnY = P_RandomRange(0,64)
		local spawnZ = P_RandomRange(0,64)
		P_SpawnMobjFromMobj(mob,spawnX*FRACUNIT,spawnY*FRACUNIT,spawnZ*FRACUNIT,MT_SMOKE)
		mob.rate = 5
	end
	
	if mob.state == S_LAWNMOBILE_STANDARD then
		if mob.tics%2 == 0 then
			A_ChangeAngleRelative(mob,5,5)
		end
	end
	
	if mob.state == S_LAWNMOBILE_RELIEF then
		A_Thrust(mob,5,1)
	end
	
	if mob.state == S_LAWNMOBILE_ATTACK then
		A_FaceTarget(mob)
		A_Chase(mob,5)
		mob.storedmomX = mob.momx
		mob.storedmomY = mob.momy
		
		if mob.tics%2 == 0 then
			turret = 20
		else
			turret = -20
		end
		
		if mob.tics%mob.rate == 0 then
			A_ShootBullet(mob)
			A_FindTracer(mob,MT_ROCKET)
			local last_bullet = mob.tracer
			
			if not(mob.tracer == nil) then
				A_FindTracer(last_bullet,MT_LWZBOSS)
			else
				last_bullet = nil
			end
			
			if not(last_bullet == nil) then
				A_CapeChase(last_bullet,1+64<<16,turret+0<<16)
				--P_TeleportMove(mob.tracer,mob.x+(32*FRACUNIT),mob.y,mob.z+(64*FRACUNIT))
			end
		end
	end
	
	if mob.state == S_LAWNMOBILE_FLEE then
		if mob.tics == 70 then
			A_KnockBack(mob,1)
		end
			
		if mob.tics == 50 then
			A_ChangeAngleRelative(mob,180,180)
		end
			
		if (mob.tics < 50 and mob.tics > 1) then
			A_Thrust(mob,20,1)
		end
			
		if mob.tics == 1
			A_Thrust(mob,0,1)
			A_ChangeAngleRelative(mob,180,180)
		end
	end
	
	if mob.state == S_LAWNMOBILE_DIE then
		boss_defeated = true
		if mob.tics == 50 then
			A_Fall(mob)
		elseif (mob.tics < 50 and mob.tics > 1) then
			A_BossScream(mob)
		elseif mob.tics <= 1
			A_BossDeath(mob)
		end
	end
end
,MT_LWZBOSS)