X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;ds=sidebyside;f=roguelike-server;h=483dc22f75171bb588c2d4c471a44637da88938e;hb=858dd9d0785c3d528e3ce8d7111819ef7e572217;hp=c9d87286dc057e428bcf8298f62913c10b1c0e25;hpb=fe58648dcf75e71304ed9f1a674640f203b57bba;p=plomrogue
diff --git a/roguelike-server b/roguelike-server
index c9d8728..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,7 @@ 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)
@@ -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")