about summary refs log tree commit diff homepage
path: root/brutalmaze/characters.py
diff options
context:
space:
mode:
authorRaphael McSinyx <vn.mcsinyx@gmail.com>2017-11-14 08:51:18 +0700
committerRaphael McSinyx <vn.mcsinyx@gmail.com>2017-11-14 08:51:18 +0700
commit764fe3421f1113037ca439028ecbe5374610849c (patch)
tree388a5c49fe802b27d3bf0d3c85f24cd49cc3cb5e /brutalmaze/characters.py
parent1174c778361ec098782d001b68fc769d97ad6e13 (diff)
downloadbrutalmaze-764fe3421f1113037ca439028ecbe5374610849c.tar.gz
Make Scarlet Red vampiric 0.1.1
Diffstat (limited to 'brutalmaze/characters.py')
-rw-r--r--brutalmaze/characters.py30
1 files changed, 28 insertions, 2 deletions
diff --git a/brutalmaze/characters.py b/brutalmaze/characters.py
index 752ea21..ac681c5 100644
--- a/brutalmaze/characters.py
+++ b/brutalmaze/characters.py
@@ -176,7 +176,7 @@ class Enemy:
             atan2(self.maze.y - y, self.maze.x - x), self.color))
         return True
 
-    def move(self):
+    def move(self, speed=ENEMY_SPEED):
         """Return True if it has just moved, False otherwise."""
         if self.offsetx:
             self.offsetx -= sign(self.offsetx)
@@ -186,7 +186,7 @@ class Enemy:
             return True
         if self.next_strike > pygame.time.get_ticks(): return False
 
-        self.move_speed = self.maze.fps / ENEMY_SPEED
+        self.move_speed = self.maze.fps / speed
         directions = [(sign(MIDDLE - self.x), 0), (0, sign(MIDDLE - self.y))]
         shuffle(directions)
         directions.append(choice(CROSS))
@@ -199,6 +199,14 @@ class Enemy:
                 return True
         return False
 
+    def slash(self):
+        """Handle the enemy's close-range attack."""
+        if not self.spin_queue: return
+        x, y = self.pos()
+        d = self.maze.slashd - self.maze.length(x, y)
+        if d >= 0:
+            self.maze.hit(d / self.maze.hero.R / self.spin_speed, self.color)
+
     def draw(self):
         """Draw the enemy."""
         radious = self.maze.distance/SQRT2 - self.awake*2
@@ -295,6 +303,24 @@ class ScarletRed(Enemy):
     def __init__(self, maze, x, y):
         Enemy.__init__(self, maze, x, y, 'ScarletRed')
 
+    def fire(self):
+        """Scarlet Red doesn't shoot."""
+        return False
+
+    def move(self):
+        return Enemy.move(self, ENEMY_SPEED * SQRT2)
+
+    def slash(self):
+        """Handle the Scarlet Red's close-range attack."""
+        if not self.spin_queue: return
+        x, y = self.pos()
+        d = self.maze.slashd - self.maze.length(x, y)
+        wound = d / self.maze.hero.R / self.spin_speed
+        if wound >= 0:
+            self.maze.hit(wound, self.color)
+            self.wound -= wound
+            if self.wound < 0: self.wound = 0.0
+
 
 def new_enemy(maze, x, y):
     """Return an enemy of a random type in the grid (x, y)."""