X-Git-Url: https://plomlompom.com/repos/?p=plomrogue;a=blobdiff_plain;f=server%2Fmake_world.py;h=23609c686d7a860ae6df4b3bb1761a1191853324;hp=ad1a84d89033d16878aaf395704600f5a46ef659;hb=e9a37a285ab627535c0fe983e1eda815c1d587b5;hpb=9daa8b8d01b9b2f9295dc51e94ceb524c278fe68 diff --git a/server/make_world.py b/server/make_world.py index ad1a84d..23609c6 100644 --- a/server/make_world.py +++ b/server/make_world.py @@ -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")