Lingo: Fix The Bearer's Pilgrimage Logic (#5005)

This commit is contained in:
Star Rauchenberger
2025-05-24 09:35:06 -04:00
committed by GitHub
parent e830a6d6f5
commit 4119763e23
7 changed files with 75 additions and 41 deletions

View File

@@ -4956,10 +4956,16 @@
Outside The Initiated: Outside The Initiated:
room: Art Gallery room: Art Gallery
door: Exit door: Exit
The Bearer (East): True The Bearer (East):
The Bearer (North): True static_painting: True
The Bearer (South): True The Bearer (North):
The Bearer (West): True static_painting: True
The Bearer (South):
static_painting: True
The Bearer (West):
- static_painting: True
- room: The Bearer (West)
door: Side Area Shortcut
Roof: True Roof: True
panels: panels:
Achievement: Achievement:
@@ -5053,7 +5059,8 @@
- MIDDLE - MIDDLE
The Bearer (East): The Bearer (East):
entrances: entrances:
Cross Tower (East): True Cross Tower (East):
static_painting: True
Bearer Side Area: Bearer Side Area:
door: Side Area Access door: Side Area Access
Roof: True Roof: True
@@ -5084,7 +5091,8 @@
panel: SPACE panel: SPACE
The Bearer (North): The Bearer (North):
entrances: entrances:
Cross Tower (East): True Cross Tower (North):
static_painting: True
Roof: True Roof: True
panels: panels:
SILENT (1): SILENT (1):
@@ -5128,7 +5136,8 @@
panel: POTS panel: POTS
The Bearer (South): The Bearer (South):
entrances: entrances:
Cross Tower (North): True Cross Tower (South):
static_painting: True
Bearer Side Area: Bearer Side Area:
door: Side Area Shortcut door: Side Area Shortcut
Roof: True Roof: True
@@ -5162,7 +5171,10 @@
panel: SILENT (1) panel: SILENT (1)
The Bearer (West): The Bearer (West):
entrances: entrances:
Cross Tower (West): True Cross Tower (West):
static_painting: True
The Bearer:
door: Side Area Shortcut
Bearer Side Area: Bearer Side Area:
door: Side Area Shortcut door: Side Area Shortcut
Roof: True Roof: True
@@ -5235,6 +5247,7 @@
The Bearer: The Bearer:
room: The Bearer room: The Bearer
door: East Entrance door: East Entrance
static_painting: True
Roof: True Roof: True
panels: panels:
WINTER: WINTER:
@@ -5250,6 +5263,7 @@
The Bearer (East): The Bearer (East):
room: The Bearer (East) room: The Bearer (East)
door: North Entrance door: North Entrance
static_painting: True
Roof: True Roof: True
panels: panels:
NORTH: NORTH:
@@ -5270,6 +5284,7 @@
The Bearer (North): The Bearer (North):
room: The Bearer (North) room: The Bearer (North)
door: South Entrance door: South Entrance
static_painting: True
panels: panels:
FIRE: FIRE:
id: Cross Room/Panel_fire_fire id: Cross Room/Panel_fire_fire
@@ -5284,6 +5299,7 @@
Bearer Side Area: Bearer Side Area:
room: Bearer Side Area room: Bearer Side Area
door: West Entrance door: West Entrance
static_painting: True
Roof: True Roof: True
panels: panels:
DIAMONDS: DIAMONDS:
@@ -7108,6 +7124,8 @@
entrances: entrances:
Orange Tower Third Floor: Orange Tower Third Floor:
warp: True warp: True
Art Gallery (First Floor):
warp: True
Art Gallery (Second Floor): Art Gallery (Second Floor):
warp: True warp: True
Art Gallery (Third Floor): Art Gallery (Third Floor):
@@ -7125,22 +7143,6 @@
required_door: required_door:
room: Number Hunt room: Number Hunt
door: Eights door: Eights
EON:
id: Painting Room/Panel_eon_one
colors: yellow
tag: midyellow
TRUSTWORTHY:
id: Painting Room/Panel_to_two
colors: red
tag: midred
FREE:
id: Painting Room/Panel_free_three
colors: purple
tag: midpurp
OUR:
id: Painting Room/Panel_our_four
colors: blue
tag: midblue
ORDER: ORDER:
id: Painting Room/Panel_order_onepathmanyturns id: Painting Room/Panel_order_onepathmanyturns
tag: forbid tag: forbid
@@ -7159,15 +7161,8 @@
- scenery_painting_2c - scenery_painting_2c
skip_location: True skip_location: True
panels: panels:
- EON - room: Art Gallery (First Floor)
First Floor Puzzles: panel: EON
skip_item: True
location_name: Art Gallery - First Floor Puzzles
panels:
- EON
- TRUSTWORTHY
- FREE
- OUR
Third Floor: Third Floor:
painting_id: painting_id:
- scenery_painting_3b - scenery_painting_3b
@@ -7227,11 +7222,42 @@
- Third Floor - Third Floor
- Fourth Floor - Fourth Floor
- Fifth Floor - Fifth Floor
Art Gallery (First Floor):
entrances:
Art Gallery:
static_painting: True
panels:
EON:
id: Painting Room/Panel_eon_one
colors: yellow
tag: midyellow
TRUSTWORTHY:
id: Painting Room/Panel_to_two
colors: red
tag: midred
FREE:
id: Painting Room/Panel_free_three
colors: purple
tag: midpurp
OUR:
id: Painting Room/Panel_our_four
colors: blue
tag: midblue
doors:
Puzzles:
skip_item: True
location_name: Art Gallery - First Floor Puzzles
panels:
- EON
- TRUSTWORTHY
- FREE
- OUR
Art Gallery (Second Floor): Art Gallery (Second Floor):
entrances: entrances:
Art Gallery: Art Gallery:
room: Art Gallery room: Art Gallery
door: Second Floor door: Second Floor
static_painting: True
panels: panels:
HOUSE: HOUSE:
id: Painting Room/Panel_house_neighborhood id: Painting Room/Panel_house_neighborhood
@@ -7263,6 +7289,7 @@
Art Gallery: Art Gallery:
room: Art Gallery room: Art Gallery
door: Third Floor door: Third Floor
static_painting: True
panels: panels:
AN: AN:
id: Painting Room/Panel_an_many id: Painting Room/Panel_an_many
@@ -7294,6 +7321,7 @@
Art Gallery: Art Gallery:
room: Art Gallery room: Art Gallery
door: Fourth Floor door: Fourth Floor
static_painting: True
panels: panels:
URNS: URNS:
id: Painting Room/Panel_urns_turns id: Painting Room/Panel_urns_turns

