view regenerate_level_data.py @ 469:e0b11d684ee8

Reference gameboard.level rather than game.level where appropriate. Saving and restoring games appears to largely work now (even if the level of the restored game is different to the current one).
author Simon Cross <hodgestar@gmail.com>
date Tue, 24 Nov 2009 22:19:53 +0000
parents 02a6de5629d6
children
line wrap: on
line source

#!/usr/bin/env python

import os.path

import pygame
from pygame.locals import SWSURFACE, SRCALPHA

from gamelib import tiles, buildings, equipment
import regenerate_pngs

LEVEL_PATH = "data/levels"
TILE_WIDTH = 20
TILE_HEIGHT = 20
TILES_X = 8
TILES_Y = 8
WIDTH = TILES_X * TILE_WIDTH
HEIGHT = TILES_Y * TILE_HEIGHT

def generate_image(name, basepath):
    fn, _ = os.path.splitext(os.path.basename(name))
    svg_name = os.path.join(basepath, fn+".svg")
    if not os.path.exists(svg_name):
        print 'Skipping %s, as it seems to be missing' % svg_name
        return None
    png_name = os.path.join(LEVEL_PATH, fn+".png")
    regenerate_pngs.svg_to_png(svg_name, png_name, TILE_WIDTH, TILE_HEIGHT)
    return pygame.image.load(png_name)

def get_tile_mappings():
    tile_map = {}
    for building in buildings.BUILDINGS:
        tn = building.TILE_NO
        image = generate_image(building.IMAGE, regenerate_pngs.SPRITE_PATH)
        if image:
            tile_map[tn] = image
    for tn, (_, tile_png) in tiles.TileMap.DEFAULT_TILES.items():
        if tn not in tile_map:
            tile_map[tn] = generate_image(tile_png, regenerate_pngs.TILE_PATH)
    return tile_map

def get_code_mappings():
    code_map = {}
    # Needs better handling of wings
    for tn, sprites in equipment.EQUIP_MAP.iteritems():
        image = generate_image('chkn', regenerate_pngs.SPRITE_PATH)
        need_wing = False
        for equip in sprites:
            sub_image = generate_image(equip.CHICKEN_IMAGE_FILE,
                    regenerate_pngs.SPRITE_PATH)
            image.blit(sub_image, (0, 0))
            if equip.UNDER_LIMB:
                need_wing = True
        if need_wing:
            sub_image = generate_image('wing', regenerate_pngs.SPRITE_PATH)
            image.blit(sub_image, (0, 0))
        if image:
            code_map[tn] = image
    return code_map

if __name__ == '__main__':
    s = pygame.Surface((WIDTH, HEIGHT), SWSURFACE|SRCALPHA, 32)
    s.fill((0,0,0,0))
    for n, img in get_tile_mappings().items():
        rect = (TILE_WIDTH*(n % TILES_X), TILE_HEIGHT*(n / TILES_X), TILE_WIDTH, TILE_HEIGHT)
        print n, rect
        s.blit(img, rect)
    pygame.image.save(s, os.path.join(LEVEL_PATH, "tiles.tga"))
    s.fill((0,0,0,0))
    for n, img in get_code_mappings().items():
        rect = (TILE_WIDTH*(n % TILES_X), TILE_HEIGHT*(n / TILES_X), TILE_WIDTH, TILE_HEIGHT)
        print n, rect
        s.blit(img, rect)
    pygame.image.save(s, os.path.join(LEVEL_PATH, "codes.tga"))