diff --git a/BaseClasses.py b/BaseClasses.py index 6456c1c5..5381d677 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -3481,7 +3481,7 @@ boss_mode = {"none": 0, "simple": 1, "full": 2, "chaos": 3, 'random': 3, 'unique # byte 11: OOOT WCCC (OWR layout, free terrain, whirlpools, OWR crossed) or_mode = {"vanilla": 0, "parallel": 1, "full": 2} -orcrossed_mode = {"none": 0, "polar": 1, "grouped": 2, "limited": 3, "chaos": 4} +orcrossed_mode = {"none": 0, "polar": 1, "grouped": 2, "unrestricted": 4} # byte 12: KMB? FF?? (keep similar, mixed/tile flip, bonk drops, flute spots) flutespot_mode = {"vanilla": 0, "balanced": 1, "random": 2} diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 498a28ff..36dded6b 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -210,7 +210,7 @@ def link_overworld(world, player): force_crossed = set() force_noncrossed = set() count_crossed = 0 - limited_crossed = 9 if world.owCrossed[player] == 'limited' else -1 + limited_crossed = -1 if world.customizer: custom_crossed = world.customizer.get_owcrossed() if custom_crossed and player in custom_crossed: @@ -257,7 +257,7 @@ def link_overworld(world, player): s[0x30], s[0x35], s[0x41], s[0x3a],s[0x3b],s[0x3c], s[0x3f]) world.spoiler.set_map('groups', text_output, ow_crossed_tiles, player) - elif limited_crossed > -1 or (world.owShuffle[player] == 'vanilla' and world.owCrossed[player] == 'chaos'): + elif limited_crossed > -1 or (world.owShuffle[player] == 'vanilla' and world.owCrossed[player] == 'unrestricted'): crossed_candidates = list() for group in trimmed_groups.keys(): (mode, wrld, dir, terrain, parallel, count) = group @@ -1084,7 +1084,7 @@ def shuffle_tiles(world, groups, result_list, do_grouped, player): exist_dw_regions.extend(new_results[2]) # replace LW edges with DW - if world.owCrossed[player] not in ['polar', 'grouped', 'chaos'] or do_grouped: + if world.owCrossed[player] == 'none' or do_grouped: # in polar, the actual edge connections remain vanilla def getSwappedEdges(world, lst, player): for regionname in lst: @@ -1238,7 +1238,7 @@ def adjust_edge_groups(world, trimmed_groups, edges_to_swap, player): if mode == OpenStd.Standard: groups[key] = group else: - if world.owCrossed[player] == 'chaos' and not limited_crossed: + if world.owCrossed[player] == 'unrestricted' and not limited_crossed: groups[(mode, None, dir, terrain, parallel, count)][0].extend(group[0]) groups[(mode, None, dir, terrain, parallel, count)][1].extend(group[1]) else: diff --git a/README.md b/README.md index 0bae614a..ad343b01 100644 --- a/README.md +++ b/README.md @@ -159,9 +159,9 @@ With OW Layout Shuffle, this allows land and water edges to be connected. This allows OW connections to be shuffled cross-world. There are 2 main methodologies of Crossed OWR: -- Grouped and Polar both are guaranteed to result in two separated planes of tiles, similar to that of vanilla. This means you cannot simply walk around and be able to visit all the tiles. To navigate to the other plane, you have the following methods: 1) Normal portals 2) Mirroring on DW tiles 3) Fluting to a tile that was previously unreachable +- `Grouped` and `Polar` both are guaranteed to result in two separated planes of tiles, similar to that of vanilla. This means you cannot simply walk around and be able to visit all the tiles. To navigate to the other plane, you have the following methods: 1) Normal portals 2) Mirroring on DW tiles 3) Fluting to a tile that was previously unreachable -- Limited and Chaos are not bound to follow a two-plane framework. This means that it could be possible to travel on foot to every tile without entering a normal portal. +- `Unrestricted` is not bound to follow a two-plane framework. This means that it could be possible to travel on foot to every tile without entering a normal portal. See each option to get more details on the differences. @@ -171,31 +171,23 @@ Transitions will remain same-world. ### Grouped -This option shuffles connections cross-world in the same manner as Tile Flip (Mixed), the connections coming in and going out of a Tile Group (see `Terminology` section above) are crossed (ie. meaning it is impossible to take a different path to a tile and end up in the opposite world, unlike Limited and Chaos). This is considered the simplest way to play Crossed OWR. +This option shuffles connections cross-world in the same manner as Tile Flip (Mixed), the connections coming in and going out of a Tile Group (see `Terminology` section above) are crossed (ie. meaning it is impossible to take a different path to a tile and end up in the opposite world, unlike `Unrestricted`). This is considered the simplest way to play Crossed OWR. ### Polar Only effective if Tile Flip (Mixed) is enabled. Polar follows the same principle as Grouped, except that it preserves the original/vanilla connections even when tiles are flipped/mixed. This results in a completely vanilla overworld, except that some tiles will transform Link to a Bunny. Even though these tiles give the appearance of your normal LW tile, due to how Tile Flip works, those LW tiles give DW properties (such as bunnying, ability to mirror, and prevents flute usage). This offers an interesting twist on Mixed where you have a pre-conditioned knowledge of the terrain you will encounter, but not necessarily be able to do what you need to do there, due to bunny state. (see `Tile Flip / Mixed` section for more details) -### Limited +### Unrestricted -Every transition is independently a candidate to be chosen as a cross-world connection, however only 9 total transitions become crossed (to/from each world). This option abides by the `Keep Similar Edges Together` option and will guarantee same effect on all edges in a Similar Edge group if enabled. If a Similar Edge group is chosen from the pool of candidates, it only counts as one portal, not multiple. +Every transition is independently a candidate to be chosen as a cross-world connection. This option abides by the `Keep Similar Edges Together` option and will guarantee same effect on all edges in a Similar Edge group if enabled. If a Similar Edge group is chosen from the pool of candidates, it only counts as one portal, not multiple. Each transition has an equal 50/50 chance of being a crossed connection. -Note: Only parallel connections (a connection that also exists in the opposite world) are considered for cross-world connections, which means that the same connection in the opposite world will also connect cross-world. - -Note: If Whirlpool Shuffle is enabled, those connections can be cross-world but do not count towards the 9 transitions that are crossed. - -Motive: Why 9 connections? To imitate the effect of the 9 existing standard portals. - -### Chaos - -Same as Limited, except that there is no limit to the number of cross-world connections that are made. Each transition has an equal 50/50 chance of being a crossed connection. +Note: If Whirlpool Shuffle is enabled, those connections can be cross-world. ## Keep Similar Edges Together (--ow_keepsimilar) This keeps similar edge transitions together. ie. The 2 west land edges of Potion Shop will be paired to another set of two similar edges, unless Free Terrain is also enabled, in which case these 2 edges together with the west water edge form a group of 3 similar edges. See `Terminology` section above for a more detailed explanation of Similar Edges. -Note: This affects OW Layout Shuffle mostly, but also affects Limited and Chaos modes in Crossed OW. +Note: This affects OW Layout Shuffle mostly, but also affects `Unrestricted` mode in Crossed OW. ## Tile Flip / Mixed Overworld (--ow_mixed) diff --git a/Rom.py b/Rom.py index 559ef2b8..27a1a38f 100644 --- a/Rom.py +++ b/Rom.py @@ -740,7 +740,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): elif world.owShuffle[player] == 'full': owMode = 2 - if world.owKeepSimilar[player] and (world.owShuffle[player] != 'vanilla' or world.owCrossed[player] in ['limited', 'chaos']): + if world.owKeepSimilar[player] and (world.owShuffle[player] != 'vanilla' or world.owCrossed[player] == 'unrestricted'): owMode |= 0x0100 if world.owCrossed[player] != 'none' and (world.owCrossed[player] != 'polar' or world.owMixed[player]): owMode |= 0x0200 diff --git a/TestSuiteStat.py b/TestSuiteStat.py index ecde323d..882f9ffb 100644 --- a/TestSuiteStat.py +++ b/TestSuiteStat.py @@ -49,7 +49,7 @@ SETTINGS = { 'ow_fluteshuffle': ['balanced'], 'ow_keepsimilar': [True, False], 'ow_mixed': [True, False], - 'ow_crossed': ['none', 'polar', 'grouped', 'limited'], + 'ow_crossed': ['none', 'polar', 'grouped', 'unrestricted'], 'accessibility': [True], 'difficulty': [False], 'shufflepots': [False], diff --git a/docs/Customizer.md b/docs/Customizer.md index 0a6c2394..67aa37e5 100644 --- a/docs/Customizer.md +++ b/docs/Customizer.md @@ -107,7 +107,7 @@ This must be defined by player. Each player number should be listed with the app #### limit_crossed -`limit_crossed` should be used to limit how many overworld edge transitions end up connecting cross-world. This value can be set to any non-negative integer. A value of 0 means no edges will be cross-world, except for edges that are forced cross-world (either by the previous step or a result of some combination of OWR settings). +`limit_crossed` should be used to limit how many overworld edge transitions end up connecting cross-world. This value can be set to any non-negative integer. A value of 0 means no edges will be cross-world, except for edges that are forced cross-world (either by the previous step or a result of some combination of OWR settings). This option only takes effect if `ow_crossed: unrestricted` is in the `settings` section. ### ow-whirlpools diff --git a/mystery_example.yml b/mystery_example.yml index 3e65a483..dbb455d7 100644 --- a/mystery_example.yml +++ b/mystery_example.yml @@ -10,8 +10,7 @@ none: 4 polar: 1 grouped: 1 - limited: 1 - chaos: 1 + unrestricted: 1 overworld_keepsimilar: on: 1 off: 1 diff --git a/resources/app/cli/args.json b/resources/app/cli/args.json index 7ab56184..52edf0cd 100644 --- a/resources/app/cli/args.json +++ b/resources/app/cli/args.json @@ -174,8 +174,7 @@ "none", "grouped", "polar", - "limited", - "chaos" + "unrestricted" ] }, "ow_keepsimilar": { diff --git a/resources/app/cli/lang/en.json b/resources/app/cli/lang/en.json index 20dce34c..ca4543d0 100644 --- a/resources/app/cli/lang/en.json +++ b/resources/app/cli/lang/en.json @@ -239,9 +239,7 @@ " walk around and access the other plane version by walking.", "Polar: Only used when Tile Flip is enabled. This retains original", " connections even when overworld tiles are flipped.", - "Limited: Exactly nine transitions are randomly chosen as", - " cross-world connections (to emulate the nine portals).", - "Chaos: Every transition has a 50/50 chance to become a", + "Unrestricted: Every transition has a 50/50 chance to become a", " crossworld connection." ], "ow_keepsimilar": [ diff --git a/resources/app/gui/lang/en.json b/resources/app/gui/lang/en.json index 187f3c53..95336905 100644 --- a/resources/app/gui/lang/en.json +++ b/resources/app/gui/lang/en.json @@ -147,8 +147,7 @@ "randomizer.overworld.crossed.none": "None", "randomizer.overworld.crossed.grouped": "Grouped", "randomizer.overworld.crossed.polar": "Polar", - "randomizer.overworld.crossed.limited": "Limited", - "randomizer.overworld.crossed.chaos": "Chaos", + "randomizer.overworld.crossed.unrestricted": "Unrestricted", "randomizer.overworld.keepsimilar": "Keep Similar Edges Together", diff --git a/resources/app/gui/randomize/overworld/widgets.json b/resources/app/gui/randomize/overworld/widgets.json index c9438deb..c3c49c94 100644 --- a/resources/app/gui/randomize/overworld/widgets.json +++ b/resources/app/gui/randomize/overworld/widgets.json @@ -17,8 +17,7 @@ "none", "grouped", "polar", - "limited", - "chaos" + "unrestricted" ] }, "mixed": { diff --git a/source/classes/CustomSettings.py b/source/classes/CustomSettings.py index 96330516..c3f20ff9 100644 --- a/source/classes/CustomSettings.py +++ b/source/classes/CustomSettings.py @@ -79,6 +79,10 @@ class CustomSettings(object): args.ow_shuffle[p] = get_setting(settings['ow_shuffle'], args.ow_shuffle[p]) args.ow_terrain[p] = get_setting(settings['ow_terrain'], args.ow_terrain[p]) args.ow_crossed[p] = get_setting(settings['ow_crossed'], args.ow_crossed[p]) + if args.ow_crossed[p] == 'chaos': + import logging + logging.getLogger('').info("Crossed OWR option 'chaos' is deprecated. Use 'unrestricted' instead.") + args.ow_crossed[p] = 'unrestricted' args.ow_keepsimilar[p] = get_setting(settings['ow_keepsimilar'], args.ow_keepsimilar[p]) args.ow_mixed[p] = get_setting(settings['ow_mixed'], args.ow_mixed[p]) args.ow_whirlpool[p] = get_setting(settings['ow_whirlpool'], args.ow_whirlpool[p]) diff --git a/source/tools/MysteryUtils.py b/source/tools/MysteryUtils.py index 0473e2c1..12266f22 100644 --- a/source/tools/MysteryUtils.py +++ b/source/tools/MysteryUtils.py @@ -78,9 +78,9 @@ def roll_settings(weights): overworld_shuffle = get_choice('overworld_shuffle') ret.ow_shuffle = overworld_shuffle if overworld_shuffle != 'none' else 'vanilla' ret.ow_terrain = get_choice('overworld_terrain') == 'on' - valid_options = {'none', 'polar', 'grouped', 'limited', 'chaos'} + valid_options = {'none': 'none', 'polar': 'polar', 'grouped': 'polar', 'chaos': 'unrestricted', 'unrestricted': 'unrestricted'} ret.ow_crossed = get_choice('overworld_crossed') - ret.ow_crossed = ret.ow_crossed if ret.ow_crossed in valid_options else 'none' + ret.ow_crossed = valid_options[ret.ow_crossed] if ret.ow_crossed in valid_options else 'none' ret.ow_keepsimilar = get_choice('overworld_keepsimilar') == 'on' ret.ow_mixed = get_choice('overworld_swap') == 'on' ret.ow_whirlpool = get_choice('whirlpool_shuffle') == 'on'