Well, I designed for this from the start, and to me the most important aspect was to seperate the static and non-static game data.
for example, you usually have some or all parts of a map which don't change within the game which don't need to be saved, but things like locations of characters and items do.
I do this by having seperate lists(or arrays) for all my non-static data. One for people, one for items, one for doors, one for events, etc....
create your save function first, just loop throught each of the non-static lists writing to disk. I use the basic c++ services for this iofile.h etc...
simple copy the save function to the load function, add code to clear out all the lists at the beginning, then replace your writes with reads, and add code to allocate memory before the reads if necessary.
You also need to add code to load the non-static parts of the game, usually the base map data.
The only difficulty is setting up dealing with the new or default situation, i.e. starting a game with a clean slate, I simply treat it as a special case and load the infomation from a different place in the newgame routine, otherwise I load it from the savegames.
Some games use a different technique and store only data that has changed, which leads to smaller save games at the beginning, but at least as large at the end, and unless its necessary for some reason, I think adds needless complexity.
hope this helps.
mat williams
zero sum software www.zero-sum.com