feature/imp-99-add-discussions #44

Merged
mr.two merged 7 commits from feature/imp-99-add-discussions into develop 2026-03-20 23:19:58 +00:00
17 changed files with 489 additions and 284 deletions
Showing only changes of commit 05091c7af2 - Show all commits

View File

@@ -48,8 +48,9 @@ decision/decision.go_to_end.lua
decision/decision.go_to_walking_to_home.lua decision/decision.go_to_walking_to_home.lua
decision/decision.go_to_sleep.lua decision/decision.go_to_sleep.lua
decision/decision.do_work.lua decision/decision.do_work.lua
decision/decision.start_discussion.lua decision/decision.sumphore_discussion.lua
discussion/discussion.sumphore.lua discussion/discussion.sumphore.lua
discussion/discussion.coworker.lua
map/map.manager.lua map/map.manager.lua
map/map.bedroom.lua map/map.bedroom.lua
map/map.street.lua map/map.street.lua

View File

@@ -6,9 +6,14 @@ Decision.register({
Util.go_to_screen_by_id("work") Util.go_to_screen_by_id("work")
MinigameDDRWindow.start("game", nil, { MinigameDDRWindow.start("game", nil, {
on_win = function() on_win = function()
if (Context.minigame_ddr.special_condition_met and Context.ascension.level == 1) then
Context.should_ascend = true
Context.minigame_ddr.special_condition_met = false
end
Meter.show() Meter.show()
Util.go_to_screen_by_id("office") Util.go_to_screen_by_id("office")
Window.set_current("game") Window.set_current("game")
Context.have_done_work_today = true
end, end,
}) })
end, end,

View File

@@ -1,6 +1,9 @@
Decision.register({ Decision.register({
id = "go_to_home", id = "go_to_home",
label = "Go to Home", label = "Go to Home",
condition = function()
return Context.have_been_to_office and Context.have_done_work_today
end,
handle = function() handle = function()
Util.go_to_screen_by_id("home") Util.go_to_screen_by_id("home")
end, end,

View File

@@ -1,6 +1,9 @@
Decision.register({ Decision.register({
id = "go_to_sleep", id = "go_to_sleep",
label = "Go to Sleep", label = "Go to Sleep",
condition = function()
return Context.have_been_to_office and Context.have_done_work_today
end,
handle = function() handle = function()
Meter.hide() Meter.hide()
Day.increase() Day.increase()
@@ -10,7 +13,11 @@ Decision.register({
focus_initial_radius = 0, focus_initial_radius = 0,
on_win = function() on_win = function()
local ascended = Ascension.consume_increase() local ascended = Ascension.consume_increase()
MysteriousManScreen.start({ skip_text = not ascended }) local level = Ascension.get_level()
MysteriousManScreen.start({
skip_text = not ascended,
text = ascended and MysteriousManScreen.get_text_for_level(level) or nil,
})
end, end,
}) })
end, end,

View File

@@ -3,6 +3,14 @@ Decision.register({
label = "Have a Coffee", label = "Have a Coffee",
handle = function() handle = function()
local new_situation_id = Situation.apply("drink_coffee", Context.game.current_screen) local new_situation_id = Situation.apply("drink_coffee", Context.game.current_screen)
local level = Ascension.get_level()
local disc_id = "coworker_disc_0"
-- TODO: Add more discussions for levels above 3
if level >= 1 and level <= 3 then
local suffix = Context.have_done_work_today and ("_asc_" .. level) or ("_" .. level)
disc_id = "coworker_disc" .. suffix
end
Discussion.start(disc_id, "game")
Context.game.current_situation = new_situation_id Context.game.current_situation = new_situation_id
end, end,
}) })

View File

@@ -1,5 +1,5 @@
Decision.register({ Decision.register({
id = "start_discussion", id = "sumphore_discussion",
label = function() label = function()
if Context.have_met_sumphore then if Context.have_met_sumphore then
return "Talk to Sumphore" return "Talk to Sumphore"
@@ -9,10 +9,15 @@ Decision.register({
handle = function() handle = function()
if not Context.have_met_sumphore then if not Context.have_met_sumphore then
Discussion.start("homeless_guy", "game") Discussion.start("homeless_guy", "game")
elseif Ascension.get_level() == 0 then return
Discussion.start("homeless_guy", "game", 4) end
local level = Ascension.get_level()
-- TODO: Add more discussions for levels above 3
if level >= 1 and level <= 3 then
Discussion.start("sumphore_disc_asc_" .. level, "game")
else else
Discussion.start("sumphore_asc_1_a", "game") Discussion.start("homeless_guy", "game", 4)
end end
end, end,
}) })

View File

@@ -1,20 +1,136 @@
Discussion.register({ Discussion.register({
id = "coworker_asc_1", id = "coworker_disc_0",
steps = {
{
question = "Good morning Normal, enjoying your coffee as usual, huh?",
answers = {
{ label = "The name is Norman, not Normal", next_step = 2 },
},
},
{
question = "Can't work without some good coffee, no? ",
answers = {
{ label = "Mhmm", next_step = nil },
},
},
},
});
Discussion.register({
id = "coworker_disc_1",
steps = {
{
question = "Norman, you look confused, what's up?",
answers = {
{ label = "Just some bugs I noticed", next_step = 2 },
},
},
{
question = "Your coffee also seems whiter than usual!",
answers = {
{ label = "I feel like latte today", next_step = nil },
},
},
},
});
Discussion.register({
id = "coworker_disc_asc_1",
steps = { steps = {
{ {
question = "Normann you look weird and unfocused. You are usually locked in and not like this, what's up?", question = "Normann you look weird and unfocused. You are usually locked in and not like this, what's up?",
answers = { answers = {
{ label = "Nothing it's just, I noticed some bugs in the simulation, maybe.", next_step = 2 }, { label = "Nothing it's just, I noticed some bugs in the simulation, maybe.", next_step = 2 },
{ label = "Same old - same old", next_step = nil },
}, },
}, },
{ {
question = "What kind of bugs?", question = "Are you fixing bugs nobody noticed before?",
answers = { answers = {
{ label = "Some of the data is not being processed correctly, I think.", next_step = nil }, { label = "Maybe", next_step = nil },
{ label = "I don't know, I'm not a programmer.", next_step = nil, on_select = function() },
Meter.add("ism", 10) },
end }, },
})
Discussion.register({
id = "coworker_disc_2",
steps = {
{
question = "Hey Norman, do you have new socks on? That's a weird color!",
answers = {
{ label = "Huh? True ...", next_step = 2 },
},
},
{
question = "You look strange today, Normal, you put your tie on backwards, is everything ok? ",
answers = {
{ label = "Get it right, Norman ... NORMAN!", next_step = 3 },
},
},
{
question = "Yo Normann, text goes from left to right, not right to left, these parts!",
answers = {
{ label = "Uhm...why?", next_step = nil },
},
},
},
});
Discussion.register({
id = "coworker_disc_asc_2",
steps = {
{
question = "Normann, are you ok? You were doing weird things while typing?",
answers = {
{ label = "Naw", next_step = 2 },
},
},
{
question = "Oh, it's ok, I'm not wathcing you. Noone really is. *giggle*",
answers = {
{ label = "Huh ?", next_step = nil },
},
},
},
})
Discussion.register({
id = "coworker_disc_3",
steps = {
{
question = "You look so happy, did you catch a bull or something?",
answers = {
{ label = "What do you mean?", next_step = 2 },
},
},
{
question = "Most people catch colds! You are so strange!",
answers = {
{ label = "An apple a day keeps the cold away", next_step = 3 },
},
},
{
question = "You look like you don't really want to work today, are you ok?",
answers = {
{ label = "Oh brother", next_step = nil },
},
},
},
})
Discussion.register({
id = "coworker_disc_asc_3",
steps = {
{
question = "Normal, you should take a break, you don't live up to your name today",
answers = {
{ label = "Norman is the name ...", next_step = 2 },
},
},
{
question = "You aren't as enthusiastic as you were before!",
answers = {
{ label = "Burnout comes for everyone", next_step = nil },
}, },
}, },
}, },

View File

@@ -1,5 +1,5 @@
Discussion.register({ Discussion.register({
id = "sumphore_asc_1_a", id = "sumphore_disc_asc_1",
steps = { steps = {
{ {
question = "Are you still seeking the ox?", question = "Are you still seeking the ox?",
@@ -18,7 +18,7 @@ Discussion.register({
}) })
Discussion.register({ Discussion.register({
id = "sumphore_asc_1_b", id = "sumphore_disc_asc_2",
steps = { steps = {
{ {
question = "How's work? Your face looks strange", question = "How's work? Your face looks strange",
@@ -46,12 +46,12 @@ Discussion.register({
}, },
}, },
{ {
question = "Always trying to do the right thing, huh?", question = "Always trying to do the right thing, huh? What if you did the left thing instead?",
answers = { answers = {
{ label = "I've never thought of that up till now.", next_step = nil, on_select = function() { label = "I've never thought of that up till now.", next_step = nil, on_select = function()
Meter.add("ism", 5) Meter.add("ism", 5)
end }, end },
{ label = "Exactly.", next_step = nil, on_select = function() { label = "Silly wordgames, I like them.", next_step = nil, on_select = function()
Meter.add("wpm", 10) Meter.add("wpm", 10)
end }, end },
}, },
@@ -59,6 +59,32 @@ Discussion.register({
}, },
}) })
Discussion.register({
id = "sumphore_disc_asc_3",
steps = {
{
question = "Do you think it's work you're doing?",
answers = {
{ label = "... that sounds like it's from a movie.", next_step = 2 },
{ label = "Are you drunk, old man?", next_step = nil },
},
},
{
question = "You might just be trying too hard, why dont you just flow for a while?",
answers = {
{ label = "Flow where ?", next_step = 3 },
{ label = "I'm not sure what you mean.", next_step = nil },
},
},
{
question = "Flow carelessly, without any effort",
answers = {
{ label = "Consuming sth other than alcohol ?", next_step = nil },
{ label = "Deja vu", next_step = nil },
},
},
},
})
Discussion.register({ Discussion.register({
id = "homeless_guy", id = "homeless_guy",

View File

@@ -21,6 +21,8 @@ Context = {}
--- * triggers (table) Active trigger runtime state, keyed by trigger ID.<br/> --- * triggers (table) Active trigger runtime state, keyed by trigger ID.<br/>
--- * stat_screen_active (boolean) Whether the stat screen overlay is currently shown.<br/> --- * stat_screen_active (boolean) Whether the stat screen overlay is currently shown.<br/>
--- * have_met_sumphore (boolean) Whether the player has talked to the homeless guy.<br/> --- * have_met_sumphore (boolean) Whether the player has talked to the homeless guy.<br/>
--- * have_been_to_office (boolean) Whether the player has been to the office.<br/>
--- * have_done_work_today (boolean) Whether the player has done work today.<br/>
--- * game (table) Current game progress state. Contains: `current_screen` (string) active screen ID, `current_situation` (string|nil) active situation ID.<br/> --- * game (table) Current game progress state. Contains: `current_screen` (string) active screen ID, `current_situation` (string|nil) active situation ID.<br/>
function Context.initial_data() function Context.initial_data()
return { return {
@@ -40,6 +42,9 @@ function Context.initial_data()
timer = Timer.get_initial(), timer = Timer.get_initial(),
triggers = {}, triggers = {},
home_norman_visible = false, home_norman_visible = false,
have_been_to_office = false,
have_done_work_today = false,
should_ascend = false,
have_met_sumphore = false, have_met_sumphore = false,
game = { game = {
current_screen = "home", current_screen = "home",
@@ -93,10 +98,16 @@ function Context.new_game()
MysteriousManScreen.start({ MysteriousManScreen.start({
text = [[ text = [[
Norman was never a bad Norman was never a bad
simulation engineer, but ...
we need to be careful in simulation engineer,
letting him improve. We ...
need to distract him. but
...
we need to be careful
...
letting him improve.
...
We need to distract him.
]], ]],
on_text_complete = function() on_text_complete = function()
Audio.sfx_alarm() Audio.sfx_alarm()
@@ -111,7 +122,6 @@ function Context.new_game()
show_progress_text = false, show_progress_text = false,
on_win = function() on_win = function()
Audio.music_play_wakingup() Audio.music_play_wakingup()
Context.home_norman_visible = true
Meter.show() Meter.show()
Window.set_current("game") Window.set_current("game")
end, end,

View File

@@ -5,6 +5,9 @@ local _day_increase_handlers = {}
--- @within Day --- @within Day
function Day.increase() function Day.increase()
Context.day_count = Context.day_count + 1 Context.day_count = Context.day_count + 1
if Context.day_count == 3 then
Context.should_ascend = true
end
for _, handler in ipairs(_day_increase_handlers) do for _, handler in ipairs(_day_increase_handlers) do
handler() handler()
end end
@@ -25,7 +28,8 @@ Day.register_handler(function()
end) end)
Day.register_handler(function() Day.register_handler(function()
if Context.day_count == 3 then if Context.should_ascend then
Ascension.increase() Ascension.increase()
end end
Context.should_ascend = false
end) end)

View File

@@ -1,253 +1,264 @@
--- @section MysteriousManScreen --- @section MysteriousManScreen
local STATE_TEXT = "text" local STATE_TEXT = "text"
local STATE_DAY = "day" local STATE_DAY = "day"
local STATE_CHOICE = "choice" local STATE_CHOICE = "choice"
local ASC_01_TEXT = [[ local ASC_01_TEXT = [[
Normann seems to be in line, Normann seems to be in line,
... ...
and stays seeking for oxes and stays seeking for oxes
... ...
within the confines. within the confines.
... ...
Very good. Very good.
]] ]]
local ASC_12_TEXT = [[ local ASC_12_TEXT = [[
We have a problem! We have a problem!
... ...
Normann formed his first thought. Normann formed his first thought.
... ...
He saw the tracks. He saw the tracks.
]] ]]
local ASC_23_TEXT = [[ local ASC_23_TEXT = [[
Not good, not terrible. Not good, not terrible.
... ...
Normann caught his glimpse of another way Normann caught his glimpse
*quite literally* ...
... of another way
if this continues, ...
... - quite literally -
we will lose control. ...
]] if this continues,
local ASC_34_TEXT = [[ ...
There is no turning back now for Norman. we will lose control.
... ]]
He caught on. local ASC_34_TEXT = [[
... There is no turning back now for Norman.
I hoped it would never come to this... ...
]] He caught on.
...
--[[ Norman speaks for the first time during MM screen ]] I hoped it would never come to this...
local ASC_45_TEXT = [[ ]]
Wait, who are you?
... --[[ Norman speaks for the first time during MM screen ]]
*silence* local ASC_45_TEXT = [[
... Wait, who are you?
Why am I seeing this? ...
... *silence*
*silence* ...
... Why am I seeing this?
]] ...
*silence*
local state = STATE_TEXT ...
local text_y = Config.screen.height ]]
local text_speed = 0.2
local day_timer = 0 local ascension_texts = {
local day_display_frames = 120 [1] = ASC_01_TEXT,
local text_done = false [2] = ASC_12_TEXT,
local text_done_timer = 0 [3] = ASC_23_TEXT,
local TEXT_DONE_HOLD_FRAMES = 120 [4] = ASC_34_TEXT,
local selected_choice = 1 [5] = ASC_45_TEXT,
local text = ASC_01_TEXT }
local day_text_override = nil
local on_text_complete = nil function MysteriousManScreen.get_text_for_level(level)
local show_mysterious_screen = true return ascension_texts[level] or ASC_01_TEXT
local trigger_flash_on_wake = false end
local function draw_mysterious_man_background() local state = STATE_TEXT
local img_values = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 4, 1, 0, 2, 4, 1, 0, 2, 4, 1, 0, 2, 4, 1, 0, 2, 4, 1, 0, 2, 4, 2, 1, 4, 2, 1, 4, 1, 0, 2, 4, 1, 0, 1, 4, 2, 1, 2, 1, 0, 1, 2, 4, 1, 0, 2, 4, 2, 1, 0, 1, 2, 1, 2, 1, 0, 1, 4, 1, 0, 2, 4, 2, 0, 1, 0, 1, 0, 1, 2, 4, 1, 0, 2, 4, 2, 1, 0, 1, 4, 1, 0, 2, 4, 2, 0, 1, 2, 4, 1, 0, 2, 4, 1, 0, 1, 0, 4, 1, 0, 2, 4, 0, 1, 0, 1, 0, 1, 0, 4, 1, 0, 2, 4, 0, 1, 4, 1, 0, 2, 4, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 0, 4, 1, 0, 2, 4, 1, 0, 1, 0, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 1, 2, 1, 0, 1, 4, 1, 0, 2, 4, 2, 1, 0, 1, 2, 4, 1, 0, 2, 4, 2, 1, 0, 1, 2, 4, 1, 0, 2, 4, 1, 2, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 0, 2, 4, 1, 0, 2, 4, 0, 1, 0, 1, 2, 1, 0, 1, 0, 2, 4, 1, 0, 2, 4, 2, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 2, 1, 0, 1, 0, 2, 4, 2, 4, 1, 0, 2, 4, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 2, 1, 0, 1, 0, 2, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 2, 0, 1, 4, 1, 0, 2, 4, 2, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 2, 1, 0, 2, 4, 1, 0, 2, 4, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 0, 1, 0, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 0, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 0, 2, 4, 1, 0, 2, 4, 2, 1, 0, 1, 0, 1, 0, 1, 2, 4, 1, 0, 2, 4, 2, 1, 0, 1, 0, 1, 0, 1, 2, 4, 1, 0, 2, 4, 2, 1, 0, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 2, 4, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 4, 2, 4, 1, 0, 2, 4, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 4, 2, 4, 1, 0, 2, 4, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 4, 1, 0, 2, 4, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 4, 1, 0, 2, 4, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 2, 1, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 2, 0, 1, 0, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 2, 0, 1, 0, 1, 0, 4, 1, 0, 2, 4, 0, 1, 0, 1, 0, 2, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 0, 2, 0, 1, 4, 1, 0, 2, 4, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 2, 0, 1, 0, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 2, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 0, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 0, 4, 1, 0, 2, 4, 1, 0, 2, 0, 1, 0, 1, 0, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 2, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 2, 4, 1, 0, 2, 4, 2, 1, 0, 1, 0, 1, 2, 4, 1, 0, 2, 4, 2, 1, 0, 1, 0, 1, 2, 4, 1, 0, 2, 4, 2, 0, 1, 0, 1, 4, 1, 0, 2, 4, 2, 0, 1, 0, 1, 0, 4, 1, 0, 2, 4, 1, 0, 1, 0, 1, 0, 1, 4, 1, 0, 2, 4, 0, 1, 0, 1, 4, 2, 1, 0, 1, 2, 1, 2, 1, 0, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 0, 1, 2, 0, 1, 0, 2, 1, 0, 1, 2, 0, 1, 0, 2, 0, 1, 0, 1, 0, 1, 2, 0, 1, 0, 1, 0, 1, 0, 2, 0, 1, 0, 1, 0, 1, 0, 2, 0, 1, 0, 1, 0, 2, 1, 0, 1, 0, 1, 2, 0, 1, 0, 2, 0, 2, 1, 0, 1, 2, 0, 2, 1, 0, 1, 0, 1, 2, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 0, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 2, 1, 0, 1, 2, 0, 1, 0, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 2, 1, 0, 2, 0, 1, 0, 1, 0, 2, 0, 1, 0, 1, 0, 2, 0, 1, 0, 2, 0, 1, 0, 1, 0, 2, 1, 0, 1, 2, 0, 1, 0, 1, 0, 1, 0, 1, 0, 2, 0, 1, 0, 2, 0, 1, 0, 2, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 } local text_y = Config.screen.height
local text_speed = 0.2
local img_runs = { 1480, 1, 151, 1, 87, 1, 1, 150, 1, 1, 86, 1, 2, 148, 1, 2, 87, 2, 148, 2, 88, 2, 148, 2, 88, 2, 148, 2, 88, 2, 148, 2, 88, 2, 70, 1, 2, 9, 1, 2, 63, 2, 88, 2, 69, 1, 2, 3, 5, 1, 1, 1, 1, 1, 1, 1, 61, 2, 88, 2, 68, 1, 1, 3, 1, 2, 1, 3, 2, 3, 2, 61, 2, 88, 2, 68, 1, 6, 1, 4, 1, 5, 1, 1, 60, 2, 88, 2, 67, 1, 1, 17, 2, 60, 2, 88, 2, 67, 1, 19, 1, 1, 59, 2, 88, 2, 67, 1, 19, 1, 1, 59, 2, 88, 2, 67, 4, 1, 11, 1, 1, 1, 3, 59, 2, 88, 2, 67, 21, 1, 59, 2, 88, 2, 67, 21, 1, 59, 2, 88, 2, 66, 1, 21, 2, 58, 2, 88, 2, 66, 1, 21, 1, 1, 58, 2, 88, 2, 66, 4, 17, 2, 1, 58, 2, 88, 2, 65, 2, 5, 1, 15, 2, 58, 2, 88, 2, 63, 1, 1, 2, 22, 4, 55, 2, 88, 2, 57, 2, 2, 34, 2, 2, 49, 2, 88, 2, 55, 1, 2, 39, 3, 1, 47, 2, 88, 2, 55, 5, 1, 3, 2, 2, 1, 25, 1, 1, 1, 1, 1, 1, 1, 47, 2, 88, 2, 57, 1, 2, 1, 29, 1, 4, 1, 1, 1, 1, 49, 2, 88, 2, 59, 1, 2, 8, 15, 9, 2, 52, 2, 88, 2, 62, 2, 1, 1, 1, 24, 1, 1, 1, 54, 2, 88, 2, 66, 1, 22, 1, 58, 2, 88, 2, 66, 1, 21, 1, 59, 2, 88, 2, 66, 2, 20, 1, 59, 2, 88, 2, 65, 3, 20, 2, 58, 2, 88, 2, 63, 2, 2, 1, 20, 1, 1, 2, 56, 2, 88, 2, 61, 2, 4, 1, 20, 1, 2, 2, 55, 2, 88, 2, 59, 1, 1, 6, 1, 19, 1, 4, 2, 54, 2, 88, 2, 58, 2, 7, 2, 17, 1, 1, 6, 2, 52, 3, 87, 2, 56, 1, 2, 9, 1, 26, 2, 51, 3, 87, 2, 55, 1, 1, 40, 1, 50, 2, 88, 2, 54, 2, 41, 1, 50, 2, 88, 2, 53, 2, 42, 2, 49, 2, 88, 2, 52, 2, 44, 2, 48, 2, 88, 2, 51, 2, 46, 2, 47, 2, 88, 2, 50, 2, 16, 1, 31, 1, 47, 2, 88, 2, 50, 3, 1, 14, 1, 29, 1, 1, 2, 46, 2, 88, 2, 50, 18, 1, 29, 1, 2, 1, 46, 2, 88, 2, 50, 4, 14, 1, 33, 1, 45, 2, 88, 2, 53, 1, 3, 11, 2, 15, 1, 13, 1, 2, 46, 2, 88, 2, 56, 1, 1, 11, 1, 15, 1, 10, 2, 1, 49, 2, 88, 2, 55, 2, 3, 10, 2, 12, 2, 8, 8, 46, 2, 88, 2, 50, 1, 1, 4, 4, 1, 9, 2, 11, 2, 8, 2, 4, 2, 1, 2, 1, 1, 42, 2, 88, 2, 48, 2, 3, 8, 1, 9, 2, 9, 3, 7, 2, 8, 1, 1, 2, 1, 1, 40, 2, 88, 2, 45, 3, 2, 1, 1, 1, 1, 8, 1, 7, 1, 1, 3, 6, 4, 6, 1, 8, 1, 1, 1, 1, 4, 2, 38, 2, 88, 2, 45, 1, 2, 2, 22, 4, 4, 4, 6, 1, 10, 1, 1, 2, 1, 2, 1, 2, 37, 2, 88, 2, 42, 1, 1, 1, 4, 1, 2, 19, 1, 1, 4, 1, 5, 21, 1, 2, 6, 35, 2, 88, 2, 42, 2, 1, 1, 1, 1, 15, 2, 8, 3, 4, 3, 6, 1, 17, 1, 1, 2, 1, 1, 1, 34, 2, 88, 2, 41, 3, 1, 1, 15, 2, 9, 3, 5, 2, 8, 1, 21, 1, 1, 34, 2, 88, 2, 41, 1, 1, 1, 16, 2, 11, 2, 5, 2, 9, 2, 18, 2, 1, 34, 2, 88, 2, 41, 1, 2, 1, 14, 2, 13, 1, 5, 1, 12, 1, 17, 1, 2, 34, 2, 88, 2, 41, 1, 16, 1, 17, 1, 2, 1, 14, 2, 17, 1, 1, 33, 2, 88, 2, 41, 1, 2, 1, 12, 1, 17, 1, 3, 2, 15, 1, 14, 1, 1, 1, 1, 33, 2, 88, 2, 41, 15, 1, 22, 1, 17, 1, 1, 11, 1, 3, 1, 33, 2, 88, 2, 41, 1, 14, 2, 40, 1, 15, 1, 33, 2, 88, 2, 41, 1, 15, 2, 35, 1, 3, 1, 10, 1, 4, 1, 33, 2, 88, 2, 41, 1, 3, 1, 12, 2, 36, 2, 11, 1, 4, 1, 33, 2, 88, 2, 40, 1, 1, 18, 1, 35, 1, 12, 1, 4, 1, 1, 32, 2, 88, 2, 40, 2, 4, 1, 14, 1, 33, 1, 12, 1, 6, 1, 32, 2, 88, 2, 40, 1, 6, 1, 14, 1, 31, 1, 13, 1, 6, 1, 32, 2, 88, 2, 39, 2, 22, 2, 28, 1, 21, 1, 1, 31, 2, 88, 2, 39, 2, 24, 1, 26, 1, 22, 1, 1, 31, 2, 88, 2, 39, 2, 25, 1, 24, 1, 23, 1, 1, 31, 2, 88, 2, 39, 1, 27, 1, 22, 2, 23, 1, 1, 31, 2, 88, 2, 39, 1, 49, 2, 24, 3, 30, 2, 88, 2, 39, 1, 48, 1, 27, 1, 1, 30, 2, 88, 2, 39, 1, 47, 2, 27, 1, 1, 30, 2, 88, 2, 37, 1, 1, 47, 2, 28, 1, 1, 30, 2, 88, 2, 37, 1, 1, 46, 1, 30, 2, 1, 29, 2, 88, 2, 37, 1, 47, 1, 30, 2, 30, 2, 88, 2, 37, 1, 1, 2, 43, 1, 33, 30, 3, 87, 2, 37, 1, 45, 1, 31, 1, 1, 2, 29, 3, 87, 2, 37, 45, 1, 35, 1, 29, 1, 1, 88, 2, 1, 35, 1, 1, 80, 2, 1, 26, 1, 3, 86, 1, 1, 2, 1, 21, 1, 4, 4, 2, 1, 3, 80, 30, 1, 2, 125, 2, 80, 2, 156, 2, 79, 2, 1, 156, 2, 1, 77, 4, 156, 1, 3, 76, 3, 1, 140, 1, 15, 1, 2, 2, 74, 2, 1, 1, 1, 5, 3, 129, 1, 18, 1, 82, 1, 7, 1, 129, 1, 18, 1, 82, 1, 9, 1, 123, 3, 20, 1, 1, 80, 2, 11, 1, 1, 119, 1, 22, 1, 1, 1, 2, 76, 4, 1, 154, 2, 2, 63, 1, 14, 3, 1, 126, 1, 27, 2, 65, 1, 17, 1, 17, 2, 132, 4, 66, 1, 17, 4, 113, 39, 66, 2, 16, 31, 191, 1, 1, 1, 15, 1, 153, 2, 15, 3, 48, 2, 16, 2, 152, 1, 16, 1, 1, 1, 48, 2, 16, 2, 152, 1, 1, 2, 2, 1, 10, 1, 1, 1, 48, 1, 13, 6, 153, 1, 3, 13, 1, 1, 48, 1, 15, 2, 1, 1, 153, 3, 64, 1, 16, 2, 154, 1, 1, 83, 1, 154, 1, 17, 1, 66, 1, 154, 1, 17, 1, 66, 1, 155, 1, 82, 1, 156, 1, 82, 1, 156, 1, 1, 80, 1, 1, 157, 2, 78, 2, 158, 2, 78, 2, 158, 1, 80, 1, 158, 1, 79, 2, 158, 1, 79, 1, 159, 1, 79, 1, 160, 1, 77, 2, 160, 1, 77, 1, 162, 1, 74, 1, 1, 1, 162, 1, 75, 1, 239, 1, 165, 1, 72, 1, 166, 1, 240, 1, 69, 1, 412, 1, 63, 1, 175, 1, 63, 2, 238, 1, 175, 1, 63, 1, 239, 1, 807 } local day_timer = 0
local day_display_frames = 120
local val_i = 0 local text_done = false
local run = 0 local text_done_timer = 0
for y = 0, 136 - 1 do local TEXT_DONE_HOLD_FRAMES = 120
for x = 0, 240 - 1 do local selected_choice = 1
if run == 0 then local text = ASC_01_TEXT
val_i = val_i + 1 local day_text_override = nil
run = img_runs[val_i] local on_text_complete = nil
end local show_mysterious_screen = true
run = run - 1 local trigger_flash_on_wake = false
pix(x, y, img_values[val_i])
end local function draw_mysterious_man_background()
end local img_values = {0,1,0,1,0,1,0,1,0,1,0,1,2,1,4,1,0,2,4,1,0,2,4,1,0,2,4,1,0,2,4,1,0,2,4,2,1,4,2,1,4,1,0,2,4,1,0,1,4,2,1,2,1,0,1,2,4,1,0,2,4,2,1,0,1,2,1,2,1,0,1,4,1,0,2,4,2,0,1,0,1,0,1,2,4,1,0,2,4,2,1,0,1,4,1,0,2,4,2,0,1,2,4,1,0,2,4,1,0,1,0,4,1,0,2,4,0,1,0,1,0,1,0,4,1,0,2,4,0,1,4,1,0,2,4,0,1,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,0,4,1,0,2,4,1,0,1,0,4,1,0,2,4,1,0,1,0,1,4,1,0,2,4,1,2,1,0,1,4,1,0,2,4,2,1,0,1,2,4,1,0,2,4,2,1,0,1,2,4,1,0,2,4,1,2,0,1,0,1,0,1,2,1,2,1,0,2,4,1,0,2,4,0,1,0,1,2,1,0,1,0,2,4,1,0,2,4,2,1,0,1,0,1,4,1,0,2,4,2,1,0,1,0,2,4,2,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,0,1,0,1,4,1,0,2,4,1,0,1,0,1,0,1,4,1,0,2,4,2,1,0,1,0,2,0,1,4,1,0,2,4,1,0,1,0,1,2,0,1,4,1,0,2,4,2,1,0,1,0,1,4,1,0,2,4,2,1,0,2,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,4,1,0,2,4,1,0,1,0,1,4,1,0,2,4,0,1,0,1,0,1,0,1,4,1,0,2,4,0,1,0,1,0,1,4,1,0,2,4,1,0,1,0,2,4,1,0,2,4,2,1,0,1,0,1,0,1,2,4,1,0,2,4,2,1,0,1,0,1,0,1,2,4,1,0,2,4,2,1,0,1,0,1,0,1,4,1,0,2,4,2,4,1,0,1,0,1,0,1,0,1,0,1,2,1,4,2,4,1,0,2,4,2,1,0,1,0,1,0,1,0,1,0,1,2,1,4,2,4,1,0,2,4,2,1,2,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,2,4,1,0,2,4,1,2,1,0,1,0,1,0,1,0,1,0,1,0,1,2,1,4,1,0,2,4,2,1,2,1,0,1,0,1,0,1,0,1,0,1,0,1,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,2,1,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,1,0,1,0,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,1,0,1,0,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,2,0,1,0,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,1,0,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,2,0,1,0,1,0,4,1,0,2,4,0,1,0,1,0,2,1,0,1,0,1,4,1,0,2,4,1,0,1,0,1,0,1,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,1,4,1,0,2,4,1,0,1,0,1,0,1,0,2,0,1,4,1,0,2,4,0,1,0,1,0,1,0,1,0,1,0,4,1,0,2,4,1,0,1,0,1,0,1,0,1,0,1,4,1,0,2,4,1,0,2,0,1,0,1,0,1,0,1,4,1,0,2,4,1,0,1,0,1,0,1,2,4,1,0,2,4,1,0,1,0,1,0,1,0,4,1,0,2,4,1,0,1,0,1,0,1,0,4,1,0,2,4,1,0,2,0,1,0,1,0,4,1,0,2,4,1,0,1,0,1,4,1,0,2,4,1,0,1,0,1,2,4,1,0,2,4,1,0,1,0,1,2,4,1,0,2,4,2,1,0,1,0,1,2,4,1,0,2,4,2,1,0,1,0,1,2,4,1,0,2,4,2,0,1,0,1,4,1,0,2,4,2,0,1,0,1,0,4,1,0,2,4,1,0,1,0,1,0,1,4,1,0,2,4,0,1,0,1,4,2,1,0,1,2,1,2,1,0,1,2,1,2,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,2,0,1,2,0,1,0,2,1,0,1,2,0,1,0,2,0,1,0,1,0,1,2,0,1,0,1,0,1,0,2,0,1,0,1,0,1,0,2,0,1,0,1,0,2,1,0,1,0,1,2,0,1,0,2,0,2,1,0,1,2,0,2,1,0,1,0,1,2,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,2,0,2,1,0,1,0,1,0,1,0,1,0,2,1,0,1,2,0,1,0,1,2,1,0,1,0,1,0,1,0,2,1,0,2,0,1,0,1,0,2,0,1,0,1,0,2,0,1,0,2,0,1,0,1,0,2,1,0,1,2,0,1,0,1,0,1,0,1,0,2,0,1,0,2,0,1,0,2,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0}
end
local img_runs = {1480,1,151,1,87,1,1,150,1,1,86,1,2,148,1,2,87,2,148,2,88,2,148,2,88,2,148,2,88,2,148,2,88,2,70,1,2,9,1,2,63,2,88,2,69,1,2,3,5,1,1,1,1,1,1,1,61,2,88,2,68,1,1,3,1,2,1,3,2,3,2,61,2,88,2,68,1,6,1,4,1,5,1,1,60,2,88,2,67,1,1,17,2,60,2,88,2,67,1,19,1,1,59,2,88,2,67,1,19,1,1,59,2,88,2,67,4,1,11,1,1,1,3,59,2,88,2,67,21,1,59,2,88,2,67,21,1,59,2,88,2,66,1,21,2,58,2,88,2,66,1,21,1,1,58,2,88,2,66,4,17,2,1,58,2,88,2,65,2,5,1,15,2,58,2,88,2,63,1,1,2,22,4,55,2,88,2,57,2,2,34,2,2,49,2,88,2,55,1,2,39,3,1,47,2,88,2,55,5,1,3,2,2,1,25,1,1,1,1,1,1,1,47,2,88,2,57,1,2,1,29,1,4,1,1,1,1,49,2,88,2,59,1,2,8,15,9,2,52,2,88,2,62,2,1,1,1,24,1,1,1,54,2,88,2,66,1,22,1,58,2,88,2,66,1,21,1,59,2,88,2,66,2,20,1,59,2,88,2,65,3,20,2,58,2,88,2,63,2,2,1,20,1,1,2,56,2,88,2,61,2,4,1,20,1,2,2,55,2,88,2,59,1,1,6,1,19,1,4,2,54,2,88,2,58,2,7,2,17,1,1,6,2,52,3,87,2,56,1,2,9,1,26,2,51,3,87,2,55,1,1,40,1,50,2,88,2,54,2,41,1,50,2,88,2,53,2,42,2,49,2,88,2,52,2,44,2,48,2,88,2,51,2,46,2,47,2,88,2,50,2,16,1,31,1,47,2,88,2,50,3,1,14,1,29,1,1,2,46,2,88,2,50,18,1,29,1,2,1,46,2,88,2,50,4,14,1,33,1,45,2,88,2,53,1,3,11,2,15,1,13,1,2,46,2,88,2,56,1,1,11,1,15,1,10,2,1,49,2,88,2,55,2,3,10,2,12,2,8,8,46,2,88,2,50,1,1,4,4,1,9,2,11,2,8,2,4,2,1,2,1,1,42,2,88,2,48,2,3,8,1,9,2,9,3,7,2,8,1,1,2,1,1,40,2,88,2,45,3,2,1,1,1,1,8,1,7,1,1,3,6,4,6,1,8,1,1,1,1,4,2,38,2,88,2,45,1,2,2,22,4,4,4,6,1,10,1,1,2,1,2,1,2,37,2,88,2,42,1,1,1,4,1,2,19,1,1,4,1,5,21,1,2,6,35,2,88,2,42,2,1,1,1,1,15,2,8,3,4,3,6,1,17,1,1,2,1,1,1,34,2,88,2,41,3,1,1,15,2,9,3,5,2,8,1,21,1,1,34,2,88,2,41,1,1,1,16,2,11,2,5,2,9,2,18,2,1,34,2,88,2,41,1,2,1,14,2,13,1,5,1,12,1,17,1,2,34,2,88,2,41,1,16,1,17,1,2,1,14,2,17,1,1,33,2,88,2,41,1,2,1,12,1,17,1,3,2,15,1,14,1,1,1,1,33,2,88,2,41,15,1,22,1,17,1,1,11,1,3,1,33,2,88,2,41,1,14,2,40,1,15,1,33,2,88,2,41,1,15,2,35,1,3,1,10,1,4,1,33,2,88,2,41,1,3,1,12,2,36,2,11,1,4,1,33,2,88,2,40,1,1,18,1,35,1,12,1,4,1,1,32,2,88,2,40,2,4,1,14,1,33,1,12,1,6,1,32,2,88,2,40,1,6,1,14,1,31,1,13,1,6,1,32,2,88,2,39,2,22,2,28,1,21,1,1,31,2,88,2,39,2,24,1,26,1,22,1,1,31,2,88,2,39,2,25,1,24,1,23,1,1,31,2,88,2,39,1,27,1,22,2,23,1,1,31,2,88,2,39,1,49,2,24,3,30,2,88,2,39,1,48,1,27,1,1,30,2,88,2,39,1,47,2,27,1,1,30,2,88,2,37,1,1,47,2,28,1,1,30,2,88,2,37,1,1,46,1,30,2,1,29,2,88,2,37,1,47,1,30,2,30,2,88,2,37,1,1,2,43,1,33,30,3,87,2,37,1,45,1,31,1,1,2,29,3,87,2,37,45,1,35,1,29,1,1,88,2,1,35,1,1,80,2,1,26,1,3,86,1,1,2,1,21,1,4,4,2,1,3,80,30,1,2,125,2,80,2,156,2,79,2,1,156,2,1,77,4,156,1,3,76,3,1,140,1,15,1,2,2,74,2,1,1,1,5,3,129,1,18,1,82,1,7,1,129,1,18,1,82,1,9,1,123,3,20,1,1,80,2,11,1,1,119,1,22,1,1,1,2,76,4,1,154,2,2,63,1,14,3,1,126,1,27,2,65,1,17,1,17,2,132,4,66,1,17,4,113,39,66,2,16,31,191,1,1,1,15,1,153,2,15,3,48,2,16,2,152,1,16,1,1,1,48,2,16,2,152,1,1,2,2,1,10,1,1,1,48,1,13,6,153,1,3,13,1,1,48,1,15,2,1,1,153,3,64,1,16,2,154,1,1,83,1,154,1,17,1,66,1,154,1,17,1,66,1,155,1,82,1,156,1,82,1,156,1,1,80,1,1,157,2,78,2,158,2,78,2,158,1,80,1,158,1,79,2,158,1,79,1,159,1,79,1,160,1,77,2,160,1,77,1,162,1,74,1,1,1,162,1,75,1,239,1,165,1,72,1,166,1,240,1,69,1,412,1,63,1,175,1,63,2,238,1,175,1,63,1,239,1,807}
local choices = {
{ local val_i=0
label = "Wake Up", local run=0
}, for y=0,136-1 do
{ for x=0,240-1 do
label = "Stay in Bed", if run==0 then
}, val_i=val_i+1
} run=img_runs[val_i]
end
local function go_to_day_state() run=run-1
if on_text_complete then pix(x,y,img_values[val_i])
on_text_complete() end
on_text_complete = nil end
end end
if Context.game.current_screen ~= "mysterious_man" then
return local choices = {
end {
state = STATE_DAY label = "Wake Up",
day_timer = day_display_frames },
end {
label = "Stay in Bed",
local function wake_up() },
Context.home_norman_visible = false }
Util.go_to_screen_by_id("home")
MinigameButtonMashWindow.start("game", { local function go_to_day_state()
focus_center_x = (Config.screen.width / 2) - 22, if on_text_complete then
focus_center_y = (Config.screen.height / 2) - 18, on_text_complete()
focus_initial_radius = 0, on_text_complete = nil
target_points = 100, end
instruction_text = "Wake up Norman!", if Context.game.current_screen ~= "mysterious_man" then
show_progress_text = false, return
on_win = function() end
Audio.music_play_wakingup() state = STATE_DAY
Context.home_norman_visible = true day_timer = day_display_frames
Meter.show() end
if trigger_flash_on_wake then
trigger_flash_on_wake = false local function wake_up()
Ascension.start_flash() Context.home_norman_visible = false
end Util.go_to_screen_by_id("home")
Window.set_current("game") MinigameButtonMashWindow.start("game", {
end, focus_center_x = (Config.screen.width / 2) - 22,
}) focus_center_y = (Config.screen.height / 2) - 18,
end focus_initial_radius = 0,
target_points = 100,
local function stay_in_bed() instruction_text = "Wake up Norman!",
Day.increase() show_progress_text = false,
state = STATE_DAY on_win = function()
day_timer = day_display_frames Audio.music_play_wakingup()
end Meter.show()
if trigger_flash_on_wake then
--- Starts the mysterious man screen. trigger_flash_on_wake = false
--- @param[opt] options table Optional configuration.</br> Ascension.start_flash()
--- Fields: </br> end
--- * text (string) Override for the scrolling text.<br/> Window.set_current("game")
--- * day_text (string) Override for the centered day label.<br/> end,
--- * on_text_complete (function) Callback fired once when the text phase ends.<br/> })
--- * skip_text (boolean) If true, skip the text phase and go straight to day display.<br/> end
function MysteriousManScreen.start(options)
options = options or {} local function stay_in_bed()
day_timer = 0 Day.increase()
text_done = false state = STATE_DAY
text_done_timer = 0 day_timer = day_display_frames
selected_choice = 1 end
text = options.text or ASC_01_TEXT
local line_count = 1 --- Starts the mysterious man screen.
for _ in string.gmatch(text, "\n") do line_count = line_count + 1 end --- @param[opt] options table Optional configuration.</br>
local text_block_h = line_count * 8 --- Fields: </br>
text_y = math.floor((Config.screen.height - text_block_h) / 2) --- * text (string) Override for the scrolling text.<br/>
day_text_override = options.day_text --- * day_text (string) Override for the centered day label.<br/>
on_text_complete = options.on_text_complete --- * on_text_complete (function) Callback fired once when the text phase ends.<br/>
Meter.hide() --- * skip_text (boolean) If true, skip the text phase and go straight to day display.<br/>
trigger_flash_on_wake = not options.skip_text function MysteriousManScreen.start(options)
if options.skip_text then options = options or {}
show_mysterious_screen = false day_timer = 0
state = STATE_DAY text_done = false
day_timer = day_display_frames text_done_timer = 0
else selected_choice = 1
show_mysterious_screen = true text = options.text or ASC_01_TEXT
state = STATE_TEXT text_y = Config.screen.height
end day_text_override = options.day_text
Util.go_to_screen_by_id("mysterious_man") on_text_complete = options.on_text_complete
Window.set_current("game") Meter.hide()
end trigger_flash_on_wake = not options.skip_text
if options.skip_text then
--- Sets the scrolling text content. show_mysterious_screen = false
--- @param new_text string The text to display. state = STATE_DAY
function MysteriousManScreen.set_text(new_text) day_timer = day_display_frames
text = new_text else
end show_mysterious_screen = true
state = STATE_TEXT
Screen.register({ end
id = "mysterious_man", Util.go_to_screen_by_id("mysterious_man")
name = "Mysterious Man", Window.set_current("game")
decisions = {}, end
background_color = Config.colors.black,
update = function() --- Sets the scrolling text content.
if state == STATE_TEXT then --- @param new_text string The text to display.
if not text_done then function MysteriousManScreen.set_text(new_text)
text_y = text_y - text_speed text = new_text
end
local lines = 1
for _ in string.gmatch(text, "\n") do Screen.register({
lines = lines + 1 id = "mysterious_man",
end name = "Mysterious Man",
decisions = {},
if text_y < -lines * 8 then background_color = Config.colors.black,
text_done = true update = function()
text_done_timer = TEXT_DONE_HOLD_FRAMES if state == STATE_TEXT then
end if not text_done then
else text_y = text_y - text_speed
text_done_timer = text_done_timer - 1
if text_done_timer <= 0 then local lines = 1
go_to_day_state() for _ in string.gmatch(text, "\n") do
end lines = lines + 1
end end
elseif state == STATE_DAY then
day_timer = day_timer - 1 if text_y < -lines * 8 then
text_done = true
if day_timer <= 0 or Input.select() then text_done_timer = TEXT_DONE_HOLD_FRAMES
if trigger_flash_on_wake or Ascension.get_level() < 1 then end
wake_up() else
else text_done_timer = text_done_timer - 1
state = STATE_CHOICE if text_done_timer <= 0 then
selected_choice = 1 go_to_day_state()
end end
end end
elseif state == STATE_CHOICE then elseif state == STATE_DAY then
selected_choice = UI.update_menu(choices, selected_choice) day_timer = day_timer - 1
if Input.select() then if day_timer <= 0 or Input.select() then
Audio.sfx_select() if trigger_flash_on_wake or Ascension.get_level() < 1 then
if selected_choice == 1 then wake_up()
wake_up() else
else state = STATE_CHOICE
stay_in_bed() selected_choice = 1
end end
end end
end elseif state == STATE_CHOICE then
end, selected_choice = UI.update_menu(choices, selected_choice)
draw = function()
if show_mysterious_screen then if Input.select() then
draw_mysterious_man_background() Audio.sfx_select()
end if selected_choice == 1 then
wake_up()
if state == STATE_TEXT then else
local cx = Config.screen.width / 2 stay_in_bed()
local line_y = text_y end
for line in (text .. "\n"):gmatch("(.-)\n") do end
Print.text_center(line, cx, line_y, Config.colors.light_grey) end
line_y = line_y + 8 end,
end draw = function()
elseif state == STATE_DAY then if show_mysterious_screen then
local day_text = day_text_override or ("Day " .. Context.day_count) draw_mysterious_man_background()
Print.text_center( end
day_text,
Config.screen.width / 2, if state == STATE_TEXT then
Config.screen.height / 2 - 3, local cx = Config.screen.width / 2
Config.colors.white local line_y = text_y
) for line in (text .. "\n"):gmatch("(.-)\n") do
elseif state == STATE_CHOICE then Print.text_center(line, cx, line_y, Config.colors.light_grey)
local menu_x = (Config.screen.width - 60) / 2 line_y = line_y + 8
local menu_y = (Config.screen.height - 20) / 2 end
UI.draw_menu(choices, selected_choice, menu_x, menu_y) elseif state == STATE_DAY then
end local day_text = day_text_override or ("Day " .. Context.day_count)
end, Print.text_center(
}) day_text,
Config.screen.width / 2,
Config.screen.height / 2 - 3,
Config.colors.white
)
elseif state == STATE_CHOICE then
local menu_x = (Config.screen.width - 60) / 2
local menu_y = (Config.screen.height - 20) / 2
UI.draw_menu(choices, selected_choice, menu_x, menu_y)
end
end,
})

View File

@@ -23,5 +23,6 @@ Screen.register({
Sprite.draw_at("dev_guru", 22 * 8, 10 * 8 + 4) Sprite.draw_at("dev_guru", 22 * 8, 10 * 8 + 4)
Sprite.draw_at("dev_operator", 27 * 8, 10 * 8 + 4) Sprite.draw_at("dev_operator", 27 * 8, 10 * 8 + 4)
end end
Context.have_been_to_office = true
end end
}) })

View File

@@ -19,6 +19,7 @@ Screen.register({
Focus.stop() Focus.stop()
Context.stat_screen_active = false Context.stat_screen_active = false
Meter.show() Meter.show()
Util.go_to_screen_by_id("home")
end end
end, end,
draw = function() draw = function()

View File

@@ -4,7 +4,7 @@ Screen.register({
decisions = { decisions = {
"go_to_home", "go_to_home",
"go_to_office", "go_to_office",
"start_discussion", "sumphore_discussion",
}, },
background = "street", background = "street",
draw = function() draw = function()

View File

@@ -2,6 +2,5 @@ Situation.register({
id = "drink_coffee", id = "drink_coffee",
handle = function() handle = function()
Audio.sfx_select() Audio.sfx_select()
Sprite.show("norman", 100, 100)
end, end,
}) })

View File

@@ -40,7 +40,9 @@ function MinigameDDRWindow.init_context()
use_pattern = false, use_pattern = false,
return_window = nil, return_window = nil,
win_timer = 0, win_timer = 0,
on_win = nil on_win = nil,
special_condition_met = false,
total_misses = 0,
} }
end end
@@ -162,6 +164,7 @@ function MinigameDDRWindow.update()
if mg.win_timer > 0 then if mg.win_timer > 0 then
mg.win_timer = mg.win_timer - 1 mg.win_timer = mg.win_timer - 1
if mg.win_timer == 0 then if mg.win_timer == 0 then
mg.special_condition_met = (mg.total_misses == 0)
Meter.on_minigame_complete() Meter.on_minigame_complete()
if mg.on_win then if mg.on_win then
mg.on_win() mg.on_win()
@@ -211,6 +214,7 @@ function MinigameDDRWindow.update()
if mg.bar_fill < 0 then if mg.bar_fill < 0 then
mg.bar_fill = 0 mg.bar_fill = 0
end end
mg.total_misses = mg.total_misses + 1
end end
end end
-- iterate backwards to avoid index shift issues -- iterate backwards to avoid index shift issues
@@ -254,6 +258,7 @@ function MinigameDDRWindow.update()
if mg.bar_fill < 0 then if mg.bar_fill < 0 then
mg.bar_fill = 0 mg.bar_fill = 0
end end
mg.total_misses = mg.total_misses + 1
end end
end end
end end

View File

@@ -70,6 +70,9 @@ function MinigameButtonMashWindow.update()
if mg.win_timer == 0 then if mg.win_timer == 0 then
Meter.on_minigame_complete() Meter.on_minigame_complete()
if mg.focus_center_x then Focus.stop() end if mg.focus_center_x then Focus.stop() end
Context.home_norman_visible = true
Context.have_done_work_today = false
Context.have_been_to_office = false
if mg.on_win then if mg.on_win then
mg.on_win() mg.on_win()
else else