// Old Jetfumes

freeslot(
	// Sprites
	"SPR_OJTF",
	// Objects
	"MT_OLDJETFUME1",
	// States
	"S_OLDJETFUME1",
	"S_OLDJETFUME2"
)

function A_OldBossJetFumes(actor, var1, var2)
	local filler
	local jetx, jety, jetz
	
	if var1 == 0 // Old Egg Mobile Jet Fumes
		jetx = actor.x + P_ReturnThrustX(actor, actor.angle, -FixedMul(64*FRACUNIT, actor.scale))
		jety = actor.y + P_ReturnThrustY(actor, actor.angle, -FixedMul(64*FRACUNIT, actor.scale))
		if (actor.eflags & MFE_VERTICALFLIP)
			jetz = actor.z + actor.height - FixedMul(38*FRACUNIT + mobjinfo[MT_OLDJETFUME1].height, actor.scale)
		else
			jetz = actor.z + FixedMul(38*FRACUNIT, actor.scale)
		end
		
		filler = P_SpawnMobj(jetx, jety, jetz, MT_OLDJETFUME1)
		filler.target = actor
		filler.destscale = actor.scale
		P_SetScale(filler, filler.destscale)
		if (actor.eflags & MFE_VERTICALFLIP)
			filler.flags2 = $|MF2_OBJECTFLIP
		end
		filler.fuse = 56
		
		if (actor.eflags & MFE_VERTICALFLIP)
			jetz = actor.z + actor.height - FixedMul(38*FRACUNIT + mobjinfo[MT_OLDJETFUME1].height, actor.scale)
		else
			jetz = actor.z + FixedMul(38*FRACUNIT, actor.scale)
		end
		
		filler = P_SpawnMobj(jetx + P_ReturnThrustX(actor, actor.angle-ANGLE_90, FixedMul(24*FRACUNIT, actor.scale)),
							jety + P_ReturnThrustY(actor, actor.angle-ANGLE_90, FixedMul(24*FRACUNIT, actor.scale)),
							jetz, MT_OLDJETFUME1)
		filler.target = actor
		filler.destscale = actor.scale
		P_SetScale(filler, filler.destscale)
		if (actor.eflags & MFE_VERTICALFLIP)
			filler.flags2 = $|MF2_OBJECTFLIP
		end
		filler.fuse = 57
		
		filler = P_SpawnMobj(jetx + P_ReturnThrustX(actor, actor.angle+ANGLE_90, FixedMul(24*FRACUNIT, actor.scale)),
							jety + P_ReturnThrustY(actor, actor.angle+ANGLE_90, FixedMul(24*FRACUNIT, actor.scale)),
							jetz, MT_OLDJETFUME1)
		filler.target = actor
		filler.destscale = actor.scale
		P_SetScale(filler, filler.destscale)
		if (actor.eflags & MFE_VERTICALFLIP)
			filler.flags2 = $|MF2_OBJECTFLIP
		end
		filler.fuse = 58
		
		actor.tracer = filler
	elseif var1 == 1 // Old Metal Sonic Jet Fumes
		filler = P_SpawnMobj(actor.x, actor.y, actor.z, MT_OLDJETFUME1)
		filler.target = actor
		filler.fuse = 59
		actor.tracer = filler
		filler.destscale = actor.scale/2
		P_SetScale(filler, filler.destscale)
		if (actor.eflags & MFE_VERTICALFLIP)
			filler.flags2 = $|MF2_OBJECTFLIP
		end
	end
end

// 2.0-2.1 Jet Fume

