changeset 31:9d36c1dc6b0c

saw
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sat, 16 Mar 2013 09:11:11 +0100
parents 072f93dc8b7c
children 970194e9147c
files fhrl/__main__.py fhrl/display.py fhrl/items.png fhrl/level.py fhrl/mobs.py
diffstat 5 files changed, 76 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/fhrl/__main__.py	Sat Mar 16 08:38:13 2013 +0100
+++ b/fhrl/__main__.py	Sat Mar 16 09:11:11 2013 +0100
@@ -15,8 +15,8 @@
 
     def run(self):
         hero = Hero()
-        for level in xrange(5):
-            self.level = Level((24, 24), hero)
+        for level in xrange(6):
+            self.level = Level((24, 24), hero, level)
             self.display.load_level(self.level)
             self.display.scroll_by(
                 self.level.hero.x * 48 - self.display.width // 2,
--- a/fhrl/display.py	Sat Mar 16 08:38:13 2013 +0100
+++ b/fhrl/display.py	Sat Mar 16 09:11:11 2013 +0100
@@ -140,6 +140,9 @@
 
     def update_hud(self, hero):
         self.health_number.set_number(hero.health)
+        self.balls_number.set_number(hero.balls)
+        self.gasoline_number.set_number(hero.gasoline)
+        self.battery_number.set_number(hero.battery)
 
 
     def render_level(self, surf, level):
Binary file fhrl/items.png has changed
--- a/fhrl/level.py	Sat Mar 16 08:38:13 2013 +0100
+++ b/fhrl/level.py	Sat Mar 16 09:11:11 2013 +0100
@@ -6,7 +6,7 @@
 
 
 class Level(object):
-    def __init__(self, (width, height), hero, level=1):
+    def __init__(self, (width, height), hero, level=0):
         self.hero = hero
         self.width = width
         self.height = height
--- a/fhrl/mobs.py	Sat Mar 16 08:38:13 2013 +0100
+++ b/fhrl/mobs.py	Sat Mar 16 09:11:11 2013 +0100
@@ -249,7 +249,7 @@
         self.gasoline += item.kind.get('gasoline', 0)
         self.battery += item.kind.get('battery', 0)
         self.balls += item.kind.get('balls', 0)
-        if item.kind.get('gun') and item.kind not in self.items:
+        if item.kind.get('shoot') and item.kind not in self.items:
             self.items.append(item.kind)
         return [item._pick_anim(display)]
 
@@ -424,7 +424,7 @@
 def gun_cannon((x, y), direction, level, display):
     steps = 0
     anims = []
-    while not level.is_wall((x, y)) and steps < 5:
+    while not level.is_wall((x, y)) and steps < 4:
         mob = level.find_mob((x, y))
         effect = Effect(
             display.resources.effect[0:4],
@@ -445,6 +445,29 @@
     return anims
 
 
+def gun_vulcan((x, y), direction, level, display):
+    steps = 0
+    anims = []
+    while not level.is_wall((x, y)) and steps < 7:
+        mob = level.find_mob((x, y))
+        effect = Effect(
+            display.resources.effect[0:4],
+            (x * 48 + display.x, y * 32 + display.y)
+        )
+        display.sprites.add(effect)
+        anims.append(effect.anim())
+        if mob:
+            anims.extend(mob.wound(10, display))
+        stuff = level.find_stuff((x, y))
+        if stuff and stuff.kind not in (5, 7, 8):
+            break
+        x += DX[direction]
+        y += DY[direction]
+        steps += 1
+    return anims
+
+
+
 def gun_beam((x, y), direction, level, display):
     steps = 0
     anims = []
@@ -484,6 +507,23 @@
             break
     return anims
 
+def gun_saw((x, y), direction, level, display):
+    anims = []
+    effect = Effect(
+        display.resources.effect[0:4],
+        (x * 48 + display.x, y * 32 + display.y)
+    )
+    display.sprites.add(effect)
+    anims.append(effect.anim())
+    mob = level.find_mob((x, y))
+    if mob:
+        anims.extend(mob.wound(99, display))
+    stuff = level.find_stuff((x, y))
+    if stuff and stuff.kind not in (5, 7, 8):
+        stuff.kind = 8
+        anims.append(stuff._morph_anim(display))
+    return anims
+
 
 def gun_drill((x, y), direction, level, display):
     anims = []
@@ -499,7 +539,7 @@
     anims.append(effect.anim())
     mob = level.find_mob((x, y))
     if mob:
-        anims.extend(mob.wound(100, display))
+        anims.extend(mob.wound(99, display))
     stuff = level.find_stuff((x, y))
     if stuff and stuff.kind not in (5, 7, 8):
         stuff.kind = 8
@@ -610,12 +650,12 @@
         'balls': 5,
         'shoot': gun_cannon,
     },
-    'teleporter': {
-        'name': "Teleport Device",
+    'saw': {
+        'name': "Mechanic Saw",
         'sprite': 3,
-        'ammo': 'battery',
-        'battery': 5,
-        'shoot': gun_beam,
+        'ammo': 'gasoline',
+        'gasoline': 5,
+        'shoot': gun_saw,
     },
     'flamer': {
         'name': "Flame Thrower",
@@ -629,7 +669,7 @@
         'sprite': 5,
         'ammo': 'balls',
         'balls': 5,
-        'shoot': gun_cannon,
+        'shoot': gun_vulcan,
     },
     'deevo': {
         'name': "Deevolution Inducer",
@@ -643,7 +683,6 @@
         'sprite': 7,
         'ammo': 'battery',
         'battery': 5,
-        'shoot': gun_flames,
     },
     'balls': {
         'name': "Cannon Balls",
@@ -655,7 +694,7 @@
         'sprite': 9,
         'gasoline': 10,
     },
-    'medkit': {
+    'medikit': {
         'name': "First Aid Kit",
         'sprite': 10,
         'health': 10,
@@ -669,10 +708,26 @@
 
 
 def make_monster(level, pos):
-    kind = random.choice(MONSTERS.values())
-    return Mob(kind, pos)
+    levels = [
+        ['guard'],
+        ['guard', 'worker', 'guard'],
+        ['guard', 'worker', 'robot'],
+        ['worker', 'robot', 'beast'],
+        ['robot', 'beast', 'beast'],
+        ['professor'],
+    ]
+    name = random.choice(levels[level])
+    return Mob(MONSTERS[name], pos)
 
 
 def make_item(level, pos):
-    kind = random.choice(ITEMS.values())
-    return Item(kind, pos)
+    levels = [
+        ['medikit', 'balls', 'cannon'],
+        ['saw', 'flamer', 'gasoline', 'balls', 'medikit'],
+        ['saw', 'flamer', 'gasoline', 'balls', 'medikit', 'vulcan'],
+        ['drill', 'flamer', 'gasoline', 'balls', 'battery', 'medikit', 'beam'],
+        ['drill', 'flamer', 'gasoline', 'balls', 'battery', 'medikit', 'beam', 'teleporter'],
+        ['toaster'],
+    ]
+    name = random.choice(levels[level])
+    return Item(ITEMS[name], pos)