-from server.new_thing import new_Thing
-
-def make_world(seed):
- from server.update_map_memory import update_map_memory
- from server.config.misc import make_map_func
- from server.utils import libpr
-
- def free_pos(plant=False):
- i = 0
- while 1:
- err = "Space to put thing on too hard to find. Map too small?"
- while 1:
- y = rand.next() % world_db["MAP_LENGTH"]
- x = rand.next() % world_db["MAP_LENGTH"]
- pos = y * world_db["MAP_LENGTH"] + x;
- if (not plant
- and "." == chr(world_db["MAP"][pos])) \
- or ":" == chr(world_db["MAP"][pos]):
- break
- i += 1
- if i == 65535:
- raise SystemExit(err)
- pos_clear = (0 == len([id for id in world_db["Things"]
- if world_db["Things"][id]["T_LIFEPOINTS"]
- if world_db["Things"][id]["T_POSY"] == y
- if world_db["Things"][id]["T_POSX"] == x]))
- if pos_clear:
- break
- return (y, x)
-
- rand.seed = seed
- if world_db["MAP_LENGTH"] < 1:
- print("Ignoring: No map length >= 1 defined.")
- return
- 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
- if not world_db["SLIPPERS"] in world_db["ThingTypes"]:
- print("Ignoring: No valid SLIPPERS set.")
- return
- if not world_db["PLANT_0"] in world_db["ThingTypes"]:
- print("Ignoring: No valid PLANT_0 set.")
- return
- if not world_db["LUMBER"] in world_db["ThingTypes"]:
- print("Ignoring: No valid LUMBER set.")
- return
- #for name in specials:
- # if world_db[name] not in world_db["ThingTypes"]:
- # print("Ignoring: No valid " + name + " set.")
- # return
- world_db["Things"] = {}
- make_map()
- 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())
- if not world_db["Things"][0]["fovmap"]:
- empty_fovmap = bytearray(b" " * world_db["MAP_LENGTH"] ** 2)
- world_db["Things"][0]["fovmap"] = empty_fovmap
- update_map_memory(world_db["Things"][0])
- for type in world_db["ThingTypes"]:
- for i in range(world_db["ThingTypes"][type]["TT_START_NUMBER"]):
- if type != playertype:
- id = id_setter(-1, "Things")
- plantness = world_db["ThingTypes"][type]["TT_PROLIFERATE"]
- world_db["Things"][id] = new_Thing(type, free_pos(plantness))
- strong_write(io_db["file_out"], "NEW_WORLD\n")
-
-def thingproliferation(t, prol_map):
- from server.new_thing import new_Thing
- global directions_db, mv_yx_in_dir_legal
- prolscore = world_db["ThingTypes"][t["T_TYPE"]]["TT_PROLIFERATE"]
- if prolscore and \
- (world_db["ThingTypes"][t["T_TYPE"]]["TT_LIFEPOINTS"] == 0 or
- t["T_LIFEPOINTS"] >= 0.9 *
- world_db["ThingTypes"][t["T_TYPE"]]["TT_LIFEPOINTS"]) \
- and \
- (1 == prolscore or 1 == (rand.next() % prolscore)):
- candidates = []
- for dir in [directions_db[key] for key in directions_db]:
- mv_result = mv_yx_in_dir_legal(dir, t["T_POSY"], t["T_POSX"])
- pos = mv_result[1] * world_db["MAP_LENGTH"] + mv_result[2]
- if mv_result[0] and \
- (ord(":") == prol_map[pos]
- or (world_db["ThingTypes"][t["T_TYPE"]]["TT_LIFEPOINTS"]
- and ord(".") == prol_map[pos])):
- candidates.append((mv_result[1], mv_result[2]))
- if len(candidates):
- i = rand.next() % len(candidates)
- id = id_setter(-1, "Things")
- newT = new_Thing(t["T_TYPE"], (candidates[i][0], candidates[i][1]))
- world_db["Things"][id] = newT
- if (world_db["FAVOR_STAGE"] > 0
- and t["T_TYPE"] == world_db["PLANT_0"]):
- world_db["GOD_FAVOR"] += 5
- #elif t["T_TYPE"] == world_db["PLANT_1"];
- # world_db["GOD_FAVOR"] += 25
- #elif world_db["FAVOR_STAGE"] >= 4 and \
- # t["T_TYPE"] == world_db["ANIMAL_1"]:
- # log("The Island God SMILES upon a new-born bear baby.")
- # world_db["GOD_FAVOR"] += 750