home · contact · privacy
Server/py: Undummify actor_pick_up, correct some bugs encountered onway.
[plomrogue] / plomrogue-server.py
index 010db5fae3d38ca16c83f9be91c5de7288046471..a66e2ae8e92f6376e97bde3d94181b6006ee9c3c 100755 (executable)
@@ -449,6 +449,72 @@ def build_fov_map(t):
     # DUMMY so far. Just builds an all-visible map.
 
 
+def actor_wait(Thing):
+    """Do nothing (but loudly, if by player)."""
+    if Thing == world_db["Things"][0]:
+        strong_write(io_db["file_out"], "LOG You wait.\n")
+
+
+def actor_move(Thing):
+    pass
+
+
+def actor_pick_up(Thing):
+    """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] != Thing
+           if not world_db["Things"][id]["carried"]
+           if world_db["Things"][id]["T_POSY"] == Thing["T_POSY"]
+           if world_db["Things"][id]["T_POSX"] == Thing["T_POSX"]]
+    if ids:
+        world_db["Things"][ids[0]]["carried"] = True
+        Thing["T_CARRIES"].append(ids[0])
+        strong_write(io_db["file_out"], "LOG You pick up an object.\n")
+    else:
+        err = "You try to pick up an object, but there is none."
+        strong_write(io_db["file_out"], "LOG " + err + "\n")
+
+
+def actor_drop(Thing):
+    pass
+
+
+def actor_use(Thing):
+    pass
+
+
+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 +587,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 +613,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 +622,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):