|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import json
|
|
|
|
import os
|
|
|
|
import pygame
|
|
|
|
import sys
|
|
|
|
import traceback
|
|
|
|
from . import settings
|
|
|
|
from . import sounds
|
|
|
|
from . import objects
|
|
|
|
|
|
|
|
|
|
|
|
def save(name):
|
|
|
|
|
|
|
|
name = name.encode("utf-8")
|
|
|
|
# removes invalid characters
|
|
|
|
if "/" in name:
|
|
|
|
name = name.replace("/", "\\")
|
|
|
|
if "%" in name:
|
|
|
|
name = name.replace("%", "")
|
|
|
|
|
|
|
|
if not os.path.isdir("./saves/%s/" % name):
|
|
|
|
os.makedirs("./saves/%s/" % name)
|
|
|
|
|
|
|
|
all_world_data = {}
|
|
|
|
world_image = {}
|
|
|
|
for world_name in settings.localmap:
|
|
|
|
if not os.path.isdir("./saves/%s/%s" % (name, world_name)):
|
|
|
|
os.makedirs("./saves/%s/%s" % (name, world_name))
|
|
|
|
all_world_data[world_name] = {}
|
|
|
|
all_world_data[world_name]["targets"] = list()
|
|
|
|
all_world_data[world_name]["station"] = dict()
|
|
|
|
for target in settings.localmap[world_name].targets:
|
|
|
|
all_world_data[world_name]["targets"].append(target.unique_relevant_data())
|
|
|
|
station_data = settings.localmap[world_name].warp1.unique_relevant_data()
|
|
|
|
all_world_data[world_name]["station"] = station_data
|
|
|
|
world_image[world_name] = settings.localmap[world_name].background
|
|
|
|
|
|
|
|
data = {"fullscreen": settings.fullscreen,
|
|
|
|
"screenx_current": settings.screenx_current,
|
|
|
|
"screeny_current": settings.screeny_current,
|
|
|
|
"debugmode": settings.debugmode,
|
|
|
|
"debugscreen": settings.debugscreen,
|
|
|
|
"player.rel_x": settings.player.rel_x,
|
|
|
|
"player.rel_y": settings.player.rel_y,
|
|
|
|
"sounds.music.volume": sounds.music.volume,
|
|
|
|
"player.timeplay": settings.player.timeplay,
|
|
|
|
"world.name": settings.world.name,
|
|
|
|
"worlds": list(settings.localmap.keys())
|
|
|
|
}
|
|
|
|
|
|
|
|
settings_file = open("./saves/" + name + "/Data.json", "w")
|
|
|
|
for world_name in settings.localmap:
|
|
|
|
world_file = open("./saves/%s/%s/world.json" % (name, world_name), "w")
|
|
|
|
pygame.image.save(world_image[world_name],
|
|
|
|
"./saves/%s/%s/background.tga" % (name, world_name))
|
|
|
|
json.dump(all_world_data[world_name], world_file, indent=12)
|
|
|
|
json.dump(data, settings_file, indent=12)
|
|
|
|
|
|
|
|
|
|
|
|
def load(name):
|
|
|
|
"""Load savegame"""
|
|
|
|
|
|
|
|
try:
|
|
|
|
data = json.load(open("./saves/" + unicode(name) + "/Data.json", "r"))
|
|
|
|
settings.fullscreen = data["fullscreen"]
|
|
|
|
settings.screenx_current = data["screenx_current"]
|
|
|
|
settings.screeny_current = data["screeny_current"]
|
|
|
|
settings.debugmode = data["debugmode"]
|
|
|
|
settings.debugscreen = data["debugscreen"]
|
|
|
|
settings.player.rel_x = data["player.rel_x"]
|
|
|
|
settings.player.rel_y = data["player.rel_y"]
|
|
|
|
sounds.music.volume = data["sounds.music.volume"]
|
|
|
|
settings.player.timeplay = data["player.timeplay"]
|
|
|
|
world_names = data["worlds"]
|
|
|
|
|
|
|
|
from . import worlds
|
|
|
|
localmap = {}
|
|
|
|
for world_name in world_names:
|
|
|
|
background_dir = "./saves/%s/%s/background.tga" % (name, world_name)
|
|
|
|
background = pygame.image.load(background_dir)
|
|
|
|
world_data = json.load(open("./saves/%s/%s/world.json"
|
|
|
|
% (name, world_name), "r"))
|
|
|
|
localmap[world_name] = worlds.world(world_name)
|
|
|
|
localmap[world_name].generate(background, settings.dstars, 0)
|
|
|
|
for target_data in world_data["targets"]:
|
|
|
|
tmp_target = objects.target()
|
|
|
|
tmp_target.pos_xper = target_data["pos_xper"]
|
|
|
|
tmp_target.pos_yper = target_data["pos_yper"]
|
|
|
|
tmp_target.timer = target_data["timer"]
|
|
|
|
tmp_target.update()
|
|
|
|
localmap[world_name].targets.append(tmp_target)
|
|
|
|
tmp_station = objects.warp_station()
|
|
|
|
tmp_station.x_pos = world_data["station"]["x_pos"]
|
|
|
|
tmp_station.y_pos = world_data["station"]["y_pos"]
|
|
|
|
tmp_station.update()
|
|
|
|
localmap[world_name].warp1 = tmp_station
|
|
|
|
settings.localmap = localmap
|
|
|
|
settings.world = localmap[data["world.name"]]
|
|
|
|
except Exception:
|
|
|
|
print(("Unexpected error:", sys.exc_info()[0]))
|
|
|
|
print((traceback.format_exc()))
|