X-Git-Url: https://plomlompom.com/repos/feed.xml?a=blobdiff_plain;f=plugins%2Fserver%2FTheCrawlingEater.py;h=b7bbee56d07f3632822dc66e734279454ce67ffe;hb=8f40b524368a30a59dc31bd791870a8d70a697bc;hp=2a7dbefb82839901d4206f43203bbc420a870266;hpb=f756812362c751ccaca1e001ab76e414e4157df3;p=plomrogue diff --git a/plugins/server/TheCrawlingEater.py b/plugins/server/TheCrawlingEater.py index 2a7dbef..b7bbee5 100644 --- a/plugins/server/TheCrawlingEater.py +++ b/plugins/server/TheCrawlingEater.py @@ -63,7 +63,8 @@ def actor_pee(t): if not world_db["test_air"](t): return t["T_BLADDER"] -= 1 - world_db["wetmap"][t["pos"]] += 1 + if chr(world_db["MAP"][t["pos"]]) not in "*&": + world_db["wetmap"][t["pos"]] += 1 def play_drop(): @@ -87,7 +88,7 @@ def actor_drop(t): world_db["MAP"][t["pos"]] = ord("-") elif world_db["MAP"][t["pos"]] == ord("-"): world_db["MAP"][t["pos"]] = ord("0") - else: + elif chr(world_db["MAP"][t["pos"]]) not in "*&": world_db["MAP"][t["pos"]] += 1 t["T_BOWEL"] -= 1 @@ -135,6 +136,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 @@ -150,9 +177,15 @@ 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 + ".") 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.") hitted = world_db["Things"][hit_id] @@ -201,9 +234,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 @@ -215,17 +254,27 @@ 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: + if world_db["GRACE"] == 0: log("You can now eat ALL walls.") - world_db["GRACE"] += 8 + if world_db["GRACE"] == 8: + log("You now have the DEATH touch.") + if world_db["GRACE"] == 16: + log("You will now LEVITATE over holes.") + if world_db["GRACE"] == 24: + log("You are now READY to fly through the exit portal.") + 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 world_db["MAP"][t["pos"]] == ord("&"): - world_db["die"](t, "YOU WIN, CONGRATULATIONS.") - return False + 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.") + 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.") return False @@ -305,8 +354,9 @@ def calc_effort(ta, t): t["T_POSY"], t["T_POSX"]) if 1 == move_result[0]: pos = (move_result[1] * world_db["MAP_LENGTH"]) + move_result[2] - narrowness = world_db["MAP"][pos] - ord("0") - return 2 ** narrowness + if chr(world_db["MAP"][pos]) in "012": + narrowness = world_db["MAP"][pos] - ord("0") + return 2 ** narrowness return 1 world_db["calc_effort"] = calc_effort @@ -342,6 +392,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: @@ -432,7 +484,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 @@ -768,7 +820,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):