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().
+def set_command(action):
+ """Set player's T_COMMAND, then call turn_over()."""
+ 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()
- 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()
+def play_wait():
+ """Try "wait" as player's T_COMMAND."""
+ set_command("wait")
+
+
+def play_pickup():
+ """Try "pick_up" as player's T_COMMAND"."""
+ t = world_db["Things"][0]
+ ids = [id for id in world_db["Things"] if id
+ 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 not len(ids):
+ log("Nothing to pick up.")
+ else:
+ set_command("pick_up")
+
- def set_command_and_argument_int(str_arg):
+def play_drop(str_arg):
+ """Try "drop" as player's T_COMMAND, int(str_arg) as T_ARGUMENT / slot."""
+ t = world_db["Things"][0]
+ if 0 == len(t["T_CARRIES"]):
+ log("You have nothing to drop in your inventory.")
+ else:
val = integer_test(str_arg, 0, 255)
- if None != val:
+ if None != val and val < len(t["T_CARRIES"]):
world_db["Things"][0]["T_ARGUMENT"] = val
- set_command()
-
- def set_command_and_argument_movestring(str_arg):
- if str_arg in directions_db:
- world_db["Things"][0]["T_ARGUMENT"] = ord(directions_db[str_arg])
- set_command()
+ set_command("drop")
else:
- print("Ignoring: Argument must be valid direction string.")
+ print("Illegal inventory index.")
- if action == "move":
- return set_command_and_argument_movestring
- elif args:
- return set_command_and_argument_int
+
+def play_use(str_arg):
+ """Try "use" as player's T_COMMAND, int(str_arg) as T_ARGUMENT / slot."""
+ t = world_db["Things"][0]
+ if 0 == len(t["T_CARRIES"]):
+ log("You have nothing to use in your inventory.")
else:
- return set_command
+ val = integer_test(str_arg, 0, 255)
+ if None != val and val < len(t["T_CARRIES"]):
+ id = t["T_CARRIES"][val]
+ type = world_db["Things"][id]["T_TYPE"]
+ if not world_db["ThingTypes"][type]["TT_TOOL"] == "food":
+ log("You can't consume this thing.")
+ return
+ world_db["Things"][0]["T_ARGUMENT"] = val
+ set_command("use")
+ else:
+ print("Illegal inventory index.")
+
+
+def play_move(str_arg):
+ """Try "move" as player's T_COMMAND, str_arg as T_ARGUMENT / direction."""
+ t = world_db["Things"][0]
+ if not str_arg in directions_db:
+ print("Illegal move direction string.")
+ return
+ dir = ord(directions_db[str_arg])
+ move_result = mv_yx_in_dir_legal(chr(dir), t["T_POSY"], t["T_POSX"])
+ if 1 == move_result[0]:
+ pos = (move_result[1] * world_db["MAP_LENGTH"]) + move_result[2]
+ if ord(".") == world_db["MAP"][pos]:
+ world_db["Things"][0]["T_ARGUMENT"] = dir
+ set_command("move")
+ return
+ log("You can't move there.")
def command_seedrandomness(seed_string):
"T_MEMTHING": (3, False, command_tmemthing),
"T_POSY": (1, False, setter_tpos("Y")),
"T_POSX": (1, False, setter_tpos("X")),
- "wait": (0, False, play_commander("wait")),
- "move": (1, False, play_commander("move")),
- "pick_up": (0, False, play_commander("pick_up")),
- "drop": (1, False, play_commander("drop", True)),
- "use": (1, False, play_commander("use", True)),
+ "wait": (0, False, play_wait),
+ "move": (1, False, play_move),
+ "pick_up": (0, False, play_pickup),
+ "drop": (1, False, play_drop),
+ "use": (1, False, play_use),
"ai": (0, False, command_ai)
}
# TODO: Unhandled cases: (Un-)killing animates (esp. player!) with T_LIFEPOINTS.