view regenerate_pngs.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 fef4b1686d6c
children 41864335aeee
line wrap: on
line source

#!/usr/bin/env python

import cairo
import rsvg
import os

def svg_to_png(svg_name, png_name, w, h):
    """Convert an SVG file to a PNG file."""
    print "Generating %s at %dx%d..." % (png_name, w, h)
    r = rsvg.Handle(svg_name)

    scale = max(float(r.props.width) / w, float(r.props.height) / h)
    scale = 1.0 / scale

    r.props.dpi_x = r.props.dpi_x / scale
    r.props.dpi_y = r.props.dpi_y / scale

    cs = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
    ctx = cairo.Context(cs)
    ctx.scale(scale, scale)
    r.render_cairo(ctx)
    cs.write_to_png(png_name)

def process_svg_folder(path, width, height):
    for dirpath, dirnames, filenames in os.walk(path):
        for filename in filenames:
            basename, ext = os.path.splitext(filename)
            if ext == ".svg":
                svg_name = os.path.join(dirpath, basename + ".svg")
                png_name = os.path.join(dirpath, basename + ".png")
                svg_to_png(svg_name, png_name, width, height)

def process_sprite(name, width, height, sprite_path):
    svg_name = os.path.join(sprite_path, name) + ".svg"
    png_name = os.path.join(sprite_path, name) + ".png"
    svg_to_png(svg_name, png_name, width, height)

TILE_PATH = "data/tiles"
SPRITE_PATH = "data/sprites"
IMAGE_PATH = "data/images"

SPRITES = [
    # chicken bits
    ("chkn", 20, 20),
    ("wing", 20, 20),
    ("eye", 20, 20),
    ("equip_rifle", 20, 20),
    ("equip_sniper_rifle", 20, 20),
    ("equip_knife", 20, 20),
    ("equip_kevlar", 20, 20),
    ("equip_helmet", 20, 20),
    ("equip_axe", 20, 20),
    ("select_chkn", 20, 20),
    ("nest", 20, 20),
    ("equip_egg", 20, 20),
    # fox bits
    ("fox", 20, 20),
    ("ninja_fox", 20, 20),
    ("sapper_fox", 20, 20),
    ("rinkhals", 20, 20),
    # buildings
    ("henhouse", 60, 40),
    ("select_henhouse", 60, 40),
    ("hendominium", 40, 60),
    ("select_hendominium", 40, 60),
    ("watchtower", 40, 40),
    ("select_watchtower", 40, 40),
    # special effects
    ("muzzle_flash", 20, 20),
    ("chkn_death", 20, 20),
    ("fox_death", 20, 20),
    ("boom1", 20, 20),
    ("boom2", 20, 20),
    ("boom3", 20, 20),
    ("boom4", 20, 20),
]

if __name__ == "__main__":
    process_svg_folder("data/tiles", 20, 20)
    process_svg_folder("data/icons", 40, 40)
    for name, width, height in SPRITES:
        process_sprite(name, width, height, SPRITE_PATH)
    process_sprite("splash", 800, 600, IMAGE_PATH)
    process_sprite("gameover_win", 800, 600, IMAGE_PATH)
    process_sprite("gameover_lose", 800, 600, IMAGE_PATH)