// ------------------------------------------
// Lua_BossStars
// Stars for bosses
// ------------------------------------------
local function SpawnStarFromMobj(mo)
	local star = P_SpawnMobj(mo.x, mo.y, mo.z, MT_KIRBY_BOSSSTAR)
	star.angle = FixedAngle(P_RandomByte()*FRACUNIT*360/256)
	if(mo.target)
		star.scale = mo.target.scale
	else
		star.scale = mo.scale
	end
	if(mo.eflags & MFE_VERTICALFLIP)
		star.eflags = $1|MFE_VERTICALFLIP
		P_TeleportMove(star, star.x, star.y, mo.z+mo.height-star.height)
	end
	P_TeleportMove(star, star.x, star.y, star.z+P_MobjFlip(star))
	P_InstaThrust(star, star.angle, 5*star.scale)
	star.momz = 5*star.scale*P_MobjFlip(star)
end
// Boss 1
addHook("MobjSpawn", function(mo)
	if(server.starcounter == nil)
		server.starcounter = 0
	end
	server.starcounter = $1 + 1
	if not(server.starcounter%10)
		SpawnStarFromMobj(mo)
	end
end, MT_EGGMOBILE_FIRE)

// Boss 4
local leastfloor = FRACUNIT*2000
addHook("MobjThinker", function(mobj)
	if(mobj.starspawntime == nil)
		mobj.starspawntime = 0
	end
	mobj.starspawntime = ($1 + 1)%(TICRATE*3)
	local floorz = mobj.floorz
	local z = mobj.z
	if(mobj.eflags & MFE_VERTICALFLIP)
		floorz = mobj.ceilingz
		z = mobj.z+mobj.height
	end
	if not(mobj.starspawntime)
		and(abs(z-floorz) < 10*mobj.scale)
		SpawnStarFromMobj(mobj)
	end
end, MT_EGGMOBILE4_MACE)

// Metal Sonic
addHook("MobjThinker", function(mobj)
	if(mobj.starspawned == nil)
		mobj.starspawned = false
	end
	if(mobj.state == S_METALSONIC_STUN)
		or(mobj.state == S_METALSONIC_BADBOUNCE)
		if not(mobj.starspawned)
			SpawnStarFromMobj(mobj)
			if(mobj.state == S_METALSONIC_BADBOUNCE)	// Spawn 4 in total I guess
				SpawnStarFromMobj(mobj)
				SpawnStarFromMobj(mobj)
				SpawnStarFromMobj(mobj)
			end
			mobj.starspawned = true
		end
	else
		mobj.starspawned = false
	end
end, MT_METALSONIC_BATTLE)

addHook("MobjThinker", function(mobj)
	if(mobj.landed == nil)
		mobj.landed = false
	end
	
	local floorz = mobj.floorz
	local z = mobj.z
	if(mobj.eflags & MFE_VERTICALFLIP)
		floorz = mobj.ceilingz
		z = mobj.z+mobj.height
	end
	if(z <= floorz)
		and not(mobj.landed)
		SpawnStarFromMobj(mobj)
		mobj.landed = true
	end
end, MT_ENERGYBALL)
