Files
Archipelago/worlds/celeste_open_world/data/ParseData.py
Silvris e54a15978f Celeste Open World: speedup module load (#5448)
* speedup world load

* those 3 weren't in-fact needed
2025-12-19 14:54:41 +01:00

219 lines
8.9 KiB
Python

if __name__ == "__main__":
import json
all_doors: list[str] = []
all_region_connections: list[str] = []
all_locations: list[str] = []
all_regions: list[str] = []
all_room_connections: list[str] = []
all_rooms: list[str] = []
all_levels: list[str] = []
data_file = open('CelesteLevelData.json')
level_data = json.load(data_file)
data_file.close()
# Levels
for level in level_data["levels"]:
level_str = (f" \"{level['name']}\": Level(\"{level['name']}\", "
f"\"{level['display_name']}\", "
f"rooms_by_level[\"{level['name']}\"], "
f"room_cons_by_level[\"{level['name']}\"]),"
)
all_levels.append(level_str)
# Rooms
for room in level["rooms"]:
room_full_name = f"{level['name']}_{room['name']}"
room_full_display_name = f"{level['display_name']} - Room {room['name']}"
room_str = (f" \"{room_full_name}\": Room(\"{level['name']}\", "
f"\"{room_full_name}\", \"{room_full_display_name}\", "
f"regions_by_room[\"{room_full_name}\"], "
f"doors_by_room[\"{room_full_name}\"]"
)
if "checkpoint" in room and room["checkpoint"] != "":
room_str += f", \"{room['checkpoint']}\", \"{room_full_name}_{room['checkpoint_region']}\""
room_str += "),"
all_rooms.append(room_str)
# Regions
for region in room["regions"]:
region_full_name = f"{room_full_name}_{region['name']}"
region_str = (f" \"{region_full_name}\": PreRegion(\"{region_full_name}\", "
f"\"{room_full_name}\", "
f"connections_by_region[\"{region_full_name}\"], "
f"locations_by_region[\"{region_full_name}\"]),"
)
all_regions.append(region_str)
# Locations
if "locations" in region:
for location in region["locations"]:
location_full_name = f"{room_full_name}_{location['name']}"
location_display_name = location['display_name']
if (location['type'] == "strawberry" and location_display_name != "Moon Berry") or location['type'] == "binoculars" :
location_display_name = f"Room {room['name']} {location_display_name}"
location_full_display_name = f"{level['display_name']} - {location_display_name}"
location_str = (f" \"{location_full_name}\": LevelLocation(\"{location_full_name}\", "
f"\"{location_full_display_name}\", \"{region_full_name}\", "
f"LocationType.{location['type']}, ["
)
if "rule" in location:
for possible_access in location['rule']:
location_str += f"["
for item in possible_access:
if "Key" in item or "Gem" in item:
location_str += f"\"{level['display_name']} - {item}\", "
else:
location_str += f"ItemName.{item}, "
location_str += f"], "
elif "rules" in location:
raise Exception(f"Location {location_full_name} uses 'rules' instead of 'rule")
location_str += "]),"
all_locations.append(location_str)
# Region Connections
for reg_con in region["connections"]:
dest_region_full_name = f"{room_full_name}_{reg_con['dest']}"
reg_con_full_name = f"{region_full_name}---{dest_region_full_name}"
reg_con_str = f" \"{reg_con_full_name}\": RegionConnection(\"{region_full_name}\", \"{dest_region_full_name}\", ["
for possible_access in reg_con['rule']:
reg_con_str += f"["
for item in possible_access:
if "Key" in item or "Gem" in item:
reg_con_str += f"\"{level['display_name']} - {item}\", "
else:
reg_con_str += f"ItemName.{item}, "
reg_con_str += f"], "
reg_con_str += "]),"
all_region_connections.append(reg_con_str)
for door in room["doors"]:
door_full_name = f"{room_full_name}_{door['name']}"
door_str = (f" \"{door_full_name}\": Door(\"{door_full_name}\", "
f"\"{room_full_name}\", "
f"DoorDirection.{door['direction']}, "
)
door_str += "True, " if door["blocked"] else "False, "
door_str += "True)," if door["closes_behind"] else "False),"
all_doors.append(door_str)
all_regions.append("")
all_region_connections.append("")
all_doors.append("")
all_locations.append("")
all_rooms.append("")
# Room Connections
for room_con in level["room_connections"]:
source_door_full_name = f"{level['name']}_{room_con['source_room']}_{room_con['source_door']}"
dest_door_full_name = f"{level['name']}_{room_con['dest_room']}_{room_con['dest_door']}"
room_con_str = (f" \"{source_door_full_name}---{dest_door_full_name}\": RoomConnection(\"{level['name']}\", "
f"all_doors[\"{source_door_full_name}\"], "
f"all_doors[\"{dest_door_full_name}\"]),"
)
all_room_connections.append(room_con_str)
all_room_connections.append("")
all_levels.append("")
import sys
out_file = open("CelesteLevelData.py", "w")
sys.stdout = out_file
print("# THIS FILE IS AUTOMATICALLY GENERATED. DO NOT MANUALLY EDIT.")
print("")
print("from ..Levels import Level, Room, PreRegion, LevelLocation, RegionConnection, RoomConnection, Door, DoorDirection, LocationType")
print("from ..Names import ItemName")
print(f"from collections import defaultdict")
print("")
print("all_doors: dict[str, Door] = {")
for line in all_doors:
print(line)
print("}")
print("")
print("all_region_connections: dict[str, RegionConnection] = {")
for line in all_region_connections:
print(line)
print("}")
print("")
print("all_locations: dict[str, LevelLocation] = {")
for line in all_locations:
print(line)
print("}")
print("")
print("connections_by_region: defaultdict[str, list[RegionConnection]] = defaultdict(lambda: [])")
print("locations_by_region: defaultdict[str, list[LevelLocation]] = defaultdict(lambda: [])")
print("")
print("for _, connection in all_region_connections.items():")
print(" connections_by_region[connection.source_name].append(connection)")
print("")
print("for _, location in all_locations.items():")
print(" locations_by_region[location.region_name].append(location)")
print("")
print("all_regions: dict[str, PreRegion] = {")
for line in all_regions:
print(line)
print("}")
print("")
print("all_room_connections: dict[str, RoomConnection] = {")
for line in all_room_connections:
print(line)
print("}")
print("")
print("regions_by_room: defaultdict[str, list[PreRegion]] = defaultdict(lambda: [])")
print("doors_by_room: defaultdict[str, list[Door]] = defaultdict(lambda: [])")
print("")
print("for _, region in all_regions.items():")
print(" regions_by_room[region.room_name].append(region)")
print("")
print("for _, door in all_doors.items():")
print(" doors_by_room[door.room_name].append(door)")
print("")
print("all_rooms: dict[str, Room] = {")
for line in all_rooms:
print(line)
print("}")
print("")
print("rooms_by_level: defaultdict[str, list[Room]] = defaultdict(lambda: [])")
print("room_cons_by_level: defaultdict[str, list[RoomConnection]] = defaultdict(lambda: [])")
print("")
print("for _, room in all_rooms.items():")
print(" rooms_by_level[room.level_name].append(room)")
print("")
print("for _, room_con in all_room_connections.items():")
print(" room_cons_by_level[room_con.level_name].append(room_con)")
print("")
print("all_levels: dict[str, Level] = {")
for line in all_levels:
print(line)
print("}")
print("")
out_file.close()