# HG changeset patch # User Simon Cross # Date 1302370880 -7200 # Node ID f3ccb00df6a442629415c3fa3df9059d2dd4087e # Parent ae0c67788f96b6f5d22901d1b727de116149cb8f Add life stealing. diff -r ae0c67788f96 -r f3ccb00df6a4 skaapsteker/sprites/base.py --- a/skaapsteker/sprites/base.py Sat Apr 09 19:30:52 2011 +0200 +++ b/skaapsteker/sprites/base.py Sat Apr 09 19:41:20 2011 +0200 @@ -180,7 +180,7 @@ pos = pygame.Rect(self.rect.midleft, (0, 0)) else: pos = pygame.Rect(self.rect.midright, (0, 0)) - projectile = cls(pos, direction=self.facing, hits=Player) + projectile = cls(pos, direction=self.facing, hits=Player, source=self) AddSpriteEvent.post(projectile) def do_attack(self): @@ -293,9 +293,10 @@ PROJECTILE_SIZE = (0, 0) # pixels VELOCITY = (10, 10) # pixels/s - def setup(self, direction, hits, **opts): + def setup(self, direction, hits, source, **opts): super(Projectile, self).setup(**opts) self.facing = direction + self.source = source # source of the projectile (may be None) self._update_image(True) # ensure we get the direction right if isinstance(hits, tuple): @@ -322,6 +323,8 @@ return if hasattr(other, 'damage'): other.damage(self.DAMAGE) + if hasattr(self.source, 'steal_life'): + self.source.steal_life(self.DAMAGE) self.explode() diff -r ae0c67788f96 -r f3ccb00df6a4 skaapsteker/sprites/player.py --- a/skaapsteker/sprites/player.py Sat Apr 09 19:30:52 2011 +0200 +++ b/skaapsteker/sprites/player.py Sat Apr 09 19:41:20 2011 +0200 @@ -241,6 +241,11 @@ if self._me.cur_health <= 0: PlayerDied.post() + def steal_life(self, damage_done): + if 'steal' in self._me.tails: + self._me.cur_health += damage_done * len(self._me.tails) / 32 + self._me.cur_health = min(self._me.cur_health, self._me.max_health) + def restore(self): """Restore player to max health (for restarting levels, etc.)""" self._me.cur_health = self._me.max_health @@ -354,7 +359,7 @@ pos = pygame.Rect(self.rect.midleft, (0, 0)) else: pos = pygame.Rect(self.rect.midright, (0, 0)) - projectile = cls(pos, direction=self.facing, hits=Monster) + projectile = cls(pos, direction=self.facing, hits=Monster, source=self) AddSpriteEvent.post(projectile) def _fireball_attack(self):