1 # This file is part of PlomRogue. PlomRogue is licensed under the GPL version 3
2 # or any later version. For details on its copyright, license, and warranties,
3 # see the file NOTICE in the root directory of the PlomRogue source package.
6 def update_map_memory(t, age_map=True):
7 """Update t's T_MEMMAP with what's in its FOV now,age its T_MEMMEPTHMAP."""
8 from server.utils import c_pointer_to_bytearray, libpr
9 from server.config.world_data import world_db
11 def age_some_memdepthmap_on_nonfov_cells():
12 # OUTSOURCED FOR PERFORMANCE REASONS TO libplomrogue.so:
16 # for pos in [pos for pos in range(world_db["MAP_LENGTH"] ** 2)
17 # if not ord_v == t["fovmap"][pos]
18 # if ord_0 <= t["T_MEMDEPTHMAP"][pos]
19 # if ord_9 > t["T_MEMDEPTHMAP"][pos]
20 # if not rand.next() % (2 **
21 # (t["T_MEMDEPTHMAP"][pos] - 48))]:
22 # t["T_MEMDEPTHMAP"][pos] += 1
23 memdepthmap = c_pointer_to_bytearray(t["T_MEMDEPTHMAP"])
24 fovmap = c_pointer_to_bytearray(t["fovmap"])
25 libpr.age_some_memdepthmap_on_nonfov_cells(memdepthmap, fovmap)
27 def update_mem_and_memdepthmap_via_fovmap():
28 # OUTSOURCED FOR PERFORMANCE REASONS TO libplomrogue.so:
29 # for pos in [pos for pos in range(world_db["MAP_LENGTH"] ** 2)
30 # if ord_v == t["fovmap"][pos]]:
31 # t["T_MEMDEPTHMAP"][pos] = ord_0
32 # t["T_MEMMAP"][pos] = world_db["MAP"][pos]
33 memdepthmap = c_pointer_to_bytearray(t["T_MEMDEPTHMAP"])
34 memmap = c_pointer_to_bytearray(t["T_MEMMAP"])
35 fovmap = c_pointer_to_bytearray(t["fovmap"])
36 map = c_pointer_to_bytearray(world_db["MAP"])
37 libpr.update_mem_and_memdepthmap_via_fovmap(map, fovmap, memdepthmap,
41 t["T_MEMMAP"] = bytearray(b' ' * (world_db["MAP_LENGTH"] ** 2))
42 if not t["T_MEMDEPTHMAP"]:
43 t["T_MEMDEPTHMAP"] = bytearray(b' ' * (world_db["MAP_LENGTH"] ** 2))
44 update_mem_and_memdepthmap_via_fovmap()
46 age_some_memdepthmap_on_nonfov_cells()
48 t["T_MEMTHING"] = [mt for mt in t["T_MEMTHING"]
49 if ord_v != t["fovmap"][(mt[1] * world_db["MAP_LENGTH"])
51 for id in [id for id in world_db["Things"]
52 if not world_db["Things"][id]["carried"]]:
53 type = world_db["Things"][id]["T_TYPE"]
54 if not world_db["ThingTypes"][type]["TT_LIFEPOINTS"]:
55 y = world_db["Things"][id]["T_POSY"]
56 x = world_db["Things"][id]["T_POSX"]
57 if ord_v == t["fovmap"][(y * world_db["MAP_LENGTH"]) + x]:
58 t["T_MEMTHING"].append((type, y, x))