456 lines
17 KiB
Lua
456 lines
17 KiB
Lua
local ____lualib = require("lualib_bundle")
|
|
local __TS__New = ____lualib.__TS__New
|
|
local __TS__ArraySplice = ____lualib.__TS__ArraySplice
|
|
local __TS__ArrayIndexOf = ____lualib.__TS__ArrayIndexOf
|
|
local __TS__ParseInt = ____lualib.__TS__ParseInt
|
|
local __TS__Iterator = ____lualib.__TS__Iterator
|
|
local __TS__AsyncAwaiter = ____lualib.__TS__AsyncAwaiter
|
|
local __TS__Await = ____lualib.__TS__Await
|
|
local __TS__ObjectAssign = ____lualib.__TS__ObjectAssign
|
|
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
|
|
local ____exports = {}
|
|
local ____storyteller = require("code.engine.storyteller")
|
|
local ST = ____storyteller.ST
|
|
local STContainer = ____storyteller.STContainer
|
|
local STDaemon = ____storyteller.STDaemon
|
|
local STFrames = ____storyteller.STFrames
|
|
local STHitbox = ____storyteller.STHitbox
|
|
local STImage = ____storyteller.STImage
|
|
local STRectangle = ____storyteller.STRectangle
|
|
local STSprite = ____storyteller.STSprite
|
|
local STText = ____storyteller.STText
|
|
local STValue = ____storyteller.STValue
|
|
local ____utils = require("code.engine.utils")
|
|
local EXMap = ____utils.EXMap
|
|
local rainGen = ____utils.rainGen
|
|
local ____global = require("code.global")
|
|
local accessor = ____global.accessor
|
|
local init = ____global.init
|
|
local world = ____global.world
|
|
local ____bloom = require("code.shaders.bloom")
|
|
local bloomShader = ____bloom.default
|
|
local ____frameblur = require("code.shaders.frameblur")
|
|
local frameblurShader = ____frameblur.default
|
|
local ____overworld = require("code.systems.overworld")
|
|
local overworldSystem = ____overworld.default
|
|
function ____exports.commonCharactersGen()
|
|
return {stowaway = {
|
|
down = __TS__New(STFrames, "images/characters/stowaway/down.json", "images/characters/stowaway/down.png"),
|
|
left = __TS__New(STFrames, "images/characters/stowaway/left.json", "images/characters/stowaway/left.png"),
|
|
right = __TS__New(STFrames, "images/characters/stowaway/right.json", "images/characters/stowaway/right.png"),
|
|
up = __TS__New(STFrames, "images/characters/stowaway/up.json", "images/characters/stowaway/up.png")
|
|
}}
|
|
end
|
|
function ____exports.commonResourcesGen(music, sound)
|
|
return {
|
|
daemons = {
|
|
rain = __TS__New(STDaemon, "sounds/rain.ogg", {mixer = sound, loop = true, gain = 0.4}),
|
|
thunder = __TS__New(STDaemon, "sounds/thunder.ogg", {mixer = sound, loop = true, gain = 0.4})
|
|
},
|
|
framess = {golden = __TS__New(STFrames, "images/objects/common/golden.json", "images/objects/common/golden.png")},
|
|
images = {
|
|
goatplush = __TS__New(STImage, "images/objects/common/goatplush.png"),
|
|
void = __TS__New(STImage, "images/objects/common/void.png"),
|
|
void_window = __TS__New(STImage, "images/objects/common/void_window.png"),
|
|
jusant = __TS__New(STImage, "images/objects/common/jusant.png"),
|
|
jusant_circle = __TS__New(STImage, "images/objects/common/jusant_circle.png")
|
|
}
|
|
}
|
|
end
|
|
function ____exports.commonAreaGen(extras, resourcesGen)
|
|
local overworld = overworldSystem(extras)
|
|
local assets = overworld.assets
|
|
local atlas = overworld.atlas.atlas
|
|
local music = overworld.mixer.music
|
|
local sound = overworld.mixer.sound
|
|
local player = overworld.player.player
|
|
local player_menu = overworld.player.player_menu
|
|
local player_tooltip = overworld.player.player_tooltip
|
|
local reader = overworld.reader.reader
|
|
local object = overworld.screen.object
|
|
local objects = overworld.screen.objects
|
|
local screen = overworld.screen.screen
|
|
local resources = resourcesGen(music, sound)
|
|
local images = resources.images
|
|
local activators = {}
|
|
local temp = {}
|
|
local map
|
|
map = __TS__New(
|
|
EXMap,
|
|
__TS__ObjectAssign(
|
|
{},
|
|
resources,
|
|
{
|
|
camera = player.position,
|
|
objects = {
|
|
{player, player_menu},
|
|
function()
|
|
end
|
|
},
|
|
activate = function(self, test, ...)
|
|
for ____, activator in ipairs(activators) do
|
|
activator(test, ...)
|
|
end
|
|
end
|
|
}
|
|
)
|
|
):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 ____, t in ipairs(__TS__ArraySplice(temp, 0)) do
|
|
self:detach(t)
|
|
end
|
|
for ____, obj in __TS__Iterator(objects("tint")) do
|
|
local tags = obj.self.metadata.tags
|
|
obj.self.color.value = __TS__ParseInt(
|
|
tags[__TS__ArrayIndexOf(tags, "tint") + 1 + 1],
|
|
16
|
|
)
|
|
end
|
|
for ____, obj in __TS__Iterator(objects("fixed")) do
|
|
local ____obj_self_position_0 = obj.self.position
|
|
local x = ____obj_self_position_0.x
|
|
local y = ____obj_self_position_0.y
|
|
obj.self: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)
|
|
end
|
|
local fog = object("fog")
|
|
if fog then
|
|
fog:destroy()
|
|
local y = 0
|
|
while y <= 180 do
|
|
local my = y - 90
|
|
local fr = __TS__New(STSprite, {alpha = 0.02, anchor = {x = 0.5, y = 1}, image = images.void}):addTicker(function(self)
|
|
self.position.x = -map.position.x / map.scale.x
|
|
self.position.y = my - map.position.y / map.scale.y
|
|
self.priority = my == -90 and -1000000 or (my == 90 and 1000000 or self.position.y + 0.000001)
|
|
self.scale.x = 1 / map.scale.x
|
|
self.scale.y = 1 / map.scale.y
|
|
end)
|
|
if y % 90 == 0 then
|
|
fr:attach(rainGen())
|
|
end
|
|
map:attach(fr)
|
|
temp[#temp + 1] = fr
|
|
y = y + 9
|
|
end
|
|
end
|
|
end
|
|
if physical and from == nil then
|
|
if not init.load then
|
|
init.load = true
|
|
local fd = __TS__New(STRectangle, {
|
|
alpha = 1,
|
|
color = 0,
|
|
size = {x = 240, y = 180},
|
|
anchor = 0.5,
|
|
priority = 1000
|
|
})
|
|
screen:attach(fd)
|
|
local ____self_1 = fd.alpha:automate(7, 0)
|
|
____self_1["then"](
|
|
____self_1,
|
|
function()
|
|
screen:detach(fd)
|
|
end
|
|
)
|
|
end
|
|
end
|
|
end)
|
|
end)
|
|
local function failer()
|
|
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
|
assets["s$reload"]:instance()
|
|
local sh = __TS__New(STValue)
|
|
local function shTicker()
|
|
screen.position.x = sh.value * (math.random() * 2 - 1)
|
|
screen.position.y = sh.value * (math.random() * 2 - 1)
|
|
end
|
|
screen:addTicker(shTicker)
|
|
__TS__Await(sh:automate(30, 0, 1))
|
|
local scale = ST.scale
|
|
local fader = __TS__New(STRectangle, {
|
|
alpha = 0,
|
|
color = 0,
|
|
size = {x = 240, y = 180},
|
|
anchor = 0.5,
|
|
priority = 1000
|
|
})
|
|
screen:attach(fader)
|
|
__TS__Await(ST:when(function()
|
|
local ____fader_alpha_2, ____value_3 = fader.alpha, "value"
|
|
local ____fader_alpha_value_4 = ____fader_alpha_2[____value_3] + 1 / 60
|
|
____fader_alpha_2[____value_3] = ____fader_alpha_value_4
|
|
local fa = ____fader_alpha_value_4
|
|
if 1 <= fa then
|
|
ST.scale = scale
|
|
return true
|
|
end
|
|
ST.scale = scale * 0.5 ^ (fa * 5)
|
|
return false
|
|
end))
|
|
local ____opt_5 = map.task
|
|
if ____opt_5 ~= nil then
|
|
____opt_5.complete(nil)
|
|
end
|
|
world:dump()
|
|
init.reload = true
|
|
end)
|
|
end
|
|
local function hide(tag, y)
|
|
if y == nil then
|
|
y = 9000
|
|
end
|
|
for ____, obj in __TS__Iterator(objects(tag)) do
|
|
if __TS__InstanceOf(obj.self, STHitbox) then
|
|
obj.self.metadata.y = obj.self.position.y
|
|
obj.self.position.y = y
|
|
else
|
|
obj.self.alpha.value = 0
|
|
end
|
|
end
|
|
end
|
|
local function hintGen(content, mode, metadata, alpha, hpy, hpa)
|
|
if alpha == nil then
|
|
alpha = 0.25
|
|
end
|
|
if hpy == nil then
|
|
hpy = 0
|
|
end
|
|
if hpa == nil then
|
|
hpa = 1
|
|
end
|
|
local ____end = false
|
|
local time = 0
|
|
local hint = __TS__New(
|
|
STContainer,
|
|
{
|
|
alpha = 0,
|
|
position = {y = hpy},
|
|
metadata = metadata,
|
|
children = {
|
|
__TS__New(STRectangle, {alpha = alpha, color = 0, anchor = 0.5, size = {x = 240, y = 180}}),
|
|
__TS__New(STText, {
|
|
anchor = 0.5,
|
|
justify = 0.5,
|
|
color = 16777215,
|
|
font = assets["f$helloplayer"],
|
|
content = content
|
|
})
|
|
},
|
|
priority = 1000
|
|
}
|
|
):addDrawer(function(self)
|
|
if ____end then
|
|
return
|
|
end
|
|
local ____temp_8 = mode ~= 1 or not player.metadata.moved
|
|
if ____temp_8 then
|
|
local ____temp_7
|
|
if mode == 2 then
|
|
____temp_7 = reader.next_task ~= nil
|
|
else
|
|
____temp_7 = atlas.target == nil or mode == 3
|
|
end
|
|
____temp_8 = ____temp_7
|
|
end
|
|
if ____temp_8 then
|
|
if self.metadata == nil then
|
|
self.metadata = math.max(
|
|
time,
|
|
math.min(metadata, 60)
|
|
)
|
|
end
|
|
local ____self_alpha_14 = self.alpha
|
|
local ____ST_12 = ST
|
|
local ____ST_remap_clamped_13 = ST.remap_clamped
|
|
local ____self_9, ____metadata_10 = self, "metadata"
|
|
local ____self_metadata_11 = ____self_9[____metadata_10]
|
|
____self_9[____metadata_10] = ____self_metadata_11 - 1
|
|
____self_alpha_14.value = ____ST_remap_clamped_13(
|
|
____ST_12,
|
|
____self_metadata_11,
|
|
0,
|
|
hpa,
|
|
7,
|
|
0
|
|
)
|
|
elseif self.metadata ~= nil then
|
|
time = self.metadata
|
|
self.metadata = nil
|
|
self.alpha.value = 0
|
|
end
|
|
end)
|
|
screen:attach(hint)
|
|
return function()
|
|
____end = true
|
|
local ____self_15 = hint.alpha:automate(7, 0)
|
|
____self_15["then"](
|
|
____self_15,
|
|
function()
|
|
screen:detach(hint)
|
|
end
|
|
)
|
|
end
|
|
end
|
|
local function pstop()
|
|
local ____player_position_16, ____x_17 = player.position, "x"
|
|
____player_position_16[____x_17] = ____player_position_16[____x_17] - player.metadata.last_x
|
|
local ____player_position_18, ____y_19 = player.position, "y"
|
|
____player_position_18[____y_19] = ____player_position_18[____y_19] - player.metadata.last_y
|
|
player:move(0, 0)
|
|
end
|
|
local function reveal(tag)
|
|
for ____, obj in __TS__Iterator(objects(tag)) do
|
|
if __TS__InstanceOf(obj.self, STHitbox) then
|
|
obj.self.position.y = obj.self.metadata.y
|
|
else
|
|
obj.self.alpha.value = 1
|
|
end
|
|
end
|
|
end
|
|
local function shaderSetup()
|
|
local frameblur = frameblurShader(
|
|
3,
|
|
0.05,
|
|
(0.005 / 0.05) ^ (1 / 3),
|
|
function() return accessor["$option_shaders"] == 2 end
|
|
)
|
|
screen:addDrawer(frameblur.drawer)
|
|
local bloom1 = bloomShader({
|
|
threshold = 0.1,
|
|
intensity = 1.2,
|
|
xsamples = 13,
|
|
ysamples = 13,
|
|
limit = 0.8,
|
|
bleed = 0.5,
|
|
absorb = 0.6,
|
|
enabled = function() return accessor["$option_shaders"] ~= 0 end
|
|
})
|
|
screen:addDrawer(bloom1.drawer)
|
|
local bloom2 = bloomShader({
|
|
threshold = 0.8,
|
|
intensity = 0.8,
|
|
xsamples = 17,
|
|
ysamples = 17,
|
|
limit = 1,
|
|
bleed = 0,
|
|
absorb = 0.6,
|
|
enabled = function() return accessor["$option_shaders"] == 2 end
|
|
})
|
|
screen:addDrawer(bloom2.drawer)
|
|
return function()
|
|
frameblur:release()
|
|
bloom1:release()
|
|
bloom2:release()
|
|
end
|
|
end
|
|
local function stepSFX(self)
|
|
if self.step < 1 and self.frame % 2 == 1 then
|
|
local snd = nil
|
|
local hbox = __TS__New(STHitbox, {anchor = {x = 0.5, y = 1}, size = 1})
|
|
self:attach(hbox)
|
|
hbox:calculate()
|
|
for ____, stepbox in __TS__Iterator(objects("stepbox")) do
|
|
local sbox = stepbox.self
|
|
if sbox.metadata.calculate ~= true then
|
|
sbox.metadata.calculate = true
|
|
sbox:calculate()
|
|
end
|
|
if hbox:test(sbox) then
|
|
local tags = sbox.metadata.tags
|
|
snd = tags[__TS__ArrayIndexOf(tags, "stepbox") + 1 + 1]
|
|
break
|
|
end
|
|
end
|
|
self:detach(hbox)
|
|
if snd == nil then
|
|
local step = objects("step"):next().value
|
|
if step ~= nil then
|
|
local tags = step.self.metadata.tags
|
|
snd = tags[__TS__ArrayIndexOf(tags, "step") + 1 + 1]
|
|
end
|
|
end
|
|
if snd ~= nil then
|
|
assets[snd]:instance({
|
|
gain = 0.4 + math.random() * 0.4,
|
|
rate = 0.9 + math.random() * 0.2
|
|
})
|
|
end
|
|
end
|
|
end
|
|
local function tooltip(content)
|
|
if player.metadata.test or accessor.plot < 1 then
|
|
return
|
|
end
|
|
player.metadata.test = true
|
|
player_tooltip.metadata.content = content
|
|
end
|
|
local function unfailer()
|
|
return __TS__AsyncAwaiter(function(____awaiter_resolve)
|
|
init.reload = false
|
|
assets["s$reload_ex"]:instance()
|
|
local scale = ST.scale
|
|
local fader = __TS__New(STRectangle, {
|
|
alpha = 1,
|
|
color = 0,
|
|
size = {x = 240, y = 180},
|
|
anchor = 0.5,
|
|
priority = 1000000001
|
|
})
|
|
screen:attach(fader)
|
|
__TS__Await(ST:pause(30))
|
|
local sh = __TS__New(STValue, 1)
|
|
local function shTicker()
|
|
screen.position.x = sh.value * (math.random() * 2 - 1)
|
|
screen.position.y = sh.value * (math.random() * 2 - 1)
|
|
end
|
|
screen:addTicker(shTicker)
|
|
local ____self_20 = sh:automate(30, 1, 0)
|
|
____self_20["then"](
|
|
____self_20,
|
|
function()
|
|
screen:removeTicker(shTicker)
|
|
end
|
|
)
|
|
__TS__Await(ST:when(function()
|
|
local ____fader_alpha_21, ____value_22 = fader.alpha, "value"
|
|
local ____fader_alpha_value_23 = ____fader_alpha_21[____value_22] - 1 / 60
|
|
____fader_alpha_21[____value_22] = ____fader_alpha_value_23
|
|
local fa = ____fader_alpha_value_23
|
|
if fa <= 0 then
|
|
ST.scale = scale
|
|
return true
|
|
end
|
|
ST.scale = scale * 0.5 ^ (fa * 5)
|
|
return false
|
|
end))
|
|
screen:detach(fader)
|
|
end)
|
|
end
|
|
return {
|
|
failer = failer,
|
|
hide = hide,
|
|
hintGen = hintGen,
|
|
map = map,
|
|
overworld = overworld,
|
|
pstop = pstop,
|
|
resources = resources,
|
|
reveal = reveal,
|
|
activators = activators,
|
|
shaderSetup = shaderSetup,
|
|
stepSFX = stepSFX,
|
|
temp = temp,
|
|
tooltip = tooltip,
|
|
unfailer = unfailer
|
|
}
|
|
end
|
|
return ____exports
|