X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;f=new%2Fplomrogue%2Fgame.py;h=2e780928cd073d6e23d2248ff30307abfcc2b40e;hb=6c37a16df7e55754ca89a9de0aaf49c3c778155e;hp=e8e80c0f1e8785f00771a3700fce11e5fb0a194e;hpb=787d769e0c0f2d2fc50800b60b4bcfd506bedba2;p=plomrogue2-experiments
diff --git a/new/plomrogue/game.py b/new/plomrogue/game.py
index e8e80c0..2e78092 100755
--- a/new/plomrogue/game.py
+++ b/new/plomrogue/game.py
@@ -1,10 +1,12 @@
from plomrogue.tasks import Task_WAIT, Task_MOVE, Task_PICKUP, Task_DROP
-from plomrogue.errors import ArgError
-from plomrogue.commands import (cmd_GEN_WORLD, cmd_GET_GAMESTATE, cmd_MAP,
- cmd_MAP, cmd_THING_TYPE, cmd_THING_POS,
- cmd_THING_INVENTORY, cmd_GET_PICKABLE_ITEMS,
- cmd_TERRAIN_LINE, cmd_PLAYER_ID, cmd_TURN,
- cmd_SWITCH_PLAYER, cmd_SAVE)
+from plomrogue.errors import ArgError, GameError
+from plomrogue.commands import (cmd_GEN_WORLD, cmd_GET_GAMESTATE,
+ cmd_MAP, cmd_MAP, cmd_THING_TYPE,
+ cmd_THING_POS, cmd_THING_INVENTORY,
+ cmd_THING_HEALTH,
+ cmd_GET_PICKABLE_ITEMS,
+ cmd_TERRAIN_LINE, cmd_PLAYER_ID,
+ cmd_TURN, cmd_SWITCH_PLAYER, cmd_SAVE)
from plomrogue.mapping import MapHex
from plomrogue.parser import Parser
from plomrogue.io import GameIO
@@ -37,6 +39,7 @@ class World(WorldBase):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.player_id = 0
+ self.player_is_alive = True
@property
def player(self):
@@ -60,7 +63,9 @@ class World(WorldBase):
(after incrementing the world turn) all that come before the
player; then the player's .proceed() is run, and if it does
not finish his task, the loop starts at the beginning. Once
- the player's task is finished, the loop breaks.
+ the player's task is finished, or the player is dead, the loop
+ breaks.
+
"""
while True:
player_i = self.things.index(self.player)
@@ -70,7 +75,7 @@ class World(WorldBase):
for thing in self.things[:player_i]:
thing.proceed()
self.player.proceed(is_AI=False)
- if self.player.task is None:
+ if self.player.task is None or not self.player_is_alive:
break
def make_new(self, yx, seed):
@@ -117,6 +122,7 @@ class Game:
'MAP': cmd_MAP,
'THING_TYPE': cmd_THING_TYPE,
'THING_POS': cmd_THING_POS,
+ 'THING_HEALTH': cmd_THING_HEALTH,
'THING_INVENTORY': cmd_THING_INVENTORY,
'TERRAIN_LINE': cmd_TERRAIN_LINE,
'GET_PICKABLE_ITEMS': cmd_GET_PICKABLE_ITEMS,
@@ -151,6 +157,9 @@ class Game:
self.io.send('THING_TYPE %s %s' % (thing.id_, thing.type_))
self.io.send('THING_POS %s %s' % (thing.id_,
stringify_yx(thing.position)))
+ if hasattr(thing, 'health'):
+ self.io.send('THING_HEALTH %s %s' % (thing.id_,
+ thing.health))
if len(self.world.player.inventory) > 0:
self.io.send('PLAYER_INVENTORY %s' %
','.join([str(i) for i in self.world.player.inventory]))
@@ -184,6 +193,8 @@ class Game:
return p
def cmd_TASK_colon(task_name, game, *args):
+ if not game.world.player_is_alive:
+ raise GameError('You are dead.')
game.world.player.set_task(task_name, args)
game.proceed()