addHook("MobjThinker", function(mobj)
	local jetx, jety, jetz
	
	if not mobj.target // if you have no target
		or (not (mobj.target.flags & MF_BOSS) and mobj.target.health <= 0) // or your target isn't a boss and it's popped now
		// then remove yourself as well!
		P_RemoveMobj(mobj)
		return
	end
	
	jetx = mobj.target.x + P_ReturnThrustX(mobj.target, mobj.target.angle, FixedMul(-64*FRACUNIT, mobj.target.scale))
	jety = mobj.target.y + P_ReturnThrustY(mobj.target, mobj.target.angle, FixedMul(-64*FRACUNIT, mobj.target.scale))
	
	if mobj.fuse == 56 // 2.0/2.1 Egg Mobile Center Fume
		if (mobj.target.eflags & MFE_VERTICALFLIP)
			jetz = mobj.target.z + mobj.target.height - mobj.height - FixedMul(38*FRACUNIT, mobj.target.scale)
		else
			jetz = mobj.target.z + FixedMul(38*FRACUNIT, mobj.target.scale)
		end
		P_TeleportMove(mobj, jetx, jety, jetz)
		//mobj.floorz = mobj.z
		//mobj.ceilingz = mobj.z+mobj.height
	elseif mobj.fuse == 57 // 2.0/2.1 Egg Mobile "Right" Fume
		if (mobj.target.eflags & MFE_VERTICALFLIP)
			jetz = mobj.target.z + mobj.target.height - mobj.height - FixedMul(12*FRACUNIT, mobj.target.scale)
		else
			jetz = mobj.target.z + FixedMul(12*FRACUNIT, mobj.target.scale)
		end
		P_TeleportMove(mobj, jetx + P_ReturnThrustX(mobj.target, mobj.target.angle-ANGLE_90, FixedMul(24*FRACUNIT, mobj.target.scale)),
							jety + P_ReturnThrustY(mobj.target, mobj.target.angle-ANGLE_90, FixedMul(24*FRACUNIT, mobj.target.scale)),
							jetz)
		//mobj.floorz = mobj.z
		//mobj.ceilingz = mobj.z+mobj.height
	elseif mobj.fuse == 58 // 2.0/2.1 Egg Mobile "Left" Fume
		if (mobj.target.eflags & MFE_VERTICALFLIP)
			jetz = mobj.target.z + mobj.target.height - mobj.height - FixedMul(12*FRACUNIT, mobj.target.scale)
		else
			jetz = mobj.target.z + FixedMul(12*FRACUNIT, mobj.target.scale)
		end
		P_TeleportMove(mobj, jetx + P_ReturnThrustX(mobj.target, mobj.target.angle+ANGLE_90, FixedMul(24*FRACUNIT, mobj.target.scale)),
							jety + P_ReturnThrustY(mobj.target, mobj.target.angle+ANGLE_90, FixedMul(24*FRACUNIT, mobj.target.scale)),
							jetz)
		//mobj.floorz = mobj.z
		//mobj.ceilingz = mobj.z+mobj.height
	elseif mobj.fuse == 59 // Old Metal Sonic Fume
		jetx = mobj.target.x + P_ReturnThrustX(mobj.target, mobj.target.angle, -mobj.target.radius)
		jety = mobj.target.y + P_ReturnThrustY(mobj.target, mobj.target.angle, -mobj.target.radius)
		if (mobj.target.eflags & MFE_VERTICALFLIP)
			jetz = mobj.target.z + mobj.target.height/2 + mobj.height/2
		else
			jetz = mobj.target.z + mobj.target.height/2 - mobj.height/2
		end
		P_TeleportMove(mobj, jetx, jety, jetz)
		//mobj.floorz = mobj.z
		//mobj.ceilingz = mobj.z+mobj.height
	end
	mobj.fuse = $+1
	
	mobj.momz = 0 // Prevent the jetfume from moving vertically
end, MT_OLDJETFUME1)

mobjinfo[MT_OLDJETFUME1] = {
	doomednum = -1,
	spawnstate = S_OLDJETFUME1,
	spawnhealth = 1000,
	reactiontime = 8,
	speed = 1,
	radius = 8*FRACUNIT,
	height = 16*FRACUNIT,
	mass = 4,
	flags = MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPHEIGHT
}

states[S_OLDJETFUME1] =	{SPR_OJTF,	A|FF_FULLBRIGHT,	1,	nil,	0,	0,	S_OLDJETFUME2}
states[S_OLDJETFUME2] =	{SPR_NULL,	A,					1,	nil,	0,	0,	S_OLDJETFUME1}