about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--apworld/__init__.py29
-rw-r--r--apworld/options.py11
-rw-r--r--apworld/player_logic.py4
-rw-r--r--apworld/regions.py70
-rw-r--r--apworld/rules.py7
-rw-r--r--client/Archipelago/gamedata.gd19
-rw-r--r--client/Archipelago/manager.gd29
-rw-r--r--client/Archipelago/settings_screen.gd5
-rw-r--r--client/Archipelago/worldport.gd45
-rw-r--r--data/connections.txtpb2
-rw-r--r--data/door_groups.txtpb5
-rw-r--r--data/maps/control_center/rooms/Ancient Entrance.txtpb4
-rw-r--r--data/maps/control_center/rooms/Between Entrance.txtpb2
-rw-r--r--data/maps/control_center/rooms/Entry Entrance.txtpb2
-rw-r--r--data/maps/control_center/rooms/Entry.txtpb2
-rw-r--r--data/maps/control_center/rooms/Main Area.txtpb8
-rw-r--r--data/maps/control_center/rooms/Partial Entrance.txtpb4
-rw-r--r--data/maps/control_center/rooms/Perceptive Entrance.txtpb4
-rw-r--r--data/maps/control_center/rooms/Repetitive Entrance.txtpb4
-rw-r--r--data/maps/control_center/rooms/Tenacious Entrance.txtpb4
-rw-r--r--data/maps/control_center/rooms/Unkempt Entrance.txtpb4
-rw-r--r--data/maps/daedalus/rooms/Composite Room S.txtpb2
-rw-r--r--data/maps/daedalus/rooms/Entry Shortcut.txtpb2
-rw-r--r--data/maps/daedalus/rooms/Hedges Tower.txtpb1
-rw-r--r--data/maps/daedalus/rooms/Moat.txtpb2
-rw-r--r--data/maps/daedalus/rooms/Outside Hedges.txtpb2
-rw-r--r--data/maps/daedalus/rooms/Purple Hallway From Great.txtpb2
-rw-r--r--data/maps/daedalus/rooms/Quiet Entrance.txtpb2
-rw-r--r--data/maps/daedalus/rooms/Rain Side.txtpb2
-rw-r--r--data/maps/daedalus/rooms/Starting Room.txtpb2
-rw-r--r--data/maps/daedalus/rooms/Sweet Foyer.txtpb4
-rw-r--r--data/maps/daedalus/rooms/Tree Entrance.txtpb2
-rw-r--r--data/maps/daedalus/rooms/Unkempt Entrance.txtpb2
-rw-r--r--data/maps/daedalus/rooms/White Hallway From Entry.txtpb8
-rw-r--r--data/maps/daedalus/rooms/Wonderland.txtpb2
-rw-r--r--data/maps/daedalus/rooms/Yellow Color Door.txtpb2
-rw-r--r--data/maps/four_rooms/rooms/Examples Room.txtpb3
-rw-r--r--data/maps/four_rooms/rooms/Intensify Room.txtpb3
-rw-r--r--data/maps/four_rooms/rooms/Synonyms Room.txtpb3
-rw-r--r--data/maps/four_rooms/rooms/Time Room.txtpb3
-rw-r--r--data/maps/the_bearer/rooms/Back Area.txtpb3
-rw-r--r--data/maps/the_bearer/rooms/Entry.txtpb3
-rw-r--r--data/maps/the_bearer/rooms/Tree Entrance.txtpb3
-rw-r--r--data/maps/the_between/rooms/Control Center Side.txtpb6
-rw-r--r--data/maps/the_between/rooms/Main Area.txtpb3
-rw-r--r--data/maps/the_between/rooms/Plaza Entrance.txtpb3
-rw-r--r--data/maps/the_butterfly/rooms/Main Area.txtpb3
-rw-r--r--data/maps/the_colorful/rooms/Cyan Hallway.txtpb6
-rw-r--r--data/maps/the_colorful/rooms/White Room.txtpb3
-rw-r--r--data/maps/the_congruent/rooms/Main Area.txtpb3
-rw-r--r--data/maps/the_darkroom/connections.txtpb14
-rw-r--r--data/maps/the_darkroom/rooms/Congruent Entrance.txtpb3
-rw-r--r--data/maps/the_darkroom/rooms/Cyan Hallway.txtpb3
-rw-r--r--data/maps/the_darkroom/rooms/Double Sided Entrance.txtpb3
-rw-r--r--data/maps/the_darkroom/rooms/First Room Exit.txtpb8
-rw-r--r--data/maps/the_darkroom/rooms/First Room.txtpb9
-rw-r--r--data/maps/the_darkroom/rooms/Second Room Exit.txtpb8
-rw-r--r--data/maps/the_darkroom/rooms/Second Room.txtpb9
-rw-r--r--data/maps/the_darkroom/rooms/Third Room.txtpb3
-rw-r--r--data/maps/the_digital/rooms/Gallery Maze.txtpb3
-rw-r--r--data/maps/the_digital/rooms/Main Area.txtpb9
-rw-r--r--data/maps/the_digital/rooms/Tree Area.txtpb4
-rw-r--r--data/maps/the_digital/rooms/Unyielding Entrance.txtpb3
-rw-r--r--data/maps/the_double_sided/rooms/Start.txtpb3
-rw-r--r--data/maps/the_entry/connections.txtpb5
-rw-r--r--data/maps/the_entry/rooms/Composite Room Entrance.txtpb3
-rw-r--r--data/maps/the_entry/rooms/Daedalus Entrance.txtpb3
-rw-r--r--data/maps/the_entry/rooms/Digital Entrance.txtpb3
-rw-r--r--data/maps/the_entry/rooms/Entry Exit.txtpb3
-rw-r--r--data/maps/the_entry/rooms/Eye Room.txtpb3
-rw-r--r--data/maps/the_entry/rooms/Four Rooms Entrance.txtpb3
-rw-r--r--data/maps/the_entry/rooms/Gallery Return.txtpb3
-rw-r--r--data/maps/the_entry/rooms/Least Blue Last.txtpb3
-rw-r--r--data/maps/the_entry/rooms/Liberated Entrance.txtpb3
-rw-r--r--data/maps/the_entry/rooms/Lime Room.txtpb6
-rw-r--r--data/maps/the_entry/rooms/Literate Entrance.txtpb3
-rw-r--r--data/maps/the_entry/rooms/Parthenon Return.txtpb5
-rw-r--r--data/maps/the_entry/rooms/Rabbit Hole.txtpb5
-rw-r--r--data/maps/the_entry/rooms/Repetitive Entrance.txtpb6
-rw-r--r--data/maps/the_entry/rooms/Revitalized Entrance.txtpb8
-rw-r--r--data/maps/the_entry/rooms/Shop Entrance.txtpb3
-rw-r--r--data/maps/the_entry/rooms/White Hallway To Daedalus.txtpb3
-rw-r--r--data/maps/the_entry/rooms/X Area.txtpb3
-rw-r--r--data/maps/the_extravagant/rooms/Engine Room.txtpb3
-rw-r--r--data/maps/the_gallery/rooms/Main Area.txtpb3
-rw-r--r--data/maps/the_great/rooms/Back Area.txtpb12
-rw-r--r--data/maps/the_great/rooms/Colorful Entrance.txtpb3
-rw-r--r--data/maps/the_great/rooms/Daedalus Entrance.txtpb3
-rw-r--r--data/maps/the_great/rooms/Hive Entrance.txtpb3
-rw-r--r--data/maps/the_great/rooms/Jubilant Entrance.txtpb3
-rw-r--r--data/maps/the_great/rooms/Main Area.txtpb15
-rw-r--r--data/maps/the_great/rooms/North Landscape.txtpb4
-rw-r--r--data/maps/the_great/rooms/Purple Room.txtpb3
-rw-r--r--data/maps/the_great/rooms/Salmon Room.txtpb3
-rw-r--r--data/maps/the_great/rooms/Talented Entrance.txtpb3
-rw-r--r--data/maps/the_great/rooms/West Side.txtpb9
-rw-r--r--data/maps/the_hinterlands/rooms/Main Area.txtpb6
-rw-r--r--data/maps/the_hive/rooms/Main Area.txtpb12
-rw-r--r--data/maps/the_impressive/rooms/Green Eye.txtpb3
-rw-r--r--data/maps/the_impressive/rooms/Lobby.txtpb3
-rw-r--r--data/maps/the_impressive/rooms/Side Area.txtpb3
-rw-r--r--data/maps/the_invisible/rooms/Entrance.txtpb3
-rw-r--r--data/maps/the_invisible/rooms/Maze.txtpb4
-rw-r--r--data/maps/the_jubilant/rooms/Main Area.txtpb3
-rw-r--r--data/maps/the_keen/rooms/Main Area.txtpb3
-rw-r--r--data/maps/the_liberated/rooms/Puzzle Room.txtpb3
-rw-r--r--data/maps/the_linear/rooms/Room.txtpb3
-rw-r--r--data/maps/the_lionized/rooms/Puzzle Room.txtpb3
-rw-r--r--data/maps/the_literate/rooms/Puzzle Room.txtpb3
-rw-r--r--data/maps/the_lively/rooms/Puzzle Room.txtpb2
-rw-r--r--data/maps/the_nuanced/rooms/Main Room.txtpb3
-rw-r--r--data/maps/the_orb/rooms/B Room.txtpb6
-rw-r--r--data/maps/the_orb/rooms/Main Area.txtpb3
-rw-r--r--data/maps/the_owl/rooms/Connected Area.txtpb3
-rw-r--r--data/maps/the_owl/rooms/Magenta Hallway.txtpb3
-rw-r--r--data/maps/the_owl/rooms/R2C2 Bottom.txtpb3
-rw-r--r--data/maps/the_parthenon/rooms/Main Area.txtpb9
-rw-r--r--data/maps/the_partial/rooms/Control Center Entrance.txtpb5
-rw-r--r--data/maps/the_partial/rooms/Obverse Side.txtpb3
-rw-r--r--data/maps/the_perceptive/rooms/Main Area.txtpb5
-rw-r--r--data/maps/the_plaza/rooms/Main Area.txtpb9
-rw-r--r--data/maps/the_plaza/rooms/Repetitive Entrance.txtpb3
-rw-r--r--data/maps/the_plaza/rooms/Sirenic Entrance.txtpb3
-rw-r--r--data/maps/the_plaza/rooms/Symbolic Entrance.txtpb3
-rw-r--r--data/maps/the_quiet/rooms/Main Area.txtpb3
-rw-r--r--data/maps/the_repetitive/rooms/Entry Connector.txtpb6
-rw-r--r--data/maps/the_repetitive/rooms/Main Room.txtpb5
-rw-r--r--data/maps/the_repetitive/rooms/Plaza Connector.txtpb3
-rw-r--r--data/maps/the_revitalized/rooms/Bye Room.txtpb3
-rw-r--r--data/maps/the_shop/rooms/Main Area.txtpb2
-rw-r--r--data/maps/the_sirenic/rooms/Start.txtpb3
-rw-r--r--data/maps/the_stormy/rooms/Center.txtpb3
-rw-r--r--data/maps/the_sturdy/rooms/Main Area.txtpb4
-rw-r--r--data/maps/the_sun_temple/rooms/Entrance.txtpb2
-rw-r--r--data/maps/the_sweet/rooms/Main Area.txtpb4
-rw-r--r--data/maps/the_symbolic/rooms/White Room.txtpb2
-rw-r--r--data/maps/the_talented/rooms/Main Area.txtpb2
-rw-r--r--data/maps/the_tenacious/rooms/Control Center Entrance.txtpb4
-rw-r--r--data/maps/the_three_doors/rooms/Dead End Room.txtpb4
-rw-r--r--data/maps/the_three_doors/rooms/First Second Room.txtpb4
-rw-r--r--data/maps/the_three_doors/rooms/Loose Strings Room.txtpb2
-rw-r--r--data/maps/the_three_doors/rooms/One Luck Room.txtpb2
-rw-r--r--data/maps/the_three_doors/rooms/Silver Portal Room.txtpb4
-rw-r--r--data/maps/the_tower/rooms/First Floor.txtpb2
-rw-r--r--data/maps/the_tree/rooms/Bearer Entrance.txtpb2
-rw-r--r--data/maps/the_tree/rooms/Main Area.txtpb10
-rw-r--r--data/maps/the_unkempt/rooms/Control Center Entrance.txtpb4
-rw-r--r--data/maps/the_unkempt/rooms/Daedalus Entrance.txtpb2
-rw-r--r--data/maps/the_unkempt/rooms/Main Area.txtpb6
-rw-r--r--data/maps/the_unyielding/rooms/Bearer Entrance.txtpb2
-rw-r--r--data/maps/the_unyielding/rooms/Digital Entrance.txtpb2
-rw-r--r--data/maps/the_unyielding/rooms/Nuanced Entrance.txtpb2
-rw-r--r--data/maps/the_unyielding/rooms/Plaza Entrance.txtpb2
-rw-r--r--data/maps/the_wondrous/rooms/Entry.txtpb2
-rw-r--r--data/maps/the_words/rooms/Main Area.txtpb2
-rw-r--r--proto/data.proto10
-rw-r--r--proto/human.proto8
-rw-r--r--tools/datapacker/main.cpp8
-rw-r--r--tools/validator/validator.cpp15
159 files changed, 668 insertions, 160 deletions
diff --git a/apworld/__init__.py b/apworld/__init__.py index f1de503..2213e33 100644 --- a/apworld/__init__.py +++ b/apworld/__init__.py
@@ -6,7 +6,7 @@ from worlds.AutoWorld import WebWorld, World
6from .items import Lingo2Item, ANTI_COLLECTABLE_TRAPS 6from .items import Lingo2Item, ANTI_COLLECTABLE_TRAPS
7from .options import Lingo2Options 7from .options import Lingo2Options
8from .player_logic import Lingo2PlayerLogic 8from .player_logic import Lingo2PlayerLogic
9from .regions import create_regions 9from .regions import create_regions, shuffle_entrances, connect_ports_from_ut
10from .static_logic import Lingo2StaticLogic 10from .static_logic import Lingo2StaticLogic
11from .version import APWORLD_VERSION 11from .version import APWORLD_VERSION
12 12
@@ -46,12 +46,25 @@ class Lingo2World(World):
46 46
47 player_logic: Lingo2PlayerLogic 47 player_logic: Lingo2PlayerLogic
48 48
49 port_pairings: dict[int, int]
50
49 def generate_early(self): 51 def generate_early(self):
50 self.player_logic = Lingo2PlayerLogic(self) 52 self.player_logic = Lingo2PlayerLogic(self)
53 self.port_pairings = {}
51 54
52 def create_regions(self): 55 def create_regions(self):
53 create_regions(self) 56 create_regions(self)
54 57
58 def connect_entrances(self):
59 if self.options.shuffle_worldports:
60 if hasattr(self.multiworld, "re_gen_passthrough") and "Lingo 2" in self.multiworld.re_gen_passthrough:
61 slot_value = self.multiworld.re_gen_passthrough["Lingo 2"]["port_pairings"]
62 self.port_pairings = {int(fp): int(tp) for fp, tp in slot_value.items()}
63
64 connect_ports_from_ut(self.port_pairings, self)
65 else:
66 shuffle_entrances(self)
67
55 from Utils import visualize_regions 68 from Utils import visualize_regions
56 69
57 visualize_regions(self.multiworld.get_region("Menu", self.player), "my_world.puml") 70 visualize_regions(self.multiworld.get_region("Menu", self.player), "my_world.puml")
@@ -100,17 +113,29 @@ class Lingo2World(World):
100 "shuffle_gallery_paintings", 113 "shuffle_gallery_paintings",
101 "shuffle_letters", 114 "shuffle_letters",
102 "shuffle_symbols", 115 "shuffle_symbols",
116 "shuffle_worldports",
103 "strict_cyan_ending", 117 "strict_cyan_ending",
104 "strict_purple_ending", 118 "strict_purple_ending",
105 "victory_condition", 119 "victory_condition",
106 ] 120 ]
107 121
108 slot_data = { 122 slot_data: dict[str, object] = {
109 **self.options.as_dict(*slot_options), 123 **self.options.as_dict(*slot_options),
110 "version": [self.static_logic.get_data_version(), APWORLD_VERSION], 124 "version": [self.static_logic.get_data_version(), APWORLD_VERSION],
111 } 125 }
112 126
127 if self.options.shuffle_worldports:
128 slot_data["port_pairings"] = self.port_pairings
129
113 return slot_data 130 return slot_data
114 131
115 def get_filler_item_name(self) -> str: 132 def get_filler_item_name(self) -> str:
116 return "A Job Well Done" 133 return "A Job Well Done"
134
135 # for the universal tracker, doesn't get called in standard gen
136 # docs: https://github.com/FarisTheAncient/Archipelago/blob/tracker/worlds/tracker/docs/re-gen-passthrough.md
137 @staticmethod
138 def interpret_slot_data(slot_data: dict[str, object]) -> dict[str, object]:
139 # returning slot_data so it regens, giving it back in multiworld.re_gen_passthrough
140 # we are using re_gen_passthrough over modifying the world here due to complexities with ER
141 return slot_data
diff --git a/apworld/options.py b/apworld/options.py index 3646eea..795010a 100644 --- a/apworld/options.py +++ b/apworld/options.py
@@ -52,6 +52,16 @@ class ShuffleSymbols(Toggle):
52 display_name = "Shuffle Symbols" 52 display_name = "Shuffle Symbols"
53 53
54 54
55class ShuffleWorldports(Toggle):
56 """
57 Randomizes the connections between maps. This affects worldports only, which are the loading zones you walk into in
58 order to change maps. This does not affect paintings, panels that teleport you, or certain other special connections
59 like the one between The Shop and Control Center. Connections that depend on placing letters in keyholders are also
60 currently not shuffled.
61 """
62 display_name = "Shuffle Worldports"
63
64
55class KeyholderSanity(Toggle): 65class KeyholderSanity(Toggle):
56 """ 66 """
57 If enabled, 26 locations will be created for placing each key into its respective Green Ending keyholder. 67 If enabled, 26 locations will be created for placing each key into its respective Green Ending keyholder.
@@ -157,6 +167,7 @@ class Lingo2Options(PerGameCommonOptions):
157 shuffle_gallery_paintings: ShuffleGalleryPaintings 167 shuffle_gallery_paintings: ShuffleGalleryPaintings
158 shuffle_letters: ShuffleLetters 168 shuffle_letters: ShuffleLetters
159 shuffle_symbols: ShuffleSymbols 169 shuffle_symbols: ShuffleSymbols
170 shuffle_worldports: ShuffleWorldports
160 keyholder_sanity: KeyholderSanity 171 keyholder_sanity: KeyholderSanity
161 cyan_door_behavior: CyanDoorBehavior 172 cyan_door_behavior: CyanDoorBehavior
162 daedalus_roof_access: DaedalusRoofAccess 173 daedalus_roof_access: DaedalusRoofAccess
diff --git a/apworld/player_logic.py b/apworld/player_logic.py index 4aa481d..966f712 100644 --- a/apworld/player_logic.py +++ b/apworld/player_logic.py
@@ -234,10 +234,10 @@ class Lingo2PlayerLogic:
234 234
235 for door_group in world.static_logic.objects.door_groups: 235 for door_group in world.static_logic.objects.door_groups:
236 if door_group.type == data_pb2.DoorGroupType.CONNECTOR: 236 if door_group.type == data_pb2.DoorGroupType.CONNECTOR:
237 if not self.world.options.shuffle_doors: 237 if not self.world.options.shuffle_doors or self.world.options.shuffle_worldports:
238 continue 238 continue
239 elif door_group.type == data_pb2.DoorGroupType.COLOR_CONNECTOR: 239 elif door_group.type == data_pb2.DoorGroupType.COLOR_CONNECTOR:
240 if not self.world.options.shuffle_control_center_colors: 240 if not self.world.options.shuffle_control_center_colors or self.world.options.shuffle_worldports:
241 continue 241 continue
242 elif door_group.type == data_pb2.DoorGroupType.SHUFFLE_GROUP: 242 elif door_group.type == data_pb2.DoorGroupType.SHUFFLE_GROUP:
243 if not self.world.options.shuffle_doors: 243 if not self.world.options.shuffle_doors:
diff --git a/apworld/regions.py b/apworld/regions.py index 993eec8..a7d9a1c 100644 --- a/apworld/regions.py +++ b/apworld/regions.py
@@ -1,6 +1,8 @@
1from typing import TYPE_CHECKING 1from typing import TYPE_CHECKING
2 2
3import BaseClasses
3from BaseClasses import Region, ItemClassification, Entrance 4from BaseClasses import Region, ItemClassification, Entrance
5from entrance_rando import randomize_entrances
4from .items import Lingo2Item 6from .items import Lingo2Item
5from .locations import Lingo2Location 7from .locations import Lingo2Location
6from .player_logic import AccessRequirements 8from .player_logic import AccessRequirements
@@ -76,6 +78,9 @@ def create_regions(world: "Lingo2World"):
76 port = world.static_logic.objects.ports[connection.port] 78 port = world.static_logic.objects.ports[connection.port]
77 connection_name = f"{connection_name} (via port {port.name})" 79 connection_name = f"{connection_name} (via port {port.name})"
78 80
81 if world.options.shuffle_worldports and not port.no_shuffle:
82 continue
83
79 if port.HasField("required_door"): 84 if port.HasField("required_door"):
80 reqs.merge(world.player_logic.get_door_open_reqs(port.required_door)) 85 reqs.merge(world.player_logic.get_door_open_reqs(port.required_door))
81 86
@@ -116,3 +121,68 @@ def create_regions(world: "Lingo2World"):
116 world.multiworld.register_indirect_condition(regions[region], connection) 121 world.multiworld.register_indirect_condition(regions[region], connection)
117 122
118 world.multiworld.regions += regions.values() 123 world.multiworld.regions += regions.values()
124
125
126def shuffle_entrances(world: "Lingo2World"):
127 er_entrances: list[Entrance] = []
128 er_exits: list[Entrance] = []
129
130 port_id_by_name: dict[str, int] = {}
131
132 for port in world.static_logic.objects.ports:
133 if port.no_shuffle:
134 continue
135
136 port_region_name = world.static_logic.get_room_region_name(port.room_id)
137 port_region = world.multiworld.get_region(port_region_name, world.player)
138
139 connection_name = f"{port_region_name} - {port.name}"
140 port_id_by_name[connection_name] = port.id
141
142 entrance = port_region.create_er_target(connection_name)
143 entrance.randomization_type = BaseClasses.EntranceType.TWO_WAY
144
145 er_exit = port_region.create_exit(connection_name)
146 er_exit.randomization_type = BaseClasses.EntranceType.TWO_WAY
147
148 if port.HasField("required_door"):
149 door_reqs = world.player_logic.get_door_open_reqs(port.required_door)
150 er_exit.access_rule = make_location_lambda(door_reqs, world, None)
151
152 for region in door_reqs.get_referenced_rooms():
153 world.multiworld.register_indirect_condition(world.multiworld.get_region(region, world.player),
154 er_exit)
155
156 er_entrances.append(entrance)
157 er_exits.append(er_exit)
158
159 result = randomize_entrances(world, True, {0:[0]}, False, er_entrances,
160 er_exits)
161
162 for (f, to) in result.pairings:
163 world.port_pairings[port_id_by_name[f]] = port_id_by_name[to]
164
165
166def connect_ports_from_ut(port_pairings: dict[int, int], world: "Lingo2World"):
167 for fpid, tpid in port_pairings.items():
168 from_port = world.static_logic.objects.ports[fpid]
169 to_port = world.static_logic.objects.ports[tpid]
170
171 from_region_name = world.static_logic.get_room_region_name(from_port.room_id)
172 to_region_name = world.static_logic.get_room_region_name(to_port.room_id)
173
174 from_region = world.multiworld.get_region(from_region_name, world.player)
175 to_region = world.multiworld.get_region(to_region_name, world.player)
176
177 connection = Entrance(world.player, f"{from_region_name} - {from_port.name}", from_region)
178
179 if from_port.HasField("required_door"):
180 door_reqs = world.player_logic.get_door_open_reqs(from_port.required_door)
181 connection.access_rule = make_location_lambda(door_reqs, world, None)
182
183 for region in door_reqs.get_referenced_rooms():
184 world.multiworld.register_indirect_condition(world.multiworld.get_region(region, world.player),
185 connection)
186
187 from_region.exits.append(connection)
188 connection.connect(to_region)
diff --git a/apworld/rules.py b/apworld/rules.py index c077858..f859e75 100644 --- a/apworld/rules.py +++ b/apworld/rules.py
@@ -54,10 +54,13 @@ def lingo2_can_satisfy_requirements(state: CollectionState, reqs: AccessRequirem
54 return True 54 return True
55 55
56def make_location_lambda(reqs: AccessRequirements, world: "Lingo2World", 56def make_location_lambda(reqs: AccessRequirements, world: "Lingo2World",
57 regions: dict[str, Region]) -> Callable[[CollectionState], bool]: 57 regions: dict[str, Region] | None) -> Callable[[CollectionState], bool]:
58 # Replace required rooms with regions for the top level requirement, which saves looking up the regions during rule 58 # Replace required rooms with regions for the top level requirement, which saves looking up the regions during rule
59 # checking. 59 # checking.
60 required_regions = [regions[room_name] for room_name in reqs.rooms] 60 if regions is not None:
61 required_regions = [regions[room_name] for room_name in reqs.rooms]
62 else:
63 required_regions = [world.multiworld.get_region(room_name, world.player) for room_name in reqs.rooms]
61 new_reqs = reqs.copy() 64 new_reqs = reqs.copy()
62 new_reqs.rooms.clear() 65 new_reqs.rooms.clear()
63 return lambda state: lingo2_can_satisfy_requirements(state, new_reqs, required_regions, world) 66 return lambda state: lingo2_can_satisfy_requirements(state, new_reqs, required_regions, world)
diff --git a/client/Archipelago/gamedata.gd b/client/Archipelago/gamedata.gd index 41d966a..9eeec3b 100644 --- a/client/Archipelago/gamedata.gd +++ b/client/Archipelago/gamedata.gd
@@ -6,6 +6,7 @@ var objects
6var door_id_by_map_node_path = {} 6var door_id_by_map_node_path = {}
7var painting_id_by_map_node_path = {} 7var painting_id_by_map_node_path = {}
8var panel_id_by_map_node_path = {} 8var panel_id_by_map_node_path = {}
9var port_id_by_map_node_path = {}
9var door_id_by_ap_id = {} 10var door_id_by_ap_id = {}
10var map_id_by_name = {} 11var map_id_by_name = {}
11var progressive_id_by_ap_id = {} 12var progressive_id_by_ap_id = {}
@@ -79,6 +80,16 @@ func load(data_bytes):
79 80
80 var _map_data = painting_id_by_map_node_path[map.get_name()] 81 var _map_data = painting_id_by_map_node_path[map.get_name()]
81 82
83 for port in objects.get_ports():
84 var room = objects.get_rooms()[port.get_room_id()]
85 var map = objects.get_maps()[room.get_map_id()]
86
87 if not map.get_name() in port_id_by_map_node_path:
88 port_id_by_map_node_path[map.get_name()] = {}
89
90 var map_data = port_id_by_map_node_path[map.get_name()]
91 map_data[port.get_path()] = port.get_id()
92
82 for progressive in objects.get_progressives(): 93 for progressive in objects.get_progressives():
83 progressive_id_by_ap_id[progressive.get_ap_id()] = progressive.get_id() 94 progressive_id_by_ap_id[progressive.get_ap_id()] = progressive.get_id()
84 95
@@ -121,6 +132,14 @@ func get_panel_for_map_node_path(map_name, node_path):
121 return map_data.get(node_path, null) 132 return map_data.get(node_path, null)
122 133
123 134
135func get_port_for_map_node_path(map_name, node_path):
136 if not port_id_by_map_node_path.has(map_name):
137 return null
138
139 var map_data = port_id_by_map_node_path[map_name]
140 return map_data.get(node_path, null)
141
142
124func get_door_ap_id(door_id): 143func get_door_ap_id(door_id):
125 var door = objects.get_doors()[door_id] 144 var door = objects.get_doors()[door_id]
126 if door.has_ap_id(): 145 if door.has_ap_id():
diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 218870c..c804109 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd
@@ -46,11 +46,13 @@ var apworld_version = [0, 0]
46var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2 46var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2
47var daedalus_roof_access = false 47var daedalus_roof_access = false
48var keyholder_sanity = false 48var keyholder_sanity = false
49var port_pairings = {}
49var shuffle_control_center_colors = false 50var shuffle_control_center_colors = false
50var shuffle_doors = false 51var shuffle_doors = false
51var shuffle_gallery_paintings = false 52var shuffle_gallery_paintings = false
52var shuffle_letters = kSHUFFLE_LETTERS_VANILLA 53var shuffle_letters = kSHUFFLE_LETTERS_VANILLA
53var shuffle_symbols = false 54var shuffle_symbols = false
55var shuffle_worldports = false
54var strict_cyan_ending = false 56var strict_cyan_ending = false
55var strict_purple_ending = false 57var strict_purple_ending = false
56var victory_condition = -1 58var victory_condition = -1
@@ -380,6 +382,7 @@ func _client_connected(slot_data):
380 shuffle_gallery_paintings = bool(slot_data.get("shuffle_gallery_paintings", false)) 382 shuffle_gallery_paintings = bool(slot_data.get("shuffle_gallery_paintings", false))
381 shuffle_letters = int(slot_data.get("shuffle_letters", 0)) 383 shuffle_letters = int(slot_data.get("shuffle_letters", 0))
382 shuffle_symbols = bool(slot_data.get("shuffle_symbols", false)) 384 shuffle_symbols = bool(slot_data.get("shuffle_symbols", false))
385 shuffle_worldports = bool(slot_data.get("shuffle_worldports", false))
383 strict_cyan_ending = bool(slot_data.get("strict_cyan_ending", false)) 386 strict_cyan_ending = bool(slot_data.get("strict_cyan_ending", false))
384 strict_purple_ending = bool(slot_data.get("strict_purple_ending", false)) 387 strict_purple_ending = bool(slot_data.get("strict_purple_ending", false))
385 victory_condition = int(slot_data.get("victory_condition", 0)) 388 victory_condition = int(slot_data.get("victory_condition", 0))
@@ -387,6 +390,13 @@ func _client_connected(slot_data):
387 if slot_data.has("version"): 390 if slot_data.has("version"):
388 apworld_version = [int(slot_data["version"][0]), int(slot_data["version"][1])] 391 apworld_version = [int(slot_data["version"][0]), int(slot_data["version"][1])]
389 392
393 port_pairings.clear()
394 if slot_data.has("port_pairings"):
395 var raw_pp = slot_data.get("port_pairings")
396
397 for p1 in raw_pp.keys():
398 port_pairings[int(p1)] = int(raw_pp[p1])
399
390 # Set up item locks. 400 # Set up item locks.
391 _item_locks = {} 401 _item_locks = {}
392 402
@@ -404,12 +414,14 @@ func _client_connected(slot_data):
404 _item_locks[door.get_id()] = [progressive.get_ap_id(), i + 1] 414 _item_locks[door.get_id()] = [progressive.get_ap_id(), i + 1]
405 415
406 for door_group in gamedata.objects.get_door_groups(): 416 for door_group in gamedata.objects.get_door_groups():
407 if ( 417 if door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.CONNECTOR:
408 door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.CONNECTOR 418 if shuffle_worldports:
409 or door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.SHUFFLE_GROUP 419 continue
410 ): 420 elif door_group.get_type() != gamedata.SCRIPT_proto.DoorGroupType.SHUFFLE_GROUP:
411 for door in door_group.get_doors(): 421 continue
412 _item_locks[door] = [door_group.get_ap_id(), 1] 422
423 for door in door_group.get_doors():
424 _item_locks[door] = [door_group.get_ap_id(), 1]
413 425
414 if shuffle_control_center_colors: 426 if shuffle_control_center_colors:
415 for door in gamedata.objects.get_doors(): 427 for door in gamedata.objects.get_doors():
@@ -417,7 +429,10 @@ func _client_connected(slot_data):
417 _item_locks[door.get_id()] = [door.get_ap_id(), 1] 429 _item_locks[door.get_id()] = [door.get_ap_id(), 1]
418 430
419 for door_group in gamedata.objects.get_door_groups(): 431 for door_group in gamedata.objects.get_door_groups():
420 if door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.COLOR_CONNECTOR: 432 if (
433 door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.COLOR_CONNECTOR
434 and not shuffle_worldports
435 ):
421 for door in door_group.get_doors(): 436 for door in door_group.get_doors():
422 _item_locks[door] = [door_group.get_ap_id(), 1] 437 _item_locks[door] = [door_group.get_ap_id(), 1]
423 438
diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd index b7bfacf..44c614a 100644 --- a/client/Archipelago/settings_screen.gd +++ b/client/Archipelago/settings_screen.gd
@@ -192,6 +192,11 @@ func startGame():
192 unlocks.loadData() 192 unlocks.loadData()
193 unlocks.unlockKey("capslock", 1) 193 unlocks.unlockKey("capslock", 1)
194 194
195 if ap.shuffle_worldports:
196 settings.worldport_fades = "default"
197 else:
198 settings.worldport_fades = "never"
199
195 clearResourceCache("res://objects/meshes/gridDoor.tscn") 200 clearResourceCache("res://objects/meshes/gridDoor.tscn")
196 clearResourceCache("res://objects/nodes/collectable.tscn") 201 clearResourceCache("res://objects/nodes/collectable.tscn")
197 clearResourceCache("res://objects/nodes/door.tscn") 202 clearResourceCache("res://objects/nodes/door.tscn")
diff --git a/client/Archipelago/worldport.gd b/client/Archipelago/worldport.gd index d0fb6c9..cdca248 100644 --- a/client/Archipelago/worldport.gd +++ b/client/Archipelago/worldport.gd
@@ -1,10 +1,53 @@
1extends "res://scripts/nodes/worldport.gd" 1extends "res://scripts/nodes/worldport.gd"
2 2
3var absolute_rotation = false
4var target_rotation = 0
5
3 6
4func _ready(): 7func _ready():
8 var node_path = String(
9 get_tree().get_root().get_node("scene").get_path_to(self).get_concatenated_names()
10 )
11
12 var ap = global.get_node("Archipelago")
13
14 if ap.shuffle_worldports:
15 var gamedata = global.get_node("Gamedata")
16 var port_id = gamedata.get_port_for_map_node_path(global.map, node_path)
17 if port_id != null:
18 if port_id in ap.port_pairings:
19 var target_port = gamedata.objects.get_ports()[ap.port_pairings[port_id]]
20 var target_room = gamedata.objects.get_rooms()[target_port.get_room_id()]
21 var target_map = gamedata.objects.get_maps()[target_room.get_map_id()]
22
23 exit = target_map.get_name()
24 entry_point.x = target_port.get_destination().get_x()
25 entry_point.y = target_port.get_destination().get_y()
26 entry_point.z = target_port.get_destination().get_z()
27 absolute_rotation = true
28 target_rotation = target_port.get_rotation()
29 sets_entry_point = true
30 invisible = false
31 fades = true
32
5 if global.map == "icarus" and exit == "daedalus": 33 if global.map == "icarus" and exit == "daedalus":
6 var ap = global.get_node("Archipelago")
7 if not ap.daedalus_roof_access: 34 if not ap.daedalus_roof_access:
8 entry_point = Vector3(58, 10, 0) 35 entry_point = Vector3(58, 10, 0)
9 36
10 super._ready() 37 super._ready()
38
39
40func bodyEntered(body):
41 if body.is_in_group("player"):
42 if absolute_rotation:
43 entry_rotate.y = target_rotation - body.rotation_degrees.y
44
45 super.bodyEntered(body)
46
47
48func changeScene():
49 var player = get_tree().get_root().get_node("scene/player")
50 if player != null:
51 player.playable = false
52
53 super.changeScene()
diff --git a/data/connections.txtpb b/data/connections.txtpb index 17f71a3..46939c8 100644 --- a/data/connections.txtpb +++ b/data/connections.txtpb
@@ -963,7 +963,7 @@ connections {
963 from { 963 from {
964 port { 964 port {
965 map: "the_entry" 965 map: "the_entry"
966 room: "Lime Room" 966 room: "Revitalized Entrance"
967 name: "REVITALIZED" 967 name: "REVITALIZED"
968 } 968 }
969 } 969 }
diff --git a/data/door_groups.txtpb b/data/door_groups.txtpb index 1a75c45..ca94223 100644 --- a/data/door_groups.txtpb +++ b/data/door_groups.txtpb
@@ -1,6 +1,9 @@
1door_groups { 1door_groups {
2 name: "The Entry - Repetitive Entrance" 2 name: "The Entry - Repetitive Entrance"
3 type: CONNECTOR 3 # This *should* be a CONNECTOR, but currently we're not shuffling these
4 # entrances because we want to guarantee that there's a way to The Repetitive
5 # without missing keys in vanilla doors. Hopefully can be changed eventually.
6 type: SHUFFLE_GROUP
4 doors { 7 doors {
5 map: "the_entry" 8 map: "the_entry"
6 name: "Starting Room West Wall North Door" 9 name: "Starting Room West Wall North Door"
diff --git a/data/maps/control_center/rooms/Ancient Entrance.txtpb b/data/maps/control_center/rooms/Ancient Entrance.txtpb index 9fe50c5..20b1440 100644 --- a/data/maps/control_center/rooms/Ancient Entrance.txtpb +++ b/data/maps/control_center/rooms/Ancient Entrance.txtpb
@@ -2,4 +2,8 @@ name: "Ancient Entrance"
2ports { 2ports {
3 name: "ANCIENT" 3 name: "ANCIENT"
4 path: "Components/Warps/worldport8" 4 path: "Components/Warps/worldport8"
5 destination { x: -27 y: 0 z: -34 }
6 rotation: 90
7 # TODO: shuffle entrances with dependent keyholders
8 no_shuffle: true
5} 9}
diff --git a/data/maps/control_center/rooms/Between Entrance.txtpb b/data/maps/control_center/rooms/Between Entrance.txtpb index 2c21bdd..e3d4e73 100644 --- a/data/maps/control_center/rooms/Between Entrance.txtpb +++ b/data/maps/control_center/rooms/Between Entrance.txtpb
@@ -9,4 +9,6 @@ panels {
9ports { 9ports {
10 name: "BETWEEN" 10 name: "BETWEEN"
11 path: "Components/Warps/worldport5" 11 path: "Components/Warps/worldport5"
12 destination { x: 39 y: 0 z: -17 }
13 rotation: 270
12} 14}
diff --git a/data/maps/control_center/rooms/Entry Entrance.txtpb b/data/maps/control_center/rooms/Entry Entrance.txtpb index d920523..f9924d8 100644 --- a/data/maps/control_center/rooms/Entry Entrance.txtpb +++ b/data/maps/control_center/rooms/Entry Entrance.txtpb
@@ -9,4 +9,6 @@ panels {
9ports { 9ports {
10 name: "ENTRY" 10 name: "ENTRY"
11 path: "Components/Warps/worldport2" 11 path: "Components/Warps/worldport2"
12 destination { x: 26 y: 0 z: -16.5 }
13 rotation: 0
12} 14}
diff --git a/data/maps/control_center/rooms/Entry.txtpb b/data/maps/control_center/rooms/Entry.txtpb index 7ef380c..3f95021 100644 --- a/data/maps/control_center/rooms/Entry.txtpb +++ b/data/maps/control_center/rooms/Entry.txtpb
@@ -9,4 +9,6 @@ panels {
9ports { 9ports {
10 name: "GREAT" 10 name: "GREAT"
11 path: "Components/Warps/worldport" 11 path: "Components/Warps/worldport"
12 destination { x: 0 y: 0 z: -1.5 }
13 rotation: 0
12} 14}
diff --git a/data/maps/control_center/rooms/Main Area.txtpb b/data/maps/control_center/rooms/Main Area.txtpb index bf81e26..71e6284 100644 --- a/data/maps/control_center/rooms/Main Area.txtpb +++ b/data/maps/control_center/rooms/Main Area.txtpb
@@ -50,21 +50,27 @@ keyholders {
50ports { 50ports {
51 name: "RIGHT" 51 name: "RIGHT"
52 path: "Components/Warps/worldport6" 52 path: "Components/Warps/worldport6"
53 destination { x: 82 y: 0 z: -10 }
54 rotation: 90
53} 55}
54ports { 56ports {
55 name: "LEFT" 57 name: "LEFT"
56 path: "Components/Warps/worldport7" 58 path: "Components/Warps/worldport7"
57 # Check that this is correct. 59 destination { x: 82 y: 0 z: -48 }
60 rotation: 90
58} 61}
59ports { 62ports {
60 name: "RELENTLESS_LEFT" 63 name: "RELENTLESS_LEFT"
61 path: "Components/Warps/worldport9" 64 path: "Components/Warps/worldport9"
65 no_shuffle: true
62} 66}
63ports { 67ports {
64 name: "RELENTLESS_SHOP" 68 name: "RELENTLESS_SHOP"
65 path: "Components/Warps/worldport11" 69 path: "Components/Warps/worldport11"
70 no_shuffle: true
66} 71}
67ports { 72ports {
68 name: "RELENTLESS_TURN" 73 name: "RELENTLESS_TURN"
69 path: "Components/Warps/worldport10" 74 path: "Components/Warps/worldport10"
75 no_shuffle: true
70} 76}
diff --git a/data/maps/control_center/rooms/Partial Entrance.txtpb b/data/maps/control_center/rooms/Partial Entrance.txtpb index 77b68fa..80c854b 100644 --- a/data/maps/control_center/rooms/Partial Entrance.txtpb +++ b/data/maps/control_center/rooms/Partial Entrance.txtpb
@@ -9,4 +9,8 @@ panels {
9ports { 9ports {
10 name: "PARTIAL" 10 name: "PARTIAL"
11 path: "Components/Warps/worldport4" 11 path: "Components/Warps/worldport4"
12 destination { x: 21 y: 0 z: -41 }
13 rotation: 270
14 # TODO: shuffle entrances with dependent keyholders
15 no_shuffle: true
12} 16}
diff --git a/data/maps/control_center/rooms/Perceptive Entrance.txtpb b/data/maps/control_center/rooms/Perceptive Entrance.txtpb index 6eec265..be264e1 100644 --- a/data/maps/control_center/rooms/Perceptive Entrance.txtpb +++ b/data/maps/control_center/rooms/Perceptive Entrance.txtpb
@@ -17,4 +17,8 @@ panels {
17ports { 17ports {
18 name: "PERCEPTIVE" 18 name: "PERCEPTIVE"
19 path: "Components/Warps/worldport12" 19 path: "Components/Warps/worldport12"
20 destination { x: -23 y: 0 z: -11 }
21 rotation: 0
22 # TODO: shuffle entrances with dependent keyholders
23 no_shuffle: true
20} 24}
diff --git a/data/maps/control_center/rooms/Repetitive Entrance.txtpb b/data/maps/control_center/rooms/Repetitive Entrance.txtpb index 08b8fa4..e2b581b 100644 --- a/data/maps/control_center/rooms/Repetitive Entrance.txtpb +++ b/data/maps/control_center/rooms/Repetitive Entrance.txtpb
@@ -2,4 +2,8 @@ name: "Repetitive Entrance"
2ports { 2ports {
3 name: "REPETITIVE" 3 name: "REPETITIVE"
4 path: "Components/Warps/worldport14" 4 path: "Components/Warps/worldport14"
5 destination { x: -16 y: 0 z: -17.5 }
6 rotation: 0
7 # TODO: shuffle entrances with dependent keyholders
8 no_shuffle: true
5} 9}
diff --git a/data/maps/control_center/rooms/Tenacious Entrance.txtpb b/data/maps/control_center/rooms/Tenacious Entrance.txtpb index 0527d50..16819ad 100644 --- a/data/maps/control_center/rooms/Tenacious Entrance.txtpb +++ b/data/maps/control_center/rooms/Tenacious Entrance.txtpb
@@ -9,4 +9,8 @@ panels {
9ports { 9ports {
10 name: "TENACIOUS" 10 name: "TENACIOUS"
11 path: "Components/Warps/worldport13" 11 path: "Components/Warps/worldport13"
12 destination { x: 56 y: 0 z: -38 }
13 rotation: 180
14 # TODO: shuffle entrances with dependent keyholders
15 no_shuffle: true
12} 16}
diff --git a/data/maps/control_center/rooms/Unkempt Entrance.txtpb b/data/maps/control_center/rooms/Unkempt Entrance.txtpb index b6fc074..619891a 100644 --- a/data/maps/control_center/rooms/Unkempt Entrance.txtpb +++ b/data/maps/control_center/rooms/Unkempt Entrance.txtpb
@@ -9,4 +9,8 @@ panels {
9ports { 9ports {
10 name: "UNKEMPT" 10 name: "UNKEMPT"
11 path: "Components/Warps/worldport3" 11 path: "Components/Warps/worldport3"
12 destination { x: 34 y: 0 z: -38.5 }
13 rotation: 90
14 # TODO: shuffle entrances with dependent keyholders
15 no_shuffle: true
12} 16}
diff --git a/data/maps/daedalus/rooms/Composite Room S.txtpb b/data/maps/daedalus/rooms/Composite Room S.txtpb index 3773034..d7a79a4 100644 --- a/data/maps/daedalus/rooms/Composite Room S.txtpb +++ b/data/maps/daedalus/rooms/Composite Room S.txtpb
@@ -195,4 +195,6 @@ panels {
195ports { 195ports {
196 name: "ENTRY" 196 name: "ENTRY"
197 path: "Components/Warps/Worldports/worldport16" 197 path: "Components/Warps/Worldports/worldport16"
198 destination { x: -84 y: 0 z: 81 }
199 rotation: 270
198} 200}
diff --git a/data/maps/daedalus/rooms/Entry Shortcut.txtpb b/data/maps/daedalus/rooms/Entry Shortcut.txtpb index 63202ba..f737cd1 100644 --- a/data/maps/daedalus/rooms/Entry Shortcut.txtpb +++ b/data/maps/daedalus/rooms/Entry Shortcut.txtpb
@@ -11,4 +11,6 @@ panels {
11ports { 11ports {
12 name: "ENTRY" 12 name: "ENTRY"
13 path: "Components/Warps/Worldports/worldport4" 13 path: "Components/Warps/Worldports/worldport4"
14 destination { x: -21 y: 0 z: -4 }
15 rotation: 90
14} 16}
diff --git a/data/maps/daedalus/rooms/Hedges Tower.txtpb b/data/maps/daedalus/rooms/Hedges Tower.txtpb index 3031c1d..e720bc9 100644 --- a/data/maps/daedalus/rooms/Hedges Tower.txtpb +++ b/data/maps/daedalus/rooms/Hedges Tower.txtpb
@@ -3,4 +3,5 @@ panel_display_name: "Hedges"
3ports { 3ports {
4 name: "TENACIOUS" 4 name: "TENACIOUS"
5 path: "Components/Warps/Worldports/worldport13" 5 path: "Components/Warps/Worldports/worldport13"
6 no_shuffle: true
6} 7}
diff --git a/data/maps/daedalus/rooms/Moat.txtpb b/data/maps/daedalus/rooms/Moat.txtpb index cbb5d16..345f4f0 100644 --- a/data/maps/daedalus/rooms/Moat.txtpb +++ b/data/maps/daedalus/rooms/Moat.txtpb
@@ -7,4 +7,6 @@ paintings {
7ports { 7ports {
8 name: "HIVE" 8 name: "HIVE"
9 path: "Components/Warps/Worldports/worldport9" 9 path: "Components/Warps/Worldports/worldport9"
10 destination { x: 64 y: 1 z: 24.5 }
11 rotation: 0
10} 12}
diff --git a/data/maps/daedalus/rooms/Outside Hedges.txtpb b/data/maps/daedalus/rooms/Outside Hedges.txtpb index 9f32e26..17c93a0 100644 --- a/data/maps/daedalus/rooms/Outside Hedges.txtpb +++ b/data/maps/daedalus/rooms/Outside Hedges.txtpb
@@ -77,4 +77,6 @@ paintings {
77ports { 77ports {
78 name: "REVITALIZED" 78 name: "REVITALIZED"
79 path: "Components/Warps/Worldports/worldport7" 79 path: "Components/Warps/Worldports/worldport7"
80 destination { x: 45 y: 0 z: 94 }
81 rotation: 270
80} 82}
diff --git a/data/maps/daedalus/rooms/Purple Hallway From Great.txtpb b/data/maps/daedalus/rooms/Purple Hallway From Great.txtpb index 5284133..d3592d4 100644 --- a/data/maps/daedalus/rooms/Purple Hallway From Great.txtpb +++ b/data/maps/daedalus/rooms/Purple Hallway From Great.txtpb
@@ -3,4 +3,6 @@ panel_display_name: "South Area"
3ports { 3ports {
4 name: "GREAT" 4 name: "GREAT"
5 path: "Components/Warps/Worldports/worldport17" 5 path: "Components/Warps/Worldports/worldport17"
6 destination { x: -24 y: 0 z: 61 }
7 rotation: 270
6} 8}
diff --git a/data/maps/daedalus/rooms/Quiet Entrance.txtpb b/data/maps/daedalus/rooms/Quiet Entrance.txtpb index 08fbcc7..c33b07d 100644 --- a/data/maps/daedalus/rooms/Quiet Entrance.txtpb +++ b/data/maps/daedalus/rooms/Quiet Entrance.txtpb
@@ -17,4 +17,6 @@ paintings {
17ports { 17ports {
18 name: "QUIET" 18 name: "QUIET"
19 path: "Components/Warps/Worldports/worldport5" 19 path: "Components/Warps/Worldports/worldport5"
20 destination { x: -32 y: 0 z: -40 }
21 rotation: 90
20} 22}
diff --git a/data/maps/daedalus/rooms/Rain Side.txtpb b/data/maps/daedalus/rooms/Rain Side.txtpb index 6906aef..cfaf40d 100644 --- a/data/maps/daedalus/rooms/Rain Side.txtpb +++ b/data/maps/daedalus/rooms/Rain Side.txtpb
@@ -11,4 +11,6 @@ panels {
11ports { 11ports {
12 name: "BEARER" 12 name: "BEARER"
13 path: "Components/Warps/Worldports/worldport11" 13 path: "Components/Warps/Worldports/worldport11"
14 destination { x: 93.5 y: 0 z: 27 }
15 rotation: 90
14} 16}
diff --git a/data/maps/daedalus/rooms/Starting Room.txtpb b/data/maps/daedalus/rooms/Starting Room.txtpb index 62fc96a..88e8e79 100644 --- a/data/maps/daedalus/rooms/Starting Room.txtpb +++ b/data/maps/daedalus/rooms/Starting Room.txtpb
@@ -10,4 +10,6 @@ panels {
10ports { 10ports {
11 name: "GREAT" 11 name: "GREAT"
12 path: "Components/Warps/Worldports/worldport" 12 path: "Components/Warps/Worldports/worldport"
13 destination { x: 0 y: 0 z: 11 }
14 rotation: 0
13} 15}
diff --git a/data/maps/daedalus/rooms/Sweet Foyer.txtpb b/data/maps/daedalus/rooms/Sweet Foyer.txtpb index 03c8262..8620985 100644 --- a/data/maps/daedalus/rooms/Sweet Foyer.txtpb +++ b/data/maps/daedalus/rooms/Sweet Foyer.txtpb
@@ -52,8 +52,12 @@ paintings {
52ports { 52ports {
53 name: "SWEET1" 53 name: "SWEET1"
54 path: "Components/Warps/Worldports/worldport14" 54 path: "Components/Warps/Worldports/worldport14"
55 destination { x: -27 y: 0 z: 76.5 }
56 rotation: 270
55} 57}
56ports { 58ports {
57 name: "SWEET2" 59 name: "SWEET2"
58 path: "Components/Warps/Worldports/worldport15" 60 path: "Components/Warps/Worldports/worldport15"
61 destination { x: -36 y: 0 z: 76.5 }
62 rotation: 90
59} 63}
diff --git a/data/maps/daedalus/rooms/Tree Entrance.txtpb b/data/maps/daedalus/rooms/Tree Entrance.txtpb index 2b98178..9466ada 100644 --- a/data/maps/daedalus/rooms/Tree Entrance.txtpb +++ b/data/maps/daedalus/rooms/Tree Entrance.txtpb
@@ -49,4 +49,6 @@ panels {
49ports { 49ports {
50 name: "TREE" 50 name: "TREE"
51 path: "Components/Warps/Worldports/worldport12" 51 path: "Components/Warps/Worldports/worldport12"
52 destination { x: 41 y: 0 z: 50.5 }
53 rotation: 0
52} 54}
diff --git a/data/maps/daedalus/rooms/Unkempt Entrance.txtpb b/data/maps/daedalus/rooms/Unkempt Entrance.txtpb index c0cb0df..c5ae4ab 100644 --- a/data/maps/daedalus/rooms/Unkempt Entrance.txtpb +++ b/data/maps/daedalus/rooms/Unkempt Entrance.txtpb
@@ -3,4 +3,6 @@ panel_display_name: "O2 Room"
3ports { 3ports {
4 name: "UNKEMPT" 4 name: "UNKEMPT"
5 path: "Components/Warps/Worldports/worldport6" 5 path: "Components/Warps/Worldports/worldport6"
6 destination { x: -61 y: 0 z: 95 }
7 rotation: 270
6} 8}
diff --git a/data/maps/daedalus/rooms/White Hallway From Entry.txtpb b/data/maps/daedalus/rooms/White Hallway From Entry.txtpb index a172313..8139a6c 100644 --- a/data/maps/daedalus/rooms/White Hallway From Entry.txtpb +++ b/data/maps/daedalus/rooms/White Hallway From Entry.txtpb
@@ -1,12 +1,8 @@
1name: "White Hallway From Entry" 1name: "White Hallway From Entry"
2panel_display_name: "Southwest Area" 2panel_display_name: "Southwest Area"
3# Not exactly sure what to do with this yet. In unshuffled connections, the door
4# here should be paired with the door on the other end (which is vanilla) even
5# if control center color doors are shuffled. But when connections are shuffled
6# maybe this should be shuffled separately? I might also want to find a way to
7# register when there's a door immediately outside of a connection so that when
8# two connections behind doors are shuffled together, their doors can be paired.
9ports { 3ports {
10 name: "ENTRY" 4 name: "ENTRY"
11 path: "Components/Warps/Worldports/worldport10" 5 path: "Components/Warps/Worldports/worldport10"
6 destination { x: -46 y: 0 z: 23 }
7 rotation: 90
12} 8}
diff --git a/data/maps/daedalus/rooms/Wonderland.txtpb b/data/maps/daedalus/rooms/Wonderland.txtpb index ae9b3f1..0e04d7d 100644 --- a/data/maps/daedalus/rooms/Wonderland.txtpb +++ b/data/maps/daedalus/rooms/Wonderland.txtpb
@@ -38,4 +38,6 @@ panels {
38ports { 38ports {
39 name: "WONDROUS" 39 name: "WONDROUS"
40 path: "Components/Warps/Worldports/worldport3" 40 path: "Components/Warps/Worldports/worldport3"
41 destination { x: -104 y: 0 z: -69 }
42 rotation: 180
41} 43}
diff --git a/data/maps/daedalus/rooms/Yellow Color Door.txtpb b/data/maps/daedalus/rooms/Yellow Color Door.txtpb index e44658c..0ffec87 100644 --- a/data/maps/daedalus/rooms/Yellow Color Door.txtpb +++ b/data/maps/daedalus/rooms/Yellow Color Door.txtpb
@@ -31,4 +31,6 @@ paintings {
31ports { 31ports {
32 name: "FOURROOMS" 32 name: "FOURROOMS"
33 path: "Components/Warps/Worldports/worldport8" 33 path: "Components/Warps/Worldports/worldport8"
34 destination { x: 92.5 y: 0 z: -62 }
35 rotation: 90
34} 36}
diff --git a/data/maps/four_rooms/rooms/Examples Room.txtpb b/data/maps/four_rooms/rooms/Examples Room.txtpb index dc82971..513bb61 100644 --- a/data/maps/four_rooms/rooms/Examples Room.txtpb +++ b/data/maps/four_rooms/rooms/Examples Room.txtpb
@@ -58,5 +58,6 @@ panels {
58ports { 58ports {
59 name: "DAEDALUS" 59 name: "DAEDALUS"
60 path: "Components/Warps/worldport2" 60 path: "Components/Warps/worldport2"
61 orientation: "north" 61 destination { x: 0 y: 0 z: -40.5 }
62 rotation: 180
62} 63}
diff --git a/data/maps/four_rooms/rooms/Intensify Room.txtpb b/data/maps/four_rooms/rooms/Intensify Room.txtpb index 2cbb214..dfdb6dc 100644 --- a/data/maps/four_rooms/rooms/Intensify Room.txtpb +++ b/data/maps/four_rooms/rooms/Intensify Room.txtpb
@@ -58,5 +58,6 @@ panels {
58ports { 58ports {
59 name: "IMPRESSIVE" 59 name: "IMPRESSIVE"
60 path: "Components/Warps/worldport" 60 path: "Components/Warps/worldport"
61 orientation: "south" 61 destination { x: 0 y: 0 z: 6.5 }
62 rotation: 0
62} 63}
diff --git a/data/maps/four_rooms/rooms/Synonyms Room.txtpb b/data/maps/four_rooms/rooms/Synonyms Room.txtpb index 4dd5b5d..3d2ddcc 100644 --- a/data/maps/four_rooms/rooms/Synonyms Room.txtpb +++ b/data/maps/four_rooms/rooms/Synonyms Room.txtpb
@@ -58,5 +58,6 @@ panels {
58ports { 58ports {
59 name: "ENTRY" 59 name: "ENTRY"
60 path: "Components/Warps/worldport3" 60 path: "Components/Warps/worldport3"
61 orientation: "south" 61 destination { x: 20 y: 0 z: 6.5 }
62 rotation: 0
62} 63}
diff --git a/data/maps/four_rooms/rooms/Time Room.txtpb b/data/maps/four_rooms/rooms/Time Room.txtpb index d684685..0786d04 100644 --- a/data/maps/four_rooms/rooms/Time Room.txtpb +++ b/data/maps/four_rooms/rooms/Time Room.txtpb
@@ -58,5 +58,6 @@ panels {
58ports { 58ports {
59 name: "OWL" 59 name: "OWL"
60 path: "Components/Warps/worldport4" 60 path: "Components/Warps/worldport4"
61 orientation: "north" 61 destination { x: 20 y: 0 z: -40.5 }
62 rotation: 180
62} 63}
diff --git a/data/maps/the_bearer/rooms/Back Area.txtpb b/data/maps/the_bearer/rooms/Back Area.txtpb index b1860de..0be8a7c 100644 --- a/data/maps/the_bearer/rooms/Back Area.txtpb +++ b/data/maps/the_bearer/rooms/Back Area.txtpb
@@ -9,5 +9,6 @@ panels {
9ports { 9ports {
10 name: "DAEDALUS" 10 name: "DAEDALUS"
11 path: "Components/Warps/worldport2" 11 path: "Components/Warps/worldport2"
12 orientation: "north" 12 destination { x: 10 y: 0 z: -84.5 }
13 rotation: 180
13} 14}
diff --git a/data/maps/the_bearer/rooms/Entry.txtpb b/data/maps/the_bearer/rooms/Entry.txtpb index 4300c1f..e770924 100644 --- a/data/maps/the_bearer/rooms/Entry.txtpb +++ b/data/maps/the_bearer/rooms/Entry.txtpb
@@ -58,5 +58,6 @@ panels {
58ports { 58ports {
59 name: "UNYIELDING" 59 name: "UNYIELDING"
60 path: "Components/Warps/worldport" 60 path: "Components/Warps/worldport"
61 orientation: "east" 61 destination { x: 3 y: 4 z: 15 }
62 rotation: 90
62} 63}
diff --git a/data/maps/the_bearer/rooms/Tree Entrance.txtpb b/data/maps/the_bearer/rooms/Tree Entrance.txtpb index 97a07da..d3172dc 100644 --- a/data/maps/the_bearer/rooms/Tree Entrance.txtpb +++ b/data/maps/the_bearer/rooms/Tree Entrance.txtpb
@@ -2,5 +2,6 @@ name: "Tree Entrance"
2ports { 2ports {
3 name: "TREE" 3 name: "TREE"
4 path: "Components/Warps/worldport3" 4 path: "Components/Warps/worldport3"
5 orientation: "north" 5 destination { x: -19 y: 0 z: -83.5 }
6 rotation: 180
6} 7}
diff --git a/data/maps/the_between/rooms/Control Center Side.txtpb b/data/maps/the_between/rooms/Control Center Side.txtpb index a6a126a..0576305 100644 --- a/data/maps/the_between/rooms/Control Center Side.txtpb +++ b/data/maps/the_between/rooms/Control Center Side.txtpb
@@ -14,10 +14,12 @@ paintings {
14ports { 14ports {
15 name: "CC" 15 name: "CC"
16 path: "Components/Warps/worldport3" 16 path: "Components/Warps/worldport3"
17 orientation: "north" 17 destination { x: 36 y: 0 z: 1 }
18 rotation: 180
18} 19}
19ports { 20ports {
20 name: "LIVELY" 21 name: "LIVELY"
21 path: "Components/Warps/worldport2" 22 path: "Components/Warps/worldport2"
22 orientation: "south" 23 destination { x: 24 y: 0 z: 6.5 }
24 rotation: 0
23} 25}
diff --git a/data/maps/the_between/rooms/Main Area.txtpb b/data/maps/the_between/rooms/Main Area.txtpb index a0fc596..ed6072b 100644 --- a/data/maps/the_between/rooms/Main Area.txtpb +++ b/data/maps/the_between/rooms/Main Area.txtpb
@@ -198,5 +198,6 @@ panels {
198ports { 198ports {
199 name: "GREAT" 199 name: "GREAT"
200 path: "Components/Warps/worldport" 200 path: "Components/Warps/worldport"
201 orientation: "east" 201 destination { x: -1 y: 0 z: 20 }
202 rotation: 90
202} 203}
diff --git a/data/maps/the_between/rooms/Plaza Entrance.txtpb b/data/maps/the_between/rooms/Plaza Entrance.txtpb index e4d7b19..5c87619 100644 --- a/data/maps/the_between/rooms/Plaza Entrance.txtpb +++ b/data/maps/the_between/rooms/Plaza Entrance.txtpb
@@ -2,5 +2,6 @@ name: "Plaza Entrance"
2ports { 2ports {
3 name: "PLAZA" 3 name: "PLAZA"
4 path: "Components/Warps/worldport4" 4 path: "Components/Warps/worldport4"
5 orientation: "north" 5 destination { x: -38 y: 0 z: 1 }
6 rotation: 180
6} 7}
diff --git a/data/maps/the_butterfly/rooms/Main Area.txtpb b/data/maps/the_butterfly/rooms/Main Area.txtpb index 8b441e4..c5349bc 100644 --- a/data/maps/the_butterfly/rooms/Main Area.txtpb +++ b/data/maps/the_butterfly/rooms/Main Area.txtpb
@@ -128,5 +128,6 @@ panels {
128ports { 128ports {
129 name: "GALLERY" 129 name: "GALLERY"
130 path: "Components/Warps/worldport" 130 path: "Components/Warps/worldport"
131 orientation: "southwest" # uhhhh this is new 131 destination { x: -19 y: 0 z: 19 }
132 rotation: 315
132} 133}
diff --git a/data/maps/the_colorful/rooms/Cyan Hallway.txtpb b/data/maps/the_colorful/rooms/Cyan Hallway.txtpb index 97ddb0f..268caa6 100644 --- a/data/maps/the_colorful/rooms/Cyan Hallway.txtpb +++ b/data/maps/the_colorful/rooms/Cyan Hallway.txtpb
@@ -24,10 +24,12 @@ panels {
24ports { 24ports {
25 name: "STURDY" 25 name: "STURDY"
26 path: "Components/Warps/worldport3" 26 path: "Components/Warps/worldport3"
27 orientation: "west" 27 destination { x: -17 y: 0 z: -75 }
28 rotation: 270
28} 29}
29ports { 30ports {
30 name: "DARKROOM" 31 name: "DARKROOM"
31 path: "Components/Warps/worldport2" 32 path: "Components/Warps/worldport2"
32 orientation: "west" 33 destination { x: -17 y: 0 z: -51 }
34 rotation: 270
33} 35}
diff --git a/data/maps/the_colorful/rooms/White Room.txtpb b/data/maps/the_colorful/rooms/White Room.txtpb index c2cf33f..da28fdc 100644 --- a/data/maps/the_colorful/rooms/White Room.txtpb +++ b/data/maps/the_colorful/rooms/White Room.txtpb
@@ -9,5 +9,6 @@ panels {
9ports { 9ports {
10 name: "GREAT" 10 name: "GREAT"
11 path: "Components/Warps/worldport" 11 path: "Components/Warps/worldport"
12 orientation: "west" 12 destination { x: 3.5 y: 0 z: 19 }
13 rotation: 270
13} 14}
diff --git a/data/maps/the_congruent/rooms/Main Area.txtpb b/data/maps/the_congruent/rooms/Main Area.txtpb index e91f419..1066da2 100644 --- a/data/maps/the_congruent/rooms/Main Area.txtpb +++ b/data/maps/the_congruent/rooms/Main Area.txtpb
@@ -86,7 +86,8 @@ panels {
86ports { 86ports {
87 name: "DARKROOM" 87 name: "DARKROOM"
88 path: "Components/Warps/worldport2" 88 path: "Components/Warps/worldport2"
89 orientation: "north" 89 destination { x: -19 y: 0 z: 7.5 }
90 rotation: 180
90} 91}
91paintings { 92paintings {
92 name: "P" 93 name: "P"
diff --git a/data/maps/the_darkroom/connections.txtpb b/data/maps/the_darkroom/connections.txtpb index 1b7ad05..43bca70 100644 --- a/data/maps/the_darkroom/connections.txtpb +++ b/data/maps/the_darkroom/connections.txtpb
@@ -1,7 +1,12 @@
1connections { 1connections {
2 from_room: "First Room"
3 to_room: "First Room Exit"
4 door { name: "Second Room Entrance" }
5}
6connections {
2 from { 7 from {
3 port { 8 port {
4 room: "First Room" 9 room: "First Room Exit"
5 name: "NEXT" 10 name: "NEXT"
6 } 11 }
7 } 12 }
@@ -14,9 +19,14 @@ connections {
14 oneway: true 19 oneway: true
15} 20}
16connections { 21connections {
22 from_room: "Second Room"
23 to_room: "Second Room Exit"
24 door { name: "Third Room Entrance" }
25}
26connections {
17 from { 27 from {
18 port { 28 port {
19 room: "Second Room" 29 room: "Second Room Exit"
20 name: "NEXT" 30 name: "NEXT"
21 } 31 }
22 } 32 }
diff --git a/data/maps/the_darkroom/rooms/Congruent Entrance.txtpb b/data/maps/the_darkroom/rooms/Congruent Entrance.txtpb index 7ea1286..c8f5dd7 100644 --- a/data/maps/the_darkroom/rooms/Congruent Entrance.txtpb +++ b/data/maps/the_darkroom/rooms/Congruent Entrance.txtpb
@@ -3,5 +3,6 @@ panel_display_name: "Second Room"
3ports { 3ports {
4 name: "CONGRUENT" 4 name: "CONGRUENT"
5 path: "Components/Warps/worldport7" 5 path: "Components/Warps/worldport7"
6 orientation: "east" 6 destination { x: 51.5 y: 0 z: 29 }
7 rotation: 90
7} 8}
diff --git a/data/maps/the_darkroom/rooms/Cyan Hallway.txtpb b/data/maps/the_darkroom/rooms/Cyan Hallway.txtpb index 308efb1..eba02f5 100644 --- a/data/maps/the_darkroom/rooms/Cyan Hallway.txtpb +++ b/data/maps/the_darkroom/rooms/Cyan Hallway.txtpb
@@ -3,5 +3,6 @@ panel_display_name: "First Room"
3ports { 3ports {
4 name: "COLORFUL" 4 name: "COLORFUL"
5 path: "Components/Warps/worldport8" 5 path: "Components/Warps/worldport8"
6 orientation: "north" 6 destination { x: 20 y: 0 z: -12 }
7 rotation: 180
7} 8}
diff --git a/data/maps/the_darkroom/rooms/Double Sided Entrance.txtpb b/data/maps/the_darkroom/rooms/Double Sided Entrance.txtpb index 9d25108..7b258cf 100644 --- a/data/maps/the_darkroom/rooms/Double Sided Entrance.txtpb +++ b/data/maps/the_darkroom/rooms/Double Sided Entrance.txtpb
@@ -3,5 +3,6 @@ panel_display_name: "First Room"
3ports { 3ports {
4 name: "DOUBLESIDED" 4 name: "DOUBLESIDED"
5 path: "Components/Warps/worldport6" 5 path: "Components/Warps/worldport6"
6 orientation: "east" 6 destination { x: 15 y: 0 z: 23 }
7 rotation: 90
7} 8}
diff --git a/data/maps/the_darkroom/rooms/First Room Exit.txtpb b/data/maps/the_darkroom/rooms/First Room Exit.txtpb new file mode 100644 index 0000000..852d562 --- /dev/null +++ b/data/maps/the_darkroom/rooms/First Room Exit.txtpb
@@ -0,0 +1,8 @@
1name: "First Room Exit"
2panel_display_name: "First Room"
3ports {
4 name: "NEXT"
5 path: "Components/Warps/worldport2"
6 destination { x: 0 y: 0 z: -15 }
7 rotation: 180
8}
diff --git a/data/maps/the_darkroom/rooms/First Room.txtpb b/data/maps/the_darkroom/rooms/First Room.txtpb index c635757..5e8167c 100644 --- a/data/maps/the_darkroom/rooms/First Room.txtpb +++ b/data/maps/the_darkroom/rooms/First Room.txtpb
@@ -34,11 +34,6 @@ panels {
34ports { 34ports {
35 name: "ENTRY" 35 name: "ENTRY"
36 path: "Components/Warps/worldport" 36 path: "Components/Warps/worldport"
37 orientation: "south" 37 destination { x: -10 y: 0 z: 10 }
38} 38 rotation: 0
39ports {
40 name: "NEXT"
41 path: "Components/Warps/worldport2"
42 orientation: "north"
43 required_door { name: "Second Room Entrance" }
44} 39}
diff --git a/data/maps/the_darkroom/rooms/Second Room Exit.txtpb b/data/maps/the_darkroom/rooms/Second Room Exit.txtpb new file mode 100644 index 0000000..9f197ae --- /dev/null +++ b/data/maps/the_darkroom/rooms/Second Room Exit.txtpb
@@ -0,0 +1,8 @@
1name: "Second Room Exit"
2panel_display_name: "Second Room"
3ports {
4 name: "NEXT"
5 path: "Components/Warps/worldport4"
6 destination { x: 48 y: 0 z: -15 }
7 rotation: 180
8}
diff --git a/data/maps/the_darkroom/rooms/Second Room.txtpb b/data/maps/the_darkroom/rooms/Second Room.txtpb index a3964ea..fed0669 100644 --- a/data/maps/the_darkroom/rooms/Second Room.txtpb +++ b/data/maps/the_darkroom/rooms/Second Room.txtpb
@@ -39,11 +39,6 @@ panels {
39ports { 39ports {
40 name: "ENTRY" 40 name: "ENTRY"
41 path: "Components/Warps/worldport3" 41 path: "Components/Warps/worldport3"
42 orientation: "south" 42 destination { x: 38 y: 0 z: 10 }
43} 43 rotation: 0
44ports {
45 name: "NEXT"
46 path: "Components/Warps/worldport4"
47 orientation: "north"
48 required_door { name: "Third Room Entrance" }
49} 44}
diff --git a/data/maps/the_darkroom/rooms/Third Room.txtpb b/data/maps/the_darkroom/rooms/Third Room.txtpb index fc80fa7..5e5fc62 100644 --- a/data/maps/the_darkroom/rooms/Third Room.txtpb +++ b/data/maps/the_darkroom/rooms/Third Room.txtpb
@@ -66,5 +66,6 @@ panels {
66ports { 66ports {
67 name: "ENTRY" 67 name: "ENTRY"
68 path: "Components/Warps/worldport5" 68 path: "Components/Warps/worldport5"
69 orientation: "south" 69 destination { x: 97 y: 0 z: 10 }
70 rotation: 0
70} 71}
diff --git a/data/maps/the_digital/rooms/Gallery Maze.txtpb b/data/maps/the_digital/rooms/Gallery Maze.txtpb index bfdfa41..32ed611 100644 --- a/data/maps/the_digital/rooms/Gallery Maze.txtpb +++ b/data/maps/the_digital/rooms/Gallery Maze.txtpb
@@ -2,5 +2,6 @@ name: "Gallery Maze"
2ports { 2ports {
3 name: "GALLERY" 3 name: "GALLERY"
4 path: "Components/Warps/worldport4" 4 path: "Components/Warps/worldport4"
5 orientation: "east" 5 destination { x: -58 y: 0 z: -76 }
6 rotation: 90
6} 7}
diff --git a/data/maps/the_digital/rooms/Main Area.txtpb b/data/maps/the_digital/rooms/Main Area.txtpb index 99bcdcc..3a52778 100644 --- a/data/maps/the_digital/rooms/Main Area.txtpb +++ b/data/maps/the_digital/rooms/Main Area.txtpb
@@ -28,15 +28,18 @@ panels {
28ports { 28ports {
29 name: "ENTRY1" 29 name: "ENTRY1"
30 path: "Components/Worldports/worldport3" 30 path: "Components/Worldports/worldport3"
31 orientation: "west" 31 destination { x: -33 y: 0 z: 28 }
32 rotation: 270
32} 33}
33ports { 34ports {
34 name: "ENTRY2" 35 name: "ENTRY2"
35 path: "Components/Worldports/worldport" 36 path: "Components/Worldports/worldport"
36 orientation: "south" 37 destination { x: -30 y: 0 z: 51 }
38 rotation: 0
37} 39}
38ports { 40ports {
39 name: "ENTRY3" 41 name: "ENTRY3"
40 path: "Components/Worldports/worldport2" 42 path: "Components/Worldports/worldport2"
41 orientation: "south" 43 destination { x: 0 y: 0 z: 51 }
44 rotation: 0
42} 45}
diff --git a/data/maps/the_digital/rooms/Tree Area.txtpb b/data/maps/the_digital/rooms/Tree Area.txtpb index 56301d5..f3056b6 100644 --- a/data/maps/the_digital/rooms/Tree Area.txtpb +++ b/data/maps/the_digital/rooms/Tree Area.txtpb
@@ -9,6 +9,6 @@ panels {
9ports { 9ports {
10 name: "TREE" 10 name: "TREE"
11 path: "Components/Worldports/worldport4" 11 path: "Components/Worldports/worldport4"
12 orientation: "east" 12 destination { x: -16 y: 0 z: -31 }
13 # This is double sided. 13 rotation: 270
14} 14}
diff --git a/data/maps/the_digital/rooms/Unyielding Entrance.txtpb b/data/maps/the_digital/rooms/Unyielding Entrance.txtpb index 0370928..575f1d8 100644 --- a/data/maps/the_digital/rooms/Unyielding Entrance.txtpb +++ b/data/maps/the_digital/rooms/Unyielding Entrance.txtpb
@@ -2,5 +2,6 @@ name: "Unyielding Entrance"
2ports { 2ports {
3 name: "UNYIELDING" 3 name: "UNYIELDING"
4 path: "Components/Warps/worldport5" 4 path: "Components/Warps/worldport5"
5 orientation: "east" 5 destination { x: 14 y: 0 z: 5 }
6 rotation: 90
6} 7}
diff --git a/data/maps/the_double_sided/rooms/Start.txtpb b/data/maps/the_double_sided/rooms/Start.txtpb index b0bfbcd..f7b6c37 100644 --- a/data/maps/the_double_sided/rooms/Start.txtpb +++ b/data/maps/the_double_sided/rooms/Start.txtpb
@@ -16,5 +16,6 @@ panels {
16ports { 16ports {
17 name: "DARKROOM" 17 name: "DARKROOM"
18 path: "Components/Warps/worldport" 18 path: "Components/Warps/worldport"
19 orientation: "west" 19 destination { x: -3 y: 0 z: 8 }
20 rotation: 270
20} 21}
diff --git a/data/maps/the_entry/connections.txtpb b/data/maps/the_entry/connections.txtpb index ca0207e..5fe279c 100644 --- a/data/maps/the_entry/connections.txtpb +++ b/data/maps/the_entry/connections.txtpb
@@ -160,6 +160,11 @@ connections {
160 door { name: "Lime Room Entrance" } 160 door { name: "Lime Room Entrance" }
161} 161}
162connections { 162connections {
163 from_room: "Lime Room"
164 to_room: "Revitalized Entrance"
165 door { name: "Revitalized Entrance" }
166}
167connections {
163 from { painting { room: "Link Area" name: "NEAR" } } 168 from { painting { room: "Link Area" name: "NEAR" } }
164 to { painting { room: "Flipped Link Area" name: "NEAR" } } 169 to { painting { room: "Flipped Link Area" name: "NEAR" } }
165 oneway: true 170 oneway: true
diff --git a/data/maps/the_entry/rooms/Composite Room Entrance.txtpb b/data/maps/the_entry/rooms/Composite Room Entrance.txtpb index b9a8098..9d9f362 100644 --- a/data/maps/the_entry/rooms/Composite Room Entrance.txtpb +++ b/data/maps/the_entry/rooms/Composite Room Entrance.txtpb
@@ -3,5 +3,6 @@ panel_display_name: "Starting Room"
3ports { 3ports {
4 name: "COMPOSITE" 4 name: "COMPOSITE"
5 path: "Components/Warps/worldport12" 5 path: "Components/Warps/worldport12"
6 orientation: "east" 6 destination { x: 16 y: 0 z: -20 }
7 rotation: 90
7} 8}
diff --git a/data/maps/the_entry/rooms/Daedalus Entrance.txtpb b/data/maps/the_entry/rooms/Daedalus Entrance.txtpb index db9b78a..4967857 100644 --- a/data/maps/the_entry/rooms/Daedalus Entrance.txtpb +++ b/data/maps/the_entry/rooms/Daedalus Entrance.txtpb
@@ -3,5 +3,6 @@ panel_display_name: "Starting Room"
3ports { 3ports {
4 name: "DAEDALUS" 4 name: "DAEDALUS"
5 path: "Components/Warps/worldport6" 5 path: "Components/Warps/worldport6"
6 orientation: "west" 6 destination { x: -16 y: 0 z: -20 }
7 rotation: 270
7} 8}
diff --git a/data/maps/the_entry/rooms/Digital Entrance.txtpb b/data/maps/the_entry/rooms/Digital Entrance.txtpb index dd8b5f4..fe474b3 100644 --- a/data/maps/the_entry/rooms/Digital Entrance.txtpb +++ b/data/maps/the_entry/rooms/Digital Entrance.txtpb
@@ -3,5 +3,6 @@ panel_display_name: "Starting Room"
3ports { 3ports {
4 name: "DIGITAL" 4 name: "DIGITAL"
5 path: "Components/Warps/worldport" 5 path: "Components/Warps/worldport"
6 orientation: "west" 6 destination { x: -78 y: 0 z: -24 }
7 rotation: 270
7} 8}
diff --git a/data/maps/the_entry/rooms/Entry Exit.txtpb b/data/maps/the_entry/rooms/Entry Exit.txtpb index b5d75aa..68c7006 100644 --- a/data/maps/the_entry/rooms/Entry Exit.txtpb +++ b/data/maps/the_entry/rooms/Entry Exit.txtpb
@@ -3,5 +3,6 @@ panel_display_name: "Starting Room"
3ports { 3ports {
4 name: "GREAT" 4 name: "GREAT"
5 path: "Components/Warps/worldport2" 5 path: "Components/Warps/worldport2"
6 orientation: "north" 6 destination { x: 18 y: 0 z: -36 }
7 rotation: 180
7} 8}
diff --git a/data/maps/the_entry/rooms/Eye Room.txtpb b/data/maps/the_entry/rooms/Eye Room.txtpb index da17163..f56ce59 100644 --- a/data/maps/the_entry/rooms/Eye Room.txtpb +++ b/data/maps/the_entry/rooms/Eye Room.txtpb
@@ -32,5 +32,6 @@ paintings {
32ports { 32ports {
33 name: "LIONIZED" 33 name: "LIONIZED"
34 path: "Components/Warps/worldport10" 34 path: "Components/Warps/worldport10"
35 orientation: "north" 35 destination { x: 18 y: 0 z: -88.5 }
36 rotation: 180
36} 37}
diff --git a/data/maps/the_entry/rooms/Four Rooms Entrance.txtpb b/data/maps/the_entry/rooms/Four Rooms Entrance.txtpb index 689d23e..42e3173 100644 --- a/data/maps/the_entry/rooms/Four Rooms Entrance.txtpb +++ b/data/maps/the_entry/rooms/Four Rooms Entrance.txtpb
@@ -2,6 +2,7 @@ name: "Four Rooms Entrance"
2ports { 2ports {
3 name: "FOUR" 3 name: "FOUR"
4 path: "Components/Warps/worldport9" 4 path: "Components/Warps/worldport9"
5 orientation: "south" 5 destination { x: -41 y: 6 z: -17.5 }
6 rotation: 0
6 gravity: Y_PLUS 7 gravity: Y_PLUS
7} 8}
diff --git a/data/maps/the_entry/rooms/Gallery Return.txtpb b/data/maps/the_entry/rooms/Gallery Return.txtpb index 987a3ca..231dff9 100644 --- a/data/maps/the_entry/rooms/Gallery Return.txtpb +++ b/data/maps/the_entry/rooms/Gallery Return.txtpb
@@ -10,5 +10,6 @@ panels {
10ports { 10ports {
11 name: "GALLERY" 11 name: "GALLERY"
12 path: "Components/Warps/worldport4" 12 path: "Components/Warps/worldport4"
13 orientation: "north" 13 destination { x: -38 y: 0 z: 8.5 }
14 rotation: 180
14} \ No newline at end of file 15} \ No newline at end of file
diff --git a/data/maps/the_entry/rooms/Least Blue Last.txtpb b/data/maps/the_entry/rooms/Least Blue Last.txtpb index adbe545..4fb715e 100644 --- a/data/maps/the_entry/rooms/Least Blue Last.txtpb +++ b/data/maps/the_entry/rooms/Least Blue Last.txtpb
@@ -73,7 +73,8 @@ panels {
73ports { 73ports {
74 name: "DARKROOM" 74 name: "DARKROOM"
75 path: "Components/Warps/worldport5" 75 path: "Components/Warps/worldport5"
76 orientation: "south" 76 destination { x: 43 y: 0 z: -10 }
77 rotation: 0
77} 78}
78paintings { 79paintings {
79 name: "PAINS" 80 name: "PAINS"
diff --git a/data/maps/the_entry/rooms/Liberated Entrance.txtpb b/data/maps/the_entry/rooms/Liberated Entrance.txtpb index f0176a0..7c50e39 100644 --- a/data/maps/the_entry/rooms/Liberated Entrance.txtpb +++ b/data/maps/the_entry/rooms/Liberated Entrance.txtpb
@@ -2,5 +2,6 @@ name: "Liberated Entrance"
2ports { 2ports {
3 name: "BLUE" 3 name: "BLUE"
4 path: "worldport8" 4 path: "worldport8"
5 orientation: "west" 5 destination { x: 18 y: 0 z: 55 }
6 rotation: 270
6} 7}
diff --git a/data/maps/the_entry/rooms/Lime Room.txtpb b/data/maps/the_entry/rooms/Lime Room.txtpb index e94f775..603fbdc 100644 --- a/data/maps/the_entry/rooms/Lime Room.txtpb +++ b/data/maps/the_entry/rooms/Lime Room.txtpb
@@ -19,9 +19,3 @@ panels {
19 answer: "white" 19 answer: "white"
20 symbols: EXAMPLE 20 symbols: EXAMPLE
21} 21}
22ports {
23 name: "REVITALIZED"
24 path: "worldport7"
25 orientation: "north"
26 required_door { name: "Revitalized Entrance" }
27} \ No newline at end of file
diff --git a/data/maps/the_entry/rooms/Literate Entrance.txtpb b/data/maps/the_entry/rooms/Literate Entrance.txtpb index 4ec402f..c15e242 100644 --- a/data/maps/the_entry/rooms/Literate Entrance.txtpb +++ b/data/maps/the_entry/rooms/Literate Entrance.txtpb
@@ -2,5 +2,6 @@ name: "Literate Entrance"
2ports { 2ports {
3 name: "BROWN" 3 name: "BROWN"
4 path: "worldport9" 4 path: "worldport9"
5 orientation: "east" 5 destination { x: 39 y: 0 z: 55 }
6 rotation: 90
6} 7}
diff --git a/data/maps/the_entry/rooms/Parthenon Return.txtpb b/data/maps/the_entry/rooms/Parthenon Return.txtpb index 4776d11..bd49b55 100644 --- a/data/maps/the_entry/rooms/Parthenon Return.txtpb +++ b/data/maps/the_entry/rooms/Parthenon Return.txtpb
@@ -10,5 +10,6 @@ panels {
10ports { 10ports {
11 name: "PARTHENON" 11 name: "PARTHENON"
12 path: "Components/Warps/worldport8" 12 path: "Components/Warps/worldport8"
13 orientation: "north" 13 destination { x: -5.5 y: 0 z: 18 }
14} \ No newline at end of file 14 rotation: 180
15}
diff --git a/data/maps/the_entry/rooms/Rabbit Hole.txtpb b/data/maps/the_entry/rooms/Rabbit Hole.txtpb index 520d513..0cb4661 100644 --- a/data/maps/the_entry/rooms/Rabbit Hole.txtpb +++ b/data/maps/the_entry/rooms/Rabbit Hole.txtpb
@@ -9,5 +9,6 @@ panels {
9ports { 9ports {
10 name: "HOLE" 10 name: "HOLE"
11 path: "worldport4" 11 path: "worldport4"
12 orientation: "down" 12 destination { x: 74 y: 0 z: -43 }
13} \ No newline at end of file 13 rotation: 0
14}
diff --git a/data/maps/the_entry/rooms/Repetitive Entrance.txtpb b/data/maps/the_entry/rooms/Repetitive Entrance.txtpb index 04ddcf3..40937a7 100644 --- a/data/maps/the_entry/rooms/Repetitive Entrance.txtpb +++ b/data/maps/the_entry/rooms/Repetitive Entrance.txtpb
@@ -3,5 +3,9 @@ panel_display_name: "Starting Room"
3ports { 3ports {
4 name: "REPETITIVE" 4 name: "REPETITIVE"
5 path: "Components/Warps/worldport7" 5 path: "Components/Warps/worldport7"
6 orientation: "north" 6 destination { x: -20 y: 0 z: -16 }
7 rotation: 180
8 # TODO: this is part of what makes the keyholder dependent connection from CC
9 # safe in vanilla doors
10 no_shuffle: true
7} 11}
diff --git a/data/maps/the_entry/rooms/Revitalized Entrance.txtpb b/data/maps/the_entry/rooms/Revitalized Entrance.txtpb new file mode 100644 index 0000000..1c38164 --- /dev/null +++ b/data/maps/the_entry/rooms/Revitalized Entrance.txtpb
@@ -0,0 +1,8 @@
1name: "Revitalized Entrance"
2panel_display_name: "Colored Doors Area"
3ports {
4 name: "REVITALIZED"
5 path: "worldport7"
6 destination { x: -58 y: 0 z: 31.5 }
7 rotation: 180
8}
diff --git a/data/maps/the_entry/rooms/Shop Entrance.txtpb b/data/maps/the_entry/rooms/Shop Entrance.txtpb index 67aa6de..ad407c3 100644 --- a/data/maps/the_entry/rooms/Shop Entrance.txtpb +++ b/data/maps/the_entry/rooms/Shop Entrance.txtpb
@@ -10,5 +10,6 @@ panels {
10ports { 10ports {
11 name: "SHOP" 11 name: "SHOP"
12 path: "Components/Warps/worldport13" 12 path: "Components/Warps/worldport13"
13 orientation: "east" 13 destination { x: 18 y: 0 z: 49 }
14 rotation: 90
14} \ No newline at end of file 15} \ No newline at end of file
diff --git a/data/maps/the_entry/rooms/White Hallway To Daedalus.txtpb b/data/maps/the_entry/rooms/White Hallway To Daedalus.txtpb index ce35e5b..9149c03 100644 --- a/data/maps/the_entry/rooms/White Hallway To Daedalus.txtpb +++ b/data/maps/the_entry/rooms/White Hallway To Daedalus.txtpb
@@ -3,5 +3,6 @@ panel_display_name: "Colored Doors Area"
3ports { 3ports {
4 name: "DAEDALUS" 4 name: "DAEDALUS"
5 path: "Components/Warps/worldport11" 5 path: "Components/Warps/worldport11"
6 orientation: "west" 6 destination { x: -45 y: 0 z: 24 }
7 rotation: 270
7} 8}
diff --git a/data/maps/the_entry/rooms/X Area.txtpb b/data/maps/the_entry/rooms/X Area.txtpb index 3f61c26..215e223 100644 --- a/data/maps/the_entry/rooms/X Area.txtpb +++ b/data/maps/the_entry/rooms/X Area.txtpb
@@ -7,5 +7,6 @@ letters {
7ports { 7ports {
8 name: "CC" 8 name: "CC"
9 path: "Components/Warps/worldport3" 9 path: "Components/Warps/worldport3"
10 orientation: "west" 10 destination { x: -12.5 y: 0 z: 60 }
11 rotation: 270
11} 12}
diff --git a/data/maps/the_extravagant/rooms/Engine Room.txtpb b/data/maps/the_extravagant/rooms/Engine Room.txtpb index 3dcc437..42ecc54 100644 --- a/data/maps/the_extravagant/rooms/Engine Room.txtpb +++ b/data/maps/the_extravagant/rooms/Engine Room.txtpb
@@ -24,5 +24,6 @@ ports {
24 name: "GALLERY" 24 name: "GALLERY"
25 path: "Components/Warps/worldport2" 25 path: "Components/Warps/worldport2"
26 gravity: Z_PLUS 26 gravity: Z_PLUS
27 # TODO: orientation is not well defined with Z-axis gravity 27 # TODO: entrance shuffling for non Y axis gravity
28 no_shuffle: true
28} 29}
diff --git a/data/maps/the_gallery/rooms/Main Area.txtpb b/data/maps/the_gallery/rooms/Main Area.txtpb index bc1606d..d2f1812 100644 --- a/data/maps/the_gallery/rooms/Main Area.txtpb +++ b/data/maps/the_gallery/rooms/Main Area.txtpb
@@ -163,5 +163,6 @@ paintings {
163ports { 163ports {
164 name: "ENTRY" 164 name: "ENTRY"
165 path: "Components/Warps/worldport" 165 path: "Components/Warps/worldport"
166 orientation: "west" 166 destination { x: -3.5 y: 0 z: 16 }
167 rotation: 270
167} 168}
diff --git a/data/maps/the_great/rooms/Back Area.txtpb b/data/maps/the_great/rooms/Back Area.txtpb index c1b8ab3..fdf72e7 100644 --- a/data/maps/the_great/rooms/Back Area.txtpb +++ b/data/maps/the_great/rooms/Back Area.txtpb
@@ -125,22 +125,26 @@ paintings {
125ports { 125ports {
126 name: "UNKEMPT" 126 name: "UNKEMPT"
127 path: "Meshes/Blocks/Warps/worldport5" 127 path: "Meshes/Blocks/Warps/worldport5"
128 orientation: "north" 128 destination { x: 72 y: 0 z: 10.5 }
129 rotation: 180
129} 130}
130ports { 131ports {
131 name: "THREEDOORS" 132 name: "THREEDOORS"
132 path: "Meshes/Blocks/Warps/worldport16" 133 path: "Meshes/Blocks/Warps/worldport16"
133 orientation: "south" 134 destination { x: 77 y: 0 z: 33.5 }
135 rotation: 0
134} 136}
135ports { 137ports {
136 name: "TOWER" 138 name: "TOWER"
137 path: "Meshes/Blocks/Warps/worldport10" 139 path: "Meshes/Blocks/Warps/worldport10"
138 orientation: "south" 140 destination { x: 0 y: 0 z: 52 }
141 rotation: 0
139 required_door { name: "Tower Entrance" } 142 required_door { name: "Tower Entrance" }
140 # The reverse warp bypasses the door, so there needs to be two oneway connections. 143 # The reverse warp bypasses the door, so there needs to be two oneway connections.
141} 144}
142ports { 145ports {
143 name: "TREE" 146 name: "TREE"
144 path: "Meshes/Blocks/Warps/worldport17" 147 path: "Meshes/Blocks/Warps/worldport17"
145 orientation: "north" 148 destination { x: 26 y: 0 z: 58 }
149 rotation: 180
146} 150}
diff --git a/data/maps/the_great/rooms/Colorful Entrance.txtpb b/data/maps/the_great/rooms/Colorful Entrance.txtpb index cb7eb25..aa2e8d4 100644 --- a/data/maps/the_great/rooms/Colorful Entrance.txtpb +++ b/data/maps/the_great/rooms/Colorful Entrance.txtpb
@@ -3,5 +3,6 @@ panel_display_name: "Pillar Room"
3ports { 3ports {
4 name: "COLORFUL" 4 name: "COLORFUL"
5 path: "Meshes/Blocks/Warps/worldport13" 5 path: "Meshes/Blocks/Warps/worldport13"
6 orientation: "west" 6 destination { x: -37.5 y: 0 z: 74 }
7 rotation: 270
7} 8}
diff --git a/data/maps/the_great/rooms/Daedalus Entrance.txtpb b/data/maps/the_great/rooms/Daedalus Entrance.txtpb index 003a8a3..a6976c2 100644 --- a/data/maps/the_great/rooms/Daedalus Entrance.txtpb +++ b/data/maps/the_great/rooms/Daedalus Entrance.txtpb
@@ -10,7 +10,8 @@ panels {
10ports { 10ports {
11 name: "DAEDALUS" 11 name: "DAEDALUS"
12 path: "Meshes/Blocks/Warps/worldport8" 12 path: "Meshes/Blocks/Warps/worldport8"
13 orientation: "south" 13 destination { x: 98 y: 2 z: 27.5 }
14 rotation: 0
14 required_door { name: "Daedalus Entrance" } 15 required_door { name: "Daedalus Entrance" }
15 # The reverse warp bypasses the door, so there needs to be two oneway connections. 16 # The reverse warp bypasses the door, so there needs to be two oneway connections.
16} 17}
diff --git a/data/maps/the_great/rooms/Hive Entrance.txtpb b/data/maps/the_great/rooms/Hive Entrance.txtpb index cd6ba68..aa91e2e 100644 --- a/data/maps/the_great/rooms/Hive Entrance.txtpb +++ b/data/maps/the_great/rooms/Hive Entrance.txtpb
@@ -10,5 +10,6 @@ panels {
10ports { 10ports {
11 name: "HIVE" 11 name: "HIVE"
12 path: "Meshes/Blocks/Warps/worldport19" 12 path: "Meshes/Blocks/Warps/worldport19"
13 orientation: "east" 13 destination { x: -91.5 y: 0 z: 37 }
14 rotation: 90
14} 15}
diff --git a/data/maps/the_great/rooms/Jubilant Entrance.txtpb b/data/maps/the_great/rooms/Jubilant Entrance.txtpb index 0700a6b..a7ca665 100644 --- a/data/maps/the_great/rooms/Jubilant Entrance.txtpb +++ b/data/maps/the_great/rooms/Jubilant Entrance.txtpb
@@ -3,5 +3,6 @@ panel_display_name: "West Side"
3ports { 3ports {
4 name: "JUBILANT" 4 name: "JUBILANT"
5 path: "Meshes/Blocks/Warps/worldport12" 5 path: "Meshes/Blocks/Warps/worldport12"
6 orientation: "east" 6 destination { x: -62 y: 0 z: -19 }
7 rotation: 90
7} 8}
diff --git a/data/maps/the_great/rooms/Main Area.txtpb b/data/maps/the_great/rooms/Main Area.txtpb index 82ec48c..61cf83d 100644 --- a/data/maps/the_great/rooms/Main Area.txtpb +++ b/data/maps/the_great/rooms/Main Area.txtpb
@@ -123,26 +123,31 @@ panels {
123ports { 123ports {
124 name: "ENTRY" 124 name: "ENTRY"
125 path: "Meshes/Blocks/Warps/worldport" 125 path: "Meshes/Blocks/Warps/worldport"
126 orientation: "south" 126 destination { x: 33 y: 0 z: 15 }
127 rotation: 0
127} 128}
128ports { 129ports {
129 name: "KEEN" 130 name: "KEEN"
130 path: "Meshes/Blocks/Warps/worldport6" 131 path: "Meshes/Blocks/Warps/worldport6"
131 orientation: "north" 132 destination { x: 33 y: 0 z: -21 }
133 rotation: 180
132} 134}
133ports { 135ports {
134 name: "ORB" 136 name: "ORB"
135 path: "Meshes/Blocks/Warps/worldport3" 137 path: "Meshes/Blocks/Warps/worldport3"
136 orientation: "north" 138 destination { x: 62 y: 0 z: -13 }
139 rotation: 180
137} 140}
138ports { 141ports {
139 name: "LINEAR" 142 name: "LINEAR"
140 path: "Meshes/Blocks/Warps/worldport15" 143 path: "Meshes/Blocks/Warps/worldport15"
141 orientation: "south" 144 destination { x: 33 y: 0 z: -42.5 }
145 rotation: 0
142} 146}
143ports { 147ports {
144 name: "DIGITAL" 148 name: "DIGITAL"
145 path: "Meshes/Blocks/Warps/worldport4" 149 path: "Meshes/Blocks/Warps/worldport4"
146 orientation: "down" 150 destination { x: -6.5 y: 0 z: 7.5 }
151 rotation: 0
147 required_door { name: "Digital Entrance" } 152 required_door { name: "Digital Entrance" }
148} 153}
diff --git a/data/maps/the_great/rooms/North Landscape.txtpb b/data/maps/the_great/rooms/North Landscape.txtpb index fb11c42..65e1f2a 100644 --- a/data/maps/the_great/rooms/North Landscape.txtpb +++ b/data/maps/the_great/rooms/North Landscape.txtpb
@@ -57,7 +57,7 @@ keyholders {
57ports { 57ports {
58 name: "INVISIBLE" 58 name: "INVISIBLE"
59 path: "Meshes/Blocks/Warps/worldport20" 59 path: "Meshes/Blocks/Warps/worldport20"
60 orientation: "north" 60 destination { x: 33 y: 0 z: -66.5 }
61 # Note that this can be easily entered from the other side. 61 rotation: 0
62 required_door { name: "Invisible Entrance" } 62 required_door { name: "Invisible Entrance" }
63} 63}
diff --git a/data/maps/the_great/rooms/Purple Room.txtpb b/data/maps/the_great/rooms/Purple Room.txtpb index e505ca0..de78437 100644 --- a/data/maps/the_great/rooms/Purple Room.txtpb +++ b/data/maps/the_great/rooms/Purple Room.txtpb
@@ -3,5 +3,6 @@ panel_display_name: "Main Area"
3ports { 3ports {
4 name: "DAEDALUS" 4 name: "DAEDALUS"
5 path: "Meshes/Blocks/Warps/worldport18" 5 path: "Meshes/Blocks/Warps/worldport18"
6 orientation: "north" 6 destination { x: 158 y: 0 z: 14 }
7 rotation: 180
7} 8}
diff --git a/data/maps/the_great/rooms/Salmon Room.txtpb b/data/maps/the_great/rooms/Salmon Room.txtpb index ecdef75..93bf86f 100644 --- a/data/maps/the_great/rooms/Salmon Room.txtpb +++ b/data/maps/the_great/rooms/Salmon Room.txtpb
@@ -3,5 +3,6 @@ panel_display_name: "Main Area"
3ports { 3ports {
4 name: "BETWEEN" 4 name: "BETWEEN"
5 path: "Meshes/Blocks/Warps/worldport11" 5 path: "Meshes/Blocks/Warps/worldport11"
6 orientation: "east" 6 destination { x: 83 y: 0 z: -21 }
7 rotation: 90
7} 8}
diff --git a/data/maps/the_great/rooms/Talented Entrance.txtpb b/data/maps/the_great/rooms/Talented Entrance.txtpb index 7329853..0546f82 100644 --- a/data/maps/the_great/rooms/Talented Entrance.txtpb +++ b/data/maps/the_great/rooms/Talented Entrance.txtpb
@@ -3,5 +3,6 @@ panel_display_name: "Question Room"
3ports { 3ports {
4 name: "TALENTED" 4 name: "TALENTED"
5 path: "Meshes/Blocks/Warps/worldport14" 5 path: "Meshes/Blocks/Warps/worldport14"
6 orientation: "south" 6 destination { x: 109 y: -6 z: -26.5 }
7 rotation: 0
7} 8}
diff --git a/data/maps/the_great/rooms/West Side.txtpb b/data/maps/the_great/rooms/West Side.txtpb index 8279e16..78a36ef 100644 --- a/data/maps/the_great/rooms/West Side.txtpb +++ b/data/maps/the_great/rooms/West Side.txtpb
@@ -64,17 +64,20 @@ paintings {
64ports { 64ports {
65 name: "IMPRESSIVE" 65 name: "IMPRESSIVE"
66 path: "Meshes/Blocks/Warps/worldport2" 66 path: "Meshes/Blocks/Warps/worldport2"
67 orientation: "south" 67 destination { x: -34 y: 0 z: 22.5 }
68 rotation: 0
68} 69}
69ports { 70ports {
70 name: "CC" 71 name: "CC"
71 path: "Meshes/Blocks/Warps/worldport9" 72 path: "Meshes/Blocks/Warps/worldport9"
72 orientation: "north" 73 destination { x: -59 y: 0 z: -50.5 }
74 rotation: 180
73} 75}
74ports { 76ports {
75 name: "PARTIAL" 77 name: "PARTIAL"
76 path: "Meshes/Blocks/Warps/worldport7" 78 path: "Meshes/Blocks/Warps/worldport7"
77 orientation: "east" 79 destination { x: -62 y: 0 z: 11 }
80 rotation: 90
78 # ER with this is weird; make sure to place on the surface 81 # ER with this is weird; make sure to place on the surface
79 required_door { name: "Partial Entrance" } 82 required_door { name: "Partial Entrance" }
80} 83}
diff --git a/data/maps/the_hinterlands/rooms/Main Area.txtpb b/data/maps/the_hinterlands/rooms/Main Area.txtpb index 8daac05..7c031db 100644 --- a/data/maps/the_hinterlands/rooms/Main Area.txtpb +++ b/data/maps/the_hinterlands/rooms/Main Area.txtpb
@@ -3,10 +3,12 @@ name: "Main Area"
3ports { 3ports {
4 name: "RIGHT" 4 name: "RIGHT"
5 path: "Components/Warps/worldport" 5 path: "Components/Warps/worldport"
6 orientation: "east" 6 destination { x: 30 y: 0 z: 19 }
7 rotation: 270
7} 8}
8ports { 9ports {
9 name: "LEFT" 10 name: "LEFT"
10 path: "Components/Warps/worldport2" 11 path: "Components/Warps/worldport2"
11 orientation: "east" 12 destination { x: 30 y: 0 z: -76 }
13 rotation: 270
12} 14}
diff --git a/data/maps/the_hive/rooms/Main Area.txtpb b/data/maps/the_hive/rooms/Main Area.txtpb index 013390a..1012b91 100644 --- a/data/maps/the_hive/rooms/Main Area.txtpb +++ b/data/maps/the_hive/rooms/Main Area.txtpb
@@ -273,20 +273,24 @@ keyholders {
273ports { 273ports {
274 name: "DAED1" 274 name: "DAED1"
275 path: "Components/Warps/worldport" 275 path: "Components/Warps/worldport"
276 orientation: "west" 276 destination { x: -1.5 y: 0 z: 24 }
277 rotation: 270
277} 278}
278ports { 279ports {
279 name: "DAED2" 280 name: "DAED2"
280 path: "Components/Warps/worldport2" 281 path: "Components/Warps/worldport2"
281 orientation: "west" 282 destination { x: -26.5 y: 0 z: -22 }
283 rotation: 270
282} 284}
283ports { 285ports {
284 name: "DAED3" 286 name: "DAED3"
285 path: "Components/Warps/worldport3" 287 path: "Components/Warps/worldport3"
286 orientation: "east" 288 destination { x: -44.5 y: 0 z: -13 }
289 rotation: 90
287} 290}
288ports { 291ports {
289 name: "GREAT" 292 name: "GREAT"
290 path: "Components/Warps/worldport4" 293 path: "Components/Warps/worldport4"
291 orientation: "west" 294 destination { x: -29.5 y: 0 z: -62 }
295 rotation: 270
292} 296}
diff --git a/data/maps/the_impressive/rooms/Green Eye.txtpb b/data/maps/the_impressive/rooms/Green Eye.txtpb index b4a115b..aed6462 100644 --- a/data/maps/the_impressive/rooms/Green Eye.txtpb +++ b/data/maps/the_impressive/rooms/Green Eye.txtpb
@@ -23,5 +23,6 @@ panels {
23ports { 23ports {
24 name: "PLAZA" 24 name: "PLAZA"
25 path: "Components/Warps/worldport3" 25 path: "Components/Warps/worldport3"
26 orientation: "east" 26 destination { x: -33 y: 0 z: 1 }
27 rotation: 90
27} 28}
diff --git a/data/maps/the_impressive/rooms/Lobby.txtpb b/data/maps/the_impressive/rooms/Lobby.txtpb index 3c565fe..f61691c 100644 --- a/data/maps/the_impressive/rooms/Lobby.txtpb +++ b/data/maps/the_impressive/rooms/Lobby.txtpb
@@ -10,5 +10,6 @@ panels {
10ports { 10ports {
11 name: "GREAT" 11 name: "GREAT"
12 path: "Components/Warps/worldport" 12 path: "Components/Warps/worldport"
13 orientation: "south" 13 destination { x: 0 y: 0 z: 11.5 }
14 rotation: 0
14} 15}
diff --git a/data/maps/the_impressive/rooms/Side Area.txtpb b/data/maps/the_impressive/rooms/Side Area.txtpb index 1dfb12b..a0c54cc 100644 --- a/data/maps/the_impressive/rooms/Side Area.txtpb +++ b/data/maps/the_impressive/rooms/Side Area.txtpb
@@ -10,5 +10,6 @@ panels {
10ports { 10ports {
11 name: "FOURROOMS" 11 name: "FOURROOMS"
12 path: "Components/Warps/worldport2" 12 path: "Components/Warps/worldport2"
13 orientation: "south" 13 destination { x: -27 y: 0 z: 25.5 }
14 rotation: 0
14} 15}
diff --git a/data/maps/the_invisible/rooms/Entrance.txtpb b/data/maps/the_invisible/rooms/Entrance.txtpb index bfc7223..d898b9f 100644 --- a/data/maps/the_invisible/rooms/Entrance.txtpb +++ b/data/maps/the_invisible/rooms/Entrance.txtpb
@@ -9,5 +9,6 @@ panels {
9ports { 9ports {
10 name: "ENTRY" 10 name: "ENTRY"
11 path: "Components/Warps/worldport2" 11 path: "Components/Warps/worldport2"
12 orientation: "north" 12 destination { x: 0 y: 0 z: -57 }
13 rotation: 180
13} 14}
diff --git a/data/maps/the_invisible/rooms/Maze.txtpb b/data/maps/the_invisible/rooms/Maze.txtpb index 895817a..fd80bcb 100644 --- a/data/maps/the_invisible/rooms/Maze.txtpb +++ b/data/maps/the_invisible/rooms/Maze.txtpb
@@ -6,5 +6,7 @@ masteries {
6ports { 6ports {
7 name: "ENTRY" 7 name: "ENTRY"
8 path: "Components/Warps/worldport" 8 path: "Components/Warps/worldport"
9 orientation: "south" 9 # Should this be shuffleable? It skips the maze lol.
10 destination { x: 0 y: 0 z: 9.5 }
11 rotation: 0
10} 12}
diff --git a/data/maps/the_jubilant/rooms/Main Area.txtpb b/data/maps/the_jubilant/rooms/Main Area.txtpb index 3b91f6d..5993a35 100644 --- a/data/maps/the_jubilant/rooms/Main Area.txtpb +++ b/data/maps/the_jubilant/rooms/Main Area.txtpb
@@ -98,5 +98,6 @@ panels {
98ports { 98ports {
99 name: "GREAT" 99 name: "GREAT"
100 path: "Components/Warps/worldport" 100 path: "Components/Warps/worldport"
101 orientation: "west" 101 destination { x: -3 y: 0 z: 9 }
102 rotation: 270
102} 103}
diff --git a/data/maps/the_keen/rooms/Main Area.txtpb b/data/maps/the_keen/rooms/Main Area.txtpb index eacd131..a4d5ac9 100644 --- a/data/maps/the_keen/rooms/Main Area.txtpb +++ b/data/maps/the_keen/rooms/Main Area.txtpb
@@ -70,5 +70,6 @@ panels {
70ports { 70ports {
71 name: "GREAT" 71 name: "GREAT"
72 path: "Components/Warps/worldport" 72 path: "Components/Warps/worldport"
73 orientation: "south" 73 destination { x: 0 y: 0 z: 7.5 }
74 rotation: 0
74} 75}
diff --git a/data/maps/the_liberated/rooms/Puzzle Room.txtpb b/data/maps/the_liberated/rooms/Puzzle Room.txtpb index 0223b44..72db46f 100644 --- a/data/maps/the_liberated/rooms/Puzzle Room.txtpb +++ b/data/maps/the_liberated/rooms/Puzzle Room.txtpb
@@ -58,5 +58,6 @@ panels {
58ports { 58ports {
59 name: "ENTRY" 59 name: "ENTRY"
60 path: "Components/Warps/worldport" 60 path: "Components/Warps/worldport"
61 orientation: "south" 61 destination { x: 0 y: 0 z: 7.5 }
62 rotation: 0
62} 63}
diff --git a/data/maps/the_linear/rooms/Room.txtpb b/data/maps/the_linear/rooms/Room.txtpb index c47ce0c..20237be 100644 --- a/data/maps/the_linear/rooms/Room.txtpb +++ b/data/maps/the_linear/rooms/Room.txtpb
@@ -58,5 +58,6 @@ panels {
58ports { 58ports {
59 name: "GREAT" 59 name: "GREAT"
60 path: "Components/Warps/worldport" 60 path: "Components/Warps/worldport"
61 orientation: "south" 61 destination { x: 0 y: 0 z: 7.5 }
62 rotation: 0
62} 63}
diff --git a/data/maps/the_lionized/rooms/Puzzle Room.txtpb b/data/maps/the_lionized/rooms/Puzzle Room.txtpb index 22b72ac..e96d441 100644 --- a/data/maps/the_lionized/rooms/Puzzle Room.txtpb +++ b/data/maps/the_lionized/rooms/Puzzle Room.txtpb
@@ -58,5 +58,6 @@ panels {
58ports { 58ports {
59 name: "ENTRY" 59 name: "ENTRY"
60 path: "Components/Warps/worldport" 60 path: "Components/Warps/worldport"
61 orientation: "south" 61 destination { x: 0 y: 0 z: 6.5 }
62 rotation: 0
62} 63}
diff --git a/data/maps/the_literate/rooms/Puzzle Room.txtpb b/data/maps/the_literate/rooms/Puzzle Room.txtpb index 3927702..a3eab21 100644 --- a/data/maps/the_literate/rooms/Puzzle Room.txtpb +++ b/data/maps/the_literate/rooms/Puzzle Room.txtpb
@@ -58,5 +58,6 @@ panels {
58ports { 58ports {
59 name: "ENTRY" 59 name: "ENTRY"
60 path: "Components/Warps/worldport" 60 path: "Components/Warps/worldport"
61 orientation: "south" 61 destination { x: 0 y: 0 z: 7.5 }
62 rotation: 0
62} 63}
diff --git a/data/maps/the_lively/rooms/Puzzle Room.txtpb b/data/maps/the_lively/rooms/Puzzle Room.txtpb index b33a122..d6becee 100644 --- a/data/maps/the_lively/rooms/Puzzle Room.txtpb +++ b/data/maps/the_lively/rooms/Puzzle Room.txtpb
@@ -58,4 +58,6 @@ panels {
58ports { 58ports {
59 name: "BETWEEN" 59 name: "BETWEEN"
60 path: "Components/Warps/worldport" 60 path: "Components/Warps/worldport"
61 destination { x: 0 y: 0 z: 6.5 }
62 rotation: 0
61} 63}
diff --git a/data/maps/the_nuanced/rooms/Main Room.txtpb b/data/maps/the_nuanced/rooms/Main Room.txtpb index da89bd8..d16fcb6 100644 --- a/data/maps/the_nuanced/rooms/Main Room.txtpb +++ b/data/maps/the_nuanced/rooms/Main Room.txtpb
@@ -107,7 +107,8 @@ panels {
107ports { 107ports {
108 name: "UNYIELDING" 108 name: "UNYIELDING"
109 path: "Components/Warps/worldport" 109 path: "Components/Warps/worldport"
110 orientation: "west" 110 destination { x: -3.5 y: 0 z: 21 }
111 rotation: 270
111} 112}
112keyholders { 113keyholders {
113 name: "S" 114 name: "S"
diff --git a/data/maps/the_orb/rooms/B Room.txtpb b/data/maps/the_orb/rooms/B Room.txtpb index 0324647..1a45101 100644 --- a/data/maps/the_orb/rooms/B Room.txtpb +++ b/data/maps/the_orb/rooms/B Room.txtpb
@@ -14,7 +14,8 @@ paintings {
14ports { 14ports {
15 name: "MID" 15 name: "MID"
16 path: "Components/Warps/worldport4" 16 path: "Components/Warps/worldport4"
17 orientation: "south" 17 destination { x: -69 y: 0 z: 43 }
18 rotation: 90
18 # This port is in the room immediately after solving the B puzzles, which 19 # This port is in the room immediately after solving the B puzzles, which
19 # means it seems like it would be inaccessible if you enter the map from the 20 # means it seems like it would be inaccessible if you enter the map from the
20 # painting or from the final port, but entering the O or R areas brings you 21 # painting or from the final port, but entering the O or R areas brings you
@@ -23,5 +24,6 @@ ports {
23ports { 24ports {
24 name: "FINAL" 25 name: "FINAL"
25 path: "Components/Warps/worldport5" 26 path: "Components/Warps/worldport5"
26 orientation: "south" 27 destination { x: -69 y: 0 z: 87 }
28 rotation: 90
27} 29}
diff --git a/data/maps/the_orb/rooms/Main Area.txtpb b/data/maps/the_orb/rooms/Main Area.txtpb index 4fcac29..affe712 100644 --- a/data/maps/the_orb/rooms/Main Area.txtpb +++ b/data/maps/the_orb/rooms/Main Area.txtpb
@@ -86,5 +86,6 @@ panels {
86ports { 86ports {
87 name: "GREAT" 87 name: "GREAT"
88 path: "Components/Warps/worldport" 88 path: "Components/Warps/worldport"
89 orientation: "south" 89 destination { x: 38 y: 0 z: 39 }
90 rotation: 90
90} 91}
diff --git a/data/maps/the_owl/rooms/Connected Area.txtpb b/data/maps/the_owl/rooms/Connected Area.txtpb index cf5ea1f..e5c2633 100644 --- a/data/maps/the_owl/rooms/Connected Area.txtpb +++ b/data/maps/the_owl/rooms/Connected Area.txtpb
@@ -150,6 +150,7 @@ paintings {
150ports { 150ports {
151 name: "FOURROOMS" 151 name: "FOURROOMS"
152 path: "Components/Warps/worldport2" 152 path: "Components/Warps/worldport2"
153 orientation: "east" 153 destination { x: 71.5 y: 0 z: -9 }
154 rotation: 90
154 # Note that this is behind teal walls. 155 # Note that this is behind teal walls.
155} 156}
diff --git a/data/maps/the_owl/rooms/Magenta Hallway.txtpb b/data/maps/the_owl/rooms/Magenta Hallway.txtpb index ccbdc1c..29e140a 100644 --- a/data/maps/the_owl/rooms/Magenta Hallway.txtpb +++ b/data/maps/the_owl/rooms/Magenta Hallway.txtpb
@@ -2,5 +2,6 @@ name: "Magenta Hallway"
2ports { 2ports {
3 name: "STURDY" 3 name: "STURDY"
4 path: "Components/Warps/worldport3" 4 path: "Components/Warps/worldport3"
5 orientation: "west" 5 destination { x: 17 y: 0 z: -46 }
6 rotation: 270
6} 7}
diff --git a/data/maps/the_owl/rooms/R2C2 Bottom.txtpb b/data/maps/the_owl/rooms/R2C2 Bottom.txtpb index 604a1cc..9d5a5c3 100644 --- a/data/maps/the_owl/rooms/R2C2 Bottom.txtpb +++ b/data/maps/the_owl/rooms/R2C2 Bottom.txtpb
@@ -9,7 +9,8 @@ panels {
9ports { 9ports {
10 name: "GALLERY" 10 name: "GALLERY"
11 path: "Components/Warps/worldport" 11 path: "Components/Warps/worldport"
12 orientation: "south" 12 destination { x: 0 y: 0 z: 9 }
13 rotation: 0
13 # TODO: Note that this port is accessible from the other side in the Z1 14 # TODO: Note that this port is accessible from the other side in the Z1
14 # room. Hmm. 15 # room. Hmm.
15} 16}
diff --git a/data/maps/the_parthenon/rooms/Main Area.txtpb b/data/maps/the_parthenon/rooms/Main Area.txtpb index 85188d1..e94089e 100644 --- a/data/maps/the_parthenon/rooms/Main Area.txtpb +++ b/data/maps/the_parthenon/rooms/Main Area.txtpb
@@ -56,15 +56,18 @@ panels {
56ports { 56ports {
57 name: "GALLERY" 57 name: "GALLERY"
58 path: "Components/Warps/worldport" 58 path: "Components/Warps/worldport"
59 orientation: "south" 59 destination { x: 0 y: 0 z: 0 }
60 rotation: 0
60} 61}
61ports { 62ports {
62 name: "ENTRY" 63 name: "ENTRY"
63 path: "Components/Warps/worldport2" 64 path: "Components/Warps/worldport2"
64 orientation: "south" 65 destination { x: 0 y: 0 z: -21 }
66 rotation: 0
65} 67}
66ports { 68ports {
67 name: "REVITALIZED" 69 name: "REVITALIZED"
68 path: "Components/Warps/worldport3" 70 path: "Components/Warps/worldport3"
69 orientation: "north" 71 destination { x: -24 y: 0 z: -39 }
72 rotation: 180
70} 73}
diff --git a/data/maps/the_partial/rooms/Control Center Entrance.txtpb b/data/maps/the_partial/rooms/Control Center Entrance.txtpb index e685822..125ea51 100644 --- a/data/maps/the_partial/rooms/Control Center Entrance.txtpb +++ b/data/maps/the_partial/rooms/Control Center Entrance.txtpb
@@ -9,5 +9,8 @@ panels {
9ports { 9ports {
10 name: "CC" 10 name: "CC"
11 path: "Components/Warps/worldport2" 11 path: "Components/Warps/worldport2"
12 orientation: "north" 12 destination { x: -19 y: 0 z: 8 }
13 rotation: 180
14 # TODO: shuffle entrances with dependent keyholders
15 no_shuffle: true
13} 16}
diff --git a/data/maps/the_partial/rooms/Obverse Side.txtpb b/data/maps/the_partial/rooms/Obverse Side.txtpb index c0ce04b..77f0e4d 100644 --- a/data/maps/the_partial/rooms/Obverse Side.txtpb +++ b/data/maps/the_partial/rooms/Obverse Side.txtpb
@@ -100,7 +100,8 @@ panels {
100ports { 100ports {
101 name: "GREAT" 101 name: "GREAT"
102 path: "Components/Warps/worldport" 102 path: "Components/Warps/worldport"
103 orientation: "west" 103 destination { x: -3 y: 0 z: 20 }
104 rotation: 270
104} 105}
105keyholders { 106keyholders {
106 # This is one of the ones that's misnamed within the game. 107 # This is one of the ones that's misnamed within the game.
diff --git a/data/maps/the_perceptive/rooms/Main Area.txtpb b/data/maps/the_perceptive/rooms/Main Area.txtpb index 449bd4d..5f80ce1 100644 --- a/data/maps/the_perceptive/rooms/Main Area.txtpb +++ b/data/maps/the_perceptive/rooms/Main Area.txtpb
@@ -2,5 +2,8 @@ name: "Main Area"
2ports { 2ports {
3 name: "CC" 3 name: "CC"
4 path: "Components/Warps/worldport" 4 path: "Components/Warps/worldport"
5 orientation: "east" 5 destination { x: 3 y: 0 z: 13 }
6 rotation: 90
7 # TODO: shuffle entrances with dependent keyholders
8 no_shuffle: true
6} 9}
diff --git a/data/maps/the_plaza/rooms/Main Area.txtpb b/data/maps/the_plaza/rooms/Main Area.txtpb index 521b974..20e6900 100644 --- a/data/maps/the_plaza/rooms/Main Area.txtpb +++ b/data/maps/the_plaza/rooms/Main Area.txtpb
@@ -37,15 +37,18 @@ panels {
37ports { 37ports {
38 name: "UNYIELDING" 38 name: "UNYIELDING"
39 path: "Components/Warps/worldport" 39 path: "Components/Warps/worldport"
40 orientation: "west" 40 destination { x: 1 y: 0 z: 10 }
41 rotation: 270
41} 42}
42ports { 43ports {
43 name: "IMPRESSIVE" 44 name: "IMPRESSIVE"
44 path: "Components/Warps/worldport2" 45 path: "Components/Warps/worldport2"
45 orientation: "west" 46 destination { x: 11 y: 0 z: 10 }
47 rotation: 270
46} 48}
47ports { 49ports {
48 name: "BETWEEN" 50 name: "BETWEEN"
49 path: "Components/Warps/worldport3" 51 path: "Components/Warps/worldport3"
50 orientation: "west" 52 destination { x: -9 y: 0 z: 10 }
53 rotation: 270
51} 54}
diff --git a/data/maps/the_plaza/rooms/Repetitive Entrance.txtpb b/data/maps/the_plaza/rooms/Repetitive Entrance.txtpb index 3857d5f..107c7f3 100644 --- a/data/maps/the_plaza/rooms/Repetitive Entrance.txtpb +++ b/data/maps/the_plaza/rooms/Repetitive Entrance.txtpb
@@ -9,5 +9,6 @@ panels {
9ports { 9ports {
10 name: "REPETITIVE" 10 name: "REPETITIVE"
11 path: "Components/Warps/worldport5" 11 path: "Components/Warps/worldport5"
12 orientation: "north" 12 destination { x: -19 y: 0 z: 16 }
13 rotation: 180
13} 14}
diff --git a/data/maps/the_plaza/rooms/Sirenic Entrance.txtpb b/data/maps/the_plaza/rooms/Sirenic Entrance.txtpb index 3c60ca8..48474b9 100644 --- a/data/maps/the_plaza/rooms/Sirenic Entrance.txtpb +++ b/data/maps/the_plaza/rooms/Sirenic Entrance.txtpb
@@ -9,5 +9,6 @@ panels {
9ports { 9ports {
10 name: "SIRENIC" 10 name: "SIRENIC"
11 path: "Components/Warps/worldport6" 11 path: "Components/Warps/worldport6"
12 orientation: "west" 12 destination { x: -51 y: 0 z: -43 }
13 rotation: 270
13} 14}
diff --git a/data/maps/the_plaza/rooms/Symbolic Entrance.txtpb b/data/maps/the_plaza/rooms/Symbolic Entrance.txtpb index ce5982c..cb9ef4f 100644 --- a/data/maps/the_plaza/rooms/Symbolic Entrance.txtpb +++ b/data/maps/the_plaza/rooms/Symbolic Entrance.txtpb
@@ -9,5 +9,6 @@ panels {
9ports { 9ports {
10 name: "SYMBOLIC" 10 name: "SYMBOLIC"
11 path: "Components/Warps/worldport4" 11 path: "Components/Warps/worldport4"
12 orientation: "south" 12 destination { x: 28 y: 0 z: 4 }
13 rotation: 0
13} 14}
diff --git a/data/maps/the_quiet/rooms/Main Area.txtpb b/data/maps/the_quiet/rooms/Main Area.txtpb index 180e0bc..8ac4255 100644 --- a/data/maps/the_quiet/rooms/Main Area.txtpb +++ b/data/maps/the_quiet/rooms/Main Area.txtpb
@@ -98,5 +98,6 @@ panels {
98ports { 98ports {
99 name: "DAEDALUS" 99 name: "DAEDALUS"
100 path: "Components/Warps/worldport" 100 path: "Components/Warps/worldport"
101 orientation: "east" 101 destination { x: 3 y: 0 z: 8 }
102 rotation: 90
102} 103}
diff --git a/data/maps/the_repetitive/rooms/Entry Connector.txtpb b/data/maps/the_repetitive/rooms/Entry Connector.txtpb index b6795c2..3fa883e 100644 --- a/data/maps/the_repetitive/rooms/Entry Connector.txtpb +++ b/data/maps/the_repetitive/rooms/Entry Connector.txtpb
@@ -2,5 +2,9 @@ name: "Entry Connector"
2ports { 2ports {
3 name: "ENTRY" 3 name: "ENTRY"
4 path: "Components/Warps/worldport2" 4 path: "Components/Warps/worldport2"
5 orientation: "south" 5 destination { x: -11 y: 0 z: 13 }
6 rotation: 0
7 # TODO: this is part of what makes the keyholder dependent connection form CC
8 # safe in vanilla doors
9 no_shuffle: true
6} 10}
diff --git a/data/maps/the_repetitive/rooms/Main Room.txtpb b/data/maps/the_repetitive/rooms/Main Room.txtpb index 8a2feb0..50b9d34 100644 --- a/data/maps/the_repetitive/rooms/Main Room.txtpb +++ b/data/maps/the_repetitive/rooms/Main Room.txtpb
@@ -139,5 +139,8 @@ paintings {
139ports { 139ports {
140 name: "CC" 140 name: "CC"
141 path: "Components/Warps/worldport3" 141 path: "Components/Warps/worldport3"
142 orientation: "east" 142 destination { x: -5.5 y: 0 z: 56 }
143 rotation: 90
144 # TODO: shuffle entrances with dependent keyholders
145 no_shuffle: true
143} 146}
diff --git a/data/maps/the_repetitive/rooms/Plaza Connector.txtpb b/data/maps/the_repetitive/rooms/Plaza Connector.txtpb index 1ed66b4..530da0c 100644 --- a/data/maps/the_repetitive/rooms/Plaza Connector.txtpb +++ b/data/maps/the_repetitive/rooms/Plaza Connector.txtpb
@@ -2,5 +2,6 @@ name: "Plaza Connector"
2ports { 2ports {
3 name: "PLAZA" 3 name: "PLAZA"
4 path: "Components/Warps/worldport" 4 path: "Components/Warps/worldport"
5 orientation: "north" 5 destination { x: 15 y: 0 z: 13 }
6 rotation: 0
6} 7}
diff --git a/data/maps/the_revitalized/rooms/Bye Room.txtpb b/data/maps/the_revitalized/rooms/Bye Room.txtpb index 6cefe70..0b8eab5 100644 --- a/data/maps/the_revitalized/rooms/Bye Room.txtpb +++ b/data/maps/the_revitalized/rooms/Bye Room.txtpb
@@ -9,5 +9,6 @@ panels {
9ports { 9ports {
10 name: "PARTHENON" 10 name: "PARTHENON"
11 path: "Components/Warps/worldport" 11 path: "Components/Warps/worldport"
12 orientation: "south" 12 destination { x: 30 y: 0 z: 16 }
13 rotation: 0
13} 14}
diff --git a/data/maps/the_shop/rooms/Main Area.txtpb b/data/maps/the_shop/rooms/Main Area.txtpb index db93fe1..c933345 100644 --- a/data/maps/the_shop/rooms/Main Area.txtpb +++ b/data/maps/the_shop/rooms/Main Area.txtpb
@@ -156,6 +156,8 @@ panels {
156ports { 156ports {
157 name: "ENTRY" 157 name: "ENTRY"
158 path: "Components/Warps/worldport" 158 path: "Components/Warps/worldport"
159 destination { x: 4 y: 0 z: 12 }
160 rotation: 90
159} 161}
160keyholders { 162keyholders {
161 name: "N" 163 name: "N"
diff --git a/data/maps/the_sirenic/rooms/Start.txtpb b/data/maps/the_sirenic/rooms/Start.txtpb index 9014e6d..197dccf 100644 --- a/data/maps/the_sirenic/rooms/Start.txtpb +++ b/data/maps/the_sirenic/rooms/Start.txtpb
@@ -16,5 +16,6 @@ panels {
16ports { 16ports {
17 name: "PLAZA" 17 name: "PLAZA"
18 path: "Components/Warps/worldport" 18 path: "Components/Warps/worldport"
19 orientation: "south" 19 destination { x: 0 y: 0 z: 26 }
20 rotation: 0
20} 21}
diff --git a/data/maps/the_stormy/rooms/Center.txtpb b/data/maps/the_stormy/rooms/Center.txtpb index f0e3e39..8c2840f 100644 --- a/data/maps/the_stormy/rooms/Center.txtpb +++ b/data/maps/the_stormy/rooms/Center.txtpb
@@ -32,5 +32,6 @@ panels {
32ports { 32ports {
33 name: "ENTRY" 33 name: "ENTRY"
34 path: "Components/Warps/worldport" 34 path: "Components/Warps/worldport"
35 orientation: "west" 35 destination { x: -8.5 y: 0 z: 6 }
36 rotation: 270
36} 37}
diff --git a/data/maps/the_sturdy/rooms/Main Area.txtpb b/data/maps/the_sturdy/rooms/Main Area.txtpb index c437ceb..b7c6125 100644 --- a/data/maps/the_sturdy/rooms/Main Area.txtpb +++ b/data/maps/the_sturdy/rooms/Main Area.txtpb
@@ -106,8 +106,12 @@ panels {
106ports { 106ports {
107 name: "OWL" 107 name: "OWL"
108 path: "Components/Warps/worldport" 108 path: "Components/Warps/worldport"
109 destination { x: 17 y: 0 z: 41 }
110 rotation: 90
109} 111}
110ports { 112ports {
111 name: "COLORFUL" 113 name: "COLORFUL"
112 path: "Components/Warps/worldport2" 114 path: "Components/Warps/worldport2"
115 destination { x: 17 y: 0 z: -33 }
116 rotation: 90
113} 117}
diff --git a/data/maps/the_sun_temple/rooms/Entrance.txtpb b/data/maps/the_sun_temple/rooms/Entrance.txtpb index f9da822..352ab60 100644 --- a/data/maps/the_sun_temple/rooms/Entrance.txtpb +++ b/data/maps/the_sun_temple/rooms/Entrance.txtpb
@@ -10,4 +10,6 @@ panels {
10ports { 10ports {
11 name: "UNKEMPT" 11 name: "UNKEMPT"
12 path: "Components/Warps/worldport" 12 path: "Components/Warps/worldport"
13 destination { x: 0 y: 0 z: 13 }
14 rotation: 0
13} 15}
diff --git a/data/maps/the_sweet/rooms/Main Area.txtpb b/data/maps/the_sweet/rooms/Main Area.txtpb index d4e6fda..a488199 100644 --- a/data/maps/the_sweet/rooms/Main Area.txtpb +++ b/data/maps/the_sweet/rooms/Main Area.txtpb
@@ -201,8 +201,12 @@ panels {
201ports { 201ports {
202 name: "EXIT1" 202 name: "EXIT1"
203 path: "Components/Warps/worldport" 203 path: "Components/Warps/worldport"
204 destination { x: 0 y: 0 z: -11.5 }
205 rotation: 180
204} 206}
205ports { 207ports {
206 name: "EXIT2" 208 name: "EXIT2"
207 path: "Components/Warps/worldport2" 209 path: "Components/Warps/worldport2"
210 destination { x: 0 y: 0 z: -17.5 }
211 rotation: 0
208} 212}
diff --git a/data/maps/the_symbolic/rooms/White Room.txtpb b/data/maps/the_symbolic/rooms/White Room.txtpb index 808588e..5877885 100644 --- a/data/maps/the_symbolic/rooms/White Room.txtpb +++ b/data/maps/the_symbolic/rooms/White Room.txtpb
@@ -8,4 +8,6 @@ panels {
8ports { 8ports {
9 name: "PLAZA" 9 name: "PLAZA"
10 path: "Components/Warps/worldport" 10 path: "Components/Warps/worldport"
11 destination { x: 0 y: 0 z: 2.5 }
12 rotation: 0
11} 13}
diff --git a/data/maps/the_talented/rooms/Main Area.txtpb b/data/maps/the_talented/rooms/Main Area.txtpb index f99be48..9877fa6 100644 --- a/data/maps/the_talented/rooms/Main Area.txtpb +++ b/data/maps/the_talented/rooms/Main Area.txtpb
@@ -112,4 +112,6 @@ keyholders {
112ports { 112ports {
113 name: "GREAT" 113 name: "GREAT"
114 path: "Components/Warps/worldport" 114 path: "Components/Warps/worldport"
115 destination { x: -3.5 y: 0 z: 21 }
116 rotation: 270
115} 117}
diff --git a/data/maps/the_tenacious/rooms/Control Center Entrance.txtpb b/data/maps/the_tenacious/rooms/Control Center Entrance.txtpb index 45a0d12..0d0af54 100644 --- a/data/maps/the_tenacious/rooms/Control Center Entrance.txtpb +++ b/data/maps/the_tenacious/rooms/Control Center Entrance.txtpb
@@ -9,4 +9,8 @@ panels {
9ports { 9ports {
10 name: "CC" 10 name: "CC"
11 path: "Components/Warps/worldport" 11 path: "Components/Warps/worldport"
12 destination { x: 0 y: 0 z: 10 }
13 rotation: 0
14 # TODO: shuffle entrances with dependent keyholders
15 no_shuffle: true
12} 16}
diff --git a/data/maps/the_three_doors/rooms/Dead End Room.txtpb b/data/maps/the_three_doors/rooms/Dead End Room.txtpb index c752368..8074fbe 100644 --- a/data/maps/the_three_doors/rooms/Dead End Room.txtpb +++ b/data/maps/the_three_doors/rooms/Dead End Room.txtpb
@@ -30,8 +30,12 @@ panels {
30ports { 30ports {
31 name: "BEGIN" 31 name: "BEGIN"
32 path: "Components/Warps/worldport6" 32 path: "Components/Warps/worldport6"
33 destination { x: -38 y: 0 z: 41.5 }
34 rotation: 0
33} 35}
34ports { 36ports {
35 name: "BEGIN2" 37 name: "BEGIN2"
36 path: "Components/Warps/worldport5" 38 path: "Components/Warps/worldport5"
39 destination { x: -38 y: 0 z: 27.5 }
40 rotation: 180
37} 41}
diff --git a/data/maps/the_three_doors/rooms/First Second Room.txtpb b/data/maps/the_three_doors/rooms/First Second Room.txtpb index 1bee8c7..c2d9397 100644 --- a/data/maps/the_three_doors/rooms/First Second Room.txtpb +++ b/data/maps/the_three_doors/rooms/First Second Room.txtpb
@@ -30,8 +30,12 @@ panels {
30ports { 30ports {
31 name: "GREAT" 31 name: "GREAT"
32 path: "Components/Warps/worldport" 32 path: "Components/Warps/worldport"
33 destination { x: -16 y: 0 z: 0.5 }
34 rotation: 180
33} 35}
34ports { 36ports {
35 name: "TTD" 37 name: "TTD"
36 path: "Components/Warps/worldport2" 38 path: "Components/Warps/worldport2"
39 destination { x: -16 y: 0 z: 14.5 }
40 rotation: 0
37} 41}
diff --git a/data/maps/the_three_doors/rooms/Loose Strings Room.txtpb b/data/maps/the_three_doors/rooms/Loose Strings Room.txtpb index 9d4430f..9cb7f65 100644 --- a/data/maps/the_three_doors/rooms/Loose Strings Room.txtpb +++ b/data/maps/the_three_doors/rooms/Loose Strings Room.txtpb
@@ -16,4 +16,6 @@ panels {
16ports { 16ports {
17 name: "BEGIN" 17 name: "BEGIN"
18 path: "Components/Warps/worldport7" 18 path: "Components/Warps/worldport7"
19 destination { x: -16 y: 0 z: 41.5 }
20 rotation: 0
19} 21}
diff --git a/data/maps/the_three_doors/rooms/One Luck Room.txtpb b/data/maps/the_three_doors/rooms/One Luck Room.txtpb index 816b4e3..742a8d3 100644 --- a/data/maps/the_three_doors/rooms/One Luck Room.txtpb +++ b/data/maps/the_three_doors/rooms/One Luck Room.txtpb
@@ -16,4 +16,6 @@ panels {
16ports { 16ports {
17 name: "BEGIN" 17 name: "BEGIN"
18 path: "Components/Warps/worldport8" 18 path: "Components/Warps/worldport8"
19 destination { x: -16 y: 0 z: 27.5 }
20 rotation: 180
19} 21}
diff --git a/data/maps/the_three_doors/rooms/Silver Portal Room.txtpb b/data/maps/the_three_doors/rooms/Silver Portal Room.txtpb index aeab9da..0d62429 100644 --- a/data/maps/the_three_doors/rooms/Silver Portal Room.txtpb +++ b/data/maps/the_three_doors/rooms/Silver Portal Room.txtpb
@@ -28,8 +28,12 @@ panels {
28ports { 28ports {
29 name: "BEGIN" 29 name: "BEGIN"
30 path: "Components/Warps/worldport3" 30 path: "Components/Warps/worldport3"
31 destination { x: -38 y: 0 z: 14.5 }
32 rotation: 0
31} 33}
32ports { 34ports {
33 name: "NEXT" 35 name: "NEXT"
34 path: "Components/Warps/worldport4" 36 path: "Components/Warps/worldport4"
37 destination { x: -38 y: 0 z: 0.5 }
38 rotation: 180
35} 39}
diff --git a/data/maps/the_tower/rooms/First Floor.txtpb b/data/maps/the_tower/rooms/First Floor.txtpb index 33398a3..6b960d8 100644 --- a/data/maps/the_tower/rooms/First Floor.txtpb +++ b/data/maps/the_tower/rooms/First Floor.txtpb
@@ -98,4 +98,6 @@ panels {
98ports { 98ports {
99 name: "GREAT" 99 name: "GREAT"
100 path: "Components/Warps/worldport" 100 path: "Components/Warps/worldport"
101 destination { x: -0 y: 0 z: 13 }
102 rotation: 0
101} 103}
diff --git a/data/maps/the_tree/rooms/Bearer Entrance.txtpb b/data/maps/the_tree/rooms/Bearer Entrance.txtpb index 797e5d0..e81027b 100644 --- a/data/maps/the_tree/rooms/Bearer Entrance.txtpb +++ b/data/maps/the_tree/rooms/Bearer Entrance.txtpb
@@ -2,4 +2,6 @@ name: "Bearer Entrance"
2ports { 2ports {
3 name: "BEARER" 3 name: "BEARER"
4 path: "Components/Warps/worldport" 4 path: "Components/Warps/worldport"
5 destination { x: -15.5 y: 0 z: 20 }
6 rotation: 270
5} 7}
diff --git a/data/maps/the_tree/rooms/Main Area.txtpb b/data/maps/the_tree/rooms/Main Area.txtpb index b232d1e..759b3dd 100644 --- a/data/maps/the_tree/rooms/Main Area.txtpb +++ b/data/maps/the_tree/rooms/Main Area.txtpb
@@ -212,18 +212,28 @@ panels {
212ports { 212ports {
213 name: "UNKEMPT" 213 name: "UNKEMPT"
214 path: "Components/Warps/worldport4" 214 path: "Components/Warps/worldport4"
215 destination { x: -21 y: 0 z: 7 }
216 rotation: 0
217 # enterable from either side
215} 218}
216ports { 219ports {
217 name: "DIGITAL" 220 name: "DIGITAL"
218 path: "Components/Warps/worldport5" 221 path: "Components/Warps/worldport5"
222 destination { x: -21 y: 0 z: -7 }
223 rotation: 180
224 # enterable from either side
219} 225}
220ports { 226ports {
221 name: "GREAT" 227 name: "GREAT"
222 path: "Components/Warps/worldport2" 228 path: "Components/Warps/worldport2"
229 destination { x: 21 y: 0 z: -4 }
230 rotation: 180
223} 231}
224ports { 232ports {
225 name: "DAEDALUS" 233 name: "DAEDALUS"
226 path: "Components/Warps/worldport3" 234 path: "Components/Warps/worldport3"
235 destination { x: 15.5 y: 0 z: -19 }
236 rotation: 90
227} 237}
228paintings { 238paintings {
229 name: "SEA" 239 name: "SEA"
diff --git a/data/maps/the_unkempt/rooms/Control Center Entrance.txtpb b/data/maps/the_unkempt/rooms/Control Center Entrance.txtpb index e8fa13a..d2c6ef9 100644 --- a/data/maps/the_unkempt/rooms/Control Center Entrance.txtpb +++ b/data/maps/the_unkempt/rooms/Control Center Entrance.txtpb
@@ -9,4 +9,8 @@ panels {
9ports { 9ports {
10 name: "CC" 10 name: "CC"
11 path: "Components/Warps/worldport2" 11 path: "Components/Warps/worldport2"
12 destination { x: -4.5 y: 0 z: 7 }
13 rotation: 0
14 # TODO: shuffle entrances with dependent keyholders
15 no_shuffle: true
12} 16}
diff --git a/data/maps/the_unkempt/rooms/Daedalus Entrance.txtpb b/data/maps/the_unkempt/rooms/Daedalus Entrance.txtpb index 851c863..a8048f0 100644 --- a/data/maps/the_unkempt/rooms/Daedalus Entrance.txtpb +++ b/data/maps/the_unkempt/rooms/Daedalus Entrance.txtpb
@@ -2,4 +2,6 @@ name: "Daedalus Entrance"
2ports { 2ports {
3 name: "DAEDALUS" 3 name: "DAEDALUS"
4 path: "Components/Warps/worldport4" 4 path: "Components/Warps/worldport4"
5 destination { x: 33 y: 0 z: -10 }
6 rotation: 90
5} 7}
diff --git a/data/maps/the_unkempt/rooms/Main Area.txtpb b/data/maps/the_unkempt/rooms/Main Area.txtpb index b5d29c4..822af8d 100644 --- a/data/maps/the_unkempt/rooms/Main Area.txtpb +++ b/data/maps/the_unkempt/rooms/Main Area.txtpb
@@ -217,13 +217,19 @@ keyholders {
217ports { 217ports {
218 name: "GREAT" 218 name: "GREAT"
219 path: "Components/Warps/worldport" 219 path: "Components/Warps/worldport"
220 destination { x: -3 y: 0 z: 11 }
221 rotation: 270
220} 222}
221ports { 223ports {
222 name: "TREE" 224 name: "TREE"
223 path: "Components/Warps/worldport5" 225 path: "Components/Warps/worldport5"
226 destination { x: -34 y: 0 z: 7 }
227 rotation: 270
224} 228}
225ports { 229ports {
226 name: "SUNTEMPLE" 230 name: "SUNTEMPLE"
227 path: "Components/Warps/worldport3" 231 path: "Components/Warps/worldport3"
232 destination { x: -42 y: 0 z: -2 }
233 rotation: 270
228 required_door { name: "Sun Temple Entrance" } 234 required_door { name: "Sun Temple Entrance" }
229} 235}
diff --git a/data/maps/the_unyielding/rooms/Bearer Entrance.txtpb b/data/maps/the_unyielding/rooms/Bearer Entrance.txtpb index 4c1440f..0f6e372 100644 --- a/data/maps/the_unyielding/rooms/Bearer Entrance.txtpb +++ b/data/maps/the_unyielding/rooms/Bearer Entrance.txtpb
@@ -2,4 +2,6 @@ name: "Bearer Entrance"
2ports { 2ports {
3 name: "BEARER" 3 name: "BEARER"
4 path: "Components/Warps/worldport4" 4 path: "Components/Warps/worldport4"
5 destination { x: 23 y: 0 z: -29 }
6 rotation: 90
5} 7}
diff --git a/data/maps/the_unyielding/rooms/Digital Entrance.txtpb b/data/maps/the_unyielding/rooms/Digital Entrance.txtpb index 74665a2..fa7def2 100644 --- a/data/maps/the_unyielding/rooms/Digital Entrance.txtpb +++ b/data/maps/the_unyielding/rooms/Digital Entrance.txtpb
@@ -9,4 +9,6 @@ panels {
9ports { 9ports {
10 name: "DIGITAL" 10 name: "DIGITAL"
11 path: "Components/Warps/worldport" 11 path: "Components/Warps/worldport"
12 destination { x: 0 y: 0 z: 0 }
13 rotation: 0
12} 14}
diff --git a/data/maps/the_unyielding/rooms/Nuanced Entrance.txtpb b/data/maps/the_unyielding/rooms/Nuanced Entrance.txtpb index f011b32..a2603c4 100644 --- a/data/maps/the_unyielding/rooms/Nuanced Entrance.txtpb +++ b/data/maps/the_unyielding/rooms/Nuanced Entrance.txtpb
@@ -2,4 +2,6 @@ name: "Nuanced Entrance"
2ports { 2ports {
3 name: "NUANCED" 3 name: "NUANCED"
4 path: "Components/Warps/worldport3" 4 path: "Components/Warps/worldport3"
5 destination { x: -23 y: 0 z: -29 }
6 rotation: 270
5} 7}
diff --git a/data/maps/the_unyielding/rooms/Plaza Entrance.txtpb b/data/maps/the_unyielding/rooms/Plaza Entrance.txtpb index 0bc60a7..c6f1075 100644 --- a/data/maps/the_unyielding/rooms/Plaza Entrance.txtpb +++ b/data/maps/the_unyielding/rooms/Plaza Entrance.txtpb
@@ -16,4 +16,6 @@ panels {
16ports { 16ports {
17 name: "PLAZA" 17 name: "PLAZA"
18 path: "Components/Warps/worldport5" 18 path: "Components/Warps/worldport5"
19 destination { x: 35 y: 0 z: 44 }
20 rotation: 270
19} 21}
diff --git a/data/maps/the_wondrous/rooms/Entry.txtpb b/data/maps/the_wondrous/rooms/Entry.txtpb index e15f75c..401e9aa 100644 --- a/data/maps/the_wondrous/rooms/Entry.txtpb +++ b/data/maps/the_wondrous/rooms/Entry.txtpb
@@ -8,4 +8,6 @@ panels {
8ports { 8ports {
9 name: "DAEDALUS" 9 name: "DAEDALUS"
10 path: "Components/Warps/worldport" 10 path: "Components/Warps/worldport"
11 destination { x: 18 y: 0 z: 41 }
12 rotation: 180
11} 13}
diff --git a/data/maps/the_words/rooms/Main Area.txtpb b/data/maps/the_words/rooms/Main Area.txtpb index 503408c..09ef049 100644 --- a/data/maps/the_words/rooms/Main Area.txtpb +++ b/data/maps/the_words/rooms/Main Area.txtpb
@@ -58,4 +58,6 @@ panels {
58ports { 58ports {
59 name: "ENTRY" 59 name: "ENTRY"
60 path: "Components/Warps/worldport" 60 path: "Components/Warps/worldport"
61 destination { x: 0 y: 0 z: 9.5 }
62 rotation: 0
61} 63}
diff --git a/proto/data.proto b/proto/data.proto index 64e3ddc..bc3f669 100644 --- a/proto/data.proto +++ b/proto/data.proto
@@ -87,6 +87,12 @@ enum PuzzleSymbol {
87 QUESTION = 19; 87 QUESTION = 19;
88} 88}
89 89
90message Vec3d {
91 optional double x = 1;
92 optional double y = 2;
93 optional double z = 3;
94}
95
90message ProxyIdentifier { 96message ProxyIdentifier {
91 optional uint64 panel = 1; 97 optional uint64 panel = 1;
92 optional string answer = 2; 98 optional string answer = 2;
@@ -181,8 +187,10 @@ message Port {
181 optional string name = 3; 187 optional string name = 3;
182 188
183 optional string path = 4; 189 optional string path = 4;
184 optional string orientation = 5; 190 optional Vec3d destination = 5;
191 optional double rotation = 8;
185 optional AxisDirection gravity = 7; 192 optional AxisDirection gravity = 7;
193 optional bool no_shuffle = 9;
186 194
187 optional uint64 required_door = 6; 195 optional uint64 required_door = 6;
188} 196}
diff --git a/proto/human.proto b/proto/human.proto index c247edf..748cf33 100644 --- a/proto/human.proto +++ b/proto/human.proto
@@ -152,7 +152,13 @@ message HumanPort {
152 optional string name = 1; 152 optional string name = 1;
153 optional string path = 2; 153 optional string path = 2;
154 154
155 optional string orientation = 3; 155 optional bool no_shuffle = 7;
156
157 // These specify how the player should be placed when a randomized entrance
158 // sends them to this port. "rotation" is in degrees and is counter-clockwise
159 // from the positive X axis.
160 optional Vec3d destination = 3;
161 optional double rotation = 6;
156 optional AxisDirection gravity = 5 [default = Y_MINUS]; 162 optional AxisDirection gravity = 5 [default = Y_MINUS];
157 163
158 optional DoorIdentifier required_door = 4; 164 optional DoorIdentifier required_door = 4;
diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index 596259b..33e4cfe 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp
@@ -239,7 +239,13 @@ class DataPacker {
239 Port& port = *container_.all_objects().mutable_ports(port_id); 239 Port& port = *container_.all_objects().mutable_ports(port_id);
240 240
241 port.set_path(h_port.path()); 241 port.set_path(h_port.path());
242 port.set_orientation(h_port.orientation()); 242
243 if (h_port.no_shuffle()) {
244 port.set_no_shuffle(h_port.no_shuffle());
245 } else {
246 *port.mutable_destination() = h_port.destination();
247 port.set_rotation(h_port.rotation());
248 }
243 249
244 // Setting this explicitly because the Godot protobuf doesn't support 250 // Setting this explicitly because the Godot protobuf doesn't support
245 // custom defaults. 251 // custom defaults.
diff --git a/tools/validator/validator.cpp b/tools/validator/validator.cpp index dd41f5c..93efdc6 100644 --- a/tools/validator/validator.cpp +++ b/tools/validator/validator.cpp
@@ -273,6 +273,21 @@ class Validator {
273 } 273 }
274 } 274 }
275 } 275 }
276
277 for (const HumanPort& port : port_info.definitions) {
278 if (!port.no_shuffle()) {
279 if (!port.has_destination()) {
280 std::cout << "Port " << port_identifier.ShortDebugString()
281 << " is shuffleable and missing a destination."
282 << std::endl;
283 }
284 if (!port.has_rotation()) {
285 std::cout << "Port " << port_identifier.ShortDebugString()
286 << " is shuffleable and missing a rotation."
287 << std::endl;
288 }
289 }
290 }
276 } 291 }
277 292
278 void ValidatePainting(const PaintingIdentifier& painting_identifier, 293 void ValidatePainting(const PaintingIdentifier& painting_identifier,