4192 lines
202 KiB
Lua
4192 lines
202 KiB
Lua
local ____lualib = require("lualib_bundle")
|
||
local __TS__New = ____lualib.__TS__New
|
||
local __TS__ObjectAssign = ____lualib.__TS__ObjectAssign
|
||
local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
|
||
local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
|
||
local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
|
||
local __TS__Promise = ____lualib.__TS__Promise
|
||
local __TS__AsyncAwaiter = ____lualib.__TS__AsyncAwaiter
|
||
local __TS__Await = ____lualib.__TS__Await
|
||
local __TS__Number = ____lualib.__TS__Number
|
||
local __TS__ArraySlice = ____lualib.__TS__ArraySlice
|
||
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
|
||
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
|
||
local __TS__PromiseAll = ____lualib.__TS__PromiseAll
|
||
local __TS__Iterator = ____lualib.__TS__Iterator
|
||
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
|
||
local __TS__Spread = ____lualib.__TS__Spread
|
||
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
|
||
local __TS__PromiseRace = ____lualib.__TS__PromiseRace
|
||
local __TS__ArrayPush = ____lualib.__TS__ArrayPush
|
||
local __TS__StringIncludes = ____lualib.__TS__StringIncludes
|
||
local ____exports = {}
|
||
local ____storyteller = require("code.engine.storyteller")
|
||
local ST = ____storyteller.ST
|
||
local STAnimation = ____storyteller.STAnimation
|
||
local STAtlas = ____storyteller.STAtlas
|
||
local STAudio = ____storyteller.STAudio
|
||
local STBlend = ____storyteller.STBlend
|
||
local STContainer = ____storyteller.STContainer
|
||
local STDaemon = ____storyteller.STDaemon
|
||
local STFacing = ____storyteller.STFacing
|
||
local STFrames = ____storyteller.STFrames
|
||
local STHitbox = ____storyteller.STHitbox
|
||
local STImage = ____storyteller.STImage
|
||
local STPager = ____storyteller.STPager
|
||
local STRectangle = ____storyteller.STRectangle
|
||
local STSprite = ____storyteller.STSprite
|
||
local STText = ____storyteller.STText
|
||
local STValue = ____storyteller.STValue
|
||
local ____utils = require("code.engine.utils")
|
||
local bb_standard = ____utils.bb_standard
|
||
local ezecho = ____utils.ezecho
|
||
local rainGen = ____utils.rainGen
|
||
local standardSplitter = ____utils.standardSplitter
|
||
local ____global = require("code.global")
|
||
local accessor = ____global.accessor
|
||
local random = ____global.random
|
||
local ____bloom = require("code.shaders.bloom")
|
||
local bloomShader = ____bloom.default
|
||
local ____hsv = require("code.shaders.hsv")
|
||
local hsvShader = ____hsv.default
|
||
local ____outline = require("code.shaders.outline")
|
||
local outlineShader = ____outline.default
|
||
local ____common = require("code.maps.common")
|
||
local commonAreaGen = ____common.commonAreaGen
|
||
local commonResourcesGen = ____common.commonResourcesGen
|
||
function ____exports.resourcesGen(music, sound)
|
||
local cr = commonResourcesGen(music, sound)
|
||
return {
|
||
daemons = __TS__ObjectAssign(
|
||
{},
|
||
cr.daemons,
|
||
{ crickets = __TS__New(STDaemon, "sounds/crickets.ogg", { mixer = sound, loop = true, gain = 0.75 }) }
|
||
),
|
||
file = "maps/home.json",
|
||
framess = __TS__ObjectAssign(
|
||
{},
|
||
cr.framess,
|
||
{
|
||
door = __TS__New(STFrames, "images/objects/home/door.json", "images/objects/home/door.png"),
|
||
door_side = __TS__New(STFrames, "images/objects/home/door_side.json", "images/objects/home/door_side.png"),
|
||
bed_frame = __TS__New(STFrames, "images/objects/home/bed_frame.json", "images/objects/home/bed_frame.png"),
|
||
broom_box = __TS__New(STFrames, "images/objects/home/broom_box.json", "images/objects/home/broom_box.png"),
|
||
shovel_pot = __TS__New(STFrames, "images/objects/home/shovel_pot.json",
|
||
"images/objects/home/shovel_pot.png"),
|
||
basket = __TS__New(STFrames, "images/objects/home/basket.json", "images/objects/home/basket.png"),
|
||
fridge = __TS__New(STFrames, "images/objects/home/fridge.json", "images/objects/home/fridge.png"),
|
||
fridge_door = __TS__New(STFrames, "images/objects/home/fridge_door.json",
|
||
"images/objects/home/fridge_door.png"),
|
||
bed_cover = __TS__New(STFrames, "images/objects/home/bed_cover.json", "images/objects/home/bed_cover.png"),
|
||
fusebox = __TS__New(STFrames, "images/objects/home/fusebox.json", "images/objects/home/fusebox.png"),
|
||
toy = __TS__New(STFrames, "images/objects/home/toy.json", "images/objects/home/toy.png"),
|
||
counter = __TS__New(STFrames, "images/objects/home/counter.json", "images/objects/home/counter.png"),
|
||
counter_extras = __TS__New(STFrames, "images/objects/home/counter_extras.json",
|
||
"images/objects/home/counter_extras.png"),
|
||
telecomm = __TS__New(STFrames, "images/objects/home/telecomm.json", "images/objects/home/telecomm.png"),
|
||
screwbox = __TS__New(STFrames, "images/objects/home/screwbox.json", "images/objects/home/screwbox.png")
|
||
}
|
||
),
|
||
images = __TS__ObjectAssign(
|
||
{},
|
||
cr.images,
|
||
{
|
||
desk = __TS__New(STImage, "images/objects/home/desk.png"),
|
||
bed = __TS__New(STImage, "images/objects/home/bed.png"),
|
||
bed_table = __TS__New(STImage, "images/objects/home/bed_table.png"),
|
||
chair = __TS__New(STImage, "images/objects/home/chair.png"),
|
||
dresser = __TS__New(STImage, "images/objects/home/dresser.png"),
|
||
drill = __TS__New(STImage, "images/objects/home/drill.png"),
|
||
mattress = __TS__New(STImage, "images/objects/home/mattress.png"),
|
||
bin = __TS__New(STImage, "images/objects/home/bin.png"),
|
||
entertainment0 = __TS__New(STImage, "images/objects/home/entertainment0.png"),
|
||
entertainment1 = __TS__New(STImage, "images/objects/home/entertainment1.png"),
|
||
entertainment2 = __TS__New(STImage, "images/objects/home/entertainment2.png"),
|
||
lamp = __TS__New(STImage, "images/objects/home/lamp.png"),
|
||
table = __TS__New(STImage, "images/objects/home/table.png"),
|
||
chair_table = __TS__New(STImage, "images/objects/home/chair_table.png"),
|
||
stove = __TS__New(STImage, "images/objects/home/stove.png"),
|
||
board = __TS__New(STImage, "images/objects/home/board.png"),
|
||
nook = __TS__New(STImage, "images/objects/home/nook.png"),
|
||
void_shine1 = __TS__New(STImage, "images/objects/home/void_shine1.png"),
|
||
void_shine2 = __TS__New(STImage, "images/objects/home/void_shine2.png"),
|
||
extrabook = __TS__New(STImage, "images/objects/home/extrabook.png"),
|
||
bowl = __TS__New(STImage, "images/objects/home/bowl.png"),
|
||
night_living0 = __TS__New(STImage, "images/objects/home/night_living0.png"),
|
||
night_living1 = __TS__New(STImage, "images/objects/home/night_living1.png"),
|
||
night_living2 = __TS__New(STImage, "images/objects/home/night_living2.png"),
|
||
night_living3 = __TS__New(STImage, "images/objects/home/night_living3.png"),
|
||
night_living4 = __TS__New(STImage, "images/objects/home/night_living4.png"),
|
||
night_living5 = __TS__New(STImage, "images/objects/home/night_living5.png"),
|
||
night_kitchen0 = __TS__New(STImage, "images/objects/home/night_kitchen0.png"),
|
||
night_kitchen1 = __TS__New(STImage, "images/objects/home/night_kitchen1.png"),
|
||
night_kitchen2 = __TS__New(STImage, "images/objects/home/night_kitchen2.png"),
|
||
night_kitchen3 = __TS__New(STImage, "images/objects/home/night_kitchen3.png"),
|
||
night_kitchen4 = __TS__New(STImage, "images/objects/home/night_kitchen4.png"),
|
||
sippytable = __TS__New(STImage, "images/objects/home/sippytable.png"),
|
||
telescope1 = __TS__New(STImage, "images/objects/home/telescope1.png"),
|
||
telescope2 = __TS__New(STImage, "images/objects/home/telescope2.png"),
|
||
telescope_overlay = __TS__New(STImage, "images/objects/home/telescope_overlay.png"),
|
||
fuseknob = __TS__New(STImage, "images/objects/home/fuseknob.png"),
|
||
fusebox_overlay = __TS__New(STImage, "images/objects/home/fusebox_overlay.png"),
|
||
fusebox_overlay_switch = __TS__New(STImage, "images/objects/home/fusebox_overlay_switch.png"),
|
||
rock = __TS__New(STImage, "images/objects/home/rock.png"),
|
||
powbar = __TS__New(STImage, "images/objects/home/powbar.png"),
|
||
bed_frame_top = __TS__New(STImage, "images/objects/home/bed_frame_top.png"),
|
||
rope = __TS__New(STImage, "images/objects/home/rope.png")
|
||
}
|
||
),
|
||
sheet = __TS__New(STFrames, "images/maps/home.json", "images/maps/home.png")
|
||
}
|
||
end
|
||
|
||
local function areaGen()
|
||
return commonAreaGen(
|
||
function(____bindingPattern0)
|
||
local sound
|
||
local music
|
||
music = ____bindingPattern0.music
|
||
sound = ____bindingPattern0.sound
|
||
return {
|
||
["ic$player$right_sit"] = __TS__New(STImage, "images/characters/player/right_sit.png"),
|
||
["ic$player$right_sit_plush"] = __TS__New(STImage, "images/characters/player/right_sit_plush.png"),
|
||
["ic$player$slippinjimmy"] = __TS__New(STFrames, "images/characters/player/slippinjimmy.json",
|
||
"images/characters/player/slippinjimmy.png"),
|
||
["ic$player$slippinjimmy_plush"] = __TS__New(STFrames, "images/characters/player/slippinjimmy_plush.json",
|
||
"images/characters/player/slippinjimmy_plush.png"),
|
||
["m$home"] = __TS__New(STDaemon, "music/home.ogg", { mixer = music, gain = 1, loop = true }),
|
||
["m$home_full"] = __TS__New(STDaemon, "music/home_full.ogg", { mixer = music, gain = 1, loop = true }),
|
||
["s$archangel"] = __TS__New(
|
||
STDaemon,
|
||
__TS__New(STAudio, "sounds/archangel.ogg"),
|
||
{ mixer = sound, gain = 0.25, loop = true }
|
||
),
|
||
["s$basketpickup"] = __TS__New(STDaemon, "sounds/basketpickup.ogg", { mixer = sound, gain = 1 }),
|
||
["s$basketputdown"] = __TS__New(STDaemon, "sounds/basketputdown.ogg", { mixer = sound, gain = 1 }),
|
||
["s$blankets"] = __TS__New(
|
||
STDaemon,
|
||
__TS__New(STAudio, "sounds/blankets.ogg"),
|
||
{ mixer = sound, gain = 0.25 }
|
||
),
|
||
["s$bowlgrab"] = __TS__New(STDaemon, "sounds/bowlgrab.ogg", { mixer = sound, gain = 1 }),
|
||
["s$breaker_close"] = __TS__New(
|
||
STDaemon,
|
||
__TS__New(STAudio, "sounds/breaker_close.ogg"),
|
||
{ mixer = sound, gain = 0.5 }
|
||
),
|
||
["s$breaker_navigate"] = __TS__New(
|
||
STDaemon,
|
||
__TS__New(STAudio, "sounds/breaker_navigate.ogg"),
|
||
{ mixer = sound, gain = 0.2 }
|
||
),
|
||
["s$breaker_open"] = __TS__New(
|
||
STDaemon,
|
||
__TS__New(STAudio, "sounds/breaker_open.ogg"),
|
||
{ mixer = sound, gain = 0.5 }
|
||
),
|
||
["s$breaker_switch"] = __TS__New(
|
||
STDaemon,
|
||
__TS__New(STAudio, "sounds/breaker_switch.ogg"),
|
||
{ mixer = sound, gain = 0.5 }
|
||
),
|
||
["s$bucketpickup"] = __TS__New(STDaemon, "sounds/bucketpickup.ogg", { mixer = sound, gain = 0.3 }),
|
||
["s$bucketputdown"] = __TS__New(STDaemon, "sounds/bucketputdown.ogg", { mixer = sound, gain = 0.7 }),
|
||
["s$chargethrow"] = __TS__New(
|
||
STDaemon,
|
||
__TS__New(STAudio, "sounds/chargethrow.ogg"),
|
||
{ mixer = sound, loop = true }
|
||
),
|
||
["s$clicky"] = __TS__New(
|
||
STDaemon,
|
||
__TS__New(STAudio, "sounds/clicky.ogg"),
|
||
{ mixer = sound, gain = 0.5 }
|
||
),
|
||
["s$door_close"] = __TS__New(
|
||
STDaemon,
|
||
__TS__New(STAudio, "sounds/door_close.ogg"),
|
||
{ mixer = sound, gain = 1, rate = 0.9 }
|
||
),
|
||
["s$door_open"] = __TS__New(
|
||
STDaemon,
|
||
__TS__New(STAudio, "sounds/door_open.ogg"),
|
||
{ mixer = sound, gain = 0.23 }
|
||
),
|
||
["s$duffellift"] = __TS__New(STDaemon, "sounds/duffellift.ogg", { mixer = sound, gain = 0.75 }),
|
||
["s$faucet_distant"] = __TS__New(STDaemon, "sounds/faucet_distant.ogg",
|
||
{ mixer = sound, loop = true, gain = 0.3 }),
|
||
["s$faucet"] = __TS__New(STDaemon, "sounds/faucet.ogg", { mixer = sound, loop = true }),
|
||
["s$fridge_close"] = __TS__New(STDaemon, "sounds/fridge_close.ogg", { mixer = sound, gain = 0.6 }),
|
||
["s$fridge_open"] = __TS__New(STDaemon, "sounds/fridge_open.ogg", { mixer = sound, gain = 0.75 }),
|
||
["s$platformwarble"] = __TS__New(STDaemon, "sounds/platformwarble.ogg", { mixer = sound, gain = 0.5 }),
|
||
["s$ratchetloop"] = __TS__New(
|
||
STDaemon,
|
||
__TS__New(STAudio, "sounds/ratchetloop.ogg"),
|
||
{ mixer = sound, gain = 0.6, loop = true }
|
||
),
|
||
["s$rockbounce"] = __TS__New(STDaemon, "sounds/rockbounce.ogg", { mixer = sound, gain = 0.8, rate = 1.2 }),
|
||
["s$shovelchnf"] = __TS__New(STDaemon, "sounds/shovelchnf.ogg", { mixer = sound, gain = 0.35 }),
|
||
["s$shovelshing"] = __TS__New(STDaemon, "sounds/shovelshing.ogg", { mixer = sound, gain = 0.25 }),
|
||
["s$spoongrab"] = __TS__New(
|
||
STDaemon,
|
||
__TS__New(STAudio, "sounds/spoongrab.ogg"),
|
||
{ mixer = sound }
|
||
),
|
||
["s$tripod"] = __TS__New(STDaemon, "sounds/tripod.ogg", { mixer = sound, gain = 0.9, rate = 0.8 }),
|
||
["v$messenger"] = __TS__New(
|
||
STDaemon,
|
||
__TS__New(STAudio, "voices/messenger.ogg"),
|
||
{ mixer = sound, gain = 0.6 }
|
||
)
|
||
}
|
||
end,
|
||
____exports.resourcesGen
|
||
)
|
||
end
|
||
local function textGen(pager)
|
||
return {
|
||
item_book = {
|
||
name = "一本书",
|
||
info = function()
|
||
return ({ {
|
||
"<p:none>\"The Jensen Paradox, third installment in the Jensen series.\"",
|
||
"<p:none>\"How will they escape last time?\""
|
||
}, {
|
||
"<p:none>\"Surface Tension, the hotel nobody ever leaves.\"",
|
||
"<p:none>\"An endless maze of hallways, doors, swimming pools and libraries...\""
|
||
}, {
|
||
"<p:none>\"Astrae Symphonia, a tale of intrigue, emotion, and music.\"",
|
||
"<p:none>\"Follow this rogue starship to the edge of the galaxy!\""
|
||
} })[accessor.choice_home_book + 1]
|
||
end
|
||
},
|
||
item_rock = { name = "几块碎石" },
|
||
item_batteries = {
|
||
name = "几节电池",
|
||
info = {
|
||
"<p:player>(Type four batteries. Good for small devices and tools.)"
|
||
}
|
||
},
|
||
item_cover = {
|
||
name = function() return accessor.item_scissors and "一条床单绳" or "一张床单" end,
|
||
info = function()
|
||
return accessor.item_scissors and ({
|
||
"<p:player>(A makeshift \"rope\" made from pieces of a blanket.)"
|
||
}) or ({
|
||
"<p:player>(A comfortable blanket. Haven't found something to cut it with yet.)"
|
||
})
|
||
end
|
||
},
|
||
item_crowbar = {
|
||
name = "一根金属棒",
|
||
info = {
|
||
"<p:player>(One bar of pure bed frame.)",
|
||
"<p:player><f:sweat4>(It's really heavy.)"
|
||
}
|
||
},
|
||
ponder_book = pager:create(0, {
|
||
"<p:none>(You ponder why you're still awake.)",
|
||
"<p:none>(You realize you don't have a book to read in bed.)"
|
||
}, {
|
||
"<p:none>(You ponder what kind of book you'd like to read.)",
|
||
"<p:none>(You're realize you're in the mood for something novel.)"
|
||
}),
|
||
ponder_sleep = {
|
||
"<p:none>(You ponder why you're still awake.)",
|
||
"<p:none>(You realize you should probably go to bed now.)"
|
||
},
|
||
ponder_hello = {
|
||
"<p:player>...",
|
||
"<p:player>(I don't really know where I am.)",
|
||
"<p:player><f:sigh>(Exploring might give me a better idea...)"
|
||
},
|
||
ponder_outside = pager:create(
|
||
0,
|
||
{
|
||
"<p:player><f:sweat>...",
|
||
"<p:player><f:sweat>(This... house... doesn't make any sense.)",
|
||
"<p:player><f:confused>(How is it just... floating?)",
|
||
"<p:player><f:confused>(Why is there nothing else out there?)",
|
||
"<p:player><f:side>(If I could find something to \"test\" this place...)",
|
||
"<p:player>(... it might give me a clue how to escape it.)"
|
||
},
|
||
function()
|
||
return { "<p:player><f:sweat>(I'm looking for a way to escape.)",
|
||
"<p:player><f:sweat5>(To do that, I need to know what this place's limits are.)",
|
||
"<p:player><f:side>(I can't risk walking off the edge myself, so...)", accessor.item_rock and
|
||
"<p:player>(... maybe I could throw those rocks off instead.)" or
|
||
"<p:player>(... maybe I could throw something else off instead.)" }
|
||
end
|
||
),
|
||
ponder_platform = function()
|
||
return accessor.item_cover and (accessor.item_scissors and ({
|
||
"<p:player>(So far, I've cut this blanket and made it into a rope.)",
|
||
"<p:player><f:side>(Now, I just need something to hold it in place for the climb...)",
|
||
"<p:player>(... something strong and sturdy, like metal.)"
|
||
}) or ({
|
||
"<p:player>(So far, I've found a blanket, which I can make into a rope.)",
|
||
"<p:player><f:sigh>(I still need something to cut it with.)"
|
||
})) or ({
|
||
"<p:player><f:determined>(I need to find a way down to that platform.)",
|
||
"<p:player>(It's too far to jump, so I'll have to try something else.)",
|
||
"<p:player><f:side>(A rope would do the trick...)"
|
||
})
|
||
end,
|
||
ponder_exit = pager:create(0, {
|
||
"<p:player><f:sigh>...",
|
||
"<p:player><f:sigh>(It's strange... omething about this house is comfortable.)",
|
||
"<p:player><f:side>(In another life, I could see myself living here...)"
|
||
}, {
|
||
"<p:player>(There's nothing else for me to do here.)",
|
||
"<p:player><f:sigh>(It's time to go.)"
|
||
}),
|
||
overworld = {
|
||
start1 = "警告",
|
||
start2 =
|
||
"本作讲述了一群可爱的小动物之间的故事。\n在这,你能看到一些真诚暖心的瞬间。\n此外,本作采用了简洁的艺术风格。",
|
||
start3 =
|
||
"如果你是来寻求暴力刺激,惊艳的视觉效果,\n或者哪怕只是一个死亡界面,在本作你就得失望了。",
|
||
tutorial1 = "(按下[↑][↓][←][→]来控制角色移动。)",
|
||
tutorial2 = "按下[Z]来调查物品。",
|
||
tutorial3 = "按[Z]推进对话。",
|
||
tutorial4 = "按[↑][↓]来更改选择。\n按[Z]确认。",
|
||
tutorial5 = "按[C]来开启/关闭菜单。\n{color=0x7f7f7f}试试各个选项能干什么。",
|
||
tutorial6 = "按[X]退出。",
|
||
tutorial7 = "长按[Z], 然后松开来投掷。",
|
||
tutorial8 = "根据提示按下[←][→]来攀爬。",
|
||
blocker1 = {
|
||
"<p:none>(太晚了,你待在屋里会安全点。)"
|
||
},
|
||
blocker2 = {
|
||
"<p:none>(你好像有什么事忘了做。)"
|
||
},
|
||
blocker3 = {
|
||
"<p:none>Go upstairs and complete the tutorial?"
|
||
},
|
||
blocker4 = {
|
||
"上楼吧",
|
||
"再等等"
|
||
},
|
||
blocker5 = {
|
||
"<p:none>Go outside and climb down to the golden platform?"
|
||
},
|
||
blocker6 = {
|
||
"Go Outside",
|
||
"Not Yet"
|
||
},
|
||
bookshelf1 = {
|
||
"<p:none>要拿本书吗?"
|
||
},
|
||
bookshelf2 = {
|
||
"The Jensen Paradox (Action)",
|
||
"Surface Tension (Surreal)",
|
||
"Astrae Symphonia (Space)",
|
||
"Not Yet"
|
||
},
|
||
bookshelf3 = {
|
||
"<h:a><p:none>(You got the Book.)"
|
||
},
|
||
bookshelf4 = {
|
||
"<p:none>(你打算不这么做。)"
|
||
},
|
||
hello1 = {
|
||
"<p:player><f:sweat>...",
|
||
"<p:player><f:sweat>(这好像不是我的床吧。)"
|
||
},
|
||
hello2 = {
|
||
"<p:player><f:sweat5>(... maybe I slept on the wrong antenna...)"
|
||
},
|
||
hello3 = {
|
||
"<p:player><f:what>(不对... 这压根就不是我家啊。)",
|
||
"<p:player><f:confused>(我咋就来这了?\n难不成... 有人把我绑了?)"
|
||
},
|
||
hello4 = {
|
||
"<p:player><f:side>(I don't remember being taken...)"
|
||
},
|
||
goatplush0 = "Plushie",
|
||
goatplush1 = pager:create(
|
||
0,
|
||
function()
|
||
return { "<p:player><f:surprise>(Hey, this is MY plushie!)", accessor.plot < 1.1 and
|
||
"<p:player><f:confused>(Maybe this is my room after all...?)" or
|
||
"<p:player><f:confused>(... did you follow me here, to this strange place?)", "<p:none>Pick them up?" }
|
||
end,
|
||
{
|
||
"<p:none>Pick them up?"
|
||
}
|
||
),
|
||
goatplush2 = {
|
||
"Yes",
|
||
"No"
|
||
},
|
||
goatplush3 = {
|
||
"<p:player><f:sigh>Come here, you.",
|
||
"<h:a><p:none>{color=0xa289dc}Dysu{color=0xffffff} got the Plushie.",
|
||
"<p:player><f:side>...",
|
||
"<p:player>(Maybe I should hold onto this for a while.)"
|
||
},
|
||
fusebox1 = function()
|
||
return {
|
||
"<p:player><f:side>(An electric routing box...)",
|
||
unpack(accessor.plot < 2 and ({
|
||
"<p:player><f:sodesuka>(Maybe I can get main power back on.)"
|
||
}) or ({}))
|
||
}
|
||
end,
|
||
fusebox2 = "厨房",
|
||
fusebox3 = "过道",
|
||
fusebox4 = "FAMILY",
|
||
fusebox5 = "卧室",
|
||
fusebox6 = "娱乐中心",
|
||
fusebox7 = "室外",
|
||
fusebox8 = "已通电",
|
||
fusebox9 = "已断电",
|
||
lightswitch = {
|
||
"<p:player><f:sigh>(No power.)"
|
||
},
|
||
telecomm1 = function()
|
||
return {
|
||
"<p:player>(A comms device. Must be battery-powered.)",
|
||
unpack(accessor.plot < 2 and ({
|
||
"<p:player><f:confused>(Only two receivers on the contact list...?)"
|
||
}) or ({}))
|
||
}
|
||
end,
|
||
telecomm2 = {
|
||
"<p:none>What will you do?"
|
||
},
|
||
telecomm3a = {
|
||
"Call Work",
|
||
"Call Neighbors",
|
||
"Play Back Message",
|
||
"Never Mind"
|
||
},
|
||
telecomm3b = {
|
||
"Call Work",
|
||
"Call Neighbors",
|
||
"Never Mind"
|
||
},
|
||
telecomm4 = { {
|
||
"<p:none>(Calling... Work.)"
|
||
}, {
|
||
"<p:none>(Calling... Neighbors.)"
|
||
} },
|
||
telecomm5 = {
|
||
"<p:none>(That Receiver Does Not Exist.)"
|
||
},
|
||
telecomm6 = function()
|
||
return {
|
||
"<p:none>(Beginning Playback...)",
|
||
"<p:messenger>Jerry's Dabo club, Morn speakin.'",
|
||
"<p:messenger>... hello? Anyone there?",
|
||
"<p:messenger>Hmph. Call us back if you'd like to claim your refund.",
|
||
unpack(accessor.state_home_telecomm_message == 0 and ({
|
||
"<h:a><p:player><f:annoyed>(Oh. It's just a scam.)",
|
||
unpack(accessor.event_home_outside and ({
|
||
"<p:player><f:sweat5>(I'd delete the message, if it wasn't for the small possibility...)",
|
||
"<p:player><f:sweat>(... that this might be the last other person's voice I hear.)"
|
||
}) or ({
|
||
"<p:player><f:sigh>(Nobody would mind if I deleted this, would they?)",
|
||
"<h:b><p:none>(Message Deleted.)"
|
||
}))
|
||
}) or ({}))
|
||
}
|
||
end,
|
||
fridge1 = pager:create(
|
||
0,
|
||
function()
|
||
return { accessor.plot < 2 and "<p:player><f:sweat4>(You know what? I'm starving...)" or
|
||
"<p:player><f:sweat3>(Actually, before I go...)", "<p:none>Eat something from the fridge?" }
|
||
end,
|
||
{
|
||
"<p:none>Eat something from the fridge?"
|
||
}
|
||
),
|
||
fridge2 = {
|
||
"Boka Fruit",
|
||
"Tenzka Tracks Ice Cream",
|
||
"Morning Leftovers",
|
||
"Never Mind"
|
||
},
|
||
fridge3 = { {
|
||
"<p:player><f:annoyed>(These better be home-grown.)"
|
||
}, {
|
||
"<p:player><f:surprise>(My favorite food! I must be lucky.)"
|
||
}, {
|
||
"<p:player>(... it's better than nothing.)"
|
||
}, {
|
||
"<p:player><f:sweat5>..."
|
||
} },
|
||
fridge4 = { {
|
||
"<p:player><f:sodesuka>(Huh. Those were actually pretty good.)"
|
||
}, {
|
||
"<p:player><f:sweat4>(... might've eaten too much.)"
|
||
}, {
|
||
"<p:player>..."
|
||
} },
|
||
fridge5 = function()
|
||
return accessor.plot < 2 and ({
|
||
"<p:player><f:sweat>(Oh... right.)",
|
||
"<p:player><f:sweat5>(I'm still trying to get out of here.)"
|
||
}) or ({
|
||
"<p:player>(... time to get back to what I was doing.)"
|
||
})
|
||
end,
|
||
outside1 = {
|
||
"<p:player><f:what>(什么鬼...)",
|
||
"<p:player><f:what>..."
|
||
},
|
||
outside2 = {
|
||
"<p:player><f:upset2>(这到底什么情况?)",
|
||
"<p:player><f:sad>(我... 我究竟在哪?)"
|
||
},
|
||
outside3 = {
|
||
"<p:player><f:sweat5>(根本望不到边。)",
|
||
"<p:player><f:sweat3>(不管往哪儿转,\n我都只能看到...)"
|
||
},
|
||
outside4 = {
|
||
"<p:player><f:sweat5>(我... 我得想办法离开这儿...)"
|
||
},
|
||
telescope1 = {
|
||
"<p:player><f:side>(这有台望远镜...)"
|
||
},
|
||
telescope2 = {
|
||
"<p:player>(兴许我能用它\n在远处看到点什么。)"
|
||
},
|
||
basket1a = {
|
||
"<p:player>...",
|
||
"<h:a><p:player><f:side>(Wait, that box on the bookshelf...)",
|
||
"<h:a><p:player><f:surprise>(It's the lockbox from the note!)"
|
||
},
|
||
basket1b = {
|
||
"<p:player><f:side>(Hm...)"
|
||
},
|
||
basket2 = {
|
||
"<p:none>{color=0xa289dc}Dysu{color=0xffffff} got the Library Card.",
|
||
"<p:player><f:surprise>(There!)"
|
||
},
|
||
basket3 = {
|
||
"<p:player><f:confused>(A library card...?)"
|
||
},
|
||
bucket1 = function()
|
||
return accessor.plot < 3 and
|
||
(accessor.item_cover and accessor.item_scissors and not accessor.item_crowbar and ({
|
||
"<p:player><f:side>(A rusty shovel. I'd use this as an anchor, but...)"
|
||
}) or ({
|
||
"<p:player><f:side>(A rusty shovel. Looks like it's...)"
|
||
})) or ({
|
||
"<p:player><f:side>(A rusty shovel...)"
|
||
})
|
||
end,
|
||
bucket2 = function()
|
||
return {
|
||
"<p:player>(Wait.)",
|
||
unpack(accessor.plot < 2 and ({
|
||
"<p:player><f:confused>(What about the pail?)"
|
||
}) or ({
|
||
"<p:player><f:sigh>(That pail might be come in handy.)"
|
||
}))
|
||
}
|
||
end,
|
||
bucket3 = function()
|
||
local ____array_0 = __TS__SparseArrayNew(unpack(accessor.plot < 2 and ({
|
||
"<p:player><f:confused>(... how could it be raining when there's nothing else outside?)",
|
||
"<p:player><f:side>(Maybe I can learn something by collecting it, and...)",
|
||
"<p:player><f:sweat>(Studying it, I guess.)",
|
||
"<p:player><f:sigh>(... sounds stupid when I think about it like that, but still.)"
|
||
}) or ({
|
||
"<p:player>(Just in case.)"
|
||
})))
|
||
__TS__SparseArrayPush(____array_0, "<h:a><p:none>{color=0xa289dc}Dysu{color=0xffffff} got the Pail.")
|
||
return { __TS__SparseArraySpread(____array_0) }
|
||
end,
|
||
bucket4 = {
|
||
"<p:player><f:sodesuka>(Don't think I can collect any rain from here.)"
|
||
},
|
||
rain1 = {
|
||
"<p:player><f:side>..."
|
||
},
|
||
rain2 = {
|
||
"<p:player><f:side>(That's weird...)",
|
||
"<p:player><f:side>(The rain's definitely going inside, but...)",
|
||
"<p:player><f:sodesuka>(It's... not filling up.)"
|
||
},
|
||
rain3 = {
|
||
"<p:player><f:what>(Freaky.)",
|
||
"<p:player><f:sigh>(... guess I can't learn anything from this, though.)"
|
||
},
|
||
rope1 = function()
|
||
return { "<p:player>(一截麻绳,剩下不多了。)", accessor.plot == 2 and
|
||
"<p:player><f:sigh>(Doubt it's enough to reach the platform, but I'll take it anyway.)" or
|
||
"<p:player><f:sigh>(Still might be useful, though.)",
|
||
"<h:a><p:none>{color=0xa289dc}Dysu{color=0xffffff} got the Rope." }
|
||
end,
|
||
rope2 = {
|
||
"<p:player><f:sodesuka>(No use for this indoors.)"
|
||
},
|
||
dangle1 = {
|
||
"<p:player><f:side>(Hm...)"
|
||
},
|
||
dangle2 = {
|
||
"<p:player><f:sigh>(No, it's nowhere NEAR long enough to get me down there.)"
|
||
},
|
||
dangle3 = function()
|
||
return accessor.item_cover and ({
|
||
"<p:player>(... the blanket plan will have to do.)"
|
||
}) or ({
|
||
"<p:player>(... maybe there's something else I could make a rope out of.)"
|
||
})
|
||
end,
|
||
drill = {
|
||
"<p:player>(A heavy-duty electric drill. Might be useful.)",
|
||
"<h:a><p:none>{color=0xa289dc}Dysu{color=0xffffff} got the Drill.",
|
||
"<p:player><f:sigh>(Good thing these batteries were included.)"
|
||
},
|
||
drill_tooltip = "Drill",
|
||
broombox1 = {
|
||
"<p:player><f:sigh>(A box of old collector's rocks...)",
|
||
"<p:player>(... doubt they're important, so instead, I could try throwing them.)",
|
||
"<h:a><p:none>{color=0xa289dc}Dysu{color=0xffffff} got the Rock.",
|
||
"<p:player>(Off the edge.)",
|
||
"<h:b><p:none>{color=0xa289dc}Dysu{color=0xffffff} got the Rock.",
|
||
"<p:player>(To see what happens.)",
|
||
"<h:c><p:none>{color=0xa289dc}Dysu{color=0xffffff} got the Rock."
|
||
},
|
||
broombox2 = {
|
||
"<p:player><f:sigh>(It's worth a try.)"
|
||
},
|
||
broombox3 = {
|
||
"<p:player><f:sweat>(Throwing these indoors won't tell me anything.)"
|
||
},
|
||
golden1 = {
|
||
"<p:player>(... right.)"
|
||
},
|
||
golden2 = {
|
||
"<p:player><f:sigh>...",
|
||
"<h:a><p:player><f:surprise>(Get ready...!)"
|
||
},
|
||
golden3 = {
|
||
"<p:player><f:sweat3>...",
|
||
"<p:player><f:sweat3>(Maybe I didn't throw it far enough.)"
|
||
},
|
||
golden4 = {
|
||
"<p:player><f:sigh>(Here we go...)",
|
||
"<h:a><p:player><f:surprise>(... again!)"
|
||
},
|
||
golden5 = {
|
||
"<p:player><f:sad>...",
|
||
"<p:player><f:sad>(Nothing...)"
|
||
},
|
||
golden6 = {
|
||
"<p:player><f:sigh>...",
|
||
"<p:player><f:sigh>(... what if I just...)"
|
||
},
|
||
golden7 = {
|
||
"<p:player><f:what>..."
|
||
},
|
||
golden8 = {
|
||
"<p:player><f:what>(That's new.)"
|
||
},
|
||
golden9 = {
|
||
"<p:player><f:side>...",
|
||
"<p:player><f:side>(Doesn't look like part of the house...)",
|
||
"<p:player><f:confused>(Could that be what's behind all of this?)",
|
||
"<p:player><f:sweat3>...",
|
||
"<p:player><f:sweat3>(Maybe it's silly, but if...)",
|
||
"<p:player><f:sweat>(If I could get down there somehow...)"
|
||
},
|
||
golden10 = {
|
||
"<p:player><f:determined>(... I might just be able to escape!)"
|
||
},
|
||
scissors1 = function()
|
||
local ____array_1 = __TS__SparseArrayNew(unpack(accessor.item_cover and ({
|
||
"<p:player><f:surprise>(Scissors! For the blanket!)"
|
||
}) or ({
|
||
"<p:player><f:side>(Scissors...)",
|
||
"<p:player>(Could be good to have these on hand.)"
|
||
})))
|
||
__TS__SparseArrayPush(
|
||
____array_1,
|
||
"<h:a><p:none>{color=0xa289dc}Dysu{color=0xffffff} got the Scissors.",
|
||
unpack(accessor.item_cover and ({
|
||
"<p:player><f:sweat4>(Sorry, little blanket...)"
|
||
}) or ({}))
|
||
)
|
||
return { __TS__SparseArraySpread(____array_1) }
|
||
end,
|
||
scissors2 = function()
|
||
return {
|
||
"<p:player><f:side>(... that's that taken care of...)",
|
||
unpack(accessor.item_crowbar and ({
|
||
"<p:player><f:surprise>(Oh! And I can use the bed frame as an anchor!)"
|
||
}) or ({
|
||
"<p:player><f:sweat>(Now I need something to anchor the \"rope\" to once I'm outside.)"
|
||
}))
|
||
}
|
||
end,
|
||
bed1 = {
|
||
"<p:player><f:side>(The bed...)",
|
||
"<p:player><f:sweat5>(... no...)"
|
||
},
|
||
bed2 = function()
|
||
return {
|
||
"<p:player><f:surprise>(The covers!)",
|
||
"<p:player><f:side>(If I cut the blanket into pieces, I can tie those together...)",
|
||
"<p:player><f:surprise>(... and make a rope out of it!)",
|
||
"<h:a><p:none>{color=0xa289dc}Dysu{color=0xffffff} got the Blanket.",
|
||
unpack(accessor.item_scissors and ({
|
||
"<p:player><f:sweat4>(Sorry, little blanket...)"
|
||
}) or ({}))
|
||
}
|
||
end,
|
||
bed3 = function()
|
||
return not accessor.item_scissors and ({
|
||
"<p:player><f:sweat>(I'll need something to cut it with, though.)"
|
||
}) or (not accessor.item_crowbar and ({
|
||
"<p:player><f:sweat>(Now I need something to anchor the \"rope\" to once I'm outside.)"
|
||
}) or ({
|
||
"<p:player><f:surprise>(Oh! And I can use the bed frame as an anchor!)"
|
||
}))
|
||
end,
|
||
framer1 = function()
|
||
return {
|
||
"<p:player><f:side>(A metal bed frame. I wonder if I could take it apart...)",
|
||
unpack(accessor.item_drill and ({
|
||
"<p:player>(... the drill should do nicely!)"
|
||
}) or ({
|
||
"<p:player>(... not by hand, that's for sure.)"
|
||
}))
|
||
}
|
||
end,
|
||
framer2 = function()
|
||
return {
|
||
"<p:none>{color=0xa289dc}Dysu{color=0xffffff} got the Metal Bar.",
|
||
unpack(accessor.item_cover and accessor.item_scissors and ({
|
||
"<p:player><f:side>..."
|
||
}) or ({
|
||
"<p:player><f:surprise>(Nice!)"
|
||
}))
|
||
}
|
||
end,
|
||
framer3 = {
|
||
"<p:player><f:surprise>(... wait! That's it!)",
|
||
"<p:player><f:side>(I'll attach the \"rope\" to the bar, place it behind the doorway...)",
|
||
"<p:player><f:determined2>(... and climb my way down to the platform!)"
|
||
},
|
||
done1 = {
|
||
"<p:player><f:side>(I'll attach the \"rope\" to it, place it behind the doorway...)",
|
||
"<p:player><f:determined2>(... and climb my way down to the platform!)"
|
||
},
|
||
done2 = {
|
||
"<p:player><f:sweat5>(About time...)"
|
||
},
|
||
exit1 = {
|
||
"<p:player><f:side>(Well, that should do it...)"
|
||
},
|
||
exit2 = {
|
||
"<p:player><f:sweat>(Don't look down.)"
|
||
},
|
||
exit3 = {
|
||
"<p:player><f:surprise>... I made it! I'm here!",
|
||
"<h:a><p:player><f:side>I'm actually..."
|
||
},
|
||
exit4 = {
|
||
"<p:player><f:what>(What the-)"
|
||
}
|
||
},
|
||
trivia = {
|
||
window = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(You peer through the window, observing the outdoor nightlife.)"
|
||
}) or (accessor.plot < 2 and (not accessor.event_home_outside and ({
|
||
"<p:player><f:side>(That's weird...)",
|
||
"<p:player>(... can't see anything out there.)"
|
||
}) or ({
|
||
"<p:player><f:sweat>..."
|
||
})) or ({
|
||
"<p:player><f:determined>..."
|
||
}))
|
||
end,
|
||
bed = function()
|
||
return not accessor.item_cover and ({
|
||
"<p:player><f:sweat4>(A surprisingly comfortable bed.)"
|
||
}) or (accessor.plot < 3 and ({
|
||
"<p:player><f:sweat4>(Probably not as comfortable anymore.)"
|
||
}) or ({
|
||
"<p:player>(A bed.)"
|
||
}))
|
||
end,
|
||
computer = function()
|
||
return {
|
||
"<p:player>(A computer.)",
|
||
unpack(not accessor.event_home_outside and ({
|
||
"<p:player><f:sigh>(The neural input looks worn out. Must have seen a lot of use.)"
|
||
}) or (accessor.plot < 3 and ({
|
||
"<p:player><f:sigh>(Without any power, it's just a box.)"
|
||
}) or ({})))
|
||
}
|
||
end,
|
||
chair = function()
|
||
return accessor.plot < 3 and ({
|
||
"<p:player>(Just a chair.)"
|
||
}) or ({
|
||
"<p:player><f:sigh>(Despite everything, it's still just a chair.)"
|
||
})
|
||
end,
|
||
dresser1 = function()
|
||
return accessor.plot < 2 and ({
|
||
"<p:player>(Lots of toys and trinkets in these drawers.)"
|
||
}) or (accessor.plot < 3 and ({
|
||
"<p:player><f:sigh>(Now's not the time for souvenirs.)"
|
||
}) or ({
|
||
"<p:player><f:sigh>(Toys and trinkets.)"
|
||
}))
|
||
end,
|
||
dresser2 = function()
|
||
return accessor.plot < 2 and ({
|
||
"<p:player>(Nothing but antenna warmers in these drawers.)"
|
||
}) or (accessor.plot < 3 and ({
|
||
"<p:player><f:sigh>(Antenna warmers won't help me reach the platform.)"
|
||
}) or ({
|
||
"<p:player><f:sigh>(Antenna warmers.)"
|
||
}))
|
||
end,
|
||
book = function()
|
||
return accessor.plot < 3 and ({ ({
|
||
"<p:player><f:side>(\"The Jensen Paradox...\")",
|
||
"<p:player><f:side>(\"Surface Tension...\")",
|
||
"<p:player><f:side>(\"Astrae Symphonia...\")"
|
||
})[accessor.choice_home_book + 1], accessor.plot < 2 and "<p:player>(Not a bad choice.)" or "<p:player><f:sweat>(... part of this story might be coming true.)" }) or
|
||
({ {
|
||
"<p:player>(\"The Jensen Paradox.\")"
|
||
}, {
|
||
"<p:player>(\"Surface Tension.\")"
|
||
}, {
|
||
"<p:player>(\"Astrae Symphonia.\")"
|
||
} })[accessor.choice_home_book + 1]
|
||
end,
|
||
cutetunnel = function()
|
||
return accessor.plot < 2 and ({
|
||
"<p:player>(Painting of a wild arkette staring down a corridor.)"
|
||
}) or ({
|
||
"<p:player><f:sigh>(... you and me both, little arkette.)"
|
||
})
|
||
end,
|
||
toy = function()
|
||
return accessor.plot < 2 and ({
|
||
"<p:player><f:confused>(A perpetual motion toy?)",
|
||
"<p:player><f:sodesuka>(Wonder how long it's been going...)"
|
||
}) or (accessor.plot < 3 and ({
|
||
"<p:player><f:confused>(Wait, wasn't this toy doing something earlier?)"
|
||
}) or ({
|
||
"<p:player>(A simple toy.)"
|
||
}))
|
||
end,
|
||
plant = function()
|
||
return {
|
||
"<p:player>(Baby boka tree.)",
|
||
unpack(accessor.plot < 2 and ({
|
||
"<p:player><f:sweat3>(Seems like it's almost ready to be planted...)"
|
||
}) or (accessor.plot < 3 and ({
|
||
"<p:player><f:sigh>(Shame there's nowhere to plant this.)"
|
||
}) or ({})))
|
||
}
|
||
end,
|
||
shovel = function()
|
||
return accessor.item_bucket and ({
|
||
"<p:player><f:sigh>(A rusty shovel with a great big hole in it.)"
|
||
}) or
|
||
(accessor.plot < 3 and (accessor.item_cover and accessor.item_scissors and not accessor.item_crowbar and ({
|
||
"<p:player><f:side>(A rusty shovel. I'd use this as an anchor...)",
|
||
"<p:player><f:sweat>(... if it wasn't such a piece of junk.)"
|
||
}) or ({
|
||
"<p:player>(A rusty shovel. Looks like it's about to fall apart.)"
|
||
})) or ({
|
||
"<p:player>(Useless shovel.)"
|
||
}))
|
||
end,
|
||
broombox = function()
|
||
return accessor.item_rock and ({
|
||
"<p:player><f:sigh>(An old broom with a broken handle.)"
|
||
}) or ({
|
||
"<p:player>(An old broom and some fancy rocks. The broom's handle is broken.)"
|
||
})
|
||
end,
|
||
dresserdrawer1 = {
|
||
"<p:player><f:sigh>(An empty dresser drawer.)"
|
||
},
|
||
dresserdrawer2 = {
|
||
"<p:player><f:sigh>(An empty dresser drawer. It's stuck open.)"
|
||
},
|
||
dresserpaper = function()
|
||
return {
|
||
"<p:player>\"After much deliberation, we have come to an agreement.\"",
|
||
"<p:player>\"For your continued effort, a promotion is in order.\"",
|
||
"<p:player>\"Accept it at any time by bringing this envelope to work with you.\"",
|
||
"<p:player>\"Sincerely, the board.\"",
|
||
accessor.plot < 3 and "<p:player><f:side>..." or "<p:player><f:sigh>..."
|
||
}
|
||
end,
|
||
mattress = function()
|
||
return accessor.plot < 3 and ({
|
||
"<p:player><f:sigh>(Don't think this mattress has ever been slept on.)"
|
||
}) or ({
|
||
"<p:player>(Unused mattress.)"
|
||
})
|
||
end,
|
||
bin = {
|
||
"<p:player>(An empty bin with a cleaning towel draped over the side.)"
|
||
},
|
||
bedframe = function()
|
||
return accessor.plot < 2 and ({
|
||
"<p:player>(A metal bed frame. The most dangerous object in the universe.)"
|
||
}) or ({
|
||
"<p:player>(A metal bed frame, with one side removed.)",
|
||
"<p:player><f:sweat3>(If anything, this makes it MORE dangerous...)"
|
||
})
|
||
end,
|
||
fusebox = {
|
||
"<p:none>(配电箱发出了微弱的电流声。)"
|
||
},
|
||
lightswitch = {
|
||
"<p:none>(电灯开关。)"
|
||
},
|
||
lamp = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(你偏爱黑暗的魅力,\n因此不想开灯。)"
|
||
}) or ({
|
||
"<p:player>(A lamp.)",
|
||
unpack(accessor.plot < 3 and ({
|
||
"<p:player><f:sigh>(...不常用的东西呢。)"
|
||
}) or ({}))
|
||
})
|
||
end,
|
||
telescope = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(一个望远镜收纳袋,还没打开过。\n那台望远镜,你总有一天用得上。)"
|
||
}) or ({
|
||
"<p:player><f:side>(套着袋子的望远镜。\n太可惜了...)"
|
||
})
|
||
end,
|
||
bookshelf = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(对你而言,\n书籍才是虚构故事的\n理想载体。)"
|
||
}) or (not accessor.event_home_secret and ({
|
||
"<p:player><f:what>(这个书架真不错,\n我感觉我能看上一阵子...)"
|
||
}) or (accessor.event_home_bookshelf < 1 and ({
|
||
"<p:player><f:side>(上面有个坏掉的保险箱,好...)"
|
||
}) or (accessor.event_home_bookshelf < 2 and ({
|
||
"<p:player><f:sigh>(箱子太高了,我够不着。)"
|
||
}) or ({
|
||
"<p:player>(通往阅读的大门,\n从各种意义上来说。)"
|
||
}))))
|
||
end,
|
||
couch = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(沙发。你想着自己会不会\n又在这里睡着。)"
|
||
}) or (accessor.plot < 2 and ({
|
||
"<p:player><f:sweat5>(有人在这沙发上睡过觉,\n没错吧?)"
|
||
}) or ({
|
||
"<p:player><f:confused>(我从高处跳到沙发上\n会不会摔死呢?)",
|
||
"<p:player><f:sweat>(...不行,太冒险了。)"
|
||
}))
|
||
end,
|
||
entertainment = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(家庭娱乐中心,\n每个家庭的标配。)"
|
||
}) or (accessor.plot < 2 and ({
|
||
"<p:player>(豪华版家庭娱乐中心。)"
|
||
}) or ({
|
||
"<p:player>(家庭娱乐中心。)"
|
||
}))
|
||
end,
|
||
SIPPY = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(一套从本地二手店\n淘来的杯子。)"
|
||
}) or (accessor.plot < 2 and ({
|
||
"<p:player><f:sweat3>(怪怪的杯子,装着...\n外星液体什么的?)",
|
||
"<p:player><f:sweat>(很难说里面是什么。)"
|
||
}) or ({
|
||
"<p:player><f:sigh>(还是别碰这些为妙。)"
|
||
}))
|
||
end,
|
||
basket = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(一个空篮子。)",
|
||
"<p:none>(你肯定把你最好的朋友\n落在楼上了。)"
|
||
}) or
|
||
(accessor.item_goatplush and ({ "<p:player><f:side>(Somehow, I'm tempted to put the plushie in this basket...)", accessor.floof and "<p:player><f:sweat4>(... of course, I'd still rather keep it on my head.)" or "<p:player><f:sweat4>(... of course, I'd still rather keep it with me.)" }) or ({
|
||
"<p:player>(这里是不是少了些什么。)"
|
||
}))
|
||
end,
|
||
flipbasket = {
|
||
"<p:player><f:sodesuka>(篮子变成了临时脚凳。)"
|
||
},
|
||
telecomm = {
|
||
"<p:none>(便携通讯器。收到一条新消息。)",
|
||
"<p:none>(等清醒些了再看吧。)"
|
||
},
|
||
diningchair1 = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(你的餐椅。)"
|
||
}) or (accessor.plot < 2 and ({
|
||
"<p:player>(不过是张普通的餐椅。)"
|
||
}) or ({
|
||
"<p:player><f:sigh>(无论发生什么,\n它始终是张餐椅。)"
|
||
}))
|
||
end,
|
||
diningchair2 = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(餐椅。这个屋子里就只有\n这里能摆它了。)"
|
||
}) or (accessor.plot < 2 and ({
|
||
"<p:player><f:sigh>(...这张餐椅有股\n说不出的古怪。)"
|
||
}) or ({
|
||
"<p:player>(这东西根本\n不该出现在这里。)"
|
||
}))
|
||
end,
|
||
sink = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(漏水的水龙头。\n得尽快修好才行。)"
|
||
}) or (accessor.plot < 2 and ({
|
||
"<p:player><f:sweat5>(要是这是在我家里,\n我当场就修好了。)"
|
||
}) or ({
|
||
"<p:player><f:sweat3>(水不流了...)"
|
||
}))
|
||
end,
|
||
jars = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(装着高级料理香料的罐子,\n塞得满满当当。)"
|
||
}) or (accessor.plot < 2 and ({
|
||
"<p:player><f:sweat>(陌生人的香料罐千万别乱开,\n这可是血淋淋的教训。)"
|
||
}) or ({
|
||
"<p:player>(香料罐。)"
|
||
}))
|
||
end,
|
||
plate = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(此生仅需这一只餐盘足矣。)"
|
||
}) or (accessor.plot < 2 and ({
|
||
"<p:player>(餐盘。应该是一整套里的\n某一只。)"
|
||
}) or ({
|
||
"<p:player>(餐盘。)"
|
||
}))
|
||
end,
|
||
silverware = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(厨具三件套。\n现在还没必要换。)"
|
||
}) or (accessor.plot < 2 and ({
|
||
"<p:player><f:sodesuka>(这些厨具有股复古风...)"
|
||
}) or ({
|
||
"<p:player>(基础款厨具。)"
|
||
}))
|
||
end,
|
||
behindfridge = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(碗碟塔。\n你从没用过它们。)"
|
||
}) or (accessor.plot < 2 and ({
|
||
"<p:player>(刚沥干水的餐具堆。)"
|
||
}) or ({
|
||
"<p:player>(洁净如新的碗碟。)"
|
||
}))
|
||
end,
|
||
fridge = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(冰箱。要不是这个点了\n你高低找些吃的。)"
|
||
}) or ({
|
||
"<p:player><f:sweat4>(擅自吃绑匪家的食物\n应该...没问题吧?)"
|
||
})
|
||
end,
|
||
stove = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(镭射微波双模烹饪台,\n光洁得能照出人影。)"
|
||
}) or (accessor.plot < 2 and ({
|
||
"<p:player><f:side>(这台激光灶九成新...)",
|
||
"<p:player><f:sodesuka>(看来厨房引爆专家\n不止我一个呢。)"
|
||
}) or ({
|
||
"<p:player><f:sodesuka>(分子料理级灶台。)"
|
||
}))
|
||
end,
|
||
bowl_extra = function()
|
||
return accessor.event_home_food and ({
|
||
"<p:player><f:sigh>(只是空碗而已。)"
|
||
}) or ({})
|
||
end,
|
||
rope = {
|
||
"<p:none>(一截老麻绳,\n用了好些年了。)"
|
||
},
|
||
scissors = {
|
||
"<p:none>(剪绳专用银剪刀。)"
|
||
},
|
||
pantry = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(食品柜。囤了这么多粮食,\n世界末日来了\n你也能镇定自若。)"
|
||
}) or (accessor.plot < 2 and ({
|
||
"<p:player>(Pantry food. My worst nightmare.)"
|
||
}) or ({
|
||
"<p:player>(真空包装的永恒保质期。)"
|
||
}))
|
||
end,
|
||
board = function()
|
||
return accessor.plot < 1 and ({
|
||
"<p:none>(你想着,这块板放这儿挺好。)"
|
||
}) or ({
|
||
"<p:player>(A large piece of wood.)",
|
||
unpack(accessor.plot < 2 and ({
|
||
"<p:player><f:side>(像是能从餐桌边缘\n咔嗒一声伸出来的\n活动板...)"
|
||
}) or ({}))
|
||
})
|
||
end,
|
||
secret = function()
|
||
local ____temp_3
|
||
if accessor.plot < 1 then
|
||
____temp_3 = {
|
||
"<p:none>(钉满重要便签的软木板。)"
|
||
}
|
||
else
|
||
local ____array_2 = __TS__SparseArrayNew(unpack(not accessor.event_home_secret and ({
|
||
"<p:player><f:side>(板子上订着一系列便签...)"
|
||
}) or ({})))
|
||
__TS__SparseArrayPush(
|
||
____array_2,
|
||
"<p:player>(\"Plant boka tree tomorrow\")",
|
||
"<p:player>(\"Download new entertainment center programs\")",
|
||
"<p:player>(\"Fix broken lockbox\")",
|
||
unpack(not accessor.event_home_secret and
|
||
({ "<p:player><f:confused>(Wait. A lockbox?)", accessor.event_home_bookshelf == 0.1 and "<p:player><f:side>(I swear there was a box like that in the living room somewhere...)" or "<p:player><f:confused>(Was there a lockbox around here somewhere?)" }) or
|
||
(accessor.event_home_bookshelf < 1 and ({
|
||
"<p:player><f:sigh>(... still haven't found the lockbox.)"
|
||
}) or (accessor.event_home_bookshelf < 2 and ({
|
||
"<p:player><f:sweat5>(... I've found the lockbox, but I can't reach it...)"
|
||
}) or ({
|
||
"<p:player><f:sodesuka>(... weird how a library card needed a locked box.)"
|
||
}))))
|
||
)
|
||
____temp_3 = { __TS__SparseArraySpread(____array_2) }
|
||
end
|
||
return ____temp_3
|
||
end
|
||
},
|
||
trivia_tooltip = {
|
||
window = "一扇窗",
|
||
bed = "一张床",
|
||
computer = "一台电脑",
|
||
chair = "一把椅子",
|
||
dresser1 = "一个衣物收纳柜",
|
||
dresser2 = "一个衣物收纳柜",
|
||
book = "一本书",
|
||
cutetunnel = "一幅画",
|
||
toy = "一个玩具",
|
||
plant = "一株盆栽",
|
||
shovel = "一把铁锹",
|
||
broombox = "一只积满灰的盒子",
|
||
dresserdrawer1 = "一个衣物收纳柜",
|
||
dresserdrawer2 = "一个衣物收纳柜",
|
||
dresserpaper = "一封信",
|
||
mattress = "一张床垫",
|
||
bin = "一个箱子",
|
||
bedframe = "一张床架",
|
||
fusebox = "一个配电箱",
|
||
lightswitch = "一个电灯开关",
|
||
lamp = "一盏灯",
|
||
telescope = "一个望远镜收纳袋",
|
||
bookshelf = "一个书架",
|
||
couch = "一张沙发",
|
||
entertainment = "一个娱乐中心",
|
||
SIPPY = "几只杯子",
|
||
basket = "一个篮筐",
|
||
flipbasket = "Flipped Basket",
|
||
telecomm = "一台无线电",
|
||
diningchair1 = "一把餐椅",
|
||
diningchair2 = "一把餐椅",
|
||
sink = "一个洗碗槽",
|
||
jars = "几只罐子",
|
||
plate = "一个餐盘",
|
||
silverware = "几把银餐具",
|
||
behindfridge = "几个餐盘和几只碗",
|
||
fridge = "一台冰箱",
|
||
stove = "一台激光灶",
|
||
bowl_extra = "一只碗",
|
||
rope = "一截麻绳",
|
||
scissors = "一把剪刀",
|
||
pantry = "一个食品柜",
|
||
board = "Leaflet",
|
||
secret = "Tackboard"
|
||
}
|
||
}
|
||
end
|
||
function ____exports.default()
|
||
local state
|
||
local ____areaGen_result_4 = areaGen()
|
||
local activators = ____areaGen_result_4.activators
|
||
local hide = ____areaGen_result_4.hide
|
||
local hintGen = ____areaGen_result_4.hintGen
|
||
local map = ____areaGen_result_4.map
|
||
local overworld = ____areaGen_result_4.overworld
|
||
local resources = ____areaGen_result_4.resources
|
||
local reveal = ____areaGen_result_4.reveal
|
||
local pstop = ____areaGen_result_4.pstop
|
||
local shaderSetup = ____areaGen_result_4.shaderSetup
|
||
local stepSFX = ____areaGen_result_4.stepSFX
|
||
local temp = ____areaGen_result_4.temp
|
||
local tooltip = ____areaGen_result_4.tooltip
|
||
local unfailer = ____areaGen_result_4.unfailer
|
||
local ____overworld_5 = overworld
|
||
local assets = ____overworld_5.assets
|
||
local atlas = ____overworld_5.atlas.atlas
|
||
local save = ____overworld_5.atlas.save
|
||
local save_hooks = ____overworld_5.atlas.save_hooks
|
||
local batch = ____overworld_5.batch
|
||
local game = ____overworld_5.game
|
||
local inputs = ____overworld_5.inputs
|
||
local items = ____overworld_5.inventory.items
|
||
local update = ____overworld_5.inventory.update
|
||
local player = ____overworld_5.player.player
|
||
local player_move = ____overworld_5.player.player_move
|
||
local player_walk = ____overworld_5.player.player_walk
|
||
local reader = ____overworld_5.reader.reader
|
||
local object = ____overworld_5.screen.object
|
||
local objects = ____overworld_5.screen.objects
|
||
local screen = ____overworld_5.screen.screen
|
||
local ____resources_6 = resources
|
||
local daemons = ____resources_6.daemons
|
||
local framess = ____resources_6.framess
|
||
local images = ____resources_6.images
|
||
local pager = __TS__New(
|
||
STPager,
|
||
random,
|
||
ST:decode(accessor.pager_home)
|
||
)
|
||
local text = textGen(pager)
|
||
local function hintDialogue()
|
||
return __TS__New(
|
||
__TS__Promise,
|
||
function(____, resolve)
|
||
ST:when(function()
|
||
if atlas.target == "reader" and reader.next_task ~= nil then
|
||
local hint2 = hintGen(text.overworld.tutorial3, 2, 60)
|
||
local ____self_7 = reader.next_task
|
||
____self_7["then"](
|
||
____self_7,
|
||
function()
|
||
hint2()
|
||
resolve(nil)
|
||
end
|
||
)
|
||
return true
|
||
end
|
||
return false
|
||
end)
|
||
end
|
||
)
|
||
end
|
||
local function hintInter()
|
||
return __TS__New(
|
||
__TS__Promise,
|
||
function(____, resolve)
|
||
local hint1 = hintGen(text.overworld.tutorial2, 1, 360)
|
||
ST:when(function()
|
||
if atlas.target == "reader" and not state.blocker then
|
||
hint1()
|
||
resolve(nil)
|
||
return true
|
||
end
|
||
return false
|
||
end)
|
||
end
|
||
)
|
||
end
|
||
local function trans2(r, x, y)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
game.cutscene = game.cutscene + 1
|
||
local fader = __TS__New(STRectangle, {
|
||
alpha = 0,
|
||
color = 0,
|
||
size = { x = 240, y = 180 },
|
||
anchor = 0.5,
|
||
priority = 1000
|
||
})
|
||
screen:attach(fader)
|
||
for ____, inst in ipairs(assets["s$faucet"].instances) do
|
||
state.faucet_time = inst.position.value
|
||
local ____self_8 = inst.gain:automate(7, 0)
|
||
____self_8["then"](
|
||
____self_8,
|
||
function()
|
||
inst:stop()
|
||
end
|
||
)
|
||
end
|
||
for ____, inst in ipairs(assets["s$faucet_distant"].instances) do
|
||
state.faucet_time = inst.position.value
|
||
local ____self_9 = inst.gain:automate(7, 0)
|
||
____self_9["then"](
|
||
____self_9,
|
||
function()
|
||
inst:stop()
|
||
end
|
||
)
|
||
end
|
||
__TS__Await(fader.alpha:automate(7, 1))
|
||
player.position.x = __TS__Number(x)
|
||
player.position.y = __TS__Number(y)
|
||
game.cutscene = game.cutscene - 1
|
||
local ____opt_10 = map.task
|
||
if ____opt_10 ~= nil then
|
||
____opt_10.complete(r)
|
||
end
|
||
local ____self_12 = fader.alpha:automate(7, 0)
|
||
____self_12["then"](
|
||
____self_12,
|
||
function()
|
||
screen:detach(fader)
|
||
end
|
||
)
|
||
end)
|
||
end
|
||
local function trans3(r, x, y, tag)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
pstop()
|
||
local door = object(tag).self
|
||
if door.frame == 0 then
|
||
door.frame = 1
|
||
assets["s$door_open"]:instance()
|
||
end
|
||
door.metadata.lock = true
|
||
__TS__Await(trans2(r, x, y))
|
||
__TS__Await(ST:pause(4))
|
||
local meta = object("doorcontrol").self.metadata
|
||
if meta.lock then
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
meta.lock = true
|
||
assets["s$door_close"]:instance()
|
||
end)
|
||
end
|
||
local function trivia(key)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
local entry = text.trivia[key]
|
||
__TS__Await(reader:text(type(entry) == "function" and entry() or entry))
|
||
end)
|
||
end
|
||
state = { blocker = false, faucet_time = 0, mapcolor = { hue = 0, saturation = 1, value = 1 } }
|
||
local scripts = {
|
||
trans = function(test, args)
|
||
local ____opt_13 = map.task
|
||
if ____opt_13 ~= nil then
|
||
____opt_13.complete(__TS__Number(args[1]))
|
||
end
|
||
end,
|
||
trans2 = function(test, args)
|
||
trans2(
|
||
__TS__Number(args[1]),
|
||
__TS__Number(args[2]),
|
||
__TS__Number(args[3])
|
||
)
|
||
end,
|
||
trans3 = function(test, args)
|
||
trans3(
|
||
__TS__Number(args[1]),
|
||
__TS__Number(args[2]),
|
||
__TS__Number(args[3]),
|
||
args[4]
|
||
)
|
||
end,
|
||
trans4 = function(test, args)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
local meta = object("doorcontrol").self.metadata
|
||
if meta.lock then
|
||
assets["s$door_open"]:instance()
|
||
else
|
||
meta.lock = true
|
||
end
|
||
__TS__Await(trans2(
|
||
__TS__Number(args[1]),
|
||
__TS__Number(args[2]),
|
||
__TS__Number(args[3])
|
||
))
|
||
local door = object(args[4]).self
|
||
door.frame = 1
|
||
local ____self_15 = ST:pause(4)
|
||
__TS__Await(____self_15["then"](
|
||
____self_15,
|
||
function()
|
||
if door.metadata.lock then
|
||
return
|
||
end
|
||
door.frame = 0
|
||
assets["s$door_close"]:instance()
|
||
end
|
||
))
|
||
end)
|
||
end,
|
||
trivia = function(test, args)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if not (text.trivia[args[1]] ~= nil) then
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
local facings = __TS__ArraySlice(args, 1)
|
||
if #facings == 0 or __TS__ArrayIncludes(facings, player.stance) then
|
||
if test then
|
||
if text.trivia_tooltip[args[1]] ~= nil then
|
||
tooltip(text.trivia_tooltip[args[1]])
|
||
end
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
__TS__Await(trivia(args[1]))
|
||
end
|
||
end)
|
||
end,
|
||
stairs = function(test, args)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if player.position.x < __TS__Number(args[1]) or player.position.x > __TS__Number(args[2]) then
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if game.c_left or game.c_right then
|
||
if accessor.plot < 0.4 then
|
||
pstop()
|
||
state.blocker = true
|
||
__TS__Await(reader:text(text.overworld.blocker2))
|
||
state.blocker = false
|
||
return ____awaiter_resolve(nil)
|
||
elseif accessor.plot < 1 then
|
||
game.cutscene = game.cutscene + 1
|
||
pstop()
|
||
state.blocker = true
|
||
__TS__Await(reader:text(text.overworld.blocker3))
|
||
state.blocker = false
|
||
__TS__Await(reader:choice(text.overworld.blocker4))
|
||
if game.r_choice == 1 then
|
||
game.cutscene = game.cutscene - 1
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
accessor.plot = 1
|
||
local fd = __TS__New(STRectangle, {
|
||
alpha = 0,
|
||
priority = 1000,
|
||
color = 0,
|
||
size = { x = 240, y = 180 },
|
||
anchor = 0.5
|
||
})
|
||
screen:attach(fd)
|
||
local cinst = daemons.crickets.instances
|
||
local ____array_16 = __TS__SparseArrayNew(
|
||
fd.alpha:automate(90, 1),
|
||
unpack(__TS__ArrayMap(
|
||
cinst,
|
||
function(____, instance)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
__TS__Await(instance.gain:automate(90, 0))
|
||
end)
|
||
end
|
||
))
|
||
)
|
||
__TS__SparseArrayPush(
|
||
____array_16,
|
||
unpack(__TS__ArrayMap(
|
||
assets["s$faucet_distant"].instances,
|
||
function(____, instance)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
__TS__Await(instance.gain:automate(90, 0))
|
||
instance:stop()
|
||
end)
|
||
end
|
||
))
|
||
)
|
||
__TS__Await(__TS__PromiseAll({ __TS__SparseArraySpread(____array_16) }))
|
||
local up
|
||
up = function()
|
||
map:removeUpdater(up)
|
||
map.autoplay = false
|
||
end
|
||
map:addUpdater(up)
|
||
local ____opt_17 = map.task
|
||
if ____opt_17 ~= nil then
|
||
____opt_17.complete(0)
|
||
end
|
||
player.alpha.value = 0
|
||
state.mapcolor.saturation = 1
|
||
state.mapcolor.value = 1
|
||
player.stance = "down"
|
||
update()
|
||
__TS__Await(ST:pause(30))
|
||
assets["s$awaken"]:instance()
|
||
local fd2 = __TS__New(STRectangle, {
|
||
alpha = 0,
|
||
color = 12500670,
|
||
priority = 1001,
|
||
size = { x = 240, y = 180 },
|
||
anchor = 0.5
|
||
})
|
||
screen:attach(fd2)
|
||
__TS__Await(fd2.alpha:automate(150, 1))
|
||
screen:detach(fd)
|
||
for ____, obj in __TS__Iterator(objects("night")) do
|
||
obj:destroy()
|
||
end
|
||
local spr = __TS__New(STAnimation, {
|
||
position = { x = 28, y = 109 },
|
||
anchor = { x = 0.5, y = 1 },
|
||
frames = assets["ic$player$sleep"],
|
||
priority = 103,
|
||
color = 10652124
|
||
})
|
||
map:attach(spr)
|
||
local cover = object("cover").self
|
||
cover.frame = 1
|
||
map:play(map.rooms[1].score)
|
||
map.music.gain.value = 0
|
||
map.music.gain:automate(7, 1)
|
||
__TS__Await(fd2.alpha:automate(150, 0))
|
||
screen:detach(fd2)
|
||
__TS__Await(ST:pause(60))
|
||
spr.frame = 1
|
||
__TS__Await(ST:pause(45))
|
||
__TS__Await(reader:text(text.overworld.hello1))
|
||
__TS__Await(ST:pause(30))
|
||
assets["s$blankets"]:instance()
|
||
__TS__Await(ST:pause(1))
|
||
map:detach(spr)
|
||
player.alpha.value = 1
|
||
player.position.x = 30
|
||
player.position.y = 130
|
||
cover.frame = 0
|
||
__TS__Await(player_walk(0.5, { y = 140 }))
|
||
__TS__Await(ST:pause(45))
|
||
__TS__Await(reader:text(text.overworld.hello2))
|
||
game.cutscene = game.cutscene - 1
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
local lx = player.metadata.last_x
|
||
local ly = player.metadata.last_y
|
||
player_move(-lx, -ly)
|
||
local hitboxes = { __TS__Spread(screen:scan(function(container)
|
||
return __TS__InstanceOf(container,
|
||
STHitbox) and type(container.metadata) == "table" and container.metadata.scan == true
|
||
end)) }
|
||
player_move(
|
||
lx,
|
||
ly + lx,
|
||
false,
|
||
false,
|
||
__TS__ArrayFilter(
|
||
hitboxes,
|
||
function(____, hitbox)
|
||
if hitbox.metadata.obstacle == true and hitbox.metadata.walkable ~= true then
|
||
hitbox:calculate()
|
||
return true
|
||
end
|
||
return false
|
||
end
|
||
),
|
||
__TS__ArrayFilter(
|
||
hitboxes,
|
||
function(____, hitbox)
|
||
if hitbox.metadata.obstacle == true and hitbox.metadata.walkable == true then
|
||
hitbox:calculate()
|
||
return true
|
||
end
|
||
return false
|
||
end
|
||
)
|
||
)
|
||
end
|
||
end)
|
||
end,
|
||
drilltable = function(test)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if not accessor.item_drill then
|
||
if test then
|
||
tooltip(text.overworld.drill_tooltip)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
accessor.item_drill = true
|
||
update()
|
||
local ____reader_headers_21 = reader.headers
|
||
____reader_headers_21[#____reader_headers_21 + 1] = {
|
||
"a",
|
||
function()
|
||
assets["s$itemget"]:instance()
|
||
local ____opt_19 = object("driller")
|
||
if ____opt_19 ~= nil then
|
||
____opt_19:destroy()
|
||
end
|
||
end
|
||
}
|
||
__TS__Await(reader:text(text.overworld.drill))
|
||
end
|
||
end)
|
||
end,
|
||
shovelpot = function(test)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if test then
|
||
tooltip(text.trivia_tooltip.shovel)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if accessor.event_home_outside and not accessor.item_bucket then
|
||
accessor.item_bucket = true
|
||
update()
|
||
game.cutscene = game.cutscene + 1
|
||
__TS__Await(reader:text(text.overworld.bucket1()))
|
||
__TS__Await(ST:pause(30))
|
||
__TS__Await(reader:text(text.overworld.bucket2()))
|
||
__TS__Await(ST:pause(20))
|
||
local anim = object("harry").self
|
||
anim.frame = 1
|
||
assets["s$shovelshing"]:instance()
|
||
__TS__Await(ST:pause(40))
|
||
anim.frame = 2
|
||
assets["s$shovelchnf"]:instance()
|
||
__TS__Await(ST:pause(60))
|
||
local ____reader_headers_24 = reader.headers
|
||
____reader_headers_24[#____reader_headers_24 + 1] = {
|
||
"a",
|
||
function()
|
||
assets["s$itemget"]:instance()
|
||
anim.frame = 3
|
||
local ____opt_22 = object("bucketbox1")
|
||
if ____opt_22 ~= nil then
|
||
____opt_22:destroy()
|
||
end
|
||
local bb2 = object("bucketbox2").self
|
||
bb2.position.y = bb2.metadata.y
|
||
end
|
||
}
|
||
__TS__Await(reader:text(text.overworld.bucket3()))
|
||
game.cutscene = game.cutscene - 1
|
||
else
|
||
trivia("shovel")
|
||
end
|
||
end)
|
||
end,
|
||
broombox = function(test)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if test then
|
||
tooltip(text.trivia_tooltip.broombox)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if accessor.event_home_outside and not accessor.item_rock then
|
||
game.cutscene = game.cutscene + 1
|
||
accessor.item_rock = true
|
||
update()
|
||
local anim = object("SWEEPSWEEPSWEEP").self
|
||
local ____reader_headers_25 = reader.headers
|
||
____reader_headers_25[#____reader_headers_25 + 1] = {
|
||
"a",
|
||
function()
|
||
assets["s$itemget"]:instance()
|
||
anim.frame = 1
|
||
end
|
||
}
|
||
local ____reader_headers_26 = reader.headers
|
||
____reader_headers_26[#____reader_headers_26 + 1] = {
|
||
"b",
|
||
function()
|
||
assets["s$itemget"]:instance()
|
||
anim.frame = 2
|
||
end
|
||
}
|
||
local ____reader_headers_27 = reader.headers
|
||
____reader_headers_27[#____reader_headers_27 + 1] = {
|
||
"c",
|
||
function()
|
||
assets["s$itemget"]:instance()
|
||
anim.frame = 3
|
||
end
|
||
}
|
||
__TS__Await(reader:text(text.overworld.broombox1))
|
||
__TS__Await(ST:pause(45))
|
||
__TS__Await(reader:text(text.overworld.broombox2))
|
||
game.cutscene = game.cutscene - 1
|
||
else
|
||
trivia("broombox")
|
||
end
|
||
end)
|
||
end,
|
||
bedframe = function(test)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if test then
|
||
tooltip(text.trivia_tooltip.bedframe)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if 2 <= accessor.plot and not accessor.item_crowbar then
|
||
game.cutscene = game.cutscene + 1
|
||
local can = accessor.item_drill
|
||
if can then
|
||
accessor.item_crowbar = true
|
||
update()
|
||
end
|
||
__TS__Await(reader:text(text.overworld.framer1()))
|
||
if not can then
|
||
game.cutscene = game.cutscene - 1
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
__TS__Await(ST:pause(25))
|
||
if player.position.x > 30 then
|
||
__TS__Await(player_walk(1.5, { x = 30 }))
|
||
end
|
||
if player.position.y < 95 then
|
||
__TS__Await(player_walk(1.5, { y = 80 }))
|
||
else
|
||
__TS__Await(player_walk(1.5, { y = 115 }))
|
||
end
|
||
if player.position.x < 30 then
|
||
__TS__Await(player_walk(1.5, { x = 30 }))
|
||
else
|
||
player.stance = "right"
|
||
end
|
||
__TS__Await(ST:pause(30))
|
||
bb_standard(player, assets["ie$surprise"])
|
||
assets["s$driller"]:instance()
|
||
__TS__Await(ST:pause(45))
|
||
if player.position.y < 95 then
|
||
__TS__Await(player_walk(1.5, { y = 115 }))
|
||
else
|
||
__TS__Await(player_walk(1.5, { y = 80 }))
|
||
end
|
||
player.stance = "right"
|
||
__TS__Await(ST:pause(20))
|
||
bb_standard(player, assets["ie$surprise"])
|
||
assets["s$driller"]:instance()
|
||
__TS__Await(ST:pause(35))
|
||
__TS__Await(player_walk(1.5, { y = 95 }))
|
||
player.stance = "right"
|
||
__TS__Await(ST:pause(25))
|
||
assets["s$itemget"]:instance()
|
||
local ____opt_28 = object("framebox")
|
||
if ____opt_28 ~= nil then
|
||
____opt_28:destroy()
|
||
end
|
||
object("rogerrabbit").self.frame = 1
|
||
__TS__Await(reader:text(text.overworld.framer2()))
|
||
if accessor.item_cover and accessor.item_scissors then
|
||
__TS__Await(ST:pause(30))
|
||
__TS__Await(reader:text(text.overworld.framer3))
|
||
__TS__Await(ST:pause(15))
|
||
__TS__Await(bb_standard(player, assets["ie$note"]))
|
||
__TS__Await(ST:pause(15))
|
||
__TS__Await(reader:text(text.overworld.done2))
|
||
accessor.plot = 3
|
||
end
|
||
game.cutscene = game.cutscene - 1
|
||
else
|
||
trivia("bedframe")
|
||
end
|
||
end)
|
||
end,
|
||
goatplush = function(test)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if accessor.item_goatplush then
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if test then
|
||
tooltip(text.overworld.goatplush0)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
__TS__Await(reader:text(text.overworld.goatplush1("overworld/goatplush1")))
|
||
__TS__Await(reader:choice(text.overworld.goatplush2))
|
||
if game.r_choice == 1 then
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
accessor.item_goatplush = true
|
||
update()
|
||
local ____reader_headers_34 = reader.headers
|
||
____reader_headers_34[#____reader_headers_34 + 1] = {
|
||
"a",
|
||
function()
|
||
assets["s$itemget"]:instance()
|
||
local ____opt_30 = object("goatplush")
|
||
if ____opt_30 ~= nil then
|
||
____opt_30:destroy()
|
||
end
|
||
local ____opt_32 = object("goatplush")
|
||
if ____opt_32 ~= nil then
|
||
____opt_32:destroy()
|
||
end
|
||
end
|
||
}
|
||
__TS__Await(reader:text(text.overworld.goatplush3))
|
||
end)
|
||
end,
|
||
basket = function(test)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if test then
|
||
tooltip(text.trivia_tooltip.basket)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if not accessor.event_home_secret then
|
||
trivia("basket")
|
||
else
|
||
game.cutscene = game.cutscene + 1
|
||
local early = accessor.event_home_bookshelf < 1
|
||
accessor.event_home_bookshelf = 2
|
||
update()
|
||
if early then
|
||
local ____reader_headers_35 = reader.headers
|
||
____reader_headers_35[#____reader_headers_35 + 1] = {
|
||
"a",
|
||
function()
|
||
player.stance = "left"
|
||
end
|
||
}
|
||
end
|
||
__TS__Await(reader:text(early and text.overworld.basket1a or text.overworld.basket1b))
|
||
__TS__Await(ST:pause(45))
|
||
if player.position.x < 125 then
|
||
player.stance = "right"
|
||
else
|
||
player.stance = "up"
|
||
end
|
||
__TS__Await(ST:pause(25))
|
||
local ____opt_36 = object("basket")
|
||
if ____opt_36 ~= nil then
|
||
____opt_36:destroy()
|
||
end
|
||
local ____opt_38 = object("basket")
|
||
if ____opt_38 ~= nil then
|
||
____opt_38:destroy()
|
||
end
|
||
assets["s$basketpickup"]:instance()
|
||
__TS__Await(ST:pause(30))
|
||
if math.abs(player.position.y - 85) > 6 then
|
||
__TS__Await(player_walk(1.5, { y = 85 }))
|
||
end
|
||
__TS__Await(player_walk(1.5, { x = 105 }))
|
||
__TS__Await(ST:pause(15))
|
||
reveal("flipbasket")
|
||
assets["s$basketputdown"]:instance()
|
||
__TS__Await(ST:pause(45))
|
||
local y = player.position.y
|
||
__TS__Await(player.position:step(1, { x = 88, y = 72 }))
|
||
__TS__Await(ST:pause(10))
|
||
player.stance = "up"
|
||
__TS__Await(ST:pause(20))
|
||
object("screwbox").self.frame = 1
|
||
assets["s$itemget"]:instance()
|
||
__TS__Await(reader:text(text.overworld.basket2))
|
||
__TS__Await(ST:pause(20))
|
||
player.stance = "right"
|
||
__TS__Await(ST:pause(30))
|
||
__TS__Await(player.position:step(1, { x = 105, y = y }))
|
||
__TS__Await(ST:pause(45))
|
||
player.stance = "down"
|
||
__TS__Await(reader:text(text.overworld.basket3))
|
||
game.cutscene = game.cutscene - 1
|
||
end
|
||
end)
|
||
end,
|
||
fridge = function(test)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if player.stance ~= "left" then
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if test then
|
||
tooltip(text.trivia_tooltip.fridge)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if not accessor.event_home_food and 1 <= accessor.plot then
|
||
game.cutscene = game.cutscene + 1
|
||
__TS__Await(reader:text(text.overworld.fridge1("overworld/fridge1")))
|
||
__TS__Await(reader:choice(text.overworld.fridge2))
|
||
if game.r_choice ~= 3 then
|
||
accessor.event_home_food = true
|
||
accessor.choice_home_food = game.r_choice
|
||
end
|
||
__TS__Await(reader:text(text.overworld.fridge3[game.r_choice + 1]))
|
||
if game.r_choice == 3 then
|
||
game.cutscene = game.cutscene - 1
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
__TS__Await(player_walk(1.5, { y = 125 }, { x = 45 }))
|
||
player.stance = "left"
|
||
local dory = object("cold").self
|
||
assets["s$fridge_open"]:instance()
|
||
local ____self_40 = ST:pause(2)
|
||
____self_40["then"](
|
||
____self_40,
|
||
function()
|
||
dory.frame = 1
|
||
end
|
||
)
|
||
__TS__Await(ST:pause(45))
|
||
__TS__Await(player_walk(1.5, { y = 77 }, { x = 39 }))
|
||
__TS__Await(ST:pause(15))
|
||
local counter = object("counter")
|
||
counter.self.frame = 1
|
||
assets["s$bowlgrab"]:instance()
|
||
__TS__Await(ST:pause(15))
|
||
__TS__Await(player_walk(1.5, { y = 91 }, { x = 36 }))
|
||
__TS__Await(ST:pause(15))
|
||
assets["s$spoongrab"]:instance()
|
||
local ____self_41 = ST:pause(3)
|
||
____self_41["then"](
|
||
____self_41,
|
||
function()
|
||
counter:destroy()
|
||
end
|
||
)
|
||
__TS__Await(ST:pause(45))
|
||
__TS__Await(player_walk(1.5, { x = 45 }, { y = 125 }))
|
||
player.stance = "left"
|
||
__TS__Await(ST:pause(30))
|
||
assets["s$fridge_close"]:instance()
|
||
local ____self_42 = ST:pause(3)
|
||
____self_42["then"](
|
||
____self_42,
|
||
function()
|
||
dory.frame = 0
|
||
end
|
||
)
|
||
__TS__Await(ST:pause(30))
|
||
player_walk(1.5, { y = 175 }, { x = 114 })
|
||
__TS__Await(ST:pause(45))
|
||
local fd = __TS__New(STRectangle, {
|
||
alpha = 0,
|
||
color = 0,
|
||
size = { x = 240, y = 180 },
|
||
anchor = 0.5,
|
||
priority = 1000
|
||
})
|
||
screen:attach(fd)
|
||
__TS__Await(__TS__PromiseAll({
|
||
fd.alpha:automate(30, 1),
|
||
__TS__ArrayMap(
|
||
daemons.thunder.instances,
|
||
function(____, inst) return inst.gain:automate(30, 0) end
|
||
)
|
||
}))
|
||
player_walk()
|
||
__TS__Await(ST:pause(90))
|
||
player.alpha.value = 0
|
||
local spr = __TS__New(STSprite, {
|
||
position = { x = 115, y = 162 },
|
||
anchor = { x = 0.5, y = 1 },
|
||
image = accessor.floof and assets["ic$player$right_sit_plush"] or assets["ic$player$right_sit"],
|
||
priority = 180,
|
||
color = 10652124
|
||
})
|
||
map:attach(spr)
|
||
object("bowl").self.alpha.value = 1
|
||
__TS__Await(__TS__PromiseAll({
|
||
fd.alpha:automate(30, 0),
|
||
__TS__ArrayMap(
|
||
daemons.crickets.instances,
|
||
function(____, inst) return inst.gain:automate(30, 1) end
|
||
)
|
||
}))
|
||
screen:detach(fd)
|
||
__TS__Await(ST:pause(60))
|
||
__TS__Await(reader:text(text.overworld.fridge4[game.r_choice + 1]))
|
||
__TS__Await(ST:pause(15))
|
||
map:detach(spr)
|
||
player.alpha.value = 1
|
||
__TS__Await(player_walk(1.5, { y = 185 }, { x = 90 }))
|
||
__TS__Await(bb_standard(player, assets["ie$ellipsis"]))
|
||
__TS__Await(ST:pause(45))
|
||
__TS__Await(reader:text(text.overworld.fridge5()))
|
||
game.cutscene = game.cutscene - 1
|
||
else
|
||
trivia("fridge")
|
||
end
|
||
end)
|
||
end,
|
||
bookshelf = function(test)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if player.stance ~= "up" then
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if test then
|
||
tooltip(text.trivia_tooltip.bookshelf)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if accessor.plot < 0.4 then
|
||
game.cutscene = game.cutscene + 1
|
||
__TS__Await(reader:text(text.overworld.bookshelf1))
|
||
local ____accessor_tutorial_choice_43
|
||
if accessor.tutorial_choice then
|
||
____accessor_tutorial_choice_43 = nil
|
||
else
|
||
____accessor_tutorial_choice_43 = hintGen(text.overworld.tutorial4, 3, 240, 0)
|
||
end
|
||
local hint1 = ____accessor_tutorial_choice_43
|
||
__TS__Await(reader:choice(text.overworld.bookshelf2))
|
||
if hint1 ~= nil then
|
||
hint1()
|
||
end
|
||
if game.r_choice ~= 3 then
|
||
accessor.plot = 0.4
|
||
accessor.choice_home_book = game.r_choice
|
||
update()
|
||
if math.abs(player.position.x - 113) > 6 then
|
||
__TS__Await(player_walk(1.5, { x = 113 }))
|
||
player.stance = "up"
|
||
end
|
||
local ____reader_headers_48 = reader.headers
|
||
____reader_headers_48[#____reader_headers_48 + 1] = {
|
||
"a",
|
||
function()
|
||
assets["s$itemget"]:instance()
|
||
local ____opt_46 = object("extrabook")
|
||
if ____opt_46 ~= nil then
|
||
____opt_46:destroy()
|
||
end
|
||
end
|
||
}
|
||
end
|
||
if game.r_choice == 3 then
|
||
__TS__Await(reader:text(text.overworld.bookshelf4))
|
||
accessor.tutorial_choice = true
|
||
game.cutscene = game.cutscene - 1
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
__TS__Await(reader:text(text.overworld.bookshelf3))
|
||
local hint2 = hintGen(text.overworld.tutorial5, 0, 15)
|
||
local downListener1
|
||
downListener1 = function()
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
inputs.tertiary:removeDown(downListener1)
|
||
hint2()
|
||
atlas:switch("menu")
|
||
game.cutscene = game.cutscene - 1
|
||
end)
|
||
end
|
||
inputs.tertiary:addDown(downListener1)
|
||
else
|
||
trivia("bookshelf")
|
||
if not accessor.event_home_secret then
|
||
accessor.event_home_bookshelf = 0.1
|
||
elseif accessor.event_home_bookshelf < 1 then
|
||
accessor.event_home_bookshelf = 1
|
||
end
|
||
end
|
||
end)
|
||
end,
|
||
scissors = function(test)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if accessor.plot < 1 then
|
||
if test then
|
||
tooltip(text.trivia_tooltip.scissors)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
trivia("scissors")
|
||
elseif not accessor.item_scissors then
|
||
if test then
|
||
tooltip(text.trivia_tooltip.scissors)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
game.cutscene = game.cutscene + 1
|
||
accessor.item_scissors = true
|
||
update()
|
||
local ____reader_headers_49 = reader.headers
|
||
____reader_headers_49[#____reader_headers_49 + 1] = {
|
||
"a",
|
||
function()
|
||
assets["s$itemget"]:instance()
|
||
object("hot").self.frame = accessor.item_rope and 3 or 1
|
||
end
|
||
}
|
||
__TS__Await(reader:text(text.overworld.scissors1()))
|
||
if accessor.item_cover then
|
||
player.stance = "up"
|
||
bb_standard(player, assets["ie$ellipsis"])
|
||
assets["s$scissors"]:instance()
|
||
__TS__Await(ST:pause(75))
|
||
local ____reader_51 = reader
|
||
local ____reader_text_52 = reader.text
|
||
local ____array_50 = __TS__SparseArrayNew(unpack(text.overworld.scissors2()))
|
||
__TS__SparseArrayPush(
|
||
____array_50,
|
||
unpack(accessor.item_crowbar and text.overworld.done1 or ({}))
|
||
)
|
||
__TS__Await(____reader_text_52(
|
||
____reader_51,
|
||
{ __TS__SparseArraySpread(____array_50) }
|
||
))
|
||
if accessor.item_crowbar then
|
||
__TS__Await(ST:pause(15))
|
||
__TS__Await(bb_standard(player, assets["ie$note"]))
|
||
__TS__Await(ST:pause(15))
|
||
__TS__Await(reader:text(text.overworld.done2))
|
||
accessor.plot = 3
|
||
end
|
||
end
|
||
game.cutscene = game.cutscene - 1
|
||
end
|
||
end)
|
||
end,
|
||
behindstove = function(test)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if test then
|
||
tooltip(text.trivia_tooltip.secret)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
__TS__Await(trivia("secret"))
|
||
if 1 <= accessor.plot and not accessor.event_home_secret then
|
||
accessor.event_home_secret = true
|
||
end
|
||
end)
|
||
end,
|
||
outside = function()
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if accessor.plot < 1 or accessor.plot == 3 then
|
||
pstop()
|
||
local door = object("door4").self
|
||
local ____door_metadata_53, ____inter_54 = door.metadata, "inter"
|
||
if ____door_metadata_53[____inter_54] == nil then
|
||
____door_metadata_53[____inter_54] = 0
|
||
end
|
||
local ____door_metadata_55, ____inter_56 = door.metadata, "inter"
|
||
local ____door_metadata_inter_57 = ____door_metadata_55[____inter_56] + 1
|
||
____door_metadata_55[____inter_56] = ____door_metadata_inter_57
|
||
local inter = ____door_metadata_inter_57
|
||
if door.frame == 0 then
|
||
door.frame = 1
|
||
assets["s$door_open"]:instance()
|
||
end
|
||
state.blocker = true
|
||
if accessor.plot < 1 then
|
||
__TS__Await(reader:text(text.overworld.blocker1))
|
||
else
|
||
__TS__Await(reader:text(text.overworld.blocker5))
|
||
__TS__Await(reader:choice(text.overworld.blocker6))
|
||
if game.r_choice == 0 then
|
||
state.blocker = false
|
||
game.cutscene = game.cutscene + 1
|
||
accessor.plot = 3.1
|
||
local fd = __TS__New(STRectangle, {
|
||
alpha = 0,
|
||
size = { x = 240, y = 180 },
|
||
anchor = 0.5,
|
||
color = 0,
|
||
priority = 1000
|
||
})
|
||
screen:attach(fd)
|
||
__TS__Await(fd.alpha:automate(15, 1))
|
||
__TS__Await(ST:pause(75))
|
||
player.position.x = 45
|
||
player.position.y = 110
|
||
player.stance = "down"
|
||
local ____opt_58 = map.task
|
||
if ____opt_58 ~= nil then
|
||
____opt_58.complete(7)
|
||
end
|
||
local roper = __TS__New(STSprite,
|
||
{ image = images.rope, position = { y = 103 }, priority = 125 })
|
||
map:attach(roper)
|
||
__TS__Await(fd.alpha:automate(15, 0))
|
||
screen:detach(fd)
|
||
__TS__Await(ST:pause(60))
|
||
local ____reader_headers_60 = reader.headers
|
||
____reader_headers_60[#____reader_headers_60 + 1] = {
|
||
"a",
|
||
function()
|
||
player.stance = "left"
|
||
return "left"
|
||
end
|
||
}
|
||
__TS__Await(reader:text(text.overworld.exit1))
|
||
__TS__Await(ST:pause(45))
|
||
__TS__Await(player_walk(1, { y = 135 }, { x = 51 }))
|
||
__TS__Await(ST:pause(30))
|
||
__TS__Await(bb_standard(player, assets["ie$ellipsis"]))
|
||
__TS__Await(ST:pause(15))
|
||
__TS__Await(reader:text(text.overworld.exit2))
|
||
__TS__Await(ST:pause(45))
|
||
__TS__Await(player_walk(0.5, { y = 145 }))
|
||
player.alpha.value = 0
|
||
local diff = player.position.y - 150
|
||
local climber = __TS__New(STAnimation, {
|
||
anchor = { x = 0.5, y = 1 },
|
||
priority = 500,
|
||
color = 10652124,
|
||
frames = accessor.floof and assets["ic$player$slippinjimmy_plush"] or
|
||
assets["ic$player$slippinjimmy"],
|
||
position = { x = 50.5, y = 150 }
|
||
}):addTicker(function(self)
|
||
player.position.y = self.position.y + diff
|
||
end)
|
||
map:attach(climber)
|
||
assets["s$step_carpet"]:instance({ rate = 1.5 })
|
||
local htext = __TS__New(STText,
|
||
{
|
||
anchor = 0.5,
|
||
font = assets["f$helloplayer"],
|
||
color = 8355711,
|
||
content = text
|
||
.overworld.tutorial8
|
||
})
|
||
local circler = __TS__New(STSprite,
|
||
{ alpha = 0, image = images.jusant_circle, anchor = 0.5, metadata = 0 }):addTicker(function(
|
||
self)
|
||
self.position.x = (self.position.x + self.metadata * 2) / 3
|
||
end)
|
||
local jusant = __TS__New(STSprite, {
|
||
alpha = 0,
|
||
anchor = 0.5,
|
||
image = images.jusant,
|
||
position = { y = 60 },
|
||
priority = 1000,
|
||
children = { htext, circler }
|
||
}):addDrawer(batch.drawer)
|
||
local side = -1
|
||
local grabbing = 0
|
||
local sticky = false
|
||
screen:attach(jusant)
|
||
jusant.alpha:automate(15, 0.75)
|
||
__TS__Await(__TS__New(
|
||
__TS__Promise,
|
||
function(____, resolve)
|
||
jusant:addTicker(function(self)
|
||
if side == 2 then
|
||
return
|
||
end
|
||
local step = 0
|
||
if side == -1 then
|
||
if inputs.left.held then
|
||
side = 0
|
||
circler.position.x = 80
|
||
elseif inputs.right.held then
|
||
side = 1
|
||
circler.position.x = -80
|
||
else
|
||
return
|
||
end
|
||
grabbing = 1
|
||
step = 1
|
||
circler.alpha:automate(7, 1)
|
||
local ____self_61 = htext.alpha:automate(7, 0)
|
||
____self_61["then"](
|
||
____self_61,
|
||
function()
|
||
jusant:detach(htext)
|
||
end
|
||
)
|
||
end
|
||
repeat
|
||
local ____switch210 = grabbing
|
||
local ____cond210 = ____switch210 == 0
|
||
if ____cond210 then
|
||
if side == 0 then
|
||
if inputs.left.held then
|
||
grabbing = 1
|
||
step = 1
|
||
if inputs.right.held then
|
||
sticky = true
|
||
end
|
||
end
|
||
elseif inputs.right.held then
|
||
grabbing = 1
|
||
step = 1
|
||
if inputs.left.held then
|
||
sticky = true
|
||
end
|
||
end
|
||
break
|
||
end
|
||
____cond210 = ____cond210 or ____switch210 == 1
|
||
if ____cond210 then
|
||
if side == 0 then
|
||
if not inputs.left.held then
|
||
grabbing = 0
|
||
step = -1
|
||
sticky = false
|
||
elseif inputs.right.held then
|
||
if not sticky then
|
||
grabbing = 2
|
||
step = 1
|
||
end
|
||
elseif sticky then
|
||
sticky = false
|
||
end
|
||
elseif not inputs.right.held then
|
||
grabbing = 0
|
||
step = -1
|
||
sticky = false
|
||
elseif inputs.left.held then
|
||
if not sticky then
|
||
grabbing = 2
|
||
step = 1
|
||
end
|
||
elseif sticky then
|
||
sticky = false
|
||
end
|
||
break
|
||
end
|
||
____cond210 = ____cond210 or ____switch210 == 2
|
||
if ____cond210 then
|
||
if side == 0 then
|
||
if not inputs.left.held then
|
||
side = 1
|
||
if inputs.right.held then
|
||
grabbing = 1
|
||
step = 1
|
||
else
|
||
grabbing = 0
|
||
end
|
||
end
|
||
elseif not inputs.right.held then
|
||
side = 0
|
||
if inputs.left.held then
|
||
grabbing = 1
|
||
step = 1
|
||
else
|
||
grabbing = 0
|
||
end
|
||
end
|
||
break
|
||
end
|
||
until true
|
||
repeat
|
||
local ____switch232 = grabbing
|
||
local ____cond232 = ____switch232 == 0
|
||
if ____cond232 then
|
||
circler.metadata = side == 0 and 80 or -80
|
||
circler.scale.x = side == 0 and -1 or 1
|
||
circler.color.red = 255
|
||
circler.color.green = 255
|
||
circler.color.blue = 255
|
||
break
|
||
end
|
||
____cond232 = ____cond232 or ____switch232 == 1
|
||
if ____cond232 then
|
||
circler.metadata = side == 0 and 0 or 0
|
||
circler.scale.x = side == 0 and 1 or -1
|
||
if sticky then
|
||
circler.color.red = 127
|
||
circler.color.green = 127
|
||
circler.color.blue = 127
|
||
else
|
||
circler.color.red = 255
|
||
circler.color.green = 255
|
||
circler.color.blue = 255
|
||
end
|
||
break
|
||
end
|
||
____cond232 = ____cond232 or ____switch232 == 2
|
||
if ____cond232 then
|
||
circler.metadata = side == 0 and -80 or 80
|
||
circler.scale.x = side == 0 and -1 or 1
|
||
circler.color.red = 127
|
||
circler.color.green = 127
|
||
circler.color.blue = 127
|
||
break
|
||
end
|
||
until true
|
||
if step ~= 0 then
|
||
local ____climber_position_62, ____y_63 = climber.position, "y"
|
||
____climber_position_62[____y_63] = ____climber_position_62[____y_63] +
|
||
step * 2
|
||
if grabbing ~= 2 then
|
||
climber.frame = 1 - climber.frame
|
||
end
|
||
assets["s$step_carpet"]:instance({ rate = 1.5 })
|
||
if 330 <= climber.position.y then
|
||
side = 2
|
||
resolve(nil)
|
||
end
|
||
end
|
||
end)
|
||
end
|
||
))
|
||
local ____self_64 = jusant.alpha:automate(15, 0)
|
||
____self_64["then"](
|
||
____self_64,
|
||
function()
|
||
screen:detach(jusant)
|
||
end
|
||
)
|
||
climber.gravity.y = 0.25
|
||
__TS__Await(ST:when(function() return 348 <= climber.position.y end))
|
||
map:detach(climber)
|
||
player.position.x = 51
|
||
player.position.y = 350
|
||
player.stance = "up"
|
||
player.alpha.value = 1
|
||
assets["s$step_glass"]:instance()
|
||
__TS__Await(ST:pause(45))
|
||
local ____reader_headers_65 = reader.headers
|
||
____reader_headers_65[#____reader_headers_65 + 1] = {
|
||
"a",
|
||
function()
|
||
player.stance = "down"
|
||
return "down"
|
||
end
|
||
}
|
||
__TS__Await(reader:text(text.overworld.exit3))
|
||
local golden = object("golden").self
|
||
golden.direction = 1
|
||
golden:addTicker(function(self)
|
||
return function()
|
||
if self.frame == 23 then
|
||
self.frame = 14
|
||
end
|
||
end
|
||
end)
|
||
__TS__Await(ST:pause(30))
|
||
assets["s$platformwarble"]:instance()
|
||
__TS__Await(bb_standard(player, assets["ie$confused"]))
|
||
__TS__Await(ST:pause(13))
|
||
local opt = {
|
||
threshold = 0,
|
||
intensity = 0,
|
||
xsamples = 1,
|
||
ysamples = 1,
|
||
limit = 1,
|
||
bleed = 0,
|
||
absorb = 0,
|
||
enabled = function() return accessor["$option_shaders"] ~= 0 end
|
||
}
|
||
local bloom = bloomShader(opt)
|
||
map:addDrawer(bloom.drawer)
|
||
local sh = 0
|
||
local flip = false
|
||
local cam = map:cam_clamped()
|
||
map.camera = cam
|
||
map:cam_free()
|
||
local camY = cam.y
|
||
local myY = camY
|
||
local intensity = __TS__New(STValue)
|
||
local function screenTicker()
|
||
opt.intensity = intensity.value * 3
|
||
opt.ysamples = 1 + math.floor(intensity.value * 7 + 0.5) * 2
|
||
local cyc = ST:bezier(intensity.value, 5, 1, 1)
|
||
sh = sh + 1
|
||
if cyc <= sh then
|
||
sh = 0
|
||
if flip then
|
||
flip = false
|
||
myY = camY - intensity.value * 3
|
||
else
|
||
flip = true
|
||
myY = camY + intensity.value * 3
|
||
end
|
||
end
|
||
cam.y = (cam.y + myY * 3) / 4
|
||
end
|
||
screen:addTicker(screenTicker)
|
||
fd.color.red = 190
|
||
fd.color.green = 190
|
||
fd.color.blue = 190
|
||
screen:attach(fd)
|
||
local ____self_66 = ST:pause(2)
|
||
local ____self_66_then_result_68 = ____self_66["then"](
|
||
____self_66,
|
||
function()
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
player.stance = "left"
|
||
__TS__Await(ST:pause(30))
|
||
player.stance = "right"
|
||
__TS__Await(ST:pause(45))
|
||
player.stance = "down"
|
||
__TS__Await(ST:pause(60))
|
||
reader:text(text.overworld.exit4)
|
||
end)
|
||
end
|
||
)
|
||
local ____self_67 = ST:pause(110)
|
||
__TS__Await(__TS__PromiseAll({
|
||
____self_66_then_result_68,
|
||
____self_67["then"](
|
||
____self_67,
|
||
function()
|
||
assets["s$warp_in"]:instance_forced()
|
||
end
|
||
),
|
||
fd.alpha:automate(200, 0, 1),
|
||
intensity:automate(200, 1),
|
||
unpack(__TS__ArrayMap(
|
||
assets["m$home_full"].instances,
|
||
function(____, inst)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
__TS__Await(inst.gain:automate(150, 0))
|
||
inst:stop()
|
||
end)
|
||
end
|
||
))
|
||
}))
|
||
bloom:release()
|
||
accessor.location_map = "redleaf"
|
||
accessor.location_idx = 0
|
||
accessor.location_pos_x = 60
|
||
accessor.location_pos_y = 130
|
||
accessor.location_stance = "right"
|
||
local ____opt_69 = map.task
|
||
if ____opt_69 ~= nil then
|
||
____opt_69.complete(nil)
|
||
end
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
end
|
||
state.blocker = false
|
||
__TS__Await(ST:pause(4))
|
||
if door.frame == 1 and door.metadata.inter == inter then
|
||
door.frame = 0
|
||
assets["s$door_close"]:instance()
|
||
end
|
||
else
|
||
trans3(7, 10, 100, "door4")
|
||
end
|
||
end)
|
||
end,
|
||
telecomm = function(test)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if test then
|
||
tooltip(text.trivia_tooltip.telecomm)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if 1 <= accessor.plot then
|
||
game.cutscene = game.cutscene + 1
|
||
if not accessor.event_home_telecomm then
|
||
accessor.event_home_telecomm = true
|
||
__TS__Await(reader:text(text.overworld.telecomm1()))
|
||
__TS__Await(ST:pause(15))
|
||
end
|
||
local anim = object("telecomm").self
|
||
anim.direction = 0
|
||
anim.frame = 1
|
||
assets["s$beep_power"]:instance()
|
||
__TS__Await(reader:text(text.overworld.telecomm2))
|
||
local deleted = accessor.state_home_telecomm_message == 2
|
||
__TS__Await(reader:choice(deleted and text.overworld.telecomm3b or text.overworld.telecomm3a))
|
||
if game.r_choice == (deleted and 2 or 3) then
|
||
if accessor.state_home_telecomm_message ~= 2 then
|
||
anim.direction = 1
|
||
anim.frame = 0
|
||
else
|
||
anim.direction = 0
|
||
anim.duration = 0
|
||
anim.frame = 0
|
||
anim.step = 0
|
||
end
|
||
game.cutscene = game.cutscene - 1
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if game.r_choice ~= 2 then
|
||
anim.direction = 1
|
||
anim.duration = 2
|
||
anim.frame = 0
|
||
anim.step = 0
|
||
local c = assets["s$archangel"]:instance_forced()
|
||
__TS__Await(reader:text(text.overworld.telecomm4[game.r_choice + 1]))
|
||
__TS__Await(ST:pause(90))
|
||
anim.direction = 0
|
||
anim.duration = 0
|
||
anim.frame = 0
|
||
anim.step = 0
|
||
c:stop()
|
||
assets["s$noise"]:instance()
|
||
__TS__Await(reader:text(text.overworld.telecomm5))
|
||
else
|
||
anim.direction = 1
|
||
anim.duration = 4
|
||
anim.frame = 0
|
||
anim.step = 0
|
||
local ____reader_headers_71 = reader.headers
|
||
____reader_headers_71[#____reader_headers_71 + 1] = {
|
||
"a",
|
||
function()
|
||
anim.direction = 0
|
||
anim.duration = 0
|
||
anim.frame = 0
|
||
anim.step = 0
|
||
end
|
||
}
|
||
if accessor.state_home_telecomm_message == 0 and not accessor.event_home_outside then
|
||
local ____reader_headers_72 = reader.headers
|
||
____reader_headers_72[#____reader_headers_72 + 1] = {
|
||
"b",
|
||
function()
|
||
assets["s$beep_error"]:instance()
|
||
end
|
||
}
|
||
end
|
||
__TS__Await(reader:text(text.overworld.telecomm6()))
|
||
if accessor.state_home_telecomm_message == 0 then
|
||
accessor.state_home_telecomm_message = accessor.event_home_outside and 1 or 2
|
||
end
|
||
end
|
||
if accessor.state_home_telecomm_message ~= 2 then
|
||
anim.direction = 1
|
||
anim.frame = 0
|
||
end
|
||
game.cutscene = game.cutscene - 1
|
||
else
|
||
trivia("telecomm")
|
||
end
|
||
end)
|
||
end,
|
||
lightswitch = function(test)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if test then
|
||
tooltip(text.trivia_tooltip.lightswitch)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if 1 <= accessor.plot then
|
||
game.cutscene = game.cutscene + 1
|
||
assets["s$clicky"]:instance()
|
||
__TS__Await(ST:pause(30))
|
||
__TS__Await(reader:text(text.overworld.lightswitch))
|
||
game.cutscene = game.cutscene - 1
|
||
else
|
||
trivia("lightswitch")
|
||
end
|
||
end)
|
||
end,
|
||
telescope = function(test)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if accessor.event_home_telescope and player.stance ~= "up" then
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if test then
|
||
tooltip(text.trivia_tooltip.telescope)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if accessor.event_home_outside then
|
||
game.cutscene = game.cutscene + 1
|
||
if not accessor.event_home_telescope then
|
||
accessor.event_home_telescope = true
|
||
__TS__Await(reader:text(text.overworld.telescope1))
|
||
__TS__Await(ST:pause(15))
|
||
local ____opt_73 = object("telescope")
|
||
if ____opt_73 ~= nil then
|
||
____opt_73:destroy()
|
||
end
|
||
local ____opt_75 = object("telescope")
|
||
if ____opt_75 ~= nil then
|
||
____opt_75:destroy()
|
||
end
|
||
assets["s$duffellift"]:instance()
|
||
__TS__Await(ST:pause(30))
|
||
__TS__Await(player_walk(1.5, { y = 80 }, { x = 50 }))
|
||
__TS__Await(ST:pause(15))
|
||
player.stance = "up"
|
||
__TS__Await(ST:pause(15))
|
||
reveal("tscope2")
|
||
assets["s$tripod"]:instance()
|
||
__TS__Await(ST:pause(30))
|
||
__TS__Await(reader:text(text.overworld.telescope2))
|
||
end
|
||
local done = false
|
||
local fd = __TS__New(STRectangle, {
|
||
alpha = 0,
|
||
size = { x = 240, y = 180 },
|
||
anchor = 0.5,
|
||
color = 0,
|
||
priority = 1001
|
||
})
|
||
screen:attach(fd)
|
||
__TS__Await(fd.alpha:automate(7, 1))
|
||
local overlay = __TS__New(STSprite, {
|
||
image = images.telescope_overlay,
|
||
anchor = 0.5,
|
||
position = { x = accessor.state_home_telescope_x, y = accessor.state_home_telescope_y },
|
||
metadata = nil,
|
||
priority = 1
|
||
}):addTicker(function(self)
|
||
if done then
|
||
return
|
||
end
|
||
local x = self.position.x
|
||
local y = self.position.y
|
||
if inputs.up.held then
|
||
self.position.y = math.max(self.position.y - 2, -75)
|
||
elseif inputs.down.held then
|
||
self.position.y = math.min(self.position.y + 2, 75)
|
||
end
|
||
if inputs.left.held then
|
||
self.position.x = math.max(self.position.x - 2, -105)
|
||
elseif inputs.right.held then
|
||
self.position.x = math.min(self.position.x + 2, 105)
|
||
end
|
||
local m = x ~= self.position.x or y ~= self.position.y
|
||
if self.metadata == nil then
|
||
if m then
|
||
self.metadata = assets["s$ratchetloop"]:instance_forced({ gain = 0.5, rate = 0.8 })
|
||
end
|
||
elseif not m then
|
||
self.metadata:stop()
|
||
self.metadata = nil
|
||
end
|
||
end)
|
||
local out = outlineShader({ color = { red = 0, green = 0, blue = 0 }, alpha = 0.75, thickness = 1 })
|
||
local voidpsr = __TS__New(
|
||
STSprite,
|
||
{
|
||
image = images.void,
|
||
anchor = 0.5,
|
||
children = {
|
||
rainGen(),
|
||
overlay,
|
||
__TS__New(STText, {
|
||
priority = 2,
|
||
anchor = 0.5,
|
||
position = { y = 80 },
|
||
font = assets["f$helloplayer"],
|
||
alpha = 0.75,
|
||
content = text.overworld.tutorial6
|
||
}):addDrawer(out.drawer)
|
||
},
|
||
priority = 1000
|
||
}
|
||
)
|
||
screen:attach(voidpsr)
|
||
__TS__Await(fd.alpha:automate(7, 0))
|
||
screen:detach(fd)
|
||
__TS__Await(__TS__New(
|
||
__TS__Promise,
|
||
function(____, resolve)
|
||
local downer
|
||
downer = function()
|
||
inputs.secondary:removeDown(downer)
|
||
resolve(nil)
|
||
end
|
||
inputs.secondary:addDown(downer)
|
||
end
|
||
))
|
||
done = true
|
||
screen:attach(fd)
|
||
local ____opt_77 = overlay.metadata
|
||
if ____opt_77 ~= nil then
|
||
____opt_77:stop()
|
||
end
|
||
__TS__Await(fd.alpha:automate(7, 1))
|
||
screen:detach(voidpsr)
|
||
out:release()
|
||
accessor.state_home_telescope_x = overlay.position.x
|
||
accessor.state_home_telescope_y = overlay.position.y
|
||
game.cutscene = game.cutscene - 1
|
||
__TS__Await(fd.alpha:automate(7, 0))
|
||
screen:detach(fd)
|
||
else
|
||
trivia("telescope")
|
||
end
|
||
end)
|
||
end,
|
||
fusebox = function(test)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if player.stance ~= "up" then
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if test then
|
||
tooltip(text.trivia_tooltip.fusebox)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if 1 <= accessor.plot then
|
||
game.cutscene = game.cutscene + 1
|
||
local first = not accessor.event_home_fusebox
|
||
if first then
|
||
accessor.event_home_fusebox = true
|
||
__TS__Await(reader:text(text.overworld.fusebox1()))
|
||
end
|
||
if math.abs(player.position.x - 176) > 6 then
|
||
__TS__Await(player_walk(1.5, { x = 176 }))
|
||
player.stance = "up"
|
||
end
|
||
if first then
|
||
__TS__Await(ST:pause(15))
|
||
end
|
||
assets["s$breaker_open"]:instance()
|
||
local anim = object("thevibe").self
|
||
anim.frame = 1
|
||
local states = ST:populate(
|
||
6,
|
||
function(i) return ST:unstack(2, accessor.state_home_fusebox, 5 - i) end
|
||
)
|
||
local knobs = ST:populate(
|
||
6,
|
||
function(i)
|
||
return __TS__New(
|
||
STSprite,
|
||
{
|
||
image = images.fuseknob,
|
||
position = { y = 7 + math.floor(i / 2) * 5 }
|
||
}
|
||
):addTicker(function(self)
|
||
self.position.x = 14 + i % 2 * 8 + states[i + 1] * 4
|
||
end)
|
||
end
|
||
)
|
||
local knobSystem = __TS__New(
|
||
STAtlas,
|
||
{
|
||
main = {
|
||
grid = function() return { { 0, 1 }, { 2, 3 }, { 4, 5 } } end,
|
||
position = { x = 0, y = 0 }
|
||
}
|
||
}
|
||
)
|
||
local function keyListener(self)
|
||
repeat
|
||
local ____switch302 = self
|
||
local ____cond302 = ____switch302 == inputs.down
|
||
if ____cond302 then
|
||
knobSystem:seek(STFacing.DOWN)
|
||
assets["s$breaker_navigate"]:instance()
|
||
break
|
||
end
|
||
____cond302 = ____cond302 or ____switch302 == inputs.up
|
||
if ____cond302 then
|
||
knobSystem:seek(STFacing.UP)
|
||
assets["s$breaker_navigate"]:instance()
|
||
break
|
||
end
|
||
____cond302 = ____cond302 or ____switch302 == inputs.left
|
||
if ____cond302 then
|
||
knobSystem:seek(STFacing.LEFT)
|
||
assets["s$breaker_navigate"]:instance()
|
||
break
|
||
end
|
||
____cond302 = ____cond302 or ____switch302 == inputs.right
|
||
if ____cond302 then
|
||
knobSystem:seek(STFacing.RIGHT)
|
||
assets["s$breaker_navigate"]:instance()
|
||
break
|
||
end
|
||
____cond302 = ____cond302 or ____switch302 == inputs.primary
|
||
if ____cond302 then
|
||
do
|
||
local i = knobSystem:selection()
|
||
states[i + 1] = 1 - states[i + 1]
|
||
assets["s$breaker_switch"]:instance()
|
||
break
|
||
end
|
||
end
|
||
until true
|
||
end
|
||
local keys = {
|
||
inputs.down,
|
||
inputs.up,
|
||
inputs.left,
|
||
inputs.right,
|
||
inputs.primary
|
||
}
|
||
for ____, key in ipairs(keys) do
|
||
key:addDown(keyListener)
|
||
end
|
||
anim:attach(unpack(knobs))
|
||
knobSystem:switch("main")
|
||
local out = outlineShader({ color = { red = 0, green = 0, blue = 0 }, alpha = 0.75, thickness = 1 })
|
||
local overlay = __TS__New(
|
||
STContainer,
|
||
{
|
||
alpha = 0,
|
||
children = {
|
||
__TS__New(STRectangle, {
|
||
alpha = 0.25,
|
||
anchor = 0.5,
|
||
size = { x = 240, y = 180 },
|
||
color = 0,
|
||
priority = -1
|
||
}),
|
||
__TS__New(
|
||
STSprite,
|
||
{
|
||
anchor = 0.5,
|
||
alpha = 0.75,
|
||
position = { y = -35 },
|
||
image = images.fusebox_overlay,
|
||
children = { unpack(ST:populate(
|
||
6,
|
||
function(i)
|
||
return __TS__New(
|
||
STContainer,
|
||
{
|
||
priority = 1,
|
||
position = {
|
||
x = 23 * (-1 + i % 2 * 2),
|
||
y = -23 + math.floor(i / 2) * 23
|
||
},
|
||
children = {
|
||
__TS__New(STText,
|
||
{
|
||
anchor = { x = 1 - i % 2, y = 0.5 },
|
||
font = assets["f$fives"],
|
||
position = { x = 32 * (-1 + i % 2 * 2) },
|
||
content = ({
|
||
text.overworld.fusebox2,
|
||
text.overworld.fusebox3,
|
||
text.overworld.fusebox4,
|
||
text.overworld.fusebox5,
|
||
text.overworld.fusebox6,
|
||
text.overworld.fusebox7
|
||
})[i + 1]
|
||
}),
|
||
__TS__New(STSprite,
|
||
{ anchor = 0.5, image = images.fusebox_overlay_switch })
|
||
:addTicker(function(self)
|
||
self.scale.x = 1 - states[i + 1] * 2
|
||
end),
|
||
__TS__New(STText,
|
||
{ anchor = 0.5, font = assets["f$fives"], priority = 1 })
|
||
:addTicker(function(self)
|
||
self.content = states[i + 1] == i % 2 and
|
||
text.overworld.fusebox8 or
|
||
text.overworld.fusebox9
|
||
self.position.x = 4 - states[i + 1] * 8
|
||
end)
|
||
}
|
||
}
|
||
):addTicker(function(self)
|
||
if knobSystem:selection() == i then
|
||
self.color.red = 255
|
||
self.color.green = 255
|
||
self.color.blue = 255
|
||
else
|
||
self.color.red = 127
|
||
self.color.green = 127
|
||
self.color.blue = 127
|
||
end
|
||
end)
|
||
end
|
||
)) }
|
||
}
|
||
),
|
||
__TS__New(STText, {
|
||
priority = 1,
|
||
anchor = 0.5,
|
||
position = { y = 80 },
|
||
font = assets["f$helloplayer"],
|
||
alpha = 0.75,
|
||
content = text.overworld.tutorial6
|
||
}):addDrawer(out.drawer)
|
||
},
|
||
priority = 1000,
|
||
metadata = true
|
||
}
|
||
):addTicker(function(self)
|
||
if self.metadata then
|
||
local ____temp_82 = self.alpha.value < 1
|
||
if ____temp_82 then
|
||
local ____self_alpha_79, ____value_80 = self.alpha, "value"
|
||
local ____self_alpha_value_81 = ____self_alpha_79[____value_80] + 1 / 7
|
||
____self_alpha_79[____value_80] = ____self_alpha_value_81
|
||
____temp_82 = ____self_alpha_value_81 > 1
|
||
end
|
||
if ____temp_82 then
|
||
self.alpha.value = 1
|
||
end
|
||
else
|
||
local ____temp_86 = self.alpha.value > 0
|
||
if ____temp_86 then
|
||
local ____self_alpha_83, ____value_84 = self.alpha, "value"
|
||
local ____self_alpha_value_85 = ____self_alpha_83[____value_84] - 1 / 7
|
||
____self_alpha_83[____value_84] = ____self_alpha_value_85
|
||
____temp_86 = ____self_alpha_value_85 <= 0
|
||
end
|
||
if ____temp_86 then
|
||
screen:detach(self)
|
||
out:release()
|
||
end
|
||
end
|
||
end):addDrawer(batch.drawer)
|
||
screen:attach(overlay)
|
||
__TS__Await(__TS__New(
|
||
__TS__Promise,
|
||
function(____, resolve)
|
||
local downer
|
||
downer = function()
|
||
inputs.secondary:removeDown(downer)
|
||
resolve(nil)
|
||
end
|
||
inputs.secondary:addDown(downer)
|
||
end
|
||
))
|
||
knobSystem:switch(nil)
|
||
for ____, direcKey in ipairs(keys) do
|
||
direcKey:removeDown(keyListener)
|
||
end
|
||
anim:detach(unpack(knobs))
|
||
anim.frame = 0
|
||
assets["s$breaker_close"]:instance()
|
||
accessor.state_home_fusebox = ST:stack(2, states)
|
||
game.cutscene = game.cutscene - 1
|
||
overlay.metadata = false
|
||
else
|
||
trivia("fusebox")
|
||
end
|
||
end)
|
||
end,
|
||
bed = function(test)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if test then
|
||
tooltip(text.trivia_tooltip.bed)
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if accessor.plot < 2 or accessor.item_cover then
|
||
trivia("bed")
|
||
else
|
||
game.cutscene = game.cutscene + 1
|
||
accessor.item_cover = true
|
||
update()
|
||
__TS__Await(reader:text(text.overworld.bed1))
|
||
__TS__Await(ST:pause(15))
|
||
__TS__Await(bb_standard(player, assets["ie$ellipsis"]))
|
||
__TS__Await(ST:pause(15))
|
||
local ____reader_headers_89 = reader.headers
|
||
____reader_headers_89[#____reader_headers_89 + 1] = {
|
||
"a",
|
||
function()
|
||
assets["s$itemget"]:instance()
|
||
local ____opt_87 = object("cover")
|
||
if ____opt_87 ~= nil then
|
||
____opt_87:destroy()
|
||
end
|
||
end
|
||
}
|
||
__TS__Await(reader:text(text.overworld.bed2()))
|
||
if accessor.item_scissors then
|
||
player.stance = "up"
|
||
bb_standard(player, assets["ie$ellipsis"])
|
||
assets["s$scissors"]:instance()
|
||
__TS__Await(ST:pause(75))
|
||
else
|
||
__TS__Await(ST:pause(45))
|
||
end
|
||
local ____reader_91 = reader
|
||
local ____reader_text_92 = reader.text
|
||
local ____array_90 = __TS__SparseArrayNew(unpack(text.overworld.bed3()))
|
||
__TS__SparseArrayPush(
|
||
____array_90,
|
||
unpack(accessor.item_scissors and accessor.item_crowbar and text.overworld.done1 or ({}))
|
||
)
|
||
__TS__Await(____reader_text_92(
|
||
____reader_91,
|
||
{ __TS__SparseArraySpread(____array_90) }
|
||
))
|
||
if accessor.item_scissors and accessor.item_crowbar then
|
||
__TS__Await(ST:pause(15))
|
||
__TS__Await(bb_standard(player, assets["ie$note"]))
|
||
__TS__Await(ST:pause(15))
|
||
__TS__Await(reader:text(text.overworld.done2))
|
||
accessor.plot = 3
|
||
end
|
||
game.cutscene = game.cutscene - 1
|
||
end
|
||
end)
|
||
end,
|
||
book = function(test)
|
||
if player.stance == "left" then
|
||
if test then
|
||
tooltip(text.trivia_tooltip.book)
|
||
return
|
||
end
|
||
trivia("book")
|
||
else
|
||
if test then
|
||
tooltip(text.trivia_tooltip.lamp)
|
||
return
|
||
end
|
||
trivia("lamp")
|
||
end
|
||
end,
|
||
rope = function(test)
|
||
if accessor.plot < 1 then
|
||
if test then
|
||
tooltip(text.trivia_tooltip.rope)
|
||
return
|
||
end
|
||
trivia("rope")
|
||
elseif not accessor.item_rope then
|
||
if test then
|
||
tooltip(text.trivia_tooltip.rope)
|
||
return
|
||
end
|
||
accessor.item_rope = true
|
||
update()
|
||
local ____reader_headers_93 = reader.headers
|
||
____reader_headers_93[#____reader_headers_93 + 1] = {
|
||
"a",
|
||
function()
|
||
assets["s$itemget"]:instance()
|
||
object("hot").self.frame = accessor.item_scissors and 3 or 2
|
||
end
|
||
}
|
||
reader:text(text.overworld.rope1())
|
||
end
|
||
end
|
||
}
|
||
local scripts_ex = {
|
||
roper = function()
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if accessor.plot < 2 or accessor.event_home_rope or 3 <= accessor.plot then
|
||
return ____awaiter_resolve(nil, false)
|
||
end
|
||
if map.room == 7 then
|
||
game.cutscene = game.cutscene + 1
|
||
accessor.event_home_rope = true
|
||
__TS__Await(reader:text(text.overworld.dangle1))
|
||
__TS__Await(ST:pause(15))
|
||
if player.position.x < 30 then
|
||
__TS__Await(player_walk(1.5, { x = 30, y = player.position.y + (30 - player.position.x) }))
|
||
end
|
||
__TS__Await(player_walk(1.5, { x = 35 }, { y = 135 }))
|
||
__TS__Await(ST:pause(10))
|
||
local cam = map:cam_clamped()
|
||
map.camera = cam
|
||
local rg = map:cam_free()
|
||
__TS__Await(cam:automate(90, { y = 300 }))
|
||
__TS__Await(ST:pause(60))
|
||
__TS__Await(reader:text(text.overworld.dangle2))
|
||
__TS__Await(ST:pause(45))
|
||
__TS__Await(cam:automate(90, { y = 135 }))
|
||
map:cam_restore(unpack(rg))
|
||
map.camera = player.position
|
||
__TS__Await(ST:pause(60))
|
||
__TS__Await(reader:text(text.overworld.dangle3()))
|
||
game.cutscene = game.cutscene - 1
|
||
else
|
||
__TS__Await(reader:text(text.overworld.rope2))
|
||
end
|
||
end)
|
||
end,
|
||
buckey = function()
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if accessor.event_home_bucket or 2 <= accessor.plot then
|
||
return ____awaiter_resolve(nil, false)
|
||
end
|
||
if map.room == 7 then
|
||
game.cutscene = game.cutscene + 1
|
||
accessor.event_home_bucket = true
|
||
__TS__Await(reader:text(text.overworld.rain1))
|
||
__TS__Await(ST:pause(15))
|
||
if player.position.x < 30 then
|
||
__TS__Await(player_walk(1.5, { x = 30, y = player.position.y + (30 - player.position.x) }))
|
||
end
|
||
__TS__Await(player_walk(1.5, { x = 35 }))
|
||
if math.abs(player.position.y - 110) > 6 then
|
||
__TS__Await(ST:pause(15))
|
||
__TS__Await(player_walk(1.5, { y = 110 }))
|
||
end
|
||
player.stance = "right"
|
||
__TS__Await(ST:pause(30))
|
||
local buckey = __TS__New(STAnimation, {
|
||
anchor = { x = 0.5, y = 1 },
|
||
position = { x = 50, y = 113 },
|
||
frames = framess.shovel_pot,
|
||
frame = 4,
|
||
priority = 113
|
||
})
|
||
map:attach(buckey)
|
||
assets["s$bucketputdown"]:instance()
|
||
__TS__Await(ST:pause(120))
|
||
__TS__Await(bb_standard(player, assets["ie$confused"]))
|
||
__TS__Await(ST:pause(30))
|
||
__TS__Await(reader:text(text.overworld.rain2))
|
||
__TS__Await(ST:pause(30))
|
||
__TS__Await(bb_standard(player, assets["ie$ellipsis"]))
|
||
__TS__Await(ST:pause(30))
|
||
__TS__Await(reader:text(text.overworld.rain3))
|
||
map:detach(buckey)
|
||
assets["s$bucketpickup"]:instance()
|
||
game.cutscene = game.cutscene - 1
|
||
else
|
||
__TS__Await(reader:text(text.overworld.bucket4))
|
||
end
|
||
end)
|
||
end,
|
||
ponder = function()
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
game.cutscene = game.cutscene + 1
|
||
__TS__Await(ST:pause(10))
|
||
__TS__Await(bb_standard(player, assets["ie$ellipsis"]))
|
||
if accessor.plot < 0.4 then
|
||
__TS__Await(reader:text(text.ponder_book("ponder_book")))
|
||
elseif accessor.plot < 1 then
|
||
__TS__Await(reader:text(text.ponder_sleep))
|
||
elseif not accessor.event_home_outside then
|
||
__TS__Await(reader:text(text.ponder_hello))
|
||
elseif accessor.plot < 2 then
|
||
__TS__Await(reader:text(text.ponder_outside("ponder_outside")))
|
||
elseif accessor.plot < 3 then
|
||
__TS__Await(reader:text(text.ponder_platform()))
|
||
else
|
||
__TS__Await(reader:text(text.ponder_exit("ponder_exit")))
|
||
end
|
||
game.cutscene = game.cutscene - 1
|
||
end)
|
||
end
|
||
}
|
||
local updaters = {
|
||
[0] = function(from, physical)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if accessor.item_goatplush then
|
||
local ____opt_94 = object("goatplush")
|
||
if ____opt_94 ~= nil then
|
||
____opt_94:destroy()
|
||
end
|
||
local ____opt_96 = object("goatplush")
|
||
if ____opt_96 ~= nil then
|
||
____opt_96:destroy()
|
||
end
|
||
end
|
||
if accessor.item_cover then
|
||
local ____opt_98 = object("cover")
|
||
if ____opt_98 ~= nil then
|
||
____opt_98:destroy()
|
||
end
|
||
end
|
||
end)
|
||
end,
|
||
[1] = function(from, physical)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if 2 <= accessor.plot then
|
||
local toy = object("toy").self
|
||
toy.direction = 0
|
||
toy.frame = 3
|
||
end
|
||
if physical and accessor.plot < 0.1 then
|
||
game.cutscene = game.cutscene + 1
|
||
local fd = __TS__New(STRectangle,
|
||
{ color = 0, anchor = 0.5, priority = 1000, size = { x = 240, y = 180 } })
|
||
screen:attach(fd)
|
||
__TS__Await(ST:pause(37))
|
||
local innerText = __TS__New(
|
||
STText,
|
||
{
|
||
font = assets["f$helloplayer"],
|
||
anchor = 0.5,
|
||
justify = 0.5,
|
||
position = { y = 15 },
|
||
color = 10652124,
|
||
content = assets["f$helloplayer"]:wrap(
|
||
text.overworld.start2,
|
||
function() return 230 end,
|
||
standardSplitter
|
||
)
|
||
}
|
||
)
|
||
local startText = __TS__New(
|
||
STContainer,
|
||
{
|
||
alpha = 0,
|
||
priority = 1001,
|
||
children = {
|
||
__TS__New(STText, {
|
||
font = assets["f$helloplayer"],
|
||
anchor = 0.5,
|
||
position = { y = -25 },
|
||
justify = 0.5,
|
||
scale = 2,
|
||
content = text.overworld.start1
|
||
}),
|
||
innerText
|
||
}
|
||
}
|
||
)
|
||
screen:attach(startText)
|
||
__TS__Await(startText.alpha:automate(30, 1))
|
||
__TS__Await(__TS__PromiseRace({
|
||
ST:pause(150),
|
||
ST:when(function() return inputs.tertiary.held end)
|
||
}))
|
||
__TS__Await(innerText.alpha:automate(30, 0))
|
||
innerText.content = assets["f$helloplayer"]:wrap(
|
||
text.overworld.start3,
|
||
function() return 230 end,
|
||
standardSplitter
|
||
)
|
||
__TS__Await(innerText.alpha:automate(30, 1))
|
||
__TS__Await(__TS__PromiseRace({
|
||
ST:pause(150),
|
||
ST:when(function() return inputs.tertiary.held end)
|
||
}))
|
||
__TS__Await(startText.alpha:automate(30, 0))
|
||
screen:detach(startText)
|
||
__TS__Await(ST:pause(30))
|
||
screen:detach(fd)
|
||
daemons.crickets:instance_forced({ gain = 0 }).gain:automate(120, 1)
|
||
__TS__Await(unfailer())
|
||
accessor.plot = 0.1
|
||
accessor.tutorial_choice = false
|
||
accessor.tutorial_dialogue = false
|
||
local ____self_100 = hintDialogue()
|
||
____self_100["then"](
|
||
____self_100,
|
||
function()
|
||
accessor.tutorial_dialogue = true
|
||
end
|
||
)
|
||
game.cutscene = game.cutscene - 1
|
||
save()
|
||
end
|
||
if physical and accessor.plot < 0.2 then
|
||
local hint = hintGen(text.overworld.tutorial1, 0, 90)
|
||
__TS__Await(ST:when(function()
|
||
return math.abs(player.metadata.last_x) ~= 0 or
|
||
math.abs(player.metadata.last_y) ~= 0
|
||
end))
|
||
accessor.plot = 0.2
|
||
hint()
|
||
local ____self_101 = hintInter()
|
||
____self_101["then"](
|
||
____self_101,
|
||
function()
|
||
accessor.plot = 0.3
|
||
end
|
||
)
|
||
end
|
||
if physical and accessor.plot == 1 then
|
||
accessor.plot = 1.1
|
||
game.cutscene = game.cutscene + 1
|
||
__TS__Await(ST:pause(15))
|
||
__TS__Await(bb_standard(player, assets["ie$ellipsis"]))
|
||
__TS__Await(ST:pause(15))
|
||
player.stance = "left"
|
||
__TS__Await(ST:pause(30))
|
||
player.stance = "right"
|
||
__TS__Await(ST:pause(45))
|
||
__TS__Await(reader:text(text.overworld.hello3))
|
||
__TS__Await(ST:pause(55))
|
||
player.stance = "down"
|
||
__TS__Await(reader:text(text.overworld.hello4))
|
||
game.cutscene = game.cutscene - 1
|
||
end
|
||
end)
|
||
end,
|
||
[2] = function()
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if accessor.item_crowbar then
|
||
local ____opt_102 = object("framebox")
|
||
if ____opt_102 ~= nil then
|
||
____opt_102:destroy()
|
||
end
|
||
object("rogerrabbit").self.frame = 1
|
||
end
|
||
end)
|
||
end,
|
||
[3] = function()
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if accessor.item_drill then
|
||
local ____opt_104 = object("driller")
|
||
if ____opt_104 ~= nil then
|
||
____opt_104:destroy()
|
||
end
|
||
end
|
||
if accessor.item_rock then
|
||
object("SWEEPSWEEPSWEEP").self.frame = 3
|
||
end
|
||
if accessor.item_bucket then
|
||
object("harry").self.frame = 3
|
||
local ____opt_106 = object("bucketbox1")
|
||
if ____opt_106 ~= nil then
|
||
____opt_106:destroy()
|
||
end
|
||
elseif accessor.event_home_outside then
|
||
local bb2 = object("bucketbox2").self
|
||
bb2.metadata.y = bb2.position.y
|
||
bb2.position.y = 1000
|
||
else
|
||
local ____opt_108 = object("bucketbox2")
|
||
if ____opt_108 ~= nil then
|
||
____opt_108:destroy()
|
||
end
|
||
end
|
||
end)
|
||
end,
|
||
[4] = function(from, physical)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if physical and accessor.plot < 2 then
|
||
assets["s$faucet_distant"]:instance({ position = state.faucet_time, gain = 0.4 })
|
||
end
|
||
if accessor.event_home_telescope then
|
||
local ____opt_110 = object("telescope")
|
||
if ____opt_110 ~= nil then
|
||
____opt_110:destroy()
|
||
end
|
||
local ____opt_112 = object("telescope")
|
||
if ____opt_112 ~= nil then
|
||
____opt_112:destroy()
|
||
end
|
||
elseif 1 <= accessor.plot then
|
||
hide("tscope2")
|
||
else
|
||
local ____opt_114 = object("tscope2")
|
||
if ____opt_114 ~= nil then
|
||
____opt_114:destroy()
|
||
end
|
||
local ____opt_116 = object("tscope2")
|
||
if ____opt_116 ~= nil then
|
||
____opt_116:destroy()
|
||
end
|
||
local ____opt_118 = object("tscope2")
|
||
if ____opt_118 ~= nil then
|
||
____opt_118:destroy()
|
||
end
|
||
end
|
||
if accessor.event_home_bookshelf == 2 then
|
||
local ____opt_120 = object("basket")
|
||
if ____opt_120 ~= nil then
|
||
____opt_120:destroy()
|
||
end
|
||
local ____opt_122 = object("basket")
|
||
if ____opt_122 ~= nil then
|
||
____opt_122:destroy()
|
||
end
|
||
object("screwbox").self.frame = 1
|
||
elseif accessor.event_home_secret then
|
||
hide("flipbasket")
|
||
else
|
||
local ____opt_124 = object("flipbasket")
|
||
if ____opt_124 ~= nil then
|
||
____opt_124:destroy()
|
||
end
|
||
local ____opt_126 = object("flipbasket")
|
||
if ____opt_126 ~= nil then
|
||
____opt_126:destroy()
|
||
end
|
||
end
|
||
if 0.4 <= accessor.plot then
|
||
local ____opt_128 = object("extrabook")
|
||
if ____opt_128 ~= nil then
|
||
____opt_128:destroy()
|
||
end
|
||
end
|
||
if physical and accessor.plot < 1 then
|
||
object("night0").self:addTicker(function(self)
|
||
self.offset.y = -10 + ST:clamp(map.camera.y, map.camera_min.y, map.camera_max.y) -
|
||
map.camera_min.y
|
||
end)
|
||
object("night1").self:addTicker(function(self)
|
||
self.offset.y = -10 +
|
||
math.floor((ST:clamp(map.camera.y, map.camera_min.y, map.camera_max.y) - map.camera_min.y) /
|
||
8 +
|
||
0.5)
|
||
end)
|
||
object("night2").self:addTicker(function(self)
|
||
self.offset.y = -10 +
|
||
math.floor((ST:clamp(map.camera.y, map.camera_min.y, map.camera_max.y) - map.camera_min.y) /
|
||
16 +
|
||
0.5)
|
||
end)
|
||
object("night3").self.offset.y = -10
|
||
object("night4").self:addTicker(function(self)
|
||
self.offset.y = -8 -
|
||
math.floor((ST:clamp(map.camera.y, map.camera_min.y, map.camera_max.y) - map.camera_min.y) /
|
||
16 +
|
||
0.5)
|
||
end)
|
||
object("night5").self:addTicker(function(self)
|
||
self.offset.y = -6 -
|
||
math.floor((ST:clamp(map.camera.y, map.camera_min.y, map.camera_max.y) - map.camera_min.y) /
|
||
32 +
|
||
0.5)
|
||
end)
|
||
end
|
||
end)
|
||
end,
|
||
[5] = function(from, physical)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if not accessor.event_home_food then
|
||
object("bowl").self.alpha.value = 0
|
||
else
|
||
local ____opt_130 = object("counter")
|
||
if ____opt_130 ~= nil then
|
||
____opt_130:destroy()
|
||
end
|
||
end
|
||
if accessor.state_home_telecomm_message == 2 then
|
||
local anim = object("telecomm").self
|
||
anim.direction = 0
|
||
anim.duration = 0
|
||
anim.frame = 0
|
||
anim.step = 0
|
||
end
|
||
if physical and accessor.plot < 2 then
|
||
local fau = assets["s$faucet"]:instance_forced({ position = state.faucet_time })
|
||
object("leaker").self:addTicker(function(self)
|
||
self.frame = math.floor(fau.position.value * 30) % 60
|
||
end)
|
||
end
|
||
if accessor.item_scissors or accessor.item_rope then
|
||
object("hot").self.frame = (accessor.item_scissors and 1 or 0) + (accessor.item_rope and 2 or 0)
|
||
end
|
||
if physical and accessor.plot < 1 then
|
||
object("night0").self:addTicker(function(self)
|
||
self.offset.y = -10 + ST:clamp(map.camera.y, map.camera_min.y, map.camera_max.y) -
|
||
map.camera_min.y
|
||
end)
|
||
object("night1").self:addTicker(function(self)
|
||
self.offset.y = -10 +
|
||
math.floor((ST:clamp(map.camera.y, map.camera_min.y, map.camera_max.y) - map.camera_min.y) /
|
||
8 +
|
||
0.5)
|
||
end)
|
||
object("night2").self.offset.y = -10
|
||
object("night3").self:addTicker(function(self)
|
||
self.offset.y = -9 -
|
||
math.floor((ST:clamp(map.camera.y, map.camera_min.y, map.camera_max.y) - map.camera_min.y) /
|
||
16 +
|
||
0.5)
|
||
end)
|
||
object("night4").self:addTicker(function(self)
|
||
self.offset.y = -8 -
|
||
math.floor((ST:clamp(map.camera.y, map.camera_min.y, map.camera_max.y) - map.camera_min.y) /
|
||
32 +
|
||
0.5)
|
||
end)
|
||
end
|
||
end)
|
||
end,
|
||
[6] = function(from, physical)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if physical and accessor.plot < 2 then
|
||
assets["s$faucet_distant"]:instance({ position = state.faucet_time, gain = 0.4 })
|
||
end
|
||
end)
|
||
end,
|
||
[7] = function(from, physical)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if physical and not accessor.event_home_outside then
|
||
accessor.event_home_outside = true
|
||
game.cutscene = game.cutscene + 1
|
||
__TS__Await(ST:pause(25))
|
||
local silly = __TS__New(STSprite, {
|
||
anchor = { x = 0.5, y = 1 },
|
||
position = player.position,
|
||
color = 10652124,
|
||
priority = player.position.y,
|
||
image = accessor.floof and assets["ic$player$what_side_plush"] or assets["ic$player$what_side"]
|
||
})
|
||
map:attach(silly)
|
||
player.alpha.value = 0
|
||
__TS__Await(bb_standard(silly, assets["ie$surprise"]))
|
||
__TS__Await(ST:pause(15))
|
||
__TS__Await(reader:text(text.overworld.outside1))
|
||
__TS__Await(ST:pause(30))
|
||
assets["m$home"]:instance()
|
||
player.alpha.value = 1
|
||
map:detach(silly)
|
||
__TS__Await(player_walk(1.5, { x = 30, y = 120 }, { x = 45 }))
|
||
__TS__Await(ST:pause(45))
|
||
__TS__Await(reader:text(text.overworld.outside2))
|
||
__TS__Await(ST:pause(30))
|
||
player.stance = "up"
|
||
__TS__Await(ST:pause(40))
|
||
player.stance = "down"
|
||
__TS__Await(ST:pause(50))
|
||
player.stance = "right"
|
||
__TS__Await(ST:pause(60))
|
||
__TS__Await(reader:text(text.overworld.outside3))
|
||
__TS__Await(ST:pause(45))
|
||
__TS__Await(bb_standard(player, assets["ie$xicon"]))
|
||
__TS__Await(ST:pause(30))
|
||
player.stance = "down"
|
||
__TS__Await(reader:text(text.overworld.outside4))
|
||
game.cutscene = game.cutscene - 1
|
||
end
|
||
end)
|
||
end
|
||
}
|
||
activators[#activators + 1] = function(test, name, ...)
|
||
local args = { ... }
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if game.cutscene ~= 0 then
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if scripts[name] ~= nil then
|
||
local p = scripts[name](test, args)
|
||
if p ~= nil then
|
||
__TS__Await(p)
|
||
end
|
||
end
|
||
end)
|
||
end
|
||
game.script = function(name)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if scripts_ex[name] ~= nil then
|
||
local ____TS__Await_result_132 = __TS__Await(scripts_ex[name]())
|
||
if ____TS__Await_result_132 == nil then
|
||
____TS__Await_result_132 = true
|
||
end
|
||
return ____awaiter_resolve(nil, ____TS__Await_result_132)
|
||
end
|
||
return ____awaiter_resolve(nil, false)
|
||
end)
|
||
end
|
||
__TS__ArrayPush(
|
||
items,
|
||
{
|
||
name = function(self)
|
||
return text.item_book.name
|
||
end,
|
||
priority = 100,
|
||
script = function(self, reader)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
__TS__Await(reader:text(text.item_book.info()))
|
||
end)
|
||
end,
|
||
show = function(self)
|
||
return accessor.plot == 0.4
|
||
end
|
||
},
|
||
{
|
||
name = function(self)
|
||
return text.item_rock.name
|
||
end,
|
||
priority = 101,
|
||
script = function(self, reader)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if map.room == 7 then
|
||
game.cutscene = game.cutscene + 1
|
||
accessor.plot = 2
|
||
update()
|
||
__TS__Await(reader:text(text.overworld.golden1))
|
||
if player.position.x < 30 then
|
||
__TS__Await(player_walk(1.5, { x = 30, y = player.position.y + (30 - player.position.x) }))
|
||
end
|
||
if player.position.x > 30 then
|
||
__TS__Await(player_walk(1.5, { x = 30 }))
|
||
end
|
||
if player.position.y < 115 and math.abs(player.position.y - 115) > 6 then
|
||
__TS__Await(player_walk(1.5, { y = 115 }))
|
||
elseif player.position.y > 125 and math.abs(player.position.y - 125) > 6 then
|
||
__TS__Await(player_walk(1.5, { y = 125 }))
|
||
end
|
||
player.stance = "right"
|
||
__TS__Await(ST:pause(45))
|
||
local cam = map:cam_clamped()
|
||
map.camera = cam
|
||
local rg = map:cam_free()
|
||
local i = 0
|
||
while i < 2 do
|
||
local ____self_133 = reader:header("a")
|
||
local ____self_133_then_result_135 = ____self_133["then"](
|
||
____self_133,
|
||
function()
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
cam:automate(30, { x = 175 })
|
||
__TS__Await(bb_standard(player, assets["ie$surprise"]))
|
||
end)
|
||
end
|
||
)
|
||
local ____self_134 = reader:text(({ text.overworld.golden2, text.overworld.golden4 })[i + 1])
|
||
__TS__Await(__TS__PromiseAll({
|
||
____self_133_then_result_135,
|
||
____self_134["then"](
|
||
____self_134,
|
||
function() return ST:pause(15) end
|
||
)
|
||
}))
|
||
local power = __TS__Await(__TS__New(
|
||
__TS__Promise,
|
||
function(____, resolve)
|
||
local d = false
|
||
local ac = inputs.primary.held and -1 or 0
|
||
local fx = nil
|
||
local function pow(n)
|
||
return ST:linear(
|
||
n / 90,
|
||
0,
|
||
0.5,
|
||
1,
|
||
0
|
||
)
|
||
end
|
||
local rec = __TS__New(STRectangle,
|
||
{ position = { x = 194 / -2 }, anchor = { y = 0.5 }, size = { y = 24 }, priority = 1 })
|
||
local htext = __TS__New(STText, {
|
||
content = text.overworld.tutorial7,
|
||
priority = 2,
|
||
position = { y = 1 },
|
||
anchor = 0.5,
|
||
font = assets["f$helloplayer"],
|
||
color = 8355711
|
||
})
|
||
local powbar = __TS__New(
|
||
STContainer,
|
||
{
|
||
alpha = 0,
|
||
metadata = 0,
|
||
children = {
|
||
__TS__New(STSprite, { anchor = 0.5, image = images.powbar }),
|
||
rec,
|
||
htext
|
||
},
|
||
priority = 1000
|
||
}
|
||
):addTicker(function(self)
|
||
if d then
|
||
local ____temp_139 = self.alpha.value > 0
|
||
if ____temp_139 then
|
||
local ____self_alpha_136, ____value_137 = self.alpha, "value"
|
||
local ____self_alpha_value_138 = ____self_alpha_136[____value_137] -
|
||
0.75 / 7
|
||
____self_alpha_136[____value_137] = ____self_alpha_value_138
|
||
____temp_139 = ____self_alpha_value_138 <= 0
|
||
end
|
||
if ____temp_139 then
|
||
screen:detach(self)
|
||
end
|
||
return
|
||
else
|
||
local ____temp_143 = self.alpha.value < 0.75
|
||
if ____temp_143 then
|
||
local ____self_alpha_140, ____value_141 = self.alpha, "value"
|
||
local ____self_alpha_value_142 = ____self_alpha_140[____value_141] +
|
||
0.75 / 7
|
||
____self_alpha_140[____value_141] = ____self_alpha_value_142
|
||
____temp_143 = ____self_alpha_value_142 > 0.75
|
||
end
|
||
local ____temp_143_144 = ____temp_143
|
||
if ____temp_143_144 then
|
||
self.alpha.value = 0.75
|
||
____temp_143_144 = 0.75
|
||
end
|
||
end
|
||
repeat
|
||
local ____switch437 = ac
|
||
local ____cond437 = ____switch437 == -1
|
||
if ____cond437 then
|
||
if not inputs.primary.held then
|
||
ac = 0
|
||
end
|
||
break
|
||
end
|
||
____cond437 = ____cond437 or ____switch437 == 0
|
||
if ____cond437 then
|
||
if inputs.primary.held then
|
||
ac = 1
|
||
elseif self.metadata ~= 0 then
|
||
self.metadata = self.metadata - 1
|
||
end
|
||
break
|
||
end
|
||
____cond437 = ____cond437 or ____switch437 == 1
|
||
if ____cond437 then
|
||
local ____temp_148 = not inputs.primary.held
|
||
if not ____temp_148 then
|
||
local ____self_145, ____metadata_146 = self, "metadata"
|
||
local ____self_metadata_147 = ____self_145[____metadata_146] + 1
|
||
____self_145[____metadata_146] = ____self_metadata_147
|
||
____temp_148 = ____self_metadata_147 == 90
|
||
end
|
||
if ____temp_148 then
|
||
if self.metadata < 10 then
|
||
ac = 0
|
||
break
|
||
end
|
||
d = true
|
||
local p = pow(self.metadata)
|
||
self.scale:automate(7, 1 + p ^ 3 * 2)
|
||
resolve(nil, p)
|
||
if fx ~= nil then
|
||
ezecho(
|
||
fx,
|
||
10,
|
||
0.4 + p * 0.2,
|
||
0.25 + p * 0.2,
|
||
0.001
|
||
)
|
||
end
|
||
return
|
||
end
|
||
break
|
||
end
|
||
until true
|
||
rec.size.x = ST:remap(
|
||
self.metadata,
|
||
0,
|
||
194,
|
||
0,
|
||
90
|
||
)
|
||
htext.alpha.value = 1 - math.min(self.metadata / 10, 1)
|
||
local v = pow(self.metadata)
|
||
local s = v ^ 5
|
||
self.position.x = (math.random() - 0.5) * s * 2
|
||
self.position.y = 60 + (math.random() - 0.5) * s * 2
|
||
local c = ST:remap(v ^ 3, 127, 255)
|
||
rec.color.red = c
|
||
rec.color.green = c
|
||
rec.color.blue = c
|
||
if fx == nil and 10 <= self.metadata then
|
||
fx = assets["s$chargethrow"]:instance_forced()
|
||
end
|
||
end):addDrawer(batch.drawer)
|
||
screen:attach(powbar)
|
||
end
|
||
))
|
||
__TS__Await(__TS__New(
|
||
__TS__Promise,
|
||
function(____, resolve)
|
||
local rock
|
||
rock = __TS__New(
|
||
STSprite,
|
||
{
|
||
image = images.rock,
|
||
anchor = 0.5,
|
||
metadata = 0,
|
||
velocity = ST:ray(
|
||
-30,
|
||
ST:remap(power, 5, 10)
|
||
),
|
||
gravity = { y = 0.25 },
|
||
position = { x = 30, y = player.position.y - 10 },
|
||
priority = 500
|
||
}
|
||
):addTicker(function(self)
|
||
map:attach(__TS__New(
|
||
STSprite,
|
||
{
|
||
alpha = ST:remap(power, 0, 0.3),
|
||
image = images.rock,
|
||
anchor = 0.5,
|
||
scale = { x = self.scale.x },
|
||
rotation = self.rotation.value,
|
||
position = self.position,
|
||
priority = 500
|
||
}
|
||
):addTicker(function(self)
|
||
local ____self_alpha_149, ____value_150 = self.alpha, "value"
|
||
local ____self_alpha_value_151 = ____self_alpha_149[____value_150] - 0.1
|
||
____self_alpha_149[____value_150] = ____self_alpha_value_151
|
||
if ____self_alpha_value_151 <= 0 then
|
||
map:detach(self)
|
||
end
|
||
end))
|
||
return function()
|
||
if self.position.y > cam.y + 100 then
|
||
map:detach(rock)
|
||
resolve(nil)
|
||
else
|
||
local ____self_152, ____metadata_153 = self, "metadata"
|
||
local ____self_metadata_154 = ____self_152[____metadata_153] + 1
|
||
____self_152[____metadata_153] = ____self_metadata_154
|
||
repeat
|
||
local ____switch452 = ____self_metadata_154
|
||
local ____cond452 = ____switch452 == 3
|
||
if ____cond452 then
|
||
self.rotation.value = 90
|
||
self.scale.x = -1
|
||
break
|
||
end
|
||
____cond452 = ____cond452 or ____switch452 == 6
|
||
if ____cond452 then
|
||
self.metadata = 0
|
||
self.rotation.value = 0
|
||
self.scale.x = 1
|
||
break
|
||
end
|
||
until true
|
||
end
|
||
end
|
||
end)
|
||
map:attach(rock)
|
||
end
|
||
))
|
||
__TS__Await(ST:pause(60))
|
||
__TS__Await(cam:automate(45, { x = 120 }))
|
||
__TS__Await(ST:pause(30))
|
||
__TS__Await(reader:text(({ text.overworld.golden3, text.overworld.golden5 })[i + 1]))
|
||
local ____i_155 = i
|
||
i = ____i_155 + 1
|
||
if ____i_155 == 0 then
|
||
__TS__Await(ST:pause(15))
|
||
player.stance = "up"
|
||
__TS__Await(ST:pause(30))
|
||
player.stance = "down"
|
||
__TS__Await(ST:pause(45))
|
||
player.stance = "right"
|
||
__TS__Await(ST:pause(60))
|
||
end
|
||
end
|
||
__TS__ArrayMap(
|
||
assets["m$home"].instances,
|
||
function(____, inst)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
__TS__Await(inst.gain:automate(90, 0))
|
||
inst:stop()
|
||
end)
|
||
end
|
||
)
|
||
__TS__Await(ST:pause(60))
|
||
__TS__Await(bb_standard(player, assets["ie$ellipsis"]))
|
||
__TS__Await(ST:pause(15))
|
||
__TS__Await(reader:text(text.overworld.golden6))
|
||
__TS__Await(ST:pause(45))
|
||
__TS__Await(player_walk(0.5, { y = 135 }))
|
||
__TS__Await(ST:pause(10))
|
||
local task = ST:task()
|
||
cam:automate(90, { y = 300 })
|
||
local ____self_164 = ST:pause(60)
|
||
__TS__Await(__TS__PromiseAll({
|
||
____self_164["then"](
|
||
____self_164,
|
||
function()
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
__TS__Await(__TS__New(
|
||
__TS__Promise,
|
||
function(____, resolve)
|
||
local b = false
|
||
local rock
|
||
rock = __TS__New(STSprite, {
|
||
image = images.rock,
|
||
anchor = 0.5,
|
||
metadata = 0,
|
||
gravity = { y = 0.25 },
|
||
velocity = { x = 0.5 },
|
||
position = { x = 30, y = player.position.y - 10 },
|
||
priority = 500
|
||
}):addTicker(function(self)
|
||
if not b then
|
||
map:attach(__TS__New(
|
||
STSprite,
|
||
{
|
||
alpha = ST:remap_clamped(
|
||
self.velocity.y,
|
||
0,
|
||
0.15,
|
||
0,
|
||
10
|
||
),
|
||
image = images.rock,
|
||
anchor = 0.5,
|
||
scale = { x = self.scale.x },
|
||
rotation = self.rotation.value,
|
||
position = self.position,
|
||
priority = 500
|
||
}
|
||
):addTicker(function(self)
|
||
local ____self_alpha_156, ____value_157 = self.alpha, "value"
|
||
local ____self_alpha_value_158 = ____self_alpha_156
|
||
[____value_157] - 0.1
|
||
____self_alpha_156[____value_157] = ____self_alpha_value_158
|
||
if ____self_alpha_value_158 <= 0 then
|
||
map:detach(self)
|
||
end
|
||
end))
|
||
end
|
||
return function()
|
||
if not b and 340 <= self.position.y then
|
||
b = true
|
||
self.position.y = 340
|
||
local ____self_velocity_159, ____y_160 = self.velocity, "y"
|
||
____self_velocity_159[____y_160] = ____self_velocity_159
|
||
[____y_160] * -0.4
|
||
self.velocity.x = 1.5
|
||
assets["s$rockbounce"]:instance()
|
||
task.complete()
|
||
elseif self.position.y > 390 then
|
||
map:detach(rock)
|
||
resolve(nil)
|
||
else
|
||
local ____self_161, ____metadata_162 = self, "metadata"
|
||
local ____self_metadata_163 = ____self_161[____metadata_162] +
|
||
1
|
||
____self_161[____metadata_162] = ____self_metadata_163
|
||
repeat
|
||
local ____switch465 = ____self_metadata_163
|
||
local ____cond465 = ____switch465 == 6
|
||
if ____cond465 then
|
||
self.rotation.value = 90
|
||
self.scale.x = -1
|
||
break
|
||
end
|
||
____cond465 = ____cond465 or ____switch465 == 12
|
||
if ____cond465 then
|
||
self.metadata = 0
|
||
self.rotation.value = 0
|
||
self.scale.x = 1
|
||
break
|
||
end
|
||
until true
|
||
end
|
||
end
|
||
end)
|
||
map:attach(rock)
|
||
end
|
||
))
|
||
__TS__Await(ST:pause(60))
|
||
end)
|
||
end
|
||
),
|
||
task["then"](
|
||
task,
|
||
function()
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
__TS__Await(ST:pause(60))
|
||
__TS__Await(reader:text(text.overworld.golden7))
|
||
__TS__Await(ST:pause(45))
|
||
end)
|
||
end
|
||
)
|
||
}))
|
||
__TS__Await(cam:automate(90, { y = 135 }))
|
||
map:cam_restore(unpack(rg))
|
||
map.camera = player.position
|
||
__TS__Await(ST:pause(60))
|
||
__TS__Await(reader:text(text.overworld.golden8))
|
||
__TS__Await(ST:pause(45))
|
||
__TS__Await(reader:text(text.overworld.golden9))
|
||
__TS__Await(ST:pause(15))
|
||
player.stance = "right"
|
||
__TS__Await(ST:pause(30))
|
||
player.stance = "up"
|
||
__TS__Await(ST:pause(45))
|
||
player.stance = "down"
|
||
__TS__Await(ST:pause(60))
|
||
__TS__Await(reader:text(text.overworld.golden10))
|
||
assets["m$home_full"]:instance()
|
||
game.cutscene = game.cutscene - 1
|
||
else
|
||
__TS__Await(reader:text(text.overworld.broombox3))
|
||
end
|
||
end)
|
||
end,
|
||
show = function(self)
|
||
return accessor.item_rock and accessor.plot < 2
|
||
end
|
||
},
|
||
{
|
||
name = function(self)
|
||
return text.item_cover.name()
|
||
end,
|
||
priority = 102,
|
||
script = function(self, reader)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
__TS__Await(reader:text(text.item_cover.info()))
|
||
end)
|
||
end,
|
||
show = function(self)
|
||
return accessor.item_cover
|
||
end
|
||
},
|
||
{
|
||
name = function(self)
|
||
return text.item_crowbar.name
|
||
end,
|
||
priority = 103,
|
||
script = function(self, reader)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
__TS__Await(reader:text(text.item_crowbar.info))
|
||
end)
|
||
end,
|
||
show = function(self)
|
||
return accessor.item_crowbar
|
||
end
|
||
}
|
||
)
|
||
map:addUpdater(function(self, from, to, physical, x, y)
|
||
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
||
if to == nil then
|
||
return ____awaiter_resolve(nil)
|
||
end
|
||
if physical then
|
||
for key in pairs(pager.storage) do
|
||
if __TS__StringIncludes(key, "#") then
|
||
pager.storage[key] = 0
|
||
end
|
||
end
|
||
if accessor.plot < 1 then
|
||
map.autoplay = false
|
||
for ____, obj in __TS__Iterator(objects("void_window")) do
|
||
obj:destroy()
|
||
end
|
||
local rect = __TS__New(STRectangle, {
|
||
color = 1052688,
|
||
size = { x = 240, y = 180 },
|
||
anchor = 0.5,
|
||
priority = 500,
|
||
blend = STBlend.SUBTRACT
|
||
}):addTicker(function(self)
|
||
self.position.x = x - map.position.x / map.scale.x
|
||
self.position.y = y - map.position.y / map.scale.y
|
||
self.scale.x = 1 / map.scale.x
|
||
self.scale.y = 1 / map.scale.y
|
||
end)
|
||
temp[#temp + 1] = rect
|
||
map:attach(rect)
|
||
else
|
||
for ____, obj in __TS__Iterator(objects("night")) do
|
||
obj:destroy()
|
||
end
|
||
end
|
||
end
|
||
if physical and from == nil then
|
||
if not accessor.tutorial_dialogue then
|
||
local ____self_165 = hintDialogue()
|
||
____self_165["then"](
|
||
____self_165,
|
||
function()
|
||
accessor.tutorial_dialogue = true
|
||
end
|
||
)
|
||
end
|
||
repeat
|
||
local ____switch491 = accessor.plot
|
||
local ____cond491 = ____switch491 == 0.2
|
||
if ____cond491 then
|
||
local ____self_166 = hintInter()
|
||
____self_166["then"](
|
||
____self_166,
|
||
function()
|
||
accessor.plot = 0.3
|
||
end
|
||
)
|
||
end
|
||
____cond491 = ____cond491 or (____switch491 == 0.1 or ____switch491 == 0.2 or ____switch491 == 0.3)
|
||
if ____cond491 then
|
||
local ____opt_167 = daemons.crickets:instance({ gain = 0 })
|
||
if ____opt_167 ~= nil then
|
||
____opt_167.gain:automate(7, 1)
|
||
end
|
||
break
|
||
end
|
||
____cond491 = ____cond491 or (____switch491 == 1 or ____switch491 == 1.1)
|
||
if ____cond491 then
|
||
if accessor.event_home_outside then
|
||
local ____opt_169 = assets["m$home"]:instance({ gain = 0 })
|
||
if ____opt_169 ~= nil then
|
||
____opt_169.gain:automate(7, 1)
|
||
end
|
||
end
|
||
break
|
||
end
|
||
____cond491 = ____cond491 or (____switch491 == 2 or ____switch491 == 3)
|
||
if ____cond491 then
|
||
local ____opt_171 = assets["m$home_full"]:instance({ gain = 0 })
|
||
if ____opt_171 ~= nil then
|
||
____opt_171.gain:automate(7, 1)
|
||
end
|
||
break
|
||
end
|
||
until true
|
||
if accessor.plot < 1 then
|
||
state.mapcolor.saturation = 0.4
|
||
state.mapcolor.value = 0.8
|
||
end
|
||
end
|
||
if updaters[to] ~= nil then
|
||
local p = updaters[to](from, physical, x, y)
|
||
if p ~= nil then
|
||
__TS__Await(p)
|
||
end
|
||
end
|
||
end)
|
||
end)
|
||
player:addDrawer(stepSFX)
|
||
reader.presets.messenger = {
|
||
color = 16777215,
|
||
chunk = 2,
|
||
faces = {},
|
||
font = assets["f$helloplayer"],
|
||
interval = 2,
|
||
voices = { default = { { assets["v$messenger"], 1 } } }
|
||
}
|
||
save_hooks[#save_hooks + 1] = function()
|
||
accessor.location_idx = map.room
|
||
accessor.pager_home = ST:encode(pager.storage)
|
||
end
|
||
local shaderCleanup = shaderSetup()
|
||
local hsv = hsvShader(state.mapcolor)
|
||
map:addDrawer(hsv.drawer)
|
||
return {
|
||
map = map,
|
||
overworld = overworld,
|
||
cleanup = function(self)
|
||
shaderCleanup()
|
||
hsv:release()
|
||
end
|
||
}
|
||
end
|
||
|
||
return ____exports
|