Add Free Terrain mode and terrain rules
This commit is contained in:
@@ -25,6 +25,7 @@ class World(object):
|
||||
self.players = players
|
||||
self.teams = 1
|
||||
self.owShuffle = owShuffle.copy()
|
||||
self.owTerrain = {}
|
||||
self.owCrossed = owCrossed.copy()
|
||||
self.owKeepSimilar = {}
|
||||
self.owMixed = owMixed.copy()
|
||||
@@ -2912,6 +2913,7 @@ class Spoiler(object):
|
||||
'weapons': self.world.swords,
|
||||
'goal': self.world.goal,
|
||||
'ow_shuffle': self.world.owShuffle,
|
||||
'ow_terrain': self.world.owTerrain,
|
||||
'ow_crossed': self.world.owCrossed,
|
||||
'ow_keepsimilar': self.world.owKeepSimilar,
|
||||
'ow_mixed': self.world.owMixed,
|
||||
@@ -3124,6 +3126,8 @@ class Spoiler(object):
|
||||
outfile.write('Bombbag:'.ljust(line_width) + '%s\n' % yn(self.metadata['bombbag'][player]))
|
||||
outfile.write('Pseudoboots:'.ljust(line_width) + '%s\n' % yn(self.metadata['pseudoboots'][player]))
|
||||
outfile.write('Overworld Layout Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['ow_shuffle'][player])
|
||||
if self.metadata['ow_shuffle'][player] != 'vanilla':
|
||||
outfile.write('Free Terrain:'.ljust(line_width) + '%s\n' % yn(self.metadata['ow_terrain'][player]))
|
||||
outfile.write('Crossed OW:'.ljust(line_width) + '%s\n' % self.metadata['ow_crossed'][player])
|
||||
if self.metadata['ow_shuffle'][player] != 'vanilla' or self.metadata['ow_crossed'][player] != 'none':
|
||||
outfile.write('Keep Similar OW Edges Together:'.ljust(line_width) + '%s\n' % yn(self.metadata['ow_keepsimilar'][player]))
|
||||
|
||||
5
CLI.py
5
CLI.py
@@ -97,8 +97,8 @@ def parse_cli(argv, no_defaults=False):
|
||||
for player in range(1, multiargs.multi + 1):
|
||||
playerargs = parse_cli(shlex.split(getattr(ret, f"p{player}")), True)
|
||||
|
||||
for name in ['logic', 'mode', 'swords', 'goal', 'difficulty', 'item_functionality',
|
||||
'ow_shuffle', 'ow_crossed', 'ow_keepsimilar', 'ow_mixed', 'ow_whirlpool', 'ow_fluteshuffle',
|
||||
for name in ['logic', 'mode', 'swords', 'goal', 'difficulty', 'item_functionality', 'ow_shuffle',
|
||||
'ow_terrain', 'ow_crossed', 'ow_keepsimilar', 'ow_mixed', 'ow_whirlpool', 'ow_fluteshuffle',
|
||||
'shuffle', 'door_shuffle', 'intensity', 'crystals_ganon', 'crystals_gt', 'openpyramid',
|
||||
'mapshuffle', 'compassshuffle', 'keyshuffle', 'bigkeyshuffle', 'startinventory',
|
||||
'usestartinventory', 'bombbag', 'shuffleganon', 'overworld_map', 'restrict_boss_items',
|
||||
@@ -154,6 +154,7 @@ def parse_settings():
|
||||
"openpyramid": "auto",
|
||||
"shuffleganon": True,
|
||||
"ow_shuffle": "vanilla",
|
||||
"ow_terrain": False,
|
||||
"ow_crossed": "none",
|
||||
"ow_keepsimilar": False,
|
||||
"ow_mixed": False,
|
||||
|
||||
3
Main.py
3
Main.py
@@ -88,6 +88,7 @@ def main(args, seed=None, fish=None):
|
||||
world.crystals_needed_for_gt = {player: random.randint(0, 7) if args.crystals_gt[player] == 'random' else int(args.crystals_gt[player]) for player in range(1, world.players + 1)}
|
||||
world.crystals_ganon_orig = args.crystals_ganon.copy()
|
||||
world.crystals_gt_orig = args.crystals_gt.copy()
|
||||
world.owTerrain = args.ow_terrain.copy()
|
||||
world.owKeepSimilar = args.ow_keepsimilar.copy()
|
||||
world.owWhirlpoolShuffle = args.ow_whirlpool.copy()
|
||||
world.owFluteShuffle = args.ow_fluteshuffle.copy()
|
||||
@@ -433,6 +434,7 @@ def copy_world(world):
|
||||
ret.crystals_needed_for_gt = world.crystals_needed_for_gt.copy()
|
||||
ret.crystals_ganon_orig = world.crystals_ganon_orig.copy()
|
||||
ret.crystals_gt_orig = world.crystals_gt_orig.copy()
|
||||
ret.owTerrain = world.owTerrain.copy()
|
||||
ret.owKeepSimilar = world.owKeepSimilar.copy()
|
||||
ret.owWhirlpoolShuffle = world.owWhirlpoolShuffle.copy()
|
||||
ret.owFluteShuffle = world.owFluteShuffle.copy()
|
||||
@@ -593,6 +595,7 @@ def copy_world_limited(world):
|
||||
ret.crystals_needed_for_gt = world.crystals_needed_for_gt.copy()
|
||||
ret.crystals_ganon_orig = world.crystals_ganon_orig.copy()
|
||||
ret.crystals_gt_orig = world.crystals_gt_orig.copy()
|
||||
ret.owTerrain = world.owTerrain.copy()
|
||||
ret.owKeepSimilar = world.owKeepSimilar.copy()
|
||||
ret.owWhirlpoolShuffle = world.owWhirlpoolShuffle.copy()
|
||||
ret.owFluteShuffle = world.owFluteShuffle.copy()
|
||||
|
||||
@@ -168,6 +168,7 @@ 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'}
|
||||
ret.ow_crossed = get_choice('overworld_crossed')
|
||||
ret.ow_crossed = ret.ow_crossed if ret.ow_crossed in valid_options else 'none'
|
||||
|
||||
318
OWEdges.py
318
OWEdges.py
@@ -697,6 +697,324 @@ OWEdgeGroups = {
|
||||
)
|
||||
}
|
||||
|
||||
OWEdgeGroupsTerrain = {
|
||||
#(IsStandard, World, EdgeAxis, Terrain, HasParallel, NumberInGroup)
|
||||
(St, LW, Vt, None, PL, 1): (
|
||||
[
|
||||
['Hyrule Castle SW'],
|
||||
['Hyrule Castle SE']
|
||||
],
|
||||
[
|
||||
['Central Bonk Rocks NW'],
|
||||
['Links House NE']
|
||||
]
|
||||
),
|
||||
(St, LW, Hz, None, PL, 3): (
|
||||
[
|
||||
['Central Bonk Rocks EN', 'Central Bonk Rocks EC', 'Central Bonk Rocks ES']
|
||||
],
|
||||
[
|
||||
['Links House WN', 'Links House WC', 'Links House WS']
|
||||
]
|
||||
),
|
||||
(Op, LW, Hz, None, PL, 1): (
|
||||
[
|
||||
['Lost Woods EN'],
|
||||
['East Death Mountain EN'],
|
||||
['Sanctuary EC'],
|
||||
['Graveyard EC'],
|
||||
['Kakariko ES'],
|
||||
['Hyrule Castle ES'],
|
||||
['Maze Race ES'],
|
||||
['Kakariko Suburb ES'],
|
||||
['Links House ES'],
|
||||
['Flute Boy Approach EC'],
|
||||
['Dam EC'],
|
||||
['South Pass ES'],
|
||||
['West Death Mountain EN'],
|
||||
['West Death Mountain ES']
|
||||
],
|
||||
[
|
||||
['Lumberjack WN'],
|
||||
['Death Mountain TR Pegs WN'],
|
||||
['Graveyard WC'],
|
||||
['River Bend WC'],
|
||||
['Blacksmith WS'],
|
||||
['Sand Dunes WN'],
|
||||
['Kakariko Suburb WS'],
|
||||
['Flute Boy WS'],
|
||||
['Stone Bridge WS'],
|
||||
['C Whirlpool WC'],
|
||||
['South Pass WC'],
|
||||
['Lake Hylia WS'],
|
||||
['East Death Mountain WN'],
|
||||
['East Death Mountain WS']
|
||||
]
|
||||
),
|
||||
(Op, LW, Hz, None, NP, 1): (
|
||||
[
|
||||
['Forgotten Forest ES'],
|
||||
['Hobo EC']
|
||||
],
|
||||
[
|
||||
['Hyrule Castle WN'],
|
||||
['Stone Bridge WC']
|
||||
]
|
||||
),
|
||||
(Op, LW, Vt, None, PL, 1): (
|
||||
[
|
||||
['Lumberjack SW'],
|
||||
['Mountain Entry SE'],
|
||||
['Lost Woods SE'],
|
||||
['Zora Waterfall SE'],
|
||||
['Kakariko Fortune SC'],
|
||||
['Wooden Bridge SW'],
|
||||
['Kakariko SE'],
|
||||
['Sand Dunes SC'],
|
||||
['Eastern Palace SW'],
|
||||
['Eastern Palace SE'],
|
||||
['Central Bonk Rocks SW'],
|
||||
['Links House SC'],
|
||||
['Stone Bridge SC'],
|
||||
['C Whirlpool SC'],
|
||||
['Statues SC']
|
||||
],
|
||||
[
|
||||
['Mountain Entry NW'],
|
||||
['Kakariko Pond NE'],
|
||||
['Kakariko Fortune NE'],
|
||||
['Zora Approach NE'],
|
||||
['Kakariko NE'],
|
||||
['Sand Dunes NW'],
|
||||
['Kakariko Suburb NE'],
|
||||
['Stone Bridge NC'],
|
||||
['Tree Line NW'],
|
||||
['Eastern Nook NE'],
|
||||
['C Whirlpool NW'],
|
||||
['Statues NC'],
|
||||
['Lake Hylia NW'],
|
||||
['Dam NC'],
|
||||
['South Pass NC']
|
||||
]
|
||||
),
|
||||
(Op, LW, Vt, None, NP, 1): (
|
||||
[
|
||||
['Master Sword Meadow SC'],
|
||||
['Zoras Domain SW']
|
||||
],
|
||||
[
|
||||
['Lost Woods NW'],
|
||||
['Zora Waterfall NE']
|
||||
]
|
||||
),
|
||||
(Op, LW, Hz, None, PL, 2): (
|
||||
[
|
||||
['Kakariko Fortune EN', 'Kakariko Fortune ES'],
|
||||
['Kakariko Pond EN', 'Kakariko Pond ES'],
|
||||
['Desert Pass EC', 'Desert Pass ES'],
|
||||
['Potion Shop EN', 'Potion Shop EC'],
|
||||
['Lake Hylia EC', 'Lake Hylia ES'],
|
||||
['Stone Bridge EN', 'Stone Bridge EC']
|
||||
],
|
||||
[
|
||||
['Kakariko Pond WN', 'Kakariko Pond WS'],
|
||||
['Sanctuary WN', 'Sanctuary WS'],
|
||||
['Dam WC', 'Dam WS'],
|
||||
['Zora Approach WN', 'Zora Approach WC'],
|
||||
['Octoballoon WC', 'Octoballoon WS'],
|
||||
['Tree Line WN', 'Tree Line WC']
|
||||
]
|
||||
),
|
||||
(Op, LW, Hz, None, NP, 2): (
|
||||
[
|
||||
['Desert EC', 'Desert ES']
|
||||
],
|
||||
[
|
||||
['Desert Pass WC', 'Desert Pass WS']
|
||||
]
|
||||
),
|
||||
(Op, LW, Vt, None, PL, 2): (
|
||||
[
|
||||
['Lost Woods SW', 'Lost Woods SC'],
|
||||
['Lost Woods Pass SW', 'Lost Woods Pass SE'],
|
||||
['Kakariko Pond SW', 'Kakariko Pond SE'],
|
||||
['Flute Boy SW', 'Flute Boy SC'],
|
||||
['Tree Line SC', 'Tree Line SE'],
|
||||
['Ice Cave SW', 'Ice Cave SE']
|
||||
],
|
||||
[
|
||||
['Lost Woods Pass NW', 'Lost Woods Pass NE'],
|
||||
['Kakariko NW', 'Kakariko NC'],
|
||||
['Forgotten Forest NW', 'Forgotten Forest NE'],
|
||||
['Flute Boy Approach NW', 'Flute Boy Approach NC'],
|
||||
['Lake Hylia NC', 'Lake Hylia NE'],
|
||||
['Octoballoon NW', 'Octoballoon NE']
|
||||
]
|
||||
),
|
||||
(Op, LW, Hz, None, PL, 3): (
|
||||
[
|
||||
['River Bend EN', 'River Bend EC', 'River Bend ES'],
|
||||
['C Whirlpool EN', 'C Whirlpool EC', 'C Whirlpool ES']
|
||||
],
|
||||
[
|
||||
['Potion Shop WN', 'Potion Shop WC', 'Potion Shop WS'],
|
||||
['Statues WN', 'Statues WC', 'Statues WS']
|
||||
]
|
||||
),
|
||||
(Op, LW, Vt, None, PL, 3): (
|
||||
[
|
||||
['River Bend SW', 'River Bend SC', 'River Bend SE']
|
||||
],
|
||||
[
|
||||
['Wooden Bridge NW', 'Wooden Bridge NC', 'Wooden Bridge NE']
|
||||
]
|
||||
),
|
||||
(Op, DW, Hz, None, PL, 1): (
|
||||
[
|
||||
['Skull Woods EN'],
|
||||
['East Dark Death Mountain EN'],
|
||||
['Dark Chapel EC'],
|
||||
['Dark Graveyard EC'],
|
||||
['Village of Outcasts ES'],
|
||||
['Pyramid ES'],
|
||||
['Frog ES'],
|
||||
['Big Bomb Shop ES'],
|
||||
['Stumpy Approach EC'],
|
||||
['Swamp EC'],
|
||||
['Dark South Pass ES'],
|
||||
['West Dark Death Mountain EN'],
|
||||
['West Dark Death Mountain ES']
|
||||
],
|
||||
[
|
||||
['Dark Lumberjack WN'],
|
||||
['Turtle Rock WN'],
|
||||
['Dark Graveyard WC'],
|
||||
['Qirn Jump WC'],
|
||||
['Hammer Pegs WS'],
|
||||
['Dark Dunes WN'],
|
||||
['Stumpy WS'],
|
||||
['Hammer Bridge WS'],
|
||||
['Dark C Whirlpool WC'],
|
||||
['Dark South Pass WC'],
|
||||
['Ice Lake WS'],
|
||||
['East Dark Death Mountain WN'],
|
||||
['East Dark Death Mountain WS']
|
||||
]
|
||||
),
|
||||
(Op, DW, Vt, None, PL, 1): (
|
||||
[
|
||||
['Dark Lumberjack SW'],
|
||||
['Bumper Cave SE'],
|
||||
['Skull Woods SE'],
|
||||
['Catfish SE'],
|
||||
['Dark Fortune SC'],
|
||||
['Broken Bridge SW'],
|
||||
['Village of Outcasts SE'],
|
||||
['Pyramid SW'],
|
||||
['Pyramid SE'],
|
||||
['Dark Dunes SC'],
|
||||
['Palace of Darkness SW'],
|
||||
['Palace of Darkness SE'],
|
||||
['Dark Bonk Rocks SW'],
|
||||
['Big Bomb Shop SC'],
|
||||
['Hammer Bridge SC'],
|
||||
['Dark C Whirlpool SC'],
|
||||
['Hype Cave SC']
|
||||
],
|
||||
[
|
||||
['Bumper Cave NW'],
|
||||
['Outcast Pond NE'],
|
||||
['Dark Fortune NE'],
|
||||
['Catfish Approach NE'],
|
||||
['Village of Outcasts NE'],
|
||||
['Dark Dunes NW'],
|
||||
['Frog NE'],
|
||||
['Dark Bonk Rocks NW'],
|
||||
['Big Bomb Shop NE'],
|
||||
['Hammer Bridge NC'],
|
||||
['Dark Tree Line NW'],
|
||||
['Palace of Darkness Nook NE'],
|
||||
['Dark C Whirlpool NW'],
|
||||
['Hype Cave NC'],
|
||||
['Ice Lake NW'],
|
||||
['Swamp NC'],
|
||||
['Dark South Pass NC']
|
||||
]
|
||||
),
|
||||
(Op, DW, Hz, None, NP, 1): (
|
||||
[ ],
|
||||
[ ]
|
||||
),
|
||||
(Op, DW, Hz, None, PL, 2): (
|
||||
[
|
||||
['Dark Fortune EN', 'Dark Fortune ES'],
|
||||
['Outcast Pond EN', 'Outcast Pond ES'],
|
||||
['Swamp Nook EC', 'Swamp Nook ES'],
|
||||
['Dark Witch EN', 'Dark Witch EC'],
|
||||
['Ice Lake EC', 'Ice Lake ES'],
|
||||
['Hammer Bridge EN', 'Hammer Bridge EC']
|
||||
],
|
||||
[
|
||||
['Outcast Pond WN', 'Outcast Pond WS'],
|
||||
['Dark Chapel WN', 'Dark Chapel WS'],
|
||||
['Swamp WC', 'Swamp WS'],
|
||||
['Catfish Approach WN', 'Catfish Approach WC'],
|
||||
['Bomber Corner WC', 'Bomber Corner WS'],
|
||||
['Dark Tree Line WN', 'Dark Tree Line WC']
|
||||
]
|
||||
),
|
||||
(Op, DW, Vt, None, NP, 1): (
|
||||
[ ],
|
||||
[ ]
|
||||
),
|
||||
(Op, DW, Hz, None, NP, 2): (
|
||||
[
|
||||
['Dig Game EC', 'Dig Game ES']
|
||||
],
|
||||
[
|
||||
['Frog WC', 'Frog WS']
|
||||
]
|
||||
),
|
||||
(Op, DW, Vt, None, PL, 2): (
|
||||
[
|
||||
['Skull Woods SW', 'Skull Woods SC'],
|
||||
['Skull Woods Pass SW', 'Skull Woods Pass SE'],
|
||||
['Outcast Pond SW', 'Outcast Pond SE'],
|
||||
['Stumpy SW', 'Stumpy SC'],
|
||||
['Dark Tree Line SC', 'Dark Tree Line SE'],
|
||||
['Shopping Mall SW', 'Shopping Mall SE']
|
||||
],
|
||||
[
|
||||
['Skull Woods Pass NW', 'Skull Woods Pass NE'],
|
||||
['Village of Outcasts NW', 'Village of Outcasts NC'],
|
||||
['Shield Shop NW', 'Shield Shop NE'],
|
||||
['Stumpy Approach NW', 'Stumpy Approach NC'],
|
||||
['Ice Lake NC', 'Ice Lake NE'],
|
||||
['Bomber Corner NW', 'Bomber Corner NE']
|
||||
]
|
||||
),
|
||||
(Op, DW, Hz, None, PL, 3): (
|
||||
[
|
||||
['Dark Bonk Rocks EN', 'Dark Bonk Rocks EC', 'Dark Bonk Rocks ES'],
|
||||
['Qirn Jump EN', 'Qirn Jump EC', 'Qirn Jump ES'],
|
||||
['Dark C Whirlpool EN', 'Dark C Whirlpool EC', 'Dark C Whirlpool ES']
|
||||
],
|
||||
[
|
||||
['Big Bomb Shop WN', 'Big Bomb Shop WC', 'Big Bomb Shop WS'],
|
||||
['Dark Witch WN', 'Dark Witch WC', 'Dark Witch WS'],
|
||||
['Hype Cave WN', 'Hype Cave WC', 'Hype Cave WS']
|
||||
]
|
||||
),
|
||||
(Op, DW, Vt, None, PL, 3): (
|
||||
[
|
||||
['Qirn Jump SW', 'Qirn Jump SC', 'Qirn Jump SE']
|
||||
],
|
||||
[
|
||||
['Broken Bridge NW', 'Broken Bridge NC', 'Broken Bridge NE']
|
||||
]
|
||||
)
|
||||
}
|
||||
|
||||
OWTileRegions = bidict({
|
||||
'Lost Woods West Area': 0x00,
|
||||
'Lost Woods East Area': 0x00,
|
||||
|
||||
@@ -3,7 +3,7 @@ from collections import OrderedDict, defaultdict
|
||||
from DungeonGenerator import GenerationException
|
||||
from BaseClasses import OWEdge, WorldType, RegionType, Direction, Terrain, PolSlot, Entrance
|
||||
from Regions import mark_dark_world_regions, mark_light_world_regions
|
||||
from OWEdges import OWTileRegions, OWEdgeGroups, OWExitTypes, OpenStd, parallel_links, IsParallel
|
||||
from OWEdges import OWTileRegions, OWEdgeGroups, OWEdgeGroupsTerrain, OWExitTypes, OpenStd, parallel_links, IsParallel
|
||||
from Utils import bidict
|
||||
|
||||
version_number = '0.2.10.1'
|
||||
@@ -106,7 +106,7 @@ def link_overworld(world, player):
|
||||
return new_groups
|
||||
|
||||
tile_groups = define_tile_groups(world, player, False)
|
||||
trimmed_groups = copy.deepcopy(OWEdgeGroups)
|
||||
trimmed_groups = copy.deepcopy(OWEdgeGroupsTerrain if world.owTerrain[player] else OWEdgeGroups)
|
||||
swapped_edges = list()
|
||||
|
||||
# restructure Maze Race/Suburb/Frog/Dig Game manually due to NP/P relationship
|
||||
@@ -639,9 +639,9 @@ def shuffle_tiles(world, groups, result_list, do_grouped, player):
|
||||
if not world.owKeepSimilar[player]:
|
||||
parity[1] += 2*parity[2]
|
||||
parity[2] = 0
|
||||
# if crossed terrain:
|
||||
# parity[1] += parity[3]
|
||||
# parity[3] = 0
|
||||
if world.owTerrain[player]:
|
||||
parity[1] += parity[3]
|
||||
parity[3] = 0
|
||||
parity[4] %= 2 # actual parity
|
||||
if (world.owCrossed[player] == 'none' or do_grouped) and parity[:5] != [0, 0, 0, 0, 0]:
|
||||
attempts -= 1
|
||||
@@ -775,6 +775,8 @@ def reorganize_groups(world, groups, player):
|
||||
new_group = list(group)
|
||||
if world.mode[player] != "standard":
|
||||
new_group[0] = None
|
||||
if world.owTerrain[player]:
|
||||
new_group[3] = None
|
||||
if world.owShuffle[player] != 'parallel':
|
||||
new_group[4] = None
|
||||
if not world.owKeepSimilar[player]:
|
||||
|
||||
@@ -64,6 +64,10 @@ OW Transitions are shuffled, but both worlds will have a matching layout.
|
||||
|
||||
OW Transitions are shuffled within each world separately.
|
||||
|
||||
## Free Terrain (--ow_terrain)
|
||||
|
||||
With OW Layout Shuffle, this allows land and water edges to be connected.
|
||||
|
||||
## Crossed Options (--ow_crossed)
|
||||
|
||||
This allows OW connections to be shuffled cross-world.
|
||||
@@ -102,7 +106,7 @@ Same as Limited, except that there is no limit to the number of cross-world conn
|
||||
|
||||
## Keep Similar Edges Together (--ow_keepsimilar)
|
||||
|
||||
This keeps similar edge transitions together. ie. The 2 west edges of Potion Shop will be paired to another set of two similar edges
|
||||
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.
|
||||
|
||||
Note: This affects OW Layout Shuffle mostly, but also affects Limited and Chaos modes in Crossed OW.
|
||||
|
||||
|
||||
2
Rom.py
2
Rom.py
@@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127
|
||||
|
||||
|
||||
JAP10HASH = '03a63945398191337e896e5771f77173'
|
||||
RANDOMIZERBASEHASH = '0aa072c020b0c1167c3e618b571efbbe'
|
||||
RANDOMIZERBASEHASH = '4657087846e24d65cd69ff61241601fe'
|
||||
|
||||
|
||||
class JsonRom(object):
|
||||
|
||||
20
Rules.py
20
Rules.py
@@ -3,10 +3,11 @@ import logging
|
||||
from collections import deque
|
||||
|
||||
import OverworldGlitchRules
|
||||
from BaseClasses import CollectionState, RegionType, DoorType, Entrance, CrystalBarrier, KeyRuleType, LocationType
|
||||
from BaseClasses import CollectionState, RegionType, DoorType, Entrance, CrystalBarrier, KeyRuleType, LocationType, Terrain
|
||||
from BaseClasses import PotFlags
|
||||
from Dungeons import dungeon_table
|
||||
from RoomData import DoorKind
|
||||
from OWEdges import OWExitTypes
|
||||
from OverworldGlitchRules import overworld_glitches_rules
|
||||
|
||||
|
||||
@@ -25,6 +26,8 @@ def set_rules(world, player):
|
||||
|
||||
ow_bunny_rules(world, player)
|
||||
|
||||
ow_terrain_rules(world, player)
|
||||
|
||||
if world.mode[player] == 'standard':
|
||||
if not world.is_copied_world:
|
||||
standard_rules(world, player)
|
||||
@@ -1474,6 +1477,21 @@ def ow_bunny_rules(world, player):
|
||||
add_bunny_rule(world.get_entrance('Bomber Corner Waterfall Water Drop', player), player)
|
||||
|
||||
|
||||
def ow_terrain_rules(world, player):
|
||||
for edge in world.owedges:
|
||||
if edge.player == player and edge.dest and edge.dest.terrain == Terrain.Water:
|
||||
ent = world.get_entrance(edge.name, player)
|
||||
if edge.terrain == Terrain.Land:
|
||||
set_rule(ent, lambda state: state.has('Flippers', player))
|
||||
if ent.parent_region.is_light_world == (world.mode[player] != 'inverted') and ent.connected_region.is_dark_world == (world.mode[player] != 'inverted'):
|
||||
add_rule(ent, lambda state: state.has_Pearl(player))
|
||||
|
||||
for whirlpool_name in OWExitTypes['Whirlpool']:
|
||||
ent = world.get_entrance(whirlpool_name, player)
|
||||
if ent.parent_region.is_light_world == (world.mode[player] != 'inverted') and ent.connected_region.is_dark_world == (world.mode[player] != 'inverted'):
|
||||
add_rule(ent, lambda state: state.has_Pearl(player))
|
||||
|
||||
|
||||
def no_glitches_rules(world, player):
|
||||
# todo: move some dungeon rules to no glictes logic - see these for examples
|
||||
# add_rule(world.get_entrance('Ganons Tower (Hookshot Room)', player), lambda state: state.has('Hookshot', player) or state.has_Boots(player))
|
||||
|
||||
268
asm/owrando.asm
268
asm/owrando.asm
@@ -1,3 +1,10 @@
|
||||
; Free RAM notes
|
||||
; $06F8-$06F9: Used to store edge table addresses
|
||||
; $06FA-$06FB: Used to store target edge IDs
|
||||
; $06FC-$06FD: Used for custom walk destination after transitions
|
||||
; $0703: Used to flag forced transitions
|
||||
; $0704-$0705: Used to store terrain type at the start of a transition
|
||||
|
||||
org $aa8000 ;150000
|
||||
db $4f, $52 ;OR
|
||||
OWMode:
|
||||
@@ -38,6 +45,9 @@ Overworld_LoadSpecialOverworld_RoomId:
|
||||
org $04E8B4
|
||||
Overworld_LoadSpecialOverworld:
|
||||
|
||||
org $07982A
|
||||
Link_ResetSwimmingState:
|
||||
|
||||
|
||||
; mirror hooks
|
||||
org $02FBAB
|
||||
@@ -54,6 +64,8 @@ JSL OWMirrorSpriteOnMap : BRA + : NOP #6 : +
|
||||
; whirlpool shuffle cross world change
|
||||
org $02b3bd
|
||||
jsl OWWhirlpoolUpdate ;JSL $02EA6C
|
||||
org $02B44E
|
||||
jsl OWWhirlpoolEnd ; STZ.b $11 : STZ.b $B0
|
||||
|
||||
; flute menu cancel
|
||||
org $0ab7af ;LDA $F2 : ORA $F0 : AND #$C0
|
||||
@@ -172,6 +184,8 @@ OWCameraRangeIndex:
|
||||
db 2, 2, 0, 0 ; For OWCameraRange
|
||||
OWCameraRange:
|
||||
dw $011E, $0100 ; Length of the range the camera can move on small screens
|
||||
OWAutoWalk:
|
||||
db $04, $08, $01, $02
|
||||
|
||||
DivideByTwoPreserveSign:
|
||||
{
|
||||
@@ -201,13 +215,21 @@ OWMapWorldCheck16:
|
||||
OWWhirlpoolUpdate:
|
||||
{
|
||||
jsl $02ea6c ; what we wrote over
|
||||
lda.l OWFlags : and #$01 : bne +
|
||||
lda.l OWMode+1 : and #$02 : beq .return
|
||||
+ ldx $8a : jsr OWWorldUpdate
|
||||
.return
|
||||
ldx $8a : ldy #$03 : jsr OWWorldTerrainUpdate
|
||||
rtl
|
||||
}
|
||||
|
||||
OWWhirlpoolEnd:
|
||||
{
|
||||
STZ.b $B0 ; what we wrote over
|
||||
LDA.w $0703 : BEQ .normal
|
||||
LDA.b #$3C : STA.w $012E ; play error sound before forced transition
|
||||
RTL
|
||||
.normal
|
||||
STZ.b $11 ; end whirlpool transition
|
||||
RTL
|
||||
}
|
||||
|
||||
OWMirrorSpriteOnMap:
|
||||
{
|
||||
lda.w $1ac0,x : bit.b #$f0 : beq .continue
|
||||
@@ -525,7 +547,16 @@ OWDetectSpecialTransition:
|
||||
{
|
||||
STZ.w $06FC
|
||||
LDA.l OWMode : BEQ .normal
|
||||
LDA.l OWSpecialDestIndex,X : BIT.w #$0080 : BNE .special
|
||||
TXA : AND.w #$0002 : LSR
|
||||
STA.w $0704
|
||||
LDA.l OWSpecialDestIndex,X : BIT.w #$0080 : BEQ .switch_to_edge
|
||||
AND.w #$0003 : TAY : ASL : TAX
|
||||
.normal
|
||||
JSR OWLoadSpecialArea
|
||||
.return
|
||||
RTL
|
||||
|
||||
.switch_to_edge
|
||||
STA.w $06FA
|
||||
LDA.l OWEdgeDataOffset,X : STA.w $06F8
|
||||
PLA : SEP #$30 : PLA ; delete 3 bytes from stack
|
||||
@@ -552,12 +583,6 @@ OWDetectSpecialTransition:
|
||||
LDX.b $02
|
||||
LDA.b $84
|
||||
JML OverworldHandleTransitions_SpecialTrigger+6
|
||||
.special
|
||||
AND.w #$0003 : TAY : ASL : TAX
|
||||
.normal
|
||||
JSR OWLoadSpecialArea
|
||||
.return
|
||||
RTL
|
||||
}
|
||||
OWEdgeTransition:
|
||||
{
|
||||
@@ -577,9 +602,16 @@ OWEdgeTransition:
|
||||
}
|
||||
OWSpecialExit:
|
||||
{
|
||||
LDA.l OWMode+1 : AND.b #!FLAG_OW_CROSSED : BEQ .return
|
||||
JSR OWWorldUpdate
|
||||
.return
|
||||
PHY
|
||||
LDY.b #$00
|
||||
LDA.w $0418 : LSR : BNE +
|
||||
LDY.w $0704 : BRA ++
|
||||
+
|
||||
LDA.w $0704 : BNE ++
|
||||
LDY.b #$02
|
||||
++
|
||||
JSR OWWorldTerrainUpdate
|
||||
PLY
|
||||
LDA.l $7EFD40,X ; what we wrote over
|
||||
RTL
|
||||
}
|
||||
@@ -611,7 +643,7 @@ OWShuffle:
|
||||
|
||||
.nextTransition
|
||||
pha
|
||||
jsr OWSearchTransition : bcs .newDestination
|
||||
jsr OWSearchTransition_entry : bcs .newDestination
|
||||
txa : !add #$0010 : tax
|
||||
pla : dec : bne .nextTransition : bra .noTransition
|
||||
|
||||
@@ -627,6 +659,10 @@ OWShuffle:
|
||||
}
|
||||
OWSearchTransition:
|
||||
{
|
||||
.exitloop ; moved here because of branch distance
|
||||
clc : rts
|
||||
|
||||
.entry
|
||||
;A-16 XY-16
|
||||
lda $418 : bne + ;north
|
||||
lda.l OWNorthEdges,x : dec
|
||||
@@ -634,6 +670,7 @@ OWSearchTransition:
|
||||
lda.l OWNorthEdges+2,x : cmp $22 : !blt .exitloop
|
||||
;MATCH
|
||||
lda.l OWNorthEdges+14,x : tay ;y = record id of dest
|
||||
lda.l OWNorthEdges+12,x ;a = current terrain
|
||||
ldx.w #OWSouthEdges ;x = address of table
|
||||
bra .matchfound
|
||||
+ dec : bne + ;south
|
||||
@@ -642,6 +679,7 @@ OWSearchTransition:
|
||||
lda.l OWSouthEdges+2,x : cmp $22 : !blt .exitloop
|
||||
;MATCH
|
||||
lda.l OWSouthEdges+14,x : tay ;y = record id of dest
|
||||
lda.l OWSouthEdges+12,x ;a = current terrain
|
||||
ldx.w #OWNorthEdges ;x = address of table
|
||||
bra .matchfound
|
||||
+ dec : bne + ; west
|
||||
@@ -650,6 +688,7 @@ OWSearchTransition:
|
||||
lda.l OWWestEdges+2,x : cmp $20 : !blt .exitloop
|
||||
;MATCH
|
||||
lda.l OWWestEdges+14,x : tay ;y = record id of dest
|
||||
lda.l OWWestEdges+12,x ;a = current terrain
|
||||
ldx.w #OWEastEdges ;x = address of table
|
||||
bra .matchfound
|
||||
+ lda.l OWEastEdges,x : dec ;east
|
||||
@@ -657,15 +696,13 @@ OWSearchTransition:
|
||||
lda.l OWEastEdges+2,x : cmp $20 : !blt .exitloop
|
||||
;MATCH
|
||||
lda.l OWEastEdges+14,x : tay ;y = record id of dest
|
||||
lda.l OWEastEdges+12,x ;a = current terrain
|
||||
ldx.w #OWWestEdges ;x = address of table
|
||||
|
||||
.matchfound
|
||||
stx $06f8 : sty $06fa : sec : rts
|
||||
stx $06f8 : sty $06fa : sta $0704 : sec : rts
|
||||
plx : pla : pea $0001 : phx
|
||||
sec : rts
|
||||
|
||||
.exitloop
|
||||
clc : rts
|
||||
}
|
||||
OWNewDestination:
|
||||
{
|
||||
@@ -698,6 +735,16 @@ OWNewDestination:
|
||||
|
||||
LDA.w $000F,X : AND.w #$00FF : STA.w $06FC ; position to walk to after transition (if non-zero)
|
||||
|
||||
LDY.w #$0000
|
||||
LDA.w $000C,X : AND.w #$0001 : BEQ + ; check if going to water transition
|
||||
LDA.w $0704 : AND.w #$0001 : BNE ++ ; check if coming from water transition
|
||||
INY : BRA ++
|
||||
+
|
||||
LDA.w $0704 : BEQ ++ ; check if coming from water transition
|
||||
LDY.w #$0002
|
||||
++
|
||||
STY.b $08
|
||||
|
||||
pla : pla : sep #$10 : ldy $418
|
||||
ldx OWCoordIndex,y : lda $20,x : and #$fe00 : pha
|
||||
lda $20,x : and #$01ff : pha ;s1 = relative cur, s3 = ow cur
|
||||
@@ -743,27 +790,37 @@ OWNewDestination:
|
||||
|
||||
sep #$30 : lda $04 : and #$3f : !add OWOppSlotOffset,y : asl : sta $700
|
||||
|
||||
; crossed OW shuffle
|
||||
lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .return
|
||||
ldx $05 : jsr OWWorldUpdate
|
||||
; crossed OW shuffle and terrain
|
||||
ldx $05 : ldy $08 : jsr OWWorldTerrainUpdate
|
||||
|
||||
.return
|
||||
lda $05 : sta $8a
|
||||
rep #$30 : rts
|
||||
}
|
||||
OWLoadSpecialArea:
|
||||
{
|
||||
LDA.l Overworld_LoadSpecialOverworld_RoomId,X : STA.b $A0
|
||||
JSL Overworld_LoadSpecialOverworld
|
||||
LDA.l OWMode+1 : AND.b #!FLAG_OW_CROSSED : BEQ .return
|
||||
TYX : LDA.l OWSpecialDestSlot,X : TAX
|
||||
JSR OWWorldUpdate
|
||||
JSL Overworld_LoadSpecialOverworld ; sets M and X flags
|
||||
TYX
|
||||
LDY.b #$00
|
||||
CPX.b #$01 : BNE + ; check if going to water transition
|
||||
LDA.w $0704 : BNE ++ ; check if coming from water transition
|
||||
INY : BRA ++
|
||||
+
|
||||
LDA.w $0704 : BEQ ++ ; check if coming from water transition
|
||||
LDY.b #$02
|
||||
++
|
||||
LDA.l OWSpecialDestSlot,X : TAX
|
||||
JSR OWWorldTerrainUpdate
|
||||
.return
|
||||
RTS
|
||||
}
|
||||
OWWorldUpdate: ; x = owid of destination screen
|
||||
OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water, 2 for water to land, 3 for whirlpools and 0 else
|
||||
{
|
||||
lda.l OWTileWorldAssoc,x : cmp.l CurrentWorld : beq .return
|
||||
LDA.l OWMode+1 : AND.b #!FLAG_OW_CROSSED : BEQ .not_crossed
|
||||
LDA.l OWTileWorldAssoc,x : CMP.l CurrentWorld : BNE .crossed
|
||||
.not_crossed
|
||||
JMP .normal
|
||||
.crossed
|
||||
sta.l CurrentWorld ; change world
|
||||
|
||||
; moving mirror portal off screen when in DW
|
||||
@@ -781,19 +838,87 @@ OWWorldUpdate: ; x = owid of destination screen
|
||||
lda CurrentWorld : and.b #$40 : bra +
|
||||
.inverted lda CurrentWorld : and.b #$40 : eor #$40
|
||||
+ cmp #$40 : bne .nobunny
|
||||
; turn into bunny
|
||||
lda $5d : cmp #$04 : beq + ; if swimming, continue
|
||||
lda #$17 : sta $5d
|
||||
+ lda #$01 : sta $02e0 : sta $56
|
||||
bra .return
|
||||
|
||||
LDA.w $0703 : BEQ + ; check if forced transition
|
||||
CPY.b #$03 : BEQ .end_forced_whirlpool
|
||||
LDA.b #$17 : STA.b $5D
|
||||
LDA.b #$01 : STA.w $02E0 : STA.b $56
|
||||
LDA.w $0703 : BRA .end_forced_edge
|
||||
+
|
||||
CPY.b #$01 : BEQ .auto ; check if going from land to water
|
||||
CPY.b #$02 : BEQ .to_bunny_reset_swim ; bunny state if swimming to land
|
||||
LDA.b $5D : CMP.b #$04 : BNE .to_bunny ; check if swimming
|
||||
.auto
|
||||
PHX
|
||||
LDA.b #$01
|
||||
LDX.b $5D : CPX.b #$04 : BNE +
|
||||
INC
|
||||
+
|
||||
STA.w $0703
|
||||
CPY.b #$03 : BEQ .whirlpool
|
||||
LDA.b #$01 : STA.w $0345
|
||||
LDX.w $0418
|
||||
LDA.l OWAutoWalk,X : STA.b $49
|
||||
STZ.b $5D
|
||||
PLX
|
||||
BRA .to_pseudo_bunny
|
||||
.whirlpool
|
||||
PLX : RTS
|
||||
.to_bunny_reset_swim
|
||||
JSL Link_ResetSwimmingState
|
||||
STZ.w $0345
|
||||
.to_bunny
|
||||
LDA.b #$17 : STA.b $5D
|
||||
.to_pseudo_bunny
|
||||
LDA.b #$01 : STA.w $02E0 : STA.b $56
|
||||
RTS
|
||||
|
||||
.nobunny
|
||||
lda $5d : cmp #$17 : bne + ; retain current state unless bunny
|
||||
stz $5d
|
||||
+ stz $02e0 : stz $56
|
||||
|
||||
.normal
|
||||
LDA.w $0703 : BEQ .not_forced ; check if forced transition
|
||||
CPY.b #$03 : BEQ .end_forced_whirlpool
|
||||
.end_forced_edge
|
||||
STZ.b $49 : STZ.w $0345
|
||||
.end_forced_whirlpool
|
||||
STZ.w $0703
|
||||
CMP.b #$02 : BNE +
|
||||
DEC : STA.w $0345
|
||||
LDA.b #$04 : BRA .set_state
|
||||
+
|
||||
CMP.b #$03 : BNE ++
|
||||
LDA.b #$17
|
||||
.set_state
|
||||
STA.b $5D
|
||||
++
|
||||
RTS
|
||||
.not_forced
|
||||
CPY.b #$02 : BNE + ; check if going from water to land
|
||||
JSL Link_ResetSwimmingState
|
||||
STZ.w $0345
|
||||
LDA.b $5D : CMP.b #$04 : BNE + ; check if swimming
|
||||
STZ.b $5D
|
||||
+
|
||||
CPY.b #$01 : BNE .return ; check if going from land to water
|
||||
LDA.b #$01 : STA.w $0345
|
||||
LDA.b $5D : CMP.b #$04 : BEQ .return ; check if swimming
|
||||
LDA.l FlippersEquipment : BEQ .no_flippers ; check if flippers obtained
|
||||
LDA.b $5D : CMP.b #$17 : BEQ .no_flippers ; check if bunny
|
||||
LDA.b #$04 : STA.b $5D : RTS
|
||||
.no_flippers
|
||||
PHX
|
||||
INC : STA.w $0703
|
||||
LDX.w $0418
|
||||
LDA.l OWAutoWalk,X : STA.b $49
|
||||
PLX
|
||||
LDA.b $5D : CMP.b #$17 : BNE .return ; check if bunny
|
||||
LDA.b #$03 : STA.w $0703
|
||||
STZ.b $5D
|
||||
.return
|
||||
rts
|
||||
RTS
|
||||
}
|
||||
OWAdjustExitPosition:
|
||||
{
|
||||
@@ -807,6 +932,9 @@ OWAdjustExitPosition:
|
||||
LDA.b #$3B : STA.w $061E
|
||||
INC.b $23 : INC.w $061D : INC.w $061F
|
||||
.normal
|
||||
LDA.w $0703 : BEQ +
|
||||
LDA.b #$3C : STA.w $012E ; play error sound before forced transition
|
||||
+
|
||||
INC.b $11 : STZ.b $B0 ; what we wrote over
|
||||
RTL
|
||||
}
|
||||
@@ -978,7 +1106,7 @@ db $80, $80, $81
|
||||
|
||||
org $aaa800 ;PC 152800
|
||||
OWNorthEdges:
|
||||
; Min Max Width Mid OW Slot/OWID VRAM *FREE* Dest Index
|
||||
; Min Max Width Mid OW Slot/OWID VRAM Terrain Dest Index
|
||||
dw $00a0, $00a0, $0000, $00a0, $0000, $0000, $0000, $B040 ;Lost Woods (exit only)
|
||||
dw $0458, $0540, $00e8, $04cc, $0a0a, $0000, $0000, $0000
|
||||
dw $0f38, $0f60, $0028, $0f4c, $0f0f, $0000, $0000, $2041 ;Waterfall (exit only)
|
||||
@@ -993,7 +1121,7 @@ dw $02e8, $0348, $0060, $0318, $1819, $0000, $0000, $0008
|
||||
dw $0478, $04d0, $0058, $04a4, $1a1a, $0000, $0000, $0009
|
||||
dw $0510, $0538, $0028, $0524, $1a1a, $0000, $0000, $000a
|
||||
dw $0a48, $0af0, $00a8, $0a9c, $1d1d, $0000, $0000, $000b
|
||||
dw $0b28, $0b38, $0010, $0b30, $1d1d, $0000, $0000, $000c
|
||||
dw $0b28, $0b38, $0010, $0b30, $1d1d, $0000, $0001, $000c
|
||||
dw $0b70, $0ba0, $0030, $0b88, $1d1d, $0000, $0000, $000d
|
||||
dw $0a40, $0b10, $00d0, $0aa8, $2525, $0000, $0000, $000e
|
||||
dw $0350, $0390, $0040, $0370, $2929, $0000, $0000, $000f
|
||||
@@ -1007,11 +1135,11 @@ dw $04d8, $04f8, $0020, $04e8, $3232, $0000, $0000, $0016
|
||||
dw $0688, $06b0, $0028, $069c, $3333, $0000, $0000, $0017
|
||||
dw $08d0, $08f0, $0020, $08e0, $3434, $0000, $0000, $0018
|
||||
dw $0a80, $0b40, $00c0, $0ae0, $3535, $0000, $0000, $0019
|
||||
dw $0d38, $0d58, $0020, $0d48, $3536, $0000, $0000, $001a
|
||||
dw $0d38, $0d58, $0020, $0d48, $3536, $0000, $0001, $001a
|
||||
dw $0d90, $0da0, $0010, $0d98, $3536, $0000, $0000, $001b
|
||||
dw $06a0, $07b0, $0110, $0728, $3b3b, $0000, $0000, $001c
|
||||
dw $0830, $09b0, $0180, $08f0, $3c3c, $0000, $0000, $001d
|
||||
dw $0e78, $0e88, $0010, $0e80, $3f3f, $0000, $0000, $001e
|
||||
dw $0e78, $0e88, $0010, $0e80, $3f3f, $0000, $0001, $001e
|
||||
dw $0ee0, $0fc0, $00e0, $0f50, $3f3f, $0000, $0000, $001f
|
||||
dw $0458, $0540, $00e8, $04cc, $4a4a, $0000, $0000, $0020
|
||||
dw $0058, $0058, $0000, $0058, $5050, $0000, $0000, $0021
|
||||
@@ -1025,7 +1153,7 @@ dw $02e8, $0348, $0060, $0318, $5859, $0000, $0000, $0028
|
||||
dw $0478, $04d0, $0058, $04a4, $5a5a, $0000, $0000, $0029
|
||||
dw $0510, $0538, $0028, $0524, $5a5a, $0000, $0000, $002a
|
||||
dw $0a48, $0af0, $00a8, $0a9c, $5d5d, $0000, $0000, $002b
|
||||
dw $0b28, $0b38, $0010, $0b30, $5d5d, $0000, $0000, $002c
|
||||
dw $0b28, $0b38, $0010, $0b30, $5d5d, $0000, $0001, $002c
|
||||
dw $0b70, $0ba0, $0030, $0b88, $5d5d, $0000, $0000, $002d
|
||||
dw $0a40, $0b10, $00d0, $0aa8, $6565, $0000, $0000, $002e
|
||||
dw $0350, $0390, $0040, $0370, $6969, $0000, $0000, $002f
|
||||
@@ -1039,11 +1167,11 @@ dw $04d8, $04f8, $0020, $04e8, $7272, $0000, $0000, $0036
|
||||
dw $0688, $06b0, $0028, $069c, $7373, $0000, $0000, $0037
|
||||
dw $08d0, $08f0, $0020, $08e0, $7474, $0000, $0000, $0038
|
||||
dw $0a80, $0b40, $00c0, $0ae0, $7575, $0000, $0000, $0039
|
||||
dw $0d38, $0d58, $0020, $0d48, $7576, $0000, $0000, $003a
|
||||
dw $0d38, $0d58, $0020, $0d48, $7576, $0000, $0001, $003a
|
||||
dw $0d90, $0da0, $0010, $0d98, $7576, $0000, $0000, $003b
|
||||
dw $06a0, $07b0, $0110, $0728, $7b7b, $0000, $0000, $003c
|
||||
dw $0830, $09b0, $0180, $08f0, $7c7c, $0000, $0000, $003d
|
||||
dw $0e78, $0e88, $0010, $0e80, $7f7f, $0000, $0000, $003e
|
||||
dw $0e78, $0e88, $0010, $0e80, $7f7f, $0000, $0001, $003e
|
||||
dw $0ee0, $0fc0, $00e0, $0f50, $7f7f, $0000, $0000, $003f
|
||||
OWSouthEdges:
|
||||
dw $0458, $0540, $00e8, $04cc, $0202, $0000, $0000, $0001
|
||||
@@ -1058,7 +1186,7 @@ dw $02e8, $0348, $0060, $0318, $1111, $0000, $0000, $000a
|
||||
dw $0478, $04d0, $0058, $04a4, $1212, $0000, $0000, $000b
|
||||
dw $0510, $0538, $0028, $0524, $1212, $0000, $0000, $000c
|
||||
dw $0a48, $0af0, $00a8, $0a9c, $1515, $0000, $0000, $000d
|
||||
dw $0b28, $0b38, $0010, $0b30, $1515, $0000, $0000, $000e
|
||||
dw $0b28, $0b38, $0010, $0b30, $1515, $0000, $0001, $000e
|
||||
dw $0b70, $0ba0, $0030, $0b88, $1515, $0000, $0000, $000f
|
||||
dw $0a40, $0b10, $00d0, $0aa8, $1d1d, $0000, $0000, $0010
|
||||
dw $0350, $0390, $0040, $0370, $1821, $0000, $0000, $0011
|
||||
@@ -1072,11 +1200,11 @@ dw $04d8, $04f8, $0020, $04e8, $2a2a, $0000, $0000, $0018
|
||||
dw $0688, $06b0, $0028, $069c, $2b2b, $0000, $0000, $0019
|
||||
dw $08d0, $08f0, $0020, $08e0, $2c2c, $0000, $0000, $001a
|
||||
dw $0a80, $0b40, $00c0, $0ae0, $2d2d, $0000, $0000, $001b
|
||||
dw $0d38, $0d58, $0020, $0d48, $2e2e, $0000, $0000, $001c
|
||||
dw $0d38, $0d58, $0020, $0d48, $2e2e, $0000, $0001, $001c
|
||||
dw $0d90, $0da0, $0010, $0d98, $2e2e, $0000, $0000, $001d
|
||||
dw $06a0, $07b0, $0110, $0728, $3333, $0000, $0000, $001e
|
||||
dw $0830, $09b0, $0180, $08f0, $3434, $0000, $0000, $001f
|
||||
dw $0e78, $0e88, $0010, $0e80, $3737, $0000, $0000, $0020
|
||||
dw $0e78, $0e88, $0010, $0e80, $3737, $0000, $0001, $0020
|
||||
dw $0ee0, $0fc0, $00e0, $0f50, $3737, $0000, $0000, $0021
|
||||
dw $0458, $0540, $00e8, $04cc, $4242, $0000, $0000, $0022
|
||||
dw $0058, $0058, $0000, $0058, $4048, $0000, $0000, $0023
|
||||
@@ -1090,7 +1218,7 @@ dw $02e8, $0348, $0060, $0318, $5151, $0000, $0000, $002a
|
||||
dw $0478, $04d0, $0058, $04a4, $5252, $0000, $0000, $002b
|
||||
dw $0510, $0538, $0028, $0524, $5252, $0000, $0000, $002c
|
||||
dw $0a48, $0af0, $00a8, $0a9c, $5555, $0000, $0000, $002d
|
||||
dw $0b28, $0b38, $0010, $0b30, $5555, $0000, $0000, $002e
|
||||
dw $0b28, $0b38, $0010, $0b30, $5555, $0000, $0001, $002e
|
||||
dw $0b70, $0ba0, $0030, $0b88, $5555, $0000, $0000, $002f
|
||||
dw $0a40, $0b10, $00d0, $0aa8, $5d5d, $0000, $0000, $0030
|
||||
dw $0350, $0390, $0040, $0370, $5861, $0000, $0000, $0031
|
||||
@@ -1104,11 +1232,11 @@ dw $04d8, $04f8, $0020, $04e8, $6a6a, $0000, $0000, $0038
|
||||
dw $0688, $06b0, $0028, $069c, $6b6b, $0000, $0000, $0039
|
||||
dw $08d0, $08f0, $0020, $08e0, $6c6c, $0000, $0000, $003a
|
||||
dw $0a80, $0b40, $00c0, $0ae0, $6d6d, $0000, $0000, $003b
|
||||
dw $0d38, $0d58, $0020, $0d48, $6e6e, $0000, $0000, $003c
|
||||
dw $0d38, $0d58, $0020, $0d48, $6e6e, $0000, $0001, $003c
|
||||
dw $0d90, $0da0, $0010, $0d98, $6e6e, $0000, $0000, $003d
|
||||
dw $06a0, $07b0, $0110, $0728, $7373, $0000, $0000, $003e
|
||||
dw $0830, $09b0, $0180, $08f0, $7474, $0000, $0000, $003f
|
||||
dw $0e78, $0e88, $0010, $0e80, $7777, $0000, $0000, $0040
|
||||
dw $0e78, $0e88, $0010, $0e80, $7777, $0000, $0001, $0040
|
||||
dw $0ee0, $0fc0, $00e0, $0f50, $7777, $0000, $0000, $0041
|
||||
dw $0080, $0080, $0000, $0080, $8080, $0000, $0000, $0000 ;Pedestal (unused)
|
||||
dw $0288, $02c0, $0038, $02a4, $8189, $0000, $0000, $0002 ;Zora (unused)
|
||||
@@ -1123,10 +1251,10 @@ dw $0488, $0500, $0078, $04c4, $1313, $0000, $0000, $0006
|
||||
dw $0538, $05a8, $0070, $0570, $1313, $0000, $0000, $0007
|
||||
dw $0470, $05a8, $0138, $050c, $1414, $0000, $0000, $0008
|
||||
dw $0470, $0598, $0128, $0504, $1515, $0000, $0000, $0009
|
||||
dw $0480, $0488, $0008, $0484, $1616, $0000, $0000, $000a
|
||||
dw $0480, $0488, $0008, $0484, $1616, $0000, $0001, $000a
|
||||
dw $04b0, $0510, $0060, $04e0, $1616, $0000, $0000, $000b
|
||||
dw $0560, $0588, $0028, $0574, $1616, $0000, $0000, $000c
|
||||
dw $0450, $0458, $0008, $0454, $1717, $0000, $0000, $000d
|
||||
dw $0450, $0458, $0008, $0454, $1717, $0000, $0001, $000d
|
||||
dw $0480, $04a8, $0028, $0494, $1717, $0000, $0000, $000e
|
||||
dw $0718, $0738, $0020, $0728, $1b1b, $0000, $0000, $000f
|
||||
dw $0908, $0948, $0040, $0928, $2222, $0000, $0000, $0010
|
||||
@@ -1136,13 +1264,13 @@ dw $0b60, $0ba0, $0040, $0b80, $2a2a, $0000, $0000, $0013
|
||||
dw $0ab0, $0ad0, $0020, $0ac0, $2c2c, $0000, $0000, $0014
|
||||
dw $0af0, $0b40, $0050, $0b18, $2c2c, $0000, $0000, $0015
|
||||
dw $0b78, $0ba0, $0028, $0b8c, $2c2c, $0000, $0000, $0016
|
||||
dw $0b10, $0b28, $0018, $0b1c, $2d2d, $0000, $0000, $604a ;Stone Bridge (exit only)
|
||||
dw $0b10, $0b28, $0018, $0b1c, $2d2d, $0000, $0001, $604a ;Stone Bridge (exit only)
|
||||
dw $0b68, $0b98, $0030, $0b80, $2d2d, $0000, $0000, $0017
|
||||
dw $0a68, $0ab8, $0050, $0a90, $2e2e, $0000, $0000, $0018
|
||||
dw $0b00, $0b78, $0078, $0b3c, $2e2e, $0000, $0000, $0019
|
||||
dw $0b00, $0b78, $0078, $0b3c, $2e2e, $0000, $0001, $0019
|
||||
dw $0c50, $0db8, $0168, $0d04, $3333, $0000, $0000, $001a
|
||||
dw $0c78, $0ce3, $006b, $0cad, $3434, $0000, $0000, $001b
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $3434, $0000, $0000, $001c
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $3434, $0000, $0001, $001c
|
||||
dw $0d34, $0db8, $0084, $0d76, $3434, $0000, $0000, $001d
|
||||
dw $0ea8, $0f20, $0078, $0ee4, $3a3a, $0000, $0000, $001e
|
||||
dw $0f70, $0fa8, $0038, $0f8c, $3a3a, $0000, $0000, $001f
|
||||
@@ -1150,7 +1278,7 @@ dw $0f18, $0f18, $0000, $0f18, $3b3b, $0000, $0000, $0020
|
||||
dw $0fc8, $0fc8, $0000, $0fc8, $3b3b, $0000, $0000, $0021
|
||||
dw $0e28, $0fb8, $0190, $0ef0, $3c3c, $0000, $0000, $0022
|
||||
dw $0f78, $0fb8, $0040, $0f98, $353d, $0000, $0000, $0023
|
||||
dw $0f20, $0f40, $0020, $0f30, $3f3f, $0000, $0000, $0024
|
||||
dw $0f20, $0f40, $0020, $0f30, $3f3f, $0000, $0001, $0024
|
||||
dw $0f70, $0fb8, $0048, $0f94, $3f3f, $0000, $0000, $0025
|
||||
dw $0070, $00a0, $0030, $0088, $4242, $0000, $0000, $0026
|
||||
dw $0068, $0078, $0010, $0070, $4545, $0000, $0000, $0027
|
||||
@@ -1162,10 +1290,10 @@ dw $0488, $0500, $0078, $04c4, $5353, $0000, $0000, $002c
|
||||
dw $0538, $05a8, $0070, $0570, $5353, $0000, $0000, $002d
|
||||
dw $0470, $05a8, $0138, $050c, $5454, $0000, $0000, $002e
|
||||
dw $0470, $0598, $0128, $0504, $5555, $0000, $0000, $002f
|
||||
dw $0480, $0488, $0008, $0484, $5656, $0000, $0000, $0030
|
||||
dw $0480, $0488, $0008, $0484, $5656, $0000, $0001, $0030
|
||||
dw $04b0, $0510, $0060, $04e0, $5656, $0000, $0000, $0031
|
||||
dw $0560, $0588, $0028, $0574, $5656, $0000, $0000, $0032
|
||||
dw $0450, $0458, $0008, $0454, $5757, $0000, $0000, $0033
|
||||
dw $0450, $0458, $0008, $0454, $5757, $0000, $0001, $0033
|
||||
dw $0480, $04a8, $0028, $0494, $5757, $0000, $0000, $0034
|
||||
dw $0908, $0948, $0040, $0928, $6262, $0000, $0000, $0035
|
||||
dw $0878, $08a8, $0030, $0890, $6565, $0000, $0000, $0036
|
||||
@@ -1177,16 +1305,16 @@ dw $0af0, $0b40, $0050, $0b18, $6c6c, $0000, $0000, $003b
|
||||
dw $0b78, $0ba0, $0028, $0b8c, $6c6c, $0000, $0000, $003c
|
||||
dw $0b68, $0b98, $0030, $0b80, $6d6d, $0000, $0000, $003d
|
||||
dw $0a68, $0ab8, $0050, $0a90, $6e6e, $0000, $0000, $003e
|
||||
dw $0b00, $0b78, $0078, $0b3c, $6e6e, $0000, $0000, $003f
|
||||
dw $0b00, $0b78, $0078, $0b3c, $6e6e, $0000, $0001, $003f
|
||||
dw $0c50, $0db8, $0168, $0d04, $7373, $0000, $0000, $0040
|
||||
dw $0c78, $0ce3, $006b, $0cad, $7474, $0000, $0000, $0041
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $7474, $0000, $0000, $0042
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $7474, $0000, $0001, $0042
|
||||
dw $0d34, $0db8, $0084, $0d76, $7474, $0000, $0000, $0043
|
||||
dw $0f18, $0f18, $0000, $0f18, $7b7b, $0000, $0000, $0044
|
||||
dw $0fc8, $0fc8, $0000, $0fc8, $7b7b, $0000, $0000, $0045
|
||||
dw $0e28, $0fb8, $0190, $0ef0, $7c7c, $0000, $0000, $0046
|
||||
dw $0f78, $0fb8, $0040, $0f98, $757d, $0000, $0000, $0047
|
||||
dw $0f20, $0f40, $0020, $0f30, $7f7f, $0000, $0000, $0048
|
||||
dw $0f20, $0f40, $0020, $0f30, $7f7f, $0000, $0001, $0048
|
||||
dw $0f70, $0fb8, $0048, $0f94, $7f7f, $0000, $0000, $0049
|
||||
OWEastEdges:
|
||||
dw $0070, $00a0, $0030, $0088, $0001, $0000, $0000, $0000
|
||||
@@ -1199,10 +1327,10 @@ dw $0488, $0500, $0078, $04c4, $1212, $0000, $0000, $0006
|
||||
dw $0538, $05a8, $0070, $0570, $1212, $0000, $0000, $0007
|
||||
dw $0470, $05a8, $0138, $050c, $1313, $0000, $0000, $0008
|
||||
dw $0470, $0598, $0128, $0504, $1414, $0000, $0000, $0009
|
||||
dw $0480, $0488, $0008, $0484, $1515, $0000, $0000, $000a
|
||||
dw $0480, $0488, $0008, $0484, $1515, $0000, $0001, $000a
|
||||
dw $04b0, $0510, $0060, $04e0, $1515, $0000, $0000, $000b
|
||||
dw $0560, $0588, $0028, $0574, $1515, $0000, $0000, $000c
|
||||
dw $0450, $0458, $0008, $0454, $1616, $0000, $0000, $000d
|
||||
dw $0450, $0458, $0008, $0454, $1616, $0000, $0001, $000d
|
||||
dw $0480, $04a8, $0028, $0494, $1616, $0000, $0000, $000e
|
||||
dw $0718, $0738, $0020, $0728, $1a1a, $0000, $0000, $000f
|
||||
dw $0908, $0948, $0040, $0928, $1821, $0000, $0000, $0010
|
||||
@@ -1214,10 +1342,10 @@ dw $0af0, $0b40, $0050, $0b18, $2b2b, $0000, $0000, $0015
|
||||
dw $0b78, $0ba0, $0028, $0b8c, $2b2b, $0000, $0000, $0016
|
||||
dw $0b68, $0b98, $0030, $0b80, $2c2c, $0000, $0000, $0018
|
||||
dw $0a68, $0ab8, $0050, $0a90, $2d2d, $0000, $0000, $0019
|
||||
dw $0b00, $0b78, $0078, $0b3c, $2d2d, $0000, $0000, $001a
|
||||
dw $0b00, $0b78, $0078, $0b3c, $2d2d, $0000, $0001, $001a
|
||||
dw $0c50, $0db8, $0168, $0d04, $3232, $0000, $0000, $001b
|
||||
dw $0c78, $0ce3, $006b, $0cad, $3333, $0000, $0000, $001c
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $3333, $0000, $0000, $001d
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $3333, $0000, $0001, $001d
|
||||
dw $0d34, $0db8, $0084, $0d76, $3333, $0000, $0000, $001e
|
||||
dw $0ea8, $0f20, $0078, $0ee4, $3039, $0000, $0000, $001f
|
||||
dw $0f70, $0fa8, $0038, $0f8c, $3039, $0000, $0000, $0020
|
||||
@@ -1225,7 +1353,7 @@ dw $0f18, $0f18, $0000, $0f18, $3a3a, $0000, $0000, $0021
|
||||
dw $0fc8, $0fc8, $0000, $0fc8, $3a3a, $0000, $0000, $0022
|
||||
dw $0e28, $0fb8, $0190, $0ef0, $3b3b, $0000, $0000, $0023
|
||||
dw $0f78, $0fb8, $0040, $0f98, $3c3c, $0000, $0000, $0024
|
||||
dw $0f20, $0f40, $0020, $0f30, $353e, $0000, $0000, $0025
|
||||
dw $0f20, $0f40, $0020, $0f30, $353e, $0000, $0001, $0025
|
||||
dw $0f70, $0fb8, $0048, $0f94, $353e, $0000, $0000, $0026
|
||||
dw $0070, $00a0, $0030, $0088, $4041, $0000, $0000, $0027 ;Skull Woods
|
||||
dw $0068, $0078, $0010, $0070, $4344, $0000, $0000, $0028
|
||||
@@ -1237,10 +1365,10 @@ dw $0488, $0500, $0078, $04c4, $5252, $0000, $0000, $002d
|
||||
dw $0538, $05a8, $0070, $0570, $5252, $0000, $0000, $002e
|
||||
dw $0470, $05a8, $0138, $050c, $5353, $0000, $0000, $002f
|
||||
dw $0470, $0598, $0128, $0504, $5454, $0000, $0000, $0030
|
||||
dw $0480, $0488, $0008, $0484, $5555, $0000, $0000, $0031
|
||||
dw $0480, $0488, $0008, $0484, $5555, $0000, $0001, $0031
|
||||
dw $04b0, $0510, $0060, $04e0, $5555, $0000, $0000, $0032
|
||||
dw $0560, $0588, $0028, $0574, $5555, $0000, $0000, $0033
|
||||
dw $0450, $0458, $0008, $0454, $5656, $0000, $0000, $0034
|
||||
dw $0450, $0458, $0008, $0454, $5656, $0000, $0001, $0034
|
||||
dw $0480, $04a8, $0028, $0494, $5656, $0000, $0000, $0035
|
||||
dw $0908, $0948, $0040, $0928, $5861, $0000, $0000, $0036
|
||||
dw $0878, $08a8, $0030, $0890, $5b64, $0000, $0000, $0037
|
||||
@@ -1252,18 +1380,18 @@ dw $0af0, $0b40, $0050, $0b18, $6b6b, $0000, $0000, $003c
|
||||
dw $0b78, $0ba0, $0028, $0b8c, $6b6b, $0000, $0000, $003d
|
||||
dw $0b68, $0b98, $0030, $0b80, $6c6c, $0000, $0000, $003e
|
||||
dw $0a68, $0ab8, $0050, $0a90, $6d6d, $0000, $0000, $003f
|
||||
dw $0b00, $0b78, $0078, $0b3c, $6d6d, $0000, $0000, $0040
|
||||
dw $0b00, $0b78, $0078, $0b3c, $6d6d, $0000, $0001, $0040
|
||||
dw $0c50, $0db8, $0168, $0d04, $7272, $0000, $0000, $0041
|
||||
dw $0c78, $0ce3, $006b, $0cad, $7373, $0000, $0000, $0042
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $7373, $0000, $0000, $0043
|
||||
dw $0ce4, $0d33, $004f, $0d0b, $7373, $0000, $0001, $0043
|
||||
dw $0d34, $0db8, $0084, $0d76, $7373, $0000, $0000, $0044
|
||||
dw $0f18, $0f18, $0000, $0f18, $7a7a, $0000, $0000, $0045
|
||||
dw $0fc8, $0fc8, $0000, $0fc8, $7a7a, $0000, $0000, $0046
|
||||
dw $0e28, $0fb8, $0190, $0ef0, $7b7b, $0000, $0000, $0047
|
||||
dw $0f78, $0fb8, $0040, $0f98, $7c7c, $0000, $0000, $0048
|
||||
dw $0f20, $0f40, $0020, $0f30, $757e, $0000, $0000, $0049
|
||||
dw $0f20, $0f40, $0020, $0f30, $757e, $0000, $0001, $0049
|
||||
dw $0f70, $0fb8, $0048, $0f94, $757e, $0000, $0000, $004a
|
||||
dw $0058, $00c0, $0068, $008c, $8080, $0000, $0000, $0017 ;Hobo (unused)
|
||||
dw $0058, $00c0, $0068, $008c, $8080, $0000, $0001, $0017 ;Hobo (unused)
|
||||
|
||||
org $aab9a0 ;PC 1539a0
|
||||
OWSpecialDestIndex:
|
||||
|
||||
Binary file not shown.
@@ -3,6 +3,9 @@
|
||||
vanilla: 0
|
||||
parallel: 2
|
||||
full: 2
|
||||
overworld_terrain:
|
||||
on: 1
|
||||
off: 1
|
||||
overworld_crossed:
|
||||
none: 4
|
||||
polar: 1
|
||||
|
||||
@@ -145,6 +145,10 @@
|
||||
"full"
|
||||
]
|
||||
},
|
||||
"ow_terrain": {
|
||||
"action": "store_true",
|
||||
"type": "bool"
|
||||
},
|
||||
"ow_crossed": {
|
||||
"choices": [
|
||||
"none",
|
||||
|
||||
@@ -214,6 +214,8 @@
|
||||
"Full: Overworld transitions are shuffled, but both worlds",
|
||||
" will have an independent map shape."
|
||||
],
|
||||
"ow_terrain": [
|
||||
"With OW Layout Shuffle, this allows land and water edges to be connected." ],
|
||||
"ow_crossed": [
|
||||
"This allows cross-world connections to occur on the overworld.",
|
||||
"None: No transitions are cross-world connections.",
|
||||
@@ -226,7 +228,7 @@
|
||||
],
|
||||
"ow_keepsimilar": [
|
||||
"This keeps similar edge transitions together. ie. the two west edges on",
|
||||
"Potion Shop will be paired with another similar pair." ],
|
||||
"Sanctuary will be paired with another similar pair." ],
|
||||
"ow_mixed": [
|
||||
"Overworld tiles are randomly chosen to become part of the opposite world."
|
||||
],
|
||||
|
||||
@@ -131,6 +131,8 @@
|
||||
"randomizer.overworld.overworldshuffle.parallel": "Parallel",
|
||||
"randomizer.overworld.overworldshuffle.full": "Full",
|
||||
|
||||
"randomizer.overworld.terrain": "Free Terrain",
|
||||
|
||||
"randomizer.overworld.crossed": "Crossed",
|
||||
"randomizer.overworld.crossed.none": "None",
|
||||
"randomizer.overworld.crossed.polar": "Polar",
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
},
|
||||
"mixed": {
|
||||
"type": "checkbox",
|
||||
"default": true
|
||||
"default": false
|
||||
},
|
||||
"whirlpool": {
|
||||
"type": "checkbox",
|
||||
@@ -45,9 +45,13 @@
|
||||
}
|
||||
},
|
||||
"rightOverworldFrame": {
|
||||
"terrain": {
|
||||
"type": "checkbox",
|
||||
"default": false
|
||||
},
|
||||
"keepsimilar": {
|
||||
"type": "checkbox",
|
||||
"default": true
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -77,6 +77,7 @@ SETTINGSTOPROCESS = {
|
||||
},
|
||||
"overworld": {
|
||||
"overworldshuffle": "ow_shuffle",
|
||||
"terrain": "ow_terrain",
|
||||
"crossed": "ow_crossed",
|
||||
"keepsimilar": "ow_keepsimilar",
|
||||
"mixed": "ow_mixed",
|
||||
|
||||
@@ -33,8 +33,10 @@ def overworld_page(parent):
|
||||
for key in dictWidgets:
|
||||
self.widgets[key] = dictWidgets[key]
|
||||
packAttrs = {"anchor":E}
|
||||
if key == "keepsimilar":
|
||||
packAttrs = {"side":LEFT, "pady":(18,0)}
|
||||
if key == "terrain":
|
||||
packAttrs = {"anchor":W, "pady":(3,0)}
|
||||
elif key == "keepsimilar":
|
||||
packAttrs = {"anchor":W, "pady":(6,0)}
|
||||
elif key == "overworldflute":
|
||||
packAttrs["pady"] = (20,0)
|
||||
elif key in ["mixed", "whirlpool"]:
|
||||
|
||||
Reference in New Issue
Block a user