changeset 408:02a6de5629d6

Levels can include starting equipment
author Neil Muller <drnlmuller@gmail.com>
date Sat, 21 Nov 2009 09:40:29 +0000
parents bdc8bc78a796
children 912b2a0ed014
files docs/Level_structure gamelib/equipment.py gamelib/gameboard.py regenerate_level_data.py
diffstat 4 files changed, 52 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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:
--- 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],
+        }
--- 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)):
--- 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