diff --git a/BaseClasses.py b/BaseClasses.py index b8a37691..ab008eff 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -25,6 +25,7 @@ class World(object): self.teams = 1 self.owShuffle = owShuffle.copy() self.owKeepSimilar = {} + self.owParallelWorlds = {} self.shuffle = shuffle.copy() self.doorShuffle = doorShuffle.copy() self.intensity = {} @@ -2095,6 +2096,7 @@ class Spoiler(object): 'goal': self.world.goal, 'ow_shuffle': self.world.owShuffle, 'ow_keepsimilar': self.world.owKeepSimilar, + 'ow_parallel': self.world.owParallelWorlds, 'shuffle': self.world.shuffle, 'door_shuffle': self.world.doorShuffle, 'intensity': self.world.intensity, @@ -2174,6 +2176,7 @@ class Spoiler(object): outfile.write('Item Functionality:'.ljust(line_width) + '%s\n' % self.metadata['item_functionality'][player]) outfile.write('Overworld Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['ow_shuffle'][player]) outfile.write('Keep OW Edges Together:'.ljust(line_width) + '%s\n' % ('Yes' if self.metadata['ow_keepsimilar'][player] else 'No')) + outfile.write('Parallel Worlds:'.ljust(line_width) + '%s\n' % ('Yes' if self.metadata['ow_parallel'][player] else 'No')) outfile.write('Entrance Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['shuffle'][player]) outfile.write('Door Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['door_shuffle'][player]) outfile.write('Intensity:'.ljust(line_width) + '%s\n' % self.metadata['intensity'][player]) diff --git a/CLI.py b/CLI.py index e1ae72b6..5bb22827 100644 --- a/CLI.py +++ b/CLI.py @@ -144,6 +144,7 @@ def parse_settings(): "shuffleganon": True, "ow_shuffle": "vanilla", "ow_keepsimilar": False, + "ow_parallel": False, "shuffle": "vanilla", "shufflepots": False, diff --git a/Main.py b/Main.py index df24228d..7e6e9233 100644 --- a/Main.py +++ b/Main.py @@ -74,6 +74,7 @@ def main(args, seed=None, fish=None): world.crystals_ganon_orig = args.crystals_ganon.copy() world.crystals_gt_orig = args.crystals_gt.copy() world.owKeepSimilar = args.ow_keepsimilar.copy() + world.owParallelWorlds = args.ow_parallel.copy() world.open_pyramid = args.openpyramid.copy() world.boss_shuffle = args.shufflebosses.copy() world.enemy_shuffle = args.shuffleenemies.copy() diff --git a/Mystery.py b/Mystery.py index b26e6ff9..f4dd0960 100644 --- a/Mystery.py +++ b/Mystery.py @@ -154,6 +154,7 @@ def roll_settings(weights): overworld_shuffle = get_choice('overworld_shuffle') ret.ow_shuffle = overworld_shuffle if overworld_shuffle != 'none' else 'vanilla' ret.ow_keepsimilar = get_choice('ow_keepsimilar') + ret.ow_parallel = get_choice('ow_parallel') entrance_shuffle = get_choice('entrance_shuffle') ret.shuffle = entrance_shuffle if entrance_shuffle != 'none' else 'vanilla' door_shuffle = get_choice('door_shuffle') diff --git a/README.md b/README.md index 9b60515c..291ede3e 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ This is a very new mode of LTTPR so the tools and info is very limited. There is # Known Issues (Updated 2021-04-26) +(Updated 2021-05-04) ### If you want to playtest this, know these things: - Camera unlocking issues, which opens up the possibility of a hardlock. The workaround is to move Link around until the camera locks in place. DO NOT try to transition where there is a visible line. @@ -56,6 +57,10 @@ OW is not shuffled. This keeps similar edge transitions together. ie. The 2 west edges will be paired to another set of two similar edges +## Parallel Worlds (--ow_parallel) + +This ensures matching layouts of Light and Dark worlds. Any remaining edge transitions that don't have a matching counterpart will be shuffled amongst themselves. ie. If going right from Link's House leads to Blacksmith, then going right from Big Bomb Shop will lead to Hammer Pegs + # Command Line Options @@ -76,3 +81,9 @@ For specifying the overworld shuffle you want as above. (default: vanilla) ``` This keeps similar edge transitions paired together with other pairs of transitions + +``` +--ow_parallel +``` + +This ensures the layout of both worlds have the same shape diff --git a/resources/app/cli/args.json b/resources/app/cli/args.json index cfdba1cb..1e3ecdf1 100644 --- a/resources/app/cli/args.json +++ b/resources/app/cli/args.json @@ -120,6 +120,10 @@ "action": "store_true", "type": "bool" }, + "ow_parallel": { + "action": "store_true", + "type": "bool" + }, "shuffle": { "choices": [ "vanilla", diff --git a/resources/app/cli/lang/en.json b/resources/app/cli/lang/en.json index ee0d50bc..3c4825f6 100644 --- a/resources/app/cli/lang/en.json +++ b/resources/app/cli/lang/en.json @@ -203,7 +203,10 @@ " overworld screens from the same world.", "Crossed: Overworld screen transitions can lead to any other overworld screen." ], - "ow_keepsimilar": [ "This keeps similar edge transitions together. ie. the two west edges on Potion Shop will be paired with another similar pair." ], + "ow_keepsimilar": [ + "This keeps similar edge transitions together. ie. the two west edges on", + "Potion Shop will be paired with another similar pair." ], + "ow_parallel": [ "This ensures the layouts of both worlds are the same shape." ], "door_shuffle": [ "Select Door Shuffling Algorithm. (default: %(default)s)", "Basic: Doors are mixed within a single dungeon.", diff --git a/resources/app/gui/lang/en.json b/resources/app/gui/lang/en.json index eadfe436..5bbb8897 100644 --- a/resources/app/gui/lang/en.json +++ b/resources/app/gui/lang/en.json @@ -116,6 +116,7 @@ "randomizer.overworld.overworldshuffle.crossed": "Crossed", "randomizer.overworld.keepsimilar": "Keep Similar Edges Together", + "randomizer.overworld.parallelworlds": "Parallel Worlds", "randomizer.entrance.openpyramid": "Pre-open Pyramid Hole", "randomizer.entrance.shuffleganon": "Include Ganon's Tower and Pyramid Hole in shuffle pool", diff --git a/resources/app/gui/randomize/overworld/widgets.json b/resources/app/gui/randomize/overworld/widgets.json index 5aa2d7cc..ee79e5a4 100644 --- a/resources/app/gui/randomize/overworld/widgets.json +++ b/resources/app/gui/randomize/overworld/widgets.json @@ -11,6 +11,10 @@ "keepsimilar": { "type": "checkbox", "default": true + }, + "parallelworlds": { + "type": "checkbox", + "default": true } } } \ No newline at end of file diff --git a/source/classes/constants.py b/source/classes/constants.py index 68df9519..0d722627 100644 --- a/source/classes/constants.py +++ b/source/classes/constants.py @@ -72,7 +72,8 @@ SETTINGSTOPROCESS = { }, "overworld": { "overworldshuffle": "ow_shuffle", - "keepsimilar": "ow_keepsimilar" + "keepsimilar": "ow_keepsimilar", + "parallelworlds": "ow_parallel" }, "entrance": { "openpyramid": "openpyramid",