local ____lualib = require("lualib_bundle") local __TS__New = ____lualib.__TS__New local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread local __TS__ArrayMap = ____lualib.__TS__ArrayMap local __TS__AsyncAwaiter = ____lualib.__TS__AsyncAwaiter local __TS__Await = ____lualib.__TS__Await local ____exports = {} local ____storyteller = require("code.engine.storyteller") local ST = ____storyteller.ST local STAnimation = ____storyteller.STAnimation local STAtlas = ____storyteller.STAtlas local STContainer = ____storyteller.STContainer local STRectangle = ____storyteller.STRectangle local STScreen = ____storyteller.STScreen local STSprite = ____storyteller.STSprite local STText = ____storyteller.STText local ____global = require("code.global") local accessor = ____global.accessor local sourceClear = ____global.sourceClear local sourceReset = ____global.sourceReset local world = ____global.world local ____launcher = require("code.screens.launcher") local keybindsButtons = ____launcher.keybindsButtons local mouseButtonMenu = ____launcher.mouseButtonMenu local function textGen() return { confirm_debug = "确认启用调试控制台吗?\n{color=0x7f7f7f}除非你知道自己在做什么,\n否则请不要启用。", confirm_ponder = "要在原地沉思一会吗?\n{color=0x7f7f7f}如果陷入了困境,\n这样兴许可以帮你找到出路。", generic_disabled = "禁用", generic_enabled = "启用", generic_no = "否", generic_yes = "是", menu1 = "物品", menu2 = "沉思", menu3 = "设置", menu4 = "保存", save1 = "保存这个世界吗?", save2 = "该世界已被保存。", settings1 = "返回", settings2 = "音乐音量", settings3 = "音效音量", settings4 = "按键绑定", settings5 = "着色器渲染模式", settings6 = "调试控制台", shaders1 = "关闭", shaders2 = "基本", shaders3 = "高级" } end local function atlas(assets, batch, ____debug, game, ____bindingPattern0, ____bindingPattern1, ____bindingPattern2, ____bindingPattern3) local items local inventory inventory = ____bindingPattern0.inventory items = ____bindingPattern0.items local updateSound local updateMusic local sound local music music = ____bindingPattern1.music sound = ____bindingPattern1.sound updateMusic = ____bindingPattern1.updateMusic updateSound = ____bindingPattern1.updateSound local player_menu local player player = ____bindingPattern2.player player_menu = ____bindingPattern2.player_menu local object local screen screen = ____bindingPattern3.screen object = ____bindingPattern3.object local keybinds, logo, save, save_hooks, text local atlas atlas = __TS__New( STAtlas, { choicer = { grid = function(self) return ST:populate( game.h_len, function(index) return { index } end ) end, next = function(self) atlas:switch(nil) local ____opt_0 = game.h_task if ____opt_0 ~= nil then ____opt_0.complete() end assets["s$menu_select"]:instance() end, position = { x = 0, y = 0 }, from = function(self, ____self) ____self.position.y = 0 end }, choicer_horiz = { grid = function(self) return { ST:populate( game.h_len, function(index) return index end ) } end, next = function(self) atlas:switch(nil) local ____opt_2 = game.h_task if ____opt_2 ~= nil then ____opt_2.complete() end assets["s$menu_select"]:instance() end, position = { x = 0, y = 0 }, from = function(self, ____self, target) if target == "options" then return end ____self.position.x = 0 end }, item = { grid = function(self) return ST:populate( math.ceil(#inventory / 2), function(index) return ST:populate( math.min(#inventory - index * 2, 2), function(subindex) return index * 2 + subindex end ) end ) end, position = { x = 0, y = 0 }, prev = function(self) atlas:switch("menu") end, from = function(self, ____self) ____self.position.x = 0 ____self.position.y = 0 screen:attach(__TS__New( STScreen, { metadata = { tags = { "overlay" } }, priority = 1000000, children = { __TS__New(STSprite, { image = assets["im$ov_modal"], anchor = 0.5 }), unpack(ST:populate( 16, function(index) local c = index % 2 local r = math.floor(index / 2) if index < #inventory then local item = items[inventory[index + 1] + 1] return __TS__New( STText, { font = assets["f$helloplayer"], anchor = 0.5, content = item:name(), position = { x = ST:spread_quantize(190 / 2, c, 2), y = ST:spread_quantize(120 / 2, r, 8) } } ):addTicker(function(self) if atlas.navigators.item.position.x == c and atlas.navigators.item.position.y == r then self.color.red = 162 self.color.green = 137 self.color.blue = 220 else self.color.red = 255 self.color.green = 255 self.color.blue = 255 end end) else return __TS__New( STRectangle, { color = 4144959, anchor = 0.5, size = { x = 60, y = 0.5 }, position = { x = ST:spread_quantize(190 / 2, c, 2), y = ST:spread_quantize(120 / 2, r, 8) } } ) end end )) } } )) end, to = function(self, ____self, target) if target == nil then game.cutscene = game.cutscene - 1 player_menu.scale.x = 0 player_menu.scale.y = 0 player_menu.metadata = false player_menu.children[1]:clear() end local ____opt_4 = object("overlay") if ____opt_4 ~= nil then ____opt_4:destroy() end end }, menu = { grid = function(self) local ____array_6 = __TS__SparseArrayNew(unpack(#inventory == 0 and ({}) or ({ { "item" } }))) __TS__SparseArrayPush(____array_6, { "ponder" }, { "options" }, { "save" }) return { __TS__SparseArraySpread(____array_6) } end, position = { x = 0, y = 0 }, next = function(self) local sel = atlas:selection() if sel == "ponder" then if not accessor._ponder then atlas:switch("options_confirm") else player_menu.scale.x = 0 player_menu.scale.y = 0 atlas:switch(nil) local ____opt_7 = game.script if ____opt_7 ~= nil then ____opt_7("ponder") end end else atlas:switch(sel) end assets["s$menu_select"]:instance() end, prev = function(self) atlas:switch(nil) end, from = function(self, ____self, target) if target == nil then assets["s$menu_navigate"]:instance() ____self.position.y = 0 game.cutscene = game.cutscene + 1 player_menu.metadata = true player_menu.children[1]:attach(unpack(ST:populate( 4, function(i) local imageKeys = { "im$menu_item", "im$menu_ponder", "im$menu_options", "im$menu_save" } return __TS__New( STSprite, { image = assets[imageKeys[i + 1]], anchor = { x = 0.5, y = 0.5 }, position = { y = i * 7.5 + 2 }, -- 此處是「y = i * 間距 ± 基準座標偏移值」 scale = { x = 0.6, y = 0.6 } -- x軸和y軸的縮放 } ):addTicker(function(self) -- 選中狀態處理(通過更改透明度) if atlas.target == "menu" and atlas:selection() == ({ "item", "ponder", "options", "save" })[i + 1] then -- 選中 self.alpha.value = 1 elseif i == 0 and #inventory == 0 then -- item不可用時 self.alpha.value = 0.25 else self.alpha.value = 0.5 -- 未選中 end end) end ))) end end, to = function(self, ____self, target) if target == nil then game.cutscene = game.cutscene - 1 player_menu.metadata = false player_menu.children[1]:clear() end end }, options = { grid = function(self) return { { "back" }, { "music" }, { "sound" }, { "input" }, { "shaders" }, { "debug" } } end, position = { x = 0, y = 0 }, prev = function(self) if game.encounter then atlas:switch("choicer_horiz") else atlas:switch("menu") end end, next = function(self) repeat local ____switch47 = atlas.navigators.options.position.y local ____cond47 = ____switch47 == 0 if ____cond47 then atlas:switch("menu") break end ____cond47 = ____cond47 or ____switch47 == 1 if ____cond47 then accessor["$option_music_enabled"] = not accessor["$option_music_enabled"] updateMusic() if music.value ~= 0 then assets["s$menu_select$music"]:instance() end break end ____cond47 = ____cond47 or ____switch47 == 2 if ____cond47 then accessor["$option_sound_enabled"] = not accessor["$option_sound_enabled"] updateSound() if sound.value ~= 0 then assets["s$menu_select"]:instance() end break end ____cond47 = ____cond47 or ____switch47 == 3 if ____cond47 then atlas:switch("options_input") assets["s$menu_select"]:instance() break end ____cond47 = ____cond47 or ____switch47 == 4 if ____cond47 then local ____accessor_9, _____24option_shaders_10 = accessor, "$option_shaders" local ____accessor__24option_shaders_11 = ____accessor_9[_____24option_shaders_10] + 1 ____accessor_9[_____24option_shaders_10] = ____accessor__24option_shaders_11 if ____accessor__24option_shaders_11 == 3 then accessor["$option_shaders"] = 0 end assets["s$menu_select"]:instance() break end ____cond47 = ____cond47 or ____switch47 == 5 if ____cond47 then if not accessor["$option_debug_prompt"] then atlas:switch("options_confirm") else local ____debug_13 = ____debug local ____temp_12 = not accessor["$option_debug"] accessor["$option_debug"] = ____temp_12 ____debug_13.canActivate = ____temp_12 end assets["s$menu_select"]:instance() break end ____cond47 = ____cond47 or ____switch47 == 6 if ____cond47 then atlas:switch("options_confirm") assets["s$menu_select"]:instance() break end until true end, from = function(self, ____self, target) if target == "options_input" then return end logo:attach() screen:attach(__TS__New( STContainer, { metadata = { tags = { "overlay" } }, priority = 1000000, children = { __TS__New(STRectangle, { anchor = 0.5, size = { x = 240, y = 180 }, color = 0 }), logo, unpack(__TS__ArrayMap( { text.settings1, text.settings2, text.settings3, text.settings4, text.settings5, text.settings6 }, function(____, line, index) return __TS__New( STText, { position = { x = -5, y = 35 + ST:spread(45, index, 6) }, anchor = { x = 1, y = 0.5 }, font = assets["f$helloplayer"], content = line, children = (function() repeat local ____switch60 = index local ____cond60 = ____switch60 == 1 or ____switch60 == 2 if ____cond60 then return { __TS__New(STText, { anchor = { y = 0.5 }, position = { x = 10 }, font = assets["f$helloplayer"], content = text .generic_disabled }):addTicker(index == 1 and (function(self) self.alpha.value = accessor ["$option_music_enabled"] and 0 or 1 end) or (function(self) self.alpha.value = accessor ["$option_sound_enabled"] and 0 or 1 end)), __TS__New(STAnimation, { anchor = { y = 0.5 }, position = { x = 10, y = -2 }, scale = { x = 2 }, frames = assets["im$volume"] }):addTicker(index == 1 and (function(self) self.alpha.value = accessor ["$option_music_enabled"] and 1 or 0 self.frame = accessor["$option_music"] end) or (function(self) self.alpha.value = accessor ["$option_sound_enabled"] and 1 or 0 self.frame = accessor["$option_sound"] end)) } end ____cond60 = ____cond60 or (____switch60 == 4 or ____switch60 == 5) if ____cond60 then return { __TS__New(STText, { anchor = { y = 0.5 }, position = { x = 10 }, font = assets["f$helloplayer"] }):addTicker(index == 4 and (function(self) self.content = ({ text.shaders1, text.shaders2, text.shaders3 }) [accessor["$option_shaders"] + 1] end) or (function(self) self.content = accessor["$option_debug"] and text.generic_enabled or text.generic_disabled end)) } end do return {} end until true end)() } ):addTicker(function(self) if atlas.navigators.options.position.y == index then self.color.red = 162 self.color.green = 137 self.color.blue = 220 else self.color.red = 255 self.color.green = 255 self.color.blue = 255 end end) end )) } } )) end, to = function(self, ____self, target) if target == "options_input" then return end if target == "menu" or target == "choicer_horiz" then ____self.position.y = 0 end logo:clear() local ____opt_14 = object("overlay") if ____opt_14 ~= nil then ____opt_14:destroy() end end }, options_confirm = { grid = function(self) return { { "no", "yes" } } end, position = { x = 0, y = 0 }, prev = function(self) if atlas.navigators.menu.position.y == (#inventory == 0 and 0 or 1) then atlas:switch("menu") else atlas:switch("options") end end, next = function(self, ____self) if atlas.navigators.menu.position.y == (#inventory == 0 and 0 or 1) then if atlas:selection() == "yes" then accessor._ponder = true player_menu.scale.x = 0 player_menu.scale.y = 0 atlas:switch(nil) game.cutscene = game.cutscene - 1 player_menu.metadata = false player_menu.children[1]:clear() local ____opt_16 = game.script if ____opt_16 ~= nil then ____opt_16("ponder") end else atlas:switch("menu") end else if atlas:selection() == "yes" then accessor["$option_debug_prompt"] = true accessor["$option_debug"] = true ____debug.canActivate = true end atlas:switch("options") end assets["s$menu_select"]:instance() end, from = function(self, ____self) ____self.position.x = 0 screen:attach(__TS__New( STContainer, { metadata = { tags = { "overlay" } }, priority = 1000000, children = { __TS__New(STRectangle, { anchor = 0.5, size = { x = 240, y = 180 }, color = 0 }), __TS__New(STText, { position = { y = -32 }, anchor = { x = 0.5 }, justify = 0.5, font = assets["f$helloplayer"], content = atlas.navigators.menu.position.y == (#inventory == 0 and 0 or 1) and text.confirm_ponder or text.confirm_debug }), __TS__New(STText, { position = { x = -25, y = 24 }, anchor = 0.5, font = assets["f$helloplayer"] }) :addTicker(function(self) if atlas:selection() == "no" then self.color.red = 162 self.color.green = 137 self.color.blue = 220 self.content = (">{shift=3}" .. text.generic_no) .. "{shift=3}<" else self.color.red = 255 self.color.green = 255 self.color.blue = 255 self.content = text.generic_no end end), __TS__New(STText, { position = { x = 25, y = 24 }, anchor = 0.5, font = assets["f$helloplayer"] }) :addTicker(function(self) if atlas:selection() == "yes" then self.color.red = 162 self.color.green = 137 self.color.blue = 220 self.content = (">{shift=3}" .. text.generic_yes) .. "{shift=3}<" else self.color.red = 255 self.color.green = 255 self.color.blue = 255 self.content = text.generic_yes end end) } } )) end, to = function(self) local ____opt_18 = object("overlay") if ____opt_18 ~= nil then ____opt_18:destroy() end end }, options_input = { grid = function(self) return {} end, position = { x = 0, y = 0 }, from = function(self) return __TS__AsyncAwaiter(function(____awaiter_resolve) sourceClear() ____debug.canActivate = false local wrapper = __TS__New( STContainer, { alpha = 0.92, priority = 2000000, children = { __TS__New(STRectangle, { alpha = 0.5, anchor = 0.5, size = { x = 240, y = 180 }, color = 0, priority = -3 }), __TS__New(STRectangle, { anchor = 0.5, size = { x = 180, y = 120 }, color = 0, priority = -2 }), __TS__New(STContainer, { priority = -1 }):addDrawer(function(self) love.graphics.setLineWidth(1 / 3) love.graphics.rectangle( "line", 180 / -2 + 1, 120 / -2 + 1, 180 - 2, 120 - 2 ) end) } } ):addDrawer(batch.drawer) screen:attach(wrapper) local kp = love.keypressed __TS__Await(mouseButtonMenu( wrapper, { keybinds = keybindsButtons(assets) }, "keybinds", function(cancel) local ____cancel_20 = cancel keybinds.cancel = ____cancel_20 return ____cancel_20 end )) love.keypressed = kp keybinds.cancel = nil screen:detach(wrapper) ____debug.canActivate = accessor["$option_debug"] sourceReset() atlas:switch("options") end) end }, reader = { grid = function(self) return {} end, position = { x = 0, y = 0 } }, save = { grid = function(self) return { { "yes", "no" } } end, position = { x = 0, y = 0 }, next = function(self) if atlas:selection() == "no" then atlas:switch("menu") else save() atlas:switch("save_confirm") assets["s$menu_select_huge"]:instance() end end, prev = function(self) atlas:switch("menu") end, from = function(self, ____self) ____self.position.x = 0 screen:attach(__TS__New( STContainer, { metadata = { tags = { "overlay" } }, priority = 1000000, children = { __TS__New(STSprite, { image = assets["im$ov_toast"], anchor = 0.5 }), __TS__New(STText, { position = { y = -14 }, anchor = { x = 0.5 }, justify = 0.5, font = assets ["f$helloplayer"] }):addTicker(function(self) if atlas.target == "save" then self.content = text.save1 else self.color.red = 162 self.color.green = 137 self.color.blue = 220 self.content = text.save2 self.position.y = 1.5 self.anchor.y = 0.5 end end), __TS__New(STText, { position = { x = -25, y = 11 }, anchor = 0.5, font = assets["f$helloplayer"] }) :addTicker(function(self) if atlas.target == "save" then if atlas:selection() == "yes" then self.color.red = 162 self.color.green = 137 self.color.blue = 220 self.content = (">{shift=3}" .. text.generic_yes) .. "{shift=3}<" else self.color.red = 255 self.color.green = 255 self.color.blue = 255 self.content = text.generic_yes end else self.alpha.value = 0 end end), __TS__New(STText, { position = { x = 25, y = 11 }, anchor = 0.5, font = assets["f$helloplayer"] }) :addTicker(function(self) if atlas.target == "save" then if atlas:selection() == "no" then self.color.red = 162 self.color.green = 137 self.color.blue = 220 self.content = (">{shift=3}" .. text.generic_no) .. "{shift=3}<" else self.color.red = 255 self.color.green = 255 self.color.blue = 255 self.content = text.generic_no end else self.alpha.value = 0 end end) } } )) end, to = function(self, ____self, target) if target == "save_confirm" then return end local ____opt_21 = object("overlay") if ____opt_21 ~= nil then ____opt_21:destroy() end end }, save_confirm = { grid = function(self) return {} end, next = function(self) atlas:switch("menu") end, prev = function(self) atlas:switch("menu") end, position = { x = 0, y = 0 }, to = function(self) local ____opt_23 = object("overlay") if ____opt_23 ~= nil then ____opt_23:destroy() end end } } ) keybinds = { cancel = nil } logo = __TS__New(STAnimation, { frames = assets["im$logo"], anchor = 0.5, direction = 1, position = { y = -52 }, scale = 2, color = 10652124 }):addTicker(function(self) self.alpha.value = (atlas.target == "options" or atlas.target == "options_input") and 1 or 0 end) local overlay_container = __TS__New(STContainer) save = function() accessor.location_pos_x = player.position.x accessor.location_pos_y = player.position.y accessor.location_stance = player.stance or "down" for ____, fn in ipairs(save_hooks) do fn() end world:apply() end save_hooks = {} text = textGen() return { atlas = atlas, keybinds = keybinds, logo = logo, overlay_container = overlay_container, save = save, save_hooks = save_hooks, text = text } end ____exports.default = atlas return ____exports