Binary file not shown.

View File

@@ -727,11 +727,12 @@ panels:
WANDER: 444975 WANDER: 444975
Art Gallery: Art Gallery:
EIGHT: 444976 EIGHT: 444976
ORDER: 444981
Art Gallery (First Floor):
EON: 444977 EON: 444977
TRUSTWORTHY: 444978 TRUSTWORTHY: 444978
FREE: 444979 FREE: 444979
OUR: 444980 OUR: 444980
ORDER: 444981
Art Gallery (Second Floor): Art Gallery (Second Floor):
HOUSE: 444982 HOUSE: 444982
PATH: 444983 PATH: 444983
@@ -1382,8 +1383,6 @@ doors:
Art Gallery: Art Gallery:
Second Floor: Second Floor:
item: 444558 item: 444558
First Floor Puzzles:
location: 445256
Third Floor: Third Floor:
item: 444559 item: 444559
Fourth Floor: Fourth Floor:
@@ -1393,6 +1392,9 @@ doors:
Exit: Exit:
item: 444562 item: 444562
location: 444981 location: 444981
Art Gallery (First Floor):
Puzzles:
location: 445256
Art Gallery (Second Floor): Art Gallery (Second Floor):
Puzzles: Puzzles:
location: 445257 location: 445257

View File

@@ -23,6 +23,7 @@ class EntranceType(Flag):
SUNWARP = auto() SUNWARP = auto()
WARP = auto() WARP = auto()
CROSSROADS_ROOF_ACCESS = auto() CROSSROADS_ROOF_ACCESS = auto()
STATIC_PAINTING = auto()
class RoomEntrance(NamedTuple): class RoomEntrance(NamedTuple):

View File

