The Save System handles saving and loading game progress, settings, and shader preferences. It uses JSON format for storage and Love2D's filesystem API.
Creates a new save system instance.
Example:
local SaveSystem = require("src.systems.saveSystem")
saveSystem = SaveSystem()saveFilePath(string): Path to save file ("savegame.json")
Checks if a save file exists.
Returns:
hasSave(boolean):trueif save file exists
Example:
if saveSystem:hasSave() then
-- Load existing save
else
-- Start new game
endSaves game state to file.
Saved Data:
levelReached- Highest level reachedsettings.masterVol- Master volumesettings.musicVol- Music volumesettings.sfxVol- SFX volumesettings.gameWidth- Game widthsettings.gameHeight- Game heightshaderSettings.crtEnabled- CRT shader enabled state
Example:
-- Save on level completion
saveSystem:saveGame()
-- Save on settings change
saveSystem:saveGame()Loads game state from file.
Returns:
success(boolean):trueif load was successful
Behavior:
- Restores
savedGame.levelReached - Restores
gameSettingsvalues - Restores shader settings
Example:
-- In love.load()
saveSystem:loadGame() -- Load on startupThe save file is JSON format:
{
"levelReached": 3,
"settings": {
"masterVol": 1.0,
"musicVol": 0.7,
"sfxVol": 0.5,
"gameWidth": 320,
"gameHeight": 192
},
"shaderSettings": {
"crtEnabled": true
}
}-- In door:interact()
if isLastLevel then
saveSystem:saveGame()
stateMachine:setState("ending")
else
saveSystem:saveGame() -- Auto-save on level completion
stateMachine:setState("game", { map = loadLevel(nextLevel) })
endfunction love.load()
-- Initialize systems
saveSystem = SaveSystem()
-- Load saved game
saveSystem:loadGame()
-- Start game
stateMachine:setState("main_menu")
end-- In level select
if saveSystem:hasSave() then
-- Show continue option
maxLevel = savedGame.levelReached
else
-- Start from level 1
maxLevel = 1
endSave files are stored in Love2D's save directory:
- Windows:
%APPDATA%/LOVE/game1/ - macOS:
~/Library/Application Support/LOVE/game1/ - Linux:
~/.local/share/love/game1/
The save system uses pcall for error handling:
- File read/write errors are caught
- JSON parse errors are caught
- Errors are printed to console
- Functions return
falseon error