Ejemplo n.º 1
0
def init():
    tiles = loader('tiles', unit=TILE_SIZE)

    terrain2.terrain_blocks('grass', tiles('lpc-base-tiles/grass.png'), shape='floor')
    terrain2.terrain_blocks('water_grass', tiles('lpc-base-tiles/watergrass.png'))
    terrain2.terrain_cross_blocks('water_grass', tiles('lpc-watergrass-cross.png'))

    terrain2.interior_blocks('farmland', tiles('farmland-interior-parts.png'), shape='floor')

    structures = loader('structures', unit=TILE_SIZE)
    s = STRUCTURE.prefixed('tree') \
            .shape(TREE_SHAPE) \
            .layer(1)

    s.new('v0') \
            .part(models.TREE['shadow'], structures('tree-shadow-round.png')) \
            .part(models.TREE['trunk'], structures('tree-trunk.png')) \
            .part(models.TREE['top'], structures('tree-top-round.png'))

    s.new('v1') \
            .part(models.TREE['shadow'], structures('tree-shadow-cone.png')) \
            .part(models.TREE['trunk'], structures('tree-trunk.png')) \
            .part(models.TREE['top'], structures('tree-top-cone.png'))

    STRUCTURE.new('stump') \
            .shape(STUMP_SHAPE) \
            .layer(1) \
            .part(models.TREE['stump'], structures('tree-stump.png'))
Ejemplo n.º 2
0
def init():
    load = loader()
    struct_sheet = load('structures/crops.png', unit=TILE_SIZE)
    icon_sheet = load('icons/crops.png', unit=TILE_SIZE)

    def mk_crop(basename, display_name, index, size=(1, 1, 1), count=5):
        sx, sy, sz = size

        s = STRUCTURE.prefixed(basename) \
                .model(models.solid(*size)) \
                .shape(structure.solid(*size)) \
                .layer(1)
        for i in range(count):
            s.new(str(i)) \
                    .image(struct_sheet.extract((i, 2 * index), size=(sx, sy + sz)))

        ITEM.new(basename) \
                .display_name(display_name) \
                .icon(icon_sheet.extract((index, 0)))

    mk_crop('tomato', 'Tomato', 0)
    mk_crop('potato', 'Potato', 1)
    mk_crop('carrot', 'Carrot', 2)
    mk_crop('artichoke', 'Artichoke', 3)
    mk_crop('pepper', 'Pepper', 4)
    mk_crop('cucumber', 'Cucumber', 5)
    mk_crop('corn', 'Corn', 6, size=(1, 1, 2))
Ejemplo n.º 3
0
def init():
    structures = loader('structures', unit=TILE_SIZE)

    wall = do_wall_parts('interior_wall', structures('interior-wall.png'),
            door_image=structures('door.png'))
    wall_items_recipes(wall, 'interior', 'Interior', 'wood')

    wall = do_wall_parts('brick_wall', structures('brick-wall.png'),
            door_image=structures('door.png'))
    wall_items_recipes(wall, 'brick', 'Brick', 'stone')

    wall = do_wall_parts('wood_wall', structures('wood_wall.png'),
            door_image=structures('door-rough.png'),
            extra_parts=('window/v0',))
    wall_items_recipes(wall, 'wood', 'Wooden', 'wood')

    wall = do_wall_parts('stone_wall', structures('stone-wall.png'),
            door_image=structures('door.png'),
            extra_parts=('window/v0', 'window/v1'))
    wall_items_recipes(wall, 'stone', 'Stone', 'stone')

    wall = do_wall_parts('ruined_wall', structures('ruined-wall.png'),
            door_image=structures('door.png'),
            extra_parts=('window/v0', 'window/v1'))
    wall_items_recipes(wall, 'ruined', 'Ruined', 'stone', icon_offset=(0, 40))

    wall = do_wall_parts('cottage_wall', structures('cottage-wall.png'),
            door_image=structures('door.png'),
            extra_parts=['window/v%d' % i for i in range(2)] +
                ['variant/v%d' % i for i in range(3)])
    wall_items_recipes(wall, 'cottage', 'Cottage', 'wood')
Ejemplo n.º 4
0
def init():
    structures = loader('structures', unit=TILE_SIZE)

    door_anim_sheet = structures('cave-door.png').with_unit((3 * TILE_SIZE, 2 * TILE_SIZE))
    door_anim = Anim(
            [door_anim_sheet.extract((0, i)) for i in range(door_anim_sheet.size[1])],
            16, oneshot=True)
    do_dungeon_door('dungeon/door/key', structures('cave-doorway-keyhole.png'), door_anim)
    do_dungeon_door('dungeon/door/puzzle', structures('cave-doorway-plain.png'), door_anim)
