home · contact · privacy
Server/py: Undummify actor_pick_up(), plus some stylistic fixes.
[plomrogue] / plomrogue-server.py
index 2121c75ad2cf15988c240544b10da159e37d0d0c..cb7f9b0cbb31b81d006330528971d99ec56a7151 100755 (executable)
@@ -449,27 +449,65 @@ 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(Thing):
+    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]:
+            print("You drop an object.")
+    elif t == world_db["Things"][0]:
+        print("You try to drop an object, but you own none.")
+
+
+def actor_use(Thing):
+    pass
+
+
 def turn_over():
     """Run game world and its inhabitants until new player input expected."""
     id = 0
-    print("turning over")
     whilebreaker = False
     while world_db["Things"][0]["T_LIFEPOINTS"]:
         for id in [id for id in world_db["Things"]
-                      if not world_db["Things"][id]["carried"]
-                      if world_db["Things"][id]["T_LIFEPOINTS"]]:
-            print(str(id))
+                   if world_db["Things"][id]["T_LIFEPOINTS"]]:
             Thing = world_db["Things"][id]
             if Thing["T_LIFEPOINTS"]:
-                print("  evaluating thing")
                 if not Thing["T_COMMAND"]:
-                    print("    thing needs new command")
                     update_map_memory(Thing)
                     if 0 == id:
                         whilebreaker = True
                         break
                     # DUMMY: ai(thing)
-                    print("    run AI")
                     Thing["T_COMMAND"] = 1
                 # DUMMY: try_healing
                 Thing["T_PROGRESS"] += 1
@@ -477,17 +515,14 @@ def turn_over():
                           if a == Thing["T_COMMAND"]][0]
                 ThingAction = world_db["ThingActions"][taid]
                 if Thing["T_PROGRESS"] == ThingAction["TA_EFFORT"]:
-                    print("  running thing action")
-                    # run_thing_action(action["TA_NAME"])
+                    eval("actor_" + ThingAction["TA_NAME"])(Thing)
                     Thing["T_COMMAND"] = 0
                     Thing["T_PROGRESS"] = 0
                 # DUMMY: hunger
             # DUMMY: thingproliferation
         if whilebreaker:
             break
-        print("  turn finished")
         world_db["TURN"] += 1
-        print("  new turn " + str(world_db["TURN"]))
 
 
 def new_Thing(type):
@@ -562,7 +597,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")