home · contact · privacy
Server, plugin: Refactor make_world modularity.
[plomrogue] / server / make_world.py
index ad1a84d89033d16878aaf395704600f5a46ef659..23609c686d7a860ae6df4b3bb1761a1191853324 100644 (file)
@@ -3,6 +3,16 @@
 # see the file NOTICE in the root directory of the PlomRogue source package.
 
 
+from server.config.world_data import world_db, symbols_passable
+from server.config.make_world_helpers import make_map_func, \
+    world_makable_func, pos_test_func
+from server.config.io import io_db
+from server.utils import rand, libpr, id_setter
+from server.new_thing import new_Thing
+from server.io import strong_write
+from server.update_map_memory import update_map_memory
+
+
 def make_world(seed):
     """(Re-)build game world, i.e. map, things, to a new turn 1 from seed.
 
@@ -14,15 +24,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 world_db, symbols_passable
-    from server.config.misc import make_map_func
-    from server.config.io import io_db
-    from server.utils import rand, libpr, id_setter
-    from server.new_thing import new_Thing
-    from server.io import strong_write
-    from server.update_map_memory import update_map_memory
-
-    def free_pos():
+    def free_pos(type):
         i = 0
         while 1:
             err = "Space to put thing on too hard to find. Map too small?"
@@ -30,7 +32,7 @@ def make_world(seed):
                 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]) in \
-                    symbols_passable:
+                    symbols_passable and pos_test_func(type, y, x):
                     break
                 i += 1
                 if i == 65535:
@@ -44,36 +46,18 @@ def make_world(seed):
                 break
         return (y, x)
 
-    rand.seed = seed 
-    if world_db["MAP_LENGTH"] < 1:
-        print("Ignoring: No map length >= 1 defined.")
+    playertype = world_makable_func()
+    if playertype < 0:
         return
+    rand.seed = seed
     libpr.set_maplength(world_db["MAP_LENGTH"])
-    player_will_be_generated = False
-    playertype = world_db["PLAYER_TYPE"]
-    for ThingType in world_db["ThingTypes"]:
-        if playertype == ThingType:
-            if 0 < world_db["ThingTypes"][ThingType]["TT_START_NUMBER"]:
-                player_will_be_generated = True
-            break
-    if not player_will_be_generated:
-        print("Ignoring: No player type with start number >0 defined.")
-        return
-    wait_action = False
-    for ThingAction in world_db["ThingActions"]:
-        if "wait" == world_db["ThingActions"][ThingAction]["TA_NAME"]:
-            wait_action = True
-    if not wait_action:
-        print("Ignoring beyond SEED_MAP: " +
-              "No thing action with name 'wait' defined.")
-        return
     world_db["Things"] = {}
     make_map_func()
     world_db["WORLD_ACTIVE"] = 1
     world_db["TURN"] = 1
     for i in range(world_db["ThingTypes"][playertype]["TT_START_NUMBER"]):
         id = id_setter(-1, "Things")
-        world_db["Things"][id] = new_Thing(playertype, free_pos())
+        world_db["Things"][id] = new_Thing(playertype, free_pos(playertype))
     if not world_db["Things"][0]["fovmap"]:
         empty_fovmap = bytearray(b" " * world_db["MAP_LENGTH"] ** 2)
         world_db["Things"][0]["fovmap"] = empty_fovmap
@@ -82,5 +66,5 @@ def make_world(seed):
         for i in range(world_db["ThingTypes"][type]["TT_START_NUMBER"]):
             if type != playertype:
                 id = id_setter(-1, "Things")
-                world_db["Things"][id] = new_Thing(type, free_pos())
+                world_db["Things"][id] = new_Thing(type, free_pos(type))
     strong_write(io_db["file_out"], "NEW_WORLD\n")