mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-18 03:35:56 +02:00
The new experience (#201)
* new launcher and save converts and pipeline * fixing bugs
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
-- 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
|
||||
Reference in New Issue
Block a user