Ejemplo n.º 5
0
def init():
    icons = loader('icons', unit=ICON_SIZE)
    structures = loader('structures', unit=TILE_SIZE)

    ITEM.new('crystal') \
            .display_name('Crystal') \
            .icon(icons('crystal.png'))

    do_teleporter(structures('crystal-formation.png'))
    do_dungeon_entrance(structures('crystal-formation-red.png'))
    do_ward(structures('crystal-ward.png').extract((0, 0), (1, 2)))

    do_sign(structures('sign.png'))

    ITEM.new('hat') \
            .display_name('Witch Hat') \
            .icon(icons('equip_hat_icon.png'))
    ITEM.new('party_hat') \
            .display_name('Party Hat') \
            .icon(icons('party-hat-icon.png'))
    ITEM.new('santa_hat') \
            .display_name('Santa Hat') \
            .icon(icons('santa-hat-icon.png'))

    pillars = structures('pillar.png')
    do_pillar(pillars.extract((0, 0), (1, 3)), 'wood', 'Wooden')
    do_pillar(pillars.extract((1, 0), (1, 3)), 'stone', 'Stone')

    do_floor(structures('wood-floor.png'))
    COLORS = (
            ('red', 'Red'),
            ('orange', 'Orange'),
            ('yellow', 'Yellow'),
            ('green', 'Green'),
            ('blue', 'Blue'),
            ('purple', 'Purple'),
            )
    for i, (color, desc) in enumerate(COLORS):
        do_floor_variant(structures('floor-%s.png' % color), i, color, desc)
Ejemplo n.º 6
0
def init():
    pony = get_pony_sprite()
    load = loader('sprites', unit=SPRITE_SIZE)
    load1 = loader('sprites')


    # Standard animations

    # Define animations
    for m in MOTIONS:
        for i, d in enumerate(DIRS):
            if d.mirror is None:
                pony.add_anim('%s-%d' % (m.name, i), m.len, m.fps)
            else:
                pony.derive_anim('%s-%d' % (m.name, i),
                        '%s-%d' % (m.name, d.mirror), sprite.mirror_anim)

    # Define layers and collect sheets
    sheets = {}
    for sex, ms in (('f', 'mare'), ('m', 'stallion')):
        # Base layers
        for layer in ('base', 'horn', 'frontwing', 'backwing'):
            layer_name = '%s/%s' % (sex, layer)
            pony.add_layer(layer_name)
            sheets[layer_name] = load('base/%s/%s.png' % (ms, layer))

        # Mane/tail layers
        for kind, idx in standard_manes_tails():
            layer_name = '%s/%s/%d' % (sex, kind, idx)
            pony.add_layer(layer_name)
            sheets[layer_name] = load('parts/%s/%s%d.png' % (ms, kind, idx))

        # Hat box
        layer_name = '%s/_dummy/hat_box' % sex
        pony.add_layer(layer_name)
        sheets[layer_name] = load('base/%s/hat-box.png' % ms)

    # Add graphics
    row_to_anim = lambda row, m: row.sheet_to_anim((1, 1), m.fps)
    for m, i, anim_name in standard_anims():
        extract_graphics(sheets, m, i, anim_name, row_to_anim)


    # Other anims

    # Sleep

    pony.add_anim('sleep-0', 6, 2)
    pony.derive_anim('sleep-2', 'sleep-0', sprite.mirror_anim)
    def make_sleep_anim(row, _m):
        frames = [
                row.extract((0, 0)),
                row.extract((0, 0)),
                row.extract((1, 0)),
                row.extract((2, 0)),
                row.extract((2, 0)),
                row.extract((1, 0)),
                ]
        return Anim(frames, 2)
    extract_graphics(sheets, Motion('sleep', 0, 10, 3, 2), 0, 'sleep-0', make_sleep_anim)

    for sex in ('m', 'f'):
        blank = Image(size=(3, 1), unit=SPRITE_SIZE)
        anim = make_sleep_anim(blank, None)
        pony.add_graphics('%s/eyes1' % sex, 'sleep-0', anim)


    # Hat layers

    for sex, ms in (('f', 'mare'), ('m', 'stallion')):
        # Eyes
        sheet = load1('parts/%s/eyes1.png' % ms)
        add_hat_layer('%s/eyes1' % sex, sex, sheet)

        # Hats
        for hat_type in ('witch', 'santa', 'party'):
            sheet = load1('equipment/%s-hat-%s.png' % (hat_type, sex))
            add_hat_layer('%s/hat/%s' % (sex, hat_type), sex, sheet)
