diff --git a/CHANGELOG.md b/CHANGELOG.md index 041d2816..16a5a53d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,15 @@ # Changelog +## 0.3.3.1 +- \~Merged in DR v1.2.0.21~ +- Fixed issue with Old Man death spawning on Pyramid/Castle +- Fixed issue with Mixed OWR + Flute Shuffle placing spots on large screens +- Fixed issue with mirror portals disappearing in Crossed OWR +- Added more OWR preset yamls + some fixes to the existing ones + ## 0.3.3.0 - Added Customizer support for all remaining OWR options - Added several OWR preset yamls (many ideas are thanks to Catobat) -- Fixed issue with Mixed OWR + Flute Shuffle placing spots on large screens - Removed Limited Crossed OWR and renamed Chaos Crossed to Unrestricted Crossed ## 0.3.2.2 diff --git a/DoorShuffle.py b/DoorShuffle.py index 3eb02a6f..474df204 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -178,6 +178,7 @@ def create_door_spoiler(world, player): queue = deque(world.dungeon_layouts[player].values()) while len(queue) > 0: builder = queue.popleft() + std_flag = world.mode[player] == 'standard' and builder.name == 'Hyrule Castle' and world.shuffle[player] == 'vanilla' done = set() start_regions = set(convert_regions(builder.layout_starts, world, player)) # todo: set all_entrances for basic reg_queue = deque(start_regions) @@ -206,11 +207,15 @@ def create_door_spoiler(world, player): logger.warning('This is a bug during door spoiler') elif not isinstance(door_b, Region): logger.warning('Door not connected: %s', door_a.name) - if connect and connect.type == RegionType.Dungeon and connect not in visited: + if valid_connection(connect, std_flag, world, player) and connect not in visited: visited.add(connect) reg_queue.append(connect) +def valid_connection(region, std_flag, world, player): + return region and (region.type == RegionType.Dungeon or region.name in world.inaccessible_regions[player] or + (std_flag and region.name == 'Hyrule Castle Ledge')) + def vanilla_key_logic(world, player): builders = [] world.dungeon_layouts[player] = {} @@ -3331,6 +3336,9 @@ def find_inaccessible_regions(world, player): ledge = world.get_region('Hyrule Castle Ledge', player) if any(x for x in ledge.exits if x.connected_region and x.connected_region.name == 'Agahnims Tower Portal'): world.inaccessible_regions[player].append('Hyrule Castle Ledge') + # this should be considered as part of the inaccessible regions, dungeonssimple? + if world.mode[player] == 'standard' and world.shuffle[player] == 'vanilla': + world.inaccessible_regions[player].append('Hyrule Castle Ledge') logger = logging.getLogger('') #logger.debug('Inaccessible Regions:') #for r in world.inaccessible_regions[player]: diff --git a/Main.py b/Main.py index 1223b79e..db7c39d8 100644 --- a/Main.py +++ b/Main.py @@ -36,7 +36,7 @@ from source.overworld.EntranceShuffle2 import link_entrances_new from source.tools.BPS import create_bps_from_data from source.classes.CustomSettings import CustomSettings -version_number = '1.2.0.20' +version_number = '1.2.0.21' version_branch = '-u' __version__ = f'{version_number}{version_branch}' diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 9ce4195d..7685288d 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -8,7 +8,7 @@ from OWEdges import OWTileRegions, OWEdgeGroups, OWEdgeGroupsTerrain, OWExitType from OverworldGlitchRules import create_owg_connections from Utils import bidict -version_number = '0.3.3.0' +version_number = '0.3.3.1' # branch indicator is intentionally different across branches version_branch = '' @@ -225,7 +225,8 @@ def link_overworld(world, player): edge = world.get_owedge(edgename, player) force_noncrossed.add(edge.name) if 'limit_crossed' in custom_crossed: - limited_crossed = custom_crossed['limit_crossed'] + if world.owCrossed[player] == 'unrestricted': + limited_crossed = custom_crossed['limit_crossed'] if 'undefined_chance' in custom_crossed: undefined_chance = custom_crossed['undefined_chance'] @@ -443,6 +444,23 @@ def link_overworld(world, player): connected_edge_cache = connected_edges.copy() groups_cache = copy.deepcopy(groups) while not valid_layout and tries > 0: + def remove_connected(forward_sets, back_sets): + deleted_edges = [] + def remove_from_sets(sets): + s = 0 + while s < len(sets): + if sets[s][0] in connected_edges: + deleted_edges.extend(sets[s]) + del sets[s] + continue + s += 1 + remove_from_sets(forward_sets) + remove_from_sets(back_sets) + if len(forward_sets) != len(back_sets): + x=', '.join(deleted_edges) + x=0 + assert len(forward_sets) == len(back_sets), "OW edge pool is uneven due to prior connections: " + ', '.join(deleted_edges) + def connect_set(forward_set, back_set, connected_edges): if forward_set is not None and back_set is not None: assert len(forward_set) == len(back_set) @@ -467,32 +485,10 @@ def link_overworld(world, player): for key in groupKeys: (mode, wrld, dir, terrain, parallel, count, _) = key (forward_edge_sets, back_edge_sets) = groups[key] - def remove_connected(): - deleted_edges = [] - s = 0 - while s < len(forward_edge_sets): - forward_set = forward_edge_sets[s] - if forward_set[0] in connected_edges: - deleted_edges.extend(forward_edge_sets[s]) - del forward_edge_sets[s] - continue - s += 1 - s = 0 - while s < len(back_edge_sets): - back_set = back_edge_sets[s] - if back_set[0] in connected_edges: - deleted_edges.extend(back_edge_sets[s]) - del back_edge_sets[s] - continue - s += 1 - if len(forward_edge_sets) != len(back_edge_sets): - x=', '.join(deleted_edges) - x=0 - assert len(forward_edge_sets) == len(back_edge_sets), "OW edge pool is uneven due to prior connections: " + ', '.join(deleted_edges) - - remove_connected() + remove_connected(forward_edge_sets, back_edge_sets) random.shuffle(forward_edge_sets) random.shuffle(back_edge_sets) + if wrld is None and len(force_crossed) + len(force_noncrossed) > 0: # divide forward/back sets into LW/DW forward_lw_sets, forward_dw_sets = [], [] @@ -500,24 +496,20 @@ def link_overworld(world, player): forward_parallel_lw_sets, forward_parallel_dw_sets = [], [] back_parallel_lw_sets, back_parallel_dw_sets = [], [] + def add_edgeset_to_worldsets(edge_set, sets, parallel_sets): + sets.append(edge_set) + if parallel == IsParallel.Yes: + parallel_sets.append([parallel_links_new[e] for e in edge_set]) for edge_set in forward_edge_sets: if world.get_owedge(edge_set[0], player).is_lw(world): - forward_lw_sets.append(edge_set) - if parallel == IsParallel.Yes: - forward_parallel_lw_sets.append([parallel_links_new[e] for e in edge_set]) + add_edgeset_to_worldsets(edge_set, forward_lw_sets, forward_parallel_lw_sets) else: - forward_dw_sets.append(edge_set) - if parallel == IsParallel.Yes: - forward_parallel_dw_sets.append([parallel_links_new[e] for e in edge_set]) + add_edgeset_to_worldsets(edge_set, forward_dw_sets, forward_parallel_dw_sets) for edge_set in back_edge_sets: if world.get_owedge(edge_set[0], player).is_lw(world): - back_lw_sets.append(edge_set) - if parallel == IsParallel.Yes: - back_parallel_lw_sets.append([parallel_links_new[e] for e in edge_set]) + add_edgeset_to_worldsets(edge_set, back_lw_sets, back_parallel_lw_sets) else: - back_dw_sets.append(edge_set) - if parallel == IsParallel.Yes: - back_parallel_dw_sets.append([parallel_links_new[e] for e in edge_set]) + add_edgeset_to_worldsets(edge_set, back_dw_sets, back_parallel_dw_sets) crossed_sets = [] noncrossed_sets = [] @@ -526,7 +518,7 @@ def link_overworld(world, player): affected_edges = set(sets[i]+(parallel_sets[i] if parallel == IsParallel.Yes else [])) if sets[i] not in crossed_sets and len(set.intersection(set(force_crossed), affected_edges)) > 0: crossed_sets.append(sets[i]) - if sets not in noncrossed_sets and len(set.intersection(set(force_noncrossed), affected_edges)) > 0: + if sets[i] not in noncrossed_sets and len(set.intersection(set(force_noncrossed), affected_edges)) > 0: noncrossed_sets.append(sets[i]) if sets[i] in crossed_sets and sets[i] in noncrossed_sets: raise GenerationException('Conflict in force crossed/non-crossed definition') @@ -536,50 +528,33 @@ def link_overworld(world, player): add_to_crossed_sets(back_dw_sets, back_parallel_dw_sets) # random connect forced crossed/noncrossed - c = 0 - while c < len(noncrossed_sets): - if noncrossed_sets[c] in forward_edge_sets: - forward_set = noncrossed_sets[c] - if forward_set in forward_lw_sets: - back_set = next(s for s in back_lw_sets if s in back_edge_sets and s not in crossed_sets) + def connect_forced(forced_sets, is_crossed, opposite_sets=[]): + c = 0 + while c < len(forced_sets): + if forced_sets[c] in forward_edge_sets: + forward_set = forced_sets[c] + if (forward_set in forward_lw_sets) != is_crossed: + back_set = next(s for s in back_lw_sets if s in back_edge_sets and s not in opposite_sets) + else: + back_set = next(s for s in back_dw_sets if s in back_edge_sets and s not in opposite_sets) + elif forced_sets[c] in back_edge_sets: + back_set = forced_sets[c] + if (back_set in back_lw_sets) != is_crossed: + forward_set = next(s for s in forward_lw_sets if s in forward_edge_sets and s not in opposite_sets) + else: + forward_set = next(s for s in forward_dw_sets if s in forward_edge_sets and s not in opposite_sets) else: - back_set = next(s for s in back_dw_sets if s in back_edge_sets and s not in crossed_sets) - elif noncrossed_sets[c] in back_edge_sets: - back_set = noncrossed_sets[c] - if back_set in back_lw_sets: - forward_set = next(s for s in forward_lw_sets if s in forward_edge_sets and s not in crossed_sets) - else: - forward_set = next(s for s in forward_dw_sets if s in forward_edge_sets and s not in crossed_sets) - else: + c = c + 1 + continue + connect_set(forward_set, back_set, connected_edges) + remove_connected(forward_edge_sets, back_edge_sets) c = c + 1 - continue - connect_set(forward_set, back_set, connected_edges) - remove_connected() - c = c + 1 - c = 0 - while c < len(crossed_sets): - if crossed_sets[c] in forward_edge_sets: - forward_set = crossed_sets[c] - if forward_set in forward_lw_sets: - back_set = next(s for s in back_dw_sets if s in back_edge_sets) - else: - back_set = next(s for s in back_lw_sets if s in back_edge_sets) - elif crossed_sets[c] in back_edge_sets: - back_set = crossed_sets[c] - if back_set in back_lw_sets: - forward_set = next(s for s in forward_dw_sets if s in forward_edge_sets) - else: - forward_set = next(s for s in forward_lw_sets if s in forward_edge_sets) - else: - c = c + 1 - continue - connect_set(forward_set, back_set, connected_edges) - remove_connected() - c = c + 1 + connect_forced(noncrossed_sets, False, crossed_sets) + connect_forced(crossed_sets, True) while len(forward_edge_sets) > 0 and len(back_edge_sets) > 0: connect_set(forward_edge_sets[0], back_edge_sets[0], connected_edges) - remove_connected() + remove_connected(forward_edge_sets, back_edge_sets) assert len(connected_edges) == len(default_connections) * 2, connected_edges world.owsectors[player] = build_sectors(world, player) @@ -1266,6 +1241,7 @@ def adjust_edge_groups(world, trimmed_groups, edges_to_swap, player): if world.customizer: custom_crossed = world.customizer.get_owcrossed() limited_crossed = custom_crossed and (player in custom_crossed) and ('limit_crossed' in custom_crossed[player]) + limited_crossed = limited_crossed and world.owCrossed[player] == 'unrestricted' custom_edge_groups = world.customizer.get_owedges() if custom_edge_groups and player in custom_edge_groups: custom_edge_groups = custom_edge_groups[player] @@ -1483,18 +1459,6 @@ def build_sectors(world, player): else: sectors2.append(explored_regions) sectors[s] = sectors2 - - #TODO: Keep largest LW sector for Links House consideration, keep sector containing WDM for Old Man consideration - # sector_entrances = list() - # for sector in sectors: - # entrances = list() - # for s2 in sector: - # for region_name in s2: - # region = world.get_region(region_name, player) - # for exit in region.exits: - # if exit.spot_type == 'Entrance' and exit.name in entrance_pool: - # entrances.append(exit.name) - # sector_entrances.append(entrances) return sectors @@ -2559,7 +2523,7 @@ isolated_regions = [ ] flute_data = { - #Slot LW Region DW Region OWID VRAM BG Y BG X Link Y Link X Cam Y Cam X Unk1 Unk2 IconY IconX AltY AltX AltVRAM AltBGY AltBGX AltCamY AltCamX AltUnk1 AltUnk2 AltIconY AltIconX + #OWID LW Region DW Region Slot VRAM BG Y BG X Link Y Link X Cam Y Cam X Unk1 Unk2 IconY IconX AltY AltX AltVRAM AltBGY AltBGX AltCamY AltCamX AltUnk1 AltUnk2 AltIconY AltIconX 0x00: (['Lost Woods East Area', 'Skull Woods Forest'], 0x09, 0x1042, 0x022e, 0x0202, 0x0290, 0x0288, 0x029b, 0x028f, 0xfff2, 0x000e, 0x0290, 0x0288, 0x0290, 0x0290), 0x02: (['Lumberjack Area', 'Dark Lumberjack Area'], 0x02, 0x059c, 0x00d6, 0x04e6, 0x0138, 0x0558, 0x0143, 0x0563, 0xfffa, 0xfffa, 0x0138, 0x0550), 0x03: (['West Death Mountain (Bottom)', 'West Dark Death Mountain (Top)'], 0x0b, 0x1600, 0x02ca, 0x060e, 0x0328, 0x0678, 0x0337, 0x0683, 0xfff6, 0xfff2, 0x035b, 0x0680, 0x0118, 0x0860, 0x05c0, 0x00b8, 0x07ec, 0x0127, 0x086b, 0xfff8, 0x0004, 0x0148, 0x0850), diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 336c604e..cae2bc56 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -109,6 +109,10 @@ These are now independent of retro mode and have three options: None, Random, an # Bug Fixes and Notes +* 1.2.0.21u + * Fix that should force items needed for leaving Zelda's cell to before the throne room, so S&Q isn't mandatory + * Small fix for Tavern Shuffle (thanks Catobat) + * Several small generation fixes * 1.2.0.20u * New generation feature that allows Spiral Stair to link to themselves (thank Catobat) * Added logic for trap doors that could be opened using existing room triggers diff --git a/Rom.py b/Rom.py index 27a1a38f..a99e98c7 100644 --- a/Rom.py +++ b/Rom.py @@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'da111397d4118054e5ab4b9375cfb9e4' +RANDOMIZERBASEHASH = '52317b2dd4fb303887f26ecc40a4cae3' class JsonRom(object): @@ -694,7 +694,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): offset = 0 data = flute_data[owid] - if world.is_tile_swapped(data[1], player): + if world.is_tile_swapped(owid, player): offset = 0x40 write_int16(rom, snes_to_pc(0x02E849 + (o * 2)), owid + offset) # owid @@ -1403,6 +1403,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): rom.write_byte(0x18004A, 0x00 if world.mode[player] != 'inverted' else 0x01) # Inverted mode rom.write_byte(0x18005D, 0x00) # Hammer always breaks barrier + rom.write_byte(0x02AF79, 0xD0 if world.mode[player] != 'inverted' else 0xF0) # vortexes: Normal (D0=light to dark, F0=dark to light, 42 = both) rom.write_byte(0x03A943, 0xD0 if world.mode[player] != 'inverted' else 0xF0) # Mirror: Normal (D0=Dark to Light, F0=light to dark, 42 = both) rom.write_byte(0x03A96D, 0xF0 if world.mode[player] != 'inverted' else 0xD0) # Residual Portal: Normal (F0= Light Side, D0=Dark Side, 42 = both (Darth Vader)) rom.write_byte(0x03A9A7, 0xD0) # Residual Portal: Normal (D0= Light Side, F0=Dark Side, 42 = both (Darth Vader)) diff --git a/Rules.py b/Rules.py index 4cdd6e61..07d4c82f 100644 --- a/Rules.py +++ b/Rules.py @@ -1577,13 +1577,15 @@ def standard_rules(world, player): add_rule(ent, lambda state: standard_escape_rule(state)) set_rule(world.get_location('Zelda Pickup', player), lambda state: state.has('Big Key (Escape)', player)) - set_rule(world.get_entrance('Hyrule Castle Throne Room Tapestry', player), lambda state: state.has('Zelda Herself', player)) set_rule(world.get_entrance('Hyrule Castle Tapestry Backwards', player), lambda state: state.has('Zelda Herself', player)) def check_rule_list(state, r_list): return True if len(r_list) <= 0 else r_list[0](state) and check_rule_list(state, r_list[1:]) rule_list, debug_path = find_rules_for_zelda_delivery(world, player) - set_rule(world.get_location('Zelda Drop Off', player), lambda state: state.has('Zelda Herself', player) and check_rule_list(state, rule_list)) + set_rule(world.get_entrance('Hyrule Castle Throne Room Tapestry', player), + lambda state: state.has('Zelda Herself', player) and check_rule_list(state, rule_list)) + set_rule(world.get_location('Zelda Drop Off', player), + lambda state: state.has('Zelda Herself', player) and check_rule_list(state, rule_list)) for entrance in ['Links House SC', 'Links House ES', 'Central Bonk Rocks SW', 'Hyrule Castle WN', 'Hyrule Castle ES', 'Bonk Fairy (Light)', 'Hyrule Castle Main Gate (South)', 'Hyrule Castle Main Gate (North)', 'Hyrule Castle Ledge Drop']: diff --git a/asm/owrando.asm b/asm/owrando.asm index d74718dd..adc7635e 100644 --- a/asm/owrando.asm +++ b/asm/owrando.asm @@ -56,16 +56,17 @@ Link_ResetSwimmingState: ; mirror hooks -org $02FBAB -JSL OWMirrorSpriteRestore : NOP +org $0283DC ; override world check when spawning mirror portal sprite in Crossed OWR +jsl.l OWLightWorldOrCrossed org $05AF75 Sprite_6C_MirrorPortal: -jsl OWPreserveMirrorSprite : nop #2 ; LDA $7EF3CA : BNE $05AFDF +jsl OWMirrorSpriteDisable ; LDA $7EF3CA +org $05AF88 +jsl OWMirrorSpriteSkipDraw : NOP ; LDA.w $0FC6 : CMP.b #$03 org $05AFDF Sprite_6C_MirrorPortal_missing_mirror: -JML OWMirrorSpriteDelete : NOP ; STZ $0DD0,X : BRA $05AFF1 -org $0ABFBF -JSL OWMirrorSpriteOnMap : BRA + : NOP #6 : + +org $0ABFB6 +jsl OWMirrorSpriteOnMap : NOP ; LDA.w $008A : CMP.b #$40 ; whirlpool shuffle cross world change org $02b3bd @@ -100,10 +101,6 @@ jsl OWOldManSpeed ;org $09c957 ; <- 4c957 ;dw #$cb5f ; matches value on Central Bonk Rocks screen -; override world check when spawning mirror portal sprite in Crossed OWR -org $0283dc -jsl.l OWLightWorldOrCrossed - ; override world check when viewing overworld (incl. title screen portion) org $0aba6c ; < ? - Bank0a.asm:474 () jsl.l OWMapWorldCheck16 : nop @@ -172,6 +169,11 @@ plb : rtl nop #3 + +; follower hooks +;org $8689D9 +;SpritePrep_BombShoppe: +;JML BombShoppe_ConditionalSpawn : NOP + ;Code org $aa8800 OWTransitionDirection: @@ -257,66 +259,42 @@ OWDestroyItemSprites: DEX : BPL .nextSprite PLX : RTL } + OWMirrorSpriteOnMap: { - lda.w $1ac0,x : bit.b #$f0 : beq .continue - lda.b #$00 : rtl - .continue - ora.w $1ab0,x - ora.w $1ad0,x - ora.w $1ae0,x - rtl + JSL OWWorldCheck + CMP.b #$40 ; part of what we wrote over + RTL } -OWPreserveMirrorSprite: +OWMirrorSpriteDisable: { - lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .vanilla ; if OW Crossed, skip world check and continue - lda.b $10 : cmp.b #$0f : beq .vanilla ; if performing mirror superbunny - rtl + LDA.b $10 : CMP.b #$0F : BNE + ; avoid rare freeze during mirror superbunny + PLA : PLA : PLA : JML Sprite_6C_MirrorPortal_missing_mirror + + + + lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .vanilla + lda.l InvertedMode : beq + + lda.b #$40 + + rtl .vanilla - lda.l InvertedMode : beq + - lda.l CurrentWorld : beq .deleteMirror - rtl - + lda.l CurrentWorld : bne .deleteMirror - rtl - - .deleteMirror - lda.b $10 : cmp.b #$0f : bne + - jsr.w OWMirrorSpriteMove ; if performing mirror superbunny - + pla : pla : pla : jml Sprite_6C_MirrorPortal_missing_mirror -} -OWMirrorSpriteMove: -{ - lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq + - lda.w $1acf : ora.b #$40 : sta.w $1acf - + rts -} -OWMirrorSpriteBonk: -{ - jsr.w OWMirrorSpriteMove - lda.b #$2c : jml SetGameModeLikeMirror ; what we wrote over -} -OWMirrorSpriteDelete: -{ - stz.w $0dd0,x ; what we wrote over - jsr.w OWMirrorSpriteMove - jml Sprite_6C_MirrorPortal_dont_do_warp -} -OWMirrorSpriteRestore: -{ - lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .return - lda.l InvertedMode : beq + - lda.l CurrentWorld : beq .return - bra .restorePortal - + lda.l CurrentWorld : bne .return - - .restorePortal - lda.w $1acf : and.b #$0f : sta.w $1acf - - .return - rep #$30 : lda.w $04AC ; what we wrote over + lda.l CurrentWorld ; what we wrote over rtl } +OWMirrorSpriteSkipDraw: +{ + lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .vanilla + lda.l InvertedMode : beq + + lda.l CurrentWorld : eor.b #$40 + bra ++ + + lda.l CurrentWorld : ++ beq .vanilla + stz.w $0D90,x ; disables collision + sec : rtl + + .vanilla + LDA.w $0FC6 : CMP.b #$03 ; what we wrote over + RTL +} OWLightWorldOrCrossed: { lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq ++ @@ -563,6 +541,7 @@ OWBonkDrops: INX : LDA.w OWBonkPrizeData,X : PHX : PHA ; S = FlagBitmask, X (row + 2) LDX.b $8A : LDA.l OverworldEventDataWRAM,X : AND 1,S : PHA : BNE + ; S = Collected, FlagBitmask, X (row + 2) LDA.b #$1B : STA $12F ; JSL Sound_SetSfx3PanLong ; seems that when you bonk, there is a pending bonk sfx, so we clear that out and replace with reveal secret sfx + ; JSLSpriteSFX_QueueSFX3WithPan + LDA 3,S : TAX : INX : LDA.w OWBonkPrizeData,X PHA : INX : LDA.w OWBonkPrizeData,X : BEQ + @@ -894,6 +873,7 @@ OWNewDestination: ++ lda $84 : !add 1,s : sta $84 : pla : pla .adjustMainAxis + ;LDA $84 : SEC : SBC #$0400 : AND #$0F80 : ASL : XBA : STA $88 ; vram LDA $84 : SEC : SBC #$0400 : AND #$0F00 : ASL : XBA : STA $88 ; vram LDA $84 : SEC : SBC #$0010 : AND #$003E : LSR : STA $86 @@ -956,6 +936,7 @@ OWNewDestination: sep #$30 : lda $04 : and #$3f : !add OWOppSlotOffset,y : asl : sta $700 ; crossed OW shuffle and terrain + ;lda $8a : JSR OWDetermineScreensPaletteSet : STX $04 ldx $05 : ldy $08 : jsr OWWorldTerrainUpdate ldx $8a : lda $05 : sta $8a : stx $05 ; $05 is prev screen id, $8a is dest screen @@ -1180,6 +1161,14 @@ OWEndScrollTransition: RTL } +; BombShoppe_ConditionalSpawn: +; { +; nop +; INC.w $0BA0,X : LDA.b #$B5 ; what we wrote over +; JML SpritePrep_BombShoppe+5 +; nop#20 +; } + ;Data org $aaa000 OWEdgeOffsets: diff --git a/data/base2current.bps b/data/base2current.bps index eaa22112..3c56274a 100644 Binary files a/data/base2current.bps and b/data/base2current.bps differ diff --git a/presets/world/owr_districtshuffle-full.yaml b/presets/world/owr_districtshuffle-full.yaml index 6ce0ac7a..e9e62916 100644 --- a/presets/world/owr_districtshuffle-full.yaml +++ b/presets/world/owr_districtshuffle-full.yaml @@ -121,8 +121,6 @@ ow-edges: - Lake Hylia NW* - Tree Line SC* - Lake Hylia NC* - - Lake Hylia WS* - - South Pass ES* - Lake Hylia EC* - Octoballoon WC* - Lake Hylia ES* diff --git a/presets/world/owr_districtshuffle-vanillaborders.yaml b/presets/world/owr_districtshuffle-vanillaborders.yaml index 6e622648..016dd9da 100644 --- a/presets/world/owr_districtshuffle-vanillaborders.yaml +++ b/presets/world/owr_districtshuffle-vanillaborders.yaml @@ -138,8 +138,6 @@ ow-edges: - Lake Hylia NW* - Tree Line SC* - Lake Hylia NC* - - Lake Hylia WS* - - South Pass ES* - Lake Hylia EC* - Octoballoon WC* - Lake Hylia ES* diff --git a/presets/world/owr_flute-nearvanilla.yaml b/presets/world/owr_flute-nearvanilla.yaml new file mode 100644 index 00000000..5941d344 --- /dev/null +++ b/presets/world/owr_flute-nearvanilla.yaml @@ -0,0 +1,31 @@ +settings: + 1: + ow_fluteshuffle: balanced +ow-flutespots: + 1: + forbid: + - 0x00 # Lost Woods + - 0x02 # Lumberjack + - 0x07 # Death Mountain TR Pegs + - 0x0A # Mountain Pass + - 0x0F # Zora Waterfall + - 0x10 # Lost Woods Pass + - 0x12 # Kakariko Pond + - 0x13 # Sanctuary + - 0x14 # Graveyard + - 0x17 # Zora Approach + - 0x1A # Forgotten Forest + - 0x1D # Wooden Bridge + - 0x22 # Blacksmith + - 0x25 # Sand Dunes + - 0x28 # Maze Race + - 0x29 # Kakariko Suburb + - 0x2A # Flute Boy + - 0x2B # Central Bonk Rocks + - 0x2D # Stone Bridge + - 0x2E # Tree Line + - 0x32 # Flute Boy Approach + - 0x34 # Statues + - 0x37 # Ice Cave + - 0x3A # Desert Pass + - 0x3C # South Pass diff --git a/presets/world/owr_quadrantshuffle-diagonal.yaml b/presets/world/owr_quadrantshuffle-diagonal.yaml new file mode 100644 index 00000000..010d9e3c --- /dev/null +++ b/presets/world/owr_quadrantshuffle-diagonal.yaml @@ -0,0 +1,308 @@ +ow-edges: + 1: + groups: + north: + - Lost Woods NW + - Lost Woods EN + - Skull Woods EN + - Lumberjack WN + - Lumberjack SW + - Dark Lumberjack WN + - Dark Lumberjack SW + - West Death Mountain EN + - West Death Mountain ES + - West Dark Death Mountain EN + - West Dark Death Mountain ES + - East Death Mountain WN + - East Death Mountain WS + - East Death Mountain EN + - East Dark Death Mountain WN + - East Dark Death Mountain WS + - East Dark Death Mountain EN + - Death Mountain TR Pegs WN + - Turtle Rock WN + - Mountain Pass NW + - Mountain Pass SE + - Bumper Cave NW + - Bumper Cave SE + - Kakariko Pond NE + - Kakariko Pond EN + - Kakariko Pond ES + - Outcast Pond NE + - Outcast Pond EN + - Outcast Pond ES + - Sanctuary WN + - Sanctuary WS + - Sanctuary EC + - Dark Chapel WN + - Dark Chapel WS + - Dark Chapel EC + - Graveyard WC + - Graveyard EC + - Dark Graveyard WC + - Dark Graveyard EC + - River Bend WC + - Qirn Jump WC + - Master Sword Meadow SC + east: + - Zora Waterfall NE + - Zora Waterfall SE + - Catfish SE + - River Bend EN + - River Bend EC + - River Bend ES + - River Bend SW + - River Bend SC + - River Bend SE + - Qirn Jump EN + - Qirn Jump EC + - Qirn Jump ES + - Qirn Jump SW + - Qirn Jump SC + - Qirn Jump SE + - Potion Shop WN + - Potion Shop WC + - Potion Shop WS + - Potion Shop EN + - Potion Shop EC + - Dark Witch WN + - Dark Witch WC + - Dark Witch WS + - Dark Witch EN + - Dark Witch EC + - Zora Approach NE + - Zora Approach WN + - Zora Approach WC + - Catfish Approach NE + - Catfish Approach WN + - Catfish Approach WC + - Hyrule Castle ES + - Pyramid ES + - Wooden Bridge NW + - Wooden Bridge NC + - Wooden Bridge NE + - Wooden Bridge SW + - Broken Bridge NW + - Broken Bridge NC + - Broken Bridge NE + - Broken Bridge SW + - Eastern Palace SW + - Eastern Palace SE + - Palace of Darkness SW + - Palace of Darkness SE + - Sand Dunes NW + - Sand Dunes WN + - Sand Dunes SC + - Dark Dunes NW + - Dark Dunes WN + - Dark Dunes SC + - Stone Bridge NC + - Stone Bridge EN + - Stone Bridge EC + - Hammer Bridge NC + - Hammer Bridge EN + - Hammer Bridge EC + - Tree Line NW + - Tree Line WN + - Tree Line WC + - Tree Line SC + - Tree Line SE + - Dark Tree Line NW + - Dark Tree Line WN + - Dark Tree Line WC + - Dark Tree Line SC + - Dark Tree Line SE + - Eastern Nook NE + - Palace of Darkness Nook NE + - Lake Hylia NC + - Lake Hylia NE + - Ice Lake NC + - Ice Lake NE + - Ice Cave SW + - Ice Cave SE + - Shopping Mall SW + - Shopping Mall SE + - Octoballoon NW + - Octoballoon NE + - Bomber Corner NW + - Bomber Corner NE + - Zoras Domain SW + south: + - Hyrule Castle SW + - Hyrule Castle SE + - Pyramid SW + - Pyramid SE + - Flute Boy SW + - Flute Boy SC + - Stumpy SW + - Stumpy SC + - Central Bonk Rocks NW + - Central Bonk Rocks EN + - Central Bonk Rocks EC + - Central Bonk Rocks ES + - Central Bonk Rocks SW + - Dark Bonk Rocks NW + - Dark Bonk Rocks EN + - Dark Bonk Rocks EC + - Dark Bonk Rocks ES + - Dark Bonk Rocks SW + - Links House NE + - Links House WN + - Links House WC + - Links House WS + - Links House SC + - Links House ES + - Big Bomb Shop NE + - Big Bomb Shop WN + - Big Bomb Shop WC + - Big Bomb Shop WS + - Big Bomb Shop SC + - Big Bomb Shop ES + - Stone Bridge WC + - Stone Bridge WS + - Stone Bridge SC + - Hammer Bridge WS + - Hammer Bridge SC + - Desert EC + - Desert ES + - Flute Boy Approach NW + - Flute Boy Approach NC + - Flute Boy Approach EC + - Stumpy Approach NW + - Stumpy Approach NC + - Stumpy Approach EC + - C Whirlpool NW + - C Whirlpool WC + - C Whirlpool EN + - C Whirlpool EC + - C Whirlpool ES + - C Whirlpool SC + - Dark C Whirlpool NW + - Dark C Whirlpool WC + - Dark C Whirlpool EN + - Dark C Whirlpool EC + - Dark C Whirlpool ES + - Dark C Whirlpool SC + - Statues NC + - Statues WN + - Statues WC + - Statues WS + - Statues SC + - Hype Cave NC + - Hype Cave WN + - Hype Cave WC + - Hype Cave WS + - Hype Cave SC + - Lake Hylia NW + - Lake Hylia WS + - Lake Hylia EC + - Lake Hylia ES + - Ice Lake NW + - Ice Lake WS + - Ice Lake EC + - Ice Lake ES + - Desert Pass WC + - Desert Pass WS + - Desert Pass EC + - Desert Pass ES + - Swamp Nook EC + - Swamp Nook ES + - Dam NC + - Dam WC + - Dam WS + - Dam EC + - Swamp NC + - Swamp WC + - Swamp WS + - Swamp EC + - South Pass NC + - South Pass WC + - South Pass ES + - Dark South Pass NC + - Dark South Pass WC + - Dark South Pass ES + - Octoballoon WC + - Octoballoon WS + - Bomber Corner WC + - Bomber Corner WS + - Hobo EC + west: + - Lost Woods SW + - Lost Woods SC + - Lost Woods SE + - Skull Woods SW + - Skull Woods SC + - Skull Woods SE + - Lost Woods Pass NW + - Lost Woods Pass NE + - Lost Woods Pass SW + - Lost Woods Pass SE + - Skull Woods Pass NW + - Skull Woods Pass NE + - Skull Woods Pass SW + - Skull Woods Pass SE + - Kakariko Fortune NE + - Kakariko Fortune EN + - Kakariko Fortune ES + - Kakariko Fortune SC + - Dark Fortune NE + - Dark Fortune EN + - Dark Fortune ES + - Dark Fortune SC + - Kakariko Pond WN + - Kakariko Pond WS + - Kakariko Pond SW + - Kakariko Pond SE + - Outcast Pond WN + - Outcast Pond WS + - Outcast Pond SW + - Outcast Pond SE + - Kakariko NW + - Kakariko NC + - Kakariko NE + - Kakariko ES + - Kakariko SE + - Village of Outcasts NW + - Village of Outcasts NC + - Village of Outcasts NE + - Village of Outcasts ES + - Village of Outcasts SE + - Forgotten Forest NW + - Forgotten Forest NE + - Forgotten Forest ES + - Shield Shop NW + - Shield Shop NE + - Hyrule Castle WN + - Blacksmith WS + - Hammer Pegs WS + - Maze Race ES + - Dig Game EC + - Dig Game ES + - Kakariko Suburb NE + - Kakariko Suburb WS + - Kakariko Suburb ES + - Frog NE + - Frog WC + - Frog WS + - Frog ES + - Flute Boy WS + - Stumpy WS +ow-tileflips: + 1: + force_together: + PedHobo: + - 0x00 + - 0x2d + - 0x80 + Zora: + - 0x0f + - 0x81 + Forest: + - 0x1a + - 0x1b + FrogDig: + - 0x28 + - 0x29 + Desert: + - 0x30 + - 0x3a \ No newline at end of file diff --git a/presets/world/owr_quadrantshuffle-full.yaml b/presets/world/owr_quadrantshuffle-full.yaml index 8538f709..6dabad7c 100644 --- a/presets/world/owr_quadrantshuffle-full.yaml +++ b/presets/world/owr_quadrantshuffle-full.yaml @@ -2,297 +2,290 @@ ow-edges: 1: groups: northwest: - - Lost Woods NW - - Lost Woods EN - - Lost Woods SW - - Lost Woods SC - - Lost Woods SE - - Skull Woods EN - - Skull Woods SW - - Skull Woods SC - - Skull Woods SE - - Lumberjack WN - - Lumberjack SW - - Dark Lumberjack WN - - Dark Lumberjack SW - - Mountain Pass NW - - Mountain Pass SE - - Bumper Cave NW - - Bumper Cave SE - - Lost Woods Pass NW - - Lost Woods Pass NE - - Lost Woods Pass SW - - Lost Woods Pass SE - - Skull Woods Pass NW - - Skull Woods Pass NE - - Skull Woods Pass SW - - Skull Woods Pass SE - - Kakariko Fortune NE - - Kakariko Fortune EN - - Kakariko Fortune ES - - Kakariko Fortune SC - - Dark Fortune NE - - Dark Fortune EN - - Dark Fortune ES - - Dark Fortune SC - - Kakariko Pond NE - - Kakariko Pond WN - - Kakariko Pond WS - - Kakariko Pond EN - - Kakariko Pond ES - - Kakariko Pond SW - - Kakariko Pond SE - - Outcast Pond NE - - Outcast Pond WN - - Outcast Pond WS - - Outcast Pond EN - - Outcast Pond ES - - Outcast Pond SW - - Outcast Pond SE - - Sanctuary WN - - Sanctuary WS - - Kakariko NW - - Kakariko NC - - Kakariko NE - - Dark Chapel WN - - Dark Chapel WS - - Village of Outcasts NW - - Village of Outcasts NC - - Village of Outcasts NE - - Forgotten Forest NW - - Forgotten Forest NE - - Forgotten Forest ES - - Shield Shop NW - - Shield Shop NE - - Hyrule Castle WN - - Master Sword Meadow SC + - Lost Woods NW + - Lost Woods EN + - Lost Woods SW + - Lost Woods SC + - Lost Woods SE + - Skull Woods EN + - Skull Woods SW + - Skull Woods SC + - Skull Woods SE + - Lumberjack WN + - Lumberjack SW + - Dark Lumberjack WN + - Dark Lumberjack SW + - Mountain Pass NW + - Mountain Pass SE + - Bumper Cave NW + - Bumper Cave SE + - Lost Woods Pass NW + - Lost Woods Pass NE + - Lost Woods Pass SW + - Lost Woods Pass SE + - Skull Woods Pass NW + - Skull Woods Pass NE + - Skull Woods Pass SW + - Skull Woods Pass SE + - Kakariko Fortune NE + - Kakariko Fortune EN + - Kakariko Fortune ES + - Kakariko Fortune SC + - Dark Fortune NE + - Dark Fortune EN + - Dark Fortune ES + - Dark Fortune SC + - Kakariko Pond NE + - Kakariko Pond WN + - Kakariko Pond WS + - Kakariko Pond EN + - Kakariko Pond ES + - Kakariko Pond SW + - Kakariko Pond SE + - Outcast Pond NE + - Outcast Pond WN + - Outcast Pond WS + - Outcast Pond EN + - Outcast Pond ES + - Outcast Pond SW + - Outcast Pond SE + - Sanctuary WN + - Sanctuary WS + - Kakariko NW + - Kakariko NC + - Kakariko NE + - Dark Chapel WN + - Dark Chapel WS + - Village of Outcasts NW + - Village of Outcasts NC + - Village of Outcasts NE + - Forgotten Forest NW + - Forgotten Forest NE + - Forgotten Forest ES + - Shield Shop NW + - Shield Shop NE + - Hyrule Castle WN + - Master Sword Meadow SC northeast: - - West Death Mountain EN - - West Death Mountain ES - - West Dark Death Mountain EN - - West Dark Death Mountain ES - - East Death Mountain WN - - East Death Mountain WS - - East Death Mountain EN - - East Dark Death Mountain WN - - East Dark Death Mountain WS - - East Dark Death Mountain EN - - Death Mountain TR Pegs WN - - Turtle Rock WN - - Zora Waterfall NE - - Zora Waterfall SE - - Catfish SE - - Graveyard EC - - Dark Graveyard EC - - River Bend WC - - River Bend EN - - River Bend EC - - River Bend ES - - River Bend SW - - River Bend SC - - River Bend SE - - Qirn Jump WC - - Qirn Jump EN - - Qirn Jump EC - - Qirn Jump ES - - Qirn Jump SW - - Qirn Jump SC - - Qirn Jump SE - - Potion Shop WN - - Potion Shop WC - - Potion Shop WS - - Potion Shop EN - - Potion Shop EC - - Dark Witch WN - - Dark Witch WC - - Dark Witch WS - - Dark Witch EN - - Dark Witch EC - - Zora Approach NE - - Zora Approach WN - - Zora Approach WC - - Catfish Approach NE - - Catfish Approach WN - - Catfish Approach WC - - Wooden Bridge NW - - Wooden Bridge NC - - Wooden Bridge NE - - Broken Bridge NW - - Broken Bridge NC - - Broken Bridge NE - - Zoras Domain SW + - West Death Mountain EN + - West Death Mountain ES + - West Dark Death Mountain EN + - West Dark Death Mountain ES + - East Death Mountain WN + - East Death Mountain WS + - East Death Mountain EN + - East Dark Death Mountain WN + - East Dark Death Mountain WS + - East Dark Death Mountain EN + - Death Mountain TR Pegs WN + - Turtle Rock WN + - Zora Waterfall NE + - Zora Waterfall SE + - Catfish SE + - Graveyard EC + - Dark Graveyard EC + - River Bend WC + - River Bend EN + - River Bend EC + - River Bend ES + - River Bend SW + - River Bend SC + - River Bend SE + - Qirn Jump WC + - Qirn Jump EN + - Qirn Jump EC + - Qirn Jump ES + - Qirn Jump SW + - Qirn Jump SC + - Qirn Jump SE + - Potion Shop WN + - Potion Shop WC + - Potion Shop WS + - Potion Shop EN + - Potion Shop EC + - Dark Witch WN + - Dark Witch WC + - Dark Witch WS + - Dark Witch EN + - Dark Witch EC + - Zora Approach NE + - Zora Approach WN + - Zora Approach WC + - Catfish Approach NE + - Catfish Approach WN + - Catfish Approach WC + - Wooden Bridge NW + - Wooden Bridge NC + - Wooden Bridge NE + - Broken Bridge NW + - Broken Bridge NC + - Broken Bridge NE + - Zoras Domain SW southwest: - - Kakariko ES - - Kakariko SE - - Village of Outcasts ES - - Village of Outcasts SE - - Hyrule Castle SW - - Pyramid SW - - Blacksmith WS - - Hammer Pegs WS - - Maze Race ES - - Dig Game EC - - Dig Game ES - - Kakariko Suburb NE - - Kakariko Suburb WS - - Kakariko Suburb ES - - Frog NE - - Frog WC - - Frog WS - - Frog ES - - Flute Boy WS - - Flute Boy SW - - Flute Boy SC - - Stumpy WS - - Stumpy SW - - Stumpy SC - - Central Bonk Rocks NW - - Central Bonk Rocks SW - - Dark Bonk Rocks NW - - Dark Bonk Rocks SW - - Desert EC - - Desert ES - - Flute Boy Approach NW - - Flute Boy Approach NC - - Flute Boy Approach EC - - Stumpy Approach NW - - Stumpy Approach NC - - Stumpy Approach EC - - C Whirlpool NW - - C Whirlpool WC - - C Whirlpool SC - - Dark C Whirlpool NW - - Dark C Whirlpool WC - - Dark C Whirlpool SC - - Desert Pass WC - - Desert Pass WS - - Desert Pass EC - - Desert Pass ES - - Swamp Nook EC - - Swamp Nook ES - - Dam NC - - Dam WC - - Dam WS - - Swamp NC - - Swamp WC - - Swamp WS + - Kakariko ES + - Kakariko SE + - Village of Outcasts ES + - Village of Outcasts SE + - Hyrule Castle SW + - Pyramid SW + - Blacksmith WS + - Hammer Pegs WS + - Maze Race ES + - Dig Game EC + - Dig Game ES + - Kakariko Suburb NE + - Kakariko Suburb WS + - Kakariko Suburb ES + - Frog NE + - Frog WC + - Frog WS + - Frog ES + - Flute Boy WS + - Flute Boy SW + - Flute Boy SC + - Stumpy WS + - Stumpy SW + - Stumpy SC + - Central Bonk Rocks NW + - Central Bonk Rocks SW + - Dark Bonk Rocks NW + - Dark Bonk Rocks SW + - Desert EC + - Desert ES + - Flute Boy Approach NW + - Flute Boy Approach NC + - Flute Boy Approach EC + - Stumpy Approach NW + - Stumpy Approach NC + - Stumpy Approach EC + - C Whirlpool NW + - C Whirlpool WC + - C Whirlpool SC + - Dark C Whirlpool NW + - Dark C Whirlpool WC + - Dark C Whirlpool SC + - Desert Pass WC + - Desert Pass WS + - Desert Pass EC + - Desert Pass ES + - Swamp Nook EC + - Swamp Nook ES + - Dam NC + - Dam WC + - Dam WS + - Swamp NC + - Swamp WC + - Swamp WS southeast: - - Hyrule Castle ES - - Hyrule Castle SE - - Pyramid ES - - Pyramid SE - - Eastern Palace SW - - Eastern Palace SE - - Palace of Darkness SW - - Palace of Darkness SE - - Sand Dunes WN - - Sand Dunes SC - - Dark Dunes WN - - Dark Dunes SC - - Links House NE - - Links House SC - - Links House ES - - Big Bomb Shop NE - - Big Bomb Shop SC - - Big Bomb Shop ES - - Stone Bridge NC - - Stone Bridge WC - - Stone Bridge WS - - Stone Bridge EN - - Stone Bridge EC - - Stone Bridge SC - - Hammer Bridge NC - - Hammer Bridge WS - - Hammer Bridge EN - - Hammer Bridge EC - - Hammer Bridge SC - - Tree Line NW - - Tree Line WN - - Tree Line WC - - Tree Line SC - - Tree Line SE - - Dark Tree Line NW - - Dark Tree Line WN - - Dark Tree Line WC - - Dark Tree Line SC - - Dark Tree Line SE - - Eastern Nook NE - - Palace of Darkness Nook NE - - Statues NC - - Statues SC - - Hype Cave NC - - Hype Cave SC - - Lake Hylia NW - - Lake Hylia NC - - Lake Hylia NE - - Lake Hylia WS - - Lake Hylia EC - - Lake Hylia ES - - Ice Lake NW - - Ice Lake NC - - Ice Lake NE - - Ice Lake WS - - Ice Lake EC - - Ice Lake ES - - Ice Cave SW - - Ice Cave SE - - Shopping Mall SW - - Shopping Mall SE - - South Pass NC - - South Pass ES - - Dark South Pass NC - - Dark South Pass ES - - Octoballoon NW - - Octoballoon NE - - Octoballoon WC - - Octoballoon WS - - Bomber Corner NW - - Bomber Corner NE - - Bomber Corner WC - - Bomber Corner WS - - Hobo EC + - Hyrule Castle ES + - Hyrule Castle SE + - Pyramid ES + - Pyramid SE + - Eastern Palace SW + - Eastern Palace SE + - Palace of Darkness SW + - Palace of Darkness SE + - Sand Dunes WN + - Sand Dunes SC + - Dark Dunes WN + - Dark Dunes SC + - Links House NE + - Links House SC + - Links House ES + - Big Bomb Shop NE + - Big Bomb Shop SC + - Big Bomb Shop ES + - Stone Bridge NC + - Stone Bridge WC + - Stone Bridge WS + - Stone Bridge EN + - Stone Bridge EC + - Stone Bridge SC + - Hammer Bridge NC + - Hammer Bridge WS + - Hammer Bridge EN + - Hammer Bridge EC + - Hammer Bridge SC + - Tree Line NW + - Tree Line WN + - Tree Line WC + - Tree Line SC + - Tree Line SE + - Dark Tree Line NW + - Dark Tree Line WN + - Dark Tree Line WC + - Dark Tree Line SC + - Dark Tree Line SE + - Eastern Nook NE + - Palace of Darkness Nook NE + - Statues NC + - Statues SC + - Hype Cave NC + - Hype Cave SC + - Lake Hylia NW + - Lake Hylia NC + - Lake Hylia NE + - Lake Hylia WS + - Lake Hylia EC + - Lake Hylia ES + - Ice Lake NW + - Ice Lake NC + - Ice Lake NE + - Ice Lake WS + - Ice Lake EC + - Ice Lake ES + - Ice Cave SW + - Ice Cave SE + - Shopping Mall SW + - Shopping Mall SE + - South Pass NC + - South Pass ES + - Dark South Pass NC + - Dark South Pass ES + - Octoballoon NW + - Octoballoon NE + - Octoballoon WC + - Octoballoon WS + - Bomber Corner NW + - Bomber Corner NE + - Bomber Corner WC + - Bomber Corner WS + - Hobo EC borders: - - Zora Whirlpool - - Kakariko Pond Whirlpool - - Sanctuary EC - - Dark Chapel EC - - Graveyard WC - - Dark Graveyard WC - - River Bend Whirlpool - - Qirn Jump Whirlpool - - Wooden Bridge SW - - Broken Bridge SW - - Sand Dunes NW - - Dark Dunes NW - - Central Bonk Rocks EN - - Central Bonk Rocks EC - - Central Bonk Rocks ES - - Dark Bonk Rocks EN - - Dark Bonk Rocks EC - - Dark Bonk Rocks ES - - Links House WN - - Links House WC - - Links House WS - - Big Bomb Shop WN - - Big Bomb Shop WC - - Big Bomb Shop WS - - C Whirlpool EN - - C Whirlpool EC - - C Whirlpool ES - - C Whirlpool - - Dark C Whirlpool EN - - Dark C Whirlpool EC - - Dark C Whirlpool ES - - Statues WN - - Statues WC - - Statues WS - - Hype Cave WN - - Hype Cave WC - - Hype Cave WS - - Lake Hylia Whirlpool - - Dam EC - - Swamp EC - - South Pass WC - - Dark South Pass WC - - Octoballoon Whirlpool - - Bomber Corner Whirlpool + - Sanctuary EC + - Dark Chapel EC + - Graveyard WC + - Dark Graveyard WC + - Wooden Bridge SW + - Broken Bridge SW + - Sand Dunes NW + - Dark Dunes NW + - Central Bonk Rocks EN + - Central Bonk Rocks EC + - Central Bonk Rocks ES + - Dark Bonk Rocks EN + - Dark Bonk Rocks EC + - Dark Bonk Rocks ES + - Links House WN + - Links House WC + - Links House WS + - Big Bomb Shop WN + - Big Bomb Shop WC + - Big Bomb Shop WS + - C Whirlpool EN + - C Whirlpool EC + - C Whirlpool ES + - C Whirlpool + - Dark C Whirlpool EN + - Dark C Whirlpool EC + - Dark C Whirlpool ES + - Statues WN + - Statues WC + - Statues WS + - Hype Cave WN + - Hype Cave WC + - Hype Cave WS + - Dam EC + - Swamp EC + - South Pass WC + - Dark South Pass WC \ No newline at end of file diff --git a/presets/world/owr_quadrantshuffle-vanillaborders.yaml b/presets/world/owr_quadrantshuffle-vanillaborders.yaml index f446011c..22f9e8fb 100644 --- a/presets/world/owr_quadrantshuffle-vanillaborders.yaml +++ b/presets/world/owr_quadrantshuffle-vanillaborders.yaml @@ -24,252 +24,252 @@ ow-edges: Swamp EC*: Dark South Pass WC* groups: northwest: - - Lost Woods NW - - Lost Woods EN - - Lost Woods SW - - Lost Woods SC - - Lost Woods SE - - Skull Woods EN - - Skull Woods SW - - Skull Woods SC - - Skull Woods SE - - Lumberjack WN - - Lumberjack SW - - Dark Lumberjack WN - - Dark Lumberjack SW - - Mountain Pass NW - - Mountain Pass SE - - Bumper Cave NW - - Bumper Cave SE - - Lost Woods Pass NW - - Lost Woods Pass NE - - Lost Woods Pass SW - - Lost Woods Pass SE - - Skull Woods Pass NW - - Skull Woods Pass NE - - Skull Woods Pass SW - - Skull Woods Pass SE - - Kakariko Fortune NE - - Kakariko Fortune EN - - Kakariko Fortune ES - - Kakariko Fortune SC - - Dark Fortune NE - - Dark Fortune EN - - Dark Fortune ES - - Dark Fortune SC - - Kakariko Pond NE - - Kakariko Pond WN - - Kakariko Pond WS - - Kakariko Pond EN - - Kakariko Pond ES - - Kakariko Pond SW - - Kakariko Pond SE - - Outcast Pond NE - - Outcast Pond WN - - Outcast Pond WS - - Outcast Pond EN - - Outcast Pond ES - - Outcast Pond SW - - Outcast Pond SE - - Sanctuary WN - - Sanctuary WS - - Kakariko NW - - Kakariko NC - - Kakariko NE - - Dark Chapel WN - - Dark Chapel WS - - Village of Outcasts NW - - Village of Outcasts NC - - Village of Outcasts NE - - Forgotten Forest NW - - Forgotten Forest NE - - Forgotten Forest ES - - Shield Shop NW - - Shield Shop NE - - Hyrule Castle WN - - Master Sword Meadow SC + - Lost Woods NW + - Lost Woods EN + - Lost Woods SW + - Lost Woods SC + - Lost Woods SE + - Skull Woods EN + - Skull Woods SW + - Skull Woods SC + - Skull Woods SE + - Lumberjack WN + - Lumberjack SW + - Dark Lumberjack WN + - Dark Lumberjack SW + - Mountain Pass NW + - Mountain Pass SE + - Bumper Cave NW + - Bumper Cave SE + - Lost Woods Pass NW + - Lost Woods Pass NE + - Lost Woods Pass SW + - Lost Woods Pass SE + - Skull Woods Pass NW + - Skull Woods Pass NE + - Skull Woods Pass SW + - Skull Woods Pass SE + - Kakariko Fortune NE + - Kakariko Fortune EN + - Kakariko Fortune ES + - Kakariko Fortune SC + - Dark Fortune NE + - Dark Fortune EN + - Dark Fortune ES + - Dark Fortune SC + - Kakariko Pond NE + - Kakariko Pond WN + - Kakariko Pond WS + - Kakariko Pond EN + - Kakariko Pond ES + - Kakariko Pond SW + - Kakariko Pond SE + - Outcast Pond NE + - Outcast Pond WN + - Outcast Pond WS + - Outcast Pond EN + - Outcast Pond ES + - Outcast Pond SW + - Outcast Pond SE + - Sanctuary WN + - Sanctuary WS + - Kakariko NW + - Kakariko NC + - Kakariko NE + - Dark Chapel WN + - Dark Chapel WS + - Village of Outcasts NW + - Village of Outcasts NC + - Village of Outcasts NE + - Forgotten Forest NW + - Forgotten Forest NE + - Forgotten Forest ES + - Shield Shop NW + - Shield Shop NE + - Hyrule Castle WN + - Master Sword Meadow SC northeast: - - West Death Mountain EN - - West Death Mountain ES - - West Dark Death Mountain EN - - West Dark Death Mountain ES - - East Death Mountain WN - - East Death Mountain WS - - East Death Mountain EN - - East Dark Death Mountain WN - - East Dark Death Mountain WS - - East Dark Death Mountain EN - - Death Mountain TR Pegs WN - - Turtle Rock WN - - Zora Waterfall NE - - Zora Waterfall SE - - Catfish SE - - Graveyard EC - - Dark Graveyard EC - - River Bend WC - - River Bend EN - - River Bend EC - - River Bend ES - - River Bend SW - - River Bend SC - - River Bend SE - - Qirn Jump WC - - Qirn Jump EN - - Qirn Jump EC - - Qirn Jump ES - - Qirn Jump SW - - Qirn Jump SC - - Qirn Jump SE - - Potion Shop WN - - Potion Shop WC - - Potion Shop WS - - Potion Shop EN - - Potion Shop EC - - Dark Witch WN - - Dark Witch WC - - Dark Witch WS - - Dark Witch EN - - Dark Witch EC - - Zora Approach NE - - Zora Approach WN - - Zora Approach WC - - Catfish Approach NE - - Catfish Approach WN - - Catfish Approach WC - - Wooden Bridge NW - - Wooden Bridge NC - - Wooden Bridge NE - - Broken Bridge NW - - Broken Bridge NC - - Broken Bridge NE - - Zoras Domain SW + - West Death Mountain EN + - West Death Mountain ES + - West Dark Death Mountain EN + - West Dark Death Mountain ES + - East Death Mountain WN + - East Death Mountain WS + - East Death Mountain EN + - East Dark Death Mountain WN + - East Dark Death Mountain WS + - East Dark Death Mountain EN + - Death Mountain TR Pegs WN + - Turtle Rock WN + - Zora Waterfall NE + - Zora Waterfall SE + - Catfish SE + - Graveyard EC + - Dark Graveyard EC + - River Bend WC + - River Bend EN + - River Bend EC + - River Bend ES + - River Bend SW + - River Bend SC + - River Bend SE + - Qirn Jump WC + - Qirn Jump EN + - Qirn Jump EC + - Qirn Jump ES + - Qirn Jump SW + - Qirn Jump SC + - Qirn Jump SE + - Potion Shop WN + - Potion Shop WC + - Potion Shop WS + - Potion Shop EN + - Potion Shop EC + - Dark Witch WN + - Dark Witch WC + - Dark Witch WS + - Dark Witch EN + - Dark Witch EC + - Zora Approach NE + - Zora Approach WN + - Zora Approach WC + - Catfish Approach NE + - Catfish Approach WN + - Catfish Approach WC + - Wooden Bridge NW + - Wooden Bridge NC + - Wooden Bridge NE + - Broken Bridge NW + - Broken Bridge NC + - Broken Bridge NE + - Zoras Domain SW southwest: - - Kakariko ES - - Kakariko SE - - Village of Outcasts ES - - Village of Outcasts SE - - Hyrule Castle SW - - Pyramid SW - - Blacksmith WS - - Hammer Pegs WS - - Maze Race ES - - Dig Game EC - - Dig Game ES - - Kakariko Suburb NE - - Kakariko Suburb WS - - Kakariko Suburb ES - - Frog NE - - Frog WC - - Frog WS - - Frog ES - - Flute Boy WS - - Flute Boy SW - - Flute Boy SC - - Stumpy WS - - Stumpy SW - - Stumpy SC - - Central Bonk Rocks NW - - Central Bonk Rocks SW - - Dark Bonk Rocks NW - - Dark Bonk Rocks SW - - Desert EC - - Desert ES - - Flute Boy Approach NW - - Flute Boy Approach NC - - Flute Boy Approach EC - - Stumpy Approach NW - - Stumpy Approach NC - - Stumpy Approach EC - - C Whirlpool NW - - C Whirlpool WC - - C Whirlpool SC - - Dark C Whirlpool NW - - Dark C Whirlpool WC - - Dark C Whirlpool SC - - Desert Pass WC - - Desert Pass WS - - Desert Pass EC - - Desert Pass ES - - Swamp Nook EC - - Swamp Nook ES - - Dam NC - - Dam WC - - Dam WS - - Swamp NC - - Swamp WC - - Swamp WS + - Kakariko ES + - Kakariko SE + - Village of Outcasts ES + - Village of Outcasts SE + - Hyrule Castle SW + - Pyramid SW + - Blacksmith WS + - Hammer Pegs WS + - Maze Race ES + - Dig Game EC + - Dig Game ES + - Kakariko Suburb NE + - Kakariko Suburb WS + - Kakariko Suburb ES + - Frog NE + - Frog WC + - Frog WS + - Frog ES + - Flute Boy WS + - Flute Boy SW + - Flute Boy SC + - Stumpy WS + - Stumpy SW + - Stumpy SC + - Central Bonk Rocks NW + - Central Bonk Rocks SW + - Dark Bonk Rocks NW + - Dark Bonk Rocks SW + - Desert EC + - Desert ES + - Flute Boy Approach NW + - Flute Boy Approach NC + - Flute Boy Approach EC + - Stumpy Approach NW + - Stumpy Approach NC + - Stumpy Approach EC + - C Whirlpool NW + - C Whirlpool WC + - C Whirlpool SC + - Dark C Whirlpool NW + - Dark C Whirlpool WC + - Dark C Whirlpool SC + - Desert Pass WC + - Desert Pass WS + - Desert Pass EC + - Desert Pass ES + - Swamp Nook EC + - Swamp Nook ES + - Dam NC + - Dam WC + - Dam WS + - Swamp NC + - Swamp WC + - Swamp WS southeast: - - Hyrule Castle ES - - Hyrule Castle SE - - Pyramid ES - - Pyramid SE - - Eastern Palace SW - - Eastern Palace SE - - Palace of Darkness SW - - Palace of Darkness SE - - Sand Dunes WN - - Sand Dunes SC - - Dark Dunes WN - - Dark Dunes SC - - Links House NE - - Links House SC - - Links House ES - - Big Bomb Shop NE - - Big Bomb Shop SC - - Big Bomb Shop ES - - Stone Bridge NC - - Stone Bridge WC - - Stone Bridge WS - - Stone Bridge EN - - Stone Bridge EC - - Stone Bridge SC - - Hammer Bridge NC - - Hammer Bridge WS - - Hammer Bridge EN - - Hammer Bridge EC - - Hammer Bridge SC - - Tree Line NW - - Tree Line WN - - Tree Line WC - - Tree Line SC - - Tree Line SE - - Dark Tree Line NW - - Dark Tree Line WN - - Dark Tree Line WC - - Dark Tree Line SC - - Dark Tree Line SE - - Eastern Nook NE - - Palace of Darkness Nook NE - - Statues NC - - Statues SC - - Hype Cave NC - - Hype Cave SC - - Lake Hylia NW - - Lake Hylia NC - - Lake Hylia NE - - Lake Hylia WS - - Lake Hylia EC - - Lake Hylia ES - - Ice Lake NW - - Ice Lake NC - - Ice Lake NE - - Ice Lake WS - - Ice Lake EC - - Ice Lake ES - - Ice Cave SW - - Ice Cave SE - - Shopping Mall SW - - Shopping Mall SE - - South Pass NC - - South Pass ES - - Dark South Pass NC - - Dark South Pass ES - - Octoballoon NW - - Octoballoon NE - - Octoballoon WC - - Octoballoon WS - - Bomber Corner NW - - Bomber Corner NE - - Bomber Corner WC - - Bomber Corner WS - - Hobo EC \ No newline at end of file + - Hyrule Castle ES + - Hyrule Castle SE + - Pyramid ES + - Pyramid SE + - Eastern Palace SW + - Eastern Palace SE + - Palace of Darkness SW + - Palace of Darkness SE + - Sand Dunes WN + - Sand Dunes SC + - Dark Dunes WN + - Dark Dunes SC + - Links House NE + - Links House SC + - Links House ES + - Big Bomb Shop NE + - Big Bomb Shop SC + - Big Bomb Shop ES + - Stone Bridge NC + - Stone Bridge WC + - Stone Bridge WS + - Stone Bridge EN + - Stone Bridge EC + - Stone Bridge SC + - Hammer Bridge NC + - Hammer Bridge WS + - Hammer Bridge EN + - Hammer Bridge EC + - Hammer Bridge SC + - Tree Line NW + - Tree Line WN + - Tree Line WC + - Tree Line SC + - Tree Line SE + - Dark Tree Line NW + - Dark Tree Line WN + - Dark Tree Line WC + - Dark Tree Line SC + - Dark Tree Line SE + - Eastern Nook NE + - Palace of Darkness Nook NE + - Statues NC + - Statues SC + - Hype Cave NC + - Hype Cave SC + - Lake Hylia NW + - Lake Hylia NC + - Lake Hylia NE + - Lake Hylia WS + - Lake Hylia EC + - Lake Hylia ES + - Ice Lake NW + - Ice Lake NC + - Ice Lake NE + - Ice Lake WS + - Ice Lake EC + - Ice Lake ES + - Ice Cave SW + - Ice Cave SE + - Shopping Mall SW + - Shopping Mall SE + - South Pass NC + - South Pass ES + - Dark South Pass NC + - Dark South Pass ES + - Octoballoon NW + - Octoballoon NE + - Octoballoon WC + - Octoballoon WS + - Bomber Corner NW + - Bomber Corner NE + - Bomber Corner WC + - Bomber Corner WS + - Hobo EC \ No newline at end of file diff --git a/presets/world/owr_ringshuffle-borders.yaml b/presets/world/owr_ringshuffle-borders.yaml new file mode 100644 index 00000000..3cbdb28f --- /dev/null +++ b/presets/world/owr_ringshuffle-borders.yaml @@ -0,0 +1,214 @@ +ow-edges: + 1: + two-way: + Lost Woods NW: Master Sword Meadow SC + Lost Woods EN*: Lumberjack WN* + Lost Woods SW*: Lost Woods Pass NW* + Lost Woods SC*: Lost Woods Pass NE* + Skull Woods EN*: Dark Lumberjack WN* + Skull Woods SW*: Skull Woods Pass NW* + Skull Woods SC*: Skull Woods Pass NE* + West Death Mountain EN*: East Death Mountain WN* + West Dark Death Mountain EN*: East Dark Death Mountain WN* + East Death Mountain EN*: Death Mountain TR Pegs WN* + East Dark Death Mountain EN*: Turtle Rock WN* + Zora Waterfall NE: Zoras Domain SW + Zora Waterfall SE*: Zora Approach NE* + Catfish SE*: Catfish Approach NE* + Lost Woods Pass SW*: Kakariko NW* + Lost Woods Pass SE*: Kakariko NC* + Skull Woods Pass SW*: Village of Outcasts NW* + Skull Woods Pass SE*: Village of Outcasts NC* + Eastern Palace SE*: Eastern Nook NE* + Palace of Darkness SE*: Palace of Darkness Nook NE* + Desert EC: Desert Pass WC + Desert ES: Desert Pass WS + Lake Hylia WS*: South Pass ES* + Lake Hylia EC*: Octoballoon WC* + Lake Hylia ES*: Octoballoon WS* + Ice Lake WS*: Dark South Pass ES* + Ice Lake EC*: Bomber Corner WC* + Ice Lake ES*: Bomber Corner WS* + Ice Cave SW*: Octoballoon NW* + Ice Cave SE*: Octoballoon NE* + Shopping Mall SW*: Bomber Corner NW* + Shopping Mall SE*: Bomber Corner NE* + Desert Pass EC*: Dam WC* + Desert Pass ES*: Dam WS* + Swamp Nook EC*: Swamp WC* + Swamp Nook ES*: Swamp WS* + Dam EC*: South Pass WC* + Swamp EC*: Dark South Pass WC* + Lost Woods SE*: Kakariko Fortune NE* + Skull Woods SE*: Dark Fortune NE* + West Death Mountain ES*: East Death Mountain WS* + West Dark Death Mountain ES*: East Dark Death Mountain WS* + Kakariko Fortune SC*: Kakariko NE* + Dark Fortune SC*: Village of Outcasts NE* + Kakariko SE*: Kakariko Suburb NE* + Village of Outcasts SE*: Frog NE* + Eastern Palace SW*: Tree Line NW* + Palace of Darkness SW*: Dark Tree Line NW* + Tree Line SC*: Lake Hylia NC* + Tree Line SE*: Lake Hylia NE* + Dark Tree Line SC*: Ice Lake NC* + Dark Tree Line SE*: Ice Lake NE* + Flute Boy Approach EC*: C Whirlpool WC* + Stumpy Approach EC*: Dark C Whirlpool WC* + C Whirlpool EN*: Statues WN* + C Whirlpool EC*: Statues WC* + C Whirlpool ES*: Statues WS* + Dark C Whirlpool EN*: Hype Cave WN* + Dark C Whirlpool EC*: Hype Cave WC* + Dark C Whirlpool ES*: Hype Cave WS* + Kakariko Pond EN*: Sanctuary WN* + Kakariko Pond ES*: Sanctuary WS* + Kakariko Pond SW*: Forgotten Forest NW* + Kakariko Pond SE*: Forgotten Forest NE* + Outcast Pond EN*: Dark Chapel WN* + Outcast Pond ES*: Dark Chapel WS* + Outcast Pond SW*: Shield Shop NW* + Outcast Pond SE*: Shield Shop NE* + Sanctuary EC*: Graveyard WC* + Dark Chapel EC*: Dark Graveyard WC* + Graveyard EC*: River Bend WC* + Dark Graveyard EC*: Qirn Jump WC* + River Bend SW*: Wooden Bridge NW* + River Bend SC*: Wooden Bridge NC* + River Bend SE*: Wooden Bridge NE* + Qirn Jump SW*: Broken Bridge NW* + Qirn Jump SC*: Broken Bridge NC* + Qirn Jump SE*: Broken Bridge NE* + Wooden Bridge SW*: Sand Dunes NW* + Broken Bridge SW*: Dark Dunes NW* + Sand Dunes SC*: Stone Bridge NC* + Dark Dunes SC*: Hammer Bridge NC* + Central Bonk Rocks EN*: Links House WN* + Central Bonk Rocks EC*: Links House WC* + Central Bonk Rocks ES*: Links House WS* + Dark Bonk Rocks EN*: Big Bomb Shop WN* + Dark Bonk Rocks EC*: Big Bomb Shop WC* + Dark Bonk Rocks ES*: Big Bomb Shop WS* + Links House ES*: Stone Bridge WS* + Big Bomb Shop ES*: Hammer Bridge WS* + Stone Bridge WC: Hobo EC + groups: + border12_nw: + - Potion Shop EN + - Potion Shop EC + - Dark Witch EN + - Dark Witch EC + - Zora Approach WN + - Zora Approach WC + - Catfish Approach WN + - Catfish Approach WC + - C Whirlpool SC + - Dark C Whirlpool SC + - Statues SC + - Hype Cave SC + - Dam NC + - Swamp NC + - South Pass NC + - Dark South Pass NC + border12_es: + - Lumberjack SW + - Dark Lumberjack SW + - Mountain Pass NW + - Bumper Cave NW + - Maze Race ES + - Dig Game EC + - Dig Game ES + - Kakariko Suburb WS + - Frog WC + - Frog WS + border23_nw: + - River Bend EN + - River Bend EC + - River Bend ES + - Qirn Jump EN + - Qirn Jump EC + - Qirn Jump ES + - Potion Shop WN + - Potion Shop WC + - Potion Shop WS + - Dark Witch WN + - Dark Witch WC + - Dark Witch WS + - Flute Boy SW + - Flute Boy SC + - Stumpy SW + - Stumpy SC + - Central Bonk Rocks SW + - Dark Bonk Rocks SW + - Links House SC + - Big Bomb Shop SC + - Stone Bridge EN + - Stone Bridge EC + - Stone Bridge SC + - Hammer Bridge EN + - Hammer Bridge EC + - Hammer Bridge SC + - Tree Line WN + - Tree Line WC + - Dark Tree Line WN + - Dark Tree Line WC + - Flute Boy Approach NW + - Flute Boy Approach NC + - Stumpy Approach NW + - Stumpy Approach NC + - C Whirlpool NW + - Dark C Whirlpool NW + - Statues NC + - Hype Cave NC + - Lake Hylia NW + - Ice Lake NW + border23_es: + - Mountain Pass SE + - Bumper Cave SE + - Kakariko Fortune EN + - Kakariko Fortune ES + - Dark Fortune EN + - Dark Fortune ES + - Kakariko Pond NE + - Kakariko Pond WN + - Kakariko Pond WS + - Outcast Pond NE + - Outcast Pond WN + - Outcast Pond WS + - Kakariko ES + - Village of Outcasts ES + - Blacksmith WS + - Hammer Pegs WS + - Kakariko Suburb ES + - Frog ES + - Flute Boy WS + - Stumpy WS + border34_nw: + - Hyrule Castle ES + - Hyrule Castle SW + - Hyrule Castle SE + - Pyramid ES + - Pyramid SW + - Pyramid SE + - Sand Dunes WN + - Dark Dunes WN + - Central Bonk Rocks NW + - Dark Bonk Rocks NW + - Links House NE + - Big Bomb Shop NE + border34_es: + - Forgotten Forest ES + - Hyrule Castle WN +ow-whirlpools: + 1: + two-way: + Zora Whirlpool: Lake Hylia Whirlpool +ow-tileflips: + 1: + force_together: + Forest: + - 0x1a + - 0x1b + FrogDig: + - 0x28 + - 0x29 \ No newline at end of file diff --git a/presets/world/owr_ringshuffle-full.yaml b/presets/world/owr_ringshuffle-full.yaml new file mode 100644 index 00000000..c271befe --- /dev/null +++ b/presets/world/owr_ringshuffle-full.yaml @@ -0,0 +1,313 @@ +ow-edges: + 1: + groups: + ring1: + - Lost Woods NW + - Lost Woods EN + - Lost Woods SW + - Lost Woods SC + - Skull Woods EN + - Skull Woods SW + - Skull Woods SC + - Lumberjack WN + - Dark Lumberjack WN + - West Death Mountain EN + - West Dark Death Mountain EN + - East Death Mountain WN + - East Death Mountain EN + - East Dark Death Mountain WN + - East Dark Death Mountain EN + - Death Mountain TR Pegs WN + - Turtle Rock WN + - Zora Waterfall NE + - Zora Waterfall SE + - Catfish SE + - Lost Woods Pass NW + - Lost Woods Pass NE + - Lost Woods Pass SW + - Lost Woods Pass SE + - Skull Woods Pass NW + - Skull Woods Pass NE + - Skull Woods Pass SW + - Skull Woods Pass SE + - Zora Approach NE + - Catfish Approach NE + - Kakariko NW + - Kakariko NC + - Village of Outcasts NW + - Village of Outcasts NC + - Eastern Palace SE + - Palace of Darkness SE + - Eastern Nook NE + - Palace of Darkness Nook NE + - Desert EC + - Desert ES + - Lake Hylia WS + - Lake Hylia EC + - Lake Hylia ES + - Ice Lake WS + - Ice Lake EC + - Ice Lake ES + - Ice Cave SW + - Ice Cave SE + - Shopping Mall SW + - Shopping Mall SE + - Desert Pass WC + - Desert Pass WS + - Desert Pass EC + - Desert Pass ES + - Swamp Nook EC + - Swamp Nook ES + - Dam WC + - Dam WS + - Dam EC + - Swamp WC + - Swamp WS + - Swamp EC + - South Pass WC + - South Pass ES + - Dark South Pass WC + - Dark South Pass ES + - Octoballoon NW + - Octoballoon NE + - Octoballoon WC + - Octoballoon WS + - Bomber Corner NW + - Bomber Corner NE + - Bomber Corner WC + - Bomber Corner WS + - Master Sword Meadow SC + - Zoras Domain SW + ring2: + - Lost Woods SE + - Skull Woods SE + - West Death Mountain ES + - West Dark Death Mountain ES + - East Death Mountain WS + - East Dark Death Mountain WS + - Kakariko Fortune NE + - Kakariko Fortune SC + - Dark Fortune NE + - Dark Fortune SC + - Kakariko NE + - Kakariko SE + - Village of Outcasts NE + - Village of Outcasts SE + - Eastern Palace SW + - Palace of Darkness SW + - Kakariko Suburb NE + - Frog NE + - Tree Line NW + - Tree Line SC + - Tree Line SE + - Dark Tree Line NW + - Dark Tree Line SC + - Dark Tree Line SE + - Flute Boy Approach EC + - Stumpy Approach EC + - C Whirlpool WC + - C Whirlpool EN + - C Whirlpool EC + - C Whirlpool ES + - Dark C Whirlpool WC + - Dark C Whirlpool EN + - Dark C Whirlpool EC + - Dark C Whirlpool ES + - Statues WN + - Statues WC + - Statues WS + - Hype Cave WN + - Hype Cave WC + - Hype Cave WS + - Lake Hylia NC + - Lake Hylia NE + - Ice Lake NC + - Ice Lake NE + ring3: + - Kakariko Pond EN + - Kakariko Pond ES + - Kakariko Pond SW + - Kakariko Pond SE + - Outcast Pond EN + - Outcast Pond ES + - Outcast Pond SW + - Outcast Pond SE + - Sanctuary WN + - Sanctuary WS + - Sanctuary EC + - Dark Chapel WN + - Dark Chapel WS + - Dark Chapel EC + - Graveyard WC + - Graveyard EC + - Dark Graveyard WC + - Dark Graveyard EC + - River Bend WC + - River Bend SW + - River Bend SC + - River Bend SE + - Qirn Jump WC + - Qirn Jump SW + - Qirn Jump SC + - Qirn Jump SE + - Forgotten Forest NW + - Forgotten Forest NE + - Shield Shop NW + - Shield Shop NE + - Wooden Bridge NW + - Wooden Bridge NC + - Wooden Bridge NE + - Wooden Bridge SW + - Broken Bridge NW + - Broken Bridge NC + - Broken Bridge NE + - Broken Bridge SW + - Sand Dunes NW + - Sand Dunes SC + - Dark Dunes NW + - Dark Dunes SC + - Central Bonk Rocks EN + - Central Bonk Rocks EC + - Central Bonk Rocks ES + - Dark Bonk Rocks EN + - Dark Bonk Rocks EC + - Dark Bonk Rocks ES + - Links House WN + - Links House WC + - Links House WS + - Links House ES + - Big Bomb Shop WN + - Big Bomb Shop WC + - Big Bomb Shop WS + - Big Bomb Shop ES + - Stone Bridge NC + - Stone Bridge WC + - Stone Bridge WS + - Hammer Bridge NC + - Hammer Bridge WS + - Hobo EC + border12_nw: + - Potion Shop EN + - Potion Shop EC + - Dark Witch EN + - Dark Witch EC + - Zora Approach WN + - Zora Approach WC + - Catfish Approach WN + - Catfish Approach WC + - C Whirlpool SC + - Dark C Whirlpool SC + - Statues SC + - Hype Cave SC + - Dam NC + - Swamp NC + - South Pass NC + - Dark South Pass NC + border12_es: + - Lumberjack SW + - Dark Lumberjack SW + - Mountain Pass NW + - Bumper Cave NW + - Maze Race ES + - Dig Game EC + - Dig Game ES + - Kakariko Suburb WS + - Frog WC + - Frog WS + border23_nw: + - River Bend EN + - River Bend EC + - River Bend ES + - Qirn Jump EN + - Qirn Jump EC + - Qirn Jump ES + - Potion Shop WN + - Potion Shop WC + - Potion Shop WS + - Dark Witch WN + - Dark Witch WC + - Dark Witch WS + - Flute Boy SW + - Flute Boy SC + - Stumpy SW + - Stumpy SC + - Central Bonk Rocks SW + - Dark Bonk Rocks SW + - Links House SC + - Big Bomb Shop SC + - Stone Bridge EN + - Stone Bridge EC + - Stone Bridge SC + - Hammer Bridge EN + - Hammer Bridge EC + - Hammer Bridge SC + - Tree Line WN + - Tree Line WC + - Dark Tree Line WN + - Dark Tree Line WC + - Flute Boy Approach NW + - Flute Boy Approach NC + - Stumpy Approach NW + - Stumpy Approach NC + - C Whirlpool NW + - Dark C Whirlpool NW + - Statues NC + - Hype Cave NC + - Lake Hylia NW + - Ice Lake NW + border23_es: + - Mountain Pass SE + - Bumper Cave SE + - Kakariko Fortune EN + - Kakariko Fortune ES + - Dark Fortune EN + - Dark Fortune ES + - Kakariko Pond NE + - Kakariko Pond WN + - Kakariko Pond WS + - Outcast Pond NE + - Outcast Pond WN + - Outcast Pond WS + - Kakariko ES + - Village of Outcasts ES + - Blacksmith WS + - Hammer Pegs WS + - Kakariko Suburb ES + - Frog ES + - Flute Boy WS + - Stumpy WS + border34_nw: + - Hyrule Castle ES + - Hyrule Castle SW + - Hyrule Castle SE + - Pyramid ES + - Pyramid SW + - Pyramid SE + - Sand Dunes WN + - Dark Dunes WN + - Central Bonk Rocks NW + - Dark Bonk Rocks NW + - Links House NE + - Big Bomb Shop NE + border34_es: + - Forgotten Forest ES + - Hyrule Castle WN +ow-tileflips: + 1: + force_together: + PedHobo: + - 0x00 + - 0x2d + - 0x80 + Zora: + - 0x0f + - 0x81 + Forest: + - 0x1a + - 0x1b + FrogDig: + - 0x28 + - 0x29 + Desert: + - 0x30 + - 0x3a \ No newline at end of file diff --git a/presets/world/owr_ringshuffle-interiors.yaml b/presets/world/owr_ringshuffle-interiors.yaml new file mode 100644 index 00000000..0dcfbaa7 --- /dev/null +++ b/presets/world/owr_ringshuffle-interiors.yaml @@ -0,0 +1,258 @@ +ow-edges: + 1: + two-way: + Lumberjack SW: Mountain Pass NW + Dark Lumberjack SW: Bumper Cave NW + Potion Shop EN: Zora Approach WN + Potion Shop EC: Zora Approach WC + Dark Witch EN: Catfish Approach WN + Dark Witch EC: Catfish Approach WC + Maze Race ES: Kakariko Suburb WS + Dig Game EC: Frog WC + Dig Game ES: Frog WS + C Whirlpool SC: Dam NC + Dark C Whirlpool SC: Swamp NC + Statues SC: South Pass NC + Hype Cave SC: Dark South Pass NC + Mountain Pass SE: Kakariko Pond NE + Bumper Cave SE: Outcast Pond NE + Kakariko Fortune EN: Kakariko Pond WN + Kakariko Fortune ES: Kakariko Pond WS + Dark Fortune EN: Outcast Pond WN + Dark Fortune ES: Outcast Pond WS + River Bend EN: Potion Shop WN + River Bend EC: Potion Shop WC + River Bend ES: Potion Shop WS + Qirn Jump EN: Dark Witch WN + Qirn Jump EC: Dark Witch WC + Qirn Jump ES: Dark Witch WS + Kakariko ES: Blacksmith WS + Village of Outcasts ES: Hammer Pegs WS + Kakariko Suburb ES: Flute Boy WS + Frog ES: Stumpy WS + Flute Boy SW: Flute Boy Approach NW + Flute Boy SC: Flute Boy Approach NC + Stumpy SW: Stumpy Approach NW + Stumpy SC: Stumpy Approach NC + Central Bonk Rocks SW: C Whirlpool NW + Dark Bonk Rocks SW: Dark C Whirlpool NW + Links House SC: Statues NC + Big Bomb Shop SC: Hype Cave NC + Stone Bridge EN: Tree Line WN + Stone Bridge EC: Tree Line WC + Stone Bridge SC: Lake Hylia NW + Hammer Bridge EN: Dark Tree Line WN + Hammer Bridge EC: Dark Tree Line WC + Hammer Bridge SC: Ice Lake NW + Forgotten Forest ES: Hyrule Castle WN + Hyrule Castle ES: Sand Dunes WN + Hyrule Castle SW: Central Bonk Rocks NW + Hyrule Castle SE: Links House NE + Pyramid ES: Dark Dunes WN + Pyramid SW: Dark Bonk Rocks NW + Pyramid SE: Big Bomb Shop NE + groups: + ring1: + - Lost Woods NW + - Lost Woods EN + - Lost Woods SW + - Lost Woods SC + - Skull Woods EN + - Skull Woods SW + - Skull Woods SC + - Lumberjack WN + - Dark Lumberjack WN + - West Death Mountain EN + - West Dark Death Mountain EN + - East Death Mountain WN + - East Death Mountain EN + - East Dark Death Mountain WN + - East Dark Death Mountain EN + - Death Mountain TR Pegs WN + - Turtle Rock WN + - Zora Waterfall NE + - Zora Waterfall SE + - Catfish SE + - Lost Woods Pass NW + - Lost Woods Pass NE + - Lost Woods Pass SW + - Lost Woods Pass SE + - Skull Woods Pass NW + - Skull Woods Pass NE + - Skull Woods Pass SW + - Skull Woods Pass SE + - Zora Approach NE + - Catfish Approach NE + - Kakariko NW + - Kakariko NC + - Village of Outcasts NW + - Village of Outcasts NC + - Eastern Palace SE + - Palace of Darkness SE + - Eastern Nook NE + - Palace of Darkness Nook NE + - Desert EC + - Desert ES + - Lake Hylia WS + - Lake Hylia EC + - Lake Hylia ES + - Ice Lake WS + - Ice Lake EC + - Ice Lake ES + - Ice Cave SW + - Ice Cave SE + - Shopping Mall SW + - Shopping Mall SE + - Desert Pass WC + - Desert Pass WS + - Desert Pass EC + - Desert Pass ES + - Swamp Nook EC + - Swamp Nook ES + - Dam WC + - Dam WS + - Dam EC + - Swamp WC + - Swamp WS + - Swamp EC + - South Pass WC + - South Pass ES + - Dark South Pass WC + - Dark South Pass ES + - Octoballoon NW + - Octoballoon NE + - Octoballoon WC + - Octoballoon WS + - Bomber Corner NW + - Bomber Corner NE + - Bomber Corner WC + - Bomber Corner WS + - Master Sword Meadow SC + - Zoras Domain SW + ring2: + - Lost Woods SE + - Skull Woods SE + - West Death Mountain ES + - West Dark Death Mountain ES + - East Death Mountain WS + - East Dark Death Mountain WS + - Kakariko Fortune NE + - Kakariko Fortune SC + - Dark Fortune NE + - Dark Fortune SC + - Kakariko NE + - Kakariko SE + - Village of Outcasts NE + - Village of Outcasts SE + - Eastern Palace SW + - Palace of Darkness SW + - Kakariko Suburb NE + - Frog NE + - Tree Line NW + - Tree Line SC + - Tree Line SE + - Dark Tree Line NW + - Dark Tree Line SC + - Dark Tree Line SE + - Flute Boy Approach EC + - Stumpy Approach EC + - C Whirlpool WC + - C Whirlpool EN + - C Whirlpool EC + - C Whirlpool ES + - Dark C Whirlpool WC + - Dark C Whirlpool EN + - Dark C Whirlpool EC + - Dark C Whirlpool ES + - Statues WN + - Statues WC + - Statues WS + - Hype Cave WN + - Hype Cave WC + - Hype Cave WS + - Lake Hylia NC + - Lake Hylia NE + - Ice Lake NC + - Ice Lake NE + ring3: + - Kakariko Pond EN + - Kakariko Pond ES + - Kakariko Pond SW + - Kakariko Pond SE + - Outcast Pond EN + - Outcast Pond ES + - Outcast Pond SW + - Outcast Pond SE + - Sanctuary WN + - Sanctuary WS + - Sanctuary EC + - Dark Chapel WN + - Dark Chapel WS + - Dark Chapel EC + - Graveyard WC + - Graveyard EC + - Dark Graveyard WC + - Dark Graveyard EC + - River Bend WC + - River Bend SW + - River Bend SC + - River Bend SE + - Qirn Jump WC + - Qirn Jump SW + - Qirn Jump SC + - Qirn Jump SE + - Forgotten Forest NW + - Forgotten Forest NE + - Shield Shop NW + - Shield Shop NE + - Wooden Bridge NW + - Wooden Bridge NC + - Wooden Bridge NE + - Wooden Bridge SW + - Broken Bridge NW + - Broken Bridge NC + - Broken Bridge NE + - Broken Bridge SW + - Sand Dunes NW + - Sand Dunes SC + - Dark Dunes NW + - Dark Dunes SC + - Central Bonk Rocks EN + - Central Bonk Rocks EC + - Central Bonk Rocks ES + - Dark Bonk Rocks EN + - Dark Bonk Rocks EC + - Dark Bonk Rocks ES + - Links House WN + - Links House WC + - Links House WS + - Links House ES + - Big Bomb Shop WN + - Big Bomb Shop WC + - Big Bomb Shop WS + - Big Bomb Shop ES + - Stone Bridge NC + - Stone Bridge WC + - Stone Bridge WS + - Hammer Bridge NC + - Hammer Bridge WS + - Hobo EC +ow-whirlpools: + 1: + two-way: + Kakariko Pond Whirlpool: Octoballoon Whirlpool + Qirn Jump Whirlpool: Bomber Corner Whirlpool + River Bend Whirlpool: C Whirlpool +ow-tileflips: + 1: + force_together: + PedHobo: + - 0x00 + - 0x2d + - 0x80 + Zora: + - 0x0f + - 0x81 + Desert: + - 0x30 + - 0x3a \ No newline at end of file diff --git a/presets/world/owr_shuffle-largescreens.yaml b/presets/world/owr_shuffle-largescreens.yaml index 6c54658c..47798cfa 100644 --- a/presets/world/owr_shuffle-largescreens.yaml +++ b/presets/world/owr_shuffle-largescreens.yaml @@ -202,9 +202,9 @@ ow-edges: ow-tileflips: 1: force_together: - 1: + Pedestal: - 0x00 - 0x80 - 2: + Zora: - 0x0f - 0x81 \ No newline at end of file diff --git a/presets/world/owr_shuffle-separatemountain.yaml b/presets/world/owr_shuffle-separatemountain.yaml index b1078849..02a53d9c 100644 --- a/presets/world/owr_shuffle-separatemountain.yaml +++ b/presets/world/owr_shuffle-separatemountain.yaml @@ -2,15 +2,15 @@ ow-edges: 1: groups: mountain: - - West Death Mountain EN - - West Death Mountain ES - - West Dark Death Mountain EN - - West Dark Death Mountain ES - - East Death Mountain WN - - East Death Mountain WS - - East Death Mountain EN - - East Dark Death Mountain WN - - East Dark Death Mountain WS - - East Dark Death Mountain EN - - Death Mountain TR Pegs WN - - Turtle Rock WN + - West Death Mountain EN + - West Death Mountain ES + - West Dark Death Mountain EN + - West Dark Death Mountain ES + - East Death Mountain WN + - East Death Mountain WS + - East Death Mountain EN + - East Dark Death Mountain WN + - East Dark Death Mountain WS + - East Dark Death Mountain EN + - Death Mountain TR Pegs WN + - Turtle Rock WN diff --git a/presets/world/owr_shuffle-splitsimilar.yaml b/presets/world/owr_shuffle-splitsimilar.yaml new file mode 100644 index 00000000..bf1dde3d --- /dev/null +++ b/presets/world/owr_shuffle-splitsimilar.yaml @@ -0,0 +1,123 @@ +settings: + 1: + ow_terrain: false +ow-edges: + 1: + groups: + similar_2_left_top: + - Lost Woods SW + - Skull Woods SW + - Lost Woods Pass NW + - Lost Woods Pass SW + - Skull Woods Pass NW + - Skull Woods Pass SW + - Kakariko Fortune EN + - Dark Fortune EN + - Kakariko Pond WN + - Kakariko Pond EN + - Kakariko Pond SW + - Outcast Pond WN + - Outcast Pond EN + - Outcast Pond SW + - Sanctuary WN + - Dark Chapel WN + - River Bend EC + - River Bend SW + - Qirn Jump EC + - Qirn Jump SW + - Potion Shop WC + - Dark Witch WC + - Kakariko NW + - Village of Outcasts NW + - Forgotten Forest NW + - Shield Shop NW + - Wooden Bridge NW + - Broken Bridge NW + - Dig Game EC + - Frog WC + - Flute Boy SW + - Stumpy SW + - Desert EC + - Flute Boy Approach NW + - Stumpy Approach NW + - C Whirlpool EN + - Dark C Whirlpool EN + - Statues WN + - Hype Cave WN + - Desert Pass WC + - Desert Pass EC + - Swamp Nook EC + - Dam WC + - Swamp WC + similar_2_right_bottom: + - Lost Woods SC + - Skull Woods SC + - Lost Woods Pass NE + - Lost Woods Pass SE + - Skull Woods Pass NE + - Skull Woods Pass SE + - Kakariko Fortune ES + - Dark Fortune ES + - Kakariko Pond WS + - Kakariko Pond ES + - Kakariko Pond SE + - Outcast Pond WS + - Outcast Pond ES + - Outcast Pond SE + - Sanctuary WS + - Dark Chapel WS + - River Bend ES + - River Bend SE + - Qirn Jump ES + - Qirn Jump SE + - Potion Shop WS + - Dark Witch WS + - Kakariko NC + - Village of Outcasts NC + - Forgotten Forest NE + - Shield Shop NE + - Wooden Bridge NE + - Broken Bridge NE + - Dig Game ES + - Frog WS + - Flute Boy SC + - Stumpy SC + - Desert ES + - Flute Boy Approach NC + - Stumpy Approach NC + - C Whirlpool ES + - Dark C Whirlpool ES + - Statues WS + - Hype Cave WS + - Desert Pass WS + - Desert Pass ES + - Swamp Nook ES + - Dam WS + - Swamp WS + similar_3_left_top: + - Central Bonk Rocks EN + - Dark Bonk Rocks EN + - Links House WN + - Big Bomb Shop WN + similar_3_middle: + - Central Bonk Rocks EC + - Dark Bonk Rocks EC + - Links House WC + - Big Bomb Shop WC + similar_3_right_bottom: + - Central Bonk Rocks ES + - Dark Bonk Rocks ES + - Links House WS + - Big Bomb Shop WS +ow-tileflips: + 1: + force_together: + Forest: + - 0x1a + - 0x1b + FrogDig: + - 0x28 + - 0x29 + Desert: + - 0x30 + - 0x3a \ No newline at end of file diff --git a/presets/world/owr_shuffle-splitsimilarterrain.yaml b/presets/world/owr_shuffle-splitsimilarterrain.yaml new file mode 100644 index 00000000..2ade18e4 --- /dev/null +++ b/presets/world/owr_shuffle-splitsimilarterrain.yaml @@ -0,0 +1,175 @@ +settings: + 1: + ow_terrain: true +ow-edges: + 1: + groups: + similar_2_left_top: + - Lost Woods SW + - Skull Woods SW + - Lost Woods Pass NW + - Lost Woods Pass SW + - Skull Woods Pass NW + - Skull Woods Pass SW + - Kakariko Fortune EN + - Dark Fortune EN + - Kakariko Pond WN + - Kakariko Pond EN + - Kakariko Pond SW + - Outcast Pond WN + - Outcast Pond EN + - Outcast Pond SW + - Sanctuary WN + - Dark Chapel WN + - Potion Shop EN + - Dark Witch EN + - Zora Approach WN + - Catfish Approach WN + - Kakariko NW + - Village of Outcasts NW + - Forgotten Forest NW + - Shield Shop NW + - Dig Game EC + - Frog WC + - Flute Boy SW + - Stumpy SW + - Stone Bridge EN + - Hammer Bridge EN + - Tree Line WN + - Tree Line SC + - Dark Tree Line WN + - Dark Tree Line SC + - Desert EC + - Flute Boy Approach NW + - Stumpy Approach NW + - Lake Hylia NC + - Lake Hylia EC + - Ice Lake NC + - Ice Lake EC + - Ice Cave SW + - Shopping Mall SW + - Desert Pass WC + - Desert Pass EC + - Swamp Nook EC + - Dam WC + - Swamp WC + - Octoballoon NW + - Octoballoon WC + - Bomber Corner NW + - Bomber Corner WC + similar_2_right_bottom: + - Lost Woods SC + - Skull Woods SC + - Lost Woods Pass NE + - Lost Woods Pass SE + - Skull Woods Pass NE + - Skull Woods Pass SE + - Kakariko Fortune ES + - Dark Fortune ES + - Kakariko Pond WS + - Kakariko Pond ES + - Kakariko Pond SE + - Outcast Pond WS + - Outcast Pond ES + - Outcast Pond SE + - Sanctuary WS + - Dark Chapel WS + - Potion Shop EC + - Dark Witch EC + - Zora Approach WC + - Catfish Approach WC + - Kakariko NC + - Village of Outcasts NC + - Forgotten Forest NE + - Shield Shop NE + - Dig Game ES + - Frog WS + - Flute Boy SC + - Stumpy SC + - Stone Bridge EC + - Hammer Bridge EC + - Tree Line WC + - Tree Line SE + - Dark Tree Line WC + - Dark Tree Line SE + - Desert ES + - Flute Boy Approach NC + - Stumpy Approach NC + - Lake Hylia NE + - Lake Hylia ES + - Ice Lake NE + - Ice Lake ES + - Ice Cave SE + - Shopping Mall SE + - Desert Pass WS + - Desert Pass ES + - Swamp Nook ES + - Dam WS + - Swamp WS + - Octoballoon NE + - Octoballoon WS + - Bomber Corner NE + - Bomber Corner WS + similar_3_left_top: + - River Bend EN + - River Bend SW + - Qirn Jump EN + - Qirn Jump SW + - Potion Shop WN + - Dark Witch WN + - Wooden Bridge NW + - Broken Bridge NW + - Central Bonk Rocks EN + - Dark Bonk Rocks EN + - Links House WN + - Big Bomb Shop WN + - C Whirlpool EN + - Dark C Whirlpool EN + - Statues WN + - Hype Cave WN + similar_3_middle: + - River Bend EC + - River Bend SC + - Qirn Jump EC + - Qirn Jump SC + - Potion Shop WC + - Dark Witch WC + - Wooden Bridge NC + - Broken Bridge NC + - Central Bonk Rocks EC + - Dark Bonk Rocks EC + - Links House WC + - Big Bomb Shop WC + - C Whirlpool EC + - Dark C Whirlpool EC + - Statues WC + - Hype Cave WC + similar_3_right_bottom: + - River Bend ES + - River Bend SE + - Qirn Jump ES + - Qirn Jump SE + - Potion Shop WS + - Dark Witch WS + - Wooden Bridge NE + - Broken Bridge NE + - Central Bonk Rocks ES + - Dark Bonk Rocks ES + - Links House WS + - Big Bomb Shop WS + - C Whirlpool ES + - Dark C Whirlpool ES + - Statues WS + - Hype Cave WS +ow-tileflips: + 1: + force_together: + Forest: + - 0x1a + - 0x1b + FrogDig: + - 0x28 + - 0x29 + Desert: + - 0x30 + - 0x3a \ No newline at end of file diff --git a/presets/world/owr_shuffle-vertical.yaml b/presets/world/owr_shuffle-vertical.yaml index 222834c9..d037f0c7 100644 --- a/presets/world/owr_shuffle-vertical.yaml +++ b/presets/world/owr_shuffle-vertical.yaml @@ -79,9 +79,9 @@ ow-edges: ow-tileflips: 1: force_together: - 1: + Pedestal: - 0x00 - 0x80 - 2: + Zora: - 0x0f - 0x81 \ No newline at end of file diff --git a/presets/world/owr_shuffle-verticalbyrows.yaml b/presets/world/owr_shuffle-verticalbyrows.yaml index 0799a25b..25650d60 100644 --- a/presets/world/owr_shuffle-verticalbyrows.yaml +++ b/presets/world/owr_shuffle-verticalbyrows.yaml @@ -219,9 +219,9 @@ ow-edges: ow-tileflips: 1: force_together: - 1: + Pedestal: - 0x00 - 0x80 - 2: + Zora: - 0x0f - 0x81 \ No newline at end of file diff --git a/source/dungeon/DungeonStitcher.py b/source/dungeon/DungeonStitcher.py index 504fc03b..84139157 100644 --- a/source/dungeon/DungeonStitcher.py +++ b/source/dungeon/DungeonStitcher.py @@ -72,11 +72,13 @@ def generate_dungeon_find_proposal(builder, entrance_region_names, split_dungeon entrance_regions = [x for x in entrance_regions if x not in excluded.keys()] doors_to_connect, idx = {}, 0 all_regions = set() + bk_special = False for sector in builder.sectors: for door in sector.outstanding_doors: doors_to_connect[door.name] = door, idx idx += 1 all_regions.update(sector.regions) + bk_special |= check_for_special(sector.regions) finished = False # flag if standard and this is hyrule castle paths = determine_paths_for_dungeon(world, player, all_regions, name) @@ -95,9 +97,9 @@ def generate_dungeon_find_proposal(builder, entrance_region_names, split_dungeon if hash_code not in hash_code_set: hash_code_set.add(hash_code) explored_state = explore_proposal(name, entrance_regions, all_regions, proposed_map, doors_to_connect, - world, player) + bk_special, world, player) if check_valid(name, explored_state, proposed_map, doors_to_connect, all_regions, - paths, entrance_regions, world, player): + paths, entrance_regions, bk_special, world, player): finished = True else: proposed_map, hash_code = modify_proposal(proposed_map, explored_state, doors_to_connect, @@ -229,21 +231,24 @@ def modify_proposal(proposed_map, explored_state, doors_to_connect, hash_code_se return proposed_map, hash_code -def explore_proposal(name, entrance_regions, all_regions, proposed_map, valid_doors, world, player): +def explore_proposal(name, entrance_regions, all_regions, proposed_map, valid_doors, bk_special, world, player): start = ExplorationState(dungeon=name) + bk_relevant = (world.door_type_mode[player] == 'original' and not world.bigkeyshuffle[player]) or bk_special + start.big_key_special = bk_special original_state = extend_reachable_state_lenient(entrance_regions, start, proposed_map, - all_regions, valid_doors, world, player) + all_regions, valid_doors, bk_relevant, world, player) return original_state def check_valid(name, exploration_state, proposed_map, doors_to_connect, all_regions, - paths, entrance_regions, world, player): + paths, entrance_regions, bk_special, world, player): all_visited = set() all_visited.update(exploration_state.visited_blue) all_visited.update(exploration_state.visited_orange) if len(all_regions.difference(all_visited)) > 0: return False - if not valid_paths(name, paths, entrance_regions, doors_to_connect, all_regions, proposed_map, world, player): + if not valid_paths(name, paths, entrance_regions, doors_to_connect, all_regions, proposed_map, + bk_special, world, player): return False return True @@ -266,7 +271,7 @@ def check_for_special(regions): return False -def valid_paths(name, paths, entrance_regions, valid_doors, all_regions, proposed_map, world, player): +def valid_paths(name, paths, entrance_regions, valid_doors, all_regions, proposed_map, bk_special, world, player): for path in paths: if type(path) is tuple: target = path[1] @@ -278,12 +283,13 @@ def valid_paths(name, paths, entrance_regions, valid_doors, all_regions, propose else: target = path start_regions = entrance_regions - if not valid_path(name, start_regions, target, valid_doors, proposed_map, all_regions, world, player): + if not valid_path(name, start_regions, target, valid_doors, proposed_map, all_regions, + bk_special, world, player): return False return True -def valid_path(name, starting_regions, target, valid_doors, proposed_map, all_regions, world, player): +def valid_path(name, starting_regions, target, valid_doors, proposed_map, all_regions, bk_special, world, player): target_regions = set() if type(target) is not list: for region in all_regions: @@ -296,8 +302,10 @@ def valid_path(name, starting_regions, target, valid_doors, proposed_map, all_re target_regions.add(region) start = ExplorationState(dungeon=name) + bk_relevant = (world.door_type_mode[player] == 'original' and not world.bigkeyshuffle[player]) or bk_special + start.big_key_special = bk_special original_state = extend_reachable_state_lenient(starting_regions, start, proposed_map, all_regions, - valid_doors, world, player) + valid_doors, bk_relevant, world, player) for exp_door in original_state.unattached_doors: if not exp_door.door.blocked or exp_door.door.trapFlag != 0: @@ -531,7 +539,7 @@ class ExplorationState(object): self.crystal = exp_door.crystal return exp_door - def visit_region(self, region, key_region=None, key_checks=False, bk_flag=False): + def visit_region(self, region, key_region=None, key_checks=False, bk_relevant=False): if region.type != RegionType.Dungeon: self.crystal = CrystalBarrier.Orange if self.crystal == CrystalBarrier.Either: @@ -552,8 +560,14 @@ class ExplorationState(object): self.ttl_locations += 1 if location not in self.found_locations: self.found_locations.append(location) - if not bk_flag: - self.bk_found.add(location) + if bk_relevant: + if self.big_key_special: + if special_big_key_found(self): + self.bk_found.add(location) + self.re_add_big_key_doors() + else: + self.bk_found.add(location) + self.re_add_big_key_doors() if location.name in dungeon_events and location.name not in self.events: if self.flooded_key_check(location): self.perform_event(location.name, key_region) @@ -574,6 +588,14 @@ class ExplorationState(object): return True return False + def re_add_big_key_doors(self): + self.big_key_opened = True + queue = collections.deque(self.big_doors) + while len(queue) > 0: + exp_door = queue.popleft() + self.avail_doors.append(exp_door) + self.big_doors.remove(exp_door) + def perform_event(self, location_name, key_region): self.events.add(location_name) queue = collections.deque(self.event_doors) @@ -640,7 +662,7 @@ class ExplorationState(object): self.append_door_to_list(door, self.avail_doors, flag) # same as above but traps are ignored, and flag is not used - def add_all_doors_check_proposed_2(self, region, proposed_map, valid_doors, world, player): + def add_all_doors_check_proposed_2(self, region, proposed_map, valid_doors, bk_relevant, world, player): for door in get_doors(world, region, player): if door in proposed_map and door.name in valid_doors: self.visited_doors.add(door) @@ -654,14 +676,18 @@ class ExplorationState(object): other = self.find_door_in_list(door, self.unattached_doors) if self.crystal != other.crystal: other.crystal = CrystalBarrier.Either - elif door.req_event is not None and door.req_event not in self.events and not self.in_door_list(door, - self.event_doors): + elif (door.req_event is not None and door.req_event not in self.events + and not self.in_door_list(door, self.event_doors)): self.append_door_to_list(door, self.event_doors) + elif (bk_relevant and (door.bigKey or door.name in get_special_big_key_doors(world, player)) + and not self.big_key_opened): + if not self.in_door_list(door, self.big_doors): + self.append_door_to_list(door, self.big_doors) elif not self.in_door_list(door, self.avail_doors): self.append_door_to_list(door, self.avail_doors) # same as above but traps are checked for - def add_all_doors_check_proposed_3(self, region, proposed_map, valid_doors, world, player): + def add_all_doors_check_proposed_3(self, region, proposed_map, valid_doors, bk_relevant, world, player): for door in get_doors(world, region, player): if door in proposed_map and door.name in valid_doors: self.visited_doors.add(door) @@ -675,9 +701,13 @@ class ExplorationState(object): other = self.find_door_in_list(door, self.unattached_doors) if self.crystal != other.crystal: other.crystal = CrystalBarrier.Either - elif door.req_event is not None and door.req_event not in self.events and not self.in_door_list(door, - self.event_doors): + elif (door.req_event is not None and door.req_event not in self.events + and not self.in_door_list(door, self.event_doors)): self.append_door_to_list(door, self.event_doors) + elif (bk_relevant and (door.bigKey or door.name in get_special_big_key_doors(world, player)) + and not self.big_key_opened): + if not self.in_door_list(door, self.big_doors): + self.append_door_to_list(door, self.big_doors) elif not self.in_door_list(door, self.avail_doors): self.append_door_to_list(door, self.avail_doors) @@ -863,16 +893,22 @@ def extend_reachable_state_improved(search_regions, state, proposed_map, all_reg return local_state -def extend_reachable_state_lenient(search_regions, state, proposed_map, all_regions, valid_doors, world, player): +# bk_relevant means the big key doors need to be checks +def extend_reachable_state_lenient(search_regions, state, proposed_map, all_regions, valid_doors, bk_relevant, + world, player): local_state = state.copy() for region in search_regions: - local_state.visit_region(region) + local_state.visit_region(region, bk_relevant=bk_relevant) if world.trap_door_mode[player] == 'vanilla': - local_state.add_all_doors_check_proposed_3(region, proposed_map, valid_doors, world, player) + local_state.add_all_doors_check_proposed_3(region, proposed_map, valid_doors, bk_relevant, world, player) else: - local_state.add_all_doors_check_proposed_2(region, proposed_map, valid_doors, world, player) + local_state.add_all_doors_check_proposed_2(region, proposed_map, valid_doors, bk_relevant, world, player) while len(local_state.avail_doors) > 0: explorable_door = local_state.next_avail_door() + if explorable_door.door.bigKey: + if bk_relevant and (not special_big_key_found(local_state) if local_state.big_key_special + else local_state.count_locations_exclude_specials(world, player) == 0): + continue if explorable_door.door in proposed_map: connect_region = world.get_entrance(proposed_map[explorable_door.door].name, player).parent_region else: @@ -880,11 +916,13 @@ def extend_reachable_state_lenient(search_regions, state, proposed_map, all_regi if connect_region is not None: if (valid_region_to_explore_in_regions(connect_region, all_regions, world, player) and not local_state.visited(connect_region)): - local_state.visit_region(connect_region) + local_state.visit_region(connect_region, bk_relevant=bk_relevant) if world.trap_door_mode[player] == 'vanilla': - local_state.add_all_doors_check_proposed_3(connect_region, proposed_map, valid_doors, world, player) + local_state.add_all_doors_check_proposed_3(connect_region, proposed_map, valid_doors, + bk_relevant, world, player) else: - local_state.add_all_doors_check_proposed_2(connect_region, proposed_map, valid_doors, world, player) + local_state.add_all_doors_check_proposed_2(connect_region, proposed_map, valid_doors, + bk_relevant, world, player) return local_state diff --git a/test/customizer/zelda_escape.yaml b/test/customizer/zelda_escape.yaml new file mode 100644 index 00000000..e779bbac --- /dev/null +++ b/test/customizer/zelda_escape.yaml @@ -0,0 +1,14 @@ +meta: + players: 1 +settings: + 1: + door_shuffle: crossed + intensity: 3 + mode: standard + pottery: keys + dropshuffle: 'on' +doors: + 1: + doors: + Hyrule Dungeon Cellblock Up Stairs: + dest: Ice Hammer Block Down Stairs