X-Git-Url: https://plomlompom.com/repos/berlin_corona.txt?a=blobdiff_plain;f=plomrogue-server.py;h=204c131282d512fc20459c78ed32b21dde70a67c;hb=455db0213bfd97aff1a6309c9c53f6701c3fce84;hp=9d4b0994a5710c050318d5ca4760695666ba8f2f;hpb=c89e7df6e7b6b64037b5b964e10a63ad38f86eb5;p=plomrogue diff --git a/plomrogue-server.py b/plomrogue-server.py index 9d4b099..204c131 100755 --- a/plomrogue-server.py +++ b/plomrogue-server.py @@ -36,30 +36,7 @@ def prep_library(): raise SystemExit("No library " + libpath + ", run ./compile-server.sh first?") libpr = ctypes.cdll.LoadLibrary(libpath) - libpr.seed_rrand.argtypes = [ctypes.c_uint8, ctypes.c_uint32] libpr.seed_rrand.restype = ctypes.c_uint32 - libpr.rrand.argtypes = [] - libpr.rrand.restype = ctypes.c_uint16 - libpr.set_maplength.argtypes = [ctypes.c_uint16] - libpr.mv_yx_in_dir_legal_wrap.argtypes = [ctypes.c_char, ctypes.c_uint8, - ctypes.c_uint8] - libpr.mv_yx_in_dir_legal_wrap.restype = ctypes.c_uint8 - libpr.result_y.restype = ctypes.c_uint8 - libpr.result_x.restype = ctypes.c_uint8 - libpr.set_maplength(world_db["MAP_LENGTH"]) - libpr.build_fov_map.argtypes = [ctypes.c_uint8, ctypes.c_uint8, - ctypes.c_char_p, ctypes.c_char_p] - libpr.build_fov_map.restype = ctypes.c_uint8 - libpr.init_score_map.restype = ctypes.c_uint8 - libpr.set_map_score.argtypes = [ctypes.c_uint16, ctypes.c_uint16] - libpr.set_map_score.restype = ctypes.c_uint8 - libpr.get_map_score.argtypes = [ctypes.c_uint16] - libpr.get_map_score.restype = ctypes.c_int32 - libpr.get_neighbor_score.argtypes = [ctypes.c_uint8] - libpr.get_neighbor_score.restype = ctypes.c_uint16 - libpr.ready_neighbor_scores.argtpes = [ctypes.c_uint16] - libpr.ready_neighbor_scores.restype = ctypes.c_uint8 - libpr.dijkstra_map.restype = ctypes.c_uint8 return libpr @@ -503,13 +480,10 @@ def update_map_memory(t, age_map=True): if ord_space == t["T_MEMMAP"][pos]: t["T_MEMMAP"][pos] = world_db["MAP"][pos] if age_map: - 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] - if ord_9 > t["T_MEMDEPTHMAP"][pos] - if not rand.next() % (2 ** - (t["T_MEMDEPTHMAP"][pos] - 48))]: - t["T_MEMDEPTHMAP"][pos] += 1 + maptype = ctypes.c_char * len(t["T_MEMDEPTHMAP"]) + memdepthmap = maptype.from_buffer(t["T_MEMDEPTHMAP"]) + fovmap = maptype.from_buffer(t["fovmap"]) + libpr.age_some_memdepthmap_on_nonfov_cells(memdepthmap, fovmap) for mt in [mt for mt in t["T_MEMTHING"] if "v" == chr(t["fovmap"][(mt[1] * world_db["MAP_LENGTH"]) + mt[2]])]: @@ -804,6 +778,14 @@ def get_dir_to_target(t, filter): "s": memory map cell with greatest-reachable degree of unexploredness """ + def zero_score_map_where_char_on_memdepthmap(c): + maptype = ctypes.c_char * len(t["T_MEMDEPTHMAP"]) + map = maptype.from_buffer(t["T_MEMDEPTHMAP"]) + test = libpr.zero_score_map_where_char_on_memdepthmap(c, map) + if test: + raise RuntimeError("No score map allocated for " + "zero_score_map_where_char_on_memdepthmap().") + def set_map_score(pos, score): test = libpr.set_map_score(pos, score) if test: @@ -880,9 +862,7 @@ def get_dir_to_target(t, filter): if world_db["ThingTypes"][mt[0]]["TT_CONSUMABLE"]]: set_map_score(mt[1] * world_db["MAP_LENGTH"] + mt[2], 0) elif "s" == filter: - 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) + zero_score_map_where_char_on_memdepthmap(mem_depth_c[0]) def rand_target_dir(neighbors, cmp, dirs): candidates = []