diff --git a/.luacheckrc b/.luacheckrc
index fa1e0e6..3d329af 100644
--- a/.luacheckrc
+++ b/.luacheckrc
@@ -30,6 +30,8 @@ globals = {
"exit",
"trace",
"index_menu",
+ "MapManager",
+ "map",
}
diff --git a/impostor.inc b/impostor.inc
index d69c758..19e2ee8 100644
--- a/impostor.inc
+++ b/impostor.inc
@@ -12,6 +12,8 @@ desition/desition.go_to_walking_to_home.lua
desition/desition.play_button_mash.lua
desition/desition.play_rhythm.lua
desition/desition.play_ddr.lua
+map/map.manager.lua
+map/map.bedroom.lua
screen/screen.manager.lua
screen/screen.home.lua
screen/screen.toilet.lua
@@ -24,7 +26,6 @@ system/system.print.lua
system/system.input.lua
system/system.audio.lua
system/system.ui.lua
-map/map.bedroom.lua
window/window.splash.lua
window/window.intro.lua
window/window.menu.lua
diff --git a/inc/desition/desition.go_to_walking_to_home.lua b/inc/desition/desition.go_to_walking_to_home.lua
index 46cc488..d98395b 100644
--- a/inc/desition/desition.go_to_walking_to_home.lua
+++ b/inc/desition/desition.go_to_walking_to_home.lua
@@ -1,6 +1,6 @@
DesitionManager.register({
id = "go_to_walking_to_home",
- label = "Go to Walking to home",
+ label = "Walking to home",
handle = function()
Util.go_to_screen_by_id("walking_to_home")
end,
diff --git a/inc/desition/desition.go_to_walking_to_office.lua b/inc/desition/desition.go_to_walking_to_office.lua
index 458b3a8..8048f68 100644
--- a/inc/desition/desition.go_to_walking_to_office.lua
+++ b/inc/desition/desition.go_to_walking_to_office.lua
@@ -1,6 +1,6 @@
DesitionManager.register({
id = "go_to_walking_to_office",
- label = "Go to Walking to office",
+ label = "Walking to office",
handle = function()
Util.go_to_screen_by_id("walking_to_office")
end,
diff --git a/inc/desition/desition.manager.lua b/inc/desition/desition.manager.lua
index df82ea9..3d0ea4f 100644
--- a/inc/desition/desition.manager.lua
+++ b/inc/desition/desition.manager.lua
@@ -1,41 +1,31 @@
-DesitionManager = {}
+local _desitions = {}
-local _desitions = {} -- Private table to store all desitions
-
--- Registers a decision object with the manager
--- desition_object: A table containing id, label, handle(), and condition()
-function DesitionManager.register(desition_object)
- if not desition_object or not desition_object.id then
+function DesitionManager.register(desition)
+ if not desition or not desition.id then
PopupWindow.show({"Error: Invalid desition object registered (missing id)!"})
return
end
- if not desition_object.label then
+ if not desition.label then
PopupWindow.show({"Error: Invalid desition object registered (missing label)!"})
return
end
- -- Ensure handle() and condition() methods exist with defaults if missing
- if not desition_object.condition then
- desition_object.condition = function() return true end
+ if not desition.condition then
+ desition.condition = function() return true end
end
- if not desition_object.handle then
- desition_object.handle = function() end
+ if not desition.handle then
+ desition.handle = function() end
end
- if _desitions[desition_object.id] then
- -- Optional: warning if overwriting an existing desition
- trace("Warning: Overwriting desition with id: " .. desition_object.id)
+ if _desitions[desition.id] then
+ trace("Warning: Overwriting desition with id: " .. desition.id)
end
- _desitions[desition_object.id] = desition_object
+ _desitions[desition.id] = desition
end
--- Retrieves a desition by its id
--- id: unique string identifier of the desition
--- Returns the desition object, or nil if not found
function DesitionManager.get(id)
return _desitions[id]
end
--- Optional: a way to get all registered desitions, if needed (e.g., for debug)
function DesitionManager.get_all()
return _desitions
end
diff --git a/inc/init/init.config.lua b/inc/init/init.config.lua
index a0d6ab3..73296b0 100644
--- a/inc/init/init.config.lua
+++ b/inc/init/init.config.lua
@@ -8,7 +8,7 @@ local DEFAULT_CONFIG = {
light_grey = 13,
dark_grey = 14,
green = 6,
- item = 12 -- yellow
+ item = 12
},
player = {
sprite_id = 1
@@ -19,7 +19,6 @@ local DEFAULT_CONFIG = {
}
local Config = {
- -- Copy default values initially
screen = DEFAULT_CONFIG.screen,
colors = DEFAULT_CONFIG.colors,
player = DEFAULT_CONFIG.player,
@@ -28,28 +27,23 @@ local Config = {
local CONFIG_SAVE_BANK = 7
local CONFIG_MAGIC_VALUE_ADDRESS = 2
-local CONFIG_SPLASH_DURATION_ADDRESS = 3 -- New address for splash duration
-local CONFIG_MAGIC_VALUE = 0xDE -- A magic number to check if config is saved
+local CONFIG_SPLASH_DURATION_ADDRESS = 3
+local CONFIG_MAGIC_VALUE = 0xDE
function Config.save()
- mset(CONFIG_MAGIC_VALUE, CONFIG_MAGIC_VALUE_ADDRESS, CONFIG_SAVE_BANK) -- Mark as saved
- --mset(Config.timing.splash_duration, CONFIG_SPLASH_DURATION_ADDRESS, CONFIG_SAVE_BANK)
+ mset(CONFIG_MAGIC_VALUE, CONFIG_MAGIC_VALUE_ADDRESS, CONFIG_SAVE_BANK)
end
function Config.load()
if mget(CONFIG_MAGIC_VALUE_ADDRESS, CONFIG_SAVE_BANK) == CONFIG_MAGIC_VALUE then
- -- Config has been saved, load values
Config.timing.splash_duration = mget(CONFIG_SPLASH_DURATION_ADDRESS, CONFIG_SAVE_BANK)
else
- -- No saved config, restore defaults
Config.restore_defaults()
end
end
function Config.restore_defaults()
Config.timing.splash_duration = DEFAULT_CONFIG.timing.splash_duration
- -- Any other configurable items should be reset here
end
--- Load configuration on startup
Config.load()
diff --git a/inc/init/init.context.lua b/inc/init/init.context.lua
index 44b8f21..54f4cb6 100644
--- a/inc/init/init.context.lua
+++ b/inc/init/init.context.lua
@@ -4,20 +4,6 @@ local SAVE_GAME_MAGIC_VALUE = 0xCA
local SAVE_GAME_CURRENT_SCREEN_ADDRESS = 6
--- Helper for deep copying tables
--- local function clone_table(t)
--- local copy = {}
--- for k, v in pairs(t) do
--- if type(v) == "table" then
--- copy[k] = clone_table(v)
--- else
--- copy[k] = v
--- end
--- end
--- return copy
--- end
-
--- This function returns a table containing only the initial *data* for Context
local function get_initial_data()
return {
active_window = WINDOW_SPLASH,
@@ -38,9 +24,9 @@ on than meets the eye.]]
},
current_screen = 1,
splash_timer = Config.timing.splash_duration,
- popup = { -- New popup table
+ popup = {
show = false,
- content = {} -- Array of strings
+ content = {}
},
player = {
sprite_id = Config.player.sprite_id
@@ -53,9 +39,9 @@ on than meets the eye.]]
},
menu_items = {},
selected_menu_item = 1,
- selected_desition_index = 1, -- New desition index
- game_in_progress = false, -- New flag
- screens = {} -- Initialize as empty, populated on reset
+ selected_desition_index = 1,
+ game_in_progress = false,
+ screens = {}
}
end
@@ -64,39 +50,30 @@ Context = {}
local function reset_context_to_initial_state()
local initial_data = get_initial_data()
- -- Clear existing data properties from Context (but not methods)
for k in pairs(Context) do
- if type(Context[k]) ~= "function" then -- Only clear data, leave functions
- Context[k] = nil
+ if type(Context[k]) ~= "function" then Context[k] = nil
end
end
- -- Copy all initial data properties into Context
for k, v in pairs(initial_data) do
Context[k] = v
end
- -- Populate Context.screens from ScreenManager, ensuring indexed array
Context.screens = {}
- Context.screen_indices_by_id = {} -- Renamed for clarity, stores index
- -- The screen order needs to be explicit to ensure consistent numerical indices
+ Context.screen_indices_by_id = {}
local screen_order = {"home", "toilet", "walking_to_office", "office", "walking_to_home"}
for i, screen_id in ipairs(screen_order) do
local screen_data = ScreenManager.get_by_id(screen_id)
if screen_data then
table.insert(Context.screens, screen_data)
- Context.screen_indices_by_id[screen_id] = i -- Store index
- else
- -- Handle error if a screen is not registered
+ Context.screen_indices_by_id[screen_id] = i else
PopupWindow.show({"Error: Screen '" .. screen_id .. "' not registered!"})
end
end
end
--- Initially populate Context with data
reset_context_to_initial_state()
--- Now define the methods for Context
function Context.new_game()
reset_context_to_initial_state()
Context.game_in_progress = true
@@ -112,13 +89,11 @@ end
function Context.load_game()
if mget(SAVE_GAME_MAGIC_VALUE_ADDRESS, SAVE_GAME_BANK) ~= SAVE_GAME_MAGIC_VALUE then
- -- No saved game found, start a new one
- Context.new_game()
+ Context.new_game()
return
end
- reset_context_to_initial_state() -- Reset data, preserve methods
-
+ reset_context_to_initial_state()
Context.current_screen = mget(SAVE_GAME_CURRENT_SCREEN_ADDRESS, SAVE_GAME_BANK)
Context.game_in_progress = true
diff --git a/inc/init/init.modules.lua b/inc/init/init.modules.lua
index c2af11c..0620467 100644
--- a/inc/init/init.modules.lua
+++ b/inc/init/init.modules.lua
@@ -10,7 +10,8 @@ local MinigameRhythmWindow = {}
local MinigameDDRWindow = {}
Util = {}
DesitionManager = {}
-ScreenManager = {} -- New declaration
+ScreenManager = {}
+MapManager = {}
UI = {}
Print = {}
Input = {}
diff --git a/inc/init/init.windows.lua b/inc/init/init.windows.lua
index 889089f..ed420a9 100644
--- a/inc/init/init.windows.lua
+++ b/inc/init/init.windows.lua
@@ -7,4 +7,4 @@ local WINDOW_CONFIGURATION = 7
local WINDOW_MINIGAME_BUTTON_MASH = 8
local WINDOW_MINIGAME_RHYTHM = 9
local WINDOW_MINIGAME_DDR = 10
-local WINDOW_AUDIOTEST = 9001 -- because it's a debug screen lol
+local WINDOW_AUDIOTEST = 9001
diff --git a/inc/map/map.bedroom.lua b/inc/map/map.bedroom.lua
index 23351fd..1628abc 100644
--- a/inc/map/map.bedroom.lua
+++ b/inc/map/map.bedroom.lua
@@ -1,19 +1,9 @@
-MapBedroom = {
- "10101010101010101010101010101010",
- "10141410101010101010101010101010",
- "10141410101010101010101010101010",
- "10101010101010101010101010101010",
- "10101010101010101010101010101010",
- "10101010101010101010101010101010",
- "10101010101010101010101010101010",
- "10101010101010101010101010101010",
- "10101010101010101010101010101010",
- "11111111111111111111111111111111",
- "11111111111111111111111111111111",
- "11111111111111111111111111111111",
- "11111516111213111111111111111111",
- "11111111111111111111111111111111",
- "11111111111111111111111111111111",
- "11111111111111111111111111111111",
- "11111111111111111111111111111111"
-}
+MapManager.register({
+ id = "bedroom",
+ from_x = 0,
+ from_y = 0,
+ width = 30,
+ height = 17,
+ to_x = 0,
+ to_y = 0,
+})
\ No newline at end of file
diff --git a/inc/map/map.manager.lua b/inc/map/map.manager.lua
new file mode 100644
index 0000000..33fbec5
--- /dev/null
+++ b/inc/map/map.manager.lua
@@ -0,0 +1,35 @@
+local _maps = {}
+
+function MapManager.get_maps_array()
+ local maps_array = {}
+ for _, map_data in pairs(_maps) do
+ table.insert(maps_array, map_data)
+ end
+ return maps_array
+end
+
+function MapManager.register(map_data)
+ if _maps[map_data.id] then
+ trace("Warning: Overwriting map with id: " .. map_data.id)
+ end
+ _maps[map_data.id] = map_data
+end
+
+function MapManager.get_by_id(map_id)
+ return _maps[map_id]
+end
+
+function MapManager.draw(map_id)
+ local map_data = MapManager.get_by_id(map_id)
+ if not map_data then
+ return
+ end
+ map(
+ map_data.from_x,
+ map_data.from_y,
+ map_data.width,
+ map_data.height,
+ map_data.to_x,
+ map_data.to_y
+ )
+end
\ No newline at end of file
diff --git a/inc/meta/meta.assets.lua b/inc/meta/meta.assets.lua
index d102c73..9217649 100644
--- a/inc/meta/meta.assets.lua
+++ b/inc/meta/meta.assets.lua
@@ -1,6 +1,6 @@
--luacheck: ignore max_line_length
--
--- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57
+-- 000:ab53375f574f0101017f2553c3c3c71d2b53fff1e929adff83779d3b5dc941a6f673eff7f4f4f494b0c2566c86333c57
--
--
-- 000:060006400600064006000640060006400600060006000600060006000600060006000600060006000600060006000600060006000600060006000600300000000900
@@ -34,3 +34,280 @@
-- 008:0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f
-- 009:fff000fff000fff000fff000fff000ff
--
+--
+-- 000:2222222223333332233232322353533223323232232353322333333222222222
+-- 001:2222222223333333232322322333333323222322233333332355355522222222
+-- 002:2222222233333333223222233333333332232223333333333555535522222222
+-- 003:2222222223333333232322322333333323222322233333332355355522222222
+-- 004:2222222233333333223222233333333332232223333333333555535522222222
+-- 005:2222222223333333232322322333333323222322233333332355355522222222
+-- 006:2222222233333333223222233333333332232223333333333555535522222222
+-- 007:2222222223333333232322322333333323222322233333332355355522222222
+-- 008:2222222233333333223222233333333332232223333333333555535522222222
+-- 009:2222222223333333232322322333333323222322233333332355355522222222
+-- 010:2222222233333333223222233333333332232223333333333555535522222222
+-- 011:2222222223333333232322322333333323222322233333332355355522222222
+-- 012:2222222233333333223222233333333332232223333333333555535522222222
+-- 013:2222222223333333232322322333333323222322233333332355355522222222
+-- 014:2222222233333333223222233333333332232223333333333555535522222222
+-- 015:2222222223333333232322322333333323222322233333332355355522222222
+-- 016:2222222223333332233232322353533223323232232353322333333222222222
+-- 017:1111111111111111111111111111111111111111111111111111111111111111
+-- 018:1111111111111111111111111111111111111111111111111111111122222222
+-- 019:1111111111111111111111111111111111111111111111111111111122222222
+-- 020:1111111111111111111111111111111111111111111111111111111111111111
+-- 021:1111111111111111111111111111111111111111111111111111111111111111
+-- 022:1111111111111111111111111111111111111111111111111111111111111111
+-- 023:1111111111111111111111111111111111111111111111111111111111111111
+-- 024:1111111111111111111111111111111111111111111111111111111111111111
+-- 025:1111111111111111111111111111111111111111111111111111111111111111
+-- 026:1111111111111111111111111111111111111111111111111111111111111111
+-- 027:1111111111111111111111111111111111111111111111111111111111111111
+-- 028:1111111111111111111111111111111111111111111111111111111111111111
+-- 029:1111111111111111111111111111111111111111111111111111111111111111
+-- 030:1111111111111111111111111111111111111111111111111111111111111111
+-- 031:1111111111111111111111111111111111111111111111111111111111111111
+-- 032:2222222223333332233232322353533223323232232353322333333222222222
+-- 033:1111111111111111111111111111111111111111111111111111111111111111
+-- 034:2444444422212212255200212152102325520021215210232552002122222222
+-- 035:4444444221244442321244423221244232421242324421223244421222222222
+-- 036:1111111111111111111111111111111111111111111111111111111111111111
+-- 037:2222222225552555255525552555222225552111255521112555211125552111
+-- 038:2222222255555555555555552222222211122111111221111112211111122111
+-- 039:2222222255525552555255522222555211125552111255521112555211125552
+-- 040:1111111111111111111111111111111111111111111111111111111111111111
+-- 041:1111111111111111111111221111128011112801111210801121010111222222
+-- 042:1111111111111111211111111211111108211111108211110101211122222111
+-- 043:1222222226666666266666662666666626666666266666662666666626666666
+-- 044:2222222166666462666646426666646266664642666664626666464266666462
+-- 045:2222222226466666246666662646622224666666264646462464646422222222
+-- 046:2222222266666642666664622226664266666462464646426464646222222222
+-- 047:2222222226466666246666662646622224666666264646462464646422222222
+-- 048:2222222223333332233232322353533223323232232353322333333222222222
+-- 049:1111111111111111111111111111111111111111111111111111111111111111
+-- 050:2444444422212214200213242102332420021324210233242002132422222222
+-- 051:4444444244441222444425524444215244442552444421524444255222222222
+-- 052:1111111111111111111111111111111111111111111111111111111111111111
+-- 053:2555211125552111255521112555211125552111255522222555211125552111
+-- 054:1112211111122111111221111112211111122111222222221112211111122111
+-- 055:1112555211125552111255521112555211125552222255521112555211125552
+-- 056:1111111111111111111111111111111111111111111111111111111111111111
+-- 057:1111111211111112111111121111111211111112111111121111111211111112
+-- 058:1111111111111111111111111111111111111111111111111111111111111111
+-- 059:2666666626666666266666662666666626666666266266662662666626626666
+-- 060:6666464266666462666646426666646266664642666664626666464266666462
+-- 061:5555111155551111555511115555111111115555111155551111555511115555
+-- 062:5555111155551111555511115555111111115555111155551111555511115555
+-- 063:5555111155551111555511115555111111115555111155551111555511115555
+-- 064:2222222223333332253232322532333223323232253332322532333225323232
+-- 065:1111111111111111111111111111111111111111111111111111111111111111
+-- 066:2444444422212212255255252152152125525525215215212552552522222222
+-- 067:4444444221221442525524425215244252552442521524425255244222222222
+-- 068:1111111111111111111111111111111111111111111111111111111111111111
+-- 069:2555211125552111255521112555211125552111255521112555211122222222
+-- 070:1112211111122111111221111112211111122111111221111112211122222222
+-- 071:1112555211125552111255521112555211125552111255521112555222222222
+-- 072:1111111111111111111111111111111111111111111111111111111111111111
+-- 073:1111111211111112111111121111111211111112111111121111111211111112
+-- 074:1111111111111111111111111111111111111111111111111111111111111111
+-- 075:2662666626626666266266662666666626666666266666662666666626666666
+-- 076:6666464266666462666646426666646266664642666664626666464266666462
+-- 077:2222222224444444244222442421112424211124242111242442224424444444
+-- 078:2222222244444442442224424211124242111242421112424422244244444442
+-- 079:2222222224444444244444442444444424444444244444442444444424444444
+-- 080:2333323225323232253233322533323225323232233232322532323225333332
+-- 081:1111111111111111111111111111111111111111111111111111111111111111
+-- 082:2444444424444444244444442444444424444444222222222221111122211111
+-- 083:4444444244444442444444424444444244444442222222221111122211111222
+-- 084:1111111111111111111111111111111111111111111111111111111111111111
+-- 085:1111111111111111111111111222222224444444244444442444444424444444
+-- 086:1111111111111111111111112222222244444444444444444444444444444444
+-- 087:1111111111111111111111112222122244442666444426664444266644442666
+-- 088:1111111111111111111111111122221122444421244444422444444224444442
+-- 089:1111111211111112111111121111111211111112111111121111111211112222
+-- 090:1111111111111111111111111111111111111111111111111111111122211111
+-- 091:2666666626666666266666662666666626666666266666662666666612222222
+-- 092:6666464266666462666646426666646266664642666664626666464222222221
+-- 093:2444444424444444244222442421112424211124242111242442224424444444
+-- 094:4444444244444442442224424211124242111242421112424422244244444442
+-- 095:2444444424444444244444442444444424444444244444442444444422222222
+-- 096:2222222223333332253232322532333223323232253332322532333225323232
+-- 097:0000000000000000000000003333111100000000000000000000000033313333
+-- 098:0000000000000000000000003333333300001000000010000000300033333311
+-- 099:0000000000000000000000003333111100000000000000000000000033313333
+-- 100:0000000000000000000000003333333300001000000010000000300033333311
+-- 101:2444444424444444244444442444444424444444244444442444444424444444
+-- 102:4444444444444444444444444444444444444444444444444444444444444444
+-- 103:4444266644442666444426664444266644442666444426664444266644442666
+-- 104:2444444224444442242222423244442224444442244444422422224222111122
+-- 105:0000000000000000000000003333111100000000000000000000000033313333
+-- 106:0000000000000000000000003333333300001000000010000000300033333311
+-- 107:0222222226666666266266662662666626626666266266662666666632222222
+-- 108:2222222066666462666646426666646266664642666664626666464222222221
+-- 109:2222222221111111211111112111111121111111211111112111111122222222
+-- 110:2222222211111112111111121111111211111112111111121111111222222222
+-- 111:2222222223333333232322322333333323222322233333332355355522222222
+-- 112:2333323225323232253233322533323225323232233232322532323225333332
+-- 113:0000000000000000000000001111333300000000000000000000000011333111
+-- 114:2222222224444422244442722444277224427772242770722277177227717072
+-- 115:2222222244444442444444424444444244442222444211224414222241444442
+-- 116:0000000000000000000000003311133300000001000000010000000133333111
+-- 117:2222222221111111222222221111333300000000000000000000000011333111
+-- 118:2222222211111111222222223311133300000001000000010000000133333111
+-- 119:2222222211111111222222221111333300000000000000000000000011333111
+-- 120:2222222211111112222222223311133300000001000000010000000133333111
+-- 121:0000000000000000000000001111333300000000000000000000000011333111
+-- 122:0000000000000000000000003311133300000001000000010000000133333111
+-- 123:0000000000000000000000001111333300000000000000000000000011333111
+-- 124:0000000000000000000000003311133300000001000000010000000133333111
+-- 125:0000000000000000000000001111333300000000000000000000000011333111
+-- 126:0000000000000000000000003311133300000001000000010000000133333111
+-- 127:2222222223333332233232322353533223323232232353322333333222222222
+-- 128:2222222223333332253232322532333223323232253332322532333225323232
+-- 129:0000000000000000000000003333111100000000000000000000000033313333
+-- 130:2717177227717724271772422777242427724242272424242242424222222222
+-- 131:2222222224242422424242422422244242224442222444424244444224444442
+-- 132:0000000000000000000000003333333300001000000010000000300033333311
+-- 133:0000000000000200000021203333212100002120000021200000212033312123
+-- 134:0000000000000000000000003333333300001000000010000000300033333311
+-- 135:0000000000000000222222222444444424444444244444442444444424444444
+-- 136:0000000000000000222222224444444244444442444444424444444244444442
+-- 137:0000000000000000000000003333111100000000000000000000000033313333
+-- 138:0000000000000000000000003333333300001000000010000000300033333311
+-- 139:0000222200022442002424423244244224442442244424422444244224442442
+-- 140:0000000000000000000000003333333300001000000010000000300033333311
+-- 141:0000000000000000000000003333111100000000000000000000000033313333
+-- 142:0000000000000000000000003333333300001000000010000000300033333311
+-- 143:1222222112555521125555211255552112555521125555211255552112555521
+-- 144:2333323225323232253233322533323225323232233232322532323225333332
+-- 145:0000000000000000000000001111333300000000000000000000000011333111
+-- 146:2444444424444444244444442444444424444444244444442444444424444444
+-- 147:4444444244444442444444424444444244444442444444424444444244444442
+-- 148:0000002200000244000024443311244400002444000024440000021433333122
+-- 149:2220212044422120444421204444212344442120444421204412020022233111
+-- 150:0000000000000000000000003311133300000001000000010000000133333111
+-- 151:2444444424444444244444442444444424444444244444442444444424444444
+-- 152:4444444244444442444444424444444244444442444444424444444244444442
+-- 153:0000000000000000000000001111333300000000000000000000000011333111
+-- 154:0222222224444444244444442444444424444444244444442444444424444444
+-- 155:2444244224442442244424422444244224442442244424422444244224442442
+-- 156:0000000000000000000000003311133300000001000000010000000133333111
+-- 157:0000000000000000000000001111333300000000000000000000000011333111
+-- 158:0000000000000000000000003311133300000001000000010000000133333111
+-- 159:1255552112555521125555211255552112555521125555211255552112222221
+-- 160:2222222223333332253232322532333223323232253332322532333225323232
+-- 161:0000000000000000000000003333111100000000000000000000000033313333
+-- 162:2222222221111111222222222123333321201000212010002120300022233311
+-- 163:2222222211111112222222223333121200000212000002120000021233313222
+-- 164:0000000000000002000000203333113300002200000022000000300033333311
+-- 165:2000000022000000202000002331111120022000110220002200000022313333
+-- 166:0000000000000000000000003333333300001000000010000000300033333311
+-- 167:2444444424444444244444442222222222222222021200000212000032223333
+-- 168:4444444244444442444444422222222222222222000021200000212033332221
+-- 169:0000000000000000000000003333111100000000000000000000000033313333
+-- 170:2444444424444444244444442444444424444444244444442444444424444444
+-- 171:2444244224442442244424422444244224442442244424422444244214442442
+-- 172:0000000000000000000000003333333300001000000010000000300033333311
+-- 173:0000000000000000000000003333111100000000000000000000000033313333
+-- 174:0000000000000000000000003333333300001000000010000000300033333311
+-- 175:1222222125555552255555522555555225555552255555522555555212222221
+-- 176:2333323225323232253233322533323225323232233232322532323225333332
+-- 177:0000000000000000000000001111333300000000000000000000000011333111
+-- 178:0000000000000000000000003311133300000001000000010000000133333111
+-- 179:0000000000000000000000001111333300000000000000000000000011333111
+-- 180:0000000000000000000000003311133300000001000000010000000133333111
+-- 181:0000000000000000000000001111333300000000000000000000000011333111
+-- 182:0000000000000000000000003311133300000001000000010000000133333111
+-- 183:0000000000000000000000001111333300000000000000000000000011333111
+-- 184:0000000000000000000000003311133300000001000000010000000133333111
+-- 185:0022222202444444244444442444444424444444244444442444444424444444
+-- 186:2444444444444444444444444444444444444444444444444444444444444444
+-- 187:1444222214421112142111121211111221111112211111122111111221111112
+-- 188:0000000000000000000000003311133300000001000000010000000133333111
+-- 189:0000000000000000000000001111333300000000000000000000000011333111
+-- 190:0000000000000000000000003311133300000001000000010000000133333111
+-- 191:2222222223333333232322322333333323222322233333332355355522222222
+-- 192:2222222223333332253232322532333223323232253332322532333225323232
+-- 193:0000000000000000000000003333111100000000000000000000000033313333
+-- 194:2222222224444444244444442444444424444444244444442444444424444444
+-- 195:2222222244444442444444424444444244444442444444424444444244444442
+-- 196:0000000000000000000000003333333300001000000010000000300033333311
+-- 197:0000000000000000000000003333111100000000000000000000000033313333
+-- 198:0000000000000000000000003333333300001000000010000000300033333311
+-- 199:0000000000000000000000003333111100000000000000000000000033313333
+-- 200:0000000000000000000000003333333300001000000010000000300033333311
+-- 201:2222222221111111211111112111111121111111211111110222222233222233
+-- 202:2222222211111111111111111111111111111111111111112222222233333311
+-- 203:1111111211111112111111121111111211111112111111122222222033222233
+-- 204:0000000000000000000000003333333300001000000010000000300033333311
+-- 205:0000000000000000000000003333111100000000000000000000000033313333
+-- 206:0000000000000000000000003333333300001000000010000000300033333311
+-- 207:2222222223333332233232322353533223323232232353322333333222222222
+-- 208:2333323225323232253233322533323225323232233232322532323225333332
+-- 209:0000000000000000000000001111333300000000000000000000000011333111
+-- 210:2444444424444444244444442444444424444444244444442444444424444444
+-- 211:4444444244444442444444424444444244444442444444424444444244444442
+-- 212:0000000000000000000000003311133300000001000000010000000133333111
+-- 213:0000000000000000000000001111333300000000000000000000000011333111
+-- 214:0000000000000000000000003311133300000001000000010000000133333111
+-- 215:0000000000000000000000001111333300000000000000000000000011333111
+-- 216:0000000000000000000000003311133300000001000000010000000133333111
+-- 217:0000000000000000000000001111333300000000000000000000000011333111
+-- 218:0000000000000000000000003311133300000001000000010000000133333111
+-- 219:0000000000000000000000001111333300000000000000000000000011333111
+-- 220:0000000000000000000000003311133300000001000000010000000133333111
+-- 221:0000000000000000000000001111333300000000000000000000000011333111
+-- 222:0000000000000000000000003311133300000001000000010000000133333111
+-- 223:1222222112555521125555211255552112555521125555211255552112555521
+-- 224:2222222223333332253232322532333223323232253332322532333225323232
+-- 225:0000000000000000000000003333111100000000000000000000000033313333
+-- 226:2222222221111111211111112111111121111111211111112111111122222222
+-- 227:2222222211111112111111121111111211111112111111121111111222222222
+-- 228:0000000000000000000000003333333300001000000010000000300033333311
+-- 229:0000000000000000000000003333111100000000000000000000000033313333
+-- 230:0000000000000000000000003333333300001000000010000000300033333311
+-- 231:0000000000000000000000003333111100000000000000000000000033313333
+-- 232:0000000000000000000000003333333300001000000010000000300033333311
+-- 233:0000000000000000000000003333111100000000000000000000000033313333
+-- 234:0000000000000000000000003333333300001000000010000000300033333311
+-- 235:0000000000000000000000003333111100000000000000000000000033313333
+-- 236:0000000000000000000000003333333300001000000010000000300033333311
+-- 237:0000000000000000000000003333111100000000000000000000000033313333
+-- 238:0000000000000000000000003333333300001000000010000000300033333311
+-- 239:1255552112555521125555211255552112555521125555211255552112222221
+-- 240:2333323225323232253233322533323225323232233232322532323225333332
+-- 241:0000000000000000000000001111333300000000000000000000000011333111
+-- 242:0000000000000000000000003311133300000001000000010000000133333111
+-- 243:0000000000000000000000001111333300000000000000000000000011333111
+-- 244:0000000000000000000000003311133300000001000000010000000133333111
+-- 245:0000000000000000000000001111333300000000000000000000000011333111
+-- 246:0000000000000000000000003311133300000001000000010000000133333111
+-- 247:0000000000000000000000001111333300000000000000000000000011333111
+-- 248:0000000000000000000000003311133300000001000000010000000133333111
+-- 249:0000000000000000000000001111333300000000000000000000000011333111
+-- 250:0000000000000000000000003311133300000001000000010000000133333111
+-- 251:0000000000000000000000001111333300000000000000000000000011333111
+-- 252:0000000000000000000000003311133300000001000000010000000133333111
+-- 253:0000000000000000000000001111333300000000000000000000000011333111
+-- 254:0000000000000000000000003311133300000001000000010000000133333111
+-- 255:1222222125555552255555522555555225555552255555522555555212222221
+--
+--
diff --git a/inc/screen/screen.home.lua b/inc/screen/screen.home.lua
index efb059c..7fd5ce8 100644
--- a/inc/screen/screen.home.lua
+++ b/inc/screen/screen.home.lua
@@ -4,5 +4,6 @@ ScreenManager.register({
decisions = {
"go_to_toilet",
"go_to_walking_to_office",
- }
+ },
+ background = "bedroom",
})
diff --git a/inc/screen/screen.manager.lua b/inc/screen/screen.manager.lua
index 8dd6c49..254eec2 100644
--- a/inc/screen/screen.manager.lua
+++ b/inc/screen/screen.manager.lua
@@ -1,8 +1,5 @@
-ScreenManager = {}
+local _screens = {}
-local _screens = {} -- Internal list to hold screen data
-
--- Public property to access the registered screens as an indexed array
function ScreenManager.get_screens_array()
local screens_array = {}
for _, screen_data in pairs(_screens) do
@@ -11,17 +8,13 @@ function ScreenManager.get_screens_array()
return screens_array
end
--- Registers a screen with the manager
--- screen_data: A table containing id, name, and decisions for the screen
function ScreenManager.register(screen_data)
if _screens[screen_data.id] then
- -- Optional: warning if overwriting an existing screen
trace("Warning: Overwriting screen with id: " .. screen_data.id)
end
_screens[screen_data.id] = screen_data
end
--- Retrieves a screen by its id (if needed directly)
function ScreenManager.get_by_id(screen_id)
return _screens[screen_id]
end
diff --git a/inc/system/system.audio.lua b/inc/system/system.audio.lua
index d4082fc..fb32f31 100644
--- a/inc/system/system.audio.lua
+++ b/inc/system/system.audio.lua
@@ -1,5 +1,3 @@
--- Audio subsystem
-
function Audio.music_stop() music() end
function Audio.music_play_mainmenu() end
function Audio.music_play_wakingup() end
diff --git a/inc/system/system.input.lua b/inc/system/system.input.lua
index c812085..e6f3870 100644
--- a/inc/system/system.input.lua
+++ b/inc/system/system.input.lua
@@ -1,14 +1,8 @@
--- Gamepad buttons
local INPUT_KEY_UP = 0
local INPUT_KEY_DOWN = 1
local INPUT_KEY_LEFT = 2
local INPUT_KEY_RIGHT = 3
-local INPUT_KEY_A = 4 -- Z key
-local INPUT_KEY_B = 5 -- X key
-local INPUT_KEY_Y = 7 -- S key
-
--- Keyboard keys
--- TODO: Find correct key codes for SPACE and LCTRL
+local INPUT_KEY_A = 4 local INPUT_KEY_B = 5 local INPUT_KEY_Y = 7
local INPUT_KEY_SPACE = 48
local INPUT_KEY_BACKSPACE = 51
local INPUT_KEY_ENTER = 50
@@ -19,6 +13,5 @@ function Input.left() return btnp(INPUT_KEY_LEFT) end
function Input.right() return btnp(INPUT_KEY_RIGHT) end
function Input.select() return btnp(INPUT_KEY_A) or keyp(INPUT_KEY_SPACE) end
function Input.menu_confirm() return btnp(INPUT_KEY_A) or keyp(INPUT_KEY_ENTER) end
-function Input.player_interact() return btnp(INPUT_KEY_B) or keyp(INPUT_KEY_ENTER) end -- B button
-function Input.menu_back() return btnp(INPUT_KEY_Y) or keyp(INPUT_KEY_BACKSPACE) end
+function Input.player_interact() return btnp(INPUT_KEY_B) or keyp(INPUT_KEY_ENTER) end function Input.menu_back() return btnp(INPUT_KEY_Y) or keyp(INPUT_KEY_BACKSPACE) end
function Input.toggle_popup() return keyp(INPUT_KEY_ENTER) end
diff --git a/inc/system/system.ui.lua b/inc/system/system.ui.lua
index f8a51d1..3008260 100644
--- a/inc/system/system.ui.lua
+++ b/inc/system/system.ui.lua
@@ -88,23 +88,13 @@ function UI.draw_desition_selector(desitions, selected_desition_index)
local bar_height = 16
local bar_y = Config.screen.height - bar_height
rect(0, bar_y, Config.screen.width, bar_height, Config.colors.dark_grey)
-
if #desitions > 0 then
local selected_desition = desitions[selected_desition_index]
local desition_label = selected_desition.label
- local text_width = #desition_label * 4 -- Assuming 4 pixels per char
- local text_y = bar_y + 4
-
- -- Center the decision label
- local text_x = (Config.screen.width - text_width) / 2
-
- -- Draw left arrow at the far left
- Print.text("<", 2, text_y, Config.colors.green)
- -- Draw selected desition label
- Print.text(desition_label, text_x, text_y, Config.colors.item) -- Highlight color
- -- Draw right arrow at the far right
- Print.text(">", Config.screen.width - 6, text_y, Config.colors.green) -- 6 = 2 (right margin) + 4 (char width)
- end
+ local text_width = #desition_label * 4 local text_y = bar_y + 4
+ local text_x = (Config.screen.width - text_width) / 2
+ Print.text("<", 2, text_y, Config.colors.green)
+ Print.text(desition_label, text_x, text_y, Config.colors.item) Print.text(">", Config.screen.width - 6, text_y, Config.colors.green) end
end
function UI.update_desition_selector(desitions, selected_desition_index)
diff --git a/inc/system/system.util.lua b/inc/system/system.util.lua
index 139a377..cee625a 100644
--- a/inc/system/system.util.lua
+++ b/inc/system/system.util.lua
@@ -8,8 +8,7 @@ function Util.go_to_screen_by_id(screen_id)
local screen_index = Context.screen_indices_by_id[screen_id]
if screen_index then
Context.current_screen = screen_index
- Context.selected_desition_index = 1 -- Reset selected decision on new screen
- else
+ Context.selected_desition_index = 1 else
PopupWindow.show({"Error: Screen '" .. screen_id .. "' not found or not indexed!"})
end
end
\ No newline at end of file
diff --git a/inc/window/window.configuration.lua b/inc/window/window.configuration.lua
index e437b6e..b9bc4cf 100644
--- a/inc/window/window.configuration.lua
+++ b/inc/window/window.configuration.lua
@@ -19,11 +19,9 @@ end
function ConfigurationWindow.draw()
UI.draw_top_bar("Configuration")
- local x_start = 10 -- Left margin for labels
- local y_start = 40
- local x_value_right_align = Config.screen.width - 10 -- Right margin for values
- local char_width = 4 -- Approximate character width for default font
-
+ local x_start = 10 local y_start = 40
+ local x_value_right_align = Config.screen.width - 10
+ local char_width = 4
for i, control in ipairs(ConfigurationWindow.controls) do
local current_y = y_start + (i - 1) * 12
local color = Config.colors.green
@@ -32,16 +30,13 @@ function ConfigurationWindow.draw()
local label_text = control.label
local value_text = string.format(control.format, value)
- -- Calculate x position for right-aligned value
- local value_x = x_value_right_align - (#value_text * char_width)
+ local value_x = x_value_right_align - (#value_text * char_width)
if i == ConfigurationWindow.selected_control then
color = Config.colors.item
Print.text("<", x_start -8, current_y, color)
- Print.text(label_text, x_start, current_y, color) -- Shift label due to '<'
- Print.text(value_text, value_x, current_y, color)
- Print.text(">", x_value_right_align + 4, current_y, color) -- Print '>' after value
- else
+ Print.text(label_text, x_start, current_y, color) Print.text(value_text, value_x, current_y, color)
+ Print.text(">", x_value_right_align + 4, current_y, color) else
Print.text(label_text, x_start, current_y, color)
Print.text(value_text, value_x, current_y, color)
end
@@ -82,11 +77,9 @@ function ConfigurationWindow.update()
if control then
if control.type == "numeric_stepper" then
local current_value = control.get()
- if btnp(2) then -- Left
- local new_value = math.max(control.min, current_value - control.step)
+ if btnp(2) then local new_value = math.max(control.min, current_value - control.step)
control.set(new_value)
- elseif btnp(3) then -- Right
- local new_value = math.min(control.max, current_value + control.step)
+ elseif btnp(3) then local new_value = math.min(control.max, current_value + control.step)
control.set(new_value)
end
elseif control.type == "desition_item" then
diff --git a/inc/window/window.game.lua b/inc/window/window.game.lua
index c04e455..815f64a 100644
--- a/inc/window/window.game.lua
+++ b/inc/window/window.game.lua
@@ -1,16 +1,16 @@
function GameWindow.draw()
- local currentScreenData = Context.screens[Context.current_screen]
- UI.draw_top_bar(currentScreenData.name)
- if currentScreenData and currentScreenData.decisions and #currentScreenData.decisions > 0 then
+ local screen = Context.screens[Context.current_screen]
+ MapManager.draw(screen.background)
+ UI.draw_top_bar(screen.name)
+ if screen and screen.decisions and #screen.decisions > 0 then
local available_desitions = {}
- for _, desition_id in ipairs(currentScreenData.decisions) do
- local desition_obj = DesitionManager.get(desition_id)
- if desition_obj and desition_obj.condition() then -- Check condition directly
- table.insert(available_desitions, desition_obj)
+ for _, desition_id in ipairs(screen.decisions) do
+ local desition = DesitionManager.get(desition_id)
+ if desition and desition.condition() then
+ table.insert(available_desitions, desition)
end
end
- -- If no available desitions, display nothing or a message
- if #available_desitions > 0 then
+ if #available_desitions > 0 then
UI.draw_desition_selector(available_desitions, Context.selected_desition_index)
end
end
@@ -23,51 +23,41 @@ function GameWindow.update()
return
end
- -- Handle screen changing using up/down
- if Input.up() then
+ if Input.up() then
Context.current_screen = Context.current_screen - 1
if Context.current_screen < 1 then
Context.current_screen = #Context.screens
end
- Context.selected_desition_index = 1 -- Reset selected decision on screen change
- elseif Input.down() then
+ Context.selected_desition_index = 1 elseif Input.down() then
Context.current_screen = Context.current_screen + 1
if Context.current_screen > #Context.screens then
Context.current_screen = 1
end
- Context.selected_desition_index = 1 -- Reset selected decision on screen change
- end
+ Context.selected_desition_index = 1 end
- local currentScreenData = Context.screens[Context.current_screen]
- if currentScreenData and currentScreenData.decisions and #currentScreenData.decisions > 0 then
+ local screen = Context.screens[Context.current_screen]
+ if screen and screen.decisions and #screen.decisions > 0 then
local available_desitions = {}
- for _, desition_id in ipairs(currentScreenData.decisions) do
- local desition_obj = DesitionManager.get(desition_id)
- if desition_obj and desition_obj.condition() then -- Check condition directly
- table.insert(available_desitions, desition_obj)
+ for _, desition_id in ipairs(screen.decisions) do
+ local desition = DesitionManager.get(desition_id)
+ if desition and desition.condition() then table.insert(available_desitions, desition)
end
end
- -- If no available desitions, we can't update or execute
- if #available_desitions == 0 then return end
+ if #available_desitions == 0 then return end
- -- Update selected decision using left/right inputs
- local new_selected_desition_index = UI.update_desition_selector(
+ local new_selected_desition_index = UI.update_desition_selector(
available_desitions,
Context.selected_desition_index
)
- -- Only update Context if the selection actually changed to avoid unnecessary re-assignment
- if new_selected_desition_index ~= Context.selected_desition_index then
+ if new_selected_desition_index ~= Context.selected_desition_index then
Context.selected_desition_index = new_selected_desition_index
end
- -- Execute selected decision on Input.select()
- if Input.select() then
+ if Input.select() then
local selected_desition = available_desitions[Context.selected_desition_index]
- if selected_desition and selected_desition.handle then -- Call handle directly
- Audio.sfx_select() -- Play sound for selection
- selected_desition.handle()
+ if selected_desition and selected_desition.handle then Audio.sfx_select() selected_desition.handle()
end
end
end
@@ -75,5 +65,4 @@ end
function GameWindow.set_state(new_state)
Context.active_window = new_state
- -- Add any state-specific initialization/cleanup here later if needed
-end
\ No newline at end of file
+ end
\ No newline at end of file
diff --git a/inc/window/window.intro.lua b/inc/window/window.intro.lua
index 1760f2d..6df26cb 100644
--- a/inc/window/window.intro.lua
+++ b/inc/window/window.intro.lua
@@ -1,24 +1,21 @@
function IntroWindow.draw()
- local x = (Config.screen.width - 132) / 2 -- Centered text
+ local x = (Config.screen.width - 132) / 2
Print.text(Context.intro.text, x, Context.intro.y, Config.colors.green)
end
function IntroWindow.update()
Context.intro.y = Context.intro.y - Context.intro.speed
- -- Count lines in intro text to determine when scrolling is done
- local lines = 1
+ local lines = 1
for _ in string.gmatch(Context.intro.text, "\n") do
lines = lines + 1
end
- -- When text is off-screen, go to menu
- if Context.intro.y < -lines * 8 then
+ if Context.intro.y < -lines * 8 then
GameWindow.set_state(WINDOW_MENU)
end
- -- Skip intro by pressing A
- if Input.menu_confirm() then
+ if Input.menu_confirm() then
GameWindow.set_state(WINDOW_MENU)
end
end
\ No newline at end of file
diff --git a/inc/window/window.menu.lua b/inc/window/window.menu.lua
index 3fe597a..1c7d02b 100644
--- a/inc/window/window.menu.lua
+++ b/inc/window/window.menu.lua
@@ -16,18 +16,15 @@ function MenuWindow.update()
end
function MenuWindow.new_game()
- Context.new_game() -- This function will be created in Context
- GameWindow.set_state(WINDOW_GAME)
+ Context.new_game() GameWindow.set_state(WINDOW_GAME)
end
function MenuWindow.load_game()
- Context.load_game() -- This function will be created in Context
- GameWindow.set_state(WINDOW_GAME)
+ Context.load_game() GameWindow.set_state(WINDOW_GAME)
end
function MenuWindow.save_game()
- Context.save_game() -- This function will be created in Context
-end
+ Context.save_game() end
function MenuWindow.resume_game()
GameWindow.set_state(WINDOW_GAME)
@@ -48,8 +45,7 @@ function MenuWindow.audio_test()
end
function MenuWindow.refresh_menu_items()
- Context.menu_items = {} -- Start with an empty table
-
+ Context.menu_items = {}
if Context.game_in_progress then
table.insert(Context.menu_items, {label = "Resume Game", desition = MenuWindow.resume_game})
table.insert(Context.menu_items, {label = "Save Game", desition = MenuWindow.save_game})
@@ -61,5 +57,4 @@ function MenuWindow.refresh_menu_items()
table.insert(Context.menu_items, {label = "Audio Test", desition = MenuWindow.audio_test})
table.insert(Context.menu_items, {label = "Exit", desition = MenuWindow.exit})
- Context.selected_menu_item = 1 -- Reset selection after refreshing
-end
+ Context.selected_menu_item = 1 end
diff --git a/inc/window/window.popup.lua b/inc/window/window.popup.lua
index f8342f8..149d5fc 100644
--- a/inc/window/window.popup.lua
+++ b/inc/window/window.popup.lua
@@ -1,28 +1,21 @@
--- Simplified PopupWindow module
local POPUP_X = 40
local POPUP_Y = 40
local POPUP_WIDTH = 160
local POPUP_HEIGHT = 80
local TEXT_MARGIN_X = POPUP_X + 10
local TEXT_MARGIN_Y = POPUP_Y + 10
-local LINE_HEIGHT = 8 -- Assuming 8 pixels per line for default font
-
+local LINE_HEIGHT = 8
function PopupWindow.show(content_strings)
Context.popup.show = true
- Context.popup.content = content_strings or {} -- Ensure it's a table
- GameWindow.set_state(WINDOW_POPUP) -- Set active window to popup
-end
+ Context.popup.content = content_strings or {} GameWindow.set_state(WINDOW_POPUP) end
function PopupWindow.hide()
Context.popup.show = false
- Context.popup.content = {} -- Clear content
- GameWindow.set_state(WINDOW_GAME) -- Return to game window
-end
+ Context.popup.content = {} GameWindow.set_state(WINDOW_GAME) end
function PopupWindow.update()
if Context.popup.show then
- if Input.menu_confirm() or Input.menu_back() then -- Allow either A or B to close
- PopupWindow.hide()
+ if Input.menu_confirm() or Input.menu_back() then PopupWindow.hide()
end
end
end
@@ -38,7 +31,6 @@ function PopupWindow.draw()
current_y = current_y + LINE_HEIGHT
end
- -- Instruction to close
- Print.text("[A] Close", TEXT_MARGIN_X, POPUP_Y + POPUP_HEIGHT - LINE_HEIGHT - 2, Config.colors.green)
+ Print.text("[A] Close", TEXT_MARGIN_X, POPUP_Y + POPUP_HEIGHT - LINE_HEIGHT - 2, Config.colors.green)
end
end