X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=plugins%2Fserver%2FTheCrawlingEater.py;h=b456ee7af45a53f71e46f714cad04291da284c01;hb=7efda459942e6180a2767069b07f9af1fa8bb8ec;hp=9ac6c073bb6aa54de85561bf858f21c52345997d;hpb=aca74b23a81d4ecbd77e3e0da2de81574ab41358;p=plomrogue diff --git a/plugins/server/TheCrawlingEater.py b/plugins/server/TheCrawlingEater.py index 9ac6c07..b456ee7 100644 --- a/plugins/server/TheCrawlingEater.py +++ b/plugins/server/TheCrawlingEater.py @@ -7,9 +7,95 @@ from server.config.world_data import world_db def command_help(str_int): - val = integer_test(str_int, 0, 4) + val = integer_test(str_int, 0, 9) if None != val: - log(str_int) + if val == 0: + log(" ") + log("[HELP SCREEN 0: help screen list]") + log("0 - this screen") + log("1 - key bindings") + log("2 - environment 1/3") + log("3 - environment 2/3") + log("4 - environment 3/3") + log("5 - other beings") + log("6 - winning") + log("7 - restart and replay") + log("For more, see ./README or ./README_TCE files.") + pass + elif val == 1: + log(" ") + log("[HELP SCREEN 1: key bindings]") + log("movement/eating: w/e/d/c/x/s") + log("drink: i") + log("defecate: o") + log("pee: p") + log("autopilot: A") + log("look mode: l") + log("quit: Q") + log("help screens: 1/2/3/4/5/6/7/8/9") + log("help overview: 0") + elif val == 2: + log(" ") + log("[HELP SCREEN 2: environment 1/3]") + log("There is mostly solid matter and fluid. " + "'_', '.', ':' are ground, '%', '#', 'X' are walls. " + "Less thick ones can be eaten." + "Background color indicates fluid concentration. " + "'O'/'0' is holes; stepping into them is dangerous." + "'-' and '+' are cracks in the ground, and may becomes holes. " + "'$' is special places that will change you. " + "Learn more in HELP SCREEN 3." + ) + elif val == 3: + log(" ") + log("[HELP SCREEN 3: environment 2/3]") + log("Use the 'l' command to investigate the environment. " + "Its cursor will describe the area pointed at by two numbers: " + "ground elevation/matter thickness (left), wetness (right). " + "You cannot breathe there if the sum of both is > 5. " + "Greater ground elevation means slower movement." + ) + elif val == 4: + log(" ") + log("[HELP SCREEN 4: environment 3/3]") + log("Waste will pile up to ground matter an walls. " + "Fluid will trickle down into the environment. " + "General humidity will sparkle up new fluid on the ground " + "level ('_'). " + "Only from there can you drink fluid. " + "Much fluid on a ground level tile creates potential for " + "cracks to appear there. They may be sealed with waste." + ) + elif val == 5: + log(" ") + log("[HELP SCREEN 5: other beings]") + log(" '?' on the memory map indicate sounds of movement. " + "You may encounter the sources. They appear as the general " + "humidity of the environment grows, grown from its fluids and " + "earth. " + ) + elif val == 6: + log(" ") + log("[HELP SCREEN 6: winning]") + log("Find '$' tiles. Don't dump waste and fluids on fields with " + "great elevation and wetness sums. Control ground wetness " + "by providing great or small ground space for fluid sparkling " + "up to concentrate in. " + "A special kind of hole will only evolve from a 'O' hole that " + "is surrounded by six other holes." + ) + elif val == 7: + log(" ") + log("[HELP SCREEN 7: restart and replay]") + log("You can restart in a new game world by running " + "./roguelike -n. You can replay a record of your current game" + " by running ./roguelike -s." + "See file ./README for more details." + ) + else: + log(" ") + log("No HELP SCREEN defined for this number.") + log(" ") def command_ai(): @@ -50,7 +136,7 @@ def play_pee(): and world_db["Things"][0]["T_LIFEPOINTS"] > 0): return if world_db["Things"][0]["T_BLADDER"] < 1: - log("Nothing to drop from empty bladder.") + log("NOTHING to drop from empty bladder.") return world_db["set_command"]("pee") @@ -72,7 +158,7 @@ def play_drop(): and world_db["Things"][0]["T_LIFEPOINTS"] > 0): return if world_db["Things"][0]["T_BOWEL"] < 1: - log("Nothing to drop from empty bowel.") + log("NOTHING to drop from empty bowel.") return world_db["set_command"]("drop") @@ -113,7 +199,7 @@ def play_move(str_arg): if len(hitted) > 0: if t["T_STOMACH"] >= 32 and t["T_KIDNEY"] >= 32: if t == world_db["Things"][0]: - log("You're too FULL to suck from another creature.") + log("You're too FULL to suck resources from another creature.") return world_db["Things"][0]["T_ARGUMENT"] = d world_db["set_command"]("eat") @@ -136,6 +222,32 @@ def play_move(str_arg): log("You CAN'T eat your way through there.") +def suck_out_creature(t, tid): + if t == None: + t = world_db["Things"][tid] + elif tid == None: + tid = next(tid for tid in world_db["Things"] + if world_db["Things"][tid] == t) + room_stomach = 32 - world_db["Things"][0]["T_STOMACH"] + room_kidney = 32 - world_db["Things"][0]["T_KIDNEY"] + if t["T_STOMACH"] > room_stomach: + t["T_STOMACH"] -= room_stomach + world_db["Things"][0]["T_STOMACH"] = 32 + else: + world_db["Things"][0]["T_STOMACH"] + t["T_STOMACH"] + t["T_STOMACH"] = 0 + if t["T_KIDNEY"] > room_stomach: + t["T_KIDNEY"] -= room_stomach + world_db["Things"][0]["T_KIDNEY"] = 32 + else: + world_db["Things"][0]["T_KIDNEY"] + t["T_KIDNEY"] + t["T_KIDNEY"] = 0 + hitted_name = world_db["ThingTypes"][t["T_TYPE"]]["TT_NAME"] + log("You SUCK EVERYTHING from " + hitted_name + ", killing them.") + world_db["die"](t, "FOO") +world_db["suck_out_creature"] = suck_out_creature + + def actor_eat(t): from server.utils import mv_yx_in_dir_legal, rand from server.config.world_data import symbols_passable @@ -151,11 +263,17 @@ def actor_eat(t): hit_id = hitted[0] hitted_tid = world_db["Things"][hit_id]["T_TYPE"] if t == world_db["Things"][0]: + if world_db["GRACE"] >= 16: + world_db["suck_out_creature"](None, hit_id) + return hitted_name = world_db["ThingTypes"][hitted_tid]["TT_NAME"] - log("You SUCK from " + hitted_name + ".") + log("You SUCK resources from " + hitted_name + ".") elif 0 == hit_id: + if world_db["GRACE"] >= 16: + world_db["suck_out_creature"](t, None) + return hitter_name = world_db["ThingTypes"][t["T_TYPE"]]["TT_NAME"] - log(hitter_name +" SUCKS from you.") + log(hitter_name +" SUCKS resources from you.") hitted = world_db["Things"][hit_id] if t["T_STOMACH"] < 32: t["T_STOMACH"] = t["T_STOMACH"] + 1 @@ -202,9 +320,15 @@ def actor_move(t): hit_id = hitted[0] hitted_tid = world_db["Things"][hit_id]["T_TYPE"] if t == world_db["Things"][0]: + if world_db["GRACE"] >= 16: + world_db["suck_out_creature"](None, hit_id) + return hitted_name = world_db["ThingTypes"][hitted_tid]["TT_NAME"] log("You BUMP into " + hitted_name + ".") elif 0 == hit_id: + if world_db["GRACE"] >= 16: + world_db["suck_out_creature"](t, None) + return hitter_name = world_db["ThingTypes"][t["T_TYPE"]]["TT_NAME"] log(hitter_name +" BUMPS into you.") return @@ -216,24 +340,35 @@ def actor_move(t): world_db["soundmap"][t["pos"]] = ord("9") if t == world_db["Things"][0] and world_db["MAP"][t["pos"]] == ord("$"): world_db["MAP"][t["pos"]] = ord("0") - if world_db["GRACE"] < 8: + log("You feel a strange AURA from this place.") + if world_db["GRACE"] == 0: log("You can now eat ALL walls.") - if world_db["GRACE"] < 24: - log("You will now LEVITATE over holes.") - world_db["GRACE"] += 8 + elif world_db["GRACE"] == 8: + log("You now have a DEATH touch towards other creatures.") + elif world_db["GRACE"] == 16: + log("You can now LEVITATE over holes.") + elif world_db["GRACE"] == 24: + log("You are now READY to leave through a special hole.") + elif world_db["GRACE"] == 32: + log("You already have all the GRACE you can get.") + if world_db["GRACE"] <= 24: + world_db["GRACE"] += 8 elif t == world_db["Things"][0]: log("You try to MOVE there, but fail.") def test_hole(t): if t == world_db["Things"][0]: - if world_db["GRACE"] >= 32 and world_db["MAP"][t["pos"]] == ord("&"): - world_db["die"](t, "YOU WIN, CONGRATULATIONS.") + if world_db["GRACE"] < 32 and world_db["MAP"][t["pos"]] == ord("&"): + log("You feel you need more GRACE to leave through this hole.") + elif world_db["GRACE"] >= 32 and world_db["MAP"][t["pos"]] == ord("&"): + world_db["die"](t, "You FLY through the hole, into your waking life." + "Good bye, and CONGRATULATIONS.") return False if world_db["GRACE"] >= 24: return True if chr(world_db["MAP"][t["pos"]]) in "*&": - world_db["die"](t, "You FALL in a hole, and die.") + world_db["die"](t, "You FALL into a hole, and die.") return False return True world_db["test_hole"] = test_hole @@ -241,7 +376,7 @@ world_db["test_hole"] = test_hole def test_air(t): if world_db["terrain_fullness"](t["pos"]) > 5: - world_db["die"](t, "You SUFFOCATE") + world_db["die"](t, "You SUFFOCATE.") return False return True world_db["test_air"] = test_air @@ -295,7 +430,7 @@ def make_map(): ord("0") == world_db["wetmap"][pos]: world_db["wetmap"][pos] = ord("3") i_water += 1 - n_altars = 4 + n_altars = 8 i_altars = 0 while (i_altars < n_altars): y, x, pos = new_pos() @@ -349,6 +484,8 @@ def turn_over(): if t["T_PROGRESS"] >= effort: action = action_db["actor_" + ThingAction["TA_NAME"]] action(t) + if t["T_LIFEPOINTS"] <= 0: + continue t["T_COMMAND"] = 0 t["T_PROGRESS"] = 0 if t["T_BOWEL"] > 16: @@ -377,17 +514,17 @@ def turn_over(): elif world_db["MAP"][pos] == ord("$"): height = -3 if height == -2 and wetness > 1 \ - and 0 == rand.next() % ((2 ** 11) / (2 ** wetness)): + and 0 == rand.next() % ((2 ** 10) / (2 ** wetness)): world_db["MAP"][pos] = ord("*") world_db["HUMIDITY"] += wetness if height == -1 and wetness > 1 \ - and 0 == rand.next() % ((2 ** 10) / (2 ** wetness)): + and 0 == rand.next() % ((2 ** 9) / (2 ** wetness)): world_db["MAP"][pos] = ord("+") if height == 0 and wetness > 1 \ - and 0 == rand.next() % ((2 ** 9) / (2 ** wetness)): + and 0 == rand.next() % ((2 ** 8) / (2 ** wetness)): world_db["MAP"][pos] = ord("-") if ((wetness > 0 and height > 0) or wetness > 1) \ - and 0 == rand.next() % 5: + and 0 == rand.next() % 16: world_db["wetmap"][pos] -= 1 world_db["HUMIDITY"] += 1 if world_db["HUMIDITY"] > 0: @@ -439,7 +576,7 @@ def turn_over(): dirs = "edcxsw" for i in range(len(dirs)): score += libpr.get_neighbor_score(i) - if score == 5 or score == 6: + if score == 6: world_db["MAP"][pos] = ord("&") libpr.free_score_map() world_db["TURN"] += 1 @@ -775,7 +912,7 @@ def ai(t): world_db["terrain_fullness"](t["pos"]) <= 3: t["T_COMMAND"] = thing_action_id("drop") return - elif world_db["get_dir_to_target"](t, "crack"): + elif world_db["get_dir_to_target"](t, "crack")[0]: return if need[0] in {"fluid_certain", "fluid_potential"}: if standing_on_fluid(t):