2025-04-16 21:38:42 +08:00

746 lines
36 KiB
Lua

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 = "Enable Debug Console?\n{color=0x7f7f7f}For if you do, in fact, know\nexactly what you're doing.",
confirm_ponder = "Stop And Think?\n{color=0x7f7f7f}If you're stuck, doing this\nmay help you make progress.",
generic_disabled = "Disabled",
generic_enabled = "Enabled",
generic_no = "No",
generic_yes = "Yes",
menu1 = "ITEM",
menu2 = "PONDER",
menu3 = "OPTIONS",
menu4 = "SAVE",
save1 = "Save The World?",
save2 = "The world has\nbeen saved.",
settings1 = "Back",
settings2 = "Music",
settings3 = "Sound",
settings4 = "Keybinds",
settings5 = "Shader Mode",
settings6 = "Debug Console",
shaders1 = "Off",
shaders2 = "Basic",
shaders3 = "Advanced"
}
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) return __TS__New(STText, {font = assets["f$fives"], anchor = {x = 0.5}, position = {y = i * 7}, content = ({text.menu1, text.menu2, text.menu3, text.menu4})[i + 1]}):addTicker(function(self)
if atlas.target == "menu" and atlas:selection() == ({"item", "ponder", "options", "save"})[i + 1] then
self.color.red = 255
self.color.green = 255
self.color.blue = 255
elseif i == 0 and #inventory == 0 then
self.color.red = 63
self.color.green = 63
self.color.blue = 63
else
self.color.red = 127
self.color.green = 127
self.color.blue = 127
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