changeset 48:f0697a2de62a

Blood splashes
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sun, 11 Mar 2012 00:27:27 +0100
parents abb35c96b871
children acbd199a7923
files mhrok/display.py mhrok/level.py mhrok/mhrok.png mhrok/sprites.py
diffstat 4 files changed, 25 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/mhrok/display.py	Sat Mar 10 18:10:11 2012 +0100
+++ b/mhrok/display.py	Sun Mar 11 00:27:27 2012 +0100
@@ -86,9 +86,13 @@
     def on_mob_dust(self, mob, amount=4, delay=0):
         for i in xrange(amount):
             x = mob.sprite.rect.centerx + random.randint(-8, 8)
-            y = mob.sprite.rect.centery + random.randint(-2, 2)
+            y = mob.sprite.rect.centery + random.randint(-3, 3)
             self.sprites.add(sprites.Dust(
-                self.tiles, (x, y), delay + random.randint(0, 4)))
+                self.tiles, (x, y), min(0, delay + random.randint(0, 4))))
+
+    def on_mob_blood(self, mob, delay=0):
+        self.sprites.add(sprites.Blood(
+            self.tiles, mob.sprite.rect.center, delay))
 
     def on_room_light(self, room):
         self.light_room(room)
--- a/mhrok/level.py	Sat Mar 10 18:10:11 2012 +0100
+++ b/mhrok/level.py	Sun Mar 11 00:27:27 2012 +0100
@@ -55,15 +55,17 @@
             raise self.BlockedWall()
         mob.pos = target
         self.events.append(('mob_walk', mob, direction))
+        self.events.append(('mob_dust', mob, 1, -4))
 
     def kill(self, mob):
         self.mobs.remove(mob)
+        self.events.append(('mob_blood', mob, 0))
         self.events.append(('mob_death', mob))
 
     def open(self, mob):
         self.mobs.remove(mob)
         self.events.append(('mob_open', mob))
-        self.events.append(('mob_dust', mob, 20, 4))
+        self.events.append(('mob_dust', mob, 10, 4))
 
     def stand(self, mob, direction, dust=False):
         if direction is None:
@@ -78,7 +80,7 @@
     def attack(self, mob, direction, other):
         other.hit(self, mob)
         self.events.append(('mob_attack', mob, direction, other))
-        self.events.append(('mob_dust', mob, 4))
+        self.events.append(('mob_dust', mob, 4, -2))
 
     def is_blocked(self, pos):
         for m in self.mobs:
Binary file mhrok/mhrok.png has changed
--- a/mhrok/sprites.py	Sat Mar 10 18:10:11 2012 +0100
+++ b/mhrok/sprites.py	Sun Mar 11 00:27:27 2012 +0100
@@ -36,14 +36,14 @@
             self.depth = self.rect.bottom
 
     def death_animation(self):
-        for step in range(3):
+        for step in range(5):
             yield None
         image = self.image.copy()
         for step in range(8):
             yield None
             image.set_alpha(192-step*32)
             self.image = image
-            self.rect.move_ip(0, -5)
+            self.rect.move_ip(0, -5 - step * 2)
         self.kill()
 
     def open_animation(self):
@@ -178,29 +178,35 @@
         self.rect.center = self.owner.rect.center
 
 class Dust(pygame.sprite.Sprite):
+    steps = [40, 41, 42, 43]
+    speed = 3
 
     def __init__(self, frames, (x, y), delay=0):
         super(Dust, self).__init__()
         self.animation = self.dust_animation(frames, delay)
-        self.image = frames[40].copy()
+        self.image = frames[self.steps[0]].copy()
         self.image.set_alpha(0)
         self.rect = self.image.get_rect()
         self.rect.center = (x, y)
-        self.depth = y
-        for step, frame in enumerate([40, 41, 42, 43]):
+        self.depth = self.rect.bottom + 2
+        for step, frame in enumerate(self.steps):
             frames[frame].set_alpha(192 - 32 * step)
 
     def dust_animation(self, frames, delay):
         for step in xrange(delay):
             yield None
-        for frame in [40, 41, 42, 43]:
+        for frame in self.steps:
             self.image = frames[frame]
-            yield None
-            yield None
-            yield None
+            for step in range(self.speed):
+                yield None
 
     def update(self):
         try:
             self.animation.next()
         except StopIteration:
             self.kill()
+
+class Blood(Dust):
+    steps = [45, 46, 47, 48]
+    speed = 1
+