X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;f=plomrogue-server.py;h=fc0a82a853066c5006e4e304a2ec3dcc2064c125;hb=7ea9de2749221e7c5fd5182bd32a386522c9fd65;hp=010db5fae3d38ca16c83f9be91c5de7288046471;hpb=78dce4062e2cc7ca4fb205917ab2b8b087e562f2;p=plomrogue
diff --git a/plomrogue-server.py b/plomrogue-server.py
index 010db5f..fc0a82a 100755
--- a/plomrogue-server.py
+++ b/plomrogue-server.py
@@ -449,6 +449,99 @@ def build_fov_map(t):
# DUMMY so far. Just builds an all-visible map.
+def actor_wait(t):
+ """Make t do nothing (but loudly, if player avatar)."""
+ if t == world_db["Things"][0]:
+ strong_write(io_db["file_out"], "LOG You wait.\n")
+
+
+def actor_move(t):
+ pass
+
+
+def actor_pick_up(t):
+ """Make t pick up (topmost?) Thing from ground into inventory."""
+ # Topmostness is actually not defined so far.
+ ids = [id for id in world_db["Things"] if world_db["Things"][id] != t
+ if not world_db["Things"][id]["carried"]
+ if world_db["Things"][id]["T_POSY"] == t["T_POSY"]
+ if world_db["Things"][id]["T_POSX"] == t["T_POSX"]]
+ if len(ids):
+ world_db["Things"][ids[0]]["carried"] = True
+ t["T_CARRIES"].append(ids[0])
+ if t == world_db["Things"][0]:
+ strong_write(io_db["file_out"], "LOG You pick up an object.\n")
+ elif t == world_db["Things"][0]:
+ err = "You try to pick up an object, but there is none."
+ strong_write(io_db["file_out"], "LOG " + err + "\n")
+
+
+def actor_drop(t):
+ """Make t rop Thing from inventory to ground indexed by T_ARGUMENT."""
+ # TODO: Handle case where T_ARGUMENT matches nothing.
+ if len(t["T_CARRIES"]):
+ id = t["T_CARRIES"][t["T_ARGUMENT"]]
+ t["T_CARRIES"].remove(id)
+ world_db["Things"][id]["carried"] = False
+ if t == world_db["Things"][0]:
+ strong_write(io_db["file_out"], "LOG You drop an object.\n")
+ elif t == world_db["Things"][0]:
+ err = "You try to drop an object, but you own none."
+ strong_write(io_db["file_out"], "LOG " + err + "\n")
+
+
+def actor_use(t):
+ """Make t use (for now: consume) T_ARGUMENT-indexed Thing in inventory."""
+ # Original wrongly featured lifepoints increase through consumable!
+ # TODO: Handle case where T_ARGUMENT matches nothing.
+ if len(t["T_CARRIES"]):
+ id = t["T_CARRIES"][t["T_ARGUMENT"]]
+ type = world_db["Things"][id]["T_TYPE"]
+ if world_db["ThingTypes"][type]["TT_CONSUMABLE"]:
+ t["T_CARRIES"].remove(id)
+ del world_db["Things"][id]
+ t["T_SATIATION"] += world_db["ThingTypes"][type]["TT_CONSUMABLE"]
+ strong_write(io_db["file_out"], "LOG You consume this object.\n")
+ else:
+ strong_write(io_db["file_out"], "LOG You try to use this " + \
+ "object, but fail.\n")
+ else:
+ strong_write(io_db["file_out"], "LOG You try to use an object, " + \
+ "but you own none.\n")
+
+
+def turn_over():
+ """Run game world and its inhabitants until new player input expected."""
+ id = 0
+ whilebreaker = False
+ while world_db["Things"][0]["T_LIFEPOINTS"]:
+ for id in [id for id in world_db["Things"]
+ if world_db["Things"][id]["T_LIFEPOINTS"]]:
+ Thing = world_db["Things"][id]
+ if Thing["T_LIFEPOINTS"]:
+ if not Thing["T_COMMAND"]:
+ update_map_memory(Thing)
+ if 0 == id:
+ whilebreaker = True
+ break
+ # DUMMY: ai(thing)
+ Thing["T_COMMAND"] = 1
+ # DUMMY: try_healing
+ Thing["T_PROGRESS"] += 1
+ taid = [a for a in world_db["ThingActions"]
+ if a == Thing["T_COMMAND"]][0]
+ ThingAction = world_db["ThingActions"][taid]
+ if Thing["T_PROGRESS"] == ThingAction["TA_EFFORT"]:
+ eval("actor_" + ThingAction["TA_NAME"])(Thing)
+ Thing["T_COMMAND"] = 0
+ Thing["T_PROGRESS"] = 0
+ # DUMMY: hunger
+ # DUMMY: thingproliferation
+ if whilebreaker:
+ break
+ world_db["TURN"] += 1
+
+
def new_Thing(type):
"""Return Thing of type T_TYPE, with fovmap if alive and world active."""
thing = {
@@ -521,7 +614,8 @@ def command_thingshere(str_y, str_x):
"""Write to out file list of Things known to player at coordinate y, x."""
def write_thing_if_here():
if y == world_db["Things"][id]["T_POSY"] \
- and x == world_db["Things"][id]["T_POSX"]:
+ and x == world_db["Things"][id]["T_POSX"] \
+ and not world_db["Things"][id]["carried"]:
type = world_db["Things"][id]["T_TYPE"]
name = world_db["ThingTypes"][type]["TT_NAME"]
strong_write(io_db["file_out"], name + "\n")
@@ -546,7 +640,7 @@ def command_thingshere(str_y, str_x):
def play_commander(action, args=False):
- """Setter for player's T_COMMAND (to "action") and T_ARGUMENT.
+ """Setter for player's T_COMMAND and T_ARGUMENT, then calling turn_over().
T_ARGUMENT is set to direction char if action=="wait",or 8-bit int if args.
"""
@@ -555,6 +649,7 @@ def play_commander(action, args=False):
id = [x for x in world_db["ThingActions"]
if world_db["ThingActions"][x]["TA_NAME"] == action][0]
world_db["Things"][0]["T_COMMAND"] = id
+ turn_over()
# TODO: call turn_over()
def set_command_and_argument_int(str_arg):