From 30a0aa2c85a7015e2072b5781ed1078965f62f4b Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Thu, 21 Mar 2024 10:46:53 -0500 Subject: [PATCH] Lingo: Add item/location groups (#2789) --- worlds/lingo/__init__.py | 6 +- worlds/lingo/data/LL1.yaml | 194 ++++++++++++++--------- worlds/lingo/data/generated.dat | Bin 129731 -> 130791 bytes worlds/lingo/datatypes.py | 3 +- worlds/lingo/items.py | 18 ++- worlds/lingo/locations.py | 6 +- worlds/lingo/player_logic.py | 4 +- worlds/lingo/utils/pickle_static_data.py | 13 +- worlds/lingo/utils/validate_config.rb | 2 +- 9 files changed, 157 insertions(+), 89 deletions(-) diff --git a/worlds/lingo/__init__.py b/worlds/lingo/__init__.py index e35a1026b73..c92e53069ed 100644 --- a/worlds/lingo/__init__.py +++ b/worlds/lingo/__init__.py @@ -6,8 +6,8 @@ from BaseClasses import Item, ItemClassification, Tutorial from worlds.AutoWorld import WebWorld, World from .datatypes import Room, RoomEntrance -from .items import ALL_ITEM_TABLE, LingoItem -from .locations import ALL_LOCATION_TABLE +from .items import ALL_ITEM_TABLE, ITEMS_BY_GROUP, LingoItem +from .locations import ALL_LOCATION_TABLE, LOCATIONS_BY_GROUP from .options import LingoOptions from .player_logic import LingoPlayerLogic from .regions import create_regions @@ -46,6 +46,8 @@ class LingoWorld(World): location_name_to_id = { name: data.code for name, data in ALL_LOCATION_TABLE.items() } + item_name_groups = ITEMS_BY_GROUP + location_name_groups = LOCATIONS_BY_GROUP player_logic: LingoPlayerLogic diff --git a/worlds/lingo/data/LL1.yaml b/worlds/lingo/data/LL1.yaml index f72e63c1427..75f688268f9 100644 --- a/worlds/lingo/data/LL1.yaml +++ b/worlds/lingo/data/LL1.yaml @@ -63,12 +63,13 @@ # - item_name: Overrides the name of the item generated for this door. # If not specified, the item name will be generated from # the room name and the door name. + # - item_group: If set, this item will be in the specified item group. # - location_name: Overrides the name of the location generated for this # door. If not specified, the location name will be # generated using the names of the panels. # - skip_location: If true, no location is generated for this door. # - skip_item: If true, no item is generated for this door. - # - group: When simple doors is used, all doors with the same group + # - door_group: When simple doors is used, all doors with the same group # will be covered by a single item. # - include_reduce: Door checks are assumed to be EXCLUDED when reduce checks # is on. This option includes the check anyway. @@ -144,7 +145,7 @@ - Palindrome Room Area Doors/Door_racecar_racecar_2 - Palindrome Room Area Doors/Door_solos_solos_2 skip_location: True - group: Rhyme Room Doors + door_group: Rhyme Room Doors panels: - room: The Tenacious panel: LEVEL (Black) @@ -231,7 +232,7 @@ Dead End Door: id: Appendix Room Area Doors/Door_rat_tar_2 skip_location: true - group: Dead End Area Access + door_group: Dead End Area Access panels: - room: Hub Room panel: RAT @@ -244,6 +245,7 @@ Seeker Entrance: id: Entry Room Area Doors/Door_entrance_entrance item_name: The Seeker - Entrance + item_group: Achievement Room Entrances panels: - OPEN Rhyme Room Entrance: @@ -251,7 +253,7 @@ - Appendix Room Area Doors/Door_rat_tar_3 - Double Room Area Doors/Door_room_entry_stairs skip_location: True - group: Rhyme Room Doors + door_group: Rhyme Room Doors panels: - room: The Tenacious panel: LEVEL (Black) @@ -466,25 +468,27 @@ - ORDER Tenacious Entrance: id: Palindrome Room Area Doors/Door_slaughter_laughter - group: Entrances to The Tenacious + door_group: Entrances to The Tenacious + item_group: Achievement Room Entrances panels: - SLAUGHTER Shortcut to Hedge Maze: id: Maze Area Doors/Door_trace_trace - group: Hedge Maze Doors + door_group: Hedge Maze Doors panels: - TRACE Near RAT Door: id: Appendix Room Area Doors/Door_deadend_deadened skip_location: True - group: Dead End Area Access + door_group: Dead End Area Access panels: - room: Hidden Room panel: DEAD END Traveled Entrance: id: Appendix Room Area Doors/Door_open_open item_name: The Traveled - Entrance - group: Entrance to The Traveled + door_group: Entrance to The Traveled + item_group: Achievement Room Entrances panels: - OPEN Lost Door: @@ -546,6 +550,7 @@ doors: Sun Painting: item_name: Pilgrim Room - Sun Painting + item_group: Paintings location_name: Pilgrim Room - HOT CRUST painting_id: pilgrim_painting2 panels: @@ -715,12 +720,14 @@ doors: Tenacious Entrance: id: Palindrome Room Area Doors/Door_decay_day - group: Entrances to The Tenacious + door_group: Entrances to The Tenacious + item_group: Achievement Room Entrances panels: - DECAY Discerning Entrance: id: Shuffle Room Area Doors/Door_nope_open item_name: The Discerning - Entrance + item_group: Achievement Room Entrances panels: - NOPE Tower Entrance: @@ -729,13 +736,13 @@ - Shuffle Room Area Doors/Door_tower2 - Shuffle Room Area Doors/Door_tower3 - Shuffle Room Area Doors/Door_tower4 - group: Crossroads - Tower Entrances + door_group: Crossroads - Tower Entrances panels: - WE ROT Tower Back Entrance: id: Shuffle Room Area Doors/Door_runt location_name: Crossroads - TURN/RUNT - group: Crossroads - Tower Entrances + door_group: Crossroads - Tower Entrances panels: - TURN - room: Orange Tower Fourth Floor @@ -744,20 +751,20 @@ id: - Shuffle Room Area Doors/Door_words_shuffle_3 - Shuffle Room Area Doors/Door_words_shuffle_4 - group: Crossroads Doors + door_group: Crossroads Doors panels: - WORDS - SWORD Eye Wall: id: Shuffle Room Area Doors/Door_behind junk_item: True - group: Crossroads Doors + door_group: Crossroads Doors panels: - BEND HI Hollow Hallway: id: Shuffle Room Area Doors/Door_crossroads6 skip_location: True - group: Crossroads Doors + door_group: Crossroads Doors panels: - BEND HI Roof Access: @@ -934,7 +941,7 @@ - Palindrome Room Area Doors/Door_racecar_racecar_1 - Palindrome Room Area Doors/Door_solos_solos_1 location_name: The Tenacious - Palindromes - group: Entrances to The Tenacious + door_group: Entrances to The Tenacious panels: - LEVEL (Black) - RACECAR (Black) @@ -965,7 +972,7 @@ id: - Symmetry Room Area Doors/Door_near_far - Symmetry Room Area Doors/Door_far_near - group: Symmetry Doors + door_group: Symmetry Doors item_name: Symmetry Room - Near Far Door location_name: Symmetry Room - NEAR, FAR panels: @@ -992,7 +999,7 @@ id: - Symmetry Room Area Doors/Door_warts_straw - Symmetry Room Area Doors/Door_straw_warts - group: Symmetry Doors + door_group: Symmetry Doors item_name: Symmetry Room - Warts Straw Door location_name: Symmetry Room - WARTS, STRAW panels: @@ -1019,7 +1026,7 @@ id: - Symmetry Room Area Doors/Door_leaf_feel - Symmetry Room Area Doors/Door_feel_leaf - group: Symmetry Doors + door_group: Symmetry Doors item_name: Symmetry Room - Leaf Feel Door location_name: Symmetry Room - LEAF, FEEL panels: @@ -1156,34 +1163,37 @@ doors: Tenacious Entrance: id: Palindrome Room Area Doors/Door_massacred_sacred - group: Entrances to The Tenacious + door_group: Entrances to The Tenacious + item_group: Achievement Room Entrances panels: - MASSACRED Black Door: id: Symmetry Room Area Doors/Door_black_white - group: Entrances to The Tenacious + door_group: Entrances to The Tenacious panels: - BLACK Agreeable Entrance: id: Symmetry Room Area Doors/Door_close_open item_name: The Agreeable - Entrance + item_group: Achievement Room Entrances panels: - CLOSE Painting Shortcut: item_name: Starting Room - Street Painting + item_group: Paintings painting_id: eyes_yellow_painting2 panels: - RIGHT Purple Barrier: id: Color Arrow Room Doors/Door_purple_3 - group: Color Hunt Barriers + door_group: Color Hunt Barriers skip_location: True panels: - room: Color Hunt panel: PURPLE Hallway Door: id: Red Blue Purple Room Area Doors/Door_room_2 - group: Hallway Room Doors + door_group: Hallway Room Doors location_name: Hallway Room - First Room panels: - WALL @@ -1229,7 +1239,8 @@ doors: Tenacious Entrance: id: Palindrome Room Area Doors/Door_dread_dead - group: Entrances to The Tenacious + door_group: Entrances to The Tenacious + item_group: Achievement Room Entrances panels: - DREAD The Agreeable: @@ -1298,7 +1309,8 @@ doors: Shortcut to Hedge Maze: id: Symmetry Room Area Doors/Door_bye_hi - group: Hedge Maze Doors + item_group: Achievement Room Entrances + door_group: Hedge Maze Doors panels: - BYE Hedge Maze: @@ -1391,12 +1403,14 @@ Perceptive Entrance: id: Maze Area Doors/Door_maze_maze item_name: The Perceptive - Entrance - group: Hedge Maze Doors + door_group: Hedge Maze Doors + item_group: Achievement Room Entrances panels: - DOWN Painting Shortcut: painting_id: garden_painting_tower2 item_name: Starting Room - Hedge Maze Painting + item_group: Paintings skip_location: True panels: - DOWN @@ -1407,7 +1421,8 @@ - Maze Area Doors/Door_look_room_3 skip_location: True item_name: The Observant - Entrance - group: Observant Doors + door_group: Observant Doors + item_group: Achievement Room Entrances panels: - room: The Perceptive panel: GAZE @@ -1473,7 +1488,7 @@ Second Floor: id: Naps Room Doors/Door_hider_5 location_name: The Fearless - First Floor Puzzles - group: Fearless Doors + door_group: Fearless Doors panels: - SPAN - TEAM @@ -1525,7 +1540,7 @@ - Naps Room Doors/Door_hider_1b2 - Naps Room Doors/Door_hider_new1 location_name: The Fearless - Second Floor Puzzles - group: Fearless Doors + door_group: Fearless Doors panels: - NONE - SUM @@ -1680,13 +1695,13 @@ doors: Backside Door: id: Maze Area Doors/Door_backside - group: Backside Doors + door_group: Backside Doors panels: - FOUR (1) - FOUR (2) Stairs: id: Maze Area Doors/Door_stairs - group: Observant Doors + door_group: Observant Doors panels: - SIX The Incomparable: @@ -1764,7 +1779,7 @@ Eight Door: id: Red Blue Purple Room Area Doors/Door_a_strands location_name: Giant Sevens - group: Observant Doors + door_group: Observant Doors panels: - I (Seven) - room: Courtyard @@ -1915,13 +1930,13 @@ doors: Shortcut to Hub Room: id: Shuffle Room Area Doors/Door_secret_secret - group: Orange Tower First Floor - Shortcuts + door_group: Orange Tower First Floor - Shortcuts panels: - SECRET Salt Pepper Door: id: Count Up Room Area Doors/Door_salt_pepper location_name: Orange Tower First Floor - Salt Pepper Door - group: Orange Tower First Floor - Shortcuts + door_group: Orange Tower First Floor - Shortcuts panels: - SALT - room: Directional Gallery @@ -1967,7 +1982,7 @@ doors: Red Barrier: id: Color Arrow Room Doors/Door_red_6 - group: Color Hunt Barriers + door_group: Color Hunt Barriers skip_location: True panels: - room: Color Hunt @@ -1975,7 +1990,7 @@ Rhyme Room Entrance: id: Double Room Area Doors/Door_room_entry_stairs2 skip_location: True - group: Rhyme Room Doors + door_group: Rhyme Room Doors panels: - room: The Tenacious panel: LEVEL (Black) @@ -1989,7 +2004,7 @@ - Color Arrow Room Doors/Door_orange_hider_2 - Color Arrow Room Doors/Door_orange_hider_3 location_name: Color Barriers - RED and YELLOW - group: Color Hunt Barriers + door_group: Color Hunt Barriers item_name: Color Hunt - Orange Barrier panels: - RED @@ -2150,7 +2165,7 @@ doors: Welcome Back: id: Entry Room Area Doors/Door_sizes - group: Welcome Back Doors + door_group: Welcome Back Doors panels: - SIZE (Small) - SIZE (Big) @@ -2404,6 +2419,7 @@ Painting Shortcut: painting_id: flower_painting_8 item_name: Starting Room - Flower Painting + item_group: Paintings skip_location: True panels: - room: First Second Third Fourth @@ -2416,7 +2432,7 @@ panel: FOURTH Green Barrier: id: Color Arrow Room Doors/Door_green_5 - group: Color Hunt Barriers + door_group: Color Hunt Barriers skip_location: True panels: - room: Color Hunt @@ -2470,7 +2486,7 @@ doors: Backside Door: id: Count Up Room Area Doors/Door_yellow_backside - group: Backside Doors + door_group: Backside Doors location_name: Courtyard - FIRST, SECOND, THIRD, FOURTH item_name: Courtyard - Backside Door panels: @@ -2491,7 +2507,7 @@ Progress Door: id: Doorway Room Doors/Door_white item_name: The Colorful - White Door - group: Colorful Doors + door_group: Colorful Doors location_name: The Colorful - White panels: - BEGIN @@ -2512,7 +2528,7 @@ id: Doorway Room Doors/Door_black item_name: The Colorful - Black Door location_name: The Colorful - Black - group: Colorful Doors + door_group: Colorful Doors panels: - FOUND The Colorful (Red): @@ -2532,7 +2548,7 @@ id: Doorway Room Doors/Door_red item_name: The Colorful - Red Door location_name: The Colorful - Red - group: Colorful Doors + door_group: Colorful Doors panels: - LOAF The Colorful (Yellow): @@ -2552,7 +2568,7 @@ id: Doorway Room Doors/Door_yellow item_name: The Colorful - Yellow Door location_name: The Colorful - Yellow - group: Colorful Doors + door_group: Colorful Doors panels: - CREAM The Colorful (Blue): @@ -2572,7 +2588,7 @@ id: Doorway Room Doors/Door_blue item_name: The Colorful - Blue Door location_name: The Colorful - Blue - group: Colorful Doors + door_group: Colorful Doors panels: - SUN The Colorful (Purple): @@ -2592,7 +2608,7 @@ id: Doorway Room Doors/Door_purple item_name: The Colorful - Purple Door location_name: The Colorful - Purple - group: Colorful Doors + door_group: Colorful Doors panels: - SPOON The Colorful (Orange): @@ -2612,7 +2628,7 @@ id: Doorway Room Doors/Door_orange item_name: The Colorful - Orange Door location_name: The Colorful - Orange - group: Colorful Doors + door_group: Colorful Doors panels: - LETTERS The Colorful (Green): @@ -2632,7 +2648,7 @@ id: Doorway Room Doors/Door_green item_name: The Colorful - Green Door location_name: The Colorful - Green - group: Colorful Doors + door_group: Colorful Doors panels: - WALLS The Colorful (Brown): @@ -2652,7 +2668,7 @@ id: Doorway Room Doors/Door_brown item_name: The Colorful - Brown Door location_name: The Colorful - Brown - group: Colorful Doors + door_group: Colorful Doors panels: - IRON The Colorful (Gray): @@ -2672,7 +2688,7 @@ id: Doorway Room Doors/Door_gray item_name: The Colorful - Gray Door location_name: The Colorful - Gray - group: Colorful Doors + door_group: Colorful Doors panels: - OBSTACLE The Colorful: @@ -2768,7 +2784,7 @@ doors: Shortcut to Starting Room: id: Entry Room Area Doors/Door_return_return - group: Welcome Back Doors + door_group: Welcome Back Doors include_reduce: True panels: - WELCOME BACK @@ -2793,7 +2809,7 @@ doors: Shortcut to Hedge Maze: id: Maze Area Doors/Door_strays_maze - group: Hedge Maze Doors + door_group: Hedge Maze Doors panels: - STRAYS paintings: @@ -2916,14 +2932,14 @@ - UNCOVER Blue Barrier: id: Color Arrow Room Doors/Door_blue_3 - group: Color Hunt Barriers + door_group: Color Hunt Barriers skip_location: True panels: - room: Color Hunt panel: BLUE Orange Barrier: id: Color Arrow Room Doors/Door_orange_3 - group: Color Hunt Barriers + door_group: Color Hunt Barriers skip_location: True panels: - room: Color Hunt @@ -2931,6 +2947,7 @@ Initiated Entrance: id: Red Blue Purple Room Area Doors/Door_locked_knocked item_name: The Initiated - Entrance + item_group: Achievement Room Entrances panels: - OXEN # These would be more appropriate in Champion's Rest, but as currently @@ -2940,7 +2957,7 @@ id: Color Arrow Room Doors/Door_green_hider_1 location_name: Color Barriers - BLUE and YELLOW item_name: Color Hunt - Green Barrier - group: Color Hunt Barriers + door_group: Color Hunt Barriers panels: - BLUE - room: Directional Gallery @@ -2952,7 +2969,7 @@ - Color Arrow Room Doors/Door_purple_hider_3 location_name: Color Barriers - RED and BLUE item_name: Color Hunt - Purple Barrier - group: Color Hunt Barriers + door_group: Color Hunt Barriers panels: - BLUE - room: Orange Tower Third Floor @@ -2972,6 +2989,7 @@ panel: PURPLE Eight Door: id: Red Blue Purple Room Area Doors/Door_a_strands2 + item_group: Achievement Room Entrances skip_location: True panels: - room: The Incomparable @@ -3189,7 +3207,8 @@ doors: Color Hallways Entrance: id: Appendix Room Area Doors/Door_hello_hi - group: Entrance to The Traveled + door_group: Entrance to The Traveled + item_group: Achievement Room Entrances panels: - HELLO Color Hallways: @@ -3305,17 +3324,20 @@ Bold Entrance: id: Red Blue Purple Room Area Doors/Door_unopened_open item_name: The Bold - Entrance + item_group: Achievement Room Entrances panels: - UNOPEN Painting Shortcut: painting_id: pencil_painting6 skip_location: True item_name: Starting Room - Pencil Painting + item_group: Paintings panels: - UNOPEN Steady Entrance: id: Rock Room Doors/Door_2 item_name: The Steady - Entrance + item_group: Achievement Room Entrances panels: - BEGIN Lilac Entrance: @@ -3536,6 +3558,7 @@ Undeterred Entrance: id: Red Blue Purple Room Area Doors/Door_pen_open item_name: The Undeterred - Entrance + item_group: Achievement Room Entrances panels: - PEN Painting Shortcut: @@ -3544,11 +3567,13 @@ - arrows_painting3 skip_location: True item_name: Starting Room - Blue Painting + item_group: Paintings panels: - PEN Green Painting: painting_id: maze_painting_3 skip_location: True + item_group: Paintings panels: - FOUR Twos: @@ -3556,6 +3581,7 @@ - Count Up Room Area Doors/Door_two_hider - Count Up Room Area Doors/Door_two_hider_2 include_reduce: True + item_group: Numbers panels: - ONE Threes: @@ -3565,6 +3591,7 @@ - Count Up Room Area Doors/Door_three_hider_3 location_name: Twos include_reduce: True + item_group: Numbers panels: - TWO (1) - TWO (2) @@ -3583,6 +3610,7 @@ - Count Up Room Area Doors/Door_four_hider_3 - Count Up Room Area Doors/Door_four_hider_4 skip_location: True + item_group: Numbers panels: - THREE (1) - THREE (2) @@ -3594,6 +3622,7 @@ - Count Up Room Area Doors/Door_five_hider_5 location_name: Fours item_name: Number Hunt - Fives + item_group: Numbers include_reduce: True panels: - FOUR @@ -3606,6 +3635,7 @@ Challenge Entrance: id: Count Up Room Area Doors/Door_zero_unlocked item_name: Number Hunt - Challenge Entrance + item_group: Achievement Room Entrances panels: - ZERO paintings: @@ -3752,7 +3782,7 @@ doors: Door to Directional Gallery: id: Count Up Room Area Doors/Door_five_unlocked - group: Directional Gallery Doors + door_group: Directional Gallery Doors skip_location: True panels: - FIVE @@ -3766,6 +3796,7 @@ - Count Up Room Area Doors/Door_six_hider_6 painting_id: pencil_painting3 # See note in Outside The Bold location_name: Fives + item_group: Numbers include_reduce: True panels: - FIVE @@ -3788,6 +3819,7 @@ - Count Up Room Area Doors/Door_seven_hider_6 - Count Up Room Area Doors/Door_seven_hider_7 location_name: Sixes + item_group: Numbers include_reduce: True panels: - SIX @@ -3813,6 +3845,7 @@ - Count Up Room Area Doors/Door_eight_hider_7 - Count Up Room Area Doors/Door_eight_hider_8 location_name: Sevens + item_group: Numbers include_reduce: True panels: - SEVEN @@ -3840,6 +3873,7 @@ - Count Up Room Area Doors/Door_nine_hider_8 - Count Up Room Area Doors/Door_nine_hider_9 location_name: Eights + item_group: Numbers include_reduce: True panels: - EIGHT @@ -3862,6 +3896,7 @@ id: Count Up Room Area Doors/Door_zero_hider_2 location_name: Nines item_name: Outside The Undeterred - Zero Door + item_group: Numbers include_reduce: True panels: - NINE @@ -4030,13 +4065,13 @@ doors: Shortcut to The Undeterred: id: Count Up Room Area Doors/Door_return_double - group: Directional Gallery Doors + door_group: Directional Gallery Doors panels: - TURN - LEARN Yellow Barrier: id: Color Arrow Room Doors/Door_yellow_4 - group: Color Hunt Barriers + door_group: Color Hunt Barriers skip_location: True panels: - room: Color Hunt @@ -4231,11 +4266,12 @@ doors: Entrance: id: Red Blue Purple Room Area Doors/Door_middle_middle + item_group: Achievement Room Entrances panels: - MIDDLE Backside Door: id: Red Blue Purple Room Area Doors/Door_locked_knocked2 # yeah... - group: Backside Doors + door_group: Backside Doors panels: - FARTHER East Entrance: @@ -5223,7 +5259,7 @@ - Ceiling Room Doors/Door_blue - Ceiling Room Doors/Door_blue2 location_name: The Artistic - Smiley and Panda - group: Artistic Doors + door_group: Artistic Doors panels: - FINE - BLADE @@ -5333,7 +5369,7 @@ - Ceiling Room Doors/Door_red - Ceiling Room Doors/Door_red2 location_name: The Artistic - Panda and Lattice - group: Artistic Doors + door_group: Artistic Doors panels: - EYE (Top) - EYE (Bottom) @@ -5444,7 +5480,7 @@ - Ceiling Room Doors/Door_black - Ceiling Room Doors/Door_black2 location_name: The Artistic - Lattice and Apple - group: Artistic Doors + door_group: Artistic Doors panels: - POSH - MALL @@ -5557,7 +5593,7 @@ - Ceiling Room Doors/Door_yellow - Ceiling Room Doors/Door_yellow2 location_name: The Artistic - Apple and Smiley - group: Artistic Doors + door_group: Artistic Doors panels: - SPRIG - RELEASES @@ -5721,7 +5757,7 @@ doors: Exit: id: Count Up Room Area Doors/Door_near_near - group: Crossroads Doors + door_group: Crossroads Doors panels: - NEAR paintings: @@ -5762,6 +5798,7 @@ Wondrous Entrance: id: Red Blue Purple Room Area Doors/Door_wonderland item_name: The Wondrous - Entrance + item_group: Achievement Room Entrances panels: - SHRINK The Wondrous (Doorknob): @@ -5782,6 +5819,7 @@ - arrows_painting2 skip_location: True item_name: Starting Room - Symmetry Painting + item_group: Paintings panels: - room: Outside The Wondrous panel: SHRINK @@ -5886,6 +5924,7 @@ doors: Exit: id: Red Blue Purple Room Area Doors/Door_wonderland_exit + item_group: Paintings painting_id: arrows_painting_9 include_reduce: True panels: @@ -5955,7 +5994,7 @@ Exit: id: Red Blue Purple Room Area Doors/Door_room_3 location_name: Hallway Room - Second Room - group: Hallway Room Doors + door_group: Hallway Room Doors panels: - WISE - CLOCK @@ -5992,7 +6031,7 @@ Exit: id: Red Blue Purple Room Area Doors/Door_room_4 location_name: Hallway Room - Third Room - group: Hallway Room Doors + door_group: Hallway Room Doors panels: - TRANCE - FORM @@ -6014,7 +6053,7 @@ id: - Red Blue Purple Room Area Doors/Door_room_5 - Red Blue Purple Room Area Doors/Door_room_6 # this is the connection to The Artistic - group: Hallway Room Doors + door_group: Hallway Room Doors location_name: Hallway Room - Fourth Room panels: - WHEEL @@ -6082,6 +6121,7 @@ Wanderer Entrance: id: Tower Room Area Doors/Door_wanderer_entrance item_name: The Wanderer - Entrance + item_group: Achievement Room Entrances panels: - WANDERLUST Tower Entrance: @@ -6222,6 +6262,7 @@ id: Tower Room Area Doors/Door_painting_exit include_reduce: True item_name: Orange Tower Fifth Floor - Quadruple Intersection + item_group: Achievement Room Entrances panels: - ORDER paintings: @@ -6417,7 +6458,7 @@ - Double Room Area Doors/Door_room_3a - Double Room Area Doors/Door_room_3bc skip_location: True - group: Rhyme Room Doors + door_group: Rhyme Room Doors panels: - SCHEME - FANTASY @@ -6518,7 +6559,7 @@ Exit: id: Double Room Area Doors/Door_room_exit location_name: Rhyme Room (Cross) - Exit Puzzles - group: Rhyme Room Doors + door_group: Rhyme Room Doors panels: - PLUMP - BOUNCE @@ -6581,7 +6622,7 @@ - Double Room Area Doors/Door_room_2b - Double Room Area Doors/Door_room_3b location_name: Rhyme Room - Circle/Smiley Wall - group: Rhyme Room Doors + door_group: Rhyme Room Doors panels: - BIRD - LETTER @@ -6664,7 +6705,7 @@ - Double Room Area Doors/Door_room_2a - Double Room Area Doors/Door_room_1c location_name: Rhyme Room - Circle/Looped Square Wall - group: Rhyme Room Doors + door_group: Rhyme Room Doors panels: - WALKED - OBSTRUCTED @@ -6683,7 +6724,7 @@ - Double Room Area Doors/Door_room_1a - Double Room Area Doors/Door_room_5a location_name: Rhyme Room - Cross/Looped Square Wall - group: Rhyme Room Doors + door_group: Rhyme Room Doors panels: - SKIES - SWELL @@ -6702,7 +6743,7 @@ - Double Room Area Doors/Door_room_1b - Double Room Area Doors/Door_room_4b location_name: Rhyme Room - Target/Looped Square Wall - group: Rhyme Room Doors + door_group: Rhyme Room Doors panels: - PENNED - CLIMB @@ -6765,7 +6806,7 @@ Door to Cross: id: Double Room Area Doors/Door_room_4a location_name: Rhyme Room (Target) - Puzzles Toward Cross - group: Rhyme Room Doors + door_group: Rhyme Room Doors panels: - PISTOL - GEM @@ -7016,6 +7057,7 @@ Wise Entrance: id: Clock Room Area Doors/Door_time_start item_name: The Wise - Entrance + item_group: Achievement Room Entrances panels: - KITTEN - CAT @@ -7269,6 +7311,7 @@ Scientific Entrance: id: Red Blue Purple Room Area Doors/Door_chemistry_lab item_name: The Scientific - Entrance + item_group: Achievement Room Entrances panels: - OPEN The Scientific: @@ -7704,5 +7747,6 @@ doors: Welcome Door: id: Entry Room Area Doors/Door_challenge_challenge + item_group: Achievement Room Entrances panels: - WELCOME diff --git a/worlds/lingo/data/generated.dat b/worlds/lingo/data/generated.dat index 49ea60df4183b9c7a59c4be54f03a95591668441..3bd8ff5a8b5fcd7ccfd60d32f34da3728e62c2d2 100644 GIT binary patch delta 17352 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