changeset 92:0a4ad5e48fb5

add confusion
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sun, 05 Jan 2014 23:50:15 +0100
parents ac80417b0ead
children d9f826cdf023
files fujo/behaviors.py fujo/game.py fujo/items.py fujo/level.py fujo/mobs.py
diffstat 5 files changed, 52 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/fujo/behaviors.py	Sun Jan 05 23:33:30 2014 +0100
+++ b/fujo/behaviors.py	Sun Jan 05 23:50:15 2014 +0100
@@ -41,9 +41,43 @@
         if possible:
             random.shuffle(possible)
             d = possible[0]
-        self.mob.do_walk(level, d)
+            self.mob.do_walk(level, d)
+            return True
+
+
+@Behavior.register
+class Confused(Wander):
+    priority = 200
+
+    def __init__(self, confused=None):
+        super(Confused, self).__init__()
+        self.confused = confused
+
+    def act(self, level):
+        self.mob.label('???')
+        self.confused  -= 1
+        if self.confused <= 0:
+            self.mob.del_behavior(self)
+        return super(Confused, self).act(level)
+
+    def item_picked(self, level, thing):
         return True
 
+    def mob_attacked(self, level, mob, damage):
+        return True
+
+    def wound(self, damage):
+        self.mob.del_behavior(self)
+
+    def save(self):
+        data = super(Confused, self).save()
+        data['confused'] = self.confused
+        return data
+
+    def load(self, data):
+        super(Confused, self).load(data)
+        self.confused = data['confused']
+
 
 @Behavior.register
 class Hide(Behavior):
@@ -84,11 +118,9 @@
         return True
 
     def wound(self, damage):
-        self.mob.label('?!')
         self.mob.del_behavior(self)
 
     def item_thrown(self, level, item):
-        self.mob.label('?!')
         self.mob.del_behavior(self)
 
     def item_picked(self, level, thing):
@@ -155,6 +187,7 @@
         super(Excitable, self).load(data)
         self.raging = data['raging']
 
+
 @Behavior.register
 class Coward(Behavior):
     def mob_attacked(self, level, mob, damage):
@@ -202,8 +235,13 @@
 
 
 @Behavior.register
+class Hunting(Rage):
+    priority = 0
+
+
+@Behavior.register
 class Panic(Behavior):
-    priority = 101
+    priority = 102
 
     def __init__(self, afraid=None):
         super(Panic, self).__init__()
--- a/fujo/game.py	Sun Jan 05 23:33:30 2014 +0100
+++ b/fujo/game.py	Sun Jan 05 23:50:15 2014 +0100
@@ -14,7 +14,7 @@
     def __init__(self):
         self.display = display.Display()
         self.status_window = window.Message(
-            (-1, self.display.size[1] - 27, 272, 32), [])
+            (1, self.display.size[1] - 29, 272, 32), [])
         self.display.windows.add(self.status_window)
         self.player = None
 
--- a/fujo/items.py	Sun Jan 05 23:33:30 2014 +0100
+++ b/fujo/items.py	Sun Jan 05 23:50:15 2014 +0100
@@ -256,6 +256,7 @@
     def throw(self, level, pos, mob, steps, direction):
         super(TeleportSpell, self).throw(level, pos, mob, steps, direction)
         if mob:
+            mob.add_behavior(behaviors.Confused(10))
             for pos in level.empty:
                 if not level.is_blocked(pos):
                     break
@@ -278,9 +279,10 @@
     def throw(self, level, pos, mob, steps, direction):
         super(KnowledgeSpell, self).throw(level, pos, mob, steps, direction)
         if mob:
-            return
-        for row in level.explored:
-            row[:] = [1] * len(row)
+            mob.add_behavior(behaviors.Confused(10))
+        else:
+            for row in level.explored:
+                row[:] = [1] * len(row)
 
 @Item.register
 class SoothingSpell(Spell):
--- a/fujo/level.py	Sun Jan 05 23:33:30 2014 +0100
+++ b/fujo/level.py	Sun Jan 05 23:50:15 2014 +0100
@@ -131,7 +131,8 @@
         mob = self.mobs.get(pos)
         if mob == self:
             mob = None
-        mob.item_thrown(self, item)
+        if mob:
+            mob.item_thrown(self, item)
         item.throw(self, pos, mob, steps, direction)
 
     def populate(self):
--- a/fujo/mobs.py	Sun Jan 05 23:33:30 2014 +0100
+++ b/fujo/mobs.py	Sun Jan 05 23:50:15 2014 +0100
@@ -230,7 +230,7 @@
     def init_behaviors(self):
         self.add_behavior(behaviors.Coward())
         self.add_behavior(behaviors.Hostile())
-        self.add_behavior(behaviors.Rage())
+        self.add_behavior(behaviors.Hunting())
 
 
 @Mob.register
@@ -293,4 +293,4 @@
     def init_behaviors(self):
         self.add_behavior(behaviors.Sleep(random.randint(0, 5)))
         self.add_behavior(behaviors.Hostile())
-        self.add_behavior(behaviors.Rage())
+        self.add_behavior(behaviors.Hunting())