home · contact · privacy
Server/py: Fix memdepthmapping bug.
[plomrogue] / plomrogue-server.py
index e4f98968a2fcf20027ef27a6fb78deaa76ca2959..a44f751313a057e04c432f5ba48df264a9d4e222 100755 (executable)
@@ -204,8 +204,10 @@ def save_world():
 
     string = ""
     for key in world_db:
-        if dict != type(world_db[key]) and key != "MAP":
+        if dict != type(world_db[key]) and key != "MAP" and \
+           key != "WORLD_ACTIVE" and key != "SEED_MAP":
             string = string + key + " " + str(world_db[key]) + "\n"
+    string = string + "SEED_MAP " + str(world_db["SEED_MAP"]) + "\n"
     string = string + helper("ThingActions", "TA_ID")
     string = string + helper("ThingTypes", "TT_ID", {"TT_CORPSE_ID": False})
     for id in world_db["ThingTypes"]:
@@ -435,6 +437,7 @@ def remake_map():
             return True
         return False
     store_seed = rand.seed
+    rand.seed = world_db["SEED_MAP"]
     world_db["MAP"] = bytearray(b'~' * (world_db["MAP_LENGTH"] ** 2))
     length = world_db["MAP_LENGTH"]
     add_half_width = (not (length % 2)) * int(length / 2)
@@ -475,7 +478,7 @@ def update_map_memory(t):
                 t["T_MEMMAP"][pos] = world_db["MAP"][pos]
             continue
         if ord('0') <= t["T_MEMDEPTHMAP"][pos] \
-           and ord('9') >= t["T_MEMDEPTHMAP"][pos] \
+           and ord('9') > t["T_MEMDEPTHMAP"][pos] \
            and not rand.next() % (2 ** (t["T_MEMDEPTHMAP"][pos] - 48)):
             t["T_MEMDEPTHMAP"][pos] += 1
     for mt in [mt for mt in t["T_MEMTHING"]
@@ -587,7 +590,8 @@ def actor_wait(t):
 def actor_move(t):
     """If passable, move/collide(=attack) thing into T_ARGUMENT's direction."""
     passable = False
-    move_result = mv_yx_in_dir_legal(t["T_ARGUMENT"], t["T_POSY"], t["T_POSX"])
+    move_result = mv_yx_in_dir_legal(chr(t["T_ARGUMENT"]),
+                                     t["T_POSY"], t["T_POSX"])
     if 1 == move_result[0]:
         pos = (move_result[1] * world_db["MAP_LENGTH"]) + move_result[2]
         passable = "." == chr(world_db["MAP"][pos])
@@ -609,7 +613,7 @@ def actor_move(t):
             decrement_lifepoints(world_db["Things"][hit_id])
             return
     dir = [dir for dir in directions_db
-           if directions_db[dir] == t["T_ARGUMENT"]][0]
+           if directions_db[dir] == chr(t["T_ARGUMENT"])][0]
     if passable:
         t["T_POSY"] = move_result[1]
         t["T_POSX"] = move_result[2]
@@ -908,13 +912,6 @@ def command_quit():
 
 def command_thingshere(str_y, str_x):
     """Write to out file list of Things known to player at coordinate y, x."""
-    def write_thing_if_here():
-        if y == world_db["Things"][id]["T_POSY"] \
-           and x == world_db["Things"][id]["T_POSX"] \
-           and not world_db["Things"][id]["carried"]:
-            type = world_db["Things"][id]["T_TYPE"]
-            name = world_db["ThingTypes"][type]["TT_NAME"]
-            strong_write(io_db["file_out"], name + "\n")
     if world_db["WORLD_ACTIVE"]:
         y = integer_test(str_y, 0, 255)
         x = integer_test(str_x, 0, 255)
@@ -924,10 +921,18 @@ def command_thingshere(str_y, str_x):
             strong_write(io_db["file_out"], "THINGS_HERE START\n")
             if "v" == chr(world_db["Things"][0]["fovmap"][pos]):
                 for id in world_db["Things"]:
-                    write_thing_if_here()
+                    # write_thing_if_here()
+                    if y == world_db["Things"][id]["T_POSY"] \
+                       and x == world_db["Things"][id]["T_POSX"] \
+                       and not world_db["Things"][id]["carried"]:
+                        type = world_db["Things"][id]["T_TYPE"]
+                        name = world_db["ThingTypes"][type]["TT_NAME"]
+                        strong_write(io_db["file_out"], name + "\n")
             else:
-                for id in world_db["Things"][0]["T_MEMTHING"]:
-                    write_thing_if_here()
+                for mt in world_db["Things"][0]["T_MEMTHING"]:
+                    if y == mt[1] and x == mt[2]:
+                        name = world_db["ThingTypes"][mt[0]]["TT_NAME"]
+                        strong_write(io_db["file_out"], name + "\n")
             strong_write(io_db["file_out"], "THINGS_HERE END\n")
         else:
             print("Ignoring: Invalid map coordinates.")
@@ -955,7 +960,7 @@ def play_commander(action, args=False):
 
     def set_command_and_argument_movestring(str_arg):
         if str_arg in directions_db:
-            world_db["Things"][0]["T_ARGUMENT"] = directions_db[str_arg]
+            world_db["Things"][0]["T_ARGUMENT"] = ord(directions_db[str_arg])
             set_command()
         else:
             print("Ignoring: Argument must be valid direction string.")
@@ -1386,9 +1391,9 @@ commands_db = {
 """World state database. With sane default values. (Randomness is in rand.)"""
 world_db = {
     "TURN": 0,
+    "MAP_LENGTH": 64,
     "SEED_MAP": 0,
     "PLAYER_TYPE": 0,
-    "MAP_LENGTH": 64,
     "WORLD_ACTIVE": 0,
     "ThingActions": {},
     "ThingTypes": {},