+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 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")
+ if world_db["WORLD_ACTIVE"]:
+ y = integer_test(str_y, 0, 255)
+ x = integer_test(str_x, 0, 255)
+ length = world_db["MAP_LENGTH"]
+ if None != y and None != x and y < length and x < length:
+ pos = (y * world_db["MAP_LENGTH"]) + x
+ strong_write(io_db["file_out"], "THINGS_HERE START\n")
+ if "v" == chr(world_db["Things"][0]["fovmap"][pos]):
+ for id in world_db["Things"]:
+ write_thing_if_here()
+ else:
+ for id in world_db["Things"]["T_MEMTHING"]:
+ write_thing_if_here()
+ strong_write(io_db["file_out"], "THINGS_HERE END\n")
+ else:
+ print("Ignoring: Invalid map coordinates.")
+ else:
+ print("Ignoring: Command only works on existing worlds.")
+
+
+def play_commander(action, args=False):
+ """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.
+ """
+
+ def set_command():
+ 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):
+ val = integer_test(str_arg, 0, 255)
+ if None != val:
+ world_db["Things"][0]["T_ARGUMENT"] = val
+ set_command()
+ else:
+ print("Ignoring: Argument must be integer >= 0 <=255.")
+
+ def set_command_and_argument_movestring(str_arg):
+ dirs = {"east": "d", "south-east": "c", "south-west": "x",
+ "west": "s", "north-west": "w", "north-east": "e"}
+ if str_arg in dirs:
+ world_db["Things"][0]["T_ARGUMENT"] = dirs[str_arg]
+ set_command()
+ else:
+ print("Ignoring: Argument must be valid direction string.")
+
+ if action == "move":
+ return set_command_and_argument_movestring
+ elif args:
+ return set_command_and_argument_int
+ else:
+ return set_command