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
>

Reply via email to