+def actor_move_attempts_hook(t, move_result, pos):
+ if (ord("X") == world_db["MAP"][pos] or ord("|") == world_db["MAP"][pos]):
+ for tid in t["T_CARRIES"]:
+ ty = world_db["Things"][tid]["T_TYPE"]
+ if world_db["ThingTypes"][ty]["TT_TOOL"] == "axe":
+ axe_name = world_db["ThingTypes"][ty]["TT_NAME"]
+ if t == world_db["Things"][0]:
+ log("With your " + axe_name + ", you chop!")
+ if ord("X") == world_db["MAP"][pos]:
+ world_db["GOD_FAVOR"] -= 1
+ chop_power = world_db["ThingTypes"][ty]["TT_TOOLPOWER"]
+ case_X = world_db["MAP"][pos] == ord("X")
+ if (chop_power > 0 and
+ ((case_X and 0 == int(rand.next() / chop_power))
+ or (not case_X and
+ 0 == int(rand.next() / (3 * chop_power))))):
+ if t == world_db["Things"][0]:
+ log("You chop it DOWN.")
+ if ord("X") == world_db["MAP"][pos]:
+ world_db["GOD_FAVOR"] -= 10
+ world_db["MAP"][pos] = ord(".")
+ i = 3 if case_X else 1
+ from server.new_thing import new_Thing
+ for i in range(i):
+ tid = id_setter(-1, "Things")
+ world_db["Things"][tid] = new_Thing(world_db["LUMBER"],
+ (move_result[1], move_result[2]))
+ build_fov_map(t)
+ return True
+ return False
+
+def decrement_lifepoints(t):
+ from server.decrement_lifepoints import decrement_lifepoints
+ live_tid = t["T_TYPE"]
+ test = decrement_lifepoints(t)
+ if test > 0 and t != world_db["Things"][0]:
+ n_species = len([tid for tid in world_db["Things"]
+ if world_db["Things"][tid]["T_TYPE"] == live_tid])
+ if 0 == n_species:
+ from server.new_thing import new_Thing
+ if world_db["FAVOR_STAGE"] >= 3 and \
+ live_tid == world_db["ANIMAL_0"]:
+ world_db["GOD_FAVOR"] += 3000
+ log("CONGRATULATIONS! The "
+ + world_db["ThingTypes"][live_tid]["TT_NAME"]
+ + " species has died out. The Island God is pleased.")
+ else:
+ tid = id_setter(-1, "Things")
+ world_db["Things"][tid] = new_Thing(live_tid,
+ world_db["altar"])
+ log("The " + world_db["ThingTypes"][live_tid]["TT_NAME"] + " s"
+ "pecies has temporarily died out. One new-born is spawned "
+ "at the altar.")
+ return test
+
+def command_worldactive_test_hook():
+ pos = world_db["MAP"].find(b'_')
+ if pos > 0:
+ y = int(pos / world_db["MAP_LENGTH"])
+ x = pos % world_db["MAP_LENGTH"]
+ world_db["altar"] = (y, x)
+ else:
+ print("Ignored: No altar defined for world to activate.")
+ return False
+ for name in world_db["specials"]:
+ if world_db[name] not in world_db["ThingTypes"]:
+ print("Ignored: Not all specials set for world to activate.")
+ return False
+ return True
+
+def play_move_attempt_hook(t, direction, pos):
+ if (ord("X") == world_db["MAP"][pos] or ord("|") == world_db["MAP"][pos]):
+ carries_axe = False
+ for tid in t["T_CARRIES"]:
+ ty = world_db["Things"][tid]["T_TYPE"]
+ if world_db["ThingTypes"][ty]["TT_TOOL"] == "axe":
+ world_db["Things"][0]["T_ARGUMENT"] = direction
+ set_command("move")
+ return True
+ return False
+
+def play_use(str_arg):
+ if action_exists("use"):
+ t = world_db["Things"][0]
+ if 0 == len(t["T_CARRIES"]):
+ log("You have NOTHING to use in your inventory.")
+ else:
+ 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 (world_db["ThingTypes"][type]["TT_TOOL"] == "axe"
+ and t == world_db["Things"][0]):
+ log("To use this item for chopping, move towards a tree "
+ "while carrying it in your inventory.")
+ return
+ elif (world_db["ThingTypes"][type]["TT_TOOL"] == "carpentry"):
+ pos = t["T_POSY"] * world_db["MAP_LENGTH"] + t["T_POSX"]
+ if (world_db["MAP"][pos] == ord("X")
+ or world_db["MAP"][pos] == ord("|")):
+ log("CAN'T build when standing on barrier.")
+ return
+ for id in [id for id in world_db["Things"]
+ if not 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"]]:
+ log("CAN'T build when standing objects.")
+ return
+ wood_id = None
+ for id in t["T_CARRIES"]:
+ type_material = world_db["Things"][id]["T_TYPE"]
+ if (world_db["ThingTypes"][type_material]["TT_TOOL"]
+ == "wood"):
+ wood_id = id
+ break
+ if wood_id == None:
+ log("You CAN'T use a "
+ + world_db["ThingTypes"][type]["TT_NAME"]
+ + " without some wood in your inventory.")
+ return
+ elif world_db["ThingTypes"][type]["TT_TOOL"] == "fertilizer":
+ pos = t["T_POSY"] * world_db["MAP_LENGTH"] + t["T_POSX"]
+ if not world_db["MAP"][pos] == ord("."):
+ log("Can only make soil out of NON-SOIL earth.")
+ return
+ elif world_db["ThingTypes"][type]["TT_TOOL"] == "wood":
+ log("To use wood, you NEED a carpentry tool.")
+ return
+ elif type != world_db["SLIPPERS"] and 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")