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__ArrayIndexOf = ____lualib.__TS__ArrayIndexOf local __TS__ArraySplice = ____lualib.__TS__ArraySplice local __TS__ArraySlice = ____lualib.__TS__ArraySlice local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes local __TS__PromiseAll = ____lualib.__TS__PromiseAll local __TS__StringAccess = ____lualib.__TS__StringAccess local __TS__Iterator = ____lualib.__TS__Iterator local __TS__ArrayPush = ____lualib.__TS__ArrayPush local __TS__ArrayMap = ____lualib.__TS__ArrayMap local __TS__ArrayPushArray = ____lualib.__TS__ArrayPushArray local __TS__InstanceOf = ____lualib.__TS__InstanceOf local __TS__ArrayFlat = ____lualib.__TS__ArrayFlat local __TS__StringIncludes = ____lualib.__TS__StringIncludes local ____exports = {} local ____storyteller = require("code.engine.storyteller") local ST = ____storyteller.ST local ST_SEMITONE = ____storyteller.ST_SEMITONE local STAnimation = ____storyteller.STAnimation local STAudio = ____storyteller.STAudio local STDaemon = ____storyteller.STDaemon local STFrames = ____storyteller.STFrames local STHitbox = ____storyteller.STHitbox local STImage = ____storyteller.STImage local STObject = ____storyteller.STObject local STPager = ____storyteller.STPager local STPoint = ____storyteller.STPoint local STRectangle = ____storyteller.STRectangle local STSprite = ____storyteller.STSprite local STText = ____storyteller.STText local STValue = ____storyteller.STValue local STValueRandom = ____storyteller.STValueRandom local ____utils = require("code.engine.utils") local bb_standard = ____utils.bb_standard local ezchar = ____utils.ezchar local ____global = require("code.global") local accessor = ____global.accessor local init = ____global.init local random = ____global.random local ____bloom = require("code.shaders.bloom") local bloomShader = ____bloom.default local ____common = require("code.maps.common") local commonAreaGen = ____common.commonAreaGen local commonCharactersGen = ____common.commonCharactersGen local commonResourcesGen = ____common.commonResourcesGen local function charactersGen() return __TS__ObjectAssign( {}, commonCharactersGen(), { hacker = { down = __TS__New(STFrames, "images/characters/hacker/down.json", "images/characters/hacker/down.png"), left = __TS__New(STFrames, "images/characters/hacker/left.json", "images/characters/hacker/left.png"), right = __TS__New(STFrames, "images/characters/hacker/right.json", "images/characters/hacker/right.png"), up = __TS__New(STFrames, "images/characters/hacker/up.json", "images/characters/hacker/up.png") }, mechanic = { down = __TS__New(STFrames, "images/characters/mechanic/down.json", "images/characters/mechanic/down.png"), left = __TS__New(STFrames, "images/characters/mechanic/left.json", "images/characters/mechanic/left.png"), right = __TS__New(STFrames, "images/characters/mechanic/right.json", "images/characters/mechanic/right.png"), up = __TS__New(STFrames, "images/characters/mechanic/up.json", "images/characters/mechanic/up.png") }, thicc = { down = __TS__New(STFrames, "images/characters/thicc/down.json", "images/characters/thicc/down.png"), left = __TS__New(STFrames, "images/characters/thicc/left.json", "images/characters/thicc/left.png"), right = __TS__New(STFrames, "images/characters/thicc/right.json", "images/characters/thicc/right.png"), up = __TS__New(STFrames, "images/characters/thicc/up.json", "images/characters/thicc/up.png") } } ) end function ____exports.resourcesGen(music, sound) local cr = commonResourcesGen(music, sound) return { daemons = __TS__ObjectAssign({}, cr.daemons), file = "maps/redleaf.json", framess = __TS__ObjectAssign( {}, cr.framess, { tree = __TS__New(STFrames, "images/objects/redleaf/tree.json", "images/objects/redleaf/tree.png"), treetop = __TS__New(STFrames, "images/objects/redleaf/treetop.json", "images/objects/redleaf/treetop.png"), leaf = __TS__New(STFrames, "images/objects/redleaf/leaf.json", "images/objects/redleaf/leaf.png"), leaf_small = __TS__New(STFrames, "images/objects/redleaf/leaf_small.json", "images/objects/redleaf/leaf_small.png"), grass = __TS__New(STFrames, "images/objects/redleaf/grass.json", "images/objects/redleaf/grass.png"), bush = __TS__New(STFrames, "images/objects/redleaf/bush.json", "images/objects/redleaf/bush.png"), gate1 = __TS__New(STFrames, "images/objects/redleaf/gate1.json", "images/objects/redleaf/gate1.png"), gate2 = __TS__New(STFrames, "images/objects/redleaf/gate2.json", "images/objects/redleaf/gate2.png"), sapcan = __TS__New(STFrames, "images/objects/redleaf/sapcan.json", "images/objects/redleaf/sapcan.png"), sapcano = __TS__New(STFrames, "images/objects/redleaf/sapcano.json", "images/objects/redleaf/sapcano.png"), pipe = __TS__New(STFrames, "images/objects/redleaf/pipe.json", "images/objects/redleaf/pipe.png"), pipeh = __TS__New(STFrames, "images/objects/redleaf/pipeh.json", "images/objects/redleaf/pipeh.png"), pipeo = __TS__New(STFrames, "images/objects/redleaf/pipeo.json", "images/objects/redleaf/pipeo.png"), pipeho = __TS__New(STFrames, "images/objects/redleaf/pipeho.json", "images/objects/redleaf/pipeho.png"), jbbutton = __TS__New(STFrames, "images/objects/redleaf/jbbutton.json", "images/objects/redleaf/jbbutton.png"), jbdoor = __TS__New(STFrames, "images/objects/redleaf/jbdoor.json", "images/objects/redleaf/jbdoor.png"), junctionbox = __TS__New(STFrames, "images/objects/redleaf/junctionbox.json", "images/objects/redleaf/junctionbox.png"), valve = __TS__New(STFrames, "images/objects/redleaf/valve.json", "images/objects/redleaf/valve.png"), gauge = __TS__New(STFrames, "images/objects/redleaf/gauge.json", "images/objects/redleaf/gauge.png"), noncano = __TS__New(STFrames, "images/objects/redleaf/noncano.json", "images/objects/redleaf/noncano.png"), signextra = __TS__New(STFrames, "images/objects/redleaf/signextra.json", "images/objects/redleaf/signextra.png"), barrelgrass = __TS__New(STFrames, "images/objects/redleaf/barrelgrass.json", "images/objects/redleaf/barrelgrass.png"), treegrass = __TS__New(STFrames, "images/objects/redleaf/treegrass.json", "images/objects/redleaf/treegrass.png"), treeroot = __TS__New(STFrames, "images/objects/redleaf/treeroot.json", "images/objects/redleaf/treeroot.png"), treebranch = __TS__New(STFrames, "images/objects/redleaf/treebranch.json", "images/objects/redleaf/treebranch.png"), cannery = __TS__New(STFrames, "images/objects/redleaf/cannery.json", "images/objects/redleaf/cannery.png"), cannerytop = __TS__New(STFrames, "images/objects/redleaf/cannerytop.json", "images/objects/redleaf/cannerytop.png") } ), images = __TS__ObjectAssign( {}, cr.images, { fencepiece1 = __TS__New(STImage, "images/objects/redleaf/fencepiece1.png"), fencepiece2 = __TS__New(STImage, "images/objects/redleaf/fencepiece2.png"), fencepiece3 = __TS__New(STImage, "images/objects/redleaf/fencepiece3.png"), fencepiece4 = __TS__New(STImage, "images/objects/redleaf/fencepiece4.png"), powertower = __TS__New(STImage, "images/objects/redleaf/powertower.png"), pipec1 = __TS__New(STImage, "images/objects/redleaf/pipec1.png"), pipec2 = __TS__New(STImage, "images/objects/redleaf/pipec2.png"), pipec3 = __TS__New(STImage, "images/objects/redleaf/pipec3.png"), pipec4 = __TS__New(STImage, "images/objects/redleaf/pipec4.png"), jbpipe = __TS__New(STImage, "images/objects/redleaf/jbpipe.png"), jbpipec = __TS__New(STImage, "images/objects/redleaf/jbpipec.png"), jbpipex = __TS__New(STImage, "images/objects/redleaf/jbpipex.png"), pipel = __TS__New(STImage, "images/objects/redleaf/pipel.png"), pipels = __TS__New(STImage, "images/objects/redleaf/pipels.png"), pipehl = __TS__New(STImage, "images/objects/redleaf/pipehl.png"), pipehls = __TS__New(STImage, "images/objects/redleaf/pipehls.png"), struttop = __TS__New(STImage, "images/objects/redleaf/struttop.png"), strutmid = __TS__New(STImage, "images/objects/redleaf/strutmid.png"), strutbot = __TS__New(STImage, "images/objects/redleaf/strutbot.png"), strutuno = __TS__New(STImage, "images/objects/redleaf/strutuno.png"), sidecano = __TS__New(STImage, "images/objects/redleaf/sidecano.png"), saplid = __TS__New(STImage, "images/objects/redleaf/saplid.png"), sign = __TS__New(STImage, "images/objects/redleaf/sign.png"), signpost = __TS__New(STImage, "images/objects/redleaf/signpost.png"), workglove = __TS__New(STImage, "images/objects/redleaf/workglove.png"), workboot = __TS__New(STImage, "images/objects/redleaf/workboot.png"), worktable = __TS__New(STImage, "images/objects/redleaf/worktable.png"), gate1ex1 = __TS__New(STImage, "images/objects/redleaf/gate1ex1.png"), gate1ex2 = __TS__New(STImage, "images/objects/redleaf/gate1ex2.png"), gate1ex3 = __TS__New(STImage, "images/objects/redleaf/gate1ex3.png"), gate1ex4 = __TS__New(STImage, "images/objects/redleaf/gate1ex4.png"), gate1ex5 = __TS__New(STImage, "images/objects/redleaf/gate1ex5.png"), gate2ex1 = __TS__New(STImage, "images/objects/redleaf/gate2ex1.png"), gate2ex2 = __TS__New(STImage, "images/objects/redleaf/gate2ex2.png"), gate2ex3 = __TS__New(STImage, "images/objects/redleaf/gate2ex3.png"), gate2ex4 = __TS__New(STImage, "images/objects/redleaf/gate2ex4.png"), gate2ex5 = __TS__New(STImage, "images/objects/redleaf/gate2ex5.png"), gate2ex6 = __TS__New(STImage, "images/objects/redleaf/gate2ex6.png") } ), sheet = __TS__New(STFrames, "images/maps/redleaf.json", "images/maps/redleaf.png") } end local function areaGen() return commonAreaGen( function(____bindingPattern0) local sound local music music = ____bindingPattern0.music sound = ____bindingPattern0.sound return { ["ic$hacker$werein"] = __TS__New(STImage, "images/characters/hacker/werein.png"), ["ic$player$electrocuted"] = __TS__New(STFrames, "images/characters/player/electrocuted.json", "images/characters/player/electrocuted.png"), ["ic$player$electrocuted_plush"] = __TS__New(STFrames, "images/characters/player/electrocuted_plush.json", "images/characters/player/electrocuted_plush.png"), ["ic$player$slippintimmy"] = __TS__New(STFrames, "images/characters/player/slippintimmy.json", "images/characters/player/slippintimmy.png"), ["ic$player$slippintimmy_plush"] = __TS__New(STFrames, "images/characters/player/slippintimmy_plush.json", "images/characters/player/slippintimmy_plush.png"), ["if$hacker$annoyed"] = __TS__New(STImage, "images/faces/hacker/annoyed.png"), ["if$hacker$happi"] = __TS__New(STImage, "images/faces/hacker/happi.png"), ["if$hacker$default"] = __TS__New(STImage, "images/faces/hacker/default.png"), ["if$hacker$pensive"] = __TS__New(STImage, "images/faces/hacker/pensive.png"), ["if$hacker$surprise"] = __TS__New(STImage, "images/faces/hacker/surprise.png"), ["if$hacker$sweat"] = __TS__New(STImage, "images/faces/hacker/sweat.png"), ["if$hacker$sweat2"] = __TS__New(STImage, "images/faces/hacker/sweat2.png"), ["if$mechanic$angry"] = __TS__New(STImage, "images/faces/mechanic/angry.png"), ["if$mechanic$default"] = __TS__New(STImage, "images/faces/mechanic/default.png"), ["if$mechanic$sad"] = __TS__New(STImage, "images/faces/mechanic/sad.png"), ["if$mechanic$side"] = __TS__New(STImage, "images/faces/mechanic/side.png"), ["if$mechanic$sigh"] = __TS__New(STImage, "images/faces/mechanic/sigh.png"), ["if$mechanic$surprise"] = __TS__New(STImage, "images/faces/mechanic/surprise.png"), ["if$mechanic$suspicious"] = __TS__New(STImage, "images/faces/mechanic/suspicious.png"), ["if$mechanic$what"] = __TS__New(STImage, "images/faces/mechanic/what.png"), ["if$thicc$confused"] = __TS__New(STImage, "images/faces/thicc/confused.png"), ["if$thicc$default"] = __TS__New(STImage, "images/faces/thicc/default.png"), ["if$thicc$happi"] = __TS__New(STImage, "images/faces/thicc/happi.png"), ["if$thicc$laugh"] = __TS__New(STImage, "images/faces/thicc/laugh.png"), ["if$thicc$sad"] = __TS__New(STImage, "images/faces/thicc/sad.png"), ["if$thicc$side"] = __TS__New(STImage, "images/faces/thicc/side.png"), ["if$thicc$sigh"] = __TS__New(STImage, "images/faces/thicc/sigh.png"), ["if$thicc$sleep"] = __TS__New(STImage, "images/faces/thicc/sleep.png"), ["if$thicc$what"] = __TS__New(STImage, "images/faces/thicc/what.png"), ["ig$pipewerx$connection_a"] = __TS__New(STImage, "images/games/pipewerx/connection_a.png"), ["ig$pipewerx$connection_b"] = __TS__New(STImage, "images/games/pipewerx/connection_b.png"), ["ig$pipewerx$connection_c"] = __TS__New(STImage, "images/games/pipewerx/connection_c.png"), ["ig$pipewerx$overlay"] = __TS__New(STImage, "images/games/pipewerx/overlay.png"), ["ig$pipewerx$pipe"] = __TS__New(STImage, "images/games/pipewerx/pipe.png"), ["ig$pipewerx$pipe_corner"] = __TS__New(STImage, "images/games/pipewerx/pipe_corner.png"), ["ig$pipewerx$screen"] = __TS__New(STImage, "images/games/pipewerx/screen.png"), ["ig$pipewerx$tool_cursor"] = __TS__New(STImage, "images/games/pipewerx/tool_cursor.png"), ["m$hacker"] = __TS__New(STDaemon, "music/hacker.ogg", { loop = true, mixer = music }), ["m$redleaf"] = __TS__New(STDaemon, "music/redleaf.ogg", { mixer = music, gain = 1, loop = true, rate = 0.9 }), ["m$iver"] = __TS__New(STDaemon, "music/iver.ogg", { loop = true, mixer = music }), ["m$pipewerx"] = __TS__New(STDaemon, "music/pipewerx.ogg", { loop = true, mixer = music }), ["s$latch"] = __TS__New( STDaemon, __TS__New(STAudio, "sounds/latch.ogg"), { mixer = sound, gain = 0.25 } ), ["s$metalsnip1"] = __TS__New( STDaemon, __TS__New(STAudio, "sounds/metalsnip1.ogg"), { mixer = sound, gain = 0.25 } ), ["s$metalsnip2"] = __TS__New( STDaemon, __TS__New(STAudio, "sounds/metalsnip2.ogg"), { mixer = sound, gain = 0.25 } ), ["s$vcr"] = __TS__New( STDaemon, __TS__New(STAudio, "sounds/vcr.ogg"), { mixer = sound } ), ["s$zap"] = __TS__New( STDaemon, __TS__New(STAudio, "sounds/zap.ogg"), { mixer = sound } ), ["v$hacker1"] = __TS__New( STDaemon, __TS__New(STAudio, "voices/hacker1.ogg"), { gain = 0.65, rate = ST_SEMITONE ^ 3, mixer = sound } ), ["v$hacker2"] = __TS__New( STDaemon, __TS__New(STAudio, "voices/hacker2.ogg"), { gain = 0.65, rate = ST_SEMITONE ^ 3, mixer = sound } ), ["v$hacker3"] = __TS__New( STDaemon, __TS__New(STAudio, "voices/hacker3.ogg"), { gain = 0.65, rate = ST_SEMITONE ^ 3, mixer = sound } ), ["v$hacker4"] = __TS__New( STDaemon, __TS__New(STAudio, "voices/hacker4.ogg"), { gain = 0.65, rate = ST_SEMITONE ^ 3, mixer = sound } ), ["v$mechanic"] = __TS__New( STDaemon, __TS__New(STAudio, "voices/mechanic.ogg"), { mixer = sound, gain = 0.55 } ), ["v$thicc"] = __TS__New( STDaemon, __TS__New(STAudio, "voices/thicc.ogg"), { mixer = sound, gain = 1 } ) } end, ____exports.resourcesGen ) end local function textGen(pager) return { item_gloves = { name = function() return accessor.item_glove1 and accessor.item_glove2 and "Work Gloves" or "Work Glove" end, info = function() return accessor.item_glove1 and accessor.item_glove2 and ({ "(An insulated glove. Good for handling dangerous items.)" }) or ({ "(A pair of insulated gloves. Good for handling dangerous items.)" }) end }, item_boots = { name = function() return accessor.item_boot1 and accessor.item_boot2 and "Work Boots" or "Work Boot" end, info = function() return accessor.item_boot1 and accessor.item_boot2 and ({ "(A sturdy, high-topped boot. Good for traversing hazards.)" }) or ({ "(A pair of sturdy, high-topped boots. Good for traversing hazards.)" }) end }, ponder_arrival = pager:create(0, { "...", "(The forest is beautiful...)" }, { "...", "(I have to keep going...)", "(Standing around won't get me any closer to home.)" }), ponder_chase = pager:create(0, { "(If I could just talk to them...)", "(... there's no time to lose!)" }, { "(... I've got to catch up to them!)" }), ponder_gate = { "...", "(I need a closer look at that gate...)" }, ponder_shock = function() return { "(... hm...)", unpack(accessor.item_glove1 and accessor.item_glove2 and accessor.item_boot1 and accessor.item_boot2 and ({ "(I have these gloves... and these boots...)", "(Oh! I can use these to climb the gate safely!)" }) or (accessor.item_glove1 and accessor.item_glove2 and ((accessor.item_boot1 or accessor.item_boot2) and ({ "(I have these gloves... and this boot...)", "(With one more boot, I could climb the gate safely.)" }) or ({ "(I have these gloves...)", "(If I had something to protect my feet, I could climb the gate safely.)" })) or (accessor.item_boot1 and accessor.item_boot2 and ((accessor.item_glove1 or accessor.item_glove2) and ({ "(I have these boots... and this glove...)", "(With one more glove, I could climb the gate safely.)" }) or ({ "(I have these boots...)", "(If I had something to protect my hands, I could climb the gate safely.)" })) or ((accessor.item_glove1 or accessor.item_glove2) and ((accessor.item_boot1 or accessor.item_boot2) and ({ "(I have this glove... and this boot...)", "(If only I could duplicate them, I could climb the gate safely.)" }) or ({ "(I have this glove...)", "(If I had another glove, and something to protect my feet...)", "(... I could climb the gate safely.)" })) or ((accessor.item_boot1 or accessor.item_boot2) and ({ "(I have this boot...)", "(If I had another boot, and something to protect my hands...)", "(... I could climb the gate safely.)" }) or ({ "(If I had some extra gear to protect myself...)", "(... I could climb the gate safely.)" })))))) } end, ponder_gear = { "(... I think, with this extra gear I've found...)", "(... climbing the gate should be safe.)" }, ponder_unlock = { "(... hm.)", "(Better get going before someone closes the gate again.)" }, ponder_factory = pager:create(0, { "(...让我猜的话,\n这儿看着像座糖浆厂。)", "(不太确定,反正肯定是某种工厂。)", "(不是应该能看到\n好些人在这儿干活吗?)" }, { "...", "(...哎呀,说不定工人\n全休假去了呢。)" }), overworld = { tutorial1 = "Press [X] while moving\nto sprint.", tutorial2 = "Press [←] [→] to climb.", pipewerx1 = "(Press [↑] [↓] [←] [→] to move.)\n(Press [Z] to select a pipe.)", pipewerx2 = "(Press [C] to rotate the pipe.)", pipewerx3 = "(Arrange the pipes to connect\nthe two endpoints.)", pipewerx4 = "(Press [X] to exit.)", system1 = { "Platform Engaged.", "Selecting Mode: Transit", "Selecting Destination: CRIMSON", "Transit In Progress..." }, system2 = "`~1!2@3#4$5%6^7&8*9(0)-_=+[]\\|;:'\",<.>/?", arrival1 = { "..." }, arrival2 = { "(It's the same as before...)", "(... guess I... didn't really know what I was expecting.)" }, arrival3 = { "Whoa." }, arrival4 = { "That's big." }, arrival5 = { "(哎,说到底,这儿不是家啊。)", "(起码... 不用困在怪房子里了。)", "(这么想想,好多了。)" }, arrival6 = { "(...这雨...)", "(...但愿我能找到把伞吧。)" }, stowaway1 = { "...", "H... hello?" }, stowaway2 = { "Wait, don't go! I..." }, stowaway3 = { "... get back here!" }, stowaway4 = { "Hey, you!" }, stowaway5 = { "(There's nothing to be afraid of...)" }, stowaway6 = { "No, no, no!" }, stowaway7 = { "(... slam the gate on me, why don't you...)" }, bushitem1 = { "(There's something buried in here...)", "Pick it up?" }, bushitem2 = { "Yes", "No" }, glover0 = "Work Glove", glover1 = { "(A glove!)", "{color=0xa289dc}Dysu{color=0xffffff} got the Work Glove.", "(Feels... tough.)" }, glover2 = { "(Another glove!)", "{color=0xa289dc}Dysu{color=0xffffff} got the Work Glove." }, glovey1 = { "{color=0xa289dc}Dysu{color=0xffffff} got the Work Glove.", "(A glove!)", "(Feels... tough.)" }, glovey2 = { "{color=0xa289dc}Dysu{color=0xffffff} got the Work Glove.", "(Another glove!)" }, bootey1 = { "{color=0xa289dc}Dysu{color=0xffffff} got the Work Boot.", "(... a single boot.)", "(Surely there's another one around, right?)" }, bootey2 = { "{color=0xa289dc}Dysu{color=0xffffff} got the Work Boot.", "(Ah, there it is.)" }, booter0 = "Work Boot", booter1 = { "(... a single boot.)", "{color=0xa289dc}Dysu{color=0xffffff} got the Work Boot.", "(Surely there's another one around, right?)" }, booter2 = { "(Ah, there it is.)", "{color=0xa289dc}Dysu{color=0xffffff} got the Work Boot." }, drillie1 = pager:create(0, { "(I could just use this drill to open the gate...)", "(... but in doing so, its batteries would be completely drained.)", "(Would I be able to replace them?)" }, { "(Should I use the drill to open the gate, or save it for later?)" }), drillie2 = { "Use The Drill", "Find Another Way" }, drillie3 = { "..." }, drillie4 = { "(... that did the trick.)" }, gateclimb0 = "Gate", gateclimb1 = { "...", "(Ah! Of course!)", "(I'll just climb over it!)" }, gateclimb2a = { "... ugh..." }, gateclimb2b = { "(... guess I'll have to find something else.)" }, gateclimb2c = { "(Wait. I have these gloves and boots...)", "(I could try again with the extra gear to protect myself.)", "Climb over the gate?" }, gateclimb3 = { "(It's electrically charged.)" }, gateclimb4 = { "(Can't climb over the gate without extra gear.)" }, gateclimb5 = pager:create( 0, function() local ____array_0 = __TS__SparseArrayNew(unpack(accessor.event_redleaf_gateclimb == 2 and ({ "(I have the extra gear I need to protect myself.)" }) or ({ "(Wait. I have these gloves and boots now...)", "(I could try again with the extra gear to protect myself.)" }))) __TS__SparseArrayPush(____array_0, "Climb over the gate?") return { __TS__SparseArraySpread(____array_0) } end, { "Climb over the gate?" } ), gateclimb6 = { "Yes", "No" }, gateclimb7 = { "(Third climb's the charm. placeholder :3)" }, gateclimb8 = { "(Alright!)" }, gateclimb9 = { "(Is this... a factory?)" }, gateclimb10 = { "(Time to find out what that rascal was up to.)" } }, trivia = { tree = { "It's a tree! (placeholder :3)" }, barrel = { "Barrel barrel barrel- (placeholder :3)" }, lid = { "A lid. (placeholder :3)" }, facsign = { "\"REDLEAF INDUSTRIES\"\n\"Factory Grounds Nearby\"" }, sapsign = { "\"Kotokura Syrup Exports\"\n\"Redleaf Industries\"" }, carsign = pager:create(0, { "\"Danger: Industrial Vehicles\"", "(Guess I should be careful...)" }, { "\"Danger: Industrial Vehicles\"" }), powertower = { "A powertower? (placeholder :3)" }, placeholder2 = pager:create(0, { "placeholder :3" }) }, trivia_tooltip = { tree = "Tree", barrel = "Barrel", lid = "Barrel Lid", facsign = "Signpost", sapsign = "Signpost", carsign = "Signpost", powertower = "Electrical Tower" } } end function ____exports.default() local ____areaGen_result_1 = areaGen() local activators = ____areaGen_result_1.activators local failer = ____areaGen_result_1.failer local hide = ____areaGen_result_1.hide local hintGen = ____areaGen_result_1.hintGen local overworld = ____areaGen_result_1.overworld local map = ____areaGen_result_1.map local resources = ____areaGen_result_1.resources local reveal = ____areaGen_result_1.reveal local shaderSetup = ____areaGen_result_1.shaderSetup local stepSFX = ____areaGen_result_1.stepSFX local temp = ____areaGen_result_1.temp local tooltip = ____areaGen_result_1.tooltip local unfailer = ____areaGen_result_1.unfailer local ____overworld_2 = overworld local assets = ____overworld_2.assets local save_hooks = ____overworld_2.atlas.save_hooks local game = ____overworld_2.game local player = ____overworld_2.player.player local player_walk = ____overworld_2.player.player_walk local player_hitbox = ____overworld_2.player.player_hitbox local player_walkbox = ____overworld_2.player.player_walkbox local reader = ____overworld_2.reader.reader local object = ____overworld_2.screen.object local objects = ____overworld_2.screen.objects local screen = ____overworld_2.screen.screen local items = ____overworld_2.inventory.items local update = ____overworld_2.inventory.update local inputs = ____overworld_2.inputs local batch = ____overworld_2.batch local ____resources_3 = resources local images = ____resources_3.images local framess = ____resources_3.framess local pager = __TS__New( STPager, random, ST:decode(accessor.pager_redleaf) ) local text = textGen(pager) local function hintSprint() return __TS__New( __TS__Promise, function(____, resolve) player.metadata.last_x = 0 player.metadata.last_y = 0 local hint = hintGen( text.overworld.tutorial1, 0, 30, 0, 60, 0.5 ) ST:when(function() if map.room == 4 or math.abs(player.metadata.last_x) == 3 or math.abs(player.metadata.last_y) == 3 then hint() 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) __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_4 = map.task if ____opt_4 ~= nil then ____opt_4.complete(r) end local ____self_6 = fader.alpha:automate(7, 0) ____self_6["then"]( ____self_6, function() screen:detach(fader) end ) 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("#trivia/" .. key) or entry)) end) end local function genLeaf(ap, startTime, ____bindingPattern0) local ltype local lduration local lcycles local lradius local lsway local ly local lx lx = ____bindingPattern0[1] ly = ____bindingPattern0[2] lsway = ____bindingPattern0[3] lradius = ____bindingPattern0[4] lcycles = ____bindingPattern0[5] lduration = ____bindingPattern0[6] local lcooldown = ____bindingPattern0[7] ltype = ____bindingPattern0[8] local startPos = ap:subtract(0, 265):add(lx, ly / 2) local endY = ap.y + ly / 2 local dist = endY - startPos.y local function leafTicker(self) local tick = ST.time - startTime if tick < lduration + (ltype == 0 and 90 or 45) then local tickClamped = math.min(tick, lduration) self.frame = math.floor(tickClamped / (ltype == 0 and 9 or 3)) % 6 local p = tickClamped / lduration local q = ST:bezier(p, 0, 1, 1) local r = ST:remap( ST:wave(p * lcycles), -1, 1 ) * lsway self.rotation.value = math.floor((r - 45) / 15 + 0.5) * 15 self.position:set(startPos:add(q * (dist / -2), q * dist - lradius):add(ST:ray(90 + r, lradius)):round()) self.priority = endY - 4 self.alpha.value = 1 - math.max(tick - (lduration + (ltype == 0 and 30 or 15)), 0) / (ltype == 0 and 60 or 30) else map:detach(self) local i = __TS__ArrayIndexOf(temp, self) if i ~= -1 then __TS__ArraySplice(temp, i, 1) end end end local leaf = __TS__New(STAnimation, { frames = ({ framess.leaf, framess.leaf_small })[ltype + 1], anchor = 0.5, priority = endY }):addTicker( leafTicker) leafTicker(leaf) map:attach(leaf) temp[#temp + 1] = leaf end local function sprayLeaf(ap) local i = 0 local limit = 1 + math.floor(math.random() ^ 2 * 2) while i < limit do local depth = ap.y + (math.random() * 2 - 1) * 5 local position = ap:add( (math.random() * 2 - 1) * 5, -5 - math.random() * 25 ) local leaf = __TS__New( STAnimation, { position = position, frames = framess.leaf_small, anchor = 0.5, priority = depth, gravity = { y = 0.125 }, direction = 1, velocity = __TS__New( STPoint, ST:ray( ap:angle(position) + (math.random() * 2 - 1) * 15, 1 + math.random() ) ), spin = math.random() * 6 - 2, metadata = -1 } ):addTicker(function(self) if self.metadata ~= -1 then local ____self_8, ____metadata_9 = self, "metadata" local ____self_metadata_10 = ____self_8[____metadata_9] + 1 ____self_8[____metadata_9] = ____self_metadata_10 if ____self_metadata_10 == 45 then map:detach(self) local i = __TS__ArrayIndexOf(temp, self) if i ~= -1 then __TS__ArraySplice(temp, i, 1) end return end self.alpha.value = 1 - math.max(self.metadata - 15, 0) / 30 return end return function() if depth <= self.position.y then self.position.y = depth self.metadata = 0 self.gravity.x = 0 self.gravity.y = 0 self.velocity.x = 0 self.velocity.y = 0 self.direction = 0 self.spin.value = 0 end end end):addDrawer(function(self) local ____self_position_7 = self.position local x = ____self_position_7.x local y = ____self_position_7.y self.position.x = math.floor(x + 0.5) self.position.y = math.floor(y + 0.5) local r = self.rotation.value self.rotation.value = math.floor(self.rotation.value / 15 + 0.5) * 15 return function() self.position.x = x self.position.y = y self.rotation.value = r end end) map:attach(leaf) temp[#temp + 1] = leaf i = i + 1 end end local state = { bushprompt = false } local characters = charactersGen() local scripts = { trans = function(test, args) local ____opt_11 = map.task if ____opt_11 ~= nil then ____opt_11.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, 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, fastvert = function() if game.c_up then local ____player_position_13, ____y_14 = player.position, "y" ____player_position_13[____y_14] = ____player_position_13[____y_14] - 1 elseif game.c_down then local ____player_position_15, ____y_16 = player.position, "y" ____player_position_15[____y_16] = ____player_position_15[____y_16] + 1 end end, stowaway1 = function() return __TS__AsyncAwaiter(function(____awaiter_resolve) if accessor.plot < 5 then accessor.plot = 5 game.cutscene = game.cutscene + 1 local position = assets["m$redleaf"].instances[1].position.value assets["m$redleaf"]:stop() __TS__Await(ST:pause(5)) local stowbush = object("stowbush").self stowbush.metadata.funny() local stowaway = ezchar({ stances = characters.stowaway, stance = "left", position = stowbush.position:subtract(25, 5), color = 15501672 }):addDrawer(stepSFX) sprayLeaf(stowaway.position) map:attach(stowaway) assets["s$step_bush"]:instance({ rate = 1.25, gain = 0.4 }) local ____self_17 = stowaway:walk(2, { x = 130 }) local ____self_17_then_result_23 = ____self_17["then"]( ____self_17, function() return bb_standard(stowaway, assets["ie$surprise"]) end ) local ____self_22 = ST:pause(5) __TS__Await(__TS__PromiseAll({ ____self_17_then_result_23, ____self_22["then"]( ____self_22, function() return __TS__AsyncAwaiter(function(____awaiter_resolve) player.stance = "right" __TS__Await(bb_standard(player, assets["ie$surprise"])) __TS__Await(ST:pause(15)) local ____temp_19 if math.abs(player.position.y - 75) > 30 then local ____self_18 = player_walk(1.5, { y = 75 }) ____temp_19 = { ____self_18["then"]( ____self_18, function() player.stance = "right" end ) } else ____temp_19 = {} end local ____array_21 = __TS__SparseArrayNew(unpack(____temp_19)) local ____self_20 = ST:pause(20) __TS__SparseArrayPush( ____array_21, ____self_20["then"]( ____self_20, function() return __TS__AsyncAwaiter(function(____awaiter_resolve) __TS__Await(reader:text(text.overworld.stowaway1)) end) end ) ) __TS__Await(__TS__PromiseAll({ __TS__SparseArraySpread(____array_21) })) end) end ) })) __TS__Await(ST:pause(45)) __TS__Await(bb_standard(stowaway, assets["ie$ellipsis"])) __TS__Await(ST:pause(30)) local ____self_24 = stowaway:walk(2.5, { x = 120 }, { y = 0 }) local ____self_24_then_result_28 = ____self_24["then"]( ____self_24, function() map:detach(stowaway) end ) local ____self_27 = ST:pause(15) __TS__Await(__TS__PromiseAll({ ____self_24_then_result_28, ____self_27["then"]( ____self_27, function() local ____temp_26 = reader:text(text.overworld.stowaway2) local ____self_25 = ST:pause(10) return __TS__PromiseAll({ ____temp_26, ____self_25["then"]( ____self_25, function() return __TS__AsyncAwaiter(function(____awaiter_resolve) __TS__Await(player_walk(2.5, { x = 110 - (player.position.y - 50) }, { x = 110, y = 50 })) player.stance = "up" end) end ) }) end ) })) __TS__Await(ST:pause(60)) __TS__Await(reader:text(text.overworld.stowaway3)) assets["m$redleaf"]:instance_forced({ position = position, rate = 1.2 }) game.cutscene = game.cutscene - 1 local ____self_29 = hintSprint() ____self_29["then"]( ____self_29, function() accessor.tutorial_sprint = false end ) end end) end, glover = function(test) if test then tooltip(text.overworld.glover0) return end accessor.item_glove1 = 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("glover") if ____opt_30 ~= nil then ____opt_30:destroy() end local ____opt_32 = object("glover") if ____opt_32 ~= nil then ____opt_32:destroy() end end } reader:text(accessor.item_glove2 and text.overworld.glover2 or text.overworld.glover1) end, glovey = function() return __TS__AsyncAwaiter(function(____awaiter_resolve) if state.bushprompt then return ____awaiter_resolve(nil) end __TS__Await(reader:text(text.overworld.bushitem1)) __TS__Await(reader:choice(text.overworld.bushitem2)) if game.r_choice == 1 then state.bushprompt = true return ____awaiter_resolve(nil) end accessor.item_glove2 = true update() assets["s$itemget"]:instance() local ____opt_35 = object("glovey") if ____opt_35 ~= nil then ____opt_35:destroy() end __TS__Await(reader:text(accessor.item_glove1 and text.overworld.glovey2 or text.overworld.glovey1)) end) end, booter = function(test) if test then tooltip(text.overworld.booter0) return end accessor.item_boot1 = true update() local ____reader_headers_41 = reader.headers ____reader_headers_41[#____reader_headers_41 + 1] = { "a", function() assets["s$itemget"]:instance() local ____opt_37 = object("booter") if ____opt_37 ~= nil then ____opt_37:destroy() end local ____opt_39 = object("booter") if ____opt_39 ~= nil then ____opt_39:destroy() end end } reader:text(accessor.item_boot2 and text.overworld.booter2 or text.overworld.booter1) end, bootey = function() return __TS__AsyncAwaiter(function(____awaiter_resolve) if state.bushprompt then return ____awaiter_resolve(nil) end __TS__Await(reader:text(text.overworld.bushitem1)) __TS__Await(reader:choice(text.overworld.bushitem2)) if game.r_choice == 1 then state.bushprompt = true return ____awaiter_resolve(nil) end accessor.item_boot2 = true update() assets["s$itemget"]:instance() local ____opt_42 = object("bootey") if ____opt_42 ~= nil then ____opt_42:destroy() end __TS__Await(reader:text(accessor.item_boot1 and text.overworld.bootey2 or text.overworld.bootey1)) end) end, gateclimb = function(test) return __TS__AsyncAwaiter(function(____awaiter_resolve) if player.stance ~= "right" or accessor.state_redleaf_gate ~= 0 then return ____awaiter_resolve(nil) end if test then tooltip(text.overworld.gateclimb0) return ____awaiter_resolve(nil) end game.cutscene = game.cutscene + 1 if accessor.event_redleaf_gateclimb == 0 then accessor.event_redleaf_gateclimb = 1 __TS__Await(reader:text(text.overworld.gateclimb1)) __TS__Await(player_walk(1, { x = 208 })) if math.abs(player.position.y - 90) > 6 then __TS__Await(player_walk(1.5, { y = 90 })) end __TS__Await(ST:pause(25)) player.stance = "left" __TS__Await(ST:pause(35)) player.stance = "right" __TS__Await(ST:pause(40)) local prio = player.position.y __TS__Await(player.position:step(0.5, { x = 213, y = prio - 3 })) local electro = __TS__New(STAnimation, { frames = accessor.floof and assets["ic$player$electrocuted_plush"] or assets["ic$player$electrocuted"], anchor = { x = 0.5, y = 1 }, priority = 51, position = player .position }):addDrawer(function(self) if self.frame == 0 then self.color.red = 162 self.color.green = 137 self.color.blue = 220 else self.color.red = 255 self.color.green = 255 self.color.blue = 255 end end) player.alpha.value = 0 map:attach(electro) assets["m$redleaf"]:stop() assets["s$step_metal"]:instance({ rate = 1.5 }) local zaps = 0 while zaps < 6 do assets["s$zap"]:instance() __TS__Await(ST:pause(3)) electro.frame = 1 __TS__Await(ST:pause(3)) electro.frame = 0 zaps = zaps + 1 end local spin = 0.1 __TS__Await(__TS__New( __TS__Promise, function(____, resolve) electro:addTicker(function(self) local ____self_rotation_44, ____value_45 = self.rotation, "value" ____self_rotation_44[____value_45] = ____self_rotation_44[____value_45] - spin spin = spin * 1.1 if self.rotation.value <= -90 then resolve(nil) end end) end )) map:detach(electro) local v = __TS__New(STValue, -0.5) local p = electro.position:add(-17, 8) local y = __TS__New(STValue, p.y) local weresodead = __TS__New(STAnimation, { anchor = { x = 0.5, y = 1 }, position = p, frames = assets["ic$player$sleep"], priority = prio, color = 10652124 }):addTicker(function(self) p.x = p.x + v.value self.position.x = math.floor(p.x + 0.5) self.position.y = math.floor(y.value + 0.5) end) map:attach(weresodead) v:automate(20, 0) y:automate(5, y.value - 2, y.value - 2, y.value) local plusher = nil if accessor.floof then local pv = __TS__New(STValue, -1.7) local pp = weresodead.position:subtract(12, 0) local py = __TS__New(STValue, p.y) plusher = __TS__New(STSprite, { image = images.goatplush, anchor = { x = 0.5, y = 1 }, position = pp, priority = prio + 0.1, color = 10652124 }):addTicker(function(self) pp.x = pp.x + pv.value self.position.x = math.floor(pp.x + 0.5) self.position.y = math.floor(py.value + 0.5) end) map:attach(plusher) pv:automate(35, 0) py:automate(15, py.value - 7, py.value - 7, py.value) end local sh = __TS__New(STValue, 2) local function shTicker() screen.position.x = (math.random() - 0.5) * sh.value screen.position.y = (math.random() - 0.5) * sh.value end map:addTicker(shTicker) local ____self_46 = sh:automate(15, 0) ____self_46["then"]( ____self_46, function() screen.position.x = 0 screen.position.y = 0 map:removeTicker(shTicker) end ) __TS__Await(ST:pause(120)) weresodead.frame = 1 __TS__Await(ST:pause(30)) __TS__Await(reader:text(text.overworld.gateclimb2a)) __TS__Await(ST:pause(20)) local musi = assets["m$redleaf"]:instance_forced({ gain = 0 }) musi.gain:automate(60, 1) __TS__Await(ST:pause(30)) map:detach(weresodead) player.position.x = weresodead.position.x player.position.y = weresodead.position.y player.alpha.value = 1 if accessor.floof then player.metadata.floof = false end player.stance = "right" if accessor.floof then __TS__Await(ST:pause(30)) __TS__Await(player_walk(1.5, { x = plusher.position.x + 15 })) __TS__Await(ST:pause(25)) map:detach(plusher) player.metadata.floof = true end __TS__Await(ST:pause(45)) player.stance = "down" if accessor.item_glove1 and accessor.item_glove2 and accessor.item_boot1 and accessor.item_boot2 then __TS__Await(reader:text(text.overworld.gateclimb2c)) __TS__Await(reader:choice(text.overworld.gateclimb6)) if game.r_choice == 1 then game.cutscene = game.cutscene - 1 return ____awaiter_resolve(nil) end else __TS__Await(reader:text(text.overworld.gateclimb2b)) game.cutscene = game.cutscene - 1 return ____awaiter_resolve(nil) end __TS__Await(player_walk(1, { x = 208 })) __TS__Await(ST:pause(30)) else if accessor.item_glove1 and accessor.item_glove2 and accessor.item_boot1 and accessor.item_boot2 then __TS__Await(reader:text(text.overworld.gateclimb5("overworld/gateclimb5"))) __TS__Await(reader:choice(text.overworld.gateclimb6)) if game.r_choice == 1 then game.cutscene = game.cutscene - 1 return ____awaiter_resolve(nil) end elseif accessor.event_redleaf_gateclimb == 2 then __TS__Await(reader:text(text.overworld.gateclimb4)) game.cutscene = game.cutscene - 1 return ____awaiter_resolve(nil) else __TS__Await(reader:text(text.overworld.gateclimb3)) game.cutscene = game.cutscene - 1 return ____awaiter_resolve(nil) end __TS__Await(player_walk(1, { x = 208 })) if math.abs(player.position.y - 90) > 6 then __TS__Await(player_walk(1.5, { y = 90 })) player.stance = "right" __TS__Await(ST:pause(30)) end end accessor.event_redleaf_gateclimb = 2 __TS__Await(reader:text(text.overworld.gateclimb7)) local prio = player.position.y __TS__Await(player.position:step(0.5, { x = 213, y = prio - 3 })) local climber = __TS__New(STAnimation, { frames = accessor.floof and assets["ic$player$slippintimmy_plush"] or assets["ic$player$slippintimmy"], anchor = { x = 0.5, y = 1 }, priority = 51, position = player.position, color = 10652124 }) player.alpha.value = 0 map:attach(climber) assets["s$step_metal"]:instance({ rate = 1.5 }) local r = 0 while r < 2 do local htext = __TS__New(STText, { anchor = 0.5, font = assets["f$helloplayer"], color = 8355711, content = text.overworld .tutorial2 }) 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_47 = htext.alpha:automate(7, 0) ____self_47["then"]( ____self_47, function() jusant:detach(htext) end ) end repeat local ____switch106 = grabbing local ____cond106 = ____switch106 == 0 if ____cond106 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 ____cond106 = ____cond106 or ____switch106 == 1 if ____cond106 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 ____cond106 = ____cond106 or ____switch106 == 2 if ____cond106 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 ____switch128 = grabbing local ____cond128 = ____switch128 == 0 if ____cond128 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 ____cond128 = ____cond128 or ____switch128 == 1 if ____cond128 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 ____cond128 = ____cond128 or ____switch128 == 2 if ____cond128 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 if r == 0 then local ____climber_position_48, ____y_49 = climber.position, "y" ____climber_position_48[____y_49] = ____climber_position_48[____y_49] - step * 2 else local ____climber_position_50, ____y_51 = climber.position, "y" ____climber_position_50[____y_51] = ____climber_position_50[____y_51] + step * 2 end if grabbing ~= 2 then climber.frame = 1 - climber.frame end assets["s$step_metal"]:instance({ rate = 1.5 }) if r == 0 then if climber.position.y <= prio - 30 then side = 2 resolve(nil) end else if prio - 3 <= climber.position.y then side = 2 resolve(nil) end end end end) end )) local ____self_52 = jusant.alpha:automate(15, 0) ____self_52["then"]( ____self_52, function() screen:detach(jusant) end ) climber.priority = 86 __TS__Await(ST:pause(60)) if r == 0 then climber.position.x = 223 climber.scale.x = -1 local cby = climber.position.y climber:addTicker(function(self) self.priority = self.position.y <= cby and 86 or 51 end) end r = r + 1 end climber.velocity.x = 1.2 climber.velocity.y = -0.7 climber.gravity.y = 0.25 __TS__Await(ST:when(function() return prio <= climber.position.y end)) map:detach(climber) player.position.x = math.floor(climber.position.x + 0.5) player.position.y = prio player.stance = "left" player.alpha.value = 1 assets["s$step_gravel"]:instance() __TS__Await(ST:pause(30)) __TS__Await(reader:text(text.overworld.gateclimb8)) __TS__Await(ST:pause(20)) player.stance = "right" __TS__Await(ST:pause(30)) local cam = map:cam_clamped() map.camera = cam local camX = cam.x local reg = map:cam_free() __TS__Await(cam:automate(75, { x = 320 })) __TS__Await(ST:pause(55)) __TS__Await(reader:text(text.overworld.gateclimb9)) __TS__Await(ST:pause(35)) __TS__Await(cam:automate(75, { x = camX })) map:cam_restore(unpack(reg)) map.camera = player.position __TS__Await(ST:pause(45)) player.stance = "down" __TS__Await(reader:text(text.overworld.gateclimb10)) game.cutscene = game.cutscene - 1 end) end } local scripts_ex = { drillie = function() return __TS__AsyncAwaiter(function(____awaiter_resolve) if map.room ~= 6 or accessor.state_redleaf_gate ~= 0 then return ____awaiter_resolve(nil, false) end __TS__Await(reader:text(text.overworld.drillie1("overworld/drillie1"))) __TS__Await(reader:choice(text.overworld.drillie2)) if game.r_choice == 1 then return ____awaiter_resolve(nil) end game.cutscene = game.cutscene + 1 __TS__Await(reader:text(text.overworld.drillie3)) __TS__Await(ST:pause(30)) if player.position.x > 25 and player.position.y < (player.position.x < 100 and 46 or 63) then if player.position.x < 80 then __TS__Await(player_walk(1.5, { x = 50 })) elseif player.position.x < 140 then __TS__Await(player_walk(1.5, { x = 120 })) else __TS__Await(player_walk(1.5, { x = 190 })) end __TS__Await(player_walk(1.5, { y = 70 })) elseif player.position.x > 208 then __TS__Await(player_walk(1.5, { x = 205 })) end __TS__Await(player_walk(1.5, { x = 205, y = 90 })) if player.stance ~= "right" then __TS__Await(ST:pause(20)) player.stance = "right" end __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 = 80 })) player.stance = "right" __TS__Await(ST:pause(15)) bb_standard(player, assets["ie$surprise"]) assets["s$driller"]:instance() __TS__Await(ST:pause(30)) __TS__Await(player_walk(1.5, { y = 100 })) player.stance = "right" __TS__Await(ST:pause(15)) bb_standard(player, assets["ie$surprise"]) assets["s$driller"]:instance() __TS__Await(ST:pause(30)) __TS__Await(player_walk(1.5, { y = 90 })) player.stance = "right" __TS__Await(ST:pause(40)) accessor.state_redleaf_gate = 1 local ____opt_53 = object("wallbox") if ____opt_53 ~= nil then ____opt_53:destroy() end reveal("gatebox") local gate1 = object("gate1").self gate1.frame = 1 gate1:addTicker(function(self) if player.position.x < 212 then self.priority = 85 else self.priority = 77 end end) local gate2 = object("gate2").self gate2.frame = 1 gate2:addTicker(function(self) if player.position.x < 200 then self.priority = 112 else self.priority = 121 end end) __TS__Await(ST:pause(30)) __TS__Await(reader:text(text.overworld.drillie4)) game.cutscene = game.cutscene - 1 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 < 5 then __TS__Await(reader:text(text.ponder_arrival("ponder_arrival"))) elseif accessor.plot < 7 then __TS__Await(reader:text(text.ponder_chase("ponder_chase"))) elseif accessor.event_redleaf_gateclimb == 0 then __TS__Await(reader:text(text.ponder_gate)) elseif accessor.event_redleaf_gateclimb == 1 then __TS__Await(reader:text(text.ponder_shock())) if accessor.item_glove1 and accessor.item_glove2 and accessor.item_boot1 and accessor.item_boot2 then accessor.event_redleaf_gateclimb = 2 end elseif map.room < 7 then if accessor.state_redleaf_gate == 0 then __TS__Await(reader:text(text.ponder_gear)) else __TS__Await(reader:text(text.ponder_unlock)) end else __TS__Await(reader:text(text.ponder_factory("ponder_factory"))) end game.cutscene = game.cutscene - 1 end) end } local updaters = { [0] = function(from, physical) return __TS__AsyncAwaiter(function(____awaiter_resolve) if accessor.item_glove1 then local ____opt_55 = object("glover") if ____opt_55 ~= nil then ____opt_55:destroy() end local ____opt_57 = object("glover") if ____opt_57 ~= nil then ____opt_57:destroy() end end if physical and accessor.plot < 4 then game.cutscene = game.cutscene + 1 accessor.plot = 4 map.autoplay = false local fd = __TS__New(STRectangle, { color = 12500670, priority = 1000, size = { x = 240, y = 180 }, anchor = 0.5 }) screen:attach(fd) local speed = assets["s$warp_speed"]:instance_forced({ gain = 0 }) __TS__Await(speed.gain:automate(60, 1)) local c = "" local gchar = text.overworld.system2 local system = __TS__New(STText, { anchor = 0.5, font = assets["f$helloplayer"], color = 0, priority = 1001, metadata = 0 }):addTicker(function(self) local arf = self.metadata if arf ~= 0 then self.metadata = self.metadata - 1 end self.content = "" for ____, char in __TS__Iterator(c) do if math.random() < arf / 6 then self.content = self.content .. __TS__StringAccess( gchar, math.floor(math.random() * #gchar) ) else self.content = self.content .. char end end end) for ____, line in ipairs(text.overworld.system1) do assets["s$vcr"]:instance() screen:attach(system) c = line system.metadata = 7 __TS__Await(ST:pause(60)) screen:detach(system) __TS__Await(ST:pause(45)) end 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 local rg = map:cam_free() local camY = cam.y local myY = camY local intensity = __TS__New(STValue, 1) 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, 5, 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) local ____self_59 = fd.alpha:automate(120, 0, 0) ____self_59["then"]( ____self_59, function() screen:detach(fd) end ) local ____self_60 = intensity:automate(120, 0) ____self_60["then"]( ____self_60, function() map:removeDrawer(bloom.drawer) bloom:release() screen:removeTicker(screenTicker) map.camera = player.position map:cam_restore(unpack(rg)) end ) map:play(map.rooms[1].score) map.music.gain.value = 0 map.music.gain:automate(120, 1) assets["s$warp_out"]:instance() local ____self_61 = ST:pause(15) ____self_61["then"]( ____self_61, function() speed:stop() end ) local sleeper = __TS__New(STAnimation, { anchor = { x = 0.5, y = 1 }, position = player.position, frames = assets["ic$player$sleep"], priority = player.position.y, color = 10652124 }) map:attach(sleeper) player.alpha.value = 0 local plusher = nil if accessor.floof then plusher = __TS__New(STSprite, { image = images.goatplush, anchor = { x = 0.5, y = 1 }, position = { x = 70, y = 115 }, priority = 115, color = 10652124 }) map:attach(plusher) end __TS__Await(ST:pause(175)) sleeper.frame = 1 __TS__Await(ST:pause(40)) __TS__Await(reader:text(text.overworld.arrival1)) __TS__Await(ST:pause(50)) player.alpha.value = 1 if accessor.floof then player.metadata.floof = false end map:detach(sleeper) player.stance = "right" __TS__Await(ST:pause(25)) player.stance = "down" __TS__Await(ST:pause(55)) __TS__Await(player_walk(1, { y = 140 }, { x = 35 })) __TS__Await(ST:pause(35)) __TS__Await(reader:text(text.overworld.arrival2)) __TS__Await(ST:pause(25)) player.stance = "right" __TS__Await(ST:pause(35)) local silly = __TS__New(STSprite, { anchor = { x = 0.5, y = 1 }, position = player.position, color = 10652124, priority = player.position.y, image = 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.arrival3)) assets["m$redleaf"]:instance() __TS__Await(ST:pause(25)) cam:set(map:cam_clamped()) map.camera = cam local camX = cam.x __TS__Await(cam:automate(100, { x = map.camera_max.x })) __TS__Await(ST:pause(55)) __TS__Await(reader:text(text.overworld.arrival4)) map:detach(silly) player.alpha.value = 1 __TS__Await(ST:pause(35)) __TS__Await(cam:automate(100, { x = camX })) map.camera = player.position if accessor.floof then __TS__Await(ST:pause(15)) __TS__Await(player_walk(1.5, { x = 70 }, { y = 120 })) __TS__Await(ST:pause(25)) map:detach(plusher) player.metadata.floof = true __TS__Await(ST:pause(35)) player.stance = "right" 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.arrival5)) __TS__Await(ST:pause(55)) player.stance = "down" __TS__Await(reader:text(text.overworld.arrival6)) game.cutscene = game.cutscene - 1 end end) end, [2] = function(from, physical) if accessor.item_boot2 then local ____opt_62 = object("bootey") if ____opt_62 ~= nil then ____opt_62:destroy() end end if physical then if accessor.plot < 5 then local stowbush = object("stowbush").self local sx = stowbush.scale.x stowbush.scale.x = sx / 1.05 stowbush.scale.y = 1.05 stowbush.metadata.funny = function() stowbush.scale:automate(5, { x = 1.05 * sx, y = 1 / 1.05 }, { x = sx, y = 1 }) end elseif accessor.tutorial_sprint then local ____self_64 = hintSprint() ____self_64["then"]( ____self_64, function() accessor.tutorial_sprint = false end ) end end end, [4] = function(from, physical) return __TS__AsyncAwaiter(function(____awaiter_resolve) if physical and accessor.plot < 6 then accessor.plot = 6 game.cutscene = game.cutscene + 1 local stowaway = ezchar({ stances = characters.stowaway, stance = "left", position = { x = 165, y = 85 }, color = 15501672 }) :addDrawer(stepSFX) map:attach(stowaway) __TS__Await(stowaway:walk(2, { x = 180 })) __TS__Await(ST:pause(20)) stowaway.stance = "down" __TS__Await(ST:pause(40)) player.position.x = math.min( math.max(player.position.x, 80), 160 ) local ____temp_66 = reader:text(text.overworld.stowaway4) local ____player_walk_result_67 = player_walk(1.5, { y = 160 }, { x = 160, y = 120 }) local ____self_65 = ST:pause(20) __TS__Await(__TS__PromiseAll({ ____temp_66, ____player_walk_result_67, ____self_65["then"]( ____self_65, function() return __TS__AsyncAwaiter(function(____awaiter_resolve) __TS__Await(stowaway:walk(2.5, { x = 260 })) map:detach(stowaway) end) end ) })) __TS__Await(ST:pause(45)) __TS__Await(reader:text(text.overworld.stowaway5)) game.cutscene = game.cutscene - 1 end end) end, [5] = function() if accessor.item_glove2 then local ____opt_68 = object("glovey") if ____opt_68 ~= nil then ____opt_68:destroy() end end end, [6] = function(from, physical) return __TS__AsyncAwaiter(function(____awaiter_resolve) if accessor.item_boot1 then local ____opt_70 = object("booter") if ____opt_70 ~= nil then ____opt_70:destroy() end local ____opt_72 = object("booter") if ____opt_72 ~= nil then ____opt_72:destroy() end end if accessor.state_redleaf_gate ~= 0 then local ____opt_74 = object("wallbox") if ____opt_74 ~= nil then ____opt_74:destroy() end local gate1 = object("gate1").self gate1.frame = 1 gate1:addTicker(function(self) if player.position.x < 212 then self.priority = 85 else self.priority = 77 end end) local gate2 = object("gate2").self gate2.frame = 1 gate2:addTicker(function(self) if player.position.x < 200 then self.priority = 112 else self.priority = 121 end end) else hide("gatebox") end if physical and accessor.plot < 7 then accessor.plot = 7 game.cutscene = game.cutscene + 1 local gate1 = object("gate1").self local gate2 = object("gate2").self gate1.frame = 1 gate2.frame = 1 local stowaway = ezchar({ stances = characters.stowaway, stance = "left", position = { x = 140, y = 100 }, color = 15501672 }) :addDrawer(stepSFX) map:attach(stowaway) __TS__Await(ST:pause(10)) __TS__Await(bb_standard(stowaway, assets["ie$surprise"])) __TS__Await(ST:pause(5)) local ____self_76 = ST:when(function() return 230 <= stowaway.position.x end) local ____self_76_then_result_79 = ____self_76["then"]( ____self_76, function() return __TS__AsyncAwaiter(function(____awaiter_resolve) gate1.frame = 0 gate2.frame = 0 __TS__Await(ST:pause(20)) __TS__Await(reader:text(text.overworld.stowaway6)) end) end ) local ____self_77 = stowaway:walk(2.5, { x = 260 }) local ____self_77_then_result_80 = ____self_77["then"]( ____self_77, function() map:detach(stowaway) end ) local ____self_78 = ST:pause(15) __TS__Await(__TS__PromiseAll({ ____self_76_then_result_79, ____self_77_then_result_80, ____self_78["then"]( ____self_78, function() return player_walk(2, { x = 180, y = 90 }) end ) })) __TS__Await(ST:pause(45)) player.stance = "down" __TS__Await(reader:text(text.overworld.stowaway7)) 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_81 = __TS__Await(scripts_ex[name]()) if ____TS__Await_result_81 == nil then ____TS__Await_result_81 = true end return ____awaiter_resolve(nil, ____TS__Await_result_81) end return ____awaiter_resolve(nil, false) end) end __TS__ArrayPush( items, { name = function(self) return text.item_gloves.name() end, priority = 100, script = function(self, reader) return __TS__AsyncAwaiter(function(____awaiter_resolve) __TS__Await(reader:text(text.item_gloves.info())) end) end, show = function(self) return accessor.item_glove1 or accessor.item_glove2 end }, { name = function(self) return text.item_boots.name() end, priority = 101, script = function(self, reader) return __TS__AsyncAwaiter(function(____awaiter_resolve) __TS__Await(reader:text(text.item_boots.info())) end) end, show = function(self) return accessor.item_boot1 or accessor.item_boot2 end } ) map:addUpdater(function(self, from, to, physical, x, y, last) return __TS__AsyncAwaiter(function(____awaiter_resolve) if to == nil then return ____awaiter_resolve(nil) end for ____, obj in __TS__Iterator(objects("bush")) do do local anim = obj.self if anim.metadata.room ~= to then goto __continue231 end local ap = anim.position:clone() anim.priority = anim.position.y - 0.6 local leafRs = nil local leafRand = __TS__New( STValueRandom, (ap.x - x) * 1000, (ap.y - y) * 1000, function() return leafRs end, function(state) leafRs = state return leafRs end ) anim.frame = leafRand:int(2) anim.scale.x = leafRand:next() < 0.5 and -1 or 1 if physical then local sx = anim.scale.x local hbox hbox = __TS__New( STHitbox, { position = ap:subtract(0, 3), metadata = { active = false, scan = true, walkable = true, tags = { "nograss" }, script = function(self) if hbox.metadata.active then if game.c_up then local ____player_position_82, ____y_83 = player.position, "y" ____player_position_82[____y_83] = ____player_position_82[____y_83] + 1 elseif game.c_down then local ____player_position_84, ____y_85 = player.position, "y" ____player_position_84[____y_85] = ____player_position_84[____y_85] - 1 end if game.c_left then local ____player_position_86, ____x_87 = player.position, "x" ____player_position_86[____x_87] = ____player_position_86[____x_87] + 1 elseif game.c_right then local ____player_position_88, ____x_89 = player.position, "x" ____player_position_88[____x_89] = ____player_position_88[____x_89] - 1 end else hbox.metadata.active = true anim.scale:automate(5, { x = sx / 1.1, y = 1.1 }, { x = sx / 1.05, y = 1.05 }) sprayLeaf(player.position) player.alpha.value = 0 assets["s$step_bush"]:instance() end end }, anchor = { x = 0.5, y = 1 }, size = { x = 30, y = 7 } } ):addTicker(function(self) if self.metadata.active then self:calculate() player_hitbox:calculate() if not player_hitbox:test(self) then self.metadata.active = false anim.scale:automate(5, { x = 1.05 * sx, y = 1 / 1.05 }, { x = sx, y = 1 }) sprayLeaf(player.position) player.alpha.value = 1 assets["s$step_bush"]:instance({ rate = 1.25, gain = 0.5 }) state.bushprompt = false end end end) map:attach(hbox) temp[#temp + 1] = hbox else local hbox = __TS__New( STHitbox, { position = ap:subtract(0, 3), metadata = { tags = { "nograss" } }, anchor = { x = 0.5, y = 1 }, size = { x = 30, y = 7 } } ) map:attach(hbox) end end ::__continue231:: end for ____, obj in __TS__Iterator(objects("tree")) do do local anim = obj.self if anim.metadata.room ~= to then goto __continue248 end local ap = anim.position:clone() local ____anim_position_90, ____y_91 = anim.position, "y" ____anim_position_90[____y_91] = ____anim_position_90[____y_91] - 5 local ____anim_offset_92, ____y_93 = anim.offset, "y" ____anim_offset_92[____y_93] = ____anim_offset_92[____y_93] + 5 local leafRs = nil local leafRand = __TS__New( STValueRandom, (ap.x - x) * 1000, (ap.y - y) * 1000, function() return leafRs end, function(state) leafRs = state return leafRs end ) anim.frame = leafRand:int(2) anim.scale.x = leafRand:next() < 0.5 and -1 or 1 local hit = physical or __TS__ArrayIncludes(anim.metadata.tags, "forcebox") anim:attach(__TS__New( STAnimation, { anchor = { x = 0.5, y = 1 }, scale = { x = leafRand:next() < 0.5 and -1 or 1 }, position = { y = 5 }, frame = leafRand:int(6), frames = framess.treegrass } )) local roots = ({ { 2, 6 }, { 2, 7 }, { 3, 6 }, { 3, 7 } })[leafRand:int(4) + 1] local pool1 = { 0, 1 } local pool2 = { 4, 5 } local left = leafRand:next() < 0.5 local total = 1 + leafRand:int(2) while total ~= 0 do local pool = left and pool1 or pool2 roots[#roots + 1] = __TS__ArraySplice( pool, leafRand:int(#pool), 1 )[1] left = not left total = total - 1 end local rooter = __TS__ArrayMap( roots, function(____, root) local frame = root % 4 return __TS__New( STAnimation, { anchor = { x = 0.5, y = 1 }, scale = { x = root < 4 and -1 or 1 }, position = { x = ap.x + (frame < 2 and leafRand:int(5) - 2 or leafRand:int(3) - 1), y = ap.y + (8 + leafRand:int(3)) }, frame = frame, frames = framess.treeroot, priority = anim.position.y + 2 + frame / 1000 } ) end ) map:attach(unpack(rooter)) __TS__ArrayPushArray(temp, rooter) local btop = 215 local bleft = leafRand:next() < 0.5 local bigbranches = ST:populate( 1 + leafRand:int(2), function() bleft = not bleft btop = btop - (15 + leafRand:int(31)) return { x = (8 + leafRand:int(2)) * (bleft and -1 or 1), y = -btop } end ) btop = 230 bleft = leafRand:next() < 0.5 local smallbranches = ST:populate( 3 + leafRand:int(4), function() bleft = not bleft btop = btop - (10 + leafRand:int(21)) return { x = (7 + leafRand:int(3)) * (bleft and -1 or 1), y = -btop } end ) local bi = #smallbranches while bi ~= 0 do bi = bi - 1 local branch1 = smallbranches[bi + 1] for ____, branch2 in ipairs(bigbranches) do if branch1.x < 0 == (branch2.x < 0) and math.abs(branch1.y - branch2.y) < 10 then __TS__ArraySplice(smallbranches, bi, 1) end end end for ____, bigbranch in ipairs(bigbranches) do anim:attach(__TS__New( STAnimation, { priority = 2, scale = { x = bigbranch.x < 0 and -1 or 1 }, position = bigbranch, frame = leafRand:int(2), anchor = { y = 1 }, frames = framess.treebranch } )) end for ____, smallbranch in ipairs(smallbranches) do anim:attach(__TS__New( STAnimation, { priority = 1, scale = { x = smallbranch.x < 0 and -1 or 1 }, position = smallbranch, frame = 2 + leafRand:int(4), anchor = { y = 1 }, frames = framess.treebranch } )) end if hit then for ____, root in ipairs(rooter) do local frame = root.frame root:attach(__TS__New( STHitbox, { position = { x = ({ -12, -8, -23, -22 })[frame + 1], y = ({ -9, -10, -14, -12 })[frame + 1] }, size = { x = ({ 4, 5, 4, 5 })[frame + 1], y = 3 }, metadata = { scan = true, interactable = true, obstacle = true, walkable = true, tags = { "nograss" }, script = function(self, test) if test then tooltip(text.trivia_tooltip.tree) return end trivia("tree") end } } )) end local hbox = __TS__New( STHitbox, { position = ap, metadata = { scan = true, interactable = true, obstacle = true, walkable = true, tags = { "nograss" }, script = function(self, test) if test then tooltip(text.trivia_tooltip.tree) return end trivia("tree") end }, anchor = { x = 0.5, y = 1 }, size = { x = 36, y = 14 } } ) map:attach(hbox) temp[#temp + 1] = hbox else local hbox = __TS__New(STHitbox, { position = ap, metadata = { tags = { "nograss" } }, anchor = { x = 0.5, y = 1 }, size = { x = 38, y = 15 } }) map:attach(hbox) end if __TS__ArrayIncludes(anim.metadata.tags, "top") then local top = __TS__New( STAnimation, { frame = leafRand:int(2), anchor = { x = 0.5, y = 1 }, frames = framess.treetop, priority = ap.y + 25, scale = { x = leafRand:next() < 0.5 and -1 or 1 }, position = ap } ) map:attach(top) temp[#temp + 1] = top end local delay = 30 + leafRand:int(90) local leafPool = ST:populate( 10 + leafRand:int(10), function() local pos = ST:ray( leafRand:next() * 360, 15 + leafRand:next() * 35 ) return { pos.x, pos.y, 8 + leafRand:next() * 5, 10 + leafRand:next() * 5, 6 + leafRand:int(2), 180 + leafRand:int(60), 30 + leafRand:int(90), leafRand:int(2) } end ) local leafLoop = 0 local leafLoopPoints = {} for ____, props in ipairs(leafPool) do leafLoopPoints[#leafLoopPoints + 1] = leafLoop leafLoop = leafLoop + props[7] end local pre = ST.time local baseCheck = pre - leafLoop while pre > baseCheck do local loopTime = (pre + leafLoop * 2 - delay) % leafLoop local leafPoolIndex = __TS__ArrayIndexOf(leafLoopPoints, loopTime) if leafPoolIndex ~= -1 then local props = leafPool[leafPoolIndex + 1] if ST.time - pre < props[6] + (props[8] == 0 and 90 or 45) then genLeaf(ap, pre, props) end end pre = pre - 1 end anim:addTicker(function(self) local loopTime = (ST.time + leafLoop - delay) % leafLoop local leafPoolIndex = __TS__ArrayIndexOf(leafLoopPoints, loopTime) if leafPoolIndex ~= -1 then genLeaf(ap, ST.time, leafPool[leafPoolIndex + 1]) end end) end ::__continue248:: end if last then for ____, obj in ipairs(__TS__ArraySlice(map.children)) do if __TS__InstanceOf(obj, STSprite) then repeat local ____switch285 = obj.image local ____cond285 = ____switch285 == images.pipec1 or ____switch285 == images.pipec2 or ____switch285 == images.pipec3 or ____switch285 == images.pipec4 or ____switch285 == images.pipel or ____switch285 == images.pipels or ____switch285 == images.pipehl or ____switch285 == images.pipehls if ____cond285 then do local rise = obj.priority local scay = obj.scale.y obj.scale.y = 1 if obj.image == images.pipehl then local dupes = ST:populate( scay - 1, function(i) local dupey = obj.position.y + 10 + i * 10 return __TS__New(STSprite, { image = images.pipehl, position = { x = obj.position.x, y = dupey }, priority = dupey + 10 + rise * 10.01 }) end ) map:attach(unpack(dupes)) __TS__ArrayPushArray(temp, dupes) end obj.priority = obj.position.y + 10 + rise * 10.01 if rise < 3 then local walkable = rise == 0 repeat local ____switch290 = obj.image local ____cond290 = ____switch290 == images.pipec1 if ____cond290 then obj:attach( __TS__New(STHitbox, { position = { x = 2, y = rise * 10 }, size = { x = 6, y = 2 }, metadata = { scan = true, obstacle = true, walkable = walkable, tags = walkable and ({ "nograss" }) or nil } }), __TS__New(STHitbox, { position = { y = rise * 10 + 2 }, size = { x = 8, y = 6 }, metadata = { scan = true, obstacle = true, walkable = walkable, tags = walkable and ({ "nograss" }) or nil } }) ) break end ____cond290 = ____cond290 or ____switch290 == images.pipec2 if ____cond290 then obj:attach( __TS__New(STHitbox, { position = { x = 2, y = rise * 10 }, size = { x = 6, y = 2 }, metadata = { scan = true, obstacle = true, walkable = walkable, tags = walkable and ({ "nograss" }) or nil } }), __TS__New(STHitbox, { position = { x = 2, y = rise * 10 + 2 }, size = { x = 8, y = 6 }, metadata = { scan = true, obstacle = true, walkable = walkable, tags = walkable and ({ "nograss" }) or nil } }) ) break end ____cond290 = ____cond290 or ____switch290 == images.pipec3 if ____cond290 then obj:attach( __TS__New(STHitbox, { position = { x = 2, y = rise * 10 + 8 }, size = { x = 6, y = 2 }, metadata = { scan = true, obstacle = true, walkable = walkable, tags = walkable and ({ "nograss" }) or nil } }), __TS__New(STHitbox, { position = { x = 2, y = rise * 10 + 2 }, size = { x = 8, y = 6 }, metadata = { scan = true, obstacle = true, walkable = walkable, tags = walkable and ({ "nograss" }) or nil } }) ) break end ____cond290 = ____cond290 or ____switch290 == images.pipec4 if ____cond290 then obj:attach( __TS__New(STHitbox, { position = { x = 2, y = rise * 10 + 8 }, size = { x = 6, y = 2 }, metadata = { scan = true, obstacle = true, walkable = walkable, tags = walkable and ({ "nograss" }) or nil } }), __TS__New(STHitbox, { position = { y = rise * 10 + 2 }, size = { x = 8, y = 6 }, metadata = { scan = true, obstacle = true, walkable = walkable, tags = walkable and ({ "nograss" }) or nil } }) ) break end ____cond290 = ____cond290 or ____switch290 == images.pipel if ____cond290 then obj:attach(__TS__New(STHitbox, { position = { y = rise * 10 + 2 }, size = { x = 10, y = 6 }, metadata = { scan = true, obstacle = true, walkable = walkable, tags = walkable and ({ "nograss" }) or nil } })) break end ____cond290 = ____cond290 or ____switch290 == images.pipehl if ____cond290 then obj:attach(__TS__New(STHitbox, { position = { x = 2, y = rise * 10 }, size = { x = 6, y = scay * 10 }, metadata = { scan = true, obstacle = true, walkable = walkable, tags = walkable and ({ "nograss" }) or nil } })) break end until true end if obj.image == images.pipels or obj.image == images.pipehls then local tags = obj.metadata.tags obj.priority = obj.priority + 0.005 local ____STObject_105 = STObject local ____obj_position_103 = obj.position local ____obj_priority_104 = obj.priority local ____temp_96 if rise == 0 then ____temp_96 = {} else local ____temp_95 if rise == 1 then ____temp_95 = { images.strutuno } else local ____array_94 = __TS__SparseArrayNew( images.struttop, unpack(ST:populate( rise - 2, function() return images.strutmid end )) ) __TS__SparseArrayPush(____array_94, images.strutbot) ____temp_95 = { __TS__SparseArraySpread(____array_94) } end ____temp_96 = ____temp_95 end local ____array_102 = __TS__SparseArrayNew(unpack(__TS__ArrayMap( ____temp_96, function(____, img, idx) return __TS__New(STSprite, { image = img, position = { y = 10 + idx * 10 } }) end ))) __TS__SparseArrayPush( ____array_102, __TS__New(STHitbox, { position = { y = rise * 10 + 3 }, size = { x = 10, y = 7 }, metadata = { scan = true, obstacle = true, walkable = true, tags = { "nograss" } } }) ) local ____tags_includes_result_101 local ____opt_97 = tags if ____opt_97 ~= nil then ____opt_97 = __TS__ArrayIncludes(tags, "valve") end if ____opt_97 then ____tags_includes_result_101 = { __TS__New(STAnimation, { frames = framess.valve, anchor = 0.5, position = { x = 5, y = rise * 10 - 5 }, priority = 1 }), __TS__New( STHitbox, { position = { x = 5 - 6, y = rise * 10 + 5 }, size = { x = 12, y = 3 }, metadata = { scan = true, obstacle = true, interactable = true, tags = { "nograss" }, script = function(self) print("valve") end } } ) } else local ____opt_99 = tags if ____opt_99 ~= nil then ____opt_99 = __TS__ArrayIncludes(tags, "gauge") end ____tags_includes_result_101 = ____opt_99 and ({ __TS__New(STAnimation, { frames = framess.gauge, anchor = 0.5, position = { x = 5, y = rise * 10 - 5 }, priority = 1 }), __TS__New( STHitbox, { position = { x = 5 - 8, y = rise * 10 + 5 }, size = { x = 16, y = 3 }, metadata = { scan = true, obstacle = true, interactable = true, tags = { "nograss" }, script = function(self) print("gauge") end } } ) }) or ({}) end __TS__SparseArrayPush( ____array_102, unpack(____tags_includes_result_101) ) local xtra = __TS__New( ____STObject_105, { position = ____obj_position_103, priority = ____obj_priority_104, children = { __TS__SparseArraySpread(____array_102) } } ) map:attach(xtra) temp[#temp + 1] = xtra end break end end ____cond285 = ____cond285 or ____switch285 == images.powertower if ____cond285 then do obj.priority = obj.position.y - 20 obj:attach(__TS__New( STHitbox, { anchor = { x = 0.5, y = 1 }, size = { x = 36, y = 22 }, metadata = { scan = true, obstacle = true, walkable = true, interactable = true, tags = { "nograss" }, script = function(self, test) if test then tooltip(text.trivia_tooltip.powertower) return end trivia("powertower") end } } )) break end end ____cond285 = ____cond285 or ____switch285 == images.sidecano if ____cond285 then do local tags = obj.metadata.tags local ____opt_106 = tags if ____opt_106 ~= nil then ____opt_106 = __TS__ArrayIncludes(tags, "noh") end if ____opt_106 then break end obj:attach(__TS__New( STHitbox, { anchor = { x = 0.5, y = 1 }, size = { x = 21, y = 15 }, metadata = { scan = true, obstacle = true, interactable = true, script = function(self, test) if test then tooltip(text.trivia_tooltip.barrel) return end trivia("barrel") end } } )) break end end ____cond285 = ____cond285 or ____switch285 == images.saplid if ____cond285 then do local tags = obj.metadata.tags local ____opt_108 = tags if ____opt_108 ~= nil then ____opt_108 = __TS__ArrayIncludes(tags, "noh") end if ____opt_108 then break end obj:attach(__TS__New( STHitbox, { anchor = { x = 0.5, y = 1 }, size = { x = 20, y = 11 }, metadata = { scan = true, interactable = true, walkable = true, tags = { "stepbox", "s$step_glass" }, script = function(self, test) if test then tooltip(text.trivia_tooltip.lid) return end trivia("lid") end } } )) break end end until true elseif __TS__InstanceOf(obj, STAnimation) then repeat local ____switch308 = obj.frames local ____cond308 = ____switch308 == framess.pipe or ____switch308 == framess.pipeh if ____cond308 then do local rise = obj.priority local real = rise == 0 or rise == 1 or rise == 2 repeat local ____switch310 = obj.frames local ____cond310 = ____switch310 == framess.pipe if ____cond310 then obj.priority = obj.position.y + 5 + rise * 10.01 + 0.005 if real then local walkable = rise == 0 obj:attach(__TS__New(STHitbox, { position = { x = -8, y = rise * 10 - 5 }, size = { x = 16, y = 10 }, metadata = { scan = true, obstacle = true, walkable = walkable, tags = walkable and ({ "nograss" }) or nil } })) end break end ____cond310 = ____cond310 or ____switch310 == framess.pipeh if ____cond310 then obj.priority = obj.position.y + 10 + rise * 10.01 + 0.005 if real then local walkable = rise == 0 obj:attach(__TS__New(STHitbox, { position = { x = -5, y = rise * 10 - 8 }, size = { x = 10, y = 16 }, metadata = { scan = true, obstacle = true, walkable = walkable, tags = walkable and ({ "nograss" }) or nil } })) end break end until true break end end ____cond308 = ____cond308 or ____switch308 == framess.junctionbox if ____cond308 then do obj.priority = obj.position.y obj:attach( __TS__New(STAnimation, { frames = framess.jbdoor, anchor = { x = 0.5, y = 1 } }), __TS__New( STHitbox, { anchor = { x = 0.5, y = 1 }, size = { x = 40, y = 15 }, metadata = { scan = true, obstacle = true, interactable = true, script = function(self) print("jbdoor") end } } ) ) break end end ____cond308 = ____cond308 or ____switch308 == framess.noncano if ____cond308 then do local leafRs = nil local leafRand = __TS__New( STValueRandom, (obj.position.x - x) * 1000, (obj.position.y - y) * 1000, function() return leafRs end, function(state) leafRs = state return leafRs end ) obj.frame = leafRand:int(3) obj.scale.x = leafRand:next() < 0.5 and -1 or 1 end end ____cond308 = ____cond308 or (____switch308 == framess.sapcan or ____switch308 == framess.sapcano) if ____cond308 then do local tags = obj.metadata.tags local ____opt_110 = tags if ____opt_110 ~= nil then ____opt_110 = __TS__ArrayIncludes(tags, "noh") end if ____opt_110 then break end if obj.priority == 0 then obj.priority = obj.position.y + obj.position.x / 1000000 end obj:attach( __TS__New( STHitbox, { anchor = { x = 0.5, y = 1 }, size = { x = 14, y = 11 }, metadata = { scan = true, obstacle = true, interactable = true, script = function(self, test) if test then tooltip(text.trivia_tooltip.barrel) return end trivia("barrel") end } } ), __TS__New( STHitbox, { anchor = { x = 0.5, y = 1 }, position = { y = -2 }, size = { x = 20, y = 7 }, metadata = { scan = true, obstacle = true, interactable = true, script = function(self, test) if test then tooltip(text.trivia_tooltip.barrel) return end trivia("barrel") end } } ) ) local ____opt_112 = tags if ____opt_112 ~= nil then ____opt_112 = __TS__ArrayIncludes(tags, "nog") end if ____opt_112 then break end local leafRs = nil local leafRand = __TS__New( STValueRandom, (obj.position.x - obj.metadata.x) * 1000, (obj.position.y - obj.metadata.y) * 1000, function() return leafRs end, function(state) leafRs = state return leafRs end ) obj:attach(__TS__New( STAnimation, { anchor = { x = 0.5, y = 1 }, scale = { x = leafRand:next() < 0.5 and -1 or 1 }, frame = leafRand:int(6), frames = framess.barrelgrass } )) break end end until true end end local tile = 10 local distrib = 0.1 local grasses = {} local nograss = {} local getYerOwnDamnGrassTwat = object("grass") if getYerOwnDamnGrassTwat ~= nil then for ____, obj in __TS__Iterator(objects("nograss")) do local other = obj.self other:calculate() nograss[#nograss + 1] = other if other.metadata.obstacle ~= true and other.metadata.interactable ~= true and other.metadata.walkable ~= true then local tags = other.metadata.tags if not __TS__ArrayIncludes(tags, "stepbox") then obj:destroy() end end end local leafRs = nil grasses[#grasses + 1] = { getYerOwnDamnGrassTwat.self, __TS__New( STValueRandom, (100 - map.room) * 1000, map.room * 1000, function() return leafRs end, function(state) leafRs = state return leafRs end ) } getYerOwnDamnGrassTwat:destroy() end for ____, neighbor in ipairs(map.rooms[map.room + 1].neighbors or ({})) do local ____this_115 ____this_115 = map.rooms[neighbor[1] + 1] local ____opt_114 = ____this_115.physical local ____temp_116 = ____opt_114 and ____opt_114(____this_115) if ____temp_116 == nil then ____temp_116 = { {}, function() end } end local containers, cleanup = unpack(____temp_116) for ____, container in ipairs(containers) do do if not __TS__InstanceOf(container, STHitbox) then goto __continue338 end if type(container.metadata) ~= "table" then goto __continue338 end local tags = container.metadata.tags if type(tags) ~= "table" then goto __continue338 end if __TS__ArrayIncludes(tags, "grass") then local ____container_position_117, ____x_118 = container.position, "x" ____container_position_117[____x_118] = ____container_position_117[____x_118] + neighbor[2] local ____container_position_119, ____y_120 = container.position, "y" ____container_position_119[____y_120] = ____container_position_119[____y_120] + neighbor[3] local leafRs = nil grasses[#grasses + 1] = { container, __TS__New( STValueRandom, (100 - neighbor[1]) * 1000, neighbor[1] * 1000, function() return leafRs end, function(state) leafRs = state return leafRs end ) } goto __continue338 end if __TS__ArrayIncludes(tags, "nograss") then local ____container_position_121, ____x_122 = container.position, "x" ____container_position_121[____x_122] = ____container_position_121[____x_122] + neighbor[2] local ____container_position_123, ____y_124 = container.position, "y" ____container_position_123[____y_124] = ____container_position_123[____y_124] + neighbor[3] map:attach(container) container:calculate() map:detach(container) nograss[#nograss + 1] = container end end ::__continue338:: end cleanup() end for ____, ____value in ipairs(grasses) do local grass = ____value[1] local leafRand = ____value[2] local placements = {} local pool = __TS__ArrayFlat(ST:populate( math.floor(grass.size.x / tile + 0.5), function(x) return ST:populate( math.floor(grass.size.y / tile + 0.5), function(y) return { x, y } end ) end )) local tries = 0 local total = math.floor(#pool * distrib + 0.5) while tries < total do local xy = __TS__ArraySplice( pool, leafRand:int(#pool), 1 )[1] local position = grass.position:add( xy[1] * tile + leafRand:int(tile), xy[2] * tile + leafRand:int(tile) ) local sx = leafRand:next() < 0.5 and -1 or 1 local frame = leafRand:int(6) local valid = true for ____, placement in ipairs(placements) do if math.abs(position.x - placement.x) < 20 and math.abs(position.y - placement.y) < 10 then valid = false break end end if valid then local grassbox = __TS__New(STHitbox, { size = { x = 10, y = 1 }, anchor = { x = 0.5, y = 1 }, position = position }) map:attach(grassbox) grassbox:calculate() for ____, nog in ipairs(nograss) do if grassbox:test(nog) then valid = false break end end map:detach(grassbox) end if valid then placements[#placements + 1] = position local anim = __TS__New(STAnimation, { frames = framess.grass, scale = { x = sx }, frame = frame, position = position, priority = position.y - 0.4, anchor = { x = 0.5, y = 1 } }) map:attach(anim) temp[#temp + 1] = anim end tries = tries + 1 end end for key in pairs(pager.storage) do if __TS__StringIncludes(key, "#") then pager.storage[key] = 0 end end end if physical and from == nil then repeat local ____switch365 = accessor.plot local ____cond365 = ____switch365 == 4 if ____cond365 then assets["m$redleaf"]:instance() break end ____cond365 = ____cond365 or (____switch365 == 5 or ____switch365 == 6 or ____switch365 == 7) if ____cond365 then assets["m$redleaf"]:instance({ rate = accessor.event_redleaf_gateclimb == 0 and 1.2 or 1 }) break end until true end if updaters[to] ~= nil then local p = updaters[to](from, physical, x, y) if p ~= nil then __TS__Await(p) end end if physical and from == nil and init.reload then init.reload = false unfailer() end end) end) player:addDrawer(stepSFX) reader.presets.hacker = { color = 15476262, chunk = 1, faces = { annoyed = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$hacker$annoyed"] }) end, default = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$hacker$default"] }) end, happi = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$hacker$happi"] }) end, mystery = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$common$mystery"] }) end, pensive = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$hacker$pensive"] }) end, surprise = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$hacker$surprise"] }) end, sweat = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$hacker$sweat"] }) end, sweat2 = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$hacker$sweat2"] }) end }, font = assets["f$helloplayer"], interval = 1, voices = { default = { { assets["v$hacker1"], 2 }, { assets["v$hacker2"], 4 }, { assets["v$hacker3"], 4 }, { assets["v$hacker4"], 1 } } } } reader.presets.mechanic = { color = 2055321, chunk = 1, faces = { mystery = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$common$mystery"] }) end, angry = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$mechanic$angry"] }) end, default = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$mechanic$default"] }) end, sad = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$mechanic$sad"] }) end, side = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$mechanic$side"] }) end, sigh = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$mechanic$sigh"] }) end, surprise = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$mechanic$surprise"] }) end, suspicious = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$mechanic$suspicious"] }) end, what = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$mechanic$what"] }) end }, font = assets["f$helloplayer"], interval = 1, voices = { default = { { assets["v$mechanic"], 1 } } } } reader.presets.thicc = { color = 15389279, chunk = 2, faces = { confused = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$thicc$confused"] }) end, default = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$thicc$default"] }) end, happi = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$thicc$happi"] }) end, laugh = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$thicc$laugh"] }) end, sad = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$thicc$sad"] }) end, side = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$thicc$side"] }) end, sigh = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$thicc$sigh"] }) end, sleep = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$thicc$sleep"] }) end, what = function() return __TS__New(STSprite, { anchor = 0.5, image = assets["if$thicc$what"] }) end }, font = assets["f$helloplayer"], interval = 2, voices = { default = { { assets["v$thicc"], 1 } } } } save_hooks[#save_hooks + 1] = function() accessor.location_idx = map.room accessor.pager_redleaf = ST:encode(pager.storage) end local shaderCleanup = shaderSetup() return { map = map, overworld = overworld, cleanup = function(self) shaderCleanup() end } end return ____exports