# HG changeset patch # User Neil Muller # Date 1316043282 -7200 # Node ID 9827ce46983455505a8a539e65298c26885f0d09 # Parent 59166ae6e86430ed2a8484e3610bff06ba244c07 Add more validation exceptions to new map loading code. Handle trying to load when display hasn't been initiliased better diff -r 59166ae6e864 -r 9827ce469834 mamba/data.py --- a/mamba/data.py Thu Sep 15 01:32:50 2011 +0200 +++ b/mamba/data.py Thu Sep 15 01:34:42 2011 +0200 @@ -37,6 +37,11 @@ def load_image(filename, mutators=()): + if not pygame.display.get_init(): + # Just check image exists + testfile = open(filepath(filename), 'rb') + testfile.close() + return None key = (filename, mutators) if key in MUTATED_IMAGES: return MUTATED_IMAGES[key] diff -r 59166ae6e864 -r 9827ce469834 mamba/level.py --- a/mamba/level.py Thu Sep 15 01:32:50 2011 +0200 +++ b/mamba/level.py Thu Sep 15 01:34:42 2011 +0200 @@ -2,6 +2,7 @@ Level for our shiny game. """ +import pygame from pygame.surface import Surface from pygame.sprite import RenderUpdates @@ -179,15 +180,28 @@ def setup_sprites(self, sprites_ascii): self.extra_sprites = {} + sprite_positions = [] for sprite_ascii in sprites_ascii: pos, _sep, rest = sprite_ascii.partition(':') - pos = [int(x.strip()) for x in pos.split(',')] + try: + pos = [int(x.strip()) for x in pos.split(',')] + except ValueError: + raise InvalidMapError("Sprite position must be two integers." + "Got %s" % pos) class_name, rest = rest.split(None, 1) args = rest.split() sprite_id, args = args[0], args[1:] - cls = sprites.find_sprite(class_name) + try: + cls = sprites.find_sprite(class_name) + except KeyError: + raise InvalidMapError("Unknown Sprite class: %s" % class_name) sprite = cls(*args) + if pos in sprite_positions: + raise InvalidMapError('Multiple sprites at %s.' % pos) + sprite_positions.append(pos) sprite.set_tile_pos(pos) + if sprite_id in self.extra_sprites: + raise InvalidMapError('Duplicate sprite id: %s.' % sprite_id) self.extra_sprites[sprite_id] = sprite self.sprites.add(sprite) @@ -225,6 +239,9 @@ return sprites.tile_sizify((x, y)) def make_background(self): + if not pygame.display.init(): + # Skip if we're not actuallt in pygame + return sx, sy = self.get_tile_size() self.background = Surface(self.get_size()) [self.background.blit(self.tileset.floor, sprites.tile_sizify((x, y)))