save/load functionality (WIP)
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
local Config = {
|
||||
local DEFAULT_CONFIG = {
|
||||
screen = {
|
||||
width = 240,
|
||||
height = 136
|
||||
@@ -30,3 +30,44 @@ local Config = {
|
||||
splash_duration = 120
|
||||
}
|
||||
}
|
||||
|
||||
local Config = {
|
||||
-- Copy default values initially
|
||||
screen = DEFAULT_CONFIG.screen,
|
||||
colors = DEFAULT_CONFIG.colors,
|
||||
player = DEFAULT_CONFIG.player,
|
||||
physics = DEFAULT_CONFIG.physics,
|
||||
timing = DEFAULT_CONFIG.timing,
|
||||
}
|
||||
|
||||
local CONFIG_SAVE_BANK = 7
|
||||
local CONFIG_SAVE_ADDRESS_MOVE_SPEED = 0
|
||||
local CONFIG_SAVE_ADDRESS_MAX_JUMPS = 1
|
||||
local CONFIG_MAGIC_VALUE_ADDRESS = 2
|
||||
local CONFIG_MAGIC_VALUE = 0xDE -- A magic number to check if config is saved
|
||||
|
||||
function Config.save()
|
||||
-- Save physics settings
|
||||
mset(Config.physics.move_speed * 10, CONFIG_SAVE_ADDRESS_MOVE_SPEED, CONFIG_SAVE_BANK)
|
||||
mset(Config.physics.max_jumps, CONFIG_SAVE_ADDRESS_MAX_JUMPS, CONFIG_SAVE_BANK)
|
||||
mset(CONFIG_MAGIC_VALUE, CONFIG_MAGIC_VALUE_ADDRESS, CONFIG_SAVE_BANK) -- Mark as saved
|
||||
end
|
||||
|
||||
function Config.load()
|
||||
-- Check if config has been saved before using a magic value
|
||||
if mget(CONFIG_MAGIC_VALUE_ADDRESS, CONFIG_SAVE_BANK) == CONFIG_MAGIC_VALUE then
|
||||
Config.physics.move_speed = mget(CONFIG_SAVE_ADDRESS_MOVE_SPEED, CONFIG_SAVE_BANK) / 10
|
||||
Config.physics.max_jumps = mget(CONFIG_SAVE_ADDRESS_MAX_JUMPS, CONFIG_SAVE_BANK)
|
||||
else
|
||||
Config.restore_defaults()
|
||||
end
|
||||
end
|
||||
|
||||
function Config.restore_defaults()
|
||||
Config.physics.move_speed = DEFAULT_CONFIG.physics.move_speed
|
||||
Config.physics.max_jumps = DEFAULT_CONFIG.physics.max_jumps
|
||||
-- Any other configurable items should be reset here
|
||||
end
|
||||
|
||||
-- Load configuration on startup
|
||||
Config.load()
|
||||
|
||||
Reference in New Issue
Block a user