mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 00:10:56 +02:00
3069b2e2a9
* new launcher and save converts and pipeline * fixing bugs
63 lines
1.9 KiB
Lua
63 lines
1.9 KiB
Lua
-- S.S. Anne 1F cabins: ROM packs rooms so hallway doors map right→left
|
||
-- onto the 3×2 rooms map (warp 1 = top-left = rightmost door). Survey
|
||
-- zoom makes that look left/right flipped vs 2F/B1F. Reorder door→cell
|
||
-- and slide objects so each door keeps its OG occupants while L→R doors
|
||
-- land in reading order on the rooms map.
|
||
|
||
local SsAnneLayout = {}
|
||
|
||
local function leftmostRoomDoor(hall)
|
||
local best
|
||
for _, w in ipairs(hall.warps or {}) do
|
||
if w.destMap == "SS_ANNE_1F_ROOMS" then
|
||
if not best or w.x < best.x then best = w end
|
||
end
|
||
end
|
||
return best
|
||
end
|
||
|
||
function SsAnneLayout.apply(maps)
|
||
if not maps then return false end
|
||
local hall = maps.SS_ANNE_1F
|
||
local rooms = maps.SS_ANNE_1F_ROOMS
|
||
if not hall or not rooms then return false end
|
||
local left = leftmostRoomDoor(hall)
|
||
-- already hallway-ordered (leftmost door → rooms warp 1)
|
||
if not left or left.destWarp == 1 then return false end
|
||
|
||
local doors = {}
|
||
for _, w in ipairs(hall.warps) do
|
||
if w.destMap == "SS_ANNE_1F_ROOMS" then doors[#doors + 1] = w end
|
||
end
|
||
table.sort(doors, function(a, b) return a.x < b.x end)
|
||
for i, w in ipairs(doors) do w.destWarp = i end
|
||
|
||
-- rooms warps 1..6 return through hall warps 8..3 (L→R cabin doors)
|
||
for i, w in ipairs(rooms.warps or {}) do
|
||
if w.destMap == "SS_ANNE_1F" then w.destWarp = 9 - i end
|
||
end
|
||
|
||
local warpPos = {}
|
||
for i, w in ipairs(rooms.warps or {}) do
|
||
warpPos[i] = { x = w.x, y = w.y }
|
||
end
|
||
for _, o in ipairs(rooms.objects or {}) do
|
||
local col, row = math.floor(o.x / 10), math.floor(o.y / 10)
|
||
local oldK
|
||
for k, p in ipairs(warpPos) do
|
||
if math.floor(p.x / 10) == col and math.floor(p.y / 10) == row then
|
||
oldK = k
|
||
break
|
||
end
|
||
end
|
||
if oldK then
|
||
local newK = 7 - oldK
|
||
o.x = o.x + (warpPos[newK].x - warpPos[oldK].x)
|
||
o.y = o.y + (warpPos[newK].y - warpPos[oldK].y)
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
|
||
return SsAnneLayout
|