# HG changeset patch # User Adrianna PiƄska # Date 1258817723 0 # Node ID ab4fc3fe0f9608755adf456fad68630bdc92a8e9 # Parent e65536ca215b46572ef82d3000169dbe962e997e chickens scatter; chop wood diff -r e65536ca215b -r ab4fc3fe0f96 data/icons/foxassault.png Binary file data/icons/foxassault.png has changed diff -r e65536ca215b -r ab4fc3fe0f96 data/images/gameover_lose.png Binary file data/images/gameover_lose.png has changed diff -r e65536ca215b -r ab4fc3fe0f96 data/images/gameover_win.png Binary file data/images/gameover_win.png has changed diff -r e65536ca215b -r ab4fc3fe0f96 data/images/splash.png Binary file data/images/splash.png has changed diff -r e65536ca215b -r ab4fc3fe0f96 data/sprites/axe.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/sprites/axe.svg Sat Nov 21 15:35:23 2009 +0000 @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + diff -r e65536ca215b -r ab4fc3fe0f96 data/sprites/equip_axe.png Binary file data/sprites/equip_axe.png has changed diff -r e65536ca215b -r ab4fc3fe0f96 data/sprites/equip_axe.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/sprites/equip_axe.svg Sat Nov 21 15:35:23 2009 +0000 @@ -0,0 +1,114 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + diff -r e65536ca215b -r ab4fc3fe0f96 gamelib/animal.py --- a/gamelib/animal.py Sat Nov 21 15:24:56 2009 +0000 +++ b/gamelib/animal.py Sat Nov 21 15:35:23 2009 +0000 @@ -178,8 +178,22 @@ gameboard.remove_chicken(self) def move(self, gameboard): - """A free chicken will move away from other free chickens""" - pass + """A free chicken will wander around aimlessly""" + pos_x, pos_y = self.pos.to_tile_tuple() + surrounds = [Position(pos_x + dx, pos_y + dy) for dx in [-1, 0, 1] for dy in [-1, 0, 1]] + pos_options = [pos for pos in surrounds if gameboard.in_bounds(pos) and gameboard.tv.get(pos.to_tile_tuple()) == gameboard.GRASSLAND and not gameboard.get_outside_chicken(pos.to_tile_tuple())] + [self.pos] + self.pos = pos_options[random.randint(0, len(pos_options)-1)] + + def chop(self, gameboard): + pos_x, pos_y = self.pos.to_tile_tuple() + surrounds = [Position(pos_x + dx, pos_y + dy) for dx in [-1, 0, 1] for dy in [-1, 0, 1]] + tree_options = [pos for pos in surrounds if gameboard.in_bounds(pos) and gameboard.tv.get(pos.to_tile_tuple()) == gameboard.WOODLAND] + if tree_options: + num_trees_to_cut = random.randint(0, len(tree_options)-1) + trees_to_cut = random.sample(tree_options, num_trees_to_cut) + for tree_pos in trees_to_cut: + gameboard.add_wood(5) + gameboard.tv.set(tree_pos.to_tile_tuple(), gameboard.GRASSLAND) def lay(self, gameboard): """See if the chicken lays an egg""" diff -r e65536ca215b -r ab4fc3fe0f96 gamelib/engine.py --- a/gamelib/engine.py Sat Nov 21 15:24:56 2009 +0000 +++ b/gamelib/engine.py Sat Nov 21 15:35:23 2009 +0000 @@ -211,6 +211,9 @@ self.game.gameboard.start_night() sound.play_sound("nightfall.ogg") + + self.game.gameboard.chickens_scatter() + self.game.gameboard.chickens_chop_wood() # Add a timer to the event queue self.cycle_count = 0 self.cycle_time = SLOW_ANIM_SPEED diff -r e65536ca215b -r ab4fc3fe0f96 gamelib/equipment.py --- a/gamelib/equipment.py Sat Nov 21 15:24:56 2009 +0000 +++ b/gamelib/equipment.py Sat Nov 21 15:35:23 2009 +0000 @@ -137,6 +137,18 @@ CHICKEN_IMAGE_FILE = 'sprites/equip_knife.png' +class Axe(Weapon): + TYPE = "AXE" + NAME = "Axe" + BUY_PRICE = 50 + SELL_PRICE = 30 + + RANGE = 1 + BASE_HIT = 25 + RANGE_PENALTY = 0 + + CHICKEN_IMAGE_FILE = 'sprites/equip_axe.png' + class Armour(Equipment): IS_ARMOUR = True DRAW_LAYER = 5 @@ -242,4 +254,8 @@ 10 : [Helmet, Rifle], 11 : [Kevlar, Rifle], 12 : [Kevlar, Helmet, Rifle], + 13 : [Axe], + 14 : [Helmet, Axe], + 15 : [Kevlar, Axe], + 16 : [Kevlar, Helmet, Axe], } diff -r e65536ca215b -r ab4fc3fe0f96 gamelib/gameboard.py --- a/gamelib/gameboard.py Sat Nov 21 15:24:56 2009 +0000 +++ b/gamelib/gameboard.py Sat Nov 21 15:35:23 2009 +0000 @@ -63,6 +63,7 @@ self._next_tool_value = 0 self.gameboard = gameboard self.cash_counter = mklabel(align=1) + self.wood_counter = mklabel(align=1) self.chicken_counter = mklabel(align=1) self.egg_counter = mklabel(align=1) self.day_counter = mklabel(align=1) @@ -73,6 +74,7 @@ self.td(gui.Spacer(self.rect.w/2, 0)) self.add_counter(mklabel("Day:"), self.day_counter) self.add_counter(mklabel("Groats:"), self.cash_counter) + self.add_counter(mklabel("Planks:"), self.wood_counter) self.add_counter(mklabel("Eggs:"), self.egg_counter) self.add_counter(icons.CHKN_ICON, self.chicken_counter) self.add_counter(icons.KILLED_FOX, self.killed_foxes) @@ -80,8 +82,6 @@ self.add_tool_button("Move Hen", constants.TOOL_PLACE_ANIMALS, None, cursors.cursors['select']) - self.add_tool_button("Cut Trees", constants.TOOL_LOGGING, - constants.LOGGING_PRICE, cursors.cursors['ball']) self.add_spacer(5) self.add_heading("Sell ...") @@ -112,7 +112,6 @@ self.add_spacer(5) self.add_tool("Price Reference", self.show_prices) - self.add_spacer(10) self.fin_tool = self.add_tool("Finished Day", self.day_done) @@ -197,6 +196,7 @@ self.anim_clear_tool = True update_cash_counter = mkcountupdate('cash_counter') + update_wood_counter = mkcountupdate('wood_counter') update_fox_counter = mkcountupdate('killed_foxes') update_chicken_counter = mkcountupdate('chicken_counter') update_egg_counter = mkcountupdate('egg_counter') @@ -293,6 +293,7 @@ self.buildings = [] self._pos_cache = { 'fox' : [], 'chicken' : []} self.cash = 0 + self.wood = 0 self.eggs = 0 self.days = 0 self.killed_foxes = 0 @@ -414,8 +415,6 @@ self.sell_equipment(self.tv.screen_to_tile(e.pos)) elif self.selected_tool == constants.TOOL_REPAIR_BUILDING: self.repair_building(self.tv.screen_to_tile(e.pos)) - elif self.selected_tool == constants.TOOL_LOGGING: - self.logging_forest(self.tv.screen_to_tile(e.pos)) elif buildings.is_building(self.selected_tool): self.buy_building(self.tv.screen_to_tile(e.pos), self.selected_tool) elif equipment.is_equipment(self.selected_tool): @@ -653,14 +652,6 @@ self.open_dialog(tbl, close_callback=close_callback) - def logging_forest(self, tile_pos): - if self.tv.get(tile_pos) != self.WOODLAND: - return - if self.cash < constants.LOGGING_PRICE: - return - self.add_cash(-constants.LOGGING_PRICE) - self.tv.set(tile_pos, self.GRASSLAND) - def buy_building(self, tile_pos, building_cls): building = building_cls(tile_pos) if self.cash < building.buy_price(): @@ -844,6 +835,19 @@ return self._pos_cache[cache_type][pos.x][pos.y][pos.z] return None + def chickens_scatter(self): + """Chickens outside move around randomly a bit""" + for chicken in [chick for chick in self.chickens if chick.outside()]: + old_pos = chicken.pos + chicken.move(self) + if chicken.pos != old_pos: + self._update_pos_cache(old_pos, chicken, 'chicken') + + def chickens_chop_wood(self): + """Chickens with axes chop down trees near them""" + for chicken in [chick for chick in self.chickens if chick.outside()]: + chicken.chop(self) + def foxes_move(self): over = True for fox in self.foxes: @@ -931,6 +935,10 @@ self.cash += amount self.toolbar.update_cash_counter(self.cash) + def add_wood(self, planks): + self.wood += planks + self.toolbar.update_wood_counter(self.wood) + def add_start_chickens(self, _map, tile, value): """Add chickens as specified by the code layer""" chick = animal.Chicken((tile.tx, tile.ty)) diff -r e65536ca215b -r ab4fc3fe0f96 regenerate_pngs.py --- a/regenerate_pngs.py Sat Nov 21 15:24:56 2009 +0000 +++ b/regenerate_pngs.py Sat Nov 21 15:35:23 2009 +0000 @@ -49,6 +49,7 @@ ("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),