I'm not really sure if this is a programming question or a design question, so I'm just picking one. I'm working on a project that is pretty small, but basically needs to save at least some information from every instance of every object in every room. Saving is necessary for both exiting the game and returning but also for just moving from room to room. Essentially it is a puzzle game so switches, doors, puzzle information, inventories, items held by things, and so on need to be saved. For those of you who have done more elaborate save systems, how would you go about this and what things would you consider? What are good design practices? For example, should the save system be entirely independent of the instances themselves? Or should the instances themselves have code to save and load their states? Should saved variables all be globals that instances pull from or should I pull the varaibles to save from those instances? Should I use JSON or something else? Code examples would be great, but just plain English explanations of what people have done would also be great.