Hi Tommy, I have though a lot about state saving, so I thought I should contribute to this discussion.
Here are my requirements for a good Python state saving system : * it must be text, preferably human-readable * it must need the smallest efforts possible to save and reload data * if it can be matched to Python classes, why not ! Therefore, my current solution uses twisted.spread.jelly which offers exactly that : http://twistedmatrix.com/documents/8.1.0/api/twisted.spread.jelly.html I just pretty-fy it a bit before saving it to a file, so that it is even easier to edit for the users/developers. Here is my serialize module, from the rats package, plus a simple test as an example : http://code.google.com/p/toonloop/source/browse/trunk/py/rats/serialize.py http://code.google.com/p/toonloop/source/browse/trunk/py/test/test_serialize.py Of course, I am a big twisted enthusiast. It will add a dependency to your software, but I can say twisted totally rocks for anything related to network protocols. I guess your game might need some kind of network communication some day, no ? You can look in the rats package for how to make a pygame game with twisted. More specifically : http://code.google.com/p/toonloop/source/browse/trunk/py/rats/render.py I plan on releasing the rats package separate from the toonloop software soon. I will announce it here when it will be done. a 2009/5/23 Olaf Nowacki <i...@gmx.net>: > Hi Tommy, > > here is how I did it. (I'm making an point-and-click-adventure myself with > py-thon & -game, too.) > > In my game there are just scenes and actors. Allmost all of the data is in > the actors, even the cutscenes. So I (more or less) only save the actors > with PICKLE. > > I'd like to rewrite it someday and try YAML, because a human readable > savegame is much help during development. > > **Olaf > >> from inventory import inventory >> import pickle >> >> >> >> class Game: >> >> def __init__(self): >> self.actors = {} >> self.scene_transition = False >> self.hidden_inventory = False >> >> def setup(self, stage, cast): >> self.inventory = inventory >> self.stage = stage >> self.cast = cast >> self.player = self.cast[Player_ID] >> self.load_dialogs(Language_ID) >> set_scene(Start_Scene_ID) >> >> >> >> def save(self): >> filter = [ >> '_Sprite__g', >> 'rect', >> 'act_pos', >> 'behaviors', >> 'image', >> 'image_path', >> 'images', >> 'path', >> 'sequences', >> 'animation', >> 'uid'] >> savedata = {} >> savedata['current_scene'] = self.scene.uid >> savedata['hidden_inventory'] = self.hidden_inventory >> savedata['inventory'] = [] >> for item in self.inventory.items: >> savedata['inventory'].append(item.uid) >> savedata['actors'] = {} >> for actor in (self.actors.values()): >> savedata['actors'][actor.uid] = {} >> for var in vars(actor): >> if not var in filter: >> savedata['actors'][actor.uid][var] = >> actor.__dict__[var] >> savedata['scene_walkmaps'] = {} >> for scene in self.stage.values(): >> savedata['scene_walkmaps'][scene.uid] = scene.walkmap.name >> savegame = open('savegame.txt', 'w') >> translator = pickle.Pickler(savegame) >> translator.dump(savedata) >> savegame.close() >> >> def load(self): >> savegame = open('savegame.txt', 'r') >> translator = pickle.Unpickler(savegame) >> savedata = translator.load() >> savegame.close() >> for actor in savedata['actors']: >> if actor in self.actors: >> for var in savedata['actors'][actor]: >> if not var in filter: >> self.actors[actor].__dict__[var] = >> savedata['actors'][actor][var] >> >> self.actors[actor].set_image(savedata['actors'][actor]['image_id']) >> self.inventory.clear() >> for item in savedata['inventory']: >> self.inventory.add(get_actor(item)) >> for scene_id in savedata['scene_walkmaps']: >> set_walkmap(scene_id, savedata['scene_walkmaps'][scene_id]) >> self.hidden_inventory = savedata['hidden_inventory'] >> set_scene(savedata['current_scene']) > > > On Fri, May 22, 2009 at 11:23 PM, Nevon <mgodne...@gmail.com> wrote: >> >> I'm currently part of a group developing a FOSS point-and-click >> adventure game using Python and Pygame. The game engine is actually a >> fork of the engine used in the game Colonel Wiljafjord and the >> Tarbukas Tyranny, and entry in Pyweek #3. Right now we're working on >> improving the engine in whatever way we can. If you're interested, the >> source is available here: >> http://github.com/kallepersson/subterranean/tree/master. >> >> So now I'd like to implement a save/load feature, but I don't really >> know where to start. I have no idea how game save systems are usually >> constructed, so I'm kind of lost. If anyone has any ideas, links to >> resources, or pointers on how to best do this, please share. >> >> Thank you! >> >> Tommy Brunn >> http://www.blastfromthepast.se/blabbermouth > -- Alexandre Quessy http://alexandre.quessy.net/