A save file is a snapshot of state written to disk with Python's json module. Gather everything worth saving into one dictionary, dump it with json.dump(), and load it back with json.load() — always guarding against a missing or corrupted file with sensible defaults.
1-B 2-C 3-B 4-B | 5 json.load() 6 savegame.json (the progress file) 7 = settings like volume/resolution should persist across a "New Game," but progress resets — mixing them into one file would wipe preferences the player didn't intend to lose 8 = start from a copy of DEFAULT_SETTINGS, then call merged.update(data) with whatever keys were found in the loaded file — defaults fill in any missing new keys while the player's saved values still override them 9 = the "achievements" list/set stored in player_data — check_achievements() only unlocks ids that aren't already present there | 10 = check whether the file exists first; open and json.load() it inside a try/except block; if json.JSONDecodeError or OSError is raised, treat it like a first launch and return the sensible default progress dict instead of letting the exception crash the game