# HG changeset patch # User Neil Muller # Date 1258796429 0 # Node ID 02a6de5629d61cd86fd6bf08f464d08a417880bb # Parent bdc8bc78a796cab647aa2ec87103fb3abc705c43 Levels can include starting equipment diff -r bdc8bc78a796 -r 02a6de5629d6 docs/Level_structure --- a/docs/Level_structure Sat Nov 21 06:44:19 2009 +0000 +++ b/docs/Level_structure Sat Nov 21 09:40:29 2009 +0000 @@ -4,6 +4,21 @@ two layers of pgu's tilemap - the tile layer, for the objects of interest, and the code layer, which indicates the starting chicken positions. +Different codes mean chickens ahve different levels of equipment. + +01 - chicken with no equipment +02 - chicken with helmet +03 - chicken with kevlar +04 - chicken with knife +05 - chicken with rifle +06 - chicken with kevlar & helmet +07 - chicken with helmet & knife +08 - chicken with kevlar & knife +09 - chicken with kevlar, helmet & knife +10 - chicken with helmet & rifle +11 - chicken with kevlar & rifle +12 - chicken with kevlar, helmet & rifle + The level.conf file allows the default game constants to be customised. Example level.conf: diff -r bdc8bc78a796 -r 02a6de5629d6 gamelib/equipment.py --- a/gamelib/equipment.py Sat Nov 21 06:44:19 2009 +0000 +++ b/gamelib/equipment.py Sat Nov 21 09:40:29 2009 +0000 @@ -196,3 +196,19 @@ EQUIPMENT.append(obj) except TypeError: pass + + +EQUIP_MAP = { # Map chicken level codes to equipment + 1 : [], + 2 : [Helmet], + 3 : [Kevlar], + 4 : [Knife], + 5 : [Rifle], + 6 : [Kevlar, Helmet], + 7 : [Helmet, Knife], + 8 : [Kevlar, Knife], + 9 : [Kevlar, Helmet, Knife], + 10 : [Helmet, Rifle], + 11 : [Kevlar, Rifle], + 12 : [Kevlar, Helmet, Rifle], + } diff -r bdc8bc78a796 -r 02a6de5629d6 gamelib/gameboard.py --- a/gamelib/gameboard.py Sat Nov 21 06:44:19 2009 +0000 +++ b/gamelib/gameboard.py Sat Nov 21 09:40:29 2009 +0000 @@ -302,9 +302,9 @@ self.fix_buildings() - cdata = { - 1 : (self.add_start_chickens, None), - } + cdata = {} + for tn in equipment.EQUIP_MAP: + cdata[tn] = (self.add_start_chickens, tn) self.tv.run_codes(cdata, (0,0,width,height)) @@ -937,9 +937,12 @@ self.cash += amount self.toolbar.update_cash_counter(self.cash) - def add_start_chickens(self, _map, tile, _value): + def add_start_chickens(self, _map, tile, value): """Add chickens as specified by the code layer""" chick = animal.Chicken((tile.tx, tile.ty)) + for equip_cls in equipment.EQUIP_MAP[value]: + item = equip_cls() + chick.equip(item) self.add_chicken(chick) def _choose_fox(self, (x, y)): diff -r bdc8bc78a796 -r 02a6de5629d6 regenerate_level_data.py --- a/regenerate_level_data.py Sat Nov 21 06:44:19 2009 +0000 +++ b/regenerate_level_data.py Sat Nov 21 09:40:29 2009 +0000 @@ -5,7 +5,7 @@ import pygame from pygame.locals import SWSURFACE, SRCALPHA -from gamelib import tiles, buildings +from gamelib import tiles, buildings, equipment import regenerate_pngs LEVEL_PATH = "data/levels" @@ -40,9 +40,19 @@ def get_code_mappings(): code_map = {} - # this list needs to manually kept in sync. This should be fixed - for tn, sprite_name in [(1, 'chkn')]: - image = generate_image(sprite_name, regenerate_pngs.SPRITE_PATH) + # 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