home · contact · privacy
Server: Make list of symbols of passable fields configurable.
[plomrogue] / server / world.py
index 902a554dfe9c534bce435fdb620f3030f42d3d1e..480ea28f424c30335434803f97993cd8c8639602 100644 (file)
@@ -8,7 +8,7 @@ def thingproliferation(t, prol_map):
     """To chance of 1/TT_PROLIFERATE, create t offspring in open neighbor cell.
 
     Naturally only works with TT_PROLIFERATE > 0. The neighbor cell must be be
-    marked '.' in prol_map. If there are several map cell candidates, one is
+    marked "." in prol_map. If there are several map cell candidates, one is
     selected randomly.
     """
     from server.config.world_data import directions_db
@@ -18,7 +18,7 @@ def thingproliferation(t, prol_map):
         candidates = []
         for dir in [directions_db[key] for key in sorted(directions_db.keys())]:
             mv_result = mv_yx_in_dir_legal(dir, t["T_POSY"], t["T_POSX"])
-            if mv_result[0] and  ord('.') == prol_map[mv_result[1]
+            if mv_result[0] and  ord(".") == prol_map[mv_result[1]
                                                       * world_db["MAP_LENGTH"]
                                                       + mv_result[2]]:
                 candidates.append((mv_result[1], mv_result[2]))
@@ -82,24 +82,18 @@ def build_fov_map(t):
         raise RuntimeError("Malloc error in build_fov_Map().")
 
 
-def new_Thing(type, pos=(0, 0)):
+def new_Thing(_type, pos=(0, 0)):
     """Return Thing of type T_TYPE, with fovmap if alive and world active."""
-    thing = {
-        "T_LIFEPOINTS": world_db["ThingTypes"][type]["TT_LIFEPOINTS"],
-        "T_ARGUMENT": 0,
-        "T_PROGRESS": 0,
-        "T_SATIATION": 0,
-        "T_COMMAND": 0,
-        "T_TYPE": type,
-        "T_POSY": pos[0],
-        "T_POSX": pos[1],
-        "T_CARRIES": [],
-        "carried": False,
-        "T_MEMTHING": [],
-        "T_MEMMAP": False,
-        "T_MEMDEPTHMAP": False,
-        "fovmap": False
-    }
+    from server.config.world_data import thing_defaults
+    thing = {}
+    for key in thing_defaults:
+        thing[key] = thing_defaults[key]
+        if type(thing[key]) == list:
+            thing[key] = thing[key][:]
+    thing["T_LIFEPOINTS"] = world_db["ThingTypes"][_type]["TT_LIFEPOINTS"]
+    thing["T_TYPE"] = _type
+    thing["T_POSY"] = pos[0]
+    thing["T_POSX"] = pos[1]
     if world_db["WORLD_ACTIVE"] and thing["T_LIFEPOINTS"]:
         build_fov_map(thing)
     return thing
@@ -241,6 +235,7 @@ def make_world(seed):
     of ID = world["PLAYER_TYPE"]. Place Things randomly, and actors not on each
     other. Init player's memory map. Write "NEW_WORLD" line to out file.
     """
+    from server.config.world_data import symbols_passable
 
     def free_pos():
         i = 0
@@ -249,7 +244,8 @@ def make_world(seed):
             while 1:
                 y = rand.next() % world_db["MAP_LENGTH"]
                 x = rand.next() % world_db["MAP_LENGTH"]
-                if "." == chr(world_db["MAP"][y * world_db["MAP_LENGTH"] + x]):
+                if chr(world_db["MAP"][y * world_db["MAP_LENGTH"] + x]) in \
+                    symbols_passable:
                     break
                 i += 1
                 if i == 65535:
@@ -309,8 +305,7 @@ def make_world(seed):
 
 def turn_over():
     """Run game world and its inhabitants until new player input expected."""
-    from server.config.actions import action_db
-    from server.ai import ai
+    from server.config.actions import action_db, ai_func
     id = 0
     whilebreaker = False
     while world_db["Things"][0]["T_LIFEPOINTS"]:
@@ -331,7 +326,7 @@ def turn_over():
                     if 0 == id:
                         whilebreaker = True
                         break
-                    ai(Thing)
+                    ai_func(Thing)
                 try_healing(Thing)
                 hunger(Thing)
                 if Thing["T_LIFEPOINTS"]:
@@ -342,7 +337,6 @@ def turn_over():
                     if Thing["T_PROGRESS"] == ThingAction["TA_EFFORT"]:
                         action = action_db["actor_" + ThingAction["TA_NAME"]]
                         action(Thing)
-                        #eval("actor_" + ThingAction["TA_NAME"])(Thing)
                         Thing["T_COMMAND"] = 0
                         Thing["T_PROGRESS"] = 0
             thingproliferation(Thing, proliferable_map)