Ejemplo n.º 7
0
def init():
    tiles = loader('tiles', unit=TILE_SIZE)

    def mk_layer(letter, img_name, is_base=True):
        return Layer(letter, chop_terrain(tiles(img_name)), is_base)

    layer_dct = {
            'g': mk_layer('g', 'lpc-grassalt-with-variants.png'),
            'm': mk_layer('m', 'lpc-base-tiles/dirt.png'),
            'c': mk_layer('c', 'lpc-base-tiles/dirt2.png'),
            #'s': mk_layer('s', 'TODO'),
            'a': mk_layer('a', 'lpc-base-tiles/lavarock.png'),

            'w': mk_layer('w', 'lpc-base-tiles/water.png', is_base=False),
            'l': mk_layer('l', 'lpc-base-tiles/lava.png', is_base=False),
            'p': mk_layer('p', 'lpc-base-tiles/holemid.png', is_base=False),
            }

    order = 'mca wlp g s'

    def collect_layers(letters):
        return [layer_dct[l] for l in order if l in letters]

    # Base terrain
    floor_bb = BLOCK.prefixed('terrain').shape('floor')
    empty_bb = BLOCK.prefixed('terrain').shape('empty')
    seen = set()
    for letters in ('gc', 'gw'):
        for name, img in iter_terrain_floor(collect_layers(letters)):
            # Avoid duplicate blocks
            if name in seen:
                continue
            seen.add(name)

            bb = floor_bb if 'w' not in letters else empty_bb
            bb.new(name).bottom(img)
    
    # Variants
    for layer in layer_dct.values():
        name = layer.name * 4
        for i in range(4):
            key = 'full/v%d' % i if i > 0 else 'full'
            floor_bb.new('%s/v%d' % (name, i)).bottom(layer.dct[key])


    # Hilltop edges
    grass_top = chop_terrain(tiles('cave-top-grass.png'), tiles('cave-top-grass-cross.png'))
    for code in iter_codes(2):
        d = describe(tuple(x == 0 for x in code))
        blk = floor_bb.new('gggg/e%s' % ''.join(str(x) for x in code)).bottom(grass_top[d])
        if code == (1, 1, 1, 1):
            blk.shape('empty')

    # Cave top (for ramp tops inside caves)
    cave_top = chop_terrain(tiles('lpc-cave-top2.png'), tiles('lpc-cave-top2-cross.png'))
    for code in iter_codes(2):
        d = describe(tuple(x == 0 for x in code))
        blk = floor_bb.new('cccc/e%s' % ''.join(str(x) for x in code)).bottom(cave_top[d])
        if code == (1, 1, 1, 1):
            blk.shape('empty')

    # Terrain with cave walls
    for floor in iter_terrain_floor(collect_layers('gc')):
        for cave in iter_cave_z0(tiles('lpc-cave-walls2.png')):
            BLOCK.new('terrain/%s/c%s' % (floor.name, cave.name)) \
                    .bottom(floor.bottom) \
                    .front(cave.front) \
                    .shape('floor' if cave.clear else 'solid')

    # Cave walls (z1 part)
    cave_top_dct = chop_cave_top(tiles('lpc-cave-walls2.png'))
    cave_front_dct = chop_cave_front(tiles('lpc-cave-walls2.png'))
    black_dct = chop_black()

    for code in iter_codes(3):
        ds = dissect(code, 3)
        name = ''.join(str(x) for x in code)

        front_desc = calc_front_desc(ds)
        front = cave_front_dct['%s/z1' % front_desc] if front_desc is not None else None

        top = image2.stack((
            black_dct[ds[0]],
            cave_top_dct[ds[1]],
            cave_top_dct[ds[2]],
            ))

        clear = name in ('1111', '2222')
        BLOCK.new('cave_z1/c%s' % name) \
                .shape('empty' if clear else 'solid') \
                .top(top).front(front)

    # Ramps
    cave_bottom_dct = dict(iter_terrain_floor(collect_layers('gc')))
    do_cave_ramps(tiles, cave_bottom_dct)
    do_cave_entrance(tiles, cave_bottom_dct)
Ejemplo n.º 8
0
def init():
    tiles = loader('tiles', unit=TILE_SIZE)
    structures = loader('structures', unit=TILE_SIZE)

    do_cave_junk(structures('cave-junk.png'))