about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--apworld/__init__.py2
-rw-r--r--apworld/options.py23
-rw-r--r--apworld/player_logic.py16
-rw-r--r--apworld/regions.py18
-rw-r--r--apworld/static_logic.py12
-rw-r--r--data/ids.yaml59
-rw-r--r--data/maps/control_center/metadata.txtpb1
-rw-r--r--data/maps/daedalus/metadata.txtpb1
-rw-r--r--data/maps/demo/metadata.txtpb2
-rw-r--r--data/maps/four_rooms/metadata.txtpb1
-rw-r--r--data/maps/icarus/metadata.txtpb1
-rw-r--r--data/maps/the_advanced/metadata.txtpb1
-rw-r--r--data/maps/the_ancient/metadata.txtpb1
-rw-r--r--data/maps/the_bearer/metadata.txtpb1
-rw-r--r--data/maps/the_between/metadata.txtpb1
-rw-r--r--data/maps/the_butterfly/metadata.txtpb1
-rw-r--r--data/maps/the_charismatic/metadata.txtpb1
-rw-r--r--data/maps/the_colorful/metadata.txtpb1
-rw-r--r--data/maps/the_congruent/metadata.txtpb1
-rw-r--r--data/maps/the_crystalline/metadata.txtpb1
-rw-r--r--data/maps/the_darkroom/metadata.txtpb1
-rw-r--r--data/maps/the_digital/metadata.txtpb1
-rw-r--r--data/maps/the_door/metadata.txtpb1
-rw-r--r--data/maps/the_double_sided/metadata.txtpb1
-rw-r--r--data/maps/the_entry/metadata.txtpb2
-rw-r--r--data/maps/the_extravagant/metadata.txtpb1
-rw-r--r--data/maps/the_fuzzy/metadata.txtpb1
-rw-r--r--data/maps/the_gallery/metadata.txtpb1
-rw-r--r--data/maps/the_gold/metadata.txtpb1
-rw-r--r--data/maps/the_graveyard/metadata.txtpb1
-rw-r--r--data/maps/the_great/metadata.txtpb1
-rw-r--r--data/maps/the_hinterlands/metadata.txtpb2
-rw-r--r--data/maps/the_hive/metadata.txtpb1
-rw-r--r--data/maps/the_impressive/metadata.txtpb1
-rw-r--r--data/maps/the_invisible/metadata.txtpb1
-rw-r--r--data/maps/the_jubilant/metadata.txtpb1
-rw-r--r--data/maps/the_keen/metadata.txtpb1
-rw-r--r--data/maps/the_liberated/metadata.txtpb1
-rw-r--r--data/maps/the_linear/metadata.txtpb1
-rw-r--r--data/maps/the_lionized/metadata.txtpb1
-rw-r--r--data/maps/the_literate/metadata.txtpb1
-rw-r--r--data/maps/the_lively/metadata.txtpb1
-rw-r--r--data/maps/the_nuanced/metadata.txtpb1
-rw-r--r--data/maps/the_orb/metadata.txtpb1
-rw-r--r--data/maps/the_owl/metadata.txtpb1
-rw-r--r--data/maps/the_parthenon/metadata.txtpb1
-rw-r--r--data/maps/the_partial/metadata.txtpb1
-rw-r--r--data/maps/the_perceptive/metadata.txtpb1
-rw-r--r--data/maps/the_plaza/metadata.txtpb1
-rw-r--r--data/maps/the_quiet/metadata.txtpb1
-rw-r--r--data/maps/the_relentless/metadata.txtpb1
-rw-r--r--data/maps/the_repetitive/metadata.txtpb1
-rw-r--r--data/maps/the_revitalized/metadata.txtpb1
-rw-r--r--data/maps/the_shop/metadata.txtpb1
-rw-r--r--data/maps/the_sirenic/metadata.txtpb1
-rw-r--r--data/maps/the_stellar/metadata.txtpb1
-rw-r--r--data/maps/the_stormy/metadata.txtpb1
-rw-r--r--data/maps/the_sturdy/metadata.txtpb1
-rw-r--r--data/maps/the_sun_temple/metadata.txtpb1
-rw-r--r--data/maps/the_sweet/metadata.txtpb1
-rw-r--r--data/maps/the_symbolic/metadata.txtpb1
-rw-r--r--data/maps/the_talented/metadata.txtpb1
-rw-r--r--data/maps/the_tenacious/metadata.txtpb1
-rw-r--r--data/maps/the_three_doors/metadata.txtpb1
-rw-r--r--data/maps/the_tower/metadata.txtpb1
-rw-r--r--data/maps/the_tree/metadata.txtpb1
-rw-r--r--data/maps/the_unkempt/metadata.txtpb1
-rw-r--r--data/maps/the_unyielding/metadata.txtpb1
-rw-r--r--data/maps/the_wise/metadata.txtpb1
-rw-r--r--data/maps/the_wondrous/metadata.txtpb1
-rw-r--r--data/maps/the_words/metadata.txtpb1
-rw-r--r--proto/data.proto3
-rw-r--r--proto/human.proto2
-rw-r--r--tools/assign_ids/main.cpp35
-rw-r--r--tools/datapacker/main.cpp10
-rw-r--r--tools/util/ids_yaml_format.cpp8
-rw-r--r--tools/validator/human_processor.cpp16
-rw-r--r--tools/validator/main.cpp4
-rw-r--r--tools/validator/structs.h4
-rw-r--r--tools/validator/validator.cpp21
80 files changed, 296 insertions, 5 deletions
diff --git a/apworld/__init__.py b/apworld/__init__.py index 5bad63e..ff1da66 100644 --- a/apworld/__init__.py +++ b/apworld/__init__.py
@@ -140,6 +140,7 @@ class Lingo2World(World):
140 "enable_gift_maps", 140 "enable_gift_maps",
141 "enable_icarus", 141 "enable_icarus",
142 "endings_requirement", 142 "endings_requirement",
143 "fast_travel_access",
143 "keyholder_sanity", 144 "keyholder_sanity",
144 "masteries_requirement", 145 "masteries_requirement",
145 "shuffle_control_center_colors", 146 "shuffle_control_center_colors",
@@ -155,6 +156,7 @@ class Lingo2World(World):
155 156
156 slot_data: dict[str, object] = { 157 slot_data: dict[str, object] = {
157 **self.options.as_dict(*slot_options), 158 **self.options.as_dict(*slot_options),
159 "rte": [self.static_logic.objects.maps[map_id].name for map_id in self.player_logic.rte_mapping],
158 "version": self.static_logic.get_data_version(), 160 "version": self.static_logic.get_data_version(),
159 } 161 }
160 162
diff --git a/apworld/options.py b/apworld/options.py index 5661351..063af21 100644 --- a/apworld/options.py +++ b/apworld/options.py
@@ -91,6 +91,27 @@ class CyanDoorBehavior(Choice):
91 option_item = 2 91 option_item = 2
92 92
93 93
94class ShuffleFastTravel(Toggle):
95 """If enabled, the list of maps you can fast travel to is randomized, except for The Entry, which is always
96 accessible."""
97 display_name = "Shuffle Fast Travel"
98
99
100class FastTravelAccess(Choice):
101 """
102 Controls how the fast travel buttons on the pause menu work.
103
104 - **Vanilla**: You can only fast travel to maps once you have been to them and stepped foot in the general area that
105 the warp would place you. This option means that fast travel has no impact on logic.
106 - **Unlocked**: All five fast travel maps will be available from the start.
107 - **Items**: Only The Entry is available from the start. The other fast travel buttons are locked behind items.
108 """
109 display_name = "Fast Travel Access"
110 option_vanilla = 0
111 option_unlocked = 1
112 option_items = 2
113
114
94class EnableIcarus(Toggle): 115class EnableIcarus(Toggle):
95 """ 116 """
96 Controls whether Icarus is randomized. If disabled, which is the default, no locations or items will be created for 117 Controls whether Icarus is randomized. If disabled, which is the default, no locations or items will be created for
@@ -234,6 +255,8 @@ class Lingo2Options(PerGameCommonOptions):
234 shuffle_worldports: ShuffleWorldports 255 shuffle_worldports: ShuffleWorldports
235 keyholder_sanity: KeyholderSanity 256 keyholder_sanity: KeyholderSanity
236 cyan_door_behavior: CyanDoorBehavior 257 cyan_door_behavior: CyanDoorBehavior
258 shuffle_fast_travel: ShuffleFastTravel
259 fast_travel_access: FastTravelAccess
237 enable_icarus: EnableIcarus 260 enable_icarus: EnableIcarus
238 enable_gift_maps: EnableGiftMaps 261 enable_gift_maps: EnableGiftMaps
239 daedalus_only: DaedalusOnly 262 daedalus_only: DaedalusOnly
diff --git a/apworld/player_logic.py b/apworld/player_logic.py index b946296..a02856e 100644 --- a/apworld/player_logic.py +++ b/apworld/player_logic.py
@@ -5,7 +5,7 @@ from .generated import data_pb2 as data_pb2
5from .items import SYMBOL_ITEMS 5from .items import SYMBOL_ITEMS
6from typing import TYPE_CHECKING, NamedTuple 6from typing import TYPE_CHECKING, NamedTuple
7 7
8from .options import ShuffleLetters, CyanDoorBehavior, VictoryCondition 8from .options import ShuffleLetters, CyanDoorBehavior, VictoryCondition, FastTravelAccess
9 9
10if TYPE_CHECKING: 10if TYPE_CHECKING:
11 from . import Lingo2World 11 from . import Lingo2World
@@ -221,6 +221,7 @@ class Lingo2PlayerLogic:
221 221
222 double_letter_amount: dict[str, int] 222 double_letter_amount: dict[str, int]
223 goal_room_id: int 223 goal_room_id: int
224 rte_mapping: list[int]
224 225
225 def __init__(self, world: "Lingo2World"): 226 def __init__(self, world: "Lingo2World"):
226 self.world = world 227 self.world = world
@@ -304,6 +305,19 @@ class Lingo2PlayerLogic:
304 if "The Fuzzy" in world.options.enable_gift_maps.value: 305 if "The Fuzzy" in world.options.enable_gift_maps.value:
305 self.real_items.append("Numbers") 306 self.real_items.append("Numbers")
306 307
308 if world.options.shuffle_fast_travel:
309 travelable_maps = [map_id for map_id in self.shuffled_maps
310 if world.static_logic.objects.maps[map_id].HasField("rte_room")]
311 self.rte_mapping = world.random.sample(travelable_maps, 4)
312 else:
313 canonical_rtes = ["the_plaza", "the_gallery", "daedalus", "control_center"]
314 self.rte_mapping = [world.static_logic.map_id_by_name[map_name] for map_name in canonical_rtes
315 if world.static_logic.map_id_by_name[map_name] in self.shuffled_maps]
316
317 if world.options.fast_travel_access == FastTravelAccess.option_items:
318 for rte_map in self.rte_mapping:
319 self.real_items.append(world.static_logic.get_map_rte_item_name(rte_map))
320
307 if self.world.options.shuffle_doors: 321 if self.world.options.shuffle_doors:
308 for progressive in world.static_logic.objects.progressives: 322 for progressive in world.static_logic.objects.progressives:
309 for i in range(0, len(progressive.doors)): 323 for i in range(0, len(progressive.doors)):
diff --git a/apworld/regions.py b/apworld/regions.py index 2f9b571..500139f 100644 --- a/apworld/regions.py +++ b/apworld/regions.py
@@ -5,6 +5,7 @@ from BaseClasses import Region, ItemClassification, Entrance
5from entrance_rando import randomize_entrances 5from entrance_rando import randomize_entrances
6from .items import Lingo2Item 6from .items import Lingo2Item
7from .locations import Lingo2Location 7from .locations import Lingo2Location
8from .options import FastTravelAccess
8from .player_logic import AccessRequirements 9from .player_logic import AccessRequirements
9from .rules import make_location_lambda 10from .rules import make_location_lambda
10 11
@@ -153,6 +154,23 @@ def create_regions(world: "Lingo2World"):
153 for region in reqs.get_referenced_rooms(): 154 for region in reqs.get_referenced_rooms():
154 world.multiworld.register_indirect_condition(regions[region], connection) 155 world.multiworld.register_indirect_condition(regions[region], connection)
155 156
157 if world.options.fast_travel_access != FastTravelAccess.option_vanilla:
158 for rte_map_id in world.player_logic.rte_mapping:
159 rte_map = world.static_logic.objects.maps[rte_map_id]
160 to_region = world.static_logic.get_room_region_name(rte_map.rte_room)
161
162 if to_region not in regions:
163 continue
164
165 connection_name = f"Return to {to_region}"
166
167 reqs = AccessRequirements()
168
169 if world.options.fast_travel_access == FastTravelAccess.option_items:
170 reqs.items.add(world.static_logic.get_map_rte_item_name(rte_map_id))
171
172 regions["Menu"].connect(regions[to_region], connection_name, make_location_lambda(reqs, world, None))
173
156 world.multiworld.regions += regions.values() 174 world.multiworld.regions += regions.values()
157 175
158 176
diff --git a/apworld/static_logic.py b/apworld/static_logic.py index 715178e..672ae5a 100644 --- a/apworld/static_logic.py +++ b/apworld/static_logic.py
@@ -18,6 +18,8 @@ class Lingo2StaticLogic:
18 door_id_by_ap_id: dict[int, int] 18 door_id_by_ap_id: dict[int, int]
19 port_id_by_ap_id: dict[int, int] 19 port_id_by_ap_id: dict[int, int]
20 20
21 map_id_by_name: dict[str, int]
22
21 def __init__(self): 23 def __init__(self):
22 self.item_id_to_name = {} 24 self.item_id_to_name = {}
23 self.location_id_to_name = {} 25 self.location_id_to_name = {}
@@ -79,6 +81,10 @@ class Lingo2StaticLogic:
79 for trap_name in ANTI_COLLECTABLE_TRAPS: 81 for trap_name in ANTI_COLLECTABLE_TRAPS:
80 self.item_id_to_name[self.objects.special_ids[trap_name]] = trap_name 82 self.item_id_to_name[self.objects.special_ids[trap_name]] = trap_name
81 83
84 for game_map in self.objects.maps:
85 if game_map.HasField("rte_room"):
86 self.item_id_to_name[game_map.rte_ap_id] = self.get_map_rte_item_name(game_map.id)
87
82 self.item_name_to_id = {name: ap_id for ap_id, name in self.item_id_to_name.items()} 88 self.item_name_to_id = {name: ap_id for ap_id, name in self.item_id_to_name.items()}
83 self.location_name_to_id = {name: ap_id for ap_id, name in self.location_id_to_name.items()} 89 self.location_name_to_id = {name: ap_id for ap_id, name in self.location_id_to_name.items()}
84 90
@@ -90,6 +96,8 @@ class Lingo2StaticLogic:
90 self.door_id_by_ap_id = {door.ap_id: door.id for door in self.objects.doors if door.HasField("ap_id")} 96 self.door_id_by_ap_id = {door.ap_id: door.id for door in self.objects.doors if door.HasField("ap_id")}
91 self.port_id_by_ap_id = {port.ap_id: port.id for port in self.objects.ports if port.HasField("ap_id")} 97 self.port_id_by_ap_id = {port.ap_id: port.id for port in self.objects.ports if port.HasField("ap_id")}
92 98
99 self.map_id_by_name = {game_map.name: game_map.id for game_map in self.objects.maps}
100
93 def get_door_item_name(self, door: data_pb2.Door) -> str: 101 def get_door_item_name(self, door: data_pb2.Door) -> str:
94 return f"{self.get_map_object_map_name(door)} - {door.name}" 102 return f"{self.get_map_object_map_name(door)} - {door.name}"
95 103
@@ -177,6 +185,10 @@ class Lingo2StaticLogic:
177 def get_room_object_map_id(self, obj) -> int: 185 def get_room_object_map_id(self, obj) -> int:
178 return self.objects.rooms[obj.room_id].map_id 186 return self.objects.rooms[obj.room_id].map_id
179 187
188 def get_map_rte_item_name(self, map_id: int) -> str:
189 game_map = self.objects.maps[map_id]
190 return f"Return to {game_map.display_name}"
191
180 def get_data_version(self) -> list[int]: 192 def get_data_version(self) -> list[int]:
181 version = self.objects.version 193 version = self.objects.version
182 return [version.major, version.minor, version.patch] 194 return [version.major, version.minor, version.patch]
diff --git a/data/ids.yaml b/data/ids.yaml index 0042899..f9c59aa 100644 --- a/data/ids.yaml +++ b/data/ids.yaml
@@ -86,6 +86,7 @@ maps:
86 Unkempt Door: 2712 86 Unkempt Door: 2712
87 Unyielding Door: 2720 87 Unyielding Door: 2720
88 X1 Door: 2711 88 X1 Door: 2711
89 rte: 3385
89 daedalus: 90 daedalus:
90 rooms: 91 rooms:
91 After Bee Room: 92 After Bee Room:
@@ -1228,6 +1229,7 @@ maps:
1228 Zoo Prize Door: 1599 1229 Zoo Prize Door: 1599
1229 Zoo South Entrance: 1596 1230 Zoo South Entrance: 1596
1230 Zoo West Entrance: 1594 1231 Zoo West Entrance: 1594
1232 rte: 3376
1231 demo: 1233 demo:
1232 rooms: 1234 rooms:
1233 Backside Area: 1235 Backside Area:
@@ -1370,6 +1372,7 @@ maps:
1370 Keyholder Door: 5 1372 Keyholder Door: 5
1371 Synonyms Door: 2 1373 Synonyms Door: 2
1372 Time Door: 3 1374 Time Door: 3
1375 rte: 3415
1373 icarus: 1376 icarus:
1374 rooms: 1377 rooms:
1375 Above Trans Rights: 1378 Above Trans Rights:
@@ -1499,6 +1502,7 @@ maps:
1499 These Door: 2874 1502 These Door: 2874
1500 Troupe Door: 2867 1503 Troupe Door: 2867
1501 Woman Door: 2859 1504 Woman Door: 2859
1505 rte: 3416
1502 the_advanced: 1506 the_advanced:
1503 rooms: 1507 rooms:
1504 CBA: 1508 CBA:
@@ -1543,6 +1547,7 @@ maps:
1543 MASTERY: 2969 1547 MASTERY: 2969
1544 doors: 1548 doors:
1545 Side Room Puzzles: 2934 1549 Side Room Puzzles: 2934
1550 rte: 3380
1546 the_ancient: 1551 the_ancient:
1547 rooms: 1552 rooms:
1548 Inside: 1553 Inside:
@@ -1554,6 +1559,7 @@ maps:
1554 doors: 1559 doors:
1555 Front Door: 41 1560 Front Door: 41
1556 Lavender Cubes: 43 1561 Lavender Cubes: 43
1562 rte: 3412
1557 the_bearer: 1563 the_bearer:
1558 rooms: 1564 rooms:
1559 Back Area: 1565 Back Area:
@@ -1641,6 +1647,7 @@ maps:
1641 Control Center Color Panel: 3303 1647 Control Center Color Panel: 3303
1642 Exit Door: 47 1648 Exit Door: 47
1643 Overlook Door: 46 1649 Overlook Door: 46
1650 rte: 3373
1644 the_between: 1651 the_between:
1645 rooms: 1652 rooms:
1646 Control Center Side: 1653 Control Center Side:
@@ -1696,6 +1703,7 @@ maps:
1696 Purple Puzzles: 87 1703 Purple Puzzles: 87
1697 Red Puzzles: 81 1704 Red Puzzles: 81
1698 Yellow Puzzles: 82 1705 Yellow Puzzles: 82
1706 rte: 3408
1699 the_butterfly: 1707 the_butterfly:
1700 rooms: 1708 rooms:
1701 Main Area: 1709 Main Area:
@@ -1723,6 +1731,7 @@ maps:
1723 Mastery: 1731 Mastery:
1724 masteries: 1732 masteries:
1725 MASTERY: 140 1733 MASTERY: 140
1734 rte: 3395
1726 the_charismatic: 1735 the_charismatic:
1727 rooms: 1736 rooms:
1728 Latitude Middle: 1737 Latitude Middle:
@@ -1760,6 +1769,7 @@ maps:
1760 Mastery: 1769 Mastery:
1761 masteries: 1770 masteries:
1762 MASTERY: 2988 1771 MASTERY: 2988
1772 rte: 3396
1763 the_colorful: 1773 the_colorful:
1764 rooms: 1774 rooms:
1765 Black Room: 1775 Black Room:
@@ -1826,6 +1836,7 @@ maps:
1826 White Door: 141 1836 White Door: 141
1827 Window Door: 152 1837 Window Door: 152
1828 Yellow Door: 146 1838 Yellow Door: 146
1839 rte: 3365
1829 the_congruent: 1840 the_congruent:
1830 rooms: 1841 rooms:
1831 Flipped Magenta Room: 1842 Flipped Magenta Room:
@@ -1885,6 +1896,7 @@ maps:
1885 Obverse Magenta Door: 173 1896 Obverse Magenta Door: 173
1886 Obverse Yellow Door: 178 1897 Obverse Yellow Door: 178
1887 Obverse Yellow Puzzles: 179 1898 Obverse Yellow Puzzles: 179
1899 rte: 3369
1888 the_crystalline: 1900 the_crystalline:
1889 rooms: 1901 rooms:
1890 Flip Area: 1902 Flip Area:
@@ -1902,6 +1914,7 @@ maps:
1902 MASTERY: 2993 1914 MASTERY: 2993
1903 doors: 1915 doors:
1904 Checkpoint Panels: 3307 1916 Checkpoint Panels: 3307
1917 rte: 3367
1905 the_darkroom: 1918 the_darkroom:
1906 rooms: 1919 rooms:
1907 Congruent Entrance: 1920 Congruent Entrance:
@@ -1956,6 +1969,7 @@ maps:
1956 Double Sided Entrance: 224 1969 Double Sided Entrance: 224
1957 Second Room Entrance: 219 1970 Second Room Entrance: 219
1958 Third Room Entrance: 220 1971 Third Room Entrance: 220
1972 rte: 3409
1959 the_digital: 1973 the_digital:
1960 rooms: 1974 rooms:
1961 Chamber: 1975 Chamber:
@@ -1995,6 +2009,7 @@ maps:
1995 Control Center Blue Panel: 3308 2009 Control Center Blue Panel: 3308
1996 Gallery Entrance: 245 2010 Gallery Entrance: 245
1997 Tree Entrance: 247 2011 Tree Entrance: 247
2012 rte: 3403
1998 the_door: 2013 the_door:
1999 rooms: 2014 rooms:
2000 Main Area: 2015 Main Area:
@@ -2062,6 +2077,7 @@ maps:
2062 10 Panels: 3310 2077 10 Panels: 3310
2063 15 Panels: 3311 2078 15 Panels: 3311
2064 5 Panels: 3309 2079 5 Panels: 3309
2080 rte: 3384
2065 the_entry: 2081 the_entry:
2066 rooms: 2082 rooms:
2067 Blue Alcove: 2083 Blue Alcove:
@@ -2312,6 +2328,7 @@ maps:
2312 panels: 2328 panels:
2313 CACTUS: 410 2329 CACTUS: 410
2314 TAIL: 411 2330 TAIL: 411
2331 rte: 3397
2315 the_fuzzy: 2332 the_fuzzy:
2316 rooms: 2333 rooms:
2317 Main Area: 2334 Main Area:
@@ -2339,6 +2356,7 @@ maps:
2339 doors: 2356 doors:
2340 Black Panels: 3021 2357 Black Panels: 3021
2341 Green Panels: 3321 2358 Green Panels: 3321
2359 rte: 3420
2342 the_gallery: 2360 the_gallery:
2343 rooms: 2361 rooms:
2344 Back Room: 2362 Back Room:
@@ -2373,6 +2391,7 @@ maps:
2373 Wise Painting: 416 2391 Wise Painting: 416
2374 Wondrous Painting: 422 2392 Wondrous Painting: 422
2375 Words Painting: 424 2393 Words Painting: 424
2394 rte: 3394
2376 the_gold: 2395 the_gold:
2377 rooms: 2396 rooms:
2378 The Whole Thing: 2397 The Whole Thing:
@@ -2391,6 +2410,7 @@ maps:
2391 SEVERE: 437 2410 SEVERE: 437
2392 doors: 2411 doors:
2393 Remember Panel: 3323 2412 Remember Panel: 3323
2413 rte: 3370
2394 the_great: 2414 the_great:
2395 rooms: 2415 rooms:
2396 Back Area: 2416 Back Area:
@@ -2698,6 +2718,7 @@ maps:
2698 West/East Divider: 443 2718 West/East Divider: 443
2699 Why Is It Not Red: 3325 2719 Why Is It Not Red: 3325
2700 Zero Room Panels: 470 2720 Zero Room Panels: 470
2721 rte: 3405
2701 the_hinterlands: 2722 the_hinterlands:
2702 rooms: 2723 rooms:
2703 Main Area: 2724 Main Area:
@@ -2764,6 +2785,7 @@ maps:
2764 WILDFLOWER: 670 2785 WILDFLOWER: 670
2765 doors: 2786 doors:
2766 Room 8 Door: 627 2787 Room 8 Door: 627
2788 rte: 3401
2767 the_impressive: 2789 the_impressive:
2768 rooms: 2790 rooms:
2769 Green Eye: 2791 Green Eye:
@@ -2793,6 +2815,7 @@ maps:
2793 Front Door: 671 2815 Front Door: 671
2794 Green Eye Panels: 3337 2816 Green Eye Panels: 3337
2795 Side Door: 672 2817 Side Door: 672
2818 rte: 3386
2796 the_invisible: 2819 the_invisible:
2797 rooms: 2820 rooms:
2798 Entrance: 2821 Entrance:
@@ -2807,6 +2830,7 @@ maps:
2807 ENTRY: 3215 2830 ENTRY: 3215
2808 doors: 2831 doors:
2809 Maze Entrance: 684 2832 Maze Entrance: 684
2833 rte: 3410
2810 the_jubilant: 2834 the_jubilant:
2811 rooms: 2835 rooms:
2812 Main Area: 2836 Main Area:
@@ -2838,6 +2862,7 @@ maps:
2838 doors: 2862 doors:
2839 Side Door: 687 2863 Side Door: 687
2840 Side Room Puzzles: 3339 2864 Side Room Puzzles: 3339
2865 rte: 3411
2841 the_keen: 2866 the_keen:
2842 rooms: 2867 rooms:
2843 Main Area: 2868 Main Area:
@@ -2855,6 +2880,7 @@ maps:
2855 GREAT: 3217 2880 GREAT: 3217
2856 doors: 2881 doors:
2857 All Panels: 707 2882 All Panels: 707
2883 rte: 3402
2858 the_liberated: 2884 the_liberated:
2859 rooms: 2885 rooms:
2860 Puzzle Room: 2886 Puzzle Room:
@@ -2871,6 +2897,7 @@ maps:
2871 ENTRY: 3218 2897 ENTRY: 3218
2872 doors: 2898 doors:
2873 Door: 718 2899 Door: 718
2900 rte: 3422
2874 the_linear: 2901 the_linear:
2875 rooms: 2902 rooms:
2876 Room: 2903 Room:
@@ -2887,6 +2914,7 @@ maps:
2887 GREAT: 3219 2914 GREAT: 3219
2888 doors: 2915 doors:
2889 Behind The Keen Gravestone: 727 2916 Behind The Keen Gravestone: 727
2917 rte: 3393
2890 the_lionized: 2918 the_lionized:
2891 rooms: 2919 rooms:
2892 Puzzle Room: 2920 Puzzle Room:
@@ -2901,6 +2929,7 @@ maps:
2901 ROCK: 740 2929 ROCK: 740
2902 ports: 2930 ports:
2903 ENTRY: 3220 2931 ENTRY: 3220
2932 rte: 3404
2904 the_literate: 2933 the_literate:
2905 rooms: 2934 rooms:
2906 Puzzle Room: 2935 Puzzle Room:
@@ -2917,6 +2946,7 @@ maps:
2917 ENTRY: 3221 2946 ENTRY: 3221
2918 doors: 2947 doors:
2919 Door: 745 2948 Door: 745
2949 rte: 3382
2920 the_lively: 2950 the_lively:
2921 rooms: 2951 rooms:
2922 Puzzle Room: 2952 Puzzle Room:
@@ -2931,6 +2961,7 @@ maps:
2931 SOPRANO: 757 2961 SOPRANO: 757
2932 ports: 2962 ports:
2933 BETWEEN: 3222 2963 BETWEEN: 3222
2964 rte: 3383
2934 the_nuanced: 2965 the_nuanced:
2935 rooms: 2966 rooms:
2936 Back Room: 2967 Back Room:
@@ -2968,6 +2999,7 @@ maps:
2968 Green Side Puzzles: 764 2999 Green Side Puzzles: 764
2969 Main Room Door: 2750 3000 Main Room Door: 2750
2970 Stores Panel: 3340 3001 Stores Panel: 3340
3002 rte: 3398
2971 the_orb: 3003 the_orb:
2972 rooms: 3004 rooms:
2973 B Room: 3005 B Room:
@@ -2992,6 +3024,7 @@ maps:
2992 Middle Room: 3024 Middle Room:
2993 ports: 3025 ports:
2994 MID: 3226 3026 MID: 3226
3027 rte: 3381
2995 the_owl: 3028 the_owl:
2996 rooms: 3029 rooms:
2997 Blue Room: 3030 Blue Room:
@@ -3075,6 +3108,7 @@ maps:
3075 Sky Owl: 813 3108 Sky Owl: 813
3076 Sky Top Doors: 805 3109 Sky Top Doors: 805
3077 White Owl: 816 3110 White Owl: 816
3111 rte: 3414
3078 the_parthenon: 3112 the_parthenon:
3079 rooms: 3113 rooms:
3080 Lavender Area: 3114 Lavender Area:
@@ -3100,6 +3134,7 @@ maps:
3100 doors: 3134 doors:
3101 K2 Door: 852 3135 K2 Door: 852
3102 Lavender Area Puzzles: 3351 3136 Lavender Area Puzzles: 3351
3137 rte: 3418
3103 the_partial: 3138 the_partial:
3104 rooms: 3139 rooms:
3105 Control Center Entrance: 3140 Control Center Entrance:
@@ -3139,11 +3174,13 @@ maps:
3139 L Entered: 2843 3174 L Entered: 2843
3140 Main Room Puzzles: 863 3175 Main Room Puzzles: 863
3141 P Door: 864 3176 P Door: 864
3177 rte: 3407
3142 the_perceptive: 3178 the_perceptive:
3143 rooms: 3179 rooms:
3144 Main Area: 3180 Main Area:
3145 ports: 3181 ports:
3146 CC: 3235 3182 CC: 3235
3183 rte: 3374
3147 the_plaza: 3184 the_plaza:
3148 rooms: 3185 rooms:
3149 Bottom Left Room: 3186 Bottom Left Room:
@@ -3263,6 +3300,7 @@ maps:
3263 Southwest Puzzles: 898 3300 Southwest Puzzles: 898
3264 Symbolic Entrance: 889 3301 Symbolic Entrance: 889
3265 Turtle Entrance: 891 3302 Turtle Entrance: 891
3303 rte: 3390
3266 the_quiet: 3304 the_quiet:
3267 rooms: 3305 rooms:
3268 Keyholder Room: 3306 Keyholder Room:
@@ -3286,6 +3324,7 @@ maps:
3286 DAEDALUS: 3242 3324 DAEDALUS: 3242
3287 doors: 3325 doors:
3288 Side Door: 970 3326 Side Door: 970
3327 rte: 3419
3289 the_relentless: 3328 the_relentless:
3290 rooms: 3329 rooms:
3291 All: 3330 All:
@@ -3481,6 +3520,7 @@ maps:
3481 Magenta Puzzles: 1033 3520 Magenta Puzzles: 1033
3482 Yellow Door: 1030 3521 Yellow Door: 1030
3483 Yellow Puzzles: 1034 3522 Yellow Puzzles: 1034
3523 rte: 3377
3484 the_revitalized: 3524 the_revitalized:
3485 rooms: 3525 rooms:
3486 Bye Room: 3526 Bye Room:
@@ -3508,6 +3548,7 @@ maps:
3508 WON: 1135 3548 WON: 1135
3509 doors: 3549 doors:
3510 Return Panel: 1128 3550 Return Panel: 1128
3551 rte: 3378
3511 the_shop: 3552 the_shop:
3512 rooms: 3553 rooms:
3513 Main Area: 3554 Main Area:
@@ -3542,6 +3583,7 @@ maps:
3542 Books Puzzles: 1136 3583 Books Puzzles: 1136
3543 Games Puzzles: 1137 3584 Games Puzzles: 1137
3544 N Entered: 2971 3585 N Entered: 2971
3586 rte: 3421
3545 the_sirenic: 3587 the_sirenic:
3546 rooms: 3588 rooms:
3547 Mastery: 3589 Mastery:
@@ -3572,6 +3614,7 @@ maps:
3572 PLAZA: 3248 3614 PLAZA: 3248
3573 doors: 3615 doors:
3574 Entrance: 1161 3616 Entrance: 1161
3617 rte: 3389
3575 the_stellar: 3618 the_stellar:
3576 rooms: 3619 rooms:
3577 Blue Panel: 3620 Blue Panel:
@@ -3624,6 +3667,7 @@ maps:
3624 Entrance: 2995 3667 Entrance: 2995
3625 Question Panels: 3017 3668 Question Panels: 3017
3626 Welcome Back Panels: 3359 3669 Welcome Back Panels: 3359
3670 rte: 3387
3627 the_stormy: 3671 the_stormy:
3628 rooms: 3672 rooms:
3629 Center: 3673 Center:
@@ -3654,6 +3698,7 @@ maps:
3654 panels: 3698 panels:
3655 RAIN: 1191 3699 RAIN: 1191
3656 SNOW: 1190 3700 SNOW: 1190
3701 rte: 3368
3657 the_sturdy: 3702 the_sturdy:
3658 rooms: 3703 rooms:
3659 Main Area: 3704 Main Area:
@@ -3672,6 +3717,7 @@ maps:
3672 S2 Area: 3717 S2 Area:
3673 panels: 3718 panels:
3674 COLORS: 1201 3719 COLORS: 1201
3720 rte: 3391
3675 the_sun_temple: 3721 the_sun_temple:
3676 rooms: 3722 rooms:
3677 Entrance: 3723 Entrance:
@@ -3693,6 +3739,7 @@ maps:
3693 LAWN: 1215 3739 LAWN: 1215
3694 doors: 3740 doors:
3695 Entrance: 1210 3741 Entrance: 1210
3742 rte: 3375
3696 the_sweet: 3743 the_sweet:
3697 rooms: 3744 rooms:
3698 Main Area: 3745 Main Area:
@@ -3728,6 +3775,7 @@ maps:
3728 ports: 3775 ports:
3729 EXIT1: 3254 3776 EXIT1: 3254
3730 EXIT2: 3255 3777 EXIT2: 3255
3778 rte: 3400
3731 the_symbolic: 3779 the_symbolic:
3732 rooms: 3780 rooms:
3733 Black Room: 3781 Black Room:
@@ -3924,6 +3972,7 @@ maps:
3924 Tutorial Door: 2754 3972 Tutorial Door: 2754
3925 Tutorial Panels: 2283 3973 Tutorial Panels: 2283
3926 Whirred Room Panels: 2284 3974 Whirred Room Panels: 2284
3975 rte: 3379
3927 the_talented: 3976 the_talented:
3928 rooms: 3977 rooms:
3929 Back Room: 3978 Back Room:
@@ -3961,6 +4010,7 @@ maps:
3961 Brown Side Panels: 2428 4010 Brown Side Panels: 2428
3962 Keyholder Hint Panel: 3360 4011 Keyholder Hint Panel: 3360
3963 Main Room Door: 2429 4012 Main Room Door: 2429
4013 rte: 3388
3964 the_tenacious: 4014 the_tenacious:
3965 rooms: 4015 rooms:
3966 Color Room: 4016 Color Room:
@@ -3989,6 +4039,7 @@ maps:
3989 doors: 4039 doors:
3990 K Entered: 2844 4040 K Entered: 2844
3991 Paintings Door: 2453 4041 Paintings Door: 2453
4042 rte: 3399
3992 the_three_doors: 4043 the_three_doors:
3993 rooms: 4044 rooms:
3994 Dead End Room: 4045 Dead End Room:
@@ -4032,6 +4083,7 @@ maps:
4032 NEXT: 3266 4083 NEXT: 3266
4033 doors: 4084 doors:
4034 The Three Doors Gravestone: 2460 4085 The Three Doors Gravestone: 2460
4086 rte: 3392
4035 the_tower: 4087 the_tower:
4036 rooms: 4088 rooms:
4037 First Floor: 4089 First Floor:
@@ -4111,6 +4163,7 @@ maps:
4111 Fourth Floor Puzzles: 2481 4163 Fourth Floor Puzzles: 2481
4112 Second Floor Puzzles: 2479 4164 Second Floor Puzzles: 2479
4113 Third Floor Puzzles: 2480 4165 Third Floor Puzzles: 2480
4166 rte: 3413
4114 the_tree: 4167 the_tree:
4115 rooms: 4168 rooms:
4116 Bearer Entrance: 4169 Bearer Entrance:
@@ -4156,6 +4209,7 @@ maps:
4156 doors: 4209 doors:
4157 Control Center Brown Door: 2548 4210 Control Center Brown Door: 2548
4158 The Tree Gravestone: 2549 4211 The Tree Gravestone: 2549
4212 rte: 3371
4159 the_unkempt: 4213 the_unkempt:
4160 rooms: 4214 rooms:
4161 Control Center Entrance: 4215 Control Center Entrance:
@@ -4277,6 +4331,7 @@ maps:
4277 Near Teal Door Panels: 3361 4331 Near Teal Door Panels: 3361
4278 Routine Out Chute: 2584 4332 Routine Out Chute: 2584
4279 W2 Room Door: 2581 4333 W2 Room Door: 2581
4334 rte: 3417
4280 the_unyielding: 4335 the_unyielding:
4281 rooms: 4336 rooms:
4282 Bearer Entrance: 4337 Bearer Entrance:
@@ -4539,6 +4594,7 @@ maps:
4539 Southwest Corner Behind: 1254 4594 Southwest Corner Behind: 1254
4540 Southwest Room: 1431 4595 Southwest Room: 1431
4541 Yellow Room Puzzles: 1250 4596 Yellow Room Puzzles: 1250
4597 rte: 3366
4542 the_wise: 4598 the_wise:
4543 rooms: 4599 rooms:
4544 Entry: 4600 Entry:
@@ -4571,6 +4627,7 @@ maps:
4571 WORDS: 2688 4627 WORDS: 2688
4572 doors: 4628 doors:
4573 Front Door: 2666 4629 Front Door: 2666
4630 rte: 3372
4574 the_wondrous: 4631 the_wondrous:
4575 rooms: 4632 rooms:
4576 Entry: 4633 Entry:
@@ -4593,6 +4650,7 @@ maps:
4593 SHRINK: 2699 4650 SHRINK: 2699
4594 doors: 4651 doors:
4595 Shrink Door: 2689 4652 Shrink Door: 2689
4653 rte: 3406
4596 the_words: 4654 the_words:
4597 rooms: 4655 rooms:
4598 Main Area: 4656 Main Area:
@@ -4607,6 +4665,7 @@ maps:
4607 TREE: 2705 4665 TREE: 2705
4608 ports: 4666 ports:
4609 ENTRY: 3283 4667 ENTRY: 3283
4668 rte: 3423
4610letters: 4669letters:
4611 a1: 596 4670 a1: 596
4612 a2: 6 4671 a2: 6
diff --git a/data/maps/control_center/metadata.txtpb b/data/maps/control_center/metadata.txtpb index bf89670..e56f7a9 100644 --- a/data/maps/control_center/metadata.txtpb +++ b/data/maps/control_center/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "Control Center" 1display_name: "Control Center"
2rte_room: "Main Area"
diff --git a/data/maps/daedalus/metadata.txtpb b/data/maps/daedalus/metadata.txtpb index 6ad90e1..2f3da90 100644 --- a/data/maps/daedalus/metadata.txtpb +++ b/data/maps/daedalus/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "Daedalus" 1display_name: "Daedalus"
2rte_room: "Starting Room"
2daedalus_only_mode: DAED_ONLY_ALLOW 3daedalus_only_mode: DAED_ONLY_ALLOW
3# These paintings can't be shuffled because they are behind panels. 4# These paintings can't be shuffled because they are behind panels.
4excluded_nodes: "Components/Paintings/Group3/mouse" 5excluded_nodes: "Components/Paintings/Group3/mouse"
diff --git a/data/maps/demo/metadata.txtpb b/data/maps/demo/metadata.txtpb index 4f61386..acaf461 100644 --- a/data/maps/demo/metadata.txtpb +++ b/data/maps/demo/metadata.txtpb
@@ -1,5 +1,7 @@
1display_name: "Demo" 1display_name: "Demo"
2type: DEMO 2type: DEMO
3# No RTE because this is a secret map.
4
3# This painting is above a panel and can't be entered. 5# This painting is above a panel and can't be entered.
4excluded_nodes: "Meshes/owl" 6excluded_nodes: "Meshes/owl"
5# The map's mastery is created at runtime. 7# The map's mastery is created at runtime.
diff --git a/data/maps/four_rooms/metadata.txtpb b/data/maps/four_rooms/metadata.txtpb index ac4631d..ba66847 100644 --- a/data/maps/four_rooms/metadata.txtpb +++ b/data/maps/four_rooms/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "Four Rooms" 1display_name: "Four Rooms"
2rte_room: "Synonyms Room"
diff --git a/data/maps/icarus/metadata.txtpb b/data/maps/icarus/metadata.txtpb index 8512d8e..c2a3656 100644 --- a/data/maps/icarus/metadata.txtpb +++ b/data/maps/icarus/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "Icarus" 1display_name: "Icarus"
2type: ICARUS 2type: ICARUS
3rte_room: "Welcome Spine (Obverse)"
3# The map's mastery is created at runtime. 4# The map's mastery is created at runtime.
4custom_nodes: "Components/Collectables/collectable" 5custom_nodes: "Components/Collectables/collectable"
diff --git a/data/maps/the_advanced/metadata.txtpb b/data/maps/the_advanced/metadata.txtpb index cee10b6..71d3925 100644 --- a/data/maps/the_advanced/metadata.txtpb +++ b/data/maps/the_advanced/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Advanced" 1display_name: "The Advanced"
2type: GIFT_MAP 2type: GIFT_MAP
3rte_room: "Main Area"
3# The map's mastery is created at runtime. 4# The map's mastery is created at runtime.
4custom_nodes: "Components/Collectables/collectable" 5custom_nodes: "Components/Collectables/collectable"
diff --git a/data/maps/the_ancient/metadata.txtpb b/data/maps/the_ancient/metadata.txtpb index cf6bce3..0f321dd 100644 --- a/data/maps/the_ancient/metadata.txtpb +++ b/data/maps/the_ancient/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Ancient" 1display_name: "The Ancient"
2rte_room: "Outside"
diff --git a/data/maps/the_bearer/metadata.txtpb b/data/maps/the_bearer/metadata.txtpb index 584c71e..003473a 100644 --- a/data/maps/the_bearer/metadata.txtpb +++ b/data/maps/the_bearer/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Bearer" 1display_name: "The Bearer"
2rte_room: "Entry"
diff --git a/data/maps/the_between/metadata.txtpb b/data/maps/the_between/metadata.txtpb index 33f96a1..6134447 100644 --- a/data/maps/the_between/metadata.txtpb +++ b/data/maps/the_between/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Between" 1display_name: "The Between"
2rte_room: "Main Area"
diff --git a/data/maps/the_butterfly/metadata.txtpb b/data/maps/the_butterfly/metadata.txtpb index 5206dfe..5933359 100644 --- a/data/maps/the_butterfly/metadata.txtpb +++ b/data/maps/the_butterfly/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Butterfly" 1display_name: "The Butterfly"
2rte_room: "Main Area"
diff --git a/data/maps/the_charismatic/metadata.txtpb b/data/maps/the_charismatic/metadata.txtpb index 8d26105..740c04a 100644 --- a/data/maps/the_charismatic/metadata.txtpb +++ b/data/maps/the_charismatic/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Charismatic" 1display_name: "The Charismatic"
2type: GIFT_MAP 2type: GIFT_MAP
3rte_room: "Main Area"
3# The map's mastery is created at runtime. 4# The map's mastery is created at runtime.
4custom_nodes: "Components/Collectables/collectable" 5custom_nodes: "Components/Collectables/collectable"
diff --git a/data/maps/the_colorful/metadata.txtpb b/data/maps/the_colorful/metadata.txtpb index 5e67428..1300c79 100644 --- a/data/maps/the_colorful/metadata.txtpb +++ b/data/maps/the_colorful/metadata.txtpb
@@ -1,3 +1,4 @@
1display_name: "The Colorful" 1display_name: "The Colorful"
2rte_room: "White Room"
2# This has something to do with the FISH/FISHES proxy. 3# This has something to do with the FISH/FISHES proxy.
3excluded_nodes: "Components/panel_fake" 4excluded_nodes: "Components/panel_fake"
diff --git a/data/maps/the_congruent/metadata.txtpb b/data/maps/the_congruent/metadata.txtpb index 6260ed4..038bbd6 100644 --- a/data/maps/the_congruent/metadata.txtpb +++ b/data/maps/the_congruent/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Congruent" 1display_name: "The Congruent"
2rte_room: "Main Area"
2worldport_entrance { 3worldport_entrance {
3 room: "Main Area" 4 room: "Main Area"
4 name: "DARKROOM" 5 name: "DARKROOM"
diff --git a/data/maps/the_crystalline/metadata.txtpb b/data/maps/the_crystalline/metadata.txtpb index 09b0f1d..2447af6 100644 --- a/data/maps/the_crystalline/metadata.txtpb +++ b/data/maps/the_crystalline/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Crystalline" 1display_name: "The Crystalline"
2type: GIFT_MAP 2type: GIFT_MAP
3rte_room: "Main Area"
3# The map's mastery is created at runtime. 4# The map's mastery is created at runtime.
4custom_nodes: "Components/Collectables/collectable" 5custom_nodes: "Components/Collectables/collectable"
diff --git a/data/maps/the_darkroom/metadata.txtpb b/data/maps/the_darkroom/metadata.txtpb index e4a1290..0b122e9 100644 --- a/data/maps/the_darkroom/metadata.txtpb +++ b/data/maps/the_darkroom/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Darkroom" 1display_name: "The Darkroom"
2rte_room: "First Room"
diff --git a/data/maps/the_digital/metadata.txtpb b/data/maps/the_digital/metadata.txtpb index e505dcf..ce2f2c5 100644 --- a/data/maps/the_digital/metadata.txtpb +++ b/data/maps/the_digital/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Digital" 1display_name: "The Digital"
2rte_room: "Main Area"
diff --git a/data/maps/the_door/metadata.txtpb b/data/maps/the_door/metadata.txtpb index 85dc340..a253d9f 100644 --- a/data/maps/the_door/metadata.txtpb +++ b/data/maps/the_door/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Door" 1display_name: "The Door"
2# No RTE because it would make The Wondrous pointless.
diff --git a/data/maps/the_double_sided/metadata.txtpb b/data/maps/the_double_sided/metadata.txtpb index 6f56c63..1bcf6ac 100644 --- a/data/maps/the_double_sided/metadata.txtpb +++ b/data/maps/the_double_sided/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Double Sided" 1display_name: "The Double Sided"
2rte_room: "Start"
2worldport_entrance { 3worldport_entrance {
3 room: "Start" 4 room: "Start"
4 name: "DARKROOM" 5 name: "DARKROOM"
diff --git a/data/maps/the_entry/metadata.txtpb b/data/maps/the_entry/metadata.txtpb index da2194b..d20137c 100644 --- a/data/maps/the_entry/metadata.txtpb +++ b/data/maps/the_entry/metadata.txtpb
@@ -1,4 +1,6 @@
1display_name: "The Entry" 1display_name: "The Entry"
2# No RTE because this map is always an RTE.
3
2# This is a debug warp to The Ancient and as far as I can tell there is no way 4# This is a debug warp to The Ancient and as far as I can tell there is no way
3# to access it. 5# to access it.
4excluded_nodes: "Components/Warps/worldport-test" 6excluded_nodes: "Components/Warps/worldport-test"
diff --git a/data/maps/the_extravagant/metadata.txtpb b/data/maps/the_extravagant/metadata.txtpb index 0a35c90..77d3b4b 100644 --- a/data/maps/the_extravagant/metadata.txtpb +++ b/data/maps/the_extravagant/metadata.txtpb
@@ -1,3 +1,4 @@
1display_name: "The Extravagant" 1display_name: "The Extravagant"
2rte_room: "Y Minus First Floor"
2# This appears to be completely inaccessible. 3# This appears to be completely inaccessible.
3excluded_nodes: "Components/Warps/worldport" 4excluded_nodes: "Components/Warps/worldport"
diff --git a/data/maps/the_fuzzy/metadata.txtpb b/data/maps/the_fuzzy/metadata.txtpb index b4178c7..ded955b 100644 --- a/data/maps/the_fuzzy/metadata.txtpb +++ b/data/maps/the_fuzzy/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Fuzzy" 1display_name: "The Fuzzy"
2type: GIFT_MAP 2type: GIFT_MAP
3rte_room: "Main Area"
3# The map's mastery is created at runtime. 4# The map's mastery is created at runtime.
4custom_nodes: "Components/Collectables/collectable" 5custom_nodes: "Components/Collectables/collectable"
diff --git a/data/maps/the_gallery/metadata.txtpb b/data/maps/the_gallery/metadata.txtpb index 9d02a11..a1bbe25 100644 --- a/data/maps/the_gallery/metadata.txtpb +++ b/data/maps/the_gallery/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Gallery" 1display_name: "The Gallery"
2rte_room: "Main Area"
2daedalus_only_mode: DAED_ONLY_PARTIAL 3daedalus_only_mode: DAED_ONLY_PARTIAL
3# These are the eyes in the foyer, and aren't normal paintings. 4# These are the eyes in the foyer, and aren't normal paintings.
4excluded_nodes: "Components/Paintings/Starting/eye" 5excluded_nodes: "Components/Paintings/Starting/eye"
diff --git a/data/maps/the_gold/metadata.txtpb b/data/maps/the_gold/metadata.txtpb index c4a8b3b..7c20bae 100644 --- a/data/maps/the_gold/metadata.txtpb +++ b/data/maps/the_gold/metadata.txtpb
@@ -1,2 +1,3 @@
1display_name: "The Gold" 1display_name: "The Gold"
2daedalus_only_mode: DAED_ONLY_ALLOW 2daedalus_only_mode: DAED_ONLY_ALLOW
3# No RTE because it would trivialize Gold Ending.
diff --git a/data/maps/the_graveyard/metadata.txtpb b/data/maps/the_graveyard/metadata.txtpb index 0bac222..47a48e0 100644 --- a/data/maps/the_graveyard/metadata.txtpb +++ b/data/maps/the_graveyard/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Graveyard" 1display_name: "The Graveyard"
2rte_room: "Outside"
2# These really shouldn't be shuffled because it would make Black Ending trivial. 3# These really shouldn't be shuffled because it would make Black Ending trivial.
3excluded_nodes: "Components/Paintings/grave" 4excluded_nodes: "Components/Paintings/grave"
4excluded_nodes: "Components/Paintings/grave2" 5excluded_nodes: "Components/Paintings/grave2"
diff --git a/data/maps/the_great/metadata.txtpb b/data/maps/the_great/metadata.txtpb index b01faf7..7bbecd4 100644 --- a/data/maps/the_great/metadata.txtpb +++ b/data/maps/the_great/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Great" 1display_name: "The Great"
2rte_room: "Main Area"
2# This can't be shuffled because it is tilted. 3# This can't be shuffled because it is tilted.
3excluded_nodes: "Components/Paintings/u" 4excluded_nodes: "Components/Paintings/u"
4# This can't be shuffled because it is on the ground. 5# This can't be shuffled because it is on the ground.
diff --git a/data/maps/the_hinterlands/metadata.txtpb b/data/maps/the_hinterlands/metadata.txtpb index dd1e627..8148c2a 100644 --- a/data/maps/the_hinterlands/metadata.txtpb +++ b/data/maps/the_hinterlands/metadata.txtpb
@@ -1,4 +1,6 @@
1display_name: "The Hinterlands" 1display_name: "The Hinterlands"
2# No RTE because the map is not randomized.
3
2# I'm not currently planning on shuffling anything in here. 4# I'm not currently planning on shuffling anything in here.
3excluded_nodes: "Components/Paintings/C" 5excluded_nodes: "Components/Paintings/C"
4excluded_nodes: "Components/Paintings/E" 6excluded_nodes: "Components/Paintings/E"
diff --git a/data/maps/the_hive/metadata.txtpb b/data/maps/the_hive/metadata.txtpb index 8f3894c..7be7b9e 100644 --- a/data/maps/the_hive/metadata.txtpb +++ b/data/maps/the_hive/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Hive" 1display_name: "The Hive"
2rte_room: "Main Area"
diff --git a/data/maps/the_impressive/metadata.txtpb b/data/maps/the_impressive/metadata.txtpb index 63929cb..7a0a052 100644 --- a/data/maps/the_impressive/metadata.txtpb +++ b/data/maps/the_impressive/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Impressive" 1display_name: "The Impressive"
2rte_room: "Lobby"
2# These are apparently little eyes on the Green Eye panel pedestals? I don't 3# These are apparently little eyes on the Green Eye panel pedestals? I don't
3# think they're ever visible in gameplay. 4# think they're ever visible in gameplay.
4excluded_nodes: "Meshes/eye" 5excluded_nodes: "Meshes/eye"
diff --git a/data/maps/the_invisible/metadata.txtpb b/data/maps/the_invisible/metadata.txtpb index 967bf19..e980466 100644 --- a/data/maps/the_invisible/metadata.txtpb +++ b/data/maps/the_invisible/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Invisible" 1display_name: "The Invisible"
2rte_room: "Entrance"
diff --git a/data/maps/the_jubilant/metadata.txtpb b/data/maps/the_jubilant/metadata.txtpb index 4af1874..019b0b2 100644 --- a/data/maps/the_jubilant/metadata.txtpb +++ b/data/maps/the_jubilant/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Jubilant" 1display_name: "The Jubilant"
2rte_room: "Main Area"
2worldport_entrance { 3worldport_entrance {
3 room: "Main Area" 4 room: "Main Area"
4 name: "GREAT" 5 name: "GREAT"
diff --git a/data/maps/the_keen/metadata.txtpb b/data/maps/the_keen/metadata.txtpb index 909f420..8417c2e 100644 --- a/data/maps/the_keen/metadata.txtpb +++ b/data/maps/the_keen/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Keen" 1display_name: "The Keen"
2rte_room: "Main Area"
2worldport_entrance { 3worldport_entrance {
3 room: "Main Area" 4 room: "Main Area"
4 name: "GREAT" 5 name: "GREAT"
diff --git a/data/maps/the_liberated/metadata.txtpb b/data/maps/the_liberated/metadata.txtpb index b9b4321..ebedbec 100644 --- a/data/maps/the_liberated/metadata.txtpb +++ b/data/maps/the_liberated/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Liberated" 1display_name: "The Liberated"
2rte_room: "Puzzle Room"
2worldport_entrance { 3worldport_entrance {
3 room: "Puzzle Room" 4 room: "Puzzle Room"
4 name: "ENTRY" 5 name: "ENTRY"
diff --git a/data/maps/the_linear/metadata.txtpb b/data/maps/the_linear/metadata.txtpb index 838bb2b..cc9b4ce 100644 --- a/data/maps/the_linear/metadata.txtpb +++ b/data/maps/the_linear/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Linear" 1display_name: "The Linear"
2rte_room: "Room"
2worldport_entrance { 3worldport_entrance {
3 room: "Room" 4 room: "Room"
4 name: "GREAT" 5 name: "GREAT"
diff --git a/data/maps/the_lionized/metadata.txtpb b/data/maps/the_lionized/metadata.txtpb index 8d6168d..587143d 100644 --- a/data/maps/the_lionized/metadata.txtpb +++ b/data/maps/the_lionized/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Lionized" 1display_name: "The Lionized"
2rte_room: "Puzzle Room"
2worldport_entrance { 3worldport_entrance {
3 room: "Puzzle Room" 4 room: "Puzzle Room"
4 name: "ENTRY" 5 name: "ENTRY"
diff --git a/data/maps/the_literate/metadata.txtpb b/data/maps/the_literate/metadata.txtpb index 0e04306..28f5ccd 100644 --- a/data/maps/the_literate/metadata.txtpb +++ b/data/maps/the_literate/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Literate" 1display_name: "The Literate"
2rte_room: "Puzzle Room"
2worldport_entrance { 3worldport_entrance {
3 room: "Puzzle Room" 4 room: "Puzzle Room"
4 name: "ENTRY" 5 name: "ENTRY"
diff --git a/data/maps/the_lively/metadata.txtpb b/data/maps/the_lively/metadata.txtpb index acd1177..c088afe 100644 --- a/data/maps/the_lively/metadata.txtpb +++ b/data/maps/the_lively/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Lively" 1display_name: "The Lively"
2rte_room: "Puzzle Room"
2worldport_entrance { 3worldport_entrance {
3 room: "Puzzle Room" 4 room: "Puzzle Room"
4 name: "BETWEEN" 5 name: "BETWEEN"
diff --git a/data/maps/the_nuanced/metadata.txtpb b/data/maps/the_nuanced/metadata.txtpb index 4ac9b13..a3405ff 100644 --- a/data/maps/the_nuanced/metadata.txtpb +++ b/data/maps/the_nuanced/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Nuanced" 1display_name: "The Nuanced"
2rte_room: "Main Room"
2worldport_entrance { 3worldport_entrance {
3 room: "Main Room" 4 room: "Main Room"
4 name: "UNYIELDING" 5 name: "UNYIELDING"
diff --git a/data/maps/the_orb/metadata.txtpb b/data/maps/the_orb/metadata.txtpb index 0b25353..a33dbf6 100644 --- a/data/maps/the_orb/metadata.txtpb +++ b/data/maps/the_orb/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Orb" 1display_name: "The Orb"
2rte_room: "Main Area"
2# These are inaccessible, and were probably just copy pasted from the other 3# These are inaccessible, and were probably just copy pasted from the other
3# rooms. 4# rooms.
4excluded_nodes: "Components/Warps/worldport2" 5excluded_nodes: "Components/Warps/worldport2"
diff --git a/data/maps/the_owl/metadata.txtpb b/data/maps/the_owl/metadata.txtpb index a2004f8..11d79b0 100644 --- a/data/maps/the_owl/metadata.txtpb +++ b/data/maps/the_owl/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Owl" 1display_name: "The Owl"
2rte_room: "R2C2 Bottom"
diff --git a/data/maps/the_parthenon/metadata.txtpb b/data/maps/the_parthenon/metadata.txtpb index 8696c33..203d712 100644 --- a/data/maps/the_parthenon/metadata.txtpb +++ b/data/maps/the_parthenon/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Parthenon" 1display_name: "The Parthenon"
2rte_room: "Main Area"
diff --git a/data/maps/the_partial/metadata.txtpb b/data/maps/the_partial/metadata.txtpb index 48e9f42..9d5ad4a 100644 --- a/data/maps/the_partial/metadata.txtpb +++ b/data/maps/the_partial/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Partial" 1display_name: "The Partial"
2rte_room: "Obverse Side"
diff --git a/data/maps/the_perceptive/metadata.txtpb b/data/maps/the_perceptive/metadata.txtpb index 6942cab..22eb1d5 100644 --- a/data/maps/the_perceptive/metadata.txtpb +++ b/data/maps/the_perceptive/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Perceptive" 1display_name: "The Perceptive"
2rte_room: "Main Area"
2worldport_entrance { 3worldport_entrance {
3 room: "Main Area" 4 room: "Main Area"
4 name: "CC" 5 name: "CC"
diff --git a/data/maps/the_plaza/metadata.txtpb b/data/maps/the_plaza/metadata.txtpb index 262fe99..6ff2e83 100644 --- a/data/maps/the_plaza/metadata.txtpb +++ b/data/maps/the_plaza/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Plaza" 1display_name: "The Plaza"
2rte_room: "Main Area"
diff --git a/data/maps/the_quiet/metadata.txtpb b/data/maps/the_quiet/metadata.txtpb index d7fd0eb..9056fac 100644 --- a/data/maps/the_quiet/metadata.txtpb +++ b/data/maps/the_quiet/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Quiet" 1display_name: "The Quiet"
2rte_room: "Main Area"
2worldport_entrance { 3worldport_entrance {
3 room: "Main Area" 4 room: "Main Area"
4 name: "DAEDALUS" 5 name: "DAEDALUS"
diff --git a/data/maps/the_relentless/metadata.txtpb b/data/maps/the_relentless/metadata.txtpb index 9515145..313420d 100644 --- a/data/maps/the_relentless/metadata.txtpb +++ b/data/maps/the_relentless/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Relentless" 1display_name: "The Relentless"
2# No RTE in order to preserve the gimmick of the map.
diff --git a/data/maps/the_repetitive/metadata.txtpb b/data/maps/the_repetitive/metadata.txtpb index 76a0f50..4924048 100644 --- a/data/maps/the_repetitive/metadata.txtpb +++ b/data/maps/the_repetitive/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Repetitive" 1display_name: "The Repetitive"
2rte_room: "Main Room"
2# These paintings are directly above/behind panels and thus can't be entered. 3# These paintings are directly above/behind panels and thus can't be entered.
3excluded_nodes: "Meshes/eyeRed3" 4excluded_nodes: "Meshes/eyeRed3"
4excluded_nodes: "Meshes/eyeRed4" 5excluded_nodes: "Meshes/eyeRed4"
diff --git a/data/maps/the_revitalized/metadata.txtpb b/data/maps/the_revitalized/metadata.txtpb index 7c4bf46..ab64625 100644 --- a/data/maps/the_revitalized/metadata.txtpb +++ b/data/maps/the_revitalized/metadata.txtpb
@@ -1,3 +1,4 @@
1display_name: "The Revitalized" 1display_name: "The Revitalized"
2rte_room: "Bye Room"
2# Let's not include the demo (for now). 3# Let's not include the demo (for now).
3excluded_nodes: "Components/panel_demo" 4excluded_nodes: "Components/panel_demo"
diff --git a/data/maps/the_shop/metadata.txtpb b/data/maps/the_shop/metadata.txtpb index 06f7fed..4a17985 100644 --- a/data/maps/the_shop/metadata.txtpb +++ b/data/maps/the_shop/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Shop" 1display_name: "The Shop"
2rte_room: "Main Area"
diff --git a/data/maps/the_sirenic/metadata.txtpb b/data/maps/the_sirenic/metadata.txtpb index 80b1783..9e1e5e7 100644 --- a/data/maps/the_sirenic/metadata.txtpb +++ b/data/maps/the_sirenic/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Sirenic" 1display_name: "The Sirenic"
2rte_room: "Start"
2worldport_entrance { 3worldport_entrance {
3 room: "Start" 4 room: "Start"
4 name: "PLAZA" 5 name: "PLAZA"
diff --git a/data/maps/the_stellar/metadata.txtpb b/data/maps/the_stellar/metadata.txtpb index aaf6631..30b5ece 100644 --- a/data/maps/the_stellar/metadata.txtpb +++ b/data/maps/the_stellar/metadata.txtpb
@@ -1,5 +1,6 @@
1display_name: "The Stellar" 1display_name: "The Stellar"
2type: GIFT_MAP 2type: GIFT_MAP
3rte_room: "Starting Room"
3# This panel does not appear to be accessible without sniping. 4# This panel does not appear to be accessible without sniping.
4excluded_nodes: "Panels/Room_1/panel_2" 5excluded_nodes: "Panels/Room_1/panel_2"
5# The map's mastery is created at runtime. 6# The map's mastery is created at runtime.
diff --git a/data/maps/the_stormy/metadata.txtpb b/data/maps/the_stormy/metadata.txtpb index 42b1814..098218b 100644 --- a/data/maps/the_stormy/metadata.txtpb +++ b/data/maps/the_stormy/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Stormy" 1display_name: "The Stormy"
2rte_room: "Center"
diff --git a/data/maps/the_sturdy/metadata.txtpb b/data/maps/the_sturdy/metadata.txtpb index bdc5a94..e6d997f 100644 --- a/data/maps/the_sturdy/metadata.txtpb +++ b/data/maps/the_sturdy/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Sturdy" 1display_name: "The Sturdy"
2rte_room: "Main Area"
2# Let's ignore the second half of the rainbows for now. 3# Let's ignore the second half of the rainbows for now.
3#excluded_nodes: "Components/Doors/Rainbow2/Hinge/rainbowMirrored" 4#excluded_nodes: "Components/Doors/Rainbow2/Hinge/rainbowMirrored"
4#excluded_nodes: "Components/Doors/Rainbow/Hinge/rainbowMirrored" 5#excluded_nodes: "Components/Doors/Rainbow/Hinge/rainbowMirrored"
diff --git a/data/maps/the_sun_temple/metadata.txtpb b/data/maps/the_sun_temple/metadata.txtpb index 25ed636..c64162e 100644 --- a/data/maps/the_sun_temple/metadata.txtpb +++ b/data/maps/the_sun_temple/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Sun Temple" 1display_name: "The Sun Temple"
2rte_room: "Entrance"
2worldport_entrance { 3worldport_entrance {
3 room: "Entrance" 4 room: "Entrance"
4 name: "UNKEMPT" 5 name: "UNKEMPT"
diff --git a/data/maps/the_sweet/metadata.txtpb b/data/maps/the_sweet/metadata.txtpb index 95f2209..9c3e7f5 100644 --- a/data/maps/the_sweet/metadata.txtpb +++ b/data/maps/the_sweet/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Sweet" 1display_name: "The Sweet"
2rte_room: "Main Area"
diff --git a/data/maps/the_symbolic/metadata.txtpb b/data/maps/the_symbolic/metadata.txtpb index 2b37985..d57fca2 100644 --- a/data/maps/the_symbolic/metadata.txtpb +++ b/data/maps/the_symbolic/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Symbolic" 1display_name: "The Symbolic"
2rte_room: "White Room"
2worldport_entrance { 3worldport_entrance {
3 room: "White Room" 4 room: "White Room"
4 name: "PLAZA" 5 name: "PLAZA"
diff --git a/data/maps/the_talented/metadata.txtpb b/data/maps/the_talented/metadata.txtpb index 943bc69..0e68b9e 100644 --- a/data/maps/the_talented/metadata.txtpb +++ b/data/maps/the_talented/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Talented" 1display_name: "The Talented"
2rte_room: "Main Area"
2worldport_entrance { 3worldport_entrance {
3 room: "Main Area" 4 room: "Main Area"
4 name: "GREAT" 5 name: "GREAT"
diff --git a/data/maps/the_tenacious/metadata.txtpb b/data/maps/the_tenacious/metadata.txtpb index 58b3919..86ed1c5 100644 --- a/data/maps/the_tenacious/metadata.txtpb +++ b/data/maps/the_tenacious/metadata.txtpb
@@ -1,2 +1,3 @@
1display_name: "The Tenacious" 1display_name: "The Tenacious"
2rte_room: "Control Center Entrance"
2daedalus_only_mode: DAED_ONLY_ALLOW 3daedalus_only_mode: DAED_ONLY_ALLOW
diff --git a/data/maps/the_three_doors/metadata.txtpb b/data/maps/the_three_doors/metadata.txtpb index 0c6052a..bed023f 100644 --- a/data/maps/the_three_doors/metadata.txtpb +++ b/data/maps/the_three_doors/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Three Doors" 1display_name: "The Three Doors"
2rte_room: "First Second Room"
diff --git a/data/maps/the_tower/metadata.txtpb b/data/maps/the_tower/metadata.txtpb index 3876206..9d4fe0b 100644 --- a/data/maps/the_tower/metadata.txtpb +++ b/data/maps/the_tower/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Tower" 1display_name: "The Tower"
2rte_room: "First Floor"
2worldport_entrance { 3worldport_entrance {
3 room: "First Floor" 4 room: "First Floor"
4 name: "GREAT" 5 name: "GREAT"
diff --git a/data/maps/the_tree/metadata.txtpb b/data/maps/the_tree/metadata.txtpb index 6090384..c52b946 100644 --- a/data/maps/the_tree/metadata.txtpb +++ b/data/maps/the_tree/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Tree" 1display_name: "The Tree"
2rte_room: "Main Area"
diff --git a/data/maps/the_unkempt/metadata.txtpb b/data/maps/the_unkempt/metadata.txtpb index f2862bc..eaa821f 100644 --- a/data/maps/the_unkempt/metadata.txtpb +++ b/data/maps/the_unkempt/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Unkempt" 1display_name: "The Unkempt"
2rte_room: "Main Area"
diff --git a/data/maps/the_unyielding/metadata.txtpb b/data/maps/the_unyielding/metadata.txtpb index d674150..311a966 100644 --- a/data/maps/the_unyielding/metadata.txtpb +++ b/data/maps/the_unyielding/metadata.txtpb
@@ -1 +1,2 @@
1display_name: "The Unyielding" 1display_name: "The Unyielding"
2rte_room: "Digital Entrance"
diff --git a/data/maps/the_wise/metadata.txtpb b/data/maps/the_wise/metadata.txtpb index 91af34e..282ebe9 100644 --- a/data/maps/the_wise/metadata.txtpb +++ b/data/maps/the_wise/metadata.txtpb
@@ -1,3 +1,4 @@
1display_name: "The Wise" 1display_name: "The Wise"
2rte_room: "Entry"
2# This port is out of bounds. 3# This port is out of bounds.
3excluded_nodes: "Components/Warps/worldport" 4excluded_nodes: "Components/Warps/worldport"
diff --git a/data/maps/the_wondrous/metadata.txtpb b/data/maps/the_wondrous/metadata.txtpb index 1c8e04c..88ca318 100644 --- a/data/maps/the_wondrous/metadata.txtpb +++ b/data/maps/the_wondrous/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Wondrous" 1display_name: "The Wondrous"
2rte_room: "Entry"
2worldport_entrance { 3worldport_entrance {
3 room: "Entry" 4 room: "Entry"
4 name: "DAEDALUS" 5 name: "DAEDALUS"
diff --git a/data/maps/the_words/metadata.txtpb b/data/maps/the_words/metadata.txtpb index 2dadcae..b016db0 100644 --- a/data/maps/the_words/metadata.txtpb +++ b/data/maps/the_words/metadata.txtpb
@@ -1,4 +1,5 @@
1display_name: "The Words" 1display_name: "The Words"
2rte_room: "Main Area"
2# These are old proxies of the main room's panels that are not linked up 3# These are old proxies of the main room's panels that are not linked up
3# anymore. 4# anymore.
4excluded_nodes: "Panels/Proxies/panel_3" 5excluded_nodes: "Panels/Proxies/panel_3"
diff --git a/proto/data.proto b/proto/data.proto index d7538da..3330666 100644 --- a/proto/data.proto +++ b/proto/data.proto
@@ -288,6 +288,9 @@ message Map {
288 optional DaedalusOnlyMode daedalus_only_mode = 6; 288 optional DaedalusOnlyMode daedalus_only_mode = 6;
289 optional uint64 worldport_entrance = 4; 289 optional uint64 worldport_entrance = 4;
290 optional MapType type = 5; 290 optional MapType type = 5;
291
292 optional uint64 rte_room = 7;
293 optional uint64 rte_ap_id = 8;
291} 294}
292 295
293message Progressive { 296message Progressive {
diff --git a/proto/human.proto b/proto/human.proto index 39625d5..484369e 100644 --- a/proto/human.proto +++ b/proto/human.proto
@@ -238,6 +238,7 @@ message HumanMap {
238 optional DaedalusOnlyMode daedalus_only_mode = 6; 238 optional DaedalusOnlyMode daedalus_only_mode = 6;
239 239
240 optional PortIdentifier worldport_entrance = 3; 240 optional PortIdentifier worldport_entrance = 3;
241 optional string rte_room = 7;
241 242
242 // These two fields are used by the validator and nothing else. excluded_nodes 243 // These two fields are used by the validator and nothing else. excluded_nodes
243 // are objects in the tscn that are intentionally not mentioned in the txtpb. 244 // are objects in the tscn that are intentionally not mentioned in the txtpb.
@@ -286,6 +287,7 @@ message IdMappings {
286 message MapIds { 287 message MapIds {
287 map<string, uint64> doors = 1; 288 map<string, uint64> doors = 1;
288 map<string, RoomIds> rooms = 2; 289 map<string, RoomIds> rooms = 2;
290 optional uint64 rte = 3;
289 } 291 }
290 292
291 map<string, MapIds> maps = 1; 293 map<string, MapIds> maps = 1;
diff --git a/tools/assign_ids/main.cpp b/tools/assign_ids/main.cpp index 4cf7c3f..4a48b86 100644 --- a/tools/assign_ids/main.cpp +++ b/tools/assign_ids/main.cpp
@@ -67,6 +67,10 @@ class AssignIds {
67 UpdateNextId(room.keyholders()); 67 UpdateNextId(room.keyholders());
68 UpdateNextId(room.ports()); 68 UpdateNextId(room.ports());
69 } 69 }
70
71 if (map.has_rte()) {
72 UpdateNextId(map.rte());
73 }
70 } 74 }
71 75
72 UpdateNextId(id_mappings_.special()); 76 UpdateNextId(id_mappings_.special());
@@ -93,10 +97,31 @@ class AssignIds {
93 void ProcessMap(std::filesystem::path path) { 97 void ProcessMap(std::filesystem::path path) {
94 std::string map_name = path.filename().string(); 98 std::string map_name = path.filename().string();
95 99
100 ProcessMapMetadata(path / "metadata.txtpb", map_name);
96 ProcessDoorsFile(path / "doors.txtpb", map_name); 101 ProcessDoorsFile(path / "doors.txtpb", map_name);
97 ProcessRooms(path / "rooms", map_name); 102 ProcessRooms(path / "rooms", map_name);
98 } 103 }
99 104
105 void ProcessMapMetadata(std::filesystem::path path,
106 const std::string& current_map_name) {
107 if (!std::filesystem::exists(path)) {
108 return;
109 }
110
111 auto metadata = ReadMessageFromFile<HumanMap>(path.string());
112 auto& maps = *output_.mutable_maps();
113
114 if (metadata.has_rte_room()) {
115 if (!id_mappings_.maps().contains(current_map_name) ||
116 !id_mappings_.maps().at(current_map_name).has_rte()) {
117 maps[current_map_name].set_rte(next_id_++);
118 } else {
119 maps[current_map_name].set_rte(
120 id_mappings_.maps().at(current_map_name).rte());
121 }
122 }
123 }
124
100 void ProcessDoorsFile(std::filesystem::path path, 125 void ProcessDoorsFile(std::filesystem::path path,
101 const std::string& current_map_name) { 126 const std::string& current_map_name) {
102 if (!std::filesystem::exists(path)) { 127 if (!std::filesystem::exists(path)) {
@@ -342,9 +367,13 @@ class AssignIds {
342 private: 367 private:
343 void UpdateNextId(const google::protobuf::Map<std::string, uint64_t>& ids) { 368 void UpdateNextId(const google::protobuf::Map<std::string, uint64_t>& ids) {
344 for (const auto& [_, id] : ids) { 369 for (const auto& [_, id] : ids) {
345 if (id > next_id_) { 370 UpdateNextId(id);
346 next_id_ = id; 371 }
347 } 372 }
373
374 void UpdateNextId(uint64_t id) {
375 if (id > next_id_) {
376 next_id_ = id;
348 } 377 }
349 } 378 }
350 379
diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index 953821f..f1ef10e 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp
@@ -100,6 +100,11 @@ class DataPacker {
100 map_name, metadata.worldport_entrance().room(), 100 map_name, metadata.worldport_entrance().room(),
101 metadata.worldport_entrance().name(), std::nullopt, std::nullopt)); 101 metadata.worldport_entrance().name(), std::nullopt, std::nullopt));
102 } 102 }
103
104 if (metadata.has_rte_room()) {
105 map.set_rte_room(container_.FindOrAddRoom(map_name, metadata.rte_room(),
106 std::nullopt));
107 }
103 } 108 }
104 109
105 void ProcessRooms(std::filesystem::path path, 110 void ProcessRooms(std::filesystem::path path,
@@ -711,6 +716,11 @@ class DataPacker {
711 container_.all_objects().mutable_ports(port_id)->set_ap_id(ap_id); 716 container_.all_objects().mutable_ports(port_id)->set_ap_id(ap_id);
712 } 717 }
713 } 718 }
719
720 if (map.has_rte()) {
721 uint64_t map_id = container_.FindOrAddMap(map_name);
722 container_.all_objects().mutable_maps(map_id)->set_rte_ap_id(map.rte());
723 }
714 } 724 }
715 725
716 auto& specials = *container_.all_objects().mutable_special_ids(); 726 auto& specials = *container_.all_objects().mutable_special_ids();
diff --git a/tools/util/ids_yaml_format.cpp b/tools/util/ids_yaml_format.cpp index 5b9113b..c23c66b 100644 --- a/tools/util/ids_yaml_format.cpp +++ b/tools/util/ids_yaml_format.cpp
@@ -80,6 +80,10 @@ IdMappings ReadIdsFromYaml(const std::string& filename) {
80 door_it.second.as<uint64_t>(); 80 door_it.second.as<uint64_t>();
81 } 81 }
82 } 82 }
83
84 if (map_it.second["rte"]) {
85 map_ids.set_rte(map_it.second["rte"].as<uint64_t>());
86 }
83 } 87 }
84 } 88 }
85 89
@@ -168,6 +172,10 @@ void WriteIdsAsYaml(const IdMappings& ids, const std::string& filename) {
168 map_node["doors"][door_name] = door_id; 172 map_node["doors"][door_name] = door_id;
169 }); 173 });
170 174
175 if (map_ids.has_rte()) {
176 map_node["rte"] = map_ids.rte();
177 }
178
171 result["maps"][map_name] = std::move(map_node); 179 result["maps"][map_name] = std::move(map_node);
172 }); 180 });
173 181
diff --git a/tools/validator/human_processor.cpp b/tools/validator/human_processor.cpp index ffa9765..d6fcfa6 100644 --- a/tools/validator/human_processor.cpp +++ b/tools/validator/human_processor.cpp
@@ -74,6 +74,8 @@ class HumanProcessor {
74 MapInfo& map_info = info_.maps[current_map_name]; 74 MapInfo& map_info = info_.maps[current_map_name];
75 75
76 auto metadata = ReadMessageFromFile<HumanMap>(path.string()); 76 auto metadata = ReadMessageFromFile<HumanMap>(path.string());
77 map_info.definitions.push_back(metadata);
78
77 for (const std::string& path : metadata.excluded_nodes()) { 79 for (const std::string& path : metadata.excluded_nodes()) {
78 map_info.game_nodes[path].uses++; 80 map_info.game_nodes[path].uses++;
79 } 81 }
@@ -92,6 +94,15 @@ class HumanProcessor {
92 map_info.malformed_worldport_entrance = metadata.worldport_entrance(); 94 map_info.malformed_worldport_entrance = metadata.worldport_entrance();
93 } 95 }
94 } 96 }
97
98 if (metadata.has_rte_room()) {
99 RoomIdentifier room_identifier;
100 room_identifier.set_map(current_map_name);
101 room_identifier.set_name(metadata.rte_room());
102
103 RoomInfo& room_info = info_.rooms[room_identifier];
104 room_info.map_rtes_referenced_by.push_back(current_map_name);
105 }
95 } 106 }
96 107
97 void ProcessRooms(std::filesystem::path path, 108 void ProcessRooms(std::filesystem::path path,
@@ -617,6 +628,11 @@ class HumanProcessor {
617 port_info.has_id = true; 628 port_info.has_id = true;
618 } 629 }
619 } 630 }
631
632 if (map.has_rte()) {
633 MapInfo& map_info = info_.maps[map_name];
634 map_info.has_rte_id = true;
635 }
620 } 636 }
621 637
622 for (const auto& [tag, id] : ids.special()) { 638 for (const auto& [tag, id] : ids.special()) {
diff --git a/tools/validator/main.cpp b/tools/validator/main.cpp index 1a72e9a..6139e95 100644 --- a/tools/validator/main.cpp +++ b/tools/validator/main.cpp
@@ -21,7 +21,9 @@ void Run(const std::string& mapdir, const std::string& repodir) {
21int main(int argc, char** argv) { 21int main(int argc, char** argv) {
22 if (argc != 3) { 22 if (argc != 3) {
23 std::cout << "Incorrect argument count." << std::endl; 23 std::cout << "Incorrect argument count." << std::endl;
24 std::cout << "Usage: validator [path to map directory] [path to Lingo 2 repository]" << std::endl; 24 std::cout << "Usage: validator [path to map directory] [path to Lingo 2 "
25 "repository]"
26 << std::endl;
25 return 1; 27 return 1;
26 } 28 }
27 29
diff --git a/tools/validator/structs.h b/tools/validator/structs.h index 62974a8..81a0e8f 100644 --- a/tools/validator/structs.h +++ b/tools/validator/structs.h
@@ -28,6 +28,9 @@ struct GameNodeInfo {
28struct MapInfo { 28struct MapInfo {
29 std::map<std::string, GameNodeInfo> game_nodes; 29 std::map<std::string, GameNodeInfo> game_nodes;
30 30
31 std::vector<HumanMap> definitions;
32 bool has_rte_id = false;
33
31 std::optional<PortIdentifier> malformed_worldport_entrance; 34 std::optional<PortIdentifier> malformed_worldport_entrance;
32}; 35};
33 36
@@ -37,6 +40,7 @@ struct RoomInfo {
37 std::vector<DoorIdentifier> doors_referenced_by; 40 std::vector<DoorIdentifier> doors_referenced_by;
38 std::vector<PanelIdentifier> panels_referenced_by; 41 std::vector<PanelIdentifier> panels_referenced_by;
39 std::vector<HumanConnection> connections_referenced_by; 42 std::vector<HumanConnection> connections_referenced_by;
43 std::vector<std::string> map_rtes_referenced_by;
40}; 44};
41 45
42struct DoorInfo { 46struct DoorInfo {
diff --git a/tools/validator/validator.cpp b/tools/validator/validator.cpp index fe36be7..e9fbb74 100644 --- a/tools/validator/validator.cpp +++ b/tools/validator/validator.cpp
@@ -1,5 +1,6 @@
1#include "validator.h" 1#include "validator.h"
2 2
3#include <algorithm>
3#include <iostream> 4#include <iostream>
4 5
5#include "proto/human.pb.h" 6#include "proto/human.pb.h"
@@ -74,6 +75,22 @@ class Validator {
74 std::cout << "The worldport entrance for map " << map_name 75 std::cout << "The worldport entrance for map " << map_name
75 << " is malformed." << std::endl; 76 << " is malformed." << std::endl;
76 } 77 }
78
79 if (map_info.has_rte_id) {
80 if (!std::any_of(
81 map_info.definitions.begin(), map_info.definitions.end(),
82 [](const HumanMap& h_map) { return h_map.has_rte_room(); })) {
83 std::cout << "Map " << map_name << " has an RTE ID but no RTE room."
84 << std::endl;
85 }
86 } else {
87 if (std::any_of(
88 map_info.definitions.begin(), map_info.definitions.end(),
89 [](const HumanMap& h_map) { return h_map.has_rte_room(); })) {
90 std::cout << "Map " << map_name << " has an RTE room but no RTE ID."
91 << std::endl;
92 }
93 }
77 } 94 }
78 95
79 void ValidateRoom(const RoomIdentifier& room_identifier, 96 void ValidateRoom(const RoomIdentifier& room_identifier,
@@ -99,6 +116,10 @@ class Validator {
99 std::cout << " CONNECTION " << connection.ShortDebugString() 116 std::cout << " CONNECTION " << connection.ShortDebugString()
100 << std::endl; 117 << std::endl;
101 } 118 }
119
120 for (const std::string& map_name : room_info.map_rtes_referenced_by) {
121 std::cout << " MAP RTE " << map_name << std::endl;
122 }
102 } else if (room_info.definitions.size() > 1) { 123 } else if (room_info.definitions.size() > 1) {
103 std::cout << "Room " << room_identifier.ShortDebugString() 124 std::cout << "Room " << room_identifier.ShortDebugString()
104 << " was defined multiple times." << std::endl; 125 << " was defined multiple times." << std::endl;