home · contact · privacy
Transform items into food to replenish player energy.
[plomrogue2-experiments] / new / plomrogue / things.py
index 20ce4867c2211882b506de309d8881eb16842379..f4cc2aeeae689d788223d648407bb9c2215985d0 100644 (file)
@@ -29,7 +29,12 @@ class Thing(ThingBase):
 
 
 class ThingItem(Thing):
-    type_ = 'item'
+    pass
+
+
+
+class ThingFood(ThingItem):
+    type_ = 'food'
 
 
 
@@ -94,18 +99,27 @@ class ThingAnimate(Thing):
         self.task.check()  # will throw GameError if necessary
 
     def proceed(self, is_AI=True):
-        """Further the thing in its tasks.
-
-        Decrements .task.todo; if it thus falls to <= 0, enacts method
-        whose name is 'task_' + self.task.name and sets .task =
-        None. If is_AI, calls .decide_task to decide a self.task.
+        """Further the thing in its tasks, decrease its health.
 
-        Before doing anything, ensures an empty map visibility stencil
-        and checks that task is still possible, and aborts it
+        First, ensures an empty map, decrements .health and kills
+        thing if crossing zero (removes from self.world.things for AI
+        thing, or unsets self.world.player_is_alive for player thing);
+        then checks that self.task is still possible and aborts if
         otherwise (for AI things, decides a new task).
 
+        Then decrements .task.todo; if it thus falls to <= 0, enacts
+        method whose name is 'task_' + self.task.name and sets .task =
+        None. If is_AI, calls .decide_task to decide a self.task.
+
         """
         self._stencil = None
+        self.health -= 1
+        if self.health <= 0:
+            if self is self.world.player:
+                self.world.player_is_alive = False
+            else:
+                del self.world.things[self.world.things.index(self)]
+            return
         try:
             self.task.check()
         except GameError as e:
@@ -163,8 +177,10 @@ class ThingAnimate(Thing):
 
 class ThingHuman(ThingAnimate):
     type_ = 'human'
+    health = 100
 
 
 
 class ThingMonster(ThingAnimate):
     type_ = 'monster'
+    health = 50