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 <[email protected]> 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
>