@@ -30,7 +30,7 @@ def is_acceptable_pilgrimage_entrance(entrance_type: EntranceType, world: "Lingo
allowed_entrance_types = EntranceType.NORMAL allowed_entrance_types = EntranceType.NORMAL
if world.options.pilgrimage_allows_paintings: if world.options.pilgrimage_allows_paintings:
allowed_entrance_types |= EntranceType.PAINTING allowed_entrance_types |= EntranceType.PAINTING | EntranceType.STATIC_PAINTING
if world.options.pilgrimage_allows_roof_access: if world.options.pilgrimage_allows_roof_access:
allowed_entrance_types |= EntranceType.CROSSROADS_ROOF_ACCESS allowed_entrance_types |= EntranceType.CROSSROADS_ROOF_ACCESS
@@ -105,7 +105,8 @@ def create_regions(world: "LingoWorld") -> None:
regions[pilgrimage_region_name] = Region(pilgrimage_region_name, world.player, world.multiworld) regions[pilgrimage_region_name] = Region(pilgrimage_region_name, world.player, world.multiworld)
# Connect all created regions now that they exist. # Connect all created regions now that they exist.
allowed_entrance_types = EntranceType.NORMAL | EntranceType.WARP | EntranceType.CROSSROADS_ROOF_ACCESS allowed_entrance_types = EntranceType.NORMAL | EntranceType.WARP | EntranceType.CROSSROADS_ROOF_ACCESS | \
EntranceType.STATIC_PAINTING
if not painting_shuffle: if not painting_shuffle:
# Don't use the vanilla painting connections if we are shuffling paintings. # Don't use the vanilla painting connections if we are shuffling paintings.
@@ -156,11 +157,11 @@ def create_regions(world: "LingoWorld") -> None:
regions[from_room].connect(regions[to_room], f"Pilgrimage Part {i+1}") regions[from_room].connect(regions[to_room], f"Pilgrimage Part {i+1}")
else: else:
connect_entrance(regions, regions["Starting Room"], regions["Pilgrim Antechamber"], "Sun Painting", connect_entrance(regions, regions["Starting Room"], regions["Pilgrim Antechamber"], "Sun Painting",
RoomAndDoor("Pilgrim Antechamber", "Sun Painting"), EntranceType.PAINTING, False, world) RoomAndDoor("Pilgrim Antechamber", "Sun Painting"), EntranceType.STATIC_PAINTING, False, world)
if early_color_hallways: if early_color_hallways:
connect_entrance(regions, regions["Starting Room"], regions["Color Hallways"], "Early Color Hallways", connect_entrance(regions, regions["Starting Room"], regions["Color Hallways"], "Early Color Hallways",
None, EntranceType.PAINTING, False, world) None, EntranceType.STATIC_PAINTING, False, world)
if painting_shuffle: if painting_shuffle:
for warp_enter, warp_exit in world.player_logic.painting_mapping.items(): for warp_enter, warp_exit in world.player_logic.painting_mapping.items():

View File

@@ -138,6 +138,8 @@ def process_single_entrance(source_room: str, room_name: str, door_obj) -> RoomE
entrance_type = EntranceType.WARP entrance_type = EntranceType.WARP
elif source_room == "Crossroads" and room_name == "Roof": elif source_room == "Crossroads" and room_name == "Roof":
entrance_type = EntranceType.CROSSROADS_ROOF_ACCESS entrance_type = EntranceType.CROSSROADS_ROOF_ACCESS
elif "static_painting" in door_obj and door_obj["static_painting"]:
entrance_type = EntranceType.STATIC_PAINTING
if "painting" in door_obj and door_obj["painting"]: if "painting" in door_obj and door_obj["painting"]:
PAINTING_EXIT_ROOMS.add(room_name) PAINTING_EXIT_ROOMS.add(room_name)

View File

@@ -2,7 +2,7 @@
# the file are consistent. It also checks that the panel and door IDs mentioned # the file are consistent. It also checks that the panel and door IDs mentioned
# all exist in the map file. # all exist in the map file.
# #
# Usage: validate_config.rb [config file] [map file] # Usage: validate_config.rb [config file] [ids path] [map file]
require 'set' require 'set'
require 'yaml' require 'yaml'