X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=roguelike-server;h=483dc22f75171bb588c2d4c471a44637da88938e;hb=858dd9d0785c3d528e3ce8d7111819ef7e572217;hp=86ea463d9b541a79102946686a2e88f0e5b79635;hpb=8bd32d97ac39d159e11ab7bfc7bd1d6b70a66532;p=plomrogue diff --git a/roguelike-server b/roguelike-server index 86ea463..483dc22 100755 --- a/roguelike-server +++ b/roguelike-server @@ -222,7 +222,7 @@ def save_world(): for id in sorted(world_db["Things"].keys()): if [] != world_db["Things"][id]["T_CARRIES"]: string = string + "T_ID " + str(id) + "\n" - for carried in sorted(world_db["Things"][id]["T_CARRIES"].keys()): + for carried in sorted(world_db["Things"][id]["T_CARRIES"]): string = string + "T_CARRIES " + str(carried) + "\n" string = string + "SEED_RANDOMNESS " + str(rand.seed) + "\n" + \ "WORLD_ACTIVE " + str(world_db["WORLD_ACTIVE"]) @@ -472,7 +472,10 @@ def remake_map(): def update_map_memory(t, age_map=True): """Update t's T_MEMMAP with what's in its FOV now,age its T_MEMMEPTHMAP.""" def age_some_memdepthmap_on_nonfov_cells(): - # OUTSOURCED TO libplomrogue.so: + # OUTSOURCED FOR PERFORMANCE REASONS TO libplomrogue.so: + # ord_v = ord("v") + # ord_0 = ord("0") + # ord_9 = ord("9") # for pos in [pos for pos in range(world_db["MAP_LENGTH"] ** 2) # if not ord_v == t["fovmap"][pos] # if ord_0 <= t["T_MEMDEPTHMAP"][pos] @@ -498,8 +501,8 @@ def update_map_memory(t, age_map=True): if age_map: age_some_memdepthmap_on_nonfov_cells() for mt in [mt for mt in t["T_MEMTHING"] - if "v" == chr(t["fovmap"][(mt[1] * world_db["MAP_LENGTH"]) - + mt[2]])]: + if ord_v == t["fovmap"][(mt[1] * world_db["MAP_LENGTH"]) + + mt[2]]]: t["T_MEMTHING"].remove(mt) for id in [id for id in world_db["Things"] if not world_db["Things"][id]["carried"]]: @@ -507,7 +510,7 @@ def update_map_memory(t, age_map=True): if not world_db["ThingTypes"][type]["TT_LIFEPOINTS"]: y = world_db["Things"][id]["T_POSY"] x = world_db["Things"][id]["T_POSX"] - if "v" == chr(t["fovmap"][(y * world_db["MAP_LENGTH"]) + x]): + if ord_v == t["fovmap"][(y * world_db["MAP_LENGTH"]) + x]: t["T_MEMTHING"].append((type, y, x)) @@ -575,9 +578,15 @@ def decrement_lifepoints(t): If t is the player avatar, only blank its fovmap, so that the client may still display memory data. On non-player things, erase fovmap and memory. + Dying actors drop all their things. """ t["T_LIFEPOINTS"] -= 1 if 0 == t["T_LIFEPOINTS"]: + for id in t["T_CARRIES"]: + t["T_CARRIES"].remove(id) + world_db["Things"][id]["T_POSY"] = t["T_POSY"] + world_db["Things"][id]["T_POSX"] = t["T_POSX"] + world_db["Things"][id]["carried"] = False t["T_TYPE"] = world_db["ThingTypes"][t["T_TYPE"]]["TT_CORPSE_ID"] if world_db["Things"][0] == t: t["fovmap"] = bytearray(b' ' * (world_db["MAP_LENGTH"] ** 2)) @@ -587,7 +596,6 @@ def decrement_lifepoints(t): t["T_MEMMAP"] = False t["T_MEMDEPTHMAP"] = False t["T_MEMTHING"] = [] - strong_write(io_db["file_out"], "LOG It dies.\n") def mv_yx_in_dir_legal(dir, y, x): @@ -620,14 +628,15 @@ def actor_move(t): if world_db["Things"][id]["T_POSX"] == move_result[2]] if len(hitted): hit_id = hitted[0] - hitter_name = world_db["ThingTypes"][t["T_TYPE"]]["TT_NAME"] - hitter = "You" if t == world_db["Things"][0] else hitter_name - hitted_type = world_db["Things"][hit_id]["T_TYPE"] - hitted_name = world_db["ThingTypes"][hitted_type]["TT_NAME"] - hitted = "you" if hit_id == 0 else hitted_name - verb = " wound " if hitter == "You" else " wounds " - strong_write(io_db["file_out"], "LOG " + hitter + verb + hitted + - ".\n") + if t == world_db["Things"][0]: + hitted_type = world_db["Things"][hit_id]["T_TYPE"] + hitted_name = world_db["ThingTypes"][hitted_type]["TT_NAME"] + strong_write(io_db["file_out"], "LOG You wound " + + hitted_name + ".\n") + elif 0 == hit_id: + hitter_name = world_db["ThingTypes"][t["T_TYPE"]]["TT_NAME"] + strong_write(io_db["file_out"], "LOG " + hitter_name + + " wounds you.\n") decrement_lifepoints(world_db["Things"][hit_id]) return dir = [dir for dir in directions_db @@ -750,9 +759,6 @@ def try_healing(t): t["T_SATIATION"] -= 32 if t == world_db["Things"][0]: strong_write(io_db["file_out"], "LOG You heal.\n") - else: - name = world_db["ThingTypes"][t["T_TYPE"]]["TT_NAME"] - strong_write(io_db["file_out"], "LOG " + name + "heals.\n") def hunger(t): @@ -766,10 +772,6 @@ def hunger(t): if int(int(testbase / stomach) / ((rand.next() % stomach) + 1)): if t == world_db["Things"][0]: strong_write(io_db["file_out"], "LOG You suffer from hunger.\n") - else: - name = world_db["ThingTypes"][t["T_TYPE"]]["TT_NAME"] - strong_write(io_db["file_out"], "LOG " + name + - " suffers from hunger.\n") decrement_lifepoints(t) @@ -793,7 +795,7 @@ def get_dir_to_target(t, filter): """ def zero_score_map_where_char_on_memdepthmap(c): - # OUTSOURCED TO libplomrogue.so: + # OUTSOURCED FOR PERFORMANCE REASONS TO libplomrogue.so: # for i in [i for i in range(world_db["MAP_LENGTH"] ** 2) # if t["T_MEMDEPTHMAP"][i] == mem_depth_c[0]]: # set_map_score(i, 0) @@ -837,7 +839,8 @@ def get_dir_to_target(t, filter): return False def set_cells_passable_on_memmap_to_65534_on_scoremap(): - # OUTSOURCED TO libplomrogue.so: + # OUTSOURCED FOR PERFORMANCE REASONS TO libplomrogue.so: + # ord_dot = ord(".") # memmap = t["T_MEMMAP"] # for i in [i for i in range(world_db["MAP_LENGTH"] ** 2) # if ord_dot == memmap[i]]: @@ -851,7 +854,6 @@ def get_dir_to_target(t, filter): test = libpr.init_score_map() if test: raise RuntimeError("Malloc error in init_score_map().") - ord_dot = ord(".") ord_v = ord("v") ord_blank = ord(" ") set_cells_passable_on_memmap_to_65534_on_scoremap() @@ -1115,8 +1117,9 @@ def command_ping(): def command_quit(): """Abort server process.""" - save_world() - atomic_write(io_db["path_record"], io_db["record_chunk"], do_append=True) + if None == opts.replay: + save_world() + atomic_write(io_db["path_record"], io_db["record_chunk"], do_append=True) raise SystemExit("received QUIT command")