def save_world():
- """Save all commands needed to reconstruct current world state."""
+ """Save all commands needed to reconstruct current world state."""
# TODO: Misses same optimizations as record() from the original record().
def quote(string):
def remake_map():
- # DUMMY.
- print("I'd (re-)make the map now, if only I knew how.")
+ # DUMMY map creator.
+ world_db["MAP"] = bytearray(b'.' * (world_db["MAP_LENGTH"] ** 2))
def set_world_inactive():
def command_makeworld(seed_string):
# DUMMY.
- setter(None, "SEED_MAP", 0, 4294967295)(seed_string)
setter(None, "SEED_RANDOMNESS", 0, 4294967295)(seed_string)
- # TODO: Test for existence of player thing and 'wait' thing action?
+ player_will_be_generated = False
+ for ThingType in world_db["ThingTypes"]:
+ if 0 == ThingType:
+ if 0 < world_db["ThingTypes"][ThingType]["TT_START_NUMBER"]:
+ player_will_be_generated = True
+ break
+ if not player_will_be_generated:
+ print("Ignoring beyond SEED_MAP: " +
+ "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
+ setter(None, "SEED_MAP", 0, 4294967295)(seed_string)
+ world_db["Things"] = {}
+ remake_map()
+ world_db["WORLD_ACTIVE"] = 1
+ world_db["TURN"] = 1
+ # TODO: Generate things (player first, with updated memory)
+ atomic_write(io_db["path_out"], "NEW_WORLD\n", do_append=True)
def command_maplength(maplength_string):
# DUMMY.
set_world_inactive()
- # TODO: remove things, map
+ # TODO: remove map (is this necessary? no memory management trouble …)
+ world_db["Things"] = {}
setter(None, "MAP_LENGTH", 1, 256)(maplength_string)
# DUMMY.
val = integer_test(worldactive_string, 0, 1)
if val:
- if 0 != world_db["WORLD_ACTIVE"] and 0 == val:
- set_world_inactive()
+ if 0 != world_db["WORLD_ACTIVE"]:
+ if 0 == val:
+ set_world_inactive()
+ else:
+ print("World already active.")
elif 0 == world_db["WORLD_ACTIVE"]:
wait_exists = False
+ for ThingAction in world_db["ThingActions"]:
+ if "wait" == ThingAction["TA_NAME"]:
+ wait_exists = True
+ break
player_exists = False
- map_exists = False
- # TODO: perform tests:
- # Is there thing action of name 'wait'?
- # Is there a player thing?
- # Is there a map?
+ for Thing in world_db["Things"]:
+ if 0 == ThingAction["T_ID"]:
+ player_exists = True
+ break
+ map_exists = "MAP" in world_db
if wait_exists and player_exists and map_exists:
- # TODO: rebuild al things' FOVs, map memories
+ # TODO: rebuild all things' FOVs, map memories
world_db["WORLD_ACTIVE"] = 1