Merge remote-tracking branch 'remotes/door_rando/DoorDev' into Dev
This commit is contained in:
@@ -3,6 +3,8 @@
|
|||||||
*_Spoiler.txt
|
*_Spoiler.txt
|
||||||
*.pyc
|
*.pyc
|
||||||
*.sfc
|
*.sfc
|
||||||
|
*.srm
|
||||||
|
*.bst
|
||||||
*.wixobj
|
*.wixobj
|
||||||
build
|
build
|
||||||
bundle/components.wxs
|
bundle/components.wxs
|
||||||
@@ -14,3 +16,5 @@ README.html
|
|||||||
EnemizerCLI/
|
EnemizerCLI/
|
||||||
.mypy_cache/
|
.mypy_cache/
|
||||||
RaceRom.py
|
RaceRom.py
|
||||||
|
venv
|
||||||
|
test
|
||||||
|
|||||||
+419
-17
@@ -6,12 +6,15 @@ from collections import OrderedDict
|
|||||||
from _vendor.collections_extended import bag
|
from _vendor.collections_extended import bag
|
||||||
from EntranceShuffle import door_addresses
|
from EntranceShuffle import door_addresses
|
||||||
from Utils import int16_as_bytes
|
from Utils import int16_as_bytes
|
||||||
|
from Tables import normal_offset_table, spiral_offset_table
|
||||||
|
from RoomData import Room
|
||||||
|
|
||||||
class World(object):
|
class World(object):
|
||||||
|
|
||||||
def __init__(self, players, shuffle, logic, mode, swords, difficulty, difficulty_adjustments, timer, progressive, goal, algorithm, accessibility, shuffle_ganon, quickswap, fastmenu, disable_music, retro, custom, customitemarray, hints):
|
def __init__(self, players, shuffle, doorShuffle, logic, mode, swords, difficulty, difficulty_adjustments, timer, progressive, goal, algorithm, accessibility, shuffle_ganon, quickswap, fastmenu, disable_music, retro, custom, customitemarray, hints):
|
||||||
self.players = players
|
self.players = players
|
||||||
self.shuffle = shuffle.copy()
|
self.shuffle = shuffle.copy()
|
||||||
|
self.doorShuffle = doorShuffle.copy()
|
||||||
self.logic = logic.copy()
|
self.logic = logic.copy()
|
||||||
self.mode = mode.copy()
|
self.mode = mode.copy()
|
||||||
self.swords = swords.copy()
|
self.swords = swords.copy()
|
||||||
@@ -42,6 +45,9 @@ class World(object):
|
|||||||
self.lock_aga_door_in_escape = False
|
self.lock_aga_door_in_escape = False
|
||||||
self.save_and_quit_from_boss = True
|
self.save_and_quit_from_boss = True
|
||||||
self.accessibility = accessibility.copy()
|
self.accessibility = accessibility.copy()
|
||||||
|
self.fix_skullwoods_exit = self.shuffle not in ['vanilla', 'simple', 'restricted', 'dungeonssimple'] or self.doorShuffle not in ['vanilla']
|
||||||
|
self.fix_palaceofdarkness_exit = self.shuffle not in ['vanilla', 'simple', 'restricted', 'dungeonssimple']
|
||||||
|
self.fix_trock_exit = self.shuffle not in ['vanilla', 'simple', 'restricted', 'dungeonssimple']
|
||||||
self.shuffle_ganon = shuffle_ganon
|
self.shuffle_ganon = shuffle_ganon
|
||||||
self.fix_gtower_exit = self.shuffle_ganon
|
self.fix_gtower_exit = self.shuffle_ganon
|
||||||
self.quickswap = quickswap
|
self.quickswap = quickswap
|
||||||
@@ -56,6 +62,14 @@ class World(object):
|
|||||||
self.dynamic_locations = []
|
self.dynamic_locations = []
|
||||||
self.spoiler = Spoiler(self)
|
self.spoiler = Spoiler(self)
|
||||||
self.lamps_needed_for_dark_rooms = 1
|
self.lamps_needed_for_dark_rooms = 1
|
||||||
|
self.doors = []
|
||||||
|
self._door_cache = {}
|
||||||
|
self.paired_doors = {}
|
||||||
|
self.rooms = []
|
||||||
|
self._room_cache = {}
|
||||||
|
self.dungeon_layouts = {}
|
||||||
|
self.inaccessible_regions = {}
|
||||||
|
self.key_logic = {}
|
||||||
|
|
||||||
for player in range(1, players + 1):
|
for player in range(1, players + 1):
|
||||||
def set_player_attr(attr, val):
|
def set_player_attr(attr, val):
|
||||||
@@ -148,6 +162,42 @@ class World(object):
|
|||||||
return dungeon
|
return dungeon
|
||||||
raise RuntimeError('No such dungeon %s for player %d' % (dungeonname, player))
|
raise RuntimeError('No such dungeon %s for player %d' % (dungeonname, player))
|
||||||
|
|
||||||
|
def get_door(self, doorname, player):
|
||||||
|
if isinstance(doorname, Door):
|
||||||
|
return doorname
|
||||||
|
try:
|
||||||
|
return self._door_cache[(doorname, player)]
|
||||||
|
except KeyError:
|
||||||
|
for door in self.doors:
|
||||||
|
if door.name == doorname and door.player == player:
|
||||||
|
self._door_cache[(doorname, player)] = door
|
||||||
|
return door
|
||||||
|
raise RuntimeError('No such door %s for player %d' % (doorname, player))
|
||||||
|
|
||||||
|
def check_for_door(self, doorname, player):
|
||||||
|
if isinstance(doorname, Door):
|
||||||
|
return doorname
|
||||||
|
try:
|
||||||
|
return self._door_cache[(doorname, player)]
|
||||||
|
except KeyError:
|
||||||
|
for door in self.doors:
|
||||||
|
if door.name == doorname and door.player == player:
|
||||||
|
self._door_cache[(doorname, player)] = door
|
||||||
|
return door
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_room(self, room_idx, player):
|
||||||
|
if isinstance(room_idx, Room):
|
||||||
|
return room_idx
|
||||||
|
try:
|
||||||
|
return self._room_cache[(room_idx, player)]
|
||||||
|
except KeyError:
|
||||||
|
for room in self.rooms:
|
||||||
|
if room.index == room_idx and room.player == player:
|
||||||
|
self._room_cache[(room_idx, player)] = room
|
||||||
|
return room
|
||||||
|
raise RuntimeError('No such room %s for player %d' % (room_idx, player))
|
||||||
|
|
||||||
def get_all_state(self, keys=False):
|
def get_all_state(self, keys=False):
|
||||||
ret = CollectionState(self)
|
ret = CollectionState(self)
|
||||||
|
|
||||||
@@ -198,11 +248,15 @@ class World(object):
|
|||||||
|
|
||||||
if keys:
|
if keys:
|
||||||
for p in range(1, self.players + 1):
|
for p in range(1, self.players + 1):
|
||||||
|
key_list = []
|
||||||
|
player_dungeons = [x for x in self.dungeons if x.player == p]
|
||||||
|
for dungeon in player_dungeons:
|
||||||
|
if dungeon.big_key is not None:
|
||||||
|
key_list += [dungeon.big_key.name]
|
||||||
|
if len(dungeon.small_keys) > 0:
|
||||||
|
key_list += [x.name for x in dungeon.small_keys]
|
||||||
from Items import ItemFactory
|
from Items import ItemFactory
|
||||||
for item in ItemFactory(['Small Key (Escape)', 'Big Key (Eastern Palace)', 'Big Key (Desert Palace)', 'Small Key (Desert Palace)', 'Big Key (Tower of Hera)', 'Small Key (Tower of Hera)', 'Small Key (Agahnims Tower)', 'Small Key (Agahnims Tower)',
|
for item in ItemFactory(key_list, p):
|
||||||
'Big Key (Palace of Darkness)'] + ['Small Key (Palace of Darkness)'] * 6 + ['Big Key (Thieves Town)', 'Small Key (Thieves Town)', 'Big Key (Skull Woods)'] + ['Small Key (Skull Woods)'] * 3 + ['Big Key (Swamp Palace)',
|
|
||||||
'Small Key (Swamp Palace)', 'Big Key (Ice Palace)'] + ['Small Key (Ice Palace)'] * 2 + ['Big Key (Misery Mire)', 'Big Key (Turtle Rock)', 'Big Key (Ganons Tower)'] + ['Small Key (Misery Mire)'] * 3 + ['Small Key (Turtle Rock)'] * 4 + ['Small Key (Ganons Tower)'] * 4,
|
|
||||||
p):
|
|
||||||
soft_collect(item)
|
soft_collect(item)
|
||||||
ret.sweep_for_events()
|
ret.sweep_for_events()
|
||||||
return ret
|
return ret
|
||||||
@@ -298,7 +352,7 @@ class World(object):
|
|||||||
sphere = []
|
sphere = []
|
||||||
# build up spheres of collection radius. Everything in each sphere is independent from each other in dependencies and only depends on lower spheres
|
# build up spheres of collection radius. Everything in each sphere is independent from each other in dependencies and only depends on lower spheres
|
||||||
for location in prog_locations:
|
for location in prog_locations:
|
||||||
if location.can_reach(state):
|
if location.can_reach(state) and state.not_flooding_a_key(state.world, location):
|
||||||
sphere.append(location)
|
sphere.append(location)
|
||||||
|
|
||||||
if not sphere:
|
if not sphere:
|
||||||
@@ -375,6 +429,7 @@ class CollectionState(object):
|
|||||||
reachable_events = [location for location in locations if location.event and
|
reachable_events = [location for location in locations if location.event and
|
||||||
(not key_only or (not self.world.keyshuffle[location.item.player] and location.item.smallkey) or (not self.world.bigkeyshuffle[location.item.player] and location.item.bigkey))
|
(not key_only or (not self.world.keyshuffle[location.item.player] and location.item.smallkey) or (not self.world.bigkeyshuffle[location.item.player] and location.item.bigkey))
|
||||||
and location.can_reach(self)]
|
and location.can_reach(self)]
|
||||||
|
reachable_events = self._do_not_flood_the_keys(reachable_events)
|
||||||
for event in reachable_events:
|
for event in reachable_events:
|
||||||
if (event.name, event.player) not in self.events:
|
if (event.name, event.player) not in self.events:
|
||||||
self.events.append((event.name, event.player))
|
self.events.append((event.name, event.player))
|
||||||
@@ -382,6 +437,20 @@ class CollectionState(object):
|
|||||||
new_locations = len(reachable_events) > checked_locations
|
new_locations = len(reachable_events) > checked_locations
|
||||||
checked_locations = len(reachable_events)
|
checked_locations = len(reachable_events)
|
||||||
|
|
||||||
|
def _do_not_flood_the_keys(self, reachable_events):
|
||||||
|
adjusted_checks = list(reachable_events)
|
||||||
|
for event in reachable_events:
|
||||||
|
if event.name in flooded_keys.keys() and self.world.get_location(flooded_keys[event.name], event.player) not in reachable_events:
|
||||||
|
adjusted_checks.remove(event)
|
||||||
|
if len(adjusted_checks) < len(reachable_events):
|
||||||
|
return adjusted_checks
|
||||||
|
return reachable_events
|
||||||
|
|
||||||
|
def not_flooding_a_key(self, world, location):
|
||||||
|
if location.name in flooded_keys.keys():
|
||||||
|
return world.get_location(flooded_keys[location.name], location.player) in self.locations_checked
|
||||||
|
return True
|
||||||
|
|
||||||
def has(self, item, player, count=1):
|
def has(self, item, player, count=1):
|
||||||
if count == 1:
|
if count == 1:
|
||||||
return (item, player) in self.prog_items
|
return (item, player) in self.prog_items
|
||||||
@@ -765,6 +834,8 @@ class Dungeon(object):
|
|||||||
self.player = player
|
self.player = player
|
||||||
self.world = None
|
self.world = None
|
||||||
|
|
||||||
|
self.entrance_regions = []
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def boss(self):
|
def boss(self):
|
||||||
return self.bosses.get(None, None)
|
return self.bosses.get(None, None)
|
||||||
@@ -784,6 +855,16 @@ class Dungeon(object):
|
|||||||
def is_dungeon_item(self, item):
|
def is_dungeon_item(self, item):
|
||||||
return item.player == self.player and item.name in [dungeon_item.name for dungeon_item in self.all_items]
|
return item.player == self.player and item.name in [dungeon_item.name for dungeon_item in self.all_items]
|
||||||
|
|
||||||
|
def count_dungeon_item(self):
|
||||||
|
return len(self.dungeon_items) + 1 if self.big_key_required else 0 + self.key_number
|
||||||
|
|
||||||
|
def incomplete_paths(self):
|
||||||
|
ret = 0
|
||||||
|
for path in self.paths:
|
||||||
|
if not self.path_completion[path]:
|
||||||
|
ret += 1
|
||||||
|
return ret
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.__unicode__())
|
return str(self.__unicode__())
|
||||||
|
|
||||||
@@ -793,6 +874,293 @@ class Dungeon(object):
|
|||||||
else:
|
else:
|
||||||
return '%s (Player %d)' % (self.name, self.player)
|
return '%s (Player %d)' % (self.name, self.player)
|
||||||
|
|
||||||
|
|
||||||
|
@unique
|
||||||
|
class DoorType(Enum):
|
||||||
|
Normal = 1
|
||||||
|
SpiralStairs = 2
|
||||||
|
StraightStairs = 3
|
||||||
|
Ladder = 4
|
||||||
|
Open = 5
|
||||||
|
Hole = 6
|
||||||
|
Warp = 7
|
||||||
|
Interior = 8
|
||||||
|
Logical = 9
|
||||||
|
|
||||||
|
|
||||||
|
@unique
|
||||||
|
class Direction(Enum):
|
||||||
|
North = 0
|
||||||
|
West = 1
|
||||||
|
South = 2
|
||||||
|
East = 3
|
||||||
|
Up = 4
|
||||||
|
Down = 5
|
||||||
|
|
||||||
|
|
||||||
|
class Polarity:
|
||||||
|
def __init__(self):
|
||||||
|
self.vector = [0, 0, 0]
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return len(self.vector)
|
||||||
|
|
||||||
|
def __add__(self, other):
|
||||||
|
result = Polarity()
|
||||||
|
for i in range(len(self.vector)):
|
||||||
|
result.vector[i] = pol_add[pol_idx_2[i]](self.vector[i], other.vector[i])
|
||||||
|
return result
|
||||||
|
|
||||||
|
def __iadd__(self, other):
|
||||||
|
for i in range(len(self.vector)):
|
||||||
|
self.vector[i] = pol_add[pol_idx_2[i]](self.vector[i], other.vector[i])
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __getitem__(self, item):
|
||||||
|
return self.vector[item]
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
for i in range(len(self.vector)):
|
||||||
|
if self.vector[i] != other.vector[i]:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
def is_neutral(self):
|
||||||
|
for i in range(len(self.vector)):
|
||||||
|
if self.vector[i] != 0:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
def complement(self):
|
||||||
|
result = Polarity()
|
||||||
|
for i in range(len(self.vector)):
|
||||||
|
result.vector[i] = pol_comp[pol_idx_2[i]](self.vector[i])
|
||||||
|
return result
|
||||||
|
|
||||||
|
def charge(self):
|
||||||
|
result = 0
|
||||||
|
for i in range(len(self.vector)):
|
||||||
|
result += abs(self.vector[i])
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
pol_idx = {
|
||||||
|
Direction.North: (0, 'Pos'),
|
||||||
|
Direction.South: (0, 'Neg'),
|
||||||
|
Direction.East: (1, 'Pos'),
|
||||||
|
Direction.West: (1, 'Neg'),
|
||||||
|
Direction.Up: (2, 'Mod'),
|
||||||
|
Direction.Down: (2, 'Mod')
|
||||||
|
}
|
||||||
|
pol_idx_2 = {
|
||||||
|
0: 'Add',
|
||||||
|
1: 'Add',
|
||||||
|
2: 'Mod'
|
||||||
|
}
|
||||||
|
pol_inc = {
|
||||||
|
'Pos': lambda x: x + 1,
|
||||||
|
'Neg': lambda x: x - 1,
|
||||||
|
'Mod': lambda x: (x + 1) % 2
|
||||||
|
}
|
||||||
|
pol_add = {
|
||||||
|
'Add': lambda x, y: x + y,
|
||||||
|
'Mod': lambda x, y: (x + y) % 2
|
||||||
|
}
|
||||||
|
pol_comp = {
|
||||||
|
'Add': lambda x: -x,
|
||||||
|
'Mod': lambda x: 0 if x == 0 else 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@unique
|
||||||
|
class CrystalBarrier(Enum):
|
||||||
|
Null = 1 # no special requirement
|
||||||
|
Blue = 2 # blue must be down and explore state set to Blue
|
||||||
|
Orange = 3 # orange must be down and explore state set to Orange
|
||||||
|
Either = 4 # you choose to leave this room in Either state
|
||||||
|
|
||||||
|
|
||||||
|
class Door(object):
|
||||||
|
def __init__(self, player, name, type):
|
||||||
|
self.player = player
|
||||||
|
self.name = name
|
||||||
|
self.type = type
|
||||||
|
self.direction = None
|
||||||
|
|
||||||
|
# rom properties
|
||||||
|
self.roomIndex = -1
|
||||||
|
# 0,1,2 + Direction (N:0, W:3, S:6, E:9) for normal
|
||||||
|
# 0-4 for spiral offset thing
|
||||||
|
self.doorIndex = -1
|
||||||
|
self.layer = -1 # 0 for normal floor, 1 for the inset layer
|
||||||
|
self.toggle = False
|
||||||
|
self.trapFlag = 0x0
|
||||||
|
self.quadrant = 2
|
||||||
|
self.shiftX = 78
|
||||||
|
self.shiftY = 78
|
||||||
|
self.zeroHzCam = False
|
||||||
|
self.zeroVtCam = False
|
||||||
|
self.doorListPos = -1
|
||||||
|
|
||||||
|
# logical properties
|
||||||
|
# self.connected = False # combine with Dest?
|
||||||
|
self.dest = None
|
||||||
|
self.blocked = False # Indicates if the door is normally blocked off as an exit. (Sanc door or always closed)
|
||||||
|
self.stonewall = False # Indicate that the door cannot be enter until exited (Desert Torches, PoD Eye Statue)
|
||||||
|
self.smallKey = False # There's a small key door on this side
|
||||||
|
self.bigKey = False # There's a big key door on this side
|
||||||
|
self.ugly = False # Indicates that it can't be seen from the front (e.g. back of a big key door)
|
||||||
|
self.crystal = CrystalBarrier.Null # How your crystal state changes if you use this door
|
||||||
|
self.req_event = None # if a dungeon event is required for this door - swamp palace mostly
|
||||||
|
self.controller = None
|
||||||
|
self.dependents = []
|
||||||
|
self.dead = False
|
||||||
|
|
||||||
|
def getAddress(self):
|
||||||
|
if self.type == DoorType.Normal:
|
||||||
|
return 0x13A000 + normal_offset_table[self.roomIndex] * 24 + (self.doorIndex + self.direction.value * 3) * 2
|
||||||
|
elif self.type == DoorType.SpiralStairs:
|
||||||
|
return 0x13B000 + (spiral_offset_table[self.roomIndex] + self.doorIndex) * 4
|
||||||
|
|
||||||
|
def getTarget(self, toggle):
|
||||||
|
if self.type == DoorType.Normal:
|
||||||
|
bitmask = 4 * (self.layer ^ 1 if toggle else self.layer)
|
||||||
|
bitmask += 0x08 * int(self.trapFlag)
|
||||||
|
return [self.roomIndex, bitmask + self.doorIndex]
|
||||||
|
if self.type == DoorType.SpiralStairs:
|
||||||
|
bitmask = int(self.layer) << 2
|
||||||
|
bitmask += 0x10 * int(self.zeroHzCam)
|
||||||
|
bitmask += 0x20 * int(self.zeroVtCam)
|
||||||
|
bitmask += 0x80 if self.direction == Direction.Up else 0
|
||||||
|
return [self.roomIndex, bitmask + self.quadrant, self.shiftX, self.shiftY]
|
||||||
|
|
||||||
|
def dir(self, direction, room, doorIndex, layer):
|
||||||
|
self.direction = direction
|
||||||
|
self.roomIndex = room
|
||||||
|
self.doorIndex = doorIndex
|
||||||
|
self.layer = layer
|
||||||
|
return self
|
||||||
|
|
||||||
|
def ss(self, quadrant, shift_y, shift_x, zero_hz_cam=False, zero_vt_cam=False):
|
||||||
|
self.quadrant = quadrant
|
||||||
|
self.shiftY = shift_y
|
||||||
|
self.shiftX = shift_x
|
||||||
|
self.zeroHzCam = zero_hz_cam
|
||||||
|
self.zeroVtCam = zero_vt_cam
|
||||||
|
return self
|
||||||
|
|
||||||
|
def small_key(self):
|
||||||
|
self.smallKey = True
|
||||||
|
return self
|
||||||
|
|
||||||
|
def big_key(self):
|
||||||
|
self.bigKey = True
|
||||||
|
return self
|
||||||
|
|
||||||
|
def toggler(self):
|
||||||
|
self.toggle = True
|
||||||
|
return self
|
||||||
|
|
||||||
|
def no_exit(self):
|
||||||
|
self.blocked = True
|
||||||
|
return self
|
||||||
|
|
||||||
|
def no_entrance(self):
|
||||||
|
self.stonewall = True
|
||||||
|
return self
|
||||||
|
|
||||||
|
def trap(self, trapFlag):
|
||||||
|
self.trapFlag = trapFlag
|
||||||
|
return self
|
||||||
|
|
||||||
|
def pos(self, pos):
|
||||||
|
self.doorListPos = pos
|
||||||
|
return self
|
||||||
|
|
||||||
|
def event(self, event):
|
||||||
|
self.req_event = event
|
||||||
|
return self
|
||||||
|
|
||||||
|
def barrier(self, crystal):
|
||||||
|
self.crystal = crystal
|
||||||
|
return self
|
||||||
|
|
||||||
|
def c_switch(self):
|
||||||
|
self.crystal = CrystalBarrier.Either
|
||||||
|
return self
|
||||||
|
|
||||||
|
def kill(self):
|
||||||
|
self.dead = True
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
return isinstance(other, self.__class__) and self.name == other.name
|
||||||
|
|
||||||
|
def __hash__(self):
|
||||||
|
return hash(self.name)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return str(self.__unicode__())
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return '%s' % self.name
|
||||||
|
|
||||||
|
|
||||||
|
class Sector(object):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.regions = []
|
||||||
|
self.outstanding_doors = []
|
||||||
|
self.name = None
|
||||||
|
self.r_name_set = None
|
||||||
|
self.chest_locations = 0
|
||||||
|
self.key_only_locations = 0
|
||||||
|
self.c_switch = False
|
||||||
|
self.orange_barrier = False
|
||||||
|
self.blue_barrier = False
|
||||||
|
self.bk_required = False
|
||||||
|
self.bk_provided = False
|
||||||
|
|
||||||
|
def region_set(self):
|
||||||
|
if self.r_name_set is None:
|
||||||
|
self.r_name_set = dict.fromkeys(map(lambda r: r.name, self.regions))
|
||||||
|
return self.r_name_set.keys()
|
||||||
|
|
||||||
|
def polarity(self):
|
||||||
|
pol = Polarity()
|
||||||
|
for door in self.outstanding_doors:
|
||||||
|
idx, inc = pol_idx[door.direction]
|
||||||
|
pol.vector[idx] = pol_inc[inc](pol.vector[idx])
|
||||||
|
return pol
|
||||||
|
|
||||||
|
def magnitude(self):
|
||||||
|
magnitude = [0, 0, 0]
|
||||||
|
for door in self.outstanding_doors:
|
||||||
|
idx, inc = pol_idx[door.direction]
|
||||||
|
magnitude[idx] = magnitude[idx] + 1
|
||||||
|
return magnitude
|
||||||
|
|
||||||
|
def outflow(self):
|
||||||
|
outflow = 0
|
||||||
|
for door in self.outstanding_doors:
|
||||||
|
if not door.blocked:
|
||||||
|
outflow = outflow + 1
|
||||||
|
return outflow
|
||||||
|
|
||||||
|
def adj_outflow(self):
|
||||||
|
outflow = 0
|
||||||
|
for door in self.outstanding_doors:
|
||||||
|
if not door.blocked and not door.dead:
|
||||||
|
outflow = outflow + 1
|
||||||
|
return outflow
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return str(self.__unicode__())
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return '%s' % next(iter(self.region_set()))
|
||||||
|
|
||||||
|
|
||||||
class Boss(object):
|
class Boss(object):
|
||||||
def __init__(self, name, enemizer_name, defeat_rule, player):
|
def __init__(self, name, enemizer_name, defeat_rule, player):
|
||||||
self.name = name
|
self.name = name
|
||||||
@@ -804,10 +1172,19 @@ class Boss(object):
|
|||||||
return self.defeat_rule(state, self.player)
|
return self.defeat_rule(state, self.player)
|
||||||
|
|
||||||
class Location(object):
|
class Location(object):
|
||||||
def __init__(self, player, name='', address=None, crystal=False, hint_text=None, parent=None, player_address=None):
|
def __init__(self, player, name='', address=None, crystal=False, hint_text=None, parent=None, forced_item=None, player_address=None):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.parent_region = parent
|
self.parent_region = parent
|
||||||
|
if forced_item is not None:
|
||||||
|
from Items import ItemFactory
|
||||||
|
self.forced_item = ItemFactory([forced_item], player)[0]
|
||||||
|
self.item = self.forced_item
|
||||||
|
self.item.location = self
|
||||||
|
self.event = True
|
||||||
|
else:
|
||||||
|
self.forced_item = None
|
||||||
self.item = None
|
self.item = None
|
||||||
|
self.event = False
|
||||||
self.crystal = crystal
|
self.crystal = crystal
|
||||||
self.address = address
|
self.address = address
|
||||||
self.player_address = player_address
|
self.player_address = player_address
|
||||||
@@ -815,7 +1192,6 @@ class Location(object):
|
|||||||
self.hint_text = hint_text if hint_text is not None else 'Hyrule'
|
self.hint_text = hint_text if hint_text is not None else 'Hyrule'
|
||||||
self.recursion_count = 0
|
self.recursion_count = 0
|
||||||
self.staleness_count = 0
|
self.staleness_count = 0
|
||||||
self.event = False
|
|
||||||
self.locked = False
|
self.locked = False
|
||||||
self.always_allow = lambda item, state: False
|
self.always_allow = lambda item, state: False
|
||||||
self.access_rule = lambda state: True
|
self.access_rule = lambda state: True
|
||||||
@@ -899,9 +1275,10 @@ class ShopType(Enum):
|
|||||||
UpgradeShop = 2
|
UpgradeShop = 2
|
||||||
|
|
||||||
class Shop(object):
|
class Shop(object):
|
||||||
def __init__(self, region, room_id, type, shopkeeper_config, replaceable):
|
def __init__(self, region, room_id, default_door_id, type, shopkeeper_config, replaceable):
|
||||||
self.region = region
|
self.region = region
|
||||||
self.room_id = room_id
|
self.room_id = room_id
|
||||||
|
self.default_door_id = default_door_id
|
||||||
self.type = type
|
self.type = type
|
||||||
self.inventory = [None, None, None]
|
self.inventory = [None, None, None]
|
||||||
self.shopkeeper_config = shopkeeper_config
|
self.shopkeeper_config = shopkeeper_config
|
||||||
@@ -921,6 +1298,8 @@ class Shop(object):
|
|||||||
config = self.item_count
|
config = self.item_count
|
||||||
if len(entrances) == 1 and entrances[0].name in door_addresses:
|
if len(entrances) == 1 and entrances[0].name in door_addresses:
|
||||||
door_id = door_addresses[entrances[0].name][0]+1
|
door_id = door_addresses[entrances[0].name][0]+1
|
||||||
|
elif self.default_door_id is not None:
|
||||||
|
door_id = self.default_door_id
|
||||||
else:
|
else:
|
||||||
door_id = 0
|
door_id = 0
|
||||||
config |= 0x40 # ignore door id
|
config |= 0x40 # ignore door id
|
||||||
@@ -959,6 +1338,8 @@ class Spoiler(object):
|
|||||||
def __init__(self, world):
|
def __init__(self, world):
|
||||||
self.world = world
|
self.world = world
|
||||||
self.entrances = OrderedDict()
|
self.entrances = OrderedDict()
|
||||||
|
self.doors = OrderedDict()
|
||||||
|
self.doorTypes = OrderedDict()
|
||||||
self.medallions = {}
|
self.medallions = {}
|
||||||
self.playthrough = {}
|
self.playthrough = {}
|
||||||
self.unreachables = []
|
self.unreachables = []
|
||||||
@@ -974,6 +1355,18 @@ class Spoiler(object):
|
|||||||
else:
|
else:
|
||||||
self.entrances[(entrance, direction, player)] = OrderedDict([('player', player), ('entrance', entrance), ('exit', exit), ('direction', direction)])
|
self.entrances[(entrance, direction, player)] = OrderedDict([('player', player), ('entrance', entrance), ('exit', exit), ('direction', direction)])
|
||||||
|
|
||||||
|
def set_door(self, entrance, exit, direction, player):
|
||||||
|
if self.world.players == 1:
|
||||||
|
self.doors[(entrance, direction, player)] = OrderedDict([('entrance', entrance), ('exit', exit), ('direction', direction)])
|
||||||
|
else:
|
||||||
|
self.doors[(entrance, direction, player)] = OrderedDict([('player', player), ('entrance', entrance), ('exit', exit), ('direction', direction)])
|
||||||
|
|
||||||
|
def set_door_type(self, doorNames, type, player):
|
||||||
|
if self.world.players == 1:
|
||||||
|
self.doorTypes[(doorNames, player)] = OrderedDict([('doorNames', doorNames), ('type', type)])
|
||||||
|
else:
|
||||||
|
self.doorTypes[(doorNames, player)] = OrderedDict([('player', player), ('doorNames', doorNames), ('type', type)])
|
||||||
|
|
||||||
def parse_data(self):
|
def parse_data(self):
|
||||||
self.medallions = OrderedDict()
|
self.medallions = OrderedDict()
|
||||||
if self.world.players == 1:
|
if self.world.players == 1:
|
||||||
@@ -1035,14 +1428,9 @@ class Spoiler(object):
|
|||||||
self.bosses[str(player)]["Ice Palace"] = self.world.get_dungeon("Ice Palace", player).boss.name
|
self.bosses[str(player)]["Ice Palace"] = self.world.get_dungeon("Ice Palace", player).boss.name
|
||||||
self.bosses[str(player)]["Misery Mire"] = self.world.get_dungeon("Misery Mire", player).boss.name
|
self.bosses[str(player)]["Misery Mire"] = self.world.get_dungeon("Misery Mire", player).boss.name
|
||||||
self.bosses[str(player)]["Turtle Rock"] = self.world.get_dungeon("Turtle Rock", player).boss.name
|
self.bosses[str(player)]["Turtle Rock"] = self.world.get_dungeon("Turtle Rock", player).boss.name
|
||||||
if self.world.mode[player] != 'inverted':
|
self.bosses[str(player)]["Ganons Tower Basement"] = [x for x in self.world.dungeons if x.player == player and 'bottom' in x.bosses.keys()][0].bosses['bottom'].name
|
||||||
self.bosses[str(player)]["Ganons Tower Basement"] = self.world.get_dungeon('Ganons Tower', player).bosses['bottom'].name
|
self.bosses[str(player)]["Ganons Tower Middle"] = [x for x in self.world.dungeons if x.player == player and 'middle' in x.bosses.keys()][0].bosses['middle'].name
|
||||||
self.bosses[str(player)]["Ganons Tower Middle"] = self.world.get_dungeon('Ganons Tower', player).bosses['middle'].name
|
self.bosses[str(player)]["Ganons Tower Top"] = [x for x in self.world.dungeons if x.player == player and 'top' in x.bosses.keys()][0].bosses['top'].name
|
||||||
self.bosses[str(player)]["Ganons Tower Top"] = self.world.get_dungeon('Ganons Tower', player).bosses['top'].name
|
|
||||||
else:
|
|
||||||
self.bosses[str(player)]["Ganons Tower Basement"] = self.world.get_dungeon('Inverted Ganons Tower', player).bosses['bottom'].name
|
|
||||||
self.bosses[str(player)]["Ganons Tower Middle"] = self.world.get_dungeon('Inverted Ganons Tower', player).bosses['middle'].name
|
|
||||||
self.bosses[str(player)]["Ganons Tower Top"] = self.world.get_dungeon('Inverted Ganons Tower', player).bosses['top'].name
|
|
||||||
|
|
||||||
self.bosses[str(player)]["Ganons Tower"] = "Agahnim 2"
|
self.bosses[str(player)]["Ganons Tower"] = "Agahnim 2"
|
||||||
self.bosses[str(player)]["Ganon"] = "Ganon"
|
self.bosses[str(player)]["Ganon"] = "Ganon"
|
||||||
@@ -1080,6 +1468,8 @@ class Spoiler(object):
|
|||||||
self.parse_data()
|
self.parse_data()
|
||||||
out = OrderedDict()
|
out = OrderedDict()
|
||||||
out['Entrances'] = list(self.entrances.values())
|
out['Entrances'] = list(self.entrances.values())
|
||||||
|
out['Doors'] = list(self.doors.values())
|
||||||
|
out['DoorTypes'] = list(self.doorTypes.values())
|
||||||
out.update(self.locations)
|
out.update(self.locations)
|
||||||
out['Special'] = self.medallions
|
out['Special'] = self.medallions
|
||||||
if self.shops:
|
if self.shops:
|
||||||
@@ -1120,6 +1510,12 @@ class Spoiler(object):
|
|||||||
outfile.write('Hints: %s\n' % {k: 'Yes' if v else 'No' for k, v in self.metadata['hints'].items()})
|
outfile.write('Hints: %s\n' % {k: 'Yes' if v else 'No' for k, v in self.metadata['hints'].items()})
|
||||||
outfile.write('L\\R Quickswap enabled: %s\n' % ('Yes' if self.world.quickswap else 'No'))
|
outfile.write('L\\R Quickswap enabled: %s\n' % ('Yes' if self.world.quickswap else 'No'))
|
||||||
outfile.write('Menu speed: %s' % self.world.fastmenu)
|
outfile.write('Menu speed: %s' % self.world.fastmenu)
|
||||||
|
if self.doors:
|
||||||
|
outfile.write('\n\nDoors:\n\n')
|
||||||
|
outfile.write('\n'.join(['%s%s %s %s' % ('Player {0}: '.format(entry['player']) if self.world.players > 1 else '', entry['entrance'], '<=>' if entry['direction'] == 'both' else '<=' if entry['direction'] == 'exit' else '=>', entry['exit']) for entry in self.doors.values()]))
|
||||||
|
if self.doorTypes:
|
||||||
|
outfile.write('\n\nDoor Types:\n\n')
|
||||||
|
outfile.write('\n'.join(['%s%s %s' % ('Player {0}: '.format(entry['player']) if self.world.players > 1 else '', entry['doorNames'], entry['type']) for entry in self.doorTypes.values()]))
|
||||||
if self.entrances:
|
if self.entrances:
|
||||||
outfile.write('\n\nEntrances:\n\n')
|
outfile.write('\n\nEntrances:\n\n')
|
||||||
outfile.write('\n'.join(['%s%s %s %s' % ('Player {0}: '.format(entry['player']) if self.world.players > 1 else '', entry['entrance'], '<=>' if entry['direction'] == 'both' else '<=' if entry['direction'] == 'exit' else '=>', entry['exit']) for entry in self.entrances.values()]))
|
outfile.write('\n'.join(['%s%s %s %s' % ('Player {0}: '.format(entry['player']) if self.world.players > 1 else '', entry['entrance'], '<=>' if entry['direction'] == 'both' else '<=' if entry['direction'] == 'exit' else '=>', entry['exit']) for entry in self.entrances.values()]))
|
||||||
@@ -1153,3 +1549,9 @@ class Spoiler(object):
|
|||||||
path_listings.append("{}\n {}".format(location, "\n => ".join(path_lines)))
|
path_listings.append("{}\n {}".format(location, "\n => ".join(path_lines)))
|
||||||
|
|
||||||
outfile.write('\n'.join(path_listings))
|
outfile.write('\n'.join(path_listings))
|
||||||
|
|
||||||
|
|
||||||
|
flooded_keys = {
|
||||||
|
'Trench 1 Switch': 'Swamp Palace - Trench 1 Pot Key',
|
||||||
|
'Trench 2 Switch': 'Swamp Palace - Trench 2 Pot Key'
|
||||||
|
}
|
||||||
|
|||||||
+2050
File diff suppressed because it is too large
Load Diff
+1609
File diff suppressed because it is too large
Load Diff
@@ -10,6 +10,7 @@ import sys
|
|||||||
|
|
||||||
from Main import main
|
from Main import main
|
||||||
from Utils import is_bundled, close_console
|
from Utils import is_bundled, close_console
|
||||||
|
from Fill import FillError
|
||||||
|
|
||||||
|
|
||||||
class ArgumentDefaultsHelpFormatter(argparse.RawTextHelpFormatter):
|
class ArgumentDefaultsHelpFormatter(argparse.RawTextHelpFormatter):
|
||||||
@@ -127,7 +128,7 @@ def parse_arguments(argv, no_defaults=False):
|
|||||||
parser.add_argument('--algorithm', default=defval('balanced'), const='balanced', nargs='?', choices=['freshness', 'flood', 'vt21', 'vt22', 'vt25', 'vt26', 'balanced'],
|
parser.add_argument('--algorithm', default=defval('balanced'), const='balanced', nargs='?', choices=['freshness', 'flood', 'vt21', 'vt22', 'vt25', 'vt26', 'balanced'],
|
||||||
help='''\
|
help='''\
|
||||||
Select item filling algorithm. (default: %(default)s
|
Select item filling algorithm. (default: %(default)s
|
||||||
balanced: vt26 derivitive that aims to strike a balance between
|
balanced: vt26 derivative that aims to strike a balance between
|
||||||
the overworld heavy vt25 and the dungeon heavy vt26
|
the overworld heavy vt25 and the dungeon heavy vt26
|
||||||
algorithm.
|
algorithm.
|
||||||
vt26: Shuffle items and place them in a random location
|
vt26: Shuffle items and place them in a random location
|
||||||
@@ -171,6 +172,17 @@ def parse_arguments(argv, no_defaults=False):
|
|||||||
The dungeon variants only mix up dungeons and keep the rest of
|
The dungeon variants only mix up dungeons and keep the rest of
|
||||||
the overworld vanilla.
|
the overworld vanilla.
|
||||||
''')
|
''')
|
||||||
|
parser.add_argument('--door_shuffle', default=defvalue('vanilla'), const='vanilla', nargs='?', choices=['vanilla', 'basic', 'crossed', 'experimental'],
|
||||||
|
help='''\
|
||||||
|
Select Door Shuffling Algorithm. (default: %(default)s)
|
||||||
|
Basic: Doors are mixed within a single dungeon.
|
||||||
|
(Not yet implemented)
|
||||||
|
Crossed: Doors are mixed between all dungeons.
|
||||||
|
(Not yet implemented)
|
||||||
|
Vanilla: All doors are connected the same way they were in the
|
||||||
|
base game.
|
||||||
|
Experimental: Experimental mixes live here. Use at your own risk.
|
||||||
|
''')
|
||||||
parser.add_argument('--crystals_ganon', default=defval('7'), const='7', nargs='?', choices=['random', '0', '1', '2', '3', '4', '5', '6', '7'],
|
parser.add_argument('--crystals_ganon', default=defval('7'), const='7', nargs='?', choices=['random', '0', '1', '2', '3', '4', '5', '6', '7'],
|
||||||
help='''\
|
help='''\
|
||||||
How many crystals are needed to defeat ganon. Any other
|
How many crystals are needed to defeat ganon. Any other
|
||||||
@@ -325,11 +337,22 @@ def start():
|
|||||||
guiMain(args)
|
guiMain(args)
|
||||||
elif args.count is not None:
|
elif args.count is not None:
|
||||||
seed = args.seed
|
seed = args.seed
|
||||||
|
failures = []
|
||||||
|
logger = logging.getLogger('')
|
||||||
for _ in range(args.count):
|
for _ in range(args.count):
|
||||||
|
try:
|
||||||
main(seed=seed, args=args)
|
main(seed=seed, args=args)
|
||||||
|
logger.info('Finished run %s', _+1)
|
||||||
|
except (FillError, Exception, RuntimeError) as err:
|
||||||
|
failures.append((err, seed))
|
||||||
|
logger.warning('Generation failed: %s', err)
|
||||||
seed = random.randint(0, 999999999)
|
seed = random.randint(0, 999999999)
|
||||||
|
for fail in failures:
|
||||||
|
logger.info('%s seed failed with: %s', fail[1], fail[0])
|
||||||
|
logger.info('Generation fail rate: %f%%', 100*len(failures)/args.count)
|
||||||
else:
|
else:
|
||||||
main(seed=args.seed, args=args)
|
main(seed=args.seed, args=args)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
start()
|
start()
|
||||||
+243
-23
@@ -15,21 +15,21 @@ def create_dungeons(world, player):
|
|||||||
dungeon.world = world
|
dungeon.world = world
|
||||||
return dungeon
|
return dungeon
|
||||||
|
|
||||||
ES = make_dungeon('Hyrule Castle', None, ['Hyrule Castle', 'Sewers', 'Sewer Drop', 'Sewers (Dark)', 'Sanctuary'], None, [ItemFactory('Small Key (Escape)', player)], [ItemFactory('Map (Escape)', player)])
|
ES = make_dungeon('Hyrule Castle', None, hyrule_castle_regions, None, [ItemFactory('Small Key (Escape)', player)], [ItemFactory('Map (Escape)', player)])
|
||||||
EP = make_dungeon('Eastern Palace', 'Armos Knights', ['Eastern Palace'], ItemFactory('Big Key (Eastern Palace)', player), [], ItemFactory(['Map (Eastern Palace)', 'Compass (Eastern Palace)'], player))
|
EP = make_dungeon('Eastern Palace', 'Armos Knights', eastern_regions, ItemFactory('Big Key (Eastern Palace)', player), [], ItemFactory(['Map (Eastern Palace)', 'Compass (Eastern Palace)'], player))
|
||||||
DP = make_dungeon('Desert Palace', 'Lanmolas', ['Desert Palace North', 'Desert Palace Main (Inner)', 'Desert Palace Main (Outer)', 'Desert Palace East'], ItemFactory('Big Key (Desert Palace)', player), [ItemFactory('Small Key (Desert Palace)', player)], ItemFactory(['Map (Desert Palace)', 'Compass (Desert Palace)'], player))
|
DP = make_dungeon('Desert Palace', 'Lanmolas', desert_regions, ItemFactory('Big Key (Desert Palace)', player), [ItemFactory('Small Key (Desert Palace)', player)], ItemFactory(['Map (Desert Palace)', 'Compass (Desert Palace)'], player))
|
||||||
ToH = make_dungeon('Tower of Hera', 'Moldorm', ['Tower of Hera (Bottom)', 'Tower of Hera (Basement)', 'Tower of Hera (Top)'], ItemFactory('Big Key (Tower of Hera)', player), [ItemFactory('Small Key (Tower of Hera)', player)], ItemFactory(['Map (Tower of Hera)', 'Compass (Tower of Hera)'], player))
|
ToH = make_dungeon('Tower of Hera', 'Moldorm', hera_regions, ItemFactory('Big Key (Tower of Hera)', player), [ItemFactory('Small Key (Tower of Hera)', player)], ItemFactory(['Map (Tower of Hera)', 'Compass (Tower of Hera)'], player))
|
||||||
PoD = make_dungeon('Palace of Darkness', 'Helmasaur King', ['Palace of Darkness (Entrance)', 'Palace of Darkness (Center)', 'Palace of Darkness (Big Key Chest)', 'Palace of Darkness (Bonk Section)', 'Palace of Darkness (North)', 'Palace of Darkness (Maze)', 'Palace of Darkness (Harmless Hellway)', 'Palace of Darkness (Final Section)'], ItemFactory('Big Key (Palace of Darkness)', player), ItemFactory(['Small Key (Palace of Darkness)'] * 6, player), ItemFactory(['Map (Palace of Darkness)', 'Compass (Palace of Darkness)'], player))
|
PoD = make_dungeon('Palace of Darkness', 'Helmasaur King', pod_regions, ItemFactory('Big Key (Palace of Darkness)', player), ItemFactory(['Small Key (Palace of Darkness)'] * 6, player), ItemFactory(['Map (Palace of Darkness)', 'Compass (Palace of Darkness)'], player))
|
||||||
TT = make_dungeon('Thieves Town', 'Blind', ['Thieves Town (Entrance)', 'Thieves Town (Deep)', 'Blind Fight'], ItemFactory('Big Key (Thieves Town)', player), [ItemFactory('Small Key (Thieves Town)', player)], ItemFactory(['Map (Thieves Town)', 'Compass (Thieves Town)'], player))
|
TT = make_dungeon('Thieves Town', 'Blind', thieves_regions, ItemFactory('Big Key (Thieves Town)', player), [ItemFactory('Small Key (Thieves Town)', player)], ItemFactory(['Map (Thieves Town)', 'Compass (Thieves Town)'], player))
|
||||||
SW = make_dungeon('Skull Woods', 'Mothula', ['Skull Woods Final Section (Entrance)', 'Skull Woods First Section', 'Skull Woods Second Section', 'Skull Woods Second Section (Drop)', 'Skull Woods Final Section (Mothula)', 'Skull Woods First Section (Right)', 'Skull Woods First Section (Left)', 'Skull Woods First Section (Top)'], ItemFactory('Big Key (Skull Woods)', player), ItemFactory(['Small Key (Skull Woods)'] * 2, player), ItemFactory(['Map (Skull Woods)', 'Compass (Skull Woods)'], player))
|
SW = make_dungeon('Skull Woods', 'Mothula', skull_regions, ItemFactory('Big Key (Skull Woods)', player), ItemFactory(['Small Key (Skull Woods)'] * 3, player), ItemFactory(['Map (Skull Woods)', 'Compass (Skull Woods)'], player))
|
||||||
SP = make_dungeon('Swamp Palace', 'Arrghus', ['Swamp Palace (Entrance)', 'Swamp Palace (First Room)', 'Swamp Palace (Starting Area)', 'Swamp Palace (Center)', 'Swamp Palace (North)'], ItemFactory('Big Key (Swamp Palace)', player), [ItemFactory('Small Key (Swamp Palace)', player)], ItemFactory(['Map (Swamp Palace)', 'Compass (Swamp Palace)'], player))
|
SP = make_dungeon('Swamp Palace', 'Arrghus', swamp_regions, ItemFactory('Big Key (Swamp Palace)', player), [ItemFactory('Small Key (Swamp Palace)', player)], ItemFactory(['Map (Swamp Palace)', 'Compass (Swamp Palace)'], player))
|
||||||
IP = make_dungeon('Ice Palace', 'Kholdstare', ['Ice Palace (Entrance)', 'Ice Palace (Main)', 'Ice Palace (East)', 'Ice Palace (East Top)', 'Ice Palace (Kholdstare)'], ItemFactory('Big Key (Ice Palace)', player), ItemFactory(['Small Key (Ice Palace)'] * 2, player), ItemFactory(['Map (Ice Palace)', 'Compass (Ice Palace)'], player))
|
IP = make_dungeon('Ice Palace', 'Kholdstare', ice_regions, ItemFactory('Big Key (Ice Palace)', player), ItemFactory(['Small Key (Ice Palace)'] * 2, player), ItemFactory(['Map (Ice Palace)', 'Compass (Ice Palace)'], player))
|
||||||
MM = make_dungeon('Misery Mire', 'Vitreous', ['Misery Mire (Entrance)', 'Misery Mire (Main)', 'Misery Mire (West)', 'Misery Mire (Final Area)', 'Misery Mire (Vitreous)'], ItemFactory('Big Key (Misery Mire)', player), ItemFactory(['Small Key (Misery Mire)'] * 3, player), ItemFactory(['Map (Misery Mire)', 'Compass (Misery Mire)'], player))
|
MM = make_dungeon('Misery Mire', 'Vitreous', mire_regions, ItemFactory('Big Key (Misery Mire)', player), ItemFactory(['Small Key (Misery Mire)'] * 3, player), ItemFactory(['Map (Misery Mire)', 'Compass (Misery Mire)'], player))
|
||||||
TR = make_dungeon('Turtle Rock', 'Trinexx', ['Turtle Rock (Entrance)', 'Turtle Rock (First Section)', 'Turtle Rock (Chain Chomp Room)', 'Turtle Rock (Second Section)', 'Turtle Rock (Big Chest)', 'Turtle Rock (Crystaroller Room)', 'Turtle Rock (Dark Room)', 'Turtle Rock (Eye Bridge)', 'Turtle Rock (Trinexx)'], ItemFactory('Big Key (Turtle Rock)', player), ItemFactory(['Small Key (Turtle Rock)'] * 4, player), ItemFactory(['Map (Turtle Rock)', 'Compass (Turtle Rock)'], player))
|
TR = make_dungeon('Turtle Rock', 'Trinexx', tr_regions, ItemFactory('Big Key (Turtle Rock)', player), ItemFactory(['Small Key (Turtle Rock)'] * 4, player), ItemFactory(['Map (Turtle Rock)', 'Compass (Turtle Rock)'], player))
|
||||||
|
|
||||||
if world.mode[player] != 'inverted':
|
if world.mode[player] != 'inverted':
|
||||||
AT = make_dungeon('Agahnims Tower', 'Agahnim', ['Agahnims Tower', 'Agahnim 1'], None, ItemFactory(['Small Key (Agahnims Tower)'] * 2, player), [])
|
AT = make_dungeon('Agahnims Tower', 'Agahnim', tower_regions, None, ItemFactory(['Small Key (Agahnims Tower)'] * 2, player), [])
|
||||||
GT = make_dungeon('Ganons Tower', 'Agahnim2', ['Ganons Tower (Entrance)', 'Ganons Tower (Tile Room)', 'Ganons Tower (Compass Room)', 'Ganons Tower (Hookshot Room)', 'Ganons Tower (Map Room)', 'Ganons Tower (Firesnake Room)', 'Ganons Tower (Teleport Room)', 'Ganons Tower (Bottom)', 'Ganons Tower (Top)', 'Ganons Tower (Before Moldorm)', 'Ganons Tower (Moldorm)', 'Agahnim 2'], ItemFactory('Big Key (Ganons Tower)', player), ItemFactory(['Small Key (Ganons Tower)'] * 4, player), ItemFactory(['Map (Ganons Tower)', 'Compass (Ganons Tower)'], player))
|
GT = make_dungeon('Ganons Tower', 'Agahnim2', gt_regions, ItemFactory('Big Key (Ganons Tower)', player), ItemFactory(['Small Key (Ganons Tower)'] * 4, player), ItemFactory(['Map (Ganons Tower)', 'Compass (Ganons Tower)'], player))
|
||||||
else:
|
else:
|
||||||
AT = make_dungeon('Inverted Agahnims Tower', 'Agahnim', ['Inverted Agahnims Tower', 'Agahnim 1'], None, ItemFactory(['Small Key (Agahnims Tower)'] * 2, player), [])
|
AT = make_dungeon('Inverted Agahnims Tower', 'Agahnim', ['Inverted Agahnims Tower', 'Agahnim 1'], None, ItemFactory(['Small Key (Agahnims Tower)'] * 2, player), [])
|
||||||
GT = make_dungeon('Inverted Ganons Tower', 'Agahnim2', ['Inverted Ganons Tower (Entrance)', 'Ganons Tower (Tile Room)', 'Ganons Tower (Compass Room)', 'Ganons Tower (Hookshot Room)', 'Ganons Tower (Map Room)', 'Ganons Tower (Firesnake Room)', 'Ganons Tower (Teleport Room)', 'Ganons Tower (Bottom)', 'Ganons Tower (Top)', 'Ganons Tower (Before Moldorm)', 'Ganons Tower (Moldorm)', 'Agahnim 2'], ItemFactory('Big Key (Ganons Tower)', player), ItemFactory(['Small Key (Ganons Tower)'] * 4, player), ItemFactory(['Map (Ganons Tower)', 'Compass (Ganons Tower)'], player))
|
GT = make_dungeon('Inverted Ganons Tower', 'Agahnim2', ['Inverted Ganons Tower (Entrance)', 'Ganons Tower (Tile Room)', 'Ganons Tower (Compass Room)', 'Ganons Tower (Hookshot Room)', 'Ganons Tower (Map Room)', 'Ganons Tower (Firesnake Room)', 'Ganons Tower (Teleport Room)', 'Ganons Tower (Bottom)', 'Ganons Tower (Top)', 'Ganons Tower (Before Moldorm)', 'Ganons Tower (Moldorm)', 'Agahnim 2'], ItemFactory('Big Key (Ganons Tower)', player), ItemFactory(['Small Key (Ganons Tower)'] * 4, player), ItemFactory(['Map (Ganons Tower)', 'Compass (Ganons Tower)'], player))
|
||||||
@@ -124,15 +124,15 @@ def get_dungeon_item_pool(world):
|
|||||||
def fill_dungeons_restrictive(world, shuffled_locations):
|
def fill_dungeons_restrictive(world, shuffled_locations):
|
||||||
all_state_base = world.get_all_state()
|
all_state_base = world.get_all_state()
|
||||||
|
|
||||||
for player in range(1, world.players + 1):
|
# for player in range(1, world.players + 1):
|
||||||
pinball_room = world.get_location('Skull Woods - Pinball Room', player)
|
# pinball_room = world.get_location('Skull Woods - Pinball Room', player)
|
||||||
if world.retro[player]:
|
# if world.retro[player]:
|
||||||
world.push_item(pinball_room, ItemFactory('Small Key (Universal)', player), False)
|
# world.push_item(pinball_room, ItemFactory('Small Key (Universal)', player), False)
|
||||||
else:
|
# else:
|
||||||
world.push_item(pinball_room, ItemFactory('Small Key (Skull Woods)', player), False)
|
# world.push_item(pinball_room, ItemFactory('Small Key (Skull Woods)', player), False)
|
||||||
pinball_room.event = True
|
# pinball_room.event = True
|
||||||
pinball_room.locked = True
|
# pinball_room.locked = True
|
||||||
shuffled_locations.remove(pinball_room)
|
# shuffled_locations.remove(pinball_room)
|
||||||
|
|
||||||
# with shuffled dungeon items they are distributed as part of the normal item pool
|
# with shuffled dungeon items they are distributed as part of the normal item pool
|
||||||
for item in world.get_items():
|
for item in world.get_items():
|
||||||
@@ -154,7 +154,6 @@ def fill_dungeons_restrictive(world, shuffled_locations):
|
|||||||
fill_restrictive(world, all_state_base, shuffled_locations, dungeon_items, True)
|
fill_restrictive(world, all_state_base, shuffled_locations, dungeon_items, True)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
dungeon_music_addresses = {'Eastern Palace - Prize': [0x1559A],
|
dungeon_music_addresses = {'Eastern Palace - Prize': [0x1559A],
|
||||||
'Desert Palace - Prize': [0x1559B, 0x1559C, 0x1559D, 0x1559E],
|
'Desert Palace - Prize': [0x1559B, 0x1559C, 0x1559D, 0x1559E],
|
||||||
'Tower of Hera - Prize': [0x155C5, 0x1107A, 0x10B8C],
|
'Tower of Hera - Prize': [0x155C5, 0x1107A, 0x10B8C],
|
||||||
@@ -165,3 +164,224 @@ dungeon_music_addresses = {'Eastern Palace - Prize': [0x1559A],
|
|||||||
'Ice Palace - Prize': [0x155BF],
|
'Ice Palace - Prize': [0x155BF],
|
||||||
'Misery Mire - Prize': [0x155B9],
|
'Misery Mire - Prize': [0x155B9],
|
||||||
'Turtle Rock - Prize': [0x155C7, 0x155A7, 0x155AA, 0x155AB]}
|
'Turtle Rock - Prize': [0x155C7, 0x155A7, 0x155AA, 0x155AB]}
|
||||||
|
|
||||||
|
hyrule_castle_regions = [
|
||||||
|
'Hyrule Castle Lobby', 'Hyrule Castle West Lobby', 'Hyrule Castle East Lobby', 'Hyrule Castle East Hall',
|
||||||
|
'Hyrule Castle West Hall', 'Hyrule Castle Back Hall', 'Hyrule Castle Throne Room', 'Hyrule Dungeon Map Room',
|
||||||
|
'Hyrule Dungeon North Abyss', 'Hyrule Dungeon North Abyss Catwalk', 'Hyrule Dungeon South Abyss',
|
||||||
|
'Hyrule Dungeon South Abyss Catwalk', 'Hyrule Dungeon Guardroom', 'Hyrule Dungeon Armory Main',
|
||||||
|
'Hyrule Dungeon Armory Boomerang', 'Hyrule Dungeon Armory North Branch', 'Hyrule Dungeon Staircase',
|
||||||
|
'Hyrule Dungeon Cellblock', 'Sewers Behind Tapestry', 'Sewers Rope Room', 'Sewers Dark Cross', 'Sewers Water',
|
||||||
|
'Sewers Key Rat', 'Sewers Rat Path', 'Sewers Secret Room Blocked Path', 'Sewers Secret Room',
|
||||||
|
'Sewers Yet More Rats', 'Sewers Pull Switch', 'Sanctuary'
|
||||||
|
]
|
||||||
|
|
||||||
|
eastern_regions = [
|
||||||
|
'Eastern Lobby', 'Eastern Lobby Bridge', 'Eastern Lobby Left Ledge', 'Eastern Lobby Right Ledge',
|
||||||
|
'Eastern Cannonball', 'Eastern Cannonball Ledge', 'Eastern Courtyard Ledge', 'Eastern East Wing',
|
||||||
|
'Eastern Pot Switch', 'Eastern Map Balcony', 'Eastern Map Room', 'Eastern West Wing', 'Eastern Stalfos Spawn',
|
||||||
|
'Eastern Compass Room', 'Eastern Hint Tile', 'Eastern Hint Tile Blocked Path', 'Eastern Courtyard',
|
||||||
|
'Eastern Fairies', 'Eastern Map Valley', 'Eastern Dark Square', 'Eastern Dark Pots', 'Eastern Big Key',
|
||||||
|
'Eastern Darkness', 'Eastern Rupees', 'Eastern Attic Start', 'Eastern False Switches', 'Eastern Cannonball Hell',
|
||||||
|
'Eastern Single Eyegore', 'Eastern Duo Eyegores', 'Eastern Boss'
|
||||||
|
]
|
||||||
|
|
||||||
|
desert_regions = [
|
||||||
|
'Desert Main Lobby', 'Desert Dead End', 'Desert East Lobby', 'Desert East Wing', 'Desert Compass Room',
|
||||||
|
'Desert Cannonball', 'Desert Arrow Pot Corner', 'Desert Trap Room', 'Desert North Hall', 'Desert Map Room',
|
||||||
|
'Desert Sandworm Corner', 'Desert Bonk Torch', 'Desert Circle of Pots', 'Desert Big Chest Room', 'Desert West Wing',
|
||||||
|
'Desert West Lobby', 'Desert Fairy Fountain', 'Desert Back Lobby', 'Desert Tiles 1',
|
||||||
|
'Desert Bridge', 'Desert Four Statues', 'Desert Beamos Hall', 'Desert Tiles 2', 'Desert Wall Slide', 'Desert Boss',
|
||||||
|
]
|
||||||
|
|
||||||
|
hera_regions = [
|
||||||
|
'Hera Lobby', 'Hera Basement Cage', 'Hera Tile Room', 'Hera Tridorm', 'Hera Torches', 'Hera Beetles',
|
||||||
|
'Hera Startile Corner', 'Hera Startile Wide', 'Hera 4F', 'Hera Big Chest Landing', 'Hera 5F',
|
||||||
|
'Hera Fairies', 'Hera Boss'
|
||||||
|
]
|
||||||
|
|
||||||
|
tower_regions = [
|
||||||
|
'Tower Lobby', 'Tower Gold Knights', 'Tower Room 03', 'Tower Lone Statue', 'Tower Dark Maze', 'Tower Dark Chargers',
|
||||||
|
'Tower Dual Statues', 'Tower Dark Pits', 'Tower Dark Archers', 'Tower Red Spears', 'Tower Red Guards',
|
||||||
|
'Tower Circle of Pots', 'Tower Pacifist Run', 'Tower Push Statue', 'Tower Catwalk', 'Tower Antechamber',
|
||||||
|
'Tower Altar', 'Tower Agahnim 1'
|
||||||
|
]
|
||||||
|
|
||||||
|
pod_regions = [
|
||||||
|
'PoD Lobby', 'PoD Left Cage', 'PoD Middle Cage', 'PoD Shooter Room', 'PoD Pit Room', 'PoD Arena Main',
|
||||||
|
'PoD Arena North', 'PoD Arena Crystal', 'PoD Arena Bridge', 'PoD Arena Ledge', 'PoD Sexy Statue', 'PoD Map Balcony',
|
||||||
|
'PoD Conveyor', 'PoD Mimics 1', 'PoD Jelly Hall', 'PoD Warp Hint', 'PoD Warp Room', 'PoD Stalfos Basement',
|
||||||
|
'PoD Basement Ledge', 'PoD Big Key Landing', 'PoD Falling Bridge', 'PoD Dark Maze', 'PoD Big Chest Balcony',
|
||||||
|
'PoD Compass Room', 'PoD Dark Basement', 'PoD Harmless Hellway', 'PoD Mimics 2', 'PoD Bow Statue', 'PoD Dark Pegs',
|
||||||
|
'PoD Lonely Turtle', 'PoD Turtle Party', 'PoD Dark Alley', 'PoD Callback', 'PoD Boss'
|
||||||
|
]
|
||||||
|
|
||||||
|
swamp_regions = [
|
||||||
|
'Swamp Lobby', 'Swamp Entrance', 'Swamp Pot Row', 'Swamp Map Ledge', 'Swamp Trench 1 Approach',
|
||||||
|
'Swamp Trench 1 Nexus', 'Swamp Trench 1 Alcove', 'Swamp Trench 1 Key Ledge', 'Swamp Trench 1 Departure',
|
||||||
|
'Swamp Hammer Switch', 'Swamp Hub', 'Swamp Hub Dead Ledge', 'Swamp Hub North Ledge', 'Swamp Donut Top',
|
||||||
|
'Swamp Donut Bottom', 'Swamp Compass Donut', 'Swamp Crystal Switch', 'Swamp Shortcut', 'Swamp Trench 2 Pots',
|
||||||
|
'Swamp Trench 2 Blocks', 'Swamp Trench 2 Alcove', 'Swamp Trench 2 Departure', 'Swamp Big Key Ledge',
|
||||||
|
'Swamp West Shallows', 'Swamp West Block Path', 'Swamp West Ledge', 'Swamp Barrier Ledge', 'Swamp Barrier',
|
||||||
|
'Swamp Attic', 'Swamp Push Statue', 'Swamp Shooters', 'Swamp Left Elbow', 'Swamp Right Elbow', 'Swamp Drain Left',
|
||||||
|
'Swamp Drain Right', 'Swamp Flooded Room', 'Swamp Flooded Spot', 'Swamp Basement Shallows', 'Swamp Waterfall Room',
|
||||||
|
'Swamp Refill', 'Swamp Behind Waterfall', 'Swamp C', 'Swamp Waterway', 'Swamp I', 'Swamp T', 'Swamp Boss'
|
||||||
|
]
|
||||||
|
|
||||||
|
skull_regions = [
|
||||||
|
'Skull 1 Lobby', 'Skull Map Room', 'Skull Pot Circle', 'Skull Pull Switch', 'Skull Big Chest', 'Skull Pinball',
|
||||||
|
'Skull Pot Prison', 'Skull Compass Room', 'Skull Left Drop', 'Skull 2 East Lobby', 'Skull Big Key',
|
||||||
|
'Skull Lone Pot', 'Skull Small Hall', 'Skull Back Drop', 'Skull 2 West Lobby', 'Skull X Room', 'Skull 3 Lobby',
|
||||||
|
'Skull East Bridge', 'Skull West Bridge Nook', 'Skull Star Pits', 'Skull Torch Room', 'Skull Vines',
|
||||||
|
'Skull Spike Corner', 'Skull Final Drop', 'Skull Boss'
|
||||||
|
]
|
||||||
|
|
||||||
|
thieves_regions = [
|
||||||
|
'Thieves Lobby', 'Thieves Ambush', 'Thieves BK Corner', 'Thieves Rail Ledge', 'Thieves Compass Room',
|
||||||
|
'Thieves Big Chest Nook', 'Thieves Hallway', 'Thieves Boss', 'Thieves Pot Alcove Mid', 'Thieves Pot Alcove Bottom',
|
||||||
|
'Thieves Pot Alcove Top', 'Thieves Conveyor Maze', 'Thieves Spike Track', 'Thieves Hellway',
|
||||||
|
'Thieves Hellway N Crystal', 'Thieves Hellway S Crystal', 'Thieves Triple Bypass', 'Thieves Spike Switch',
|
||||||
|
'Thieves Attic', 'Thieves Cricket Hall Left', 'Thieves Cricket Hall Right', 'Thieves Attic Window',
|
||||||
|
'Thieves Basement Block', 'Thieves Blocked Entry', 'Thieves Lonely Zazak', 'Thieves Blind\'s Cell',
|
||||||
|
'Thieves Conveyor Bridge', 'Thieves Conveyor Block', 'Thieves Big Chest Room', 'Thieves Trap'
|
||||||
|
]
|
||||||
|
|
||||||
|
ice_regions = [
|
||||||
|
'Ice Lobby', 'Ice Jelly Key', 'Ice Floor Switch', 'Ice Cross Left', 'Ice Cross Bottom', 'Ice Cross Right',
|
||||||
|
'Ice Cross Top', 'Ice Compass Room', 'Ice Pengator Switch', 'Ice Dead End', 'Ice Big Key', 'Ice Bomb Drop',
|
||||||
|
'Ice Stalfos Hint', 'Ice Conveyor', 'Ice Bomb Jump Ledge', 'Ice Bomb Jump Catwalk', 'Ice Narrow Corridor',
|
||||||
|
'Ice Pengator Trap', 'Ice Spike Cross', 'Ice Firebar', 'Ice Falling Square', 'Ice Spike Room', 'Ice Hammer Block',
|
||||||
|
'Ice Tongue Pull', 'Ice Freezors', 'Ice Freezors Ledge', 'Ice Tall Hint', 'Ice Hookshot Ledge',
|
||||||
|
'Ice Hookshot Balcony', 'Ice Spikeball', 'Ice Lonely Freezor', 'Iced T', 'Ice Catwalk', 'Ice Many Pots',
|
||||||
|
'Ice Crystal Right', 'Ice Crystal Left', 'Ice Crystal Block', 'Ice Big Chest View', 'Ice Big Chest Landing',
|
||||||
|
'Ice Backwards Room', 'Ice Anti-Fairy', 'Ice Switch Room', 'Ice Refill', 'Ice Fairy', 'Ice Antechamber', 'Ice Boss'
|
||||||
|
]
|
||||||
|
|
||||||
|
mire_regions = [
|
||||||
|
'Mire Lobby', 'Mire Post-Gap', 'Mire 2', 'Mire Hub', 'Mire Hub Right', 'Mire Hub Top', 'Mire Lone Shooter',
|
||||||
|
'Mire Failure Bridge', 'Mire Falling Bridge', 'Mire Map Spike Side', 'Mire Map Spot', 'Mire Crystal Dead End',
|
||||||
|
'Mire Hidden Shooters', 'Mire Cross', 'Mire Minibridge', 'Mire BK Door Room', 'Mire Spikes', 'Mire Ledgehop',
|
||||||
|
'Mire Bent Bridge', 'Mire Over Bridge', 'Mire Right Bridge', 'Mire Left Bridge', 'Mire Fishbone', 'Mire South Fish',
|
||||||
|
'Mire Spike Barrier', 'Mire Square Rail', 'Mire Lone Warp', 'Mire Wizzrobe Bypass', 'Mire Conveyor Crystal',
|
||||||
|
'Mire Tile Room', 'Mire Compass Room', 'Mire Compass Chest', 'Mire Neglected Room', 'Mire Chest View',
|
||||||
|
'Mire Conveyor Barrier', 'Mire BK Chest Ledge', 'Mire Warping Pool', 'Mire Torches Top', 'Mire Torches Bottom',
|
||||||
|
'Mire Attic Hint', 'Mire Dark Shooters', 'Mire Key Rupees', 'Mire Block X', 'Mire Tall Dark and Roomy',
|
||||||
|
'Mire Crystal Right', 'Mire Crystal Mid', 'Mire Crystal Left', 'Mire Crystal Top', 'Mire Shooter Rupees',
|
||||||
|
'Mire Falling Foes', 'Mire Firesnake Skip', 'Mire Antechamber', 'Mire Boss'
|
||||||
|
]
|
||||||
|
|
||||||
|
tr_regions = [
|
||||||
|
'TR Main Lobby', 'TR Lobby Ledge', 'TR Compass Room', 'TR Hub', 'TR Torches Ledge', 'TR Torches', 'TR Roller Room',
|
||||||
|
'TR Tile Room', 'TR Refill', 'TR Pokey 1', 'TR Chain Chomps', 'TR Pipe Pit', 'TR Pipe Ledge', 'TR Lava Dual Pipes',
|
||||||
|
'TR Lava Island', 'TR Lava Escape', 'TR Pokey 2', 'TR Twin Pokeys', 'TR Hallway', 'TR Dodgers', 'TR Big View',
|
||||||
|
'TR Big Chest', 'TR Big Chest Entrance', 'TR Lazy Eyes', 'TR Dash Room', 'TR Tongue Pull', 'TR Rupees',
|
||||||
|
'TR Crystaroller', 'TR Dark Ride', 'TR Dash Bridge', 'TR Eye Bridge', 'TR Crystal Maze', 'TR Crystal Maze End',
|
||||||
|
'TR Final Abyss', 'TR Boss'
|
||||||
|
]
|
||||||
|
|
||||||
|
gt_regions = [
|
||||||
|
'GT Lobby', 'GT Bob\'s Torch', 'GT Hope Room', 'GT Big Chest', 'GT Blocked Stairs', 'GT Bob\'s Room',
|
||||||
|
'GT Tile Room', 'GT Speed Torch', 'GT Pots n Blocks', 'GT Crystal Conveyor', 'GT Compass Room',
|
||||||
|
'GT Invisible Bridges', 'GT Invisible Catwalk', 'GT Conveyor Cross', 'GT Hookshot East Platform',
|
||||||
|
'GT Hookshot North Platform', 'GT Hookshot South Platform', 'GT Hookshot South Entry', 'GT Map Room',
|
||||||
|
'GT Double Switch Entry', 'GT Double Switch Switches', 'GT Double Switch Transition', 'GT Double Switch Key Spot',
|
||||||
|
'GT Double Switch Exit', 'GT Spike Crystals', 'GT Warp Maze - Left Section', 'GT Warp Maze - Mid Section',
|
||||||
|
'GT Warp Maze - Right Section', 'GT Warp Maze - Pit Section', 'GT Warp Maze - Pit Exit Warp Spot',
|
||||||
|
'GT Warp Maze Exit Section', 'GT Firesnake Room', 'GT Firesnake Room Ledge', 'GT Warp Maze - Rail Choice',
|
||||||
|
'GT Warp Maze - Rando Rail', 'GT Warp Maze - Main Rails', 'GT Warp Maze - Pot Rail', 'GT Trap Room',
|
||||||
|
'GT Conveyor Star Pits', 'GT Hidden Star', 'GT DMs Room', 'GT Falling Bridge', 'GT Randomizer Room', 'GT Ice Armos',
|
||||||
|
'GT Big Key Room', 'GT Four Torches', 'GT Fairy Abyss', 'GT Crystal Paths', 'GT Mimics 1', 'GT Mimics 2',
|
||||||
|
'GT Dash Hall', 'GT Hidden Spikes', 'GT Cannonball Bridge', 'GT Refill', 'GT Gauntlet 1', 'GT Gauntlet 2',
|
||||||
|
'GT Gauntlet 3', 'GT Gauntlet 4', 'GT Gauntlet 5', 'GT Beam Dash', 'GT Lanmolas 2', 'GT Quad Pot', 'GT Wizzrobes 1',
|
||||||
|
'GT Dashing Bridge', 'GT Wizzrobes 2', 'GT Conveyor Bridge', 'GT Torch Cross', 'GT Staredown', 'GT Falling Torches',
|
||||||
|
'GT Mini Helmasaur Room', 'GT Bomb Conveyor', 'GT Crystal Circles', 'GT Left Moldorm Ledge',
|
||||||
|
'GT Right Moldorm Ledge', 'GT Moldorm', 'GT Moldorm Pit', 'GT Validation', 'GT Validation Door', 'GT Frozen Over',
|
||||||
|
'GT Brightly Lit Hall', 'GT Agahnim 2'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
dungeon_regions = {
|
||||||
|
'Hyrule Castle': hyrule_castle_regions,
|
||||||
|
'Eastern Palace': eastern_regions,
|
||||||
|
'Desert Palace': desert_regions,
|
||||||
|
'Tower of Hera': hera_regions,
|
||||||
|
'Agahnims Tower': tower_regions,
|
||||||
|
'Palace of Darkness': pod_regions,
|
||||||
|
'Swamp Palace': swamp_regions,
|
||||||
|
'Skull Woods': skull_regions,
|
||||||
|
'Thieves Town': thieves_regions,
|
||||||
|
'Ice Palace': ice_regions,
|
||||||
|
'Misery Mire': mire_regions,
|
||||||
|
'Turtle Rock': tr_regions,
|
||||||
|
'Ganons Tower': gt_regions
|
||||||
|
}
|
||||||
|
|
||||||
|
region_starts = {
|
||||||
|
'Hyrule Castle': ['Hyrule Castle Lobby', 'Hyrule Castle West Lobby', 'Hyrule Castle East Lobby', 'Sewers Rat Path', 'Sanctuary'],
|
||||||
|
'Eastern Palace': ['Eastern Lobby'],
|
||||||
|
'Desert Palace': ['Desert Back Lobby', 'Desert Main Lobby', 'Desert West Lobby', 'Desert East Lobby'],
|
||||||
|
'Tower of Hera': ['Hera Lobby'],
|
||||||
|
'Agahnims Tower': ['Tower Lobby'],
|
||||||
|
'Palace of Darkness': ['PoD Lobby'],
|
||||||
|
'Swamp Palace': ['Swamp Lobby'],
|
||||||
|
'Skull Woods': ['Skull 1 Lobby', 'Skull 2 East Lobby', 'Skull 2 West Lobby', 'Skull 3 Lobby', 'Skull Pot Circle',
|
||||||
|
'Skull Pinball', 'Skull Left Drop', 'Skull Back Drop'],
|
||||||
|
'Thieves Town': ['Thieves Lobby'],
|
||||||
|
'Ice Palace': ['Ice Lobby'],
|
||||||
|
'Misery Mire': ['Mire Lobby'],
|
||||||
|
'Turtle Rock': ['TR Main Lobby', 'TR Lazy Eyes', 'TR Big Chest Entrance', 'TR Eye Bridge'],
|
||||||
|
'Ganons Tower': ['GT Lobby']
|
||||||
|
}
|
||||||
|
|
||||||
|
split_region_starts = {
|
||||||
|
'Desert Palace': {
|
||||||
|
'Back': ['Desert Back Lobby'],
|
||||||
|
'Main': ['Desert Main Lobby', 'Desert West Lobby', 'Desert East Lobby']
|
||||||
|
},
|
||||||
|
'Skull Woods': {
|
||||||
|
'1': ['Skull 1 Lobby', 'Skull Pot Circle'],
|
||||||
|
'2': ['Skull 2 West Lobby', 'Skull 2 East Lobby', 'Skull Back Drop'],
|
||||||
|
'3': ['Skull 3 Lobby']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
flexible_starts = {
|
||||||
|
'Skull Woods': ['Skull Left Drop', 'Skull Pinball']
|
||||||
|
}
|
||||||
|
|
||||||
|
drop_entrances = [
|
||||||
|
'Sewers Rat Path', 'Skull Pinball', 'Skull Left Drop' # Pot circle, Back drop have unique access
|
||||||
|
]
|
||||||
|
|
||||||
|
dungeon_keys = {
|
||||||
|
'Hyrule Castle': 'Small Key (Escape)',
|
||||||
|
'Eastern Palace': 'Small Key (Eastern Palace)',
|
||||||
|
'Desert Palace': 'Small Key (Desert Palace)',
|
||||||
|
'Tower of Hera': 'Small Key (Tower of Hera)',
|
||||||
|
'Agahnims Tower': 'Small Key (Agahnims Tower)',
|
||||||
|
'Palace of Darkness': 'Small Key (Palace of Darkness)',
|
||||||
|
'Swamp Palace': 'Small Key (Swamp Palace)',
|
||||||
|
'Skull Woods': 'Small Key (Skull Woods)',
|
||||||
|
'Thieves Town': 'Small Key (Thieves Town)',
|
||||||
|
'Ice Palace': 'Small Key (Ice Palace)',
|
||||||
|
'Misery Mire': 'Small Key (Misery Mire)',
|
||||||
|
'Turtle Rock': 'Small Key (Turtle Rock)',
|
||||||
|
'Ganons Tower': 'Small Key (Ganons Tower)'
|
||||||
|
}
|
||||||
|
|
||||||
|
dungeon_bigs = {
|
||||||
|
'Hyrule Castle': 'Big Key (Escape)',
|
||||||
|
'Eastern Palace': 'Big Key (Eastern Palace)',
|
||||||
|
'Desert Palace': 'Big Key (Desert Palace)',
|
||||||
|
'Tower of Hera': 'Big Key (Tower of Hera)',
|
||||||
|
'Agahnims Tower': 'Big Key (Agahnims Tower)',
|
||||||
|
'Palace of Darkness': 'Big Key (Palace of Darkness)',
|
||||||
|
'Swamp Palace': 'Big Key (Swamp Palace)',
|
||||||
|
'Skull Woods': 'Big Key (Skull Woods)',
|
||||||
|
'Thieves Town': 'Big Key (Thieves Town)',
|
||||||
|
'Ice Palace': 'Big Key (Ice Palace)',
|
||||||
|
'Misery Mire': 'Big Key (Misery Mire)',
|
||||||
|
'Turtle Rock': 'Big Key (Turtle Rock)',
|
||||||
|
'Ganons Tower': 'Big Key (Ganons Tower)'
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
+35
-134
@@ -1049,7 +1049,7 @@ def link_entrances(world, player):
|
|||||||
raise NotImplementedError('Shuffling not supported yet')
|
raise NotImplementedError('Shuffling not supported yet')
|
||||||
|
|
||||||
# check for swamp palace fix
|
# check for swamp palace fix
|
||||||
if world.get_entrance('Dam', player).connected_region.name != 'Dam' or world.get_entrance('Swamp Palace', player).connected_region.name != 'Swamp Palace (Entrance)':
|
if world.get_entrance('Dam', player).connected_region.name != 'Dam' or world.get_entrance('Swamp Palace', player).connected_region.name != 'Swamp Lobby':
|
||||||
world.swamp_patch_required[player] = True
|
world.swamp_patch_required[player] = True
|
||||||
|
|
||||||
# check for potion shop location
|
# check for potion shop location
|
||||||
@@ -1061,7 +1061,7 @@ def link_entrances(world, player):
|
|||||||
world.ganon_at_pyramid[player] = False
|
world.ganon_at_pyramid[player] = False
|
||||||
|
|
||||||
# check for Ganon's Tower location
|
# check for Ganon's Tower location
|
||||||
if world.get_entrance('Ganons Tower', player).connected_region.name != 'Ganons Tower (Entrance)':
|
if world.get_entrance('Ganons Tower', player).connected_region.name != 'GT Lobby':
|
||||||
world.ganonstower_vanilla[player] = False
|
world.ganonstower_vanilla[player] = False
|
||||||
|
|
||||||
def link_inverted_entrances(world, player):
|
def link_inverted_entrances(world, player):
|
||||||
@@ -1997,7 +1997,7 @@ def connect_doors(world, doors, targets, player):
|
|||||||
|
|
||||||
def skull_woods_shuffle(world, player):
|
def skull_woods_shuffle(world, player):
|
||||||
connect_random(world, ['Skull Woods First Section Hole (East)', 'Skull Woods First Section Hole (West)', 'Skull Woods First Section Hole (North)', 'Skull Woods Second Section Hole'],
|
connect_random(world, ['Skull Woods First Section Hole (East)', 'Skull Woods First Section Hole (West)', 'Skull Woods First Section Hole (North)', 'Skull Woods Second Section Hole'],
|
||||||
['Skull Woods First Section (Left)', 'Skull Woods First Section (Right)', 'Skull Woods First Section (Top)', 'Skull Woods Second Section (Drop)'], player)
|
['Skull Left Drop', 'Skull Pinball', 'Skull Pot Circle', 'Skull Back Drop'], player)
|
||||||
connect_random(world, ['Skull Woods First Section Door', 'Skull Woods Second Section Door (East)', 'Skull Woods Second Section Door (West)'],
|
connect_random(world, ['Skull Woods First Section Door', 'Skull Woods Second Section Door (East)', 'Skull Woods Second Section Door (West)'],
|
||||||
['Skull Woods First Section Exit', 'Skull Woods Second Section Exit (East)', 'Skull Woods Second Section Exit (West)'], player, True)
|
['Skull Woods First Section Exit', 'Skull Woods Second Section Exit (East)', 'Skull Woods Second Section Exit (West)'], player, True)
|
||||||
|
|
||||||
@@ -2819,7 +2819,6 @@ mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia Central
|
|||||||
('Kakariko Well (top to bottom)', 'Kakariko Well (bottom)'),
|
('Kakariko Well (top to bottom)', 'Kakariko Well (bottom)'),
|
||||||
('Master Sword Meadow', 'Master Sword Meadow'),
|
('Master Sword Meadow', 'Master Sword Meadow'),
|
||||||
('Hobo Bridge', 'Hobo Bridge'),
|
('Hobo Bridge', 'Hobo Bridge'),
|
||||||
('Desert Palace East Wing', 'Desert Palace East'),
|
|
||||||
('Bat Cave Drop Ledge', 'Bat Cave Drop Ledge'),
|
('Bat Cave Drop Ledge', 'Bat Cave Drop Ledge'),
|
||||||
('Bat Cave Door', 'Bat Cave (left)'),
|
('Bat Cave Door', 'Bat Cave (left)'),
|
||||||
('Lost Woods Hideout (top to bottom)', 'Lost Woods Hideout (bottom)'),
|
('Lost Woods Hideout (top to bottom)', 'Lost Woods Hideout (bottom)'),
|
||||||
@@ -2830,12 +2829,7 @@ mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia Central
|
|||||||
('Desert Ledge Return Rocks', 'Desert Ledge'),
|
('Desert Ledge Return Rocks', 'Desert Ledge'),
|
||||||
('Hyrule Castle Ledge Courtyard Drop', 'Hyrule Castle Courtyard'),
|
('Hyrule Castle Ledge Courtyard Drop', 'Hyrule Castle Courtyard'),
|
||||||
('Hyrule Castle Main Gate', 'Hyrule Castle Courtyard'),
|
('Hyrule Castle Main Gate', 'Hyrule Castle Courtyard'),
|
||||||
('Throne Room', 'Sewers (Dark)'),
|
('Sewer Drop', 'Sewers Rat Path'),
|
||||||
('Sewers Door', 'Sewers'),
|
|
||||||
('Sanctuary Push Door', 'Sanctuary'),
|
|
||||||
('Sewer Drop', 'Sewers'),
|
|
||||||
('Sewers Back Door', 'Sewers (Dark)'),
|
|
||||||
('Agahnim 1', 'Agahnim 1'),
|
|
||||||
('Flute Spot 1', 'Death Mountain'),
|
('Flute Spot 1', 'Death Mountain'),
|
||||||
('Death Mountain Entrance Rock', 'Death Mountain Entrance'),
|
('Death Mountain Entrance Rock', 'Death Mountain Entrance'),
|
||||||
('Death Mountain Entrance Drop', 'Light World'),
|
('Death Mountain Entrance Drop', 'Light World'),
|
||||||
@@ -2854,8 +2848,6 @@ mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia Central
|
|||||||
('Death Mountain (Top)', 'Death Mountain (Top)'),
|
('Death Mountain (Top)', 'Death Mountain (Top)'),
|
||||||
('Death Mountain Drop', 'Death Mountain'),
|
('Death Mountain Drop', 'Death Mountain'),
|
||||||
('Spectacle Rock Drop', 'Death Mountain (Top)'),
|
('Spectacle Rock Drop', 'Death Mountain (Top)'),
|
||||||
('Tower of Hera Small Key Door', 'Tower of Hera (Basement)'),
|
|
||||||
('Tower of Hera Big Key Door', 'Tower of Hera (Top)'),
|
|
||||||
|
|
||||||
('Top of Pyramid', 'East Dark World'),
|
('Top of Pyramid', 'East Dark World'),
|
||||||
('Dark Lake Hylia Drop (East)', 'Dark Lake Hylia'),
|
('Dark Lake Hylia Drop (East)', 'Dark Lake Hylia'),
|
||||||
@@ -2923,66 +2915,6 @@ mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia Central
|
|||||||
('Mimic Cave Mirror Spot', 'Mimic Cave Ledge'),
|
('Mimic Cave Mirror Spot', 'Mimic Cave Ledge'),
|
||||||
('Cave 45 Mirror Spot', 'Cave 45 Ledge'),
|
('Cave 45 Mirror Spot', 'Cave 45 Ledge'),
|
||||||
('Graveyard Ledge Mirror Spot', 'Graveyard Ledge'),
|
('Graveyard Ledge Mirror Spot', 'Graveyard Ledge'),
|
||||||
|
|
||||||
('Swamp Palace Moat', 'Swamp Palace (First Room)'),
|
|
||||||
('Swamp Palace Small Key Door', 'Swamp Palace (Starting Area)'),
|
|
||||||
('Swamp Palace (Center)', 'Swamp Palace (Center)'),
|
|
||||||
('Swamp Palace (North)', 'Swamp Palace (North)'),
|
|
||||||
('Thieves Town Big Key Door', 'Thieves Town (Deep)'),
|
|
||||||
('Skull Woods Torch Room', 'Skull Woods Final Section (Mothula)'),
|
|
||||||
('Skull Woods First Section Bomb Jump', 'Skull Woods First Section (Top)'), # represents bomb jumping to big chest
|
|
||||||
('Skull Woods First Section South Door', 'Skull Woods First Section (Right)'),
|
|
||||||
('Skull Woods First Section West Door', 'Skull Woods First Section (Left)'),
|
|
||||||
('Skull Woods First Section (Right) North Door', 'Skull Woods First Section'),
|
|
||||||
('Skull Woods First Section (Left) Door to Right', 'Skull Woods First Section (Right)'),
|
|
||||||
('Skull Woods First Section (Left) Door to Exit', 'Skull Woods First Section'),
|
|
||||||
('Skull Woods First Section (Top) One-Way Path', 'Skull Woods First Section'),
|
|
||||||
('Skull Woods Second Section (Drop)', 'Skull Woods Second Section'),
|
|
||||||
('Blind Fight', 'Blind Fight'),
|
|
||||||
('Desert Palace Pots (Outer)', 'Desert Palace Main (Inner)'),
|
|
||||||
('Desert Palace Pots (Inner)', 'Desert Palace Main (Outer)'),
|
|
||||||
('Ice Palace Entrance Room', 'Ice Palace (Main)'),
|
|
||||||
('Ice Palace (East)', 'Ice Palace (East)'),
|
|
||||||
('Ice Palace (East Top)', 'Ice Palace (East Top)'),
|
|
||||||
('Ice Palace (Kholdstare)', 'Ice Palace (Kholdstare)'),
|
|
||||||
('Misery Mire Entrance Gap', 'Misery Mire (Main)'),
|
|
||||||
('Misery Mire (West)', 'Misery Mire (West)'),
|
|
||||||
('Misery Mire Big Key Door', 'Misery Mire (Final Area)'),
|
|
||||||
('Misery Mire (Vitreous)', 'Misery Mire (Vitreous)'),
|
|
||||||
('Turtle Rock Entrance Gap', 'Turtle Rock (First Section)'),
|
|
||||||
('Turtle Rock Entrance Gap Reverse', 'Turtle Rock (Entrance)'),
|
|
||||||
('Turtle Rock Pokey Room', 'Turtle Rock (Chain Chomp Room)'),
|
|
||||||
('Turtle Rock (Chain Chomp Room) (North)', 'Turtle Rock (Second Section)'),
|
|
||||||
('Turtle Rock (Chain Chomp Room) (South)', 'Turtle Rock (First Section)'),
|
|
||||||
('Turtle Rock Chain Chomp Staircase', 'Turtle Rock (Chain Chomp Room)'),
|
|
||||||
('Turtle Rock (Big Chest) (North)', 'Turtle Rock (Second Section)'),
|
|
||||||
('Turtle Rock Big Key Door', 'Turtle Rock (Crystaroller Room)'),
|
|
||||||
('Turtle Rock Big Key Door Reverse', 'Turtle Rock (Second Section)'),
|
|
||||||
('Turtle Rock Dark Room Staircase', 'Turtle Rock (Dark Room)'),
|
|
||||||
('Turtle Rock (Dark Room) (North)', 'Turtle Rock (Crystaroller Room)'),
|
|
||||||
('Turtle Rock (Dark Room) (South)', 'Turtle Rock (Eye Bridge)'),
|
|
||||||
('Turtle Rock Dark Room (South)', 'Turtle Rock (Dark Room)'),
|
|
||||||
('Turtle Rock (Trinexx)', 'Turtle Rock (Trinexx)'),
|
|
||||||
('Palace of Darkness Bridge Room', 'Palace of Darkness (Center)'),
|
|
||||||
('Palace of Darkness Bonk Wall', 'Palace of Darkness (Bonk Section)'),
|
|
||||||
('Palace of Darkness Big Key Chest Staircase', 'Palace of Darkness (Big Key Chest)'),
|
|
||||||
('Palace of Darkness (North)', 'Palace of Darkness (North)'),
|
|
||||||
('Palace of Darkness Big Key Door', 'Palace of Darkness (Final Section)'),
|
|
||||||
('Palace of Darkness Hammer Peg Drop', 'Palace of Darkness (Center)'),
|
|
||||||
('Palace of Darkness Spike Statue Room Door', 'Palace of Darkness (Harmless Hellway)'),
|
|
||||||
('Palace of Darkness Maze Door', 'Palace of Darkness (Maze)'),
|
|
||||||
('Ganons Tower (Tile Room)', 'Ganons Tower (Tile Room)'),
|
|
||||||
('Ganons Tower (Tile Room) Key Door', 'Ganons Tower (Compass Room)'),
|
|
||||||
('Ganons Tower (Bottom) (East)', 'Ganons Tower (Bottom)'),
|
|
||||||
('Ganons Tower (Hookshot Room)', 'Ganons Tower (Hookshot Room)'),
|
|
||||||
('Ganons Tower (Map Room)', 'Ganons Tower (Map Room)'),
|
|
||||||
('Ganons Tower (Double Switch Room)', 'Ganons Tower (Firesnake Room)'),
|
|
||||||
('Ganons Tower (Firesnake Room)', 'Ganons Tower (Teleport Room)'),
|
|
||||||
('Ganons Tower (Bottom) (West)', 'Ganons Tower (Bottom)'),
|
|
||||||
('Ganons Tower Big Key Door', 'Ganons Tower (Top)'),
|
|
||||||
('Ganons Tower Torch Rooms', 'Ganons Tower (Before Moldorm)'),
|
|
||||||
('Ganons Tower Moldorm Door', 'Ganons Tower (Moldorm)'),
|
|
||||||
('Ganons Tower Moldorm Gap', 'Agahnim 2'),
|
|
||||||
('Ganon Drop', 'Bottom of Pyramid'),
|
('Ganon Drop', 'Bottom of Pyramid'),
|
||||||
('Pyramid Drop', 'East Dark World')
|
('Pyramid Drop', 'East Dark World')
|
||||||
]
|
]
|
||||||
@@ -2995,7 +2927,6 @@ inverted_mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia
|
|||||||
('Kakariko Well (top to bottom)', 'Kakariko Well (bottom)'),
|
('Kakariko Well (top to bottom)', 'Kakariko Well (bottom)'),
|
||||||
('Master Sword Meadow', 'Master Sword Meadow'),
|
('Master Sword Meadow', 'Master Sword Meadow'),
|
||||||
('Hobo Bridge', 'Hobo Bridge'),
|
('Hobo Bridge', 'Hobo Bridge'),
|
||||||
('Desert Palace East Wing', 'Desert Palace East'),
|
|
||||||
('Bat Cave Drop Ledge', 'Bat Cave Drop Ledge'),
|
('Bat Cave Drop Ledge', 'Bat Cave Drop Ledge'),
|
||||||
('Bat Cave Door', 'Bat Cave (left)'),
|
('Bat Cave Door', 'Bat Cave (left)'),
|
||||||
('Lost Woods Hideout (top to bottom)', 'Lost Woods Hideout (bottom)'),
|
('Lost Woods Hideout (top to bottom)', 'Lost Woods Hideout (bottom)'),
|
||||||
@@ -3025,8 +2956,6 @@ inverted_mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia
|
|||||||
('East Death Mountain (Top)', 'East Death Mountain (Top)'),
|
('East Death Mountain (Top)', 'East Death Mountain (Top)'),
|
||||||
('Death Mountain (Top)', 'Death Mountain (Top)'),
|
('Death Mountain (Top)', 'Death Mountain (Top)'),
|
||||||
('Death Mountain Drop', 'Death Mountain'),
|
('Death Mountain Drop', 'Death Mountain'),
|
||||||
('Tower of Hera Small Key Door', 'Tower of Hera (Basement)'),
|
|
||||||
('Tower of Hera Big Key Door', 'Tower of Hera (Top)'),
|
|
||||||
('Dark Lake Hylia Drop (East)', 'Dark Lake Hylia'),
|
('Dark Lake Hylia Drop (East)', 'Dark Lake Hylia'),
|
||||||
('Dark Lake Hylia Drop (South)', 'Dark Lake Hylia'),
|
('Dark Lake Hylia Drop (South)', 'Dark Lake Hylia'),
|
||||||
('Dark Lake Hylia Teleporter', 'Dark Lake Hylia'),
|
('Dark Lake Hylia Teleporter', 'Dark Lake Hylia'),
|
||||||
@@ -3066,9 +2995,7 @@ inverted_mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia
|
|||||||
('Swamp Palace Small Key Door', 'Swamp Palace (Starting Area)'),
|
('Swamp Palace Small Key Door', 'Swamp Palace (Starting Area)'),
|
||||||
('Swamp Palace (Center)', 'Swamp Palace (Center)'),
|
('Swamp Palace (Center)', 'Swamp Palace (Center)'),
|
||||||
('Swamp Palace (North)', 'Swamp Palace (North)'),
|
('Swamp Palace (North)', 'Swamp Palace (North)'),
|
||||||
('Thieves Town Big Key Door', 'Thieves Town (Deep)'),
|
|
||||||
('Skull Woods Torch Room', 'Skull Woods Final Section (Mothula)'),
|
('Skull Woods Torch Room', 'Skull Woods Final Section (Mothula)'),
|
||||||
('Skull Woods First Section Bomb Jump', 'Skull Woods First Section (Top)'),
|
|
||||||
('Skull Woods First Section South Door', 'Skull Woods First Section (Right)'),
|
('Skull Woods First Section South Door', 'Skull Woods First Section (Right)'),
|
||||||
('Skull Woods First Section West Door', 'Skull Woods First Section (Left)'),
|
('Skull Woods First Section West Door', 'Skull Woods First Section (Left)'),
|
||||||
('Skull Woods First Section (Right) North Door', 'Skull Woods First Section'),
|
('Skull Woods First Section (Right) North Door', 'Skull Woods First Section'),
|
||||||
@@ -3077,12 +3004,6 @@ inverted_mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia
|
|||||||
('Skull Woods First Section (Top) One-Way Path', 'Skull Woods First Section'),
|
('Skull Woods First Section (Top) One-Way Path', 'Skull Woods First Section'),
|
||||||
('Skull Woods Second Section (Drop)', 'Skull Woods Second Section'),
|
('Skull Woods Second Section (Drop)', 'Skull Woods Second Section'),
|
||||||
('Blind Fight', 'Blind Fight'),
|
('Blind Fight', 'Blind Fight'),
|
||||||
('Desert Palace Pots (Outer)', 'Desert Palace Main (Inner)'),
|
|
||||||
('Desert Palace Pots (Inner)', 'Desert Palace Main (Outer)'),
|
|
||||||
('Ice Palace Entrance Room', 'Ice Palace (Main)'),
|
|
||||||
('Ice Palace (East)', 'Ice Palace (East)'),
|
|
||||||
('Ice Palace (East Top)', 'Ice Palace (East Top)'),
|
|
||||||
('Ice Palace (Kholdstare)', 'Ice Palace (Kholdstare)'),
|
|
||||||
('Misery Mire Entrance Gap', 'Misery Mire (Main)'),
|
('Misery Mire Entrance Gap', 'Misery Mire (Main)'),
|
||||||
('Misery Mire (West)', 'Misery Mire (West)'),
|
('Misery Mire (West)', 'Misery Mire (West)'),
|
||||||
('Misery Mire Big Key Door', 'Misery Mire (Final Area)'),
|
('Misery Mire Big Key Door', 'Misery Mire (Final Area)'),
|
||||||
@@ -3101,26 +3022,6 @@ inverted_mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia
|
|||||||
('Turtle Rock (Dark Room) (South)', 'Turtle Rock (Eye Bridge)'),
|
('Turtle Rock (Dark Room) (South)', 'Turtle Rock (Eye Bridge)'),
|
||||||
('Turtle Rock Dark Room (South)', 'Turtle Rock (Dark Room)'),
|
('Turtle Rock Dark Room (South)', 'Turtle Rock (Dark Room)'),
|
||||||
('Turtle Rock (Trinexx)', 'Turtle Rock (Trinexx)'),
|
('Turtle Rock (Trinexx)', 'Turtle Rock (Trinexx)'),
|
||||||
('Palace of Darkness Bridge Room', 'Palace of Darkness (Center)'),
|
|
||||||
('Palace of Darkness Bonk Wall', 'Palace of Darkness (Bonk Section)'),
|
|
||||||
('Palace of Darkness Big Key Chest Staircase', 'Palace of Darkness (Big Key Chest)'),
|
|
||||||
('Palace of Darkness (North)', 'Palace of Darkness (North)'),
|
|
||||||
('Palace of Darkness Big Key Door', 'Palace of Darkness (Final Section)'),
|
|
||||||
('Palace of Darkness Hammer Peg Drop', 'Palace of Darkness (Center)'),
|
|
||||||
('Palace of Darkness Spike Statue Room Door', 'Palace of Darkness (Harmless Hellway)'),
|
|
||||||
('Palace of Darkness Maze Door', 'Palace of Darkness (Maze)'),
|
|
||||||
('Ganons Tower (Tile Room)', 'Ganons Tower (Tile Room)'),
|
|
||||||
('Ganons Tower (Tile Room) Key Door', 'Ganons Tower (Compass Room)'),
|
|
||||||
('Ganons Tower (Bottom) (East)', 'Ganons Tower (Bottom)'),
|
|
||||||
('Ganons Tower (Hookshot Room)', 'Ganons Tower (Hookshot Room)'),
|
|
||||||
('Ganons Tower (Map Room)', 'Ganons Tower (Map Room)'),
|
|
||||||
('Ganons Tower (Double Switch Room)', 'Ganons Tower (Firesnake Room)'),
|
|
||||||
('Ganons Tower (Firesnake Room)', 'Ganons Tower (Teleport Room)'),
|
|
||||||
('Ganons Tower (Bottom) (West)', 'Ganons Tower (Bottom)'),
|
|
||||||
('Ganons Tower Big Key Door', 'Ganons Tower (Top)'),
|
|
||||||
('Ganons Tower Torch Rooms', 'Ganons Tower (Before Moldorm)'),
|
|
||||||
('Ganons Tower Moldorm Door', 'Ganons Tower (Moldorm)'),
|
|
||||||
('Ganons Tower Moldorm Gap', 'Agahnim 2'),
|
|
||||||
('Ganon Drop', 'Bottom of Pyramid'),
|
('Ganon Drop', 'Bottom of Pyramid'),
|
||||||
('Pyramid Drop', 'East Dark World'),
|
('Pyramid Drop', 'East Dark World'),
|
||||||
('Post Aga Teleporter', 'Light World'),
|
('Post Aga Teleporter', 'Light World'),
|
||||||
@@ -3501,62 +3402,62 @@ inverted_default_connections = [('Waterfall of Wishing', 'Waterfall of Wishing'
|
|||||||
('Inverted Pyramid Entrance', 'Bottom of Pyramid')]
|
('Inverted Pyramid Entrance', 'Bottom of Pyramid')]
|
||||||
|
|
||||||
# non shuffled dungeons
|
# non shuffled dungeons
|
||||||
default_dungeon_connections = [('Desert Palace Entrance (South)', 'Desert Palace Main (Inner)'),
|
default_dungeon_connections = [('Desert Palace Entrance (South)', 'Desert Main Lobby'),
|
||||||
('Desert Palace Entrance (West)', 'Desert Palace Main (Outer)'),
|
('Desert Palace Entrance (West)', 'Desert West Lobby'),
|
||||||
('Desert Palace Entrance (North)', 'Desert Palace North'),
|
('Desert Palace Entrance (North)', 'Desert Back Lobby'),
|
||||||
('Desert Palace Entrance (East)', 'Desert Palace Main (Outer)'),
|
('Desert Palace Entrance (East)', 'Desert East Lobby'),
|
||||||
('Desert Palace Exit (South)', 'Desert Palace Stairs'),
|
('Desert Palace Exit (South)', 'Desert Palace Stairs'),
|
||||||
('Desert Palace Exit (West)', 'Desert Ledge'),
|
('Desert Palace Exit (West)', 'Desert Ledge'),
|
||||||
('Desert Palace Exit (East)', 'Desert Palace Lone Stairs'),
|
('Desert Palace Exit (East)', 'Desert Palace Lone Stairs'),
|
||||||
('Desert Palace Exit (North)', 'Desert Palace Entrance (North) Spot'),
|
('Desert Palace Exit (North)', 'Desert Palace Entrance (North) Spot'),
|
||||||
|
|
||||||
('Eastern Palace', 'Eastern Palace'),
|
('Eastern Palace', 'Eastern Lobby'),
|
||||||
('Eastern Palace Exit', 'Light World'),
|
('Eastern Palace Exit', 'Light World'),
|
||||||
('Tower of Hera', 'Tower of Hera (Bottom)'),
|
('Tower of Hera', 'Hera Lobby'),
|
||||||
('Tower of Hera Exit', 'Death Mountain (Top)'),
|
('Tower of Hera Exit', 'Death Mountain (Top)'),
|
||||||
|
|
||||||
('Hyrule Castle Entrance (South)', 'Hyrule Castle'),
|
('Hyrule Castle Entrance (South)', 'Hyrule Castle Lobby'),
|
||||||
('Hyrule Castle Entrance (West)', 'Hyrule Castle'),
|
('Hyrule Castle Entrance (West)', 'Hyrule Castle West Lobby'),
|
||||||
('Hyrule Castle Entrance (East)', 'Hyrule Castle'),
|
('Hyrule Castle Entrance (East)', 'Hyrule Castle East Lobby'),
|
||||||
('Hyrule Castle Exit (South)', 'Hyrule Castle Courtyard'),
|
('Hyrule Castle Exit (South)', 'Hyrule Castle Courtyard'),
|
||||||
('Hyrule Castle Exit (West)', 'Hyrule Castle Ledge'),
|
('Hyrule Castle Exit (West)', 'Hyrule Castle Ledge'),
|
||||||
('Hyrule Castle Exit (East)', 'Hyrule Castle Ledge'),
|
('Hyrule Castle Exit (East)', 'Hyrule Castle Ledge'),
|
||||||
('Agahnims Tower', 'Agahnims Tower'),
|
('Agahnims Tower', 'Tower Lobby'),
|
||||||
('Agahnims Tower Exit', 'Hyrule Castle Ledge'),
|
('Agahnims Tower Exit', 'Hyrule Castle Ledge'),
|
||||||
|
|
||||||
('Thieves Town', 'Thieves Town (Entrance)'),
|
('Thieves Town', 'Thieves Lobby'),
|
||||||
('Thieves Town Exit', 'West Dark World'),
|
('Thieves Town Exit', 'West Dark World'),
|
||||||
('Skull Woods First Section Hole (East)', 'Skull Woods First Section (Right)'),
|
('Skull Woods First Section Hole (East)', 'Skull Pinball'),
|
||||||
('Skull Woods First Section Hole (West)', 'Skull Woods First Section (Left)'),
|
('Skull Woods First Section Hole (West)', 'Skull Left Drop'),
|
||||||
('Skull Woods First Section Hole (North)', 'Skull Woods First Section (Top)'),
|
('Skull Woods First Section Hole (North)', 'Skull Pot Circle'),
|
||||||
('Skull Woods First Section Door', 'Skull Woods First Section'),
|
('Skull Woods First Section Door', 'Skull 1 Lobby'),
|
||||||
('Skull Woods First Section Exit', 'Skull Woods Forest'),
|
('Skull Woods First Section Exit', 'Skull Woods Forest'),
|
||||||
('Skull Woods Second Section Hole', 'Skull Woods Second Section (Drop)'),
|
('Skull Woods Second Section Hole', 'Skull Back Drop'),
|
||||||
('Skull Woods Second Section Door (East)', 'Skull Woods Second Section'),
|
('Skull Woods Second Section Door (East)', 'Skull 2 East Lobby'),
|
||||||
('Skull Woods Second Section Door (West)', 'Skull Woods Second Section'),
|
('Skull Woods Second Section Door (West)', 'Skull 2 West Lobby'),
|
||||||
('Skull Woods Second Section Exit (East)', 'Skull Woods Forest'),
|
('Skull Woods Second Section Exit (East)', 'Skull Woods Forest'),
|
||||||
('Skull Woods Second Section Exit (West)', 'Skull Woods Forest (West)'),
|
('Skull Woods Second Section Exit (West)', 'Skull Woods Forest (West)'),
|
||||||
('Skull Woods Final Section', 'Skull Woods Final Section (Entrance)'),
|
('Skull Woods Final Section', 'Skull 3 Lobby'),
|
||||||
('Skull Woods Final Section Exit', 'Skull Woods Forest (West)'),
|
('Skull Woods Final Section Exit', 'Skull Woods Forest (West)'),
|
||||||
('Ice Palace', 'Ice Palace (Entrance)'),
|
('Ice Palace', 'Ice Lobby'),
|
||||||
('Ice Palace Exit', 'Dark Lake Hylia Central Island'),
|
('Ice Palace Exit', 'Dark Lake Hylia Central Island'),
|
||||||
('Misery Mire', 'Misery Mire (Entrance)'),
|
('Misery Mire', 'Mire Lobby'),
|
||||||
('Misery Mire Exit', 'Dark Desert'),
|
('Misery Mire Exit', 'Dark Desert'),
|
||||||
('Palace of Darkness', 'Palace of Darkness (Entrance)'),
|
('Palace of Darkness', 'PoD Lobby'),
|
||||||
('Palace of Darkness Exit', 'East Dark World'),
|
('Palace of Darkness Exit', 'East Dark World'),
|
||||||
('Swamp Palace', 'Swamp Palace (Entrance)'), # requires additional patch for flooding moat if moved
|
('Swamp Palace', 'Swamp Lobby'), # requires additional patch for flooding moat if moved
|
||||||
('Swamp Palace Exit', 'South Dark World'),
|
('Swamp Palace Exit', 'South Dark World'),
|
||||||
|
|
||||||
('Turtle Rock', 'Turtle Rock (Entrance)'),
|
('Turtle Rock', 'TR Main Lobby'),
|
||||||
('Turtle Rock Exit (Front)', 'Dark Death Mountain (Top)'),
|
('Turtle Rock Exit (Front)', 'Dark Death Mountain (Top)'),
|
||||||
('Turtle Rock Ledge Exit (West)', 'Dark Death Mountain Ledge'),
|
('Turtle Rock Ledge Exit (West)', 'Dark Death Mountain Ledge'),
|
||||||
('Turtle Rock Ledge Exit (East)', 'Dark Death Mountain Ledge'),
|
('Turtle Rock Ledge Exit (East)', 'Dark Death Mountain Ledge'),
|
||||||
('Dark Death Mountain Ledge (West)', 'Turtle Rock (Second Section)'),
|
('Dark Death Mountain Ledge (West)', 'TR Lazy Eyes'),
|
||||||
('Dark Death Mountain Ledge (East)', 'Turtle Rock (Big Chest)'),
|
('Dark Death Mountain Ledge (East)', 'TR Big Chest Entrance'),
|
||||||
('Turtle Rock Isolated Ledge Exit', 'Dark Death Mountain Isolated Ledge'),
|
('Turtle Rock Isolated Ledge Exit', 'Dark Death Mountain Isolated Ledge'),
|
||||||
('Turtle Rock Isolated Ledge Entrance', 'Turtle Rock (Eye Bridge)'),
|
('Turtle Rock Isolated Ledge Entrance', 'TR Eye Bridge'),
|
||||||
|
|
||||||
('Ganons Tower', 'Ganons Tower (Entrance)'),
|
('Ganons Tower', 'GT Lobby'),
|
||||||
('Ganons Tower Exit', 'Dark Death Mountain (Top)')
|
('Ganons Tower Exit', 'Dark Death Mountain (Top)')
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -3578,7 +3479,7 @@ inverted_default_dungeon_connections = [('Desert Palace Entrance (South)', 'Dese
|
|||||||
('Hyrule Castle Exit (South)', 'Light World'),
|
('Hyrule Castle Exit (South)', 'Light World'),
|
||||||
('Hyrule Castle Exit (West)', 'Hyrule Castle Ledge'),
|
('Hyrule Castle Exit (West)', 'Hyrule Castle Ledge'),
|
||||||
('Hyrule Castle Exit (East)', 'Hyrule Castle Ledge'),
|
('Hyrule Castle Exit (East)', 'Hyrule Castle Ledge'),
|
||||||
('Thieves Town', 'Thieves Town (Entrance)'),
|
('Thieves Town', 'Thieves Lobby'),
|
||||||
('Thieves Town Exit', 'West Dark World'),
|
('Thieves Town Exit', 'West Dark World'),
|
||||||
('Skull Woods First Section Hole (East)', 'Skull Woods First Section (Right)'),
|
('Skull Woods First Section Hole (East)', 'Skull Woods First Section (Right)'),
|
||||||
('Skull Woods First Section Hole (West)', 'Skull Woods First Section (Left)'),
|
('Skull Woods First Section Hole (West)', 'Skull Woods First Section (Left)'),
|
||||||
@@ -3592,10 +3493,10 @@ inverted_default_dungeon_connections = [('Desert Palace Entrance (South)', 'Dese
|
|||||||
('Skull Woods Second Section Exit (West)', 'Skull Woods Forest (West)'),
|
('Skull Woods Second Section Exit (West)', 'Skull Woods Forest (West)'),
|
||||||
('Skull Woods Final Section', 'Skull Woods Final Section (Entrance)'),
|
('Skull Woods Final Section', 'Skull Woods Final Section (Entrance)'),
|
||||||
('Skull Woods Final Section Exit', 'Skull Woods Forest (West)'),
|
('Skull Woods Final Section Exit', 'Skull Woods Forest (West)'),
|
||||||
('Ice Palace', 'Ice Palace (Entrance)'),
|
('Ice Palace', 'Ice Lobby'),
|
||||||
('Misery Mire', 'Misery Mire (Entrance)'),
|
('Misery Mire', 'Misery Mire (Entrance)'),
|
||||||
('Misery Mire Exit', 'Dark Desert'),
|
('Misery Mire Exit', 'Dark Desert'),
|
||||||
('Palace of Darkness', 'Palace of Darkness (Entrance)'),
|
('Palace of Darkness', 'PoD Lobby'),
|
||||||
('Palace of Darkness Exit', 'East Dark World'),
|
('Palace of Darkness Exit', 'East Dark World'),
|
||||||
('Swamp Palace', 'Swamp Palace (Entrance)'),
|
('Swamp Palace', 'Swamp Palace (Entrance)'),
|
||||||
('Swamp Palace Exit', 'South Dark World'),
|
('Swamp Palace Exit', 'South Dark World'),
|
||||||
|
|||||||
@@ -192,11 +192,20 @@ def fill_restrictive(world, base_state, locations, itempool, single_player_place
|
|||||||
perform_access_check = not world.has_beaten_game(maximum_exploration_state, item_to_place.player) if single_player_placement else not has_beaten_game
|
perform_access_check = not world.has_beaten_game(maximum_exploration_state, item_to_place.player) if single_player_placement else not has_beaten_game
|
||||||
|
|
||||||
spot_to_fill = None
|
spot_to_fill = None
|
||||||
|
|
||||||
for location in locations:
|
for location in locations:
|
||||||
|
if item_to_place.key: # a better test to see if a key can go there
|
||||||
|
location.item = item_to_place
|
||||||
|
test_state = maximum_exploration_state.copy()
|
||||||
|
test_state.stale[item_to_place.player] = True
|
||||||
|
else:
|
||||||
|
test_state = maximum_exploration_state
|
||||||
if (not single_player_placement or location.player == item_to_place.player)\
|
if (not single_player_placement or location.player == item_to_place.player)\
|
||||||
and location.can_fill(maximum_exploration_state, item_to_place, perform_access_check):
|
and location.can_fill(test_state, item_to_place, perform_access_check):
|
||||||
spot_to_fill = location
|
spot_to_fill = location
|
||||||
break
|
break
|
||||||
|
elif item_to_place.key:
|
||||||
|
location.item = None
|
||||||
|
|
||||||
if spot_to_fill is None:
|
if spot_to_fill is None:
|
||||||
# we filled all reachable spots. Maybe the game can be beaten anyway?
|
# we filled all reachable spots. Maybe the game can be beaten anyway?
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ from Utils import is_bundled, local_path, output_path, open_file, parse_names_st
|
|||||||
|
|
||||||
def guiMain(args=None):
|
def guiMain(args=None):
|
||||||
mainWindow = Tk()
|
mainWindow = Tk()
|
||||||
mainWindow.wm_title("Entrance Shuffle %s" % ESVersion)
|
mainWindow.wm_title("Door Shuffle %s" % ESVersion)
|
||||||
|
|
||||||
set_icon(mainWindow)
|
set_icon(mainWindow)
|
||||||
|
|
||||||
@@ -286,19 +286,56 @@ def guiMain(args=None):
|
|||||||
shuffleLabel = Label(shuffleFrame, text='Entrance shuffle algorithm')
|
shuffleLabel = Label(shuffleFrame, text='Entrance shuffle algorithm')
|
||||||
shuffleLabel.pack(side=LEFT)
|
shuffleLabel.pack(side=LEFT)
|
||||||
|
|
||||||
modeFrame.pack(expand=True, anchor=E)
|
doorShuffleFrame = Frame(drowDownFrame)
|
||||||
|
doorShuffleVar = StringVar()
|
||||||
|
doorShuffleVar.set('vanilla')
|
||||||
|
doorShuffleOptionMenu = OptionMenu(doorShuffleFrame, doorShuffleVar, 'vanilla', 'basic', 'crosssed', 'experimental')
|
||||||
|
doorShuffleOptionMenu.pack(side=RIGHT)
|
||||||
|
doorShuffleLabel = Label(doorShuffleFrame, text='Door shuffle algorithm')
|
||||||
|
doorShuffleLabel.pack(side=LEFT)
|
||||||
|
|
||||||
|
heartbeepFrame = Frame(drowDownFrame)
|
||||||
|
heartbeepVar = StringVar()
|
||||||
|
heartbeepVar.set('normal')
|
||||||
|
heartbeepOptionMenu = OptionMenu(heartbeepFrame, heartbeepVar, 'double', 'normal', 'half', 'quarter', 'off')
|
||||||
|
heartbeepOptionMenu.pack(side=RIGHT)
|
||||||
|
heartbeepLabel = Label(heartbeepFrame, text='Heartbeep sound rate')
|
||||||
|
heartbeepLabel.pack(side=LEFT)
|
||||||
|
|
||||||
|
heartcolorFrame = Frame(drowDownFrame)
|
||||||
|
heartcolorVar = StringVar()
|
||||||
|
heartcolorVar.set('red')
|
||||||
|
heartcolorOptionMenu = OptionMenu(heartcolorFrame, heartcolorVar, 'red', 'blue', 'green', 'yellow', 'random')
|
||||||
|
heartcolorOptionMenu.pack(side=RIGHT)
|
||||||
|
heartcolorLabel = Label(heartcolorFrame, text='Heart color')
|
||||||
|
heartcolorLabel.pack(side=LEFT)
|
||||||
|
|
||||||
|
fastMenuFrame = Frame(drowDownFrame)
|
||||||
|
fastMenuVar = StringVar()
|
||||||
|
fastMenuVar.set('normal')
|
||||||
|
fastMenuOptionMenu = OptionMenu(fastMenuFrame, fastMenuVar, 'normal', 'instant', 'double', 'triple', 'quadruple', 'half')
|
||||||
|
fastMenuOptionMenu.pack(side=RIGHT)
|
||||||
|
fastMenuLabel = Label(fastMenuFrame, text='Menu speed')
|
||||||
|
fastMenuLabel.pack(side=LEFT)
|
||||||
|
|
||||||
logicFrame.pack(expand=True, anchor=E)
|
logicFrame.pack(expand=True, anchor=E)
|
||||||
|
accessibilityFrame.pack(expand=True, anchor=E)
|
||||||
|
|
||||||
goalFrame.pack(expand=True, anchor=E)
|
goalFrame.pack(expand=True, anchor=E)
|
||||||
crystalsGTFrame.pack(expand=True, anchor=E)
|
crystalsGTFrame.pack(expand=True, anchor=E)
|
||||||
crystalsGanonFrame.pack(expand=True, anchor=E)
|
crystalsGanonFrame.pack(expand=True, anchor=E)
|
||||||
swordFrame.pack(expand=True, anchor=E)
|
|
||||||
|
modeFrame.pack(expand=True, anchor=E)
|
||||||
|
shuffleFrame.pack(expand=True, anchor=E)
|
||||||
|
doorShuffleFrame.pack(expand=True, anchor=E)
|
||||||
|
|
||||||
|
swordsFrame.pack(expand=True, anchor=E)
|
||||||
difficultyFrame.pack(expand=True, anchor=E)
|
difficultyFrame.pack(expand=True, anchor=E)
|
||||||
itemfunctionFrame.pack(expand=True, anchor=E)
|
itemfunctionFrame.pack(expand=True, anchor=E)
|
||||||
timerFrame.pack(expand=True, anchor=E)
|
timerFrame.pack(expand=True, anchor=E)
|
||||||
progressiveFrame.pack(expand=True, anchor=E)
|
progressiveFrame.pack(expand=True, anchor=E)
|
||||||
accessibilityFrame.pack(expand=True, anchor=E)
|
accessibilityFrame.pack(expand=True, anchor=E)
|
||||||
algorithmFrame.pack(expand=True, anchor=E)
|
algorithmFrame.pack(expand=True, anchor=E)
|
||||||
shuffleFrame.pack(expand=True, anchor=E)
|
|
||||||
|
|
||||||
enemizerFrame = LabelFrame(randomizerWindow, text="Enemizer", padx=5, pady=5)
|
enemizerFrame = LabelFrame(randomizerWindow, text="Enemizer", padx=5, pady=5)
|
||||||
enemizerFrame.columnconfigure(0, weight=1)
|
enemizerFrame.columnconfigure(0, weight=1)
|
||||||
@@ -379,6 +416,7 @@ def guiMain(args=None):
|
|||||||
guiargs.count = int(countVar.get()) if countVar.get() != '1' else None
|
guiargs.count = int(countVar.get()) if countVar.get() != '1' else None
|
||||||
guiargs.mode = modeVar.get()
|
guiargs.mode = modeVar.get()
|
||||||
guiargs.logic = logicVar.get()
|
guiargs.logic = logicVar.get()
|
||||||
|
|
||||||
guiargs.goal = goalVar.get()
|
guiargs.goal = goalVar.get()
|
||||||
guiargs.crystals_gt = crystalsGTVar.get()
|
guiargs.crystals_gt = crystalsGTVar.get()
|
||||||
guiargs.crystals_ganon = crystalsGanonVar.get()
|
guiargs.crystals_ganon = crystalsGanonVar.get()
|
||||||
@@ -390,6 +428,7 @@ def guiMain(args=None):
|
|||||||
guiargs.accessibility = accessibilityVar.get()
|
guiargs.accessibility = accessibilityVar.get()
|
||||||
guiargs.algorithm = algorithmVar.get()
|
guiargs.algorithm = algorithmVar.get()
|
||||||
guiargs.shuffle = shuffleVar.get()
|
guiargs.shuffle = shuffleVar.get()
|
||||||
|
guiargs.door_shuffle = doorShuffleVar.get()
|
||||||
guiargs.heartbeep = heartbeepVar.get()
|
guiargs.heartbeep = heartbeepVar.get()
|
||||||
guiargs.heartcolor = heartcolorVar.get()
|
guiargs.heartcolor = heartcolorVar.get()
|
||||||
guiargs.fastmenu = fastMenuVar.get()
|
guiargs.fastmenu = fastMenuVar.get()
|
||||||
@@ -1202,6 +1241,7 @@ def guiMain(args=None):
|
|||||||
crystalsGanonVar.set(args.crystals_ganon)
|
crystalsGanonVar.set(args.crystals_ganon)
|
||||||
algorithmVar.set(args.algorithm)
|
algorithmVar.set(args.algorithm)
|
||||||
shuffleVar.set(args.shuffle)
|
shuffleVar.set(args.shuffle)
|
||||||
|
doorShuffleVar.set(args.door_shuffle)
|
||||||
heartbeepVar.set(args.heartbeep)
|
heartbeepVar.set(args.heartbeep)
|
||||||
fastMenuVar.set(args.fastmenu)
|
fastMenuVar.set(args.fastmenu)
|
||||||
logicVar.set(args.logic)
|
logicVar.set(args.logic)
|
||||||
|
|||||||
+4
-4
@@ -302,16 +302,16 @@ def create_inverted_regions(world, player):
|
|||||||
create_cave_region(player, 'The Sky', 'A Dark Sky', None, ['DDM Landing','NEDW Landing', 'WDW Landing', 'SDW Landing', 'EDW Landing', 'DD Landing', 'DLHL Landing'])
|
create_cave_region(player, 'The Sky', 'A Dark Sky', None, ['DDM Landing','NEDW Landing', 'WDW Landing', 'SDW Landing', 'EDW Landing', 'DD Landing', 'DLHL Landing'])
|
||||||
]
|
]
|
||||||
|
|
||||||
for region_name, (room_id, shopkeeper, replaceable) in shop_table.items():
|
for region_name, (room_id, default_door_id, shopkeeper, replaceable) in shop_table.items():
|
||||||
region = world.get_region(region_name, player)
|
region = world.get_region(region_name, player)
|
||||||
shop = Shop(region, room_id, ShopType.Shop, shopkeeper, replaceable)
|
shop = Shop(region, room_id, default_door_id, ShopType.Shop, shopkeeper, replaceable)
|
||||||
region.shop = shop
|
region.shop = shop
|
||||||
world.shops.append(shop)
|
world.shops.append(shop)
|
||||||
for index, (item, price) in enumerate(default_shop_contents[region_name]):
|
for index, (item, price) in enumerate(default_shop_contents[region_name]):
|
||||||
shop.add_inventory(index, item, price)
|
shop.add_inventory(index, item, price)
|
||||||
|
|
||||||
region = world.get_region('Capacity Upgrade', player)
|
region = world.get_region('Capacity Upgrade', player)
|
||||||
shop = Shop(region, 0x0115, ShopType.UpgradeShop, 0x04, True)
|
shop = Shop(region, 0x0115, 0x5D, ShopType.UpgradeShop, 0x04, True)
|
||||||
region.shop = shop
|
region.shop = shop
|
||||||
world.shops.append(shop)
|
world.shops.append(shop)
|
||||||
shop.add_inventory(0, 'Bomb Upgrade (+5)', 100, 7)
|
shop.add_inventory(0, 'Bomb Upgrade (+5)', 100, 7)
|
||||||
@@ -373,7 +373,7 @@ def mark_dark_world_regions(world, player):
|
|||||||
seen.add(exit.connected_region)
|
seen.add(exit.connected_region)
|
||||||
queue.append(exit.connected_region)
|
queue.append(exit.connected_region)
|
||||||
|
|
||||||
# (room_id, shopkeeper, replaceable)
|
# (room_id, default_door_id, shopkeeper, replaceable)
|
||||||
shop_table = {
|
shop_table = {
|
||||||
'Cave Shop (Dark Death Mountain)': (0x0112, 0xC1, True),
|
'Cave Shop (Dark Death Mountain)': (0x0112, 0xC1, True),
|
||||||
'Red Shield Shop': (0x0110, 0xC1, True),
|
'Red Shield Shop': (0x0110, 0xC1, True),
|
||||||
|
|||||||
+23
-2
@@ -171,6 +171,27 @@ def generate_itempool(world, player):
|
|||||||
world.push_item(world.get_location('Floodgate', player), ItemFactory('Open Floodgate', player), False)
|
world.push_item(world.get_location('Floodgate', player), ItemFactory('Open Floodgate', player), False)
|
||||||
world.get_location('Floodgate', player).event = True
|
world.get_location('Floodgate', player).event = True
|
||||||
world.get_location('Floodgate', player).locked = True
|
world.get_location('Floodgate', player).locked = True
|
||||||
|
world.push_item(world.get_location('Trench 1 Switch', player), ItemFactory('Trench 1 Filled', player), False)
|
||||||
|
world.get_location('Trench 1 Switch', player).event = True
|
||||||
|
world.get_location('Trench 1 Switch', player).locked = True
|
||||||
|
world.push_item(world.get_location('Trench 2 Switch', player), ItemFactory('Trench 2 Filled', player), False)
|
||||||
|
world.get_location('Trench 2 Switch', player).event = True
|
||||||
|
world.get_location('Trench 2 Switch', player).locked = True
|
||||||
|
world.push_item(world.get_location('Swamp Drain', player), ItemFactory('Drained Swamp', player), False)
|
||||||
|
world.get_location('Swamp Drain', player).event = True
|
||||||
|
world.get_location('Swamp Drain', player).locked = True
|
||||||
|
world.push_item(world.get_location('Attic Cracked Floor', player), ItemFactory('Shining Light', player), False)
|
||||||
|
world.get_location('Attic Cracked Floor', player).event = True
|
||||||
|
world.get_location('Attic Cracked Floor', player).locked = True
|
||||||
|
world.push_item(world.get_location('Suspicious Maiden', player), ItemFactory('Maiden Rescued', player), False)
|
||||||
|
world.get_location('Suspicious Maiden', player).event = True
|
||||||
|
world.get_location('Suspicious Maiden', player).locked = True
|
||||||
|
world.push_item(world.get_location('Revealing Light', player), ItemFactory('Maiden Unmasked', player), False)
|
||||||
|
world.get_location('Revealing Light', player).event = True
|
||||||
|
world.get_location('Revealing Light', player).locked = True
|
||||||
|
world.push_item(world.get_location('Ice Block Drop', player), ItemFactory('Convenient Block', player), False)
|
||||||
|
world.get_location('Ice Block Drop', player).event = True
|
||||||
|
world.get_location('Ice Block Drop', player).locked = True
|
||||||
|
|
||||||
# set up item pool
|
# set up item pool
|
||||||
if world.custom:
|
if world.custom:
|
||||||
@@ -287,7 +308,7 @@ def set_up_take_anys(world, player):
|
|||||||
entrance = world.get_region(reg, player).entrances[0]
|
entrance = world.get_region(reg, player).entrances[0]
|
||||||
connect_entrance(world, entrance, old_man_take_any, player)
|
connect_entrance(world, entrance, old_man_take_any, player)
|
||||||
entrance.target = 0x58
|
entrance.target = 0x58
|
||||||
old_man_take_any.shop = Shop(old_man_take_any, 0x0112, ShopType.TakeAny, 0xE2, True)
|
old_man_take_any.shop = Shop(old_man_take_any, 0x0112, None, ShopType.TakeAny, 0xE2, True)
|
||||||
world.shops.append(old_man_take_any.shop)
|
world.shops.append(old_man_take_any.shop)
|
||||||
old_man_take_any.shop.active = True
|
old_man_take_any.shop.active = True
|
||||||
|
|
||||||
@@ -310,7 +331,7 @@ def set_up_take_anys(world, player):
|
|||||||
entrance = world.get_region(reg, player).entrances[0]
|
entrance = world.get_region(reg, player).entrances[0]
|
||||||
connect_entrance(world, entrance, take_any, player)
|
connect_entrance(world, entrance, take_any, player)
|
||||||
entrance.target = target
|
entrance.target = target
|
||||||
take_any.shop = Shop(take_any, room_id, ShopType.TakeAny, 0xE3, True)
|
take_any.shop = Shop(take_any, room_id, None, ShopType.TakeAny, 0xE3, True)
|
||||||
world.shops.append(take_any.shop)
|
world.shops.append(take_any.shop)
|
||||||
take_any.shop.active = True
|
take_any.shop.active = True
|
||||||
take_any.shop.add_inventory(0, 'Blue Potion', 0, 0)
|
take_any.shop.add_inventory(0, 'Blue Potion', 0, 0)
|
||||||
|
|||||||
@@ -127,6 +127,7 @@ item_table = {'Bow': (True, False, None, 0x0B, 'You have\nchosen the\narcher cla
|
|||||||
'Compass (Escape)': (False, True, 'Compass', 0x8F, 'Now you can find no boss!', 'and the compass', 'the magnetic kid', 'compass for sale', 'magnetic fungus', 'compass boy finds boss again', 'a compass to Hyrule Castle'),
|
'Compass (Escape)': (False, True, 'Compass', 0x8F, 'Now you can find no boss!', 'and the compass', 'the magnetic kid', 'compass for sale', 'magnetic fungus', 'compass boy finds boss again', 'a compass to Hyrule Castle'),
|
||||||
'Map (Escape)': (False, True, 'Map', 0x7F, 'A tightly folded map rests here', 'and the map', 'cartography kid', 'map for sale', 'a map to shrooms', 'map boy navigates again', 'a map to Hyrule Castle'),
|
'Map (Escape)': (False, True, 'Map', 0x7F, 'A tightly folded map rests here', 'and the map', 'cartography kid', 'map for sale', 'a map to shrooms', 'map boy navigates again', 'a map to Hyrule Castle'),
|
||||||
'Small Key (Agahnims Tower)': (False, False, 'SmallKey', 0xA4, 'A small key to Agahnim', 'and the key', 'the unlocking kid', 'keys for sale', 'unlock the fungus', 'key boy opens door again', 'a small key to Castle Tower'),
|
'Small Key (Agahnims Tower)': (False, False, 'SmallKey', 0xA4, 'A small key to Agahnim', 'and the key', 'the unlocking kid', 'keys for sale', 'unlock the fungus', 'key boy opens door again', 'a small key to Castle Tower'),
|
||||||
|
'Big Key (Agahnims Tower)': (False, False, 'BigKey', 0x9B, 'A big key to Agahnim', 'and the big key', 'the big-unlock kid', 'big key for sale', 'face key fungus', 'key boy opens chest again', 'a big key to Castle Tower'),
|
||||||
'Small Key (Palace of Darkness)': (False, False, 'SmallKey', 0xA6, 'A small key to darkness', 'and the key', 'the unlocking kid', 'keys for sale', 'unlock the fungus', 'key boy opens door again', 'a small key to Palace of Darkness'),
|
'Small Key (Palace of Darkness)': (False, False, 'SmallKey', 0xA6, 'A small key to darkness', 'and the key', 'the unlocking kid', 'keys for sale', 'unlock the fungus', 'key boy opens door again', 'a small key to Palace of Darkness'),
|
||||||
'Big Key (Palace of Darkness)': (False, False, 'BigKey', 0x99, 'A big key to darkness', 'and the big key', 'the big-unlock kid', 'big key for sale', 'face key fungus', 'key boy opens chest again', 'a big key to Palace of Darkness'),
|
'Big Key (Palace of Darkness)': (False, False, 'BigKey', 0x99, 'A big key to darkness', 'and the big key', 'the big-unlock kid', 'big key for sale', 'face key fungus', 'key boy opens chest again', 'a big key to Palace of Darkness'),
|
||||||
'Compass (Palace of Darkness)': (False, True, 'Compass', 0x89, 'Now you can find Helmasaur King!', 'and the compass', 'the magnetic kid', 'compass for sale', 'magnetic fungus', 'compass boy finds boss again', 'a compass to Palace of Darkness'),
|
'Compass (Palace of Darkness)': (False, True, 'Compass', 0x89, 'Now you can find Helmasaur King!', 'and the compass', 'the magnetic kid', 'compass for sale', 'magnetic fungus', 'compass boy finds boss again', 'a compass to Palace of Darkness'),
|
||||||
@@ -173,4 +174,11 @@ item_table = {'Bow': (True, False, None, 0x0B, 'You have\nchosen the\narcher cla
|
|||||||
'Return Smith': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
'Return Smith': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||||
'Pick Up Purple Chest': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
'Pick Up Purple Chest': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||||
'Open Floodgate': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
'Open Floodgate': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||||
|
'Trench 1 Filled': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||||
|
'Trench 2 Filled': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||||
|
'Drained Swamp': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||||
|
'Shining Light': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||||
|
'Maiden Rescued': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||||
|
'Maiden Unmasked': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||||
|
'Convenient Block': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||||
}
|
}
|
||||||
|
|||||||
+1003
File diff suppressed because it is too large
Load Diff
@@ -13,13 +13,16 @@ from Regions import create_regions, mark_light_world_regions
|
|||||||
from InvertedRegions import create_inverted_regions, mark_dark_world_regions
|
from InvertedRegions import create_inverted_regions, mark_dark_world_regions
|
||||||
from EntranceShuffle import link_entrances, link_inverted_entrances
|
from EntranceShuffle import link_entrances, link_inverted_entrances
|
||||||
from Rom import patch_rom, get_race_rom_patches, get_enemizer_patch, apply_rom_settings, Sprite, LocalRom, JsonRom
|
from Rom import patch_rom, get_race_rom_patches, get_enemizer_patch, apply_rom_settings, Sprite, LocalRom, JsonRom
|
||||||
|
from Doors import create_doors
|
||||||
|
from DoorShuffle import link_doors
|
||||||
|
from RoomData import create_rooms
|
||||||
from Rules import set_rules
|
from Rules import set_rules
|
||||||
from Dungeons import create_dungeons, fill_dungeons, fill_dungeons_restrictive
|
from Dungeons import create_dungeons, fill_dungeons, fill_dungeons_restrictive
|
||||||
from Fill import distribute_items_cutoff, distribute_items_staleness, distribute_items_restrictive, flood_items, balance_multiworld_progression
|
from Fill import distribute_items_cutoff, distribute_items_staleness, distribute_items_restrictive, flood_items, balance_multiworld_progression
|
||||||
from ItemList import generate_itempool, difficulties, fill_prizes
|
from ItemList import generate_itempool, difficulties, fill_prizes
|
||||||
from Utils import output_path, parse_names_string
|
from Utils import output_path, parse_names_string
|
||||||
|
|
||||||
__version__ = '0.6.3-pre'
|
__version__ = '0.0.1-pre'
|
||||||
|
|
||||||
def main(args, seed=None):
|
def main(args, seed=None):
|
||||||
if args.outputpath:
|
if args.outputpath:
|
||||||
@@ -32,7 +35,7 @@ def main(args, seed=None):
|
|||||||
start = time.perf_counter()
|
start = time.perf_counter()
|
||||||
|
|
||||||
# initialize the world
|
# initialize the world
|
||||||
world = World(args.multi, args.shuffle, args.logic, args.mode, args.swords, args.difficulty, args.item_functionality, args.timer, args.progressive, args.goal, args.algorithm, args.accessibility, args.shuffleganon, args.quickswap, args.fastmenu, args.disablemusic, args.retro, args.custom, args.customitemarray, args.hints)
|
world = World(args.multi, args.shuffle, args.door_shuffle, args.logic, args.mode, args.swords, args.difficulty, args.item_functionality, args.timer, args.progressive, args.goal, args.algorithm, args.accessibility, args.shuffleganon, args.quickswap, args.fastmenu, args.disablemusic, args.retro, args.custom, args.customitemarray, args.shufflebosses, args.hints)
|
||||||
logger = logging.getLogger('')
|
logger = logging.getLogger('')
|
||||||
if seed is None:
|
if seed is None:
|
||||||
random.seed(None)
|
random.seed(None)
|
||||||
@@ -56,7 +59,7 @@ def main(args, seed=None):
|
|||||||
|
|
||||||
world.rom_seeds = {player: random.randint(0, 999999999) for player in range(1, world.players + 1)}
|
world.rom_seeds = {player: random.randint(0, 999999999) for player in range(1, world.players + 1)}
|
||||||
|
|
||||||
logger.info('ALttP Entrance Randomizer Version %s - Seed: %s\n\n', __version__, world.seed)
|
logger.info('ALttP Door Randomizer Version %s - Seed: %s\n\n', __version__, world.seed)
|
||||||
|
|
||||||
for player in range(1, world.players + 1):
|
for player in range(1, world.players + 1):
|
||||||
world.difficulty_requirements[player] = difficulties[world.difficulty[player]]
|
world.difficulty_requirements[player] = difficulties[world.difficulty[player]]
|
||||||
@@ -66,8 +69,14 @@ def main(args, seed=None):
|
|||||||
|
|
||||||
if world.mode[player] != 'inverted':
|
if world.mode[player] != 'inverted':
|
||||||
create_regions(world, player)
|
create_regions(world, player)
|
||||||
|
create_doors(world, player)
|
||||||
|
create_rooms(world, player)
|
||||||
|
create_dungeons(world, player)
|
||||||
else:
|
else:
|
||||||
create_inverted_regions(world, player)
|
for player in range(1, world.players + 1):
|
||||||
|
create_inverted_regions(world, player) # todo: port all the dungeon region work
|
||||||
|
create_doors(world, player)
|
||||||
|
create_rooms(world, player)
|
||||||
create_dungeons(world, player)
|
create_dungeons(world, player)
|
||||||
|
|
||||||
logger.info('Shuffling the World about.')
|
logger.info('Shuffling the World about.')
|
||||||
@@ -75,11 +84,18 @@ def main(args, seed=None):
|
|||||||
for player in range(1, world.players + 1):
|
for player in range(1, world.players + 1):
|
||||||
if world.mode[player] != 'inverted':
|
if world.mode[player] != 'inverted':
|
||||||
link_entrances(world, player)
|
link_entrances(world, player)
|
||||||
mark_light_world_regions(world, player)
|
for player in range(1, world.players + 1):
|
||||||
else:
|
else:
|
||||||
link_inverted_entrances(world, player)
|
link_inverted_entrances(world, player)
|
||||||
mark_dark_world_regions(world, player)
|
|
||||||
|
|
||||||
|
logger.info('Shuffling dungeons')
|
||||||
|
|
||||||
|
for player in range(1, world.players + 1):
|
||||||
|
link_doors(world, player)
|
||||||
|
if world.mode[player] != 'inverted':
|
||||||
|
mark_light_world_regions(world, player)
|
||||||
|
else:
|
||||||
|
mark_dark_world_regions(world, player)
|
||||||
logger.info('Generating Item Pool.')
|
logger.info('Generating Item Pool.')
|
||||||
|
|
||||||
for player in range(1, world.players + 1):
|
for player in range(1, world.players + 1):
|
||||||
@@ -230,7 +246,7 @@ def main(args, seed=None):
|
|||||||
|
|
||||||
def copy_world(world):
|
def copy_world(world):
|
||||||
# ToDo: Not good yet
|
# ToDo: Not good yet
|
||||||
ret = World(world.players, world.shuffle, world.logic, world.mode, world.swords, world.difficulty, world.difficulty_adjustments, world.timer, world.progressive, world.goal, world.algorithm, world.accessibility, world.shuffle_ganon, world.quickswap, world.fastmenu, world.disable_music, world.retro, world.custom, world.customitemarray, world.hints)
|
ret = World(world.players, world.shuffle, world.doorShuffle, world.logic, world.mode, world.swords, world.difficulty, world.difficulty_adjustments, world.timer, world.progressive, world.goal, world.algorithm, world.accessibility, world.shuffle_ganon, world.quickswap, world.fastmenu, world.disable_music, world.retro, world.custom, world.customitemarray, world.boss_shuffle, world.hints)
|
||||||
ret.required_medallions = world.required_medallions.copy()
|
ret.required_medallions = world.required_medallions.copy()
|
||||||
ret.swamp_patch_required = world.swamp_patch_required.copy()
|
ret.swamp_patch_required = world.swamp_patch_required.copy()
|
||||||
ret.ganon_at_pyramid = world.ganon_at_pyramid.copy()
|
ret.ganon_at_pyramid = world.ganon_at_pyramid.copy()
|
||||||
@@ -310,6 +326,13 @@ def copy_world(world):
|
|||||||
ret.precollected_items = world.precollected_items.copy()
|
ret.precollected_items = world.precollected_items.copy()
|
||||||
ret.state.stale = {player: True for player in range(1, world.players + 1)}
|
ret.state.stale = {player: True for player in range(1, world.players + 1)}
|
||||||
|
|
||||||
|
ret.doors = world.doors
|
||||||
|
ret.paired_doors = world.paired_doors
|
||||||
|
ret.rooms = world.rooms
|
||||||
|
ret.inaccessible_regions = world.inaccessible_regions
|
||||||
|
ret.dungeon_layouts = world.dungeon_layouts
|
||||||
|
ret.key_logic = world.key_logic
|
||||||
|
|
||||||
for player in range(1, world.players + 1):
|
for player in range(1, world.players + 1):
|
||||||
set_rules(ret, player)
|
set_rules(ret, player)
|
||||||
|
|
||||||
@@ -325,7 +348,7 @@ def copy_dynamic_regions_and_locations(world, ret):
|
|||||||
# Note: ideally exits should be copied here, but the current use case (Take anys) do not require this
|
# Note: ideally exits should be copied here, but the current use case (Take anys) do not require this
|
||||||
|
|
||||||
if region.shop:
|
if region.shop:
|
||||||
new_reg.shop = Shop(new_reg, region.shop.room_id, region.shop.type, region.shop.shopkeeper_config, region.shop.replaceable)
|
new_reg.shop = Shop(new_reg, region.shop.room_id, region.shop.default_door_id, region.shop.type, region.shop.shopkeeper_config, region.shop.replaceable)
|
||||||
ret.shops.append(new_reg.shop)
|
ret.shops.append(new_reg.shop)
|
||||||
|
|
||||||
for location in world.dynamic_locations:
|
for location in world.dynamic_locations:
|
||||||
@@ -363,7 +386,7 @@ def create_playthrough(world):
|
|||||||
sphere = []
|
sphere = []
|
||||||
# build up spheres of collection radius. Everything in each sphere is independent from each other in dependencies and only depends on lower spheres
|
# build up spheres of collection radius. Everything in each sphere is independent from each other in dependencies and only depends on lower spheres
|
||||||
for location in sphere_candidates:
|
for location in sphere_candidates:
|
||||||
if state.can_reach(location):
|
if state.can_reach(location) and state.not_flooding_a_key(world, location):
|
||||||
sphere.append(location)
|
sphere.append(location)
|
||||||
|
|
||||||
for location in sphere:
|
for location in sphere:
|
||||||
@@ -414,7 +437,7 @@ def create_playthrough(world):
|
|||||||
while required_locations:
|
while required_locations:
|
||||||
state.sweep_for_events(key_only=True)
|
state.sweep_for_events(key_only=True)
|
||||||
|
|
||||||
sphere = list(filter(state.can_reach, required_locations))
|
sphere = list(filter(lambda loc: state.can_reach(loc) and state.not_flooding_a_key(world, loc), required_locations))
|
||||||
|
|
||||||
for location in sphere:
|
for location in sphere:
|
||||||
required_locations.remove(location)
|
required_locations.remove(location)
|
||||||
|
|||||||
@@ -1,37 +1,36 @@
|
|||||||
# ALttPEntranceRandomizer
|
# ALttPDoorRandomizer
|
||||||
|
|
||||||
This is a entrance randomizer for _The Legend of Zelda: A Link to the Past_ for the SNES.
|
This is a door randomizer for _The Legend of Zelda: A Link to the Past_ for the SNES
|
||||||
|
based on the Entrance Randomizer found at [KevinCathcart's Github Project.](https://github.com/KevinCathcart/ALttPEntranceRandomizer)
|
||||||
See https://alttpr.com/ for more details on the normal randomizer.
|
See https://alttpr.com/ for more details on the normal randomizer.
|
||||||
|
|
||||||
|
# Known Issues
|
||||||
|
|
||||||
|
[List of Known Issues and Their Status](https://docs.google.com/document/d/1Bk-m-QRvH5iF60ndptKYgyaV7P93D3TiG8xmdxp_bdQ/edit?usp=sharing)
|
||||||
|
|
||||||
|
# Feedback and Bug Reports
|
||||||
|
|
||||||
|
Please just DM me on discord for now. I (Aerinon) can be found at the [ALTTP Randomizer discord](https://discordapp.com/invite/alttprandomizer).
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
Clone this repository and then run ```EntranceRandomizer.py``` (requires Python 3).
|
Clone this repository and then run ```DungeonRandomizer.py``` (requires Python 3).
|
||||||
|
|
||||||
Alternatively, run ```Gui.py``` for a simple graphical user interface.
|
Alternatively, run ```Gui.py``` for a simple graphical user interface. (WIP)
|
||||||
|
|
||||||
For releases, a Windows standalone executable is available for users without Python 3.
|
|
||||||
|
|
||||||
# Settings
|
# Settings
|
||||||
|
|
||||||
## Game Mode
|
Only extra settings are found here. All entrance randomizer settings are supported. See their [readme](https://github.com/KevinCathcart/ALttPEntranceRandomizer/blob/master/README.md)
|
||||||
|
|
||||||
### Standard
|
## Door Shuffle
|
||||||
|
|
||||||
Fixes Hyrule Castle Secret Entrance and Front Door, but may lead to weird rain state issues if you exit through the Hyrule Castle side exits before rescuing Zelda in a full shuffle.
|
### Basic
|
||||||
|
|
||||||
Gives lightcone in Hyrule Castle Sewers even without the Lamp.
|
Doors are shuffled only within a single dungeon.
|
||||||
|
|
||||||
### Open
|
### Crossed
|
||||||
|
|
||||||
This mode starts with the option to start in your house or the sanctuary, you are free to explore.
|
Doors are shuffled between dungeons as well.
|
||||||
|
|
||||||
Special notes:
|
|
||||||
|
|
||||||
- Uncle already in sewers and most likely does not have a sword.
|
|
||||||
- Sewers do not get a free light cone.
|
|
||||||
- It may be a while before you find a sword, think of other ways to do damage to enemies. (bombs are a great tool, as well as picking up bushes in over world).
|
|
||||||
|
|
||||||
### Swordless
|
|
||||||
|
|
||||||
This mode removes all swords from the itempool. Otherwise just like open.
|
This mode removes all swords from the itempool. Otherwise just like open.
|
||||||
|
|
||||||
@@ -207,12 +206,11 @@ two sections of Skull Woods remain confined to the general Skull Woods area. Lin
|
|||||||
|
|
||||||
### Vanilla
|
### Vanilla
|
||||||
|
|
||||||
Places entrances in the same locations they were in the original The Legend of Zelda: A Link to the Past.
|
Doors are not shuffled.
|
||||||
|
|
||||||
### Simple
|
### Experimental
|
||||||
|
|
||||||
Shuffles dungeon entrances between each other and keeps all 4-entrance dungeons confined to one location such that dungeons will one to one swap with each other.
|
Used for development testing. This will be removed in a future version. Use at your own risk. Might play like a plando.
|
||||||
Other than on Light World Death Mountain, interiors are shuffled but still connect the same points on the overworld. On Death Mountain, entrances are connected more freely.
|
|
||||||
|
|
||||||
### Restricted
|
### Restricted
|
||||||
|
|
||||||
@@ -319,9 +317,10 @@ Use to batch generate multiple seeds with same settings. If a seed number is pro
|
|||||||
Show the help message and exit.
|
Show the help message and exit.
|
||||||
|
|
||||||
```
|
```
|
||||||
--create_spoiler
|
--door_shuffle
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For specifying the door shuffle you want as above. (default: basic)
|
||||||
Output a Spoiler File (default: False)
|
Output a Spoiler File (default: False)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
+579
-113
@@ -94,26 +94,12 @@ def create_regions(world, player):
|
|||||||
create_lw_region(player, 'Desert Palace Stairs', None, ['Desert Palace Entrance (South)']),
|
create_lw_region(player, 'Desert Palace Stairs', None, ['Desert Palace Entrance (South)']),
|
||||||
create_lw_region(player, 'Desert Palace Lone Stairs', None, ['Desert Palace Stairs Drop', 'Desert Palace Entrance (East)']),
|
create_lw_region(player, 'Desert Palace Lone Stairs', None, ['Desert Palace Stairs Drop', 'Desert Palace Entrance (East)']),
|
||||||
create_lw_region(player, 'Desert Palace Entrance (North) Spot', None, ['Desert Palace Entrance (North)', 'Desert Ledge Return Rocks']),
|
create_lw_region(player, 'Desert Palace Entrance (North) Spot', None, ['Desert Palace Entrance (North)', 'Desert Ledge Return Rocks']),
|
||||||
create_dungeon_region(player, 'Desert Palace Main (Outer)', 'Desert Palace', ['Desert Palace - Big Chest', 'Desert Palace - Torch', 'Desert Palace - Map Chest'],
|
|
||||||
['Desert Palace Pots (Outer)', 'Desert Palace Exit (West)', 'Desert Palace Exit (East)', 'Desert Palace East Wing']),
|
|
||||||
create_dungeon_region(player, 'Desert Palace Main (Inner)', 'Desert Palace', None, ['Desert Palace Exit (South)', 'Desert Palace Pots (Inner)']),
|
|
||||||
create_dungeon_region(player, 'Desert Palace East', 'Desert Palace', ['Desert Palace - Compass Chest', 'Desert Palace - Big Key Chest']),
|
|
||||||
create_dungeon_region(player, 'Desert Palace North', 'Desert Palace', ['Desert Palace - Boss', 'Desert Palace - Prize'], ['Desert Palace Exit (North)']),
|
|
||||||
create_dungeon_region(player, 'Eastern Palace', 'Eastern Palace', ['Eastern Palace - Compass Chest', 'Eastern Palace - Big Chest', 'Eastern Palace - Cannonball Chest',
|
|
||||||
'Eastern Palace - Big Key Chest', 'Eastern Palace - Map Chest', 'Eastern Palace - Boss', 'Eastern Palace - Prize'], ['Eastern Palace Exit']),
|
|
||||||
create_lw_region(player, 'Master Sword Meadow', ['Master Sword Pedestal']),
|
create_lw_region(player, 'Master Sword Meadow', ['Master Sword Pedestal']),
|
||||||
create_cave_region(player, 'Lost Woods Gamble', 'a game of chance'),
|
create_cave_region(player, 'Lost Woods Gamble', 'a game of chance'),
|
||||||
create_lw_region(player, 'Hyrule Castle Courtyard', None, ['Hyrule Castle Secret Entrance Stairs', 'Hyrule Castle Entrance (South)']),
|
create_lw_region(player, 'Hyrule Castle Courtyard', None, ['Hyrule Castle Secret Entrance Stairs', 'Hyrule Castle Entrance (South)']),
|
||||||
create_lw_region(player, 'Hyrule Castle Ledge', None, ['Hyrule Castle Entrance (East)', 'Hyrule Castle Entrance (West)', 'Agahnims Tower', 'Hyrule Castle Ledge Courtyard Drop']),
|
create_lw_region(player, 'Hyrule Castle Ledge', None, ['Hyrule Castle Entrance (East)', 'Hyrule Castle Entrance (West)', 'Agahnims Tower', 'Hyrule Castle Ledge Courtyard Drop']),
|
||||||
create_dungeon_region(player, 'Hyrule Castle', 'Hyrule Castle', ['Hyrule Castle - Boomerang Chest', 'Hyrule Castle - Map Chest', 'Hyrule Castle - Zelda\'s Chest'],
|
|
||||||
['Hyrule Castle Exit (East)', 'Hyrule Castle Exit (West)', 'Hyrule Castle Exit (South)', 'Throne Room']),
|
|
||||||
create_dungeon_region(player, 'Sewer Drop', 'a drop\'s exit', None, ['Sewer Drop']), # This exists only to be referenced for access checks
|
create_dungeon_region(player, 'Sewer Drop', 'a drop\'s exit', None, ['Sewer Drop']), # This exists only to be referenced for access checks
|
||||||
create_dungeon_region(player, 'Sewers (Dark)', 'a drop\'s exit', ['Sewers - Dark Cross'], ['Sewers Door']),
|
|
||||||
create_dungeon_region(player, 'Sewers', 'a drop\'s exit', ['Sewers - Secret Room - Left', 'Sewers - Secret Room - Middle',
|
|
||||||
'Sewers - Secret Room - Right'], ['Sanctuary Push Door', 'Sewers Back Door']),
|
|
||||||
create_dungeon_region(player, 'Sanctuary', 'a drop\'s exit', ['Sanctuary'], ['Sanctuary Exit']),
|
|
||||||
create_dungeon_region(player, 'Agahnims Tower', 'Castle Tower', ['Castle Tower - Room 03', 'Castle Tower - Dark Maze'], ['Agahnim 1', 'Agahnims Tower Exit']),
|
|
||||||
create_dungeon_region(player, 'Agahnim 1', 'Castle Tower', ['Agahnim 1'], None),
|
|
||||||
create_cave_region(player, 'Old Man Cave', 'a connector', ['Old Man'], ['Old Man Cave Exit (East)', 'Old Man Cave Exit (West)']),
|
create_cave_region(player, 'Old Man Cave', 'a connector', ['Old Man'], ['Old Man Cave Exit (East)', 'Old Man Cave Exit (West)']),
|
||||||
create_cave_region(player, 'Old Man House', 'a connector', None, ['Old Man House Exit (Bottom)', 'Old Man House Front to Back']),
|
create_cave_region(player, 'Old Man House', 'a connector', None, ['Old Man House Exit (Bottom)', 'Old Man House Front to Back']),
|
||||||
create_cave_region(player, 'Old Man House Back', 'a connector', None, ['Old Man House Exit (Top)', 'Old Man House Back to Front']),
|
create_cave_region(player, 'Old Man House Back', 'a connector', None, ['Old Man House Exit (Top)', 'Old Man House Back to Front']),
|
||||||
@@ -147,9 +133,6 @@ def create_regions(world, player):
|
|||||||
create_lw_region(player, 'Fairy Ascension Ledge', None, ['Fairy Ascension Ledge Drop', 'Fairy Ascension Cave (Top)']),
|
create_lw_region(player, 'Fairy Ascension Ledge', None, ['Fairy Ascension Ledge Drop', 'Fairy Ascension Cave (Top)']),
|
||||||
create_lw_region(player, 'Death Mountain (Top)', ['Ether Tablet'], ['East Death Mountain (Top)', 'Tower of Hera', 'Death Mountain Drop']),
|
create_lw_region(player, 'Death Mountain (Top)', ['Ether Tablet'], ['East Death Mountain (Top)', 'Tower of Hera', 'Death Mountain Drop']),
|
||||||
create_lw_region(player, 'Spectacle Rock', ['Spectacle Rock'], ['Spectacle Rock Drop']),
|
create_lw_region(player, 'Spectacle Rock', ['Spectacle Rock'], ['Spectacle Rock Drop']),
|
||||||
create_dungeon_region(player, 'Tower of Hera (Bottom)', 'Tower of Hera', ['Tower of Hera - Basement Cage', 'Tower of Hera - Map Chest'], ['Tower of Hera Small Key Door', 'Tower of Hera Big Key Door', 'Tower of Hera Exit']),
|
|
||||||
create_dungeon_region(player, 'Tower of Hera (Basement)', 'Tower of Hera', ['Tower of Hera - Big Key Chest']),
|
|
||||||
create_dungeon_region(player, 'Tower of Hera (Top)', 'Tower of Hera', ['Tower of Hera - Compass Chest', 'Tower of Hera - Big Chest', 'Tower of Hera - Boss', 'Tower of Hera - Prize']),
|
|
||||||
|
|
||||||
create_dw_region(player, 'East Dark World', ['Pyramid'], ['Pyramid Fairy', 'South Dark World Bridge', 'Palace of Darkness', 'Dark Lake Hylia Drop (East)', 'Dark Lake Hylia Teleporter',
|
create_dw_region(player, 'East Dark World', ['Pyramid'], ['Pyramid Fairy', 'South Dark World Bridge', 'Palace of Darkness', 'Dark Lake Hylia Drop (East)', 'Dark Lake Hylia Teleporter',
|
||||||
'Hyrule Castle Ledge Mirror Spot', 'Dark Lake Hylia Fairy', 'Palace of Darkness Hint', 'East Dark World Hint', 'Pyramid Hole', 'Northeast Dark World Broken Bridge Pass']),
|
'Hyrule Castle Ledge Mirror Spot', 'Dark Lake Hylia Fairy', 'Palace of Darkness Hint', 'East Dark World Hint', 'Pyramid Hole', 'Northeast Dark World Broken Bridge Pass']),
|
||||||
@@ -210,99 +193,528 @@ def create_regions(world, player):
|
|||||||
create_lw_region(player, 'Mimic Cave Ledge', None, ['Mimic Cave']),
|
create_lw_region(player, 'Mimic Cave Ledge', None, ['Mimic Cave']),
|
||||||
create_cave_region(player, 'Mimic Cave', 'Mimic Cave', ['Mimic Cave']),
|
create_cave_region(player, 'Mimic Cave', 'Mimic Cave', ['Mimic Cave']),
|
||||||
|
|
||||||
create_dungeon_region(player, 'Swamp Palace (Entrance)', 'Swamp Palace', None, ['Swamp Palace Moat', 'Swamp Palace Exit']),
|
|
||||||
create_dungeon_region(player, 'Swamp Palace (First Room)', 'Swamp Palace', ['Swamp Palace - Entrance'], ['Swamp Palace Small Key Door']),
|
|
||||||
create_dungeon_region(player, 'Swamp Palace (Starting Area)', 'Swamp Palace', ['Swamp Palace - Map Chest'], ['Swamp Palace (Center)']),
|
|
||||||
create_dungeon_region(player, 'Swamp Palace (Center)', 'Swamp Palace', ['Swamp Palace - Big Chest', 'Swamp Palace - Compass Chest',
|
|
||||||
'Swamp Palace - Big Key Chest', 'Swamp Palace - West Chest'], ['Swamp Palace (North)']),
|
|
||||||
create_dungeon_region(player, 'Swamp Palace (North)', 'Swamp Palace', ['Swamp Palace - Flooded Room - Left', 'Swamp Palace - Flooded Room - Right',
|
|
||||||
'Swamp Palace - Waterfall Room', 'Swamp Palace - Boss', 'Swamp Palace - Prize']),
|
|
||||||
create_dungeon_region(player, 'Thieves Town (Entrance)', 'Thieves\' Town', ['Thieves\' Town - Big Key Chest',
|
|
||||||
'Thieves\' Town - Map Chest',
|
|
||||||
'Thieves\' Town - Compass Chest',
|
|
||||||
'Thieves\' Town - Ambush Chest'], ['Thieves Town Big Key Door', 'Thieves Town Exit']),
|
|
||||||
create_dungeon_region(player, 'Thieves Town (Deep)', 'Thieves\' Town', ['Thieves\' Town - Attic',
|
|
||||||
'Thieves\' Town - Big Chest',
|
|
||||||
'Thieves\' Town - Blind\'s Cell'], ['Blind Fight']),
|
|
||||||
create_dungeon_region(player, 'Blind Fight', 'Thieves\' Town', ['Thieves\' Town - Boss', 'Thieves\' Town - Prize']),
|
|
||||||
create_dungeon_region(player, 'Skull Woods First Section', 'Skull Woods', ['Skull Woods - Map Chest'], ['Skull Woods First Section Exit', 'Skull Woods First Section Bomb Jump', 'Skull Woods First Section South Door', 'Skull Woods First Section West Door']),
|
|
||||||
create_dungeon_region(player, 'Skull Woods First Section (Right)', 'Skull Woods', ['Skull Woods - Pinball Room'], ['Skull Woods First Section (Right) North Door']),
|
|
||||||
create_dungeon_region(player, 'Skull Woods First Section (Left)', 'Skull Woods', ['Skull Woods - Compass Chest', 'Skull Woods - Pot Prison'], ['Skull Woods First Section (Left) Door to Exit', 'Skull Woods First Section (Left) Door to Right']),
|
|
||||||
create_dungeon_region(player, 'Skull Woods First Section (Top)', 'Skull Woods', ['Skull Woods - Big Chest'], ['Skull Woods First Section (Top) One-Way Path']),
|
|
||||||
create_dungeon_region(player, 'Skull Woods Second Section (Drop)', 'Skull Woods', None, ['Skull Woods Second Section (Drop)']),
|
|
||||||
create_dungeon_region(player, 'Skull Woods Second Section', 'Skull Woods', ['Skull Woods - Big Key Chest'], ['Skull Woods Second Section Exit (East)', 'Skull Woods Second Section Exit (West)']),
|
|
||||||
create_dungeon_region(player, 'Skull Woods Final Section (Entrance)', 'Skull Woods', ['Skull Woods - Bridge Room'], ['Skull Woods Torch Room', 'Skull Woods Final Section Exit']),
|
|
||||||
create_dungeon_region(player, 'Skull Woods Final Section (Mothula)', 'Skull Woods', ['Skull Woods - Boss', 'Skull Woods - Prize']),
|
|
||||||
create_dungeon_region(player, 'Ice Palace (Entrance)', 'Ice Palace', None, ['Ice Palace Entrance Room', 'Ice Palace Exit']),
|
|
||||||
create_dungeon_region(player, 'Ice Palace (Main)', 'Ice Palace', ['Ice Palace - Compass Chest', 'Ice Palace - Freezor Chest',
|
|
||||||
'Ice Palace - Big Chest', 'Ice Palace - Iced T Room'], ['Ice Palace (East)', 'Ice Palace (Kholdstare)']),
|
|
||||||
create_dungeon_region(player, 'Ice Palace (East)', 'Ice Palace', ['Ice Palace - Spike Room'], ['Ice Palace (East Top)']),
|
|
||||||
create_dungeon_region(player, 'Ice Palace (East Top)', 'Ice Palace', ['Ice Palace - Big Key Chest', 'Ice Palace - Map Chest']),
|
|
||||||
create_dungeon_region(player, 'Ice Palace (Kholdstare)', 'Ice Palace', ['Ice Palace - Boss', 'Ice Palace - Prize']),
|
|
||||||
create_dungeon_region(player, 'Misery Mire (Entrance)', 'Misery Mire', None, ['Misery Mire Entrance Gap', 'Misery Mire Exit']),
|
|
||||||
create_dungeon_region(player, 'Misery Mire (Main)', 'Misery Mire', ['Misery Mire - Big Chest', 'Misery Mire - Map Chest', 'Misery Mire - Main Lobby',
|
|
||||||
'Misery Mire - Bridge Chest', 'Misery Mire - Spike Chest'], ['Misery Mire (West)', 'Misery Mire Big Key Door']),
|
|
||||||
create_dungeon_region(player, 'Misery Mire (West)', 'Misery Mire', ['Misery Mire - Compass Chest', 'Misery Mire - Big Key Chest']),
|
|
||||||
create_dungeon_region(player, 'Misery Mire (Final Area)', 'Misery Mire', None, ['Misery Mire (Vitreous)']),
|
|
||||||
create_dungeon_region(player, 'Misery Mire (Vitreous)', 'Misery Mire', ['Misery Mire - Boss', 'Misery Mire - Prize']),
|
|
||||||
create_dungeon_region(player, 'Turtle Rock (Entrance)', 'Turtle Rock', None, ['Turtle Rock Entrance Gap', 'Turtle Rock Exit (Front)']),
|
|
||||||
create_dungeon_region(player, 'Turtle Rock (First Section)', 'Turtle Rock', ['Turtle Rock - Compass Chest', 'Turtle Rock - Roller Room - Left',
|
|
||||||
'Turtle Rock - Roller Room - Right'], ['Turtle Rock Pokey Room', 'Turtle Rock Entrance Gap Reverse']),
|
|
||||||
create_dungeon_region(player, 'Turtle Rock (Chain Chomp Room)', 'Turtle Rock', ['Turtle Rock - Chain Chomps'], ['Turtle Rock (Chain Chomp Room) (North)', 'Turtle Rock (Chain Chomp Room) (South)']),
|
|
||||||
create_dungeon_region(player, 'Turtle Rock (Second Section)', 'Turtle Rock', ['Turtle Rock - Big Key Chest'], ['Turtle Rock Ledge Exit (West)', 'Turtle Rock Chain Chomp Staircase', 'Turtle Rock Big Key Door']),
|
|
||||||
create_dungeon_region(player, 'Turtle Rock (Big Chest)', 'Turtle Rock', ['Turtle Rock - Big Chest'], ['Turtle Rock (Big Chest) (North)', 'Turtle Rock Ledge Exit (East)']),
|
|
||||||
create_dungeon_region(player, 'Turtle Rock (Crystaroller Room)', 'Turtle Rock', ['Turtle Rock - Crystaroller Room'], ['Turtle Rock Dark Room Staircase', 'Turtle Rock Big Key Door Reverse']),
|
|
||||||
create_dungeon_region(player, 'Turtle Rock (Dark Room)', 'Turtle Rock', None, ['Turtle Rock (Dark Room) (North)', 'Turtle Rock (Dark Room) (South)']),
|
|
||||||
create_dungeon_region(player, 'Turtle Rock (Eye Bridge)', 'Turtle Rock', ['Turtle Rock - Eye Bridge - Bottom Left', 'Turtle Rock - Eye Bridge - Bottom Right',
|
|
||||||
'Turtle Rock - Eye Bridge - Top Left', 'Turtle Rock - Eye Bridge - Top Right'],
|
|
||||||
['Turtle Rock Dark Room (South)', 'Turtle Rock (Trinexx)', 'Turtle Rock Isolated Ledge Exit']),
|
|
||||||
create_dungeon_region(player, 'Turtle Rock (Trinexx)', 'Turtle Rock', ['Turtle Rock - Boss', 'Turtle Rock - Prize']),
|
|
||||||
create_dungeon_region(player, 'Palace of Darkness (Entrance)', 'Palace of Darkness', ['Palace of Darkness - Shooter Room'], ['Palace of Darkness Bridge Room', 'Palace of Darkness Bonk Wall', 'Palace of Darkness Exit']),
|
|
||||||
create_dungeon_region(player, 'Palace of Darkness (Center)', 'Palace of Darkness', ['Palace of Darkness - The Arena - Bridge', 'Palace of Darkness - Stalfos Basement'],
|
|
||||||
['Palace of Darkness Big Key Chest Staircase', 'Palace of Darkness (North)', 'Palace of Darkness Big Key Door']),
|
|
||||||
create_dungeon_region(player, 'Palace of Darkness (Big Key Chest)', 'Palace of Darkness', ['Palace of Darkness - Big Key Chest']),
|
|
||||||
create_dungeon_region(player, 'Palace of Darkness (Bonk Section)', 'Palace of Darkness', ['Palace of Darkness - The Arena - Ledge', 'Palace of Darkness - Map Chest'], ['Palace of Darkness Hammer Peg Drop']),
|
|
||||||
create_dungeon_region(player, 'Palace of Darkness (North)', 'Palace of Darkness', ['Palace of Darkness - Compass Chest', 'Palace of Darkness - Dark Basement - Left', 'Palace of Darkness - Dark Basement - Right'],
|
|
||||||
['Palace of Darkness Spike Statue Room Door', 'Palace of Darkness Maze Door']),
|
|
||||||
create_dungeon_region(player, 'Palace of Darkness (Maze)', 'Palace of Darkness', ['Palace of Darkness - Dark Maze - Top', 'Palace of Darkness - Dark Maze - Bottom', 'Palace of Darkness - Big Chest']),
|
|
||||||
create_dungeon_region(player, 'Palace of Darkness (Harmless Hellway)', 'Palace of Darkness', ['Palace of Darkness - Harmless Hellway']),
|
|
||||||
create_dungeon_region(player, 'Palace of Darkness (Final Section)', 'Palace of Darkness', ['Palace of Darkness - Boss', 'Palace of Darkness - Prize']),
|
|
||||||
create_dungeon_region(player, 'Ganons Tower (Entrance)', 'Ganon\'s Tower', ['Ganons Tower - Bob\'s Torch', 'Ganons Tower - Hope Room - Left', 'Ganons Tower - Hope Room - Right'],
|
|
||||||
['Ganons Tower (Tile Room)', 'Ganons Tower (Hookshot Room)', 'Ganons Tower Big Key Door', 'Ganons Tower Exit']),
|
|
||||||
create_dungeon_region(player, 'Ganons Tower (Tile Room)', 'Ganon\'s Tower', ['Ganons Tower - Tile Room'], ['Ganons Tower (Tile Room) Key Door']),
|
|
||||||
create_dungeon_region(player, 'Ganons Tower (Compass Room)', 'Ganon\'s Tower', ['Ganons Tower - Compass Room - Top Left', 'Ganons Tower - Compass Room - Top Right',
|
|
||||||
'Ganons Tower - Compass Room - Bottom Left', 'Ganons Tower - Compass Room - Bottom Right'],
|
|
||||||
['Ganons Tower (Bottom) (East)']),
|
|
||||||
create_dungeon_region(player, 'Ganons Tower (Hookshot Room)', 'Ganon\'s Tower', ['Ganons Tower - DMs Room - Top Left', 'Ganons Tower - DMs Room - Top Right',
|
|
||||||
'Ganons Tower - DMs Room - Bottom Left', 'Ganons Tower - DMs Room - Bottom Right'],
|
|
||||||
['Ganons Tower (Map Room)', 'Ganons Tower (Double Switch Room)']),
|
|
||||||
create_dungeon_region(player, 'Ganons Tower (Map Room)', 'Ganon\'s Tower', ['Ganons Tower - Map Chest']),
|
|
||||||
create_dungeon_region(player, 'Ganons Tower (Firesnake Room)', 'Ganon\'s Tower', ['Ganons Tower - Firesnake Room'], ['Ganons Tower (Firesnake Room)']),
|
|
||||||
create_dungeon_region(player, 'Ganons Tower (Teleport Room)', 'Ganon\'s Tower', ['Ganons Tower - Randomizer Room - Top Left', 'Ganons Tower - Randomizer Room - Top Right',
|
|
||||||
'Ganons Tower - Randomizer Room - Bottom Left', 'Ganons Tower - Randomizer Room - Bottom Right'],
|
|
||||||
['Ganons Tower (Bottom) (West)']),
|
|
||||||
create_dungeon_region(player, 'Ganons Tower (Bottom)', 'Ganon\'s Tower', ['Ganons Tower - Bob\'s Chest', 'Ganons Tower - Big Chest', 'Ganons Tower - Big Key Room - Left',
|
|
||||||
'Ganons Tower - Big Key Room - Right', 'Ganons Tower - Big Key Chest']),
|
|
||||||
create_dungeon_region(player, 'Ganons Tower (Top)', 'Ganon\'s Tower', None, ['Ganons Tower Torch Rooms']),
|
|
||||||
create_dungeon_region(player, 'Ganons Tower (Before Moldorm)', 'Ganon\'s Tower', ['Ganons Tower - Mini Helmasaur Room - Left', 'Ganons Tower - Mini Helmasaur Room - Right',
|
|
||||||
'Ganons Tower - Pre-Moldorm Chest'], ['Ganons Tower Moldorm Door']),
|
|
||||||
create_dungeon_region(player, 'Ganons Tower (Moldorm)', 'Ganon\'s Tower', None, ['Ganons Tower Moldorm Gap']),
|
|
||||||
create_dungeon_region(player, 'Agahnim 2', 'Ganon\'s Tower', ['Ganons Tower - Validation Chest', 'Agahnim 2'], None),
|
|
||||||
create_cave_region(player, 'Pyramid', 'a drop\'s exit', ['Ganon'], ['Ganon Drop']),
|
create_cave_region(player, 'Pyramid', 'a drop\'s exit', ['Ganon'], ['Ganon Drop']),
|
||||||
create_cave_region(player, 'Bottom of Pyramid', 'a drop\'s exit', None, ['Pyramid Exit']),
|
create_cave_region(player, 'Bottom of Pyramid', 'a drop\'s exit', None, ['Pyramid Exit']),
|
||||||
create_dw_region(player, 'Pyramid Ledge', None, ['Pyramid Entrance', 'Pyramid Drop'])
|
create_dw_region(player, 'Pyramid Ledge', None, ['Pyramid Entrance', 'Pyramid Drop']),
|
||||||
|
|
||||||
|
create_dungeon_region(player, 'Hyrule Castle Lobby', 'Hyrule Castle', None, ['Hyrule Castle Lobby W', 'Hyrule Castle Lobby E',
|
||||||
|
'Hyrule Castle Lobby WN', 'Hyrule Castle Lobby North Stairs', 'Hyrule Castle Exit (South)']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Castle West Lobby', 'Hyrule Castle', None, ['Hyrule Castle West Lobby E', 'Hyrule Castle West Lobby N',
|
||||||
|
'Hyrule Castle West Lobby EN', 'Hyrule Castle Exit (West)']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Castle East Lobby', 'Hyrule Castle', None, ['Hyrule Castle East Lobby W', 'Hyrule Castle East Lobby N',
|
||||||
|
'Hyrule Castle East Lobby NW', 'Hyrule Castle Exit (East)']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Castle East Hall', 'Hyrule Castle', None, ['Hyrule Castle East Hall W', 'Hyrule Castle East Hall S',
|
||||||
|
'Hyrule Castle East Hall SW']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Castle West Hall', 'Hyrule Castle', None, ['Hyrule Castle West Hall E', 'Hyrule Castle West Hall S']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Castle Back Hall', 'Hyrule Castle', None, ['Hyrule Castle Back Hall E', 'Hyrule Castle Back Hall W', 'Hyrule Castle Back Hall Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Castle Throne Room', 'Hyrule Castle', None, ['Hyrule Castle Throne Room N', 'Hyrule Castle Throne Room South Stairs']),
|
||||||
|
|
||||||
|
create_dungeon_region(player, 'Hyrule Dungeon Map Room', 'Hyrule Castle', ['Hyrule Castle - Map Chest', 'Hyrule Castle - Map Guard Key Drop'], ['Hyrule Dungeon Map Room Key Door S', 'Hyrule Dungeon Map Room Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Dungeon North Abyss', 'Hyrule Castle', None, ['Hyrule Dungeon North Abyss South Edge', 'Hyrule Dungeon North Abyss Key Door N']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Dungeon North Abyss Catwalk', 'Hyrule Castle', None, ['Hyrule Dungeon North Abyss Catwalk Edge', 'Hyrule Dungeon North Abyss Catwalk Dropdown']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Dungeon South Abyss', 'Hyrule Castle', None, ['Hyrule Dungeon South Abyss North Edge', 'Hyrule Dungeon South Abyss West Edge']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Dungeon South Abyss Catwalk', 'Hyrule Castle', None, ['Hyrule Dungeon South Abyss Catwalk North Edge', 'Hyrule Dungeon South Abyss Catwalk West Edge']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Dungeon Guardroom', 'Hyrule Castle', None, ['Hyrule Dungeon Guardroom Catwalk Edge', 'Hyrule Dungeon Guardroom Abyss Edge', 'Hyrule Dungeon Guardroom N']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Dungeon Armory Main', 'Hyrule Castle', None, ['Hyrule Dungeon Armory S', 'Hyrule Dungeon Armory Interior Key Door N', 'Hyrule Dungeon Armory ES']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Dungeon Armory Boomerang', 'Hyrule Castle', ['Hyrule Castle - Boomerang Chest', 'Hyrule Castle - Boomerang Guard Key Drop'], ['Hyrule Dungeon Armory Boomerang WS']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Dungeon Armory North Branch', 'Hyrule Castle', None, ['Hyrule Dungeon Armory Interior Key Door S', 'Hyrule Dungeon Armory Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Dungeon Staircase', 'Hyrule Castle', None, ['Hyrule Dungeon Staircase Up Stairs', 'Hyrule Dungeon Staircase Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Dungeon Cellblock', 'Hyrule Castle', ['Hyrule Castle - Big Key Drop', 'Hyrule Castle - Zelda\'s Chest'], ['Hyrule Dungeon Cellblock Up Stairs']),
|
||||||
|
|
||||||
|
|
||||||
|
create_dungeon_region(player, 'Sewers Behind Tapestry', 'Hyrule Castle', None, ['Sewers Behind Tapestry S', 'Sewers Behind Tapestry Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'Sewers Rope Room', 'Hyrule Castle', None, ['Sewers Rope Room Up Stairs', 'Sewers Rope Room North Stairs']),
|
||||||
|
create_dungeon_region(player, 'Sewers Dark Cross', 'Hyrule Castle', ['Sewers - Dark Cross'], ['Sewers Dark Cross Key Door N', 'Sewers Dark Cross South Stairs']),
|
||||||
|
create_dungeon_region(player, 'Sewers Water', 'Hyrule Castle', None, ['Sewers Dark Cross Key Door S', 'Sewers Water W']),
|
||||||
|
create_dungeon_region(player, 'Sewers Key Rat', 'Hyrule Castle', ['Hyrule Castle - Key Rat Key Drop'], ['Sewers Key Rat E', 'Sewers Key Rat Key Door N']),
|
||||||
|
create_dungeon_region(player, 'Sewers Secret Room Blocked Path', 'Hyrule Castle', None, ['Sewers Secret Room Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'Sewers Rat Path', 'Hyrule Castle', None, ['Sewers Secret Room Key Door S', 'Sewers Secret Room Push Block', 'Sewers Rat Path WS', 'Sewers Rat Path WN']),
|
||||||
|
create_dungeon_region(player, 'Sewers Secret Room', 'Hyrule Castle', ['Sewers - Secret Room - Left', 'Sewers - Secret Room - Middle', 'Sewers - Secret Room - Right'],
|
||||||
|
['Sewers Secret Room ES', 'Sewers Secret Room EN']),
|
||||||
|
create_dungeon_region(player, 'Sewers Yet More Rats', 'Hyrule Castle', None, ['Sewers Pull Switch Down Stairs', 'Sewers Yet More Rats S']),
|
||||||
|
create_dungeon_region(player, 'Sewers Pull Switch', 'Hyrule Castle', None, ['Sewers Pull Switch N', 'Sewers Pull Switch S']),
|
||||||
|
create_dungeon_region(player, 'Sanctuary', 'Hyrule Castle', ['Sanctuary'], ['Sanctuary Exit', 'Sanctuary N']),
|
||||||
|
|
||||||
|
# Eastern Palace
|
||||||
|
create_dungeon_region(player, 'Eastern Lobby', 'Eastern Palace', None, ['Eastern Lobby N', 'Eastern Palace Exit', 'Eastern Lobby NW', 'Eastern Lobby NE']),
|
||||||
|
create_dungeon_region(player, 'Eastern Lobby Bridge', 'Eastern Palace', None, ['Eastern Lobby Bridge S', 'Eastern Lobby Bridge N']),
|
||||||
|
create_dungeon_region(player, 'Eastern Lobby Left Ledge', 'Eastern Palace', None, ['Eastern Lobby Left Ledge SW']),
|
||||||
|
create_dungeon_region(player, 'Eastern Lobby Right Ledge', 'Eastern Palace', None, ['Eastern Lobby Right Ledge SE']),
|
||||||
|
create_dungeon_region(player, 'Eastern Cannonball', 'Eastern Palace', ['Eastern Palace - Cannonball Chest'], ['Eastern Cannonball S', 'Eastern Cannonball N']),
|
||||||
|
create_dungeon_region(player, 'Eastern Cannonball Ledge', 'Eastern Palace', None, ['Eastern Cannonball Ledge WN', 'Eastern Cannonball Ledge Key Door EN']),
|
||||||
|
create_dungeon_region(player, 'Eastern Courtyard Ledge', 'Eastern Palace', None, ['Eastern Courtyard Ledge S', 'Eastern Courtyard Ledge W', 'Eastern Courtyard Ledge E']),
|
||||||
|
create_dungeon_region(player, 'Eastern East Wing', 'Eastern Palace', None, ['Eastern East Wing W', 'Eastern East Wing EN', 'Eastern East Wing ES']),
|
||||||
|
create_dungeon_region(player, 'Eastern Pot Switch', 'Eastern Palace', None, ['Eastern Pot Switch WN', 'Eastern Pot Switch SE']),
|
||||||
|
create_dungeon_region(player, 'Eastern Map Balcony', 'Eastern Palace', None, ['Eastern Map Balcony WS', 'Eastern Map Balcony Hook Path']),
|
||||||
|
create_dungeon_region(player, 'Eastern Map Room', 'Eastern Palace', ['Eastern Palace - Map Chest'], ['Eastern Map Room NE', 'Eastern Map Room Drop Down']),
|
||||||
|
create_dungeon_region(player, 'Eastern West Wing', 'Eastern Palace', None, ['Eastern West Wing E', 'Eastern West Wing WS']),
|
||||||
|
create_dungeon_region(player, 'Eastern Stalfos Spawn', 'Eastern Palace', None, ['Eastern Stalfos Spawn ES', 'Eastern Stalfos Spawn NW']),
|
||||||
|
create_dungeon_region(player, 'Eastern Compass Room', 'Eastern Palace', ['Eastern Palace - Compass Chest'], ['Eastern Compass Room EN', 'Eastern Compass Room SW']),
|
||||||
|
create_dungeon_region(player, 'Eastern Hint Tile', 'Eastern Palace', None, ['Eastern Hint Tile EN', 'Eastern Hint Tile WN']),
|
||||||
|
create_dungeon_region(player, 'Eastern Hint Tile Blocked Path', 'Eastern Palace', None, ['Eastern Hint Tile Blocked Path SE', 'Eastern Hint Tile Push Block']),
|
||||||
|
create_dungeon_region(player, 'Eastern Courtyard', 'Eastern Palace', ['Eastern Palace - Big Chest'], ['Eastern Courtyard WN', 'Eastern Courtyard EN', 'Eastern Courtyard N', 'Eastern Courtyard Potholes']),
|
||||||
|
create_dungeon_region(player, 'Eastern Fairies', 'Eastern Palace', None, ['Eastern Fairies\' Warp']),
|
||||||
|
create_dungeon_region(player, 'Eastern Map Valley', 'Eastern Palace', None, ['Eastern Map Valley WN', 'Eastern Map Valley SW']),
|
||||||
|
create_dungeon_region(player, 'Eastern Dark Square', 'Eastern Palace', None, ['Eastern Dark Square NW', 'Eastern Dark Square Key Door WN', 'Eastern Dark Square EN']),
|
||||||
|
create_dungeon_region(player, 'Eastern Dark Pots', 'Eastern Palace', ['Eastern Palace - Dark Square Pot Key'], ['Eastern Dark Pots WN']),
|
||||||
|
create_dungeon_region(player, 'Eastern Big Key', 'Eastern Palace', ['Eastern Palace - Big Key Chest'], ['Eastern Big Key EN', 'Eastern Big Key NE']),
|
||||||
|
create_dungeon_region(player, 'Eastern Darkness', 'Eastern Palace', ['Eastern Palace - Dark Eyegore Key Drop'], ['Eastern Darkness S', 'Eastern Darkness Up Stairs', 'Eastern Darkness NE']),
|
||||||
|
create_dungeon_region(player, 'Eastern Rupees', 'Eastern Palace', None, ['Eastern Rupees SE']),
|
||||||
|
create_dungeon_region(player, 'Eastern Attic Start', 'Eastern Palace', None, ['Eastern Attic Start Down Stairs', 'Eastern Attic Start WS']),
|
||||||
|
create_dungeon_region(player, 'Eastern False Switches', 'Eastern Palace', None, ['Eastern False Switches ES', 'Eastern False Switches WS']),
|
||||||
|
create_dungeon_region(player, 'Eastern Cannonball Hell', 'Eastern Palace', None, ['Eastern Cannonball Hell ES', 'Eastern Cannonball Hell WS']),
|
||||||
|
create_dungeon_region(player, 'Eastern Single Eyegore', 'Eastern Palace', None, ['Eastern Single Eyegore ES', 'Eastern Single Eyegore NE']),
|
||||||
|
create_dungeon_region(player, 'Eastern Duo Eyegores', 'Eastern Palace', None, ['Eastern Duo Eyegores SE', 'Eastern Duo Eyegores NE']),
|
||||||
|
create_dungeon_region(player, 'Eastern Boss', 'Eastern Palace', ['Eastern Palace - Boss', 'Eastern Palace - Prize'], ['Eastern Boss SE']),
|
||||||
|
|
||||||
|
# Desert Palace
|
||||||
|
# note for later: pots in desert keep out the bunny - logically (though not practically b/c of dungeon bunny revival)
|
||||||
|
create_dungeon_region(player, 'Desert Main Lobby', 'Desert Palace', None, ['Desert Palace Exit (South)','Desert Main Lobby NW Edge', 'Desert Main Lobby N Edge', 'Desert Main Lobby NE Edge', 'Desert Main Lobby E Edge']),
|
||||||
|
create_dungeon_region(player, 'Desert Dead End', 'Desert Palace', None, ['Desert Dead End Edge']),
|
||||||
|
create_dungeon_region(player, 'Desert East Lobby', 'Desert Palace', None, ['Desert East Lobby WS', 'Desert Palace Exit (East)']),
|
||||||
|
create_dungeon_region(player, 'Desert East Wing', 'Desert Palace', None, ['Desert East Wing ES', 'Desert East Wing Key Door EN', 'Desert East Wing W Edge', 'Desert East Wing N Edge']),
|
||||||
|
create_dungeon_region(player, 'Desert Compass Room', 'Desert Palace', ['Desert Palace - Compass Chest'], ['Desert Compass Key Door WN', 'Desert Compass NW']),
|
||||||
|
create_dungeon_region(player, 'Desert Cannonball', 'Desert Palace', ['Desert Palace - Big Key Chest'], ['Desert Cannonball S']),
|
||||||
|
create_dungeon_region(player, 'Desert Arrow Pot Corner', 'Desert Palace', None, ['Desert Arrow Pot Corner S Edge', 'Desert Arrow Pot Corner W Edge', 'Desert Arrow Pot Corner NW']),
|
||||||
|
create_dungeon_region(player, 'Desert Trap Room', 'Desert Palace', None, ['Desert Trap Room SW']),
|
||||||
|
create_dungeon_region(player, 'Desert North Hall', 'Desert Palace', None, ['Desert North Hall SE Edge', 'Desert North Hall SW Edge', 'Desert North Hall W Edge', 'Desert North Hall E Edge', 'Desert North Hall NW', 'Desert North Hall NE']),
|
||||||
|
create_dungeon_region(player, 'Desert Map Room', 'Desert Palace', ['Desert Palace - Map Chest'], ['Desert Map SW', 'Desert Map SE']),
|
||||||
|
create_dungeon_region(player, 'Desert Sandworm Corner', 'Desert Palace', None, ['Desert Sandworm Corner S Edge', 'Desert Sandworm Corner E Edge', 'Desert Sandworm Corner NE', 'Desert Sandworm Corner WS']),
|
||||||
|
create_dungeon_region(player, 'Desert Bonk Torch', 'Desert Palace', ['Desert Palace - Torch'], ['Desert Bonk Torch SE']),
|
||||||
|
create_dungeon_region(player, 'Desert Circle of Pots', 'Desert Palace', None, ['Desert Circle of Pots ES', 'Desert Circle of Pots NW']),
|
||||||
|
create_dungeon_region(player, 'Desert Big Chest Room', 'Desert Palace', ['Desert Palace - Big Chest'], ['Desert Big Chest SW']),
|
||||||
|
create_dungeon_region(player, 'Desert West Wing', 'Desert Palace', None, ['Desert West Wing N Edge', 'Desert West Wing WS']),
|
||||||
|
create_dungeon_region(player, 'Desert West Lobby', 'Desert Palace', None, ['Desert West Lobby ES', 'Desert Palace Exit (West)', 'Desert West Lobby NW']),
|
||||||
|
create_dungeon_region(player, 'Desert Fairy Fountain', 'Desert Palace', None, ['Desert Fairy Fountain SW']),
|
||||||
|
create_dungeon_region(player, 'Desert Back Lobby', 'Desert Palace', None, ['Desert Palace Exit (North)', 'Desert Back Lobby NW']),
|
||||||
|
create_dungeon_region(player, 'Desert Tiles 1', 'Desert Palace', ['Desert Palace - Desert Tiles 1 Pot Key'], ['Desert Tiles 1 SW', 'Desert Tiles 1 Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'Desert Bridge', 'Desert Palace', None, ['Desert Bridge Down Stairs', 'Desert Bridge SW']),
|
||||||
|
create_dungeon_region(player, 'Desert Four Statues', 'Desert Palace', None, ['Desert Four Statues NW', 'Desert Four Statues ES']),
|
||||||
|
create_dungeon_region(player, 'Desert Beamos Hall', 'Desert Palace', ['Desert Palace - Beamos Hall Pot Key'], ['Desert Beamos Hall WS', 'Desert Beamos Hall NE']),
|
||||||
|
create_dungeon_region(player, 'Desert Tiles 2', 'Desert Palace', ['Desert Palace - Desert Tiles 2 Pot Key'], ['Desert Tiles 2 SE', 'Desert Tiles 2 NE']),
|
||||||
|
create_dungeon_region(player, 'Desert Wall Slide', 'Desert Palace', None, ['Desert Wall Slide SE', 'Desert Wall Slide NW']),
|
||||||
|
create_dungeon_region(player, 'Desert Boss', 'Desert Palace', ['Desert Palace - Boss', 'Desert Palace - Prize'], ['Desert Boss SW']),
|
||||||
|
|
||||||
|
# Hera
|
||||||
|
create_dungeon_region(player, 'Hera Lobby', 'Tower of Hera', ['Tower of Hera - Map Chest'], ['Hera Lobby Down Stairs', 'Hera Lobby Key Stairs', 'Hera Lobby Up Stairs', 'Tower of Hera Exit']),
|
||||||
|
create_dungeon_region(player, 'Hera Basement Cage', 'Tower of Hera', ['Tower of Hera - Basement Cage'], ['Hera Basement Cage Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'Hera Tile Room', 'Tower of Hera', None, ['Hera Tile Room Up Stairs', 'Hera Tile Room EN']),
|
||||||
|
create_dungeon_region(player, 'Hera Tridorm', 'Tower of Hera', None, ['Hera Tridorm WN', 'Hera Tridorm SE']),
|
||||||
|
create_dungeon_region(player, 'Hera Torches', 'Tower of Hera', ['Tower of Hera - Big Key Chest'], ['Hera Torches NE']),
|
||||||
|
create_dungeon_region(player, 'Hera Beetles', 'Tower of Hera', None, ['Hera Beetles Down Stairs', 'Hera Beetles WS', 'Hera Beetles Holes']),
|
||||||
|
create_dungeon_region(player, 'Hera Startile Corner', 'Tower of Hera', None, ['Hera Startile Corner ES', 'Hera Startile Corner NW', 'Hera Startile Corner Holes']),
|
||||||
|
create_dungeon_region(player, 'Hera Startile Wide', 'Tower of Hera', None, ['Hera Startile Wide SW', 'Hera Startile Wide Up Stairs', 'Hera Startile Wide Holes']),
|
||||||
|
create_dungeon_region(player, 'Hera 4F', 'Tower of Hera', ['Tower of Hera - Compass Chest'], ['Hera 4F Down Stairs', 'Hera 4F Up Stairs', 'Hera 4F Holes']),
|
||||||
|
create_dungeon_region(player, 'Hera Big Chest Landing', 'Tower of Hera', ['Tower of Hera - Big Chest'], ['Hera Big Chest Landing Exit', 'Hera Big Chest Landing Holes']),
|
||||||
|
create_dungeon_region(player, 'Hera 5F', 'Tower of Hera', None, ['Hera 5F Down Stairs', 'Hera 5F Up Stairs', 'Hera 5F Star Hole', 'Hera 5F Pothole Chain', 'Hera 5F Normal Holes']),
|
||||||
|
create_dungeon_region(player, 'Hera Fairies', 'Tower of Hera', None, ['Hera Fairies\' Warp']),
|
||||||
|
create_dungeon_region(player, 'Hera Boss', 'Tower of Hera', ['Tower of Hera - Boss', 'Tower of Hera - Prize'], ['Hera Boss Down Stairs', 'Hera Boss Outer Hole', 'Hera Boss Inner Hole']),
|
||||||
|
|
||||||
|
# AgaTower
|
||||||
|
create_dungeon_region(player, 'Tower Lobby', 'Castle Tower', None, ['Tower Lobby NW', 'Agahnims Tower Exit']),
|
||||||
|
create_dungeon_region(player, 'Tower Gold Knights', 'Castle Tower', None, ['Tower Gold Knights SW', 'Tower Gold Knights EN']),
|
||||||
|
create_dungeon_region(player, 'Tower Room 03', 'Castle Tower', ['Castle Tower - Room 03'], ['Tower Room 03 WN', 'Tower Room 03 Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'Tower Lone Statue', 'Castle Tower', None, ['Tower Lone Statue Down Stairs', 'Tower Lone Statue WN']),
|
||||||
|
create_dungeon_region(player, 'Tower Dark Maze', 'Castle Tower', ['Castle Tower - Dark Maze'], ['Tower Dark Maze EN', 'Tower Dark Maze ES']),
|
||||||
|
create_dungeon_region(player, 'Tower Dark Chargers', 'Castle Tower', None, ['Tower Dark Chargers WS', 'Tower Dark Chargers Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'Tower Dual Statues', 'Castle Tower', None, ['Tower Dual Statues Down Stairs', 'Tower Dual Statues WS']),
|
||||||
|
create_dungeon_region(player, 'Tower Dark Pits', 'Castle Tower', None, ['Tower Dark Pits ES', 'Tower Dark Pits EN']),
|
||||||
|
create_dungeon_region(player, 'Tower Dark Archers', 'Castle Tower', ['Castle Tower - Dark Archer Key Drop'], ['Tower Dark Archers WN', 'Tower Dark Archers Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'Tower Red Spears', 'Castle Tower', None, ['Tower Red Spears Down Stairs', 'Tower Red Spears WN']),
|
||||||
|
create_dungeon_region(player, 'Tower Red Guards', 'Castle Tower', None, ['Tower Red Guards EN', 'Tower Red Guards SW']),
|
||||||
|
create_dungeon_region(player, 'Tower Circle of Pots', 'Castle Tower', ['Castle Tower - Circle of Pots Key Drop'], ['Tower Circle of Pots NW', 'Tower Circle of Pots WS']),
|
||||||
|
create_dungeon_region(player, 'Tower Pacifist Run', 'Castle Tower', None, ['Tower Pacifist Run ES', 'Tower Pacifist Run Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'Tower Push Statue', 'Castle Tower', None, ['Tower Push Statue Down Stairs', 'Tower Push Statue WS']),
|
||||||
|
create_dungeon_region(player, 'Tower Catwalk', 'Castle Tower', None, ['Tower Catwalk ES', 'Tower Catwalk North Stairs']),
|
||||||
|
create_dungeon_region(player, 'Tower Antechamber', 'Castle Tower', None, ['Tower Antechamber South Stairs', 'Tower Antechamber NW']),
|
||||||
|
create_dungeon_region(player, 'Tower Altar', 'Castle Tower', None, ['Tower Altar SW', 'Tower Altar NW']),
|
||||||
|
create_dungeon_region(player, 'Tower Agahnim 1', 'Castle Tower', ['Agahnim 1'], ['Tower Agahnim 1 SW']),
|
||||||
|
|
||||||
|
# pod
|
||||||
|
create_dungeon_region(player, 'PoD Lobby', 'Palace of Darkness', None, ['PoD Lobby N', 'PoD Lobby NW', 'PoD Lobby NE', 'Palace of Darkness Exit']),
|
||||||
|
create_dungeon_region(player, 'PoD Left Cage', 'Palace of Darkness', None, ['PoD Left Cage SW', 'PoD Left Cage Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'PoD Middle Cage', 'Palace of Darkness', None, ['PoD Middle Cage S', 'PoD Middle Cage SE', 'PoD Middle Cage N', 'PoD Middle Cage Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'PoD Shooter Room', 'Palace of Darkness', ['Palace of Darkness - Shooter Room'], ['PoD Shooter Room Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'PoD Pit Room', 'Palace of Darkness', None, ['PoD Pit Room S', 'PoD Pit Room NW', 'PoD Pit Room NE', 'PoD Pit Room Freefall', 'PoD Pit Room Bomb Hole']),
|
||||||
|
create_dungeon_region(player, 'PoD Arena Main', 'Palace of Darkness', None, ['PoD Arena Main SW', 'PoD Arena Main Crystal Path', 'PoD Arena Main Orange Barrier', 'PoD Arena Bonk Path']),
|
||||||
|
create_dungeon_region(player, 'PoD Arena North', 'Palace of Darkness', None, ['PoD Arena Main NW', 'PoD Arena Main NE', 'PoD Arena North Drop Down']),
|
||||||
|
create_dungeon_region(player, 'PoD Arena Crystal', 'Palace of Darkness', None, ['PoD Arena Crystals E', 'PoD Arena Crystal Path']),
|
||||||
|
create_dungeon_region(player, 'PoD Arena Bridge', 'Palace of Darkness', ['Palace of Darkness - The Arena - Bridge'], ['PoD Arena Bridge SE', 'PoD Arena Bridge Drop Down']),
|
||||||
|
create_dungeon_region(player, 'PoD Arena Ledge', 'Palace of Darkness', ['Palace of Darkness - The Arena - Ledge'], ['PoD Arena Ledge ES']),
|
||||||
|
create_dungeon_region(player, 'PoD Sexy Statue', 'Palace of Darkness', None, ['PoD Sexy Statue W', 'PoD Sexy Statue NW']),
|
||||||
|
create_dungeon_region(player, 'PoD Map Balcony', 'Palace of Darkness', ['Palace of Darkness - Map Chest'], ['PoD Map Balcony WS', 'PoD Map Balcony South Stairs', 'PoD Map Balcony Drop Down']),
|
||||||
|
create_dungeon_region(player, 'PoD Conveyor', 'Palace of Darkness', None, ['PoD Conveyor North Stairs', 'PoD Conveyor SW']),
|
||||||
|
create_dungeon_region(player, 'PoD Mimics 1', 'Palace of Darkness', None, ['PoD Mimics 1 NW', 'PoD Mimics 1 SW']),
|
||||||
|
create_dungeon_region(player, 'PoD Jelly Hall', 'Palace of Darkness', None, ['PoD Jelly Hall NW', 'PoD Jelly Hall NE']),
|
||||||
|
create_dungeon_region(player, 'PoD Warp Hint', 'Palace of Darkness', None, ['PoD Warp Hint SE', 'PoD Warp Hint Warp']),
|
||||||
|
create_dungeon_region(player, 'PoD Warp Room', 'Palace of Darkness', None, ['PoD Warp Room Up Stairs', 'PoD Warp Room Warp']),
|
||||||
|
create_dungeon_region(player, 'PoD Stalfos Basement', 'Palace of Darkness', ['Palace of Darkness - Stalfos Basement'], ['PoD Stalfos Basement Warp']),
|
||||||
|
create_dungeon_region(player, 'PoD Basement Ledge', 'Palace of Darkness', None, ['PoD Basement Ledge Drop Down', 'PoD Basement Ledge Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'PoD Big Key Landing', 'Palace of Darkness', ['Palace of Darkness - Big Key Chest'], ['PoD Big Key Landing Down Stairs', 'PoD Big Key Landing Hole']),
|
||||||
|
create_dungeon_region(player, 'PoD Falling Bridge', 'Palace of Darkness', None, ['PoD Falling Bridge SW', 'PoD Falling Bridge WN', 'PoD Falling Bridge EN']),
|
||||||
|
create_dungeon_region(player, 'PoD Dark Maze', 'Palace of Darkness', ['Palace of Darkness - Dark Maze - Top', 'Palace of Darkness - Dark Maze - Bottom'], ['PoD Dark Maze EN', 'PoD Dark Maze E']),
|
||||||
|
create_dungeon_region(player, 'PoD Big Chest Balcony', 'Palace of Darkness', ['Palace of Darkness - Big Chest'], ['PoD Big Chest Balcony W']),
|
||||||
|
create_dungeon_region(player, 'PoD Compass Room', 'Palace of Darkness', ['Palace of Darkness - Compass Chest'], ['PoD Compass Room SE', 'PoD Compass Room WN', 'PoD Compass Room W Down Stairs', 'PoD Compass Room E Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'PoD Dark Basement', 'Palace of Darkness', ['Palace of Darkness - Dark Basement - Left', 'Palace of Darkness - Dark Basement - Right'], ['PoD Dark Basement W Up Stairs', 'PoD Dark Basement E Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'PoD Harmless Hellway', 'Palace of Darkness', ['Palace of Darkness - Harmless Hellway'], ['PoD Harmless Hellway NE', 'PoD Harmless Hellway SE']),
|
||||||
|
create_dungeon_region(player, 'PoD Mimics 2', 'Palace of Darkness', None, ['PoD Mimics 2 SW', 'PoD Mimics 2 NW']),
|
||||||
|
create_dungeon_region(player, 'PoD Bow Statue', 'Palace of Darkness', None, ['PoD Bow Statue SW', 'PoD Bow Statue Down Ladder']),
|
||||||
|
create_dungeon_region(player, 'PoD Dark Pegs', 'Palace of Darkness', None, ['PoD Dark Pegs Up Ladder', 'PoD Dark Pegs WN']),
|
||||||
|
create_dungeon_region(player, 'PoD Lonely Turtle', 'Palace of Darkness', None, ['PoD Lonely Turtle SW', 'PoD Lonely Turtle EN']),
|
||||||
|
create_dungeon_region(player, 'PoD Turtle Party', 'Palace of Darkness', None, ['PoD Turtle Party ES', 'PoD Turtle Party NW']),
|
||||||
|
create_dungeon_region(player, 'PoD Dark Alley', 'Palace of Darkness', None, ['PoD Dark Alley NE']),
|
||||||
|
create_dungeon_region(player, 'PoD Callback', 'Palace of Darkness', None, ['PoD Callback WS', 'PoD Callback Warp']),
|
||||||
|
create_dungeon_region(player, 'PoD Boss', 'Palace of Darkness', ['Palace of Darkness - Boss', 'Palace of Darkness - Prize'], ['PoD Boss SE']),
|
||||||
|
|
||||||
|
# swamp
|
||||||
|
create_dungeon_region(player, 'Swamp Lobby', 'Swamp Palace', None, ['Swamp Palace Exit', 'Swamp Lobby Moat']),
|
||||||
|
create_dungeon_region(player, 'Swamp Entrance', 'Swamp Palace', ['Swamp Palace - Entrance'], ['Swamp Entrance Down Stairs', 'Swamp Entrance Moat']),
|
||||||
|
create_dungeon_region(player, 'Swamp Pot Row', 'Swamp Palace', ['Swamp Palace - Pot Row Pot Key'], ['Swamp Pot Row Up Stairs', 'Swamp Pot Row WN', 'Swamp Pot Row WS']),
|
||||||
|
create_dungeon_region(player, 'Swamp Map Ledge', 'Swamp Palace', ['Swamp Palace - Map Chest'], ['Swamp Map Ledge EN']),
|
||||||
|
create_dungeon_region(player, 'Swamp Trench 1 Approach', 'Swamp Palace', None, ['Swamp Trench 1 Approach ES', 'Swamp Trench 1 Approach Dry', 'Swamp Trench 1 Approach Key', 'Swamp Trench 1 Approach Swim Depart']),
|
||||||
|
create_dungeon_region(player, 'Swamp Trench 1 Nexus', 'Swamp Palace', None, ['Swamp Trench 1 Nexus Approach', 'Swamp Trench 1 Nexus N', 'Swamp Trench 1 Nexus Key']),
|
||||||
|
create_dungeon_region(player, 'Swamp Trench 1 Alcove', 'Swamp Palace', ['Swamp Palace - Trench 1 Pot Key'], ['Swamp Trench 1 Alcove S']),
|
||||||
|
create_dungeon_region(player, 'Swamp Trench 1 Key Ledge', 'Swamp Palace', None, ['Swamp Trench 1 Key Ledge Dry', 'Swamp Trench 1 Key Approach', 'Swamp Trench 1 Key Ledge Depart', 'Swamp Trench 1 Key Ledge NW']),
|
||||||
|
create_dungeon_region(player, 'Swamp Trench 1 Departure', 'Swamp Palace', None, ['Swamp Trench 1 Departure Dry', 'Swamp Trench 1 Departure Approach', 'Swamp Trench 1 Departure Key', 'Swamp Trench 1 Departure WS']),
|
||||||
|
create_dungeon_region(player, 'Swamp Hammer Switch', 'Swamp Palace', ['Trench 1 Switch'], ['Swamp Hammer Switch SW', 'Swamp Hammer Switch WN']),
|
||||||
|
create_dungeon_region(player, 'Swamp Hub', 'Swamp Palace', ['Swamp Palace - Big Chest', 'Swamp Palace - Hookshot Pot Key'], ['Swamp Hub ES', 'Swamp Hub S', 'Swamp Hub WS', 'Swamp Hub WN', 'Swamp Hub Hook Path']),
|
||||||
|
create_dungeon_region(player, 'Swamp Hub Dead Ledge', 'Swamp Palace', None, ['Swamp Hub Dead Ledge EN']),
|
||||||
|
create_dungeon_region(player, 'Swamp Hub North Ledge', 'Swamp Palace', None, ['Swamp Hub North Ledge N', 'Swamp Hub North Ledge Drop Down']),
|
||||||
|
create_dungeon_region(player, 'Swamp Donut Top', 'Swamp Palace', None, ['Swamp Donut Top N', 'Swamp Donut Top SE']),
|
||||||
|
create_dungeon_region(player, 'Swamp Donut Bottom', 'Swamp Palace', None, ['Swamp Donut Bottom NE', 'Swamp Donut Bottom NW']),
|
||||||
|
create_dungeon_region(player, 'Swamp Compass Donut', 'Swamp Palace', ['Swamp Palace - Compass Chest'], ['Swamp Compass Donut SW', 'Swamp Compass Donut Push Block']),
|
||||||
|
create_dungeon_region(player, 'Swamp Crystal Switch', 'Swamp Palace', ['Trench 2 Switch'], ['Swamp Crystal Switch EN', 'Swamp Crystal Switch SE']),
|
||||||
|
create_dungeon_region(player, 'Swamp Shortcut', 'Swamp Palace', None, ['Swamp Shortcut NE', 'Swamp Shortcut Blue Barrier']),
|
||||||
|
create_dungeon_region(player, 'Swamp Trench 2 Pots', 'Swamp Palace', None, ['Swamp Trench 2 Pots ES', 'Swamp Trench 2 Pots Blue Barrier', 'Swamp Trench 2 Pots Dry', 'Swamp Trench 2 Pots Wet']),
|
||||||
|
create_dungeon_region(player, 'Swamp Trench 2 Blocks', 'Swamp Palace', None, ['Swamp Trench 2 Blocks Pots', 'Swamp Trench 2 Blocks N']),
|
||||||
|
create_dungeon_region(player, 'Swamp Trench 2 Alcove', 'Swamp Palace', ['Swamp Palace - Trench 2 Pot Key'], ['Swamp Trench 2 Alcove S']),
|
||||||
|
create_dungeon_region(player, 'Swamp Trench 2 Departure', 'Swamp Palace', None, ['Swamp Trench 2 Departure Wet', 'Swamp Trench 2 Departure WS']),
|
||||||
|
create_dungeon_region(player, 'Swamp Big Key Ledge', 'Swamp Palace', ['Swamp Palace - Big Key Chest'], ['Swamp Big Key Ledge WN']),
|
||||||
|
create_dungeon_region(player, 'Swamp West Shallows', 'Swamp Palace', None, ['Swamp West Shallows ES', 'Swamp West Shallows Push Blocks']),
|
||||||
|
create_dungeon_region(player, 'Swamp West Block Path', 'Swamp Palace', None, ['Swamp West Block Path Up Stairs', 'Swamp West Block Path Drop Down']),
|
||||||
|
create_dungeon_region(player, 'Swamp West Ledge', 'Swamp Palace', ['Swamp Palace - West Chest'], ['Swamp West Ledge Drop Down', 'Swamp West Ledge Hook Path']),
|
||||||
|
create_dungeon_region(player, 'Swamp Barrier Ledge', 'Swamp Palace', None, ['Swamp Barrier Ledge Drop Down', 'Swamp Barrier Ledge - Orange', 'Swamp Barrier Ledge Hook Path']),
|
||||||
|
create_dungeon_region(player, 'Swamp Barrier', 'Swamp Palace', None, ['Swamp Barrier EN', 'Swamp Barrier - Orange']),
|
||||||
|
create_dungeon_region(player, 'Swamp Attic', 'Swamp Palace', None, ['Swamp Attic Down Stairs', 'Swamp Attic Left Pit', 'Swamp Attic Right Pit']),
|
||||||
|
create_dungeon_region(player, 'Swamp Push Statue', 'Swamp Palace', None, ['Swamp Push Statue S', 'Swamp Push Statue NW', 'Swamp Push Statue NE', 'Swamp Push Statue Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'Swamp Shooters', 'Swamp Palace', None, ['Swamp Shooters SW', 'Swamp Shooters EN']),
|
||||||
|
create_dungeon_region(player, 'Swamp Left Elbow', 'Swamp Palace', None, ['Swamp Left Elbow WN', 'Swamp Left Elbow Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'Swamp Right Elbow', 'Swamp Palace', None, ['Swamp Right Elbow SE', 'Swamp Right Elbow Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'Swamp Drain Left', 'Swamp Palace', None, ['Swamp Drain Left Up Stairs', 'Swamp Drain WN']),
|
||||||
|
create_dungeon_region(player, 'Swamp Drain Right', 'Swamp Palace', ['Swamp Drain'], ['Swamp Drain Right Switch', 'Swamp Drain Right Up Stairs']),
|
||||||
|
# This is intentionally odd so I don't have to treat the WS door in the Flooded Room oddly (because of how it works when going backward)
|
||||||
|
create_dungeon_region(player, 'Swamp Flooded Room', 'Swamp Palace', None, ['Swamp Flooded Room Up Stairs', 'Swamp Flooded Room Ladder', 'Swamp Flooded Room WS']),
|
||||||
|
create_dungeon_region(player, 'Swamp Flooded Spot', 'Swamp Palace', ['Swamp Palace - Flooded Room - Left', 'Swamp Palace - Flooded Room - Right'], ['Swamp Flooded Spot Ladder']),
|
||||||
|
create_dungeon_region(player, 'Swamp Basement Shallows', 'Swamp Palace', None, ['Swamp Basement Shallows NW', 'Swamp Basement Shallows EN', 'Swamp Basement Shallows ES']),
|
||||||
|
create_dungeon_region(player, 'Swamp Waterfall Room', 'Swamp Palace', ['Swamp Palace - Waterfall Room'], ['Swamp Waterfall Room SW', 'Swamp Waterfall Room NW', 'Swamp Waterfall Room NE']),
|
||||||
|
create_dungeon_region(player, 'Swamp Refill', 'Swamp Palace', None, ['Swamp Refill SW']),
|
||||||
|
create_dungeon_region(player, 'Swamp Behind Waterfall', 'Swamp Palace', None, ['Swamp Behind Waterfall SE', 'Swamp Behind Waterfall Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'Swamp C', 'Swamp Palace', None, ['Swamp C Down Stairs', 'Swamp C SE']),
|
||||||
|
create_dungeon_region(player, 'Swamp Waterway', 'Swamp Palace', ['Swamp Palace - Waterway Pot Key'], ['Swamp Waterway NE', 'Swamp Waterway N', 'Swamp Waterway NW']),
|
||||||
|
create_dungeon_region(player, 'Swamp I', 'Swamp Palace', None, ['Swamp I S']),
|
||||||
|
create_dungeon_region(player, 'Swamp T', 'Swamp Palace', None, ['Swamp T SW', 'Swamp T NW']),
|
||||||
|
create_dungeon_region(player, 'Swamp Boss', 'Swamp Palace', ['Swamp Palace - Boss', 'Swamp Palace - Prize'], ['Swamp Boss SW']),
|
||||||
|
|
||||||
|
# sw
|
||||||
|
create_dungeon_region(player, 'Skull 1 Lobby', 'Skull Woods', None, ['Skull Woods First Section Exit', 'Skull 1 Lobby WS', 'Skull 1 Lobby ES']),
|
||||||
|
create_dungeon_region(player, 'Skull Map Room', 'Skull Woods', ['Skull Woods - Map Chest'], ['Skull Map Room WS', 'Skull Map Room SE']),
|
||||||
|
create_dungeon_region(player, 'Skull Pot Circle', 'Skull Woods', None, ['Skull Pot Circle WN', 'Skull Pot Circle Star Path']),
|
||||||
|
create_dungeon_region(player, 'Skull Pull Switch', 'Skull Woods', None, ['Skull Pull Switch EN', 'Skull Pull Switch S']),
|
||||||
|
create_dungeon_region(player, 'Skull Big Chest', 'Skull Woods', ['Skull Woods - Big Chest'], ['Skull Big Chest N', 'Skull Big Chest Hookpath']),
|
||||||
|
create_dungeon_region(player, 'Skull Pinball', 'Skull Woods', ['Skull Woods - Pinball Room'], ['Skull Pinball NE', 'Skull Pinball WS']),
|
||||||
|
create_dungeon_region(player, 'Skull Pot Prison', 'Skull Woods', ['Skull Woods - Pot Prison'], ['Skull Pot Prison ES', 'Skull Pot Prison SE']),
|
||||||
|
create_dungeon_region(player, 'Skull Compass Room', 'Skull Woods', ['Skull Woods - Compass Chest'], ['Skull Compass Room NE', 'Skull Compass Room ES', 'Skull Compass Room WS']),
|
||||||
|
create_dungeon_region(player, 'Skull Left Drop', 'Skull Woods', None, ['Skull Left Drop ES']),
|
||||||
|
create_dungeon_region(player, 'Skull 2 East Lobby', 'Skull Woods', None, ['Skull 2 East Lobby NW', 'Skull 2 East Lobby WS', 'Skull Woods Second Section Exit (East)']),
|
||||||
|
create_dungeon_region(player, 'Skull Big Key', 'Skull Woods', ['Skull Woods - Big Key Chest'], ['Skull Big Key SW', 'Skull Big Key WN']),
|
||||||
|
create_dungeon_region(player, 'Skull Lone Pot', 'Skull Woods', None, ['Skull Lone Pot EN']),
|
||||||
|
create_dungeon_region(player, 'Skull Small Hall', 'Skull Woods', None, ['Skull Small Hall ES', 'Skull Small Hall WS']),
|
||||||
|
create_dungeon_region(player, 'Skull Back Drop', 'Skull Woods', None, ['Skull Back Drop Star Path', ]),
|
||||||
|
create_dungeon_region(player, 'Skull 2 West Lobby', 'Skull Woods', ['Skull Woods - West Lobby Pot Key'], ['Skull 2 West Lobby ES', 'Skull 2 West Lobby NW', 'Skull Woods Second Section Exit (West)']),
|
||||||
|
create_dungeon_region(player, 'Skull X Room', 'Skull Woods', None, ['Skull X Room SW']),
|
||||||
|
create_dungeon_region(player, 'Skull 3 Lobby', 'Skull Woods', None, ['Skull 3 Lobby NW', 'Skull 3 Lobby EN', 'Skull Woods Final Section Exit']),
|
||||||
|
create_dungeon_region(player, 'Skull East Bridge', 'Skull Woods', None, ['Skull East Bridge WN', 'Skull East Bridge WS']),
|
||||||
|
create_dungeon_region(player, 'Skull West Bridge Nook', 'Skull Woods', ['Skull Woods - Bridge Room'], ['Skull West Bridge Nook ES']),
|
||||||
|
create_dungeon_region(player, 'Skull Star Pits', 'Skull Woods', None, ['Skull Star Pits SW', 'Skull Star Pits ES']),
|
||||||
|
create_dungeon_region(player, 'Skull Torch Room', 'Skull Woods', None, ['Skull Torch Room WS', 'Skull Torch Room WN']),
|
||||||
|
create_dungeon_region(player, 'Skull Vines', 'Skull Woods', None, ['Skull Vines EN', 'Skull Vines NW']),
|
||||||
|
create_dungeon_region(player, 'Skull Spike Corner', 'Skull Woods', ['Skull Woods - Spike Corner Key Drop'], ['Skull Spike Corner SW', 'Skull Spike Corner ES']),
|
||||||
|
create_dungeon_region(player, 'Skull Final Drop', 'Skull Woods', None, ['Skull Final Drop WS', 'Skull Final Drop Hole']),
|
||||||
|
create_dungeon_region(player, 'Skull Boss', 'Skull Woods', ['Skull Woods - Boss', 'Skull Woods - Prize']),
|
||||||
|
|
||||||
|
# tt
|
||||||
|
create_dungeon_region(player, 'Thieves Lobby', 'Thieves\' Town', ['Thieves\' Town - Map Chest'], ['Thieves Town Exit', 'Thieves Lobby N Edge', 'Thieves Lobby NE Edge', 'Thieves Lobby E']),
|
||||||
|
create_dungeon_region(player, 'Thieves Ambush', 'Thieves\' Town', ['Thieves\' Town - Ambush Chest'], ['Thieves Ambush S Edge', 'Thieves Ambush SE Edge', 'Thieves Ambush ES Edge', 'Thieves Ambush EN Edge', 'Thieves Ambush E']),
|
||||||
|
create_dungeon_region(player, 'Thieves Rail Ledge', 'Thieves\' Town', None, ['Thieves Rail Ledge NW', 'Thieves Rail Ledge W', 'Thieves Rail Ledge Drop Down']),
|
||||||
|
create_dungeon_region(player, 'Thieves BK Corner', 'Thieves\' Town', None, ['Thieves BK Corner WN Edge', 'Thieves BK Corner WS Edge', 'Thieves BK Corner S Edge', 'Thieves BK Corner SW Edge', 'Thieves BK Corner NE']),
|
||||||
|
create_dungeon_region(player, 'Thieves Compass Room', 'Thieves\' Town', ['Thieves\' Town - Compass Chest'], ['Thieves Compass Room NW Edge', 'Thieves Compass Room N Edge', 'Thieves Compass Room WS Edge', 'Thieves Compass Room W']),
|
||||||
|
create_dungeon_region(player, 'Thieves Big Chest Nook', 'Thieves\' Town', ['Thieves\' Town - Big Key Chest'], ['Thieves Big Chest Nook WS Edge']),
|
||||||
|
create_dungeon_region(player, 'Thieves Hallway', 'Thieves\' Town', ['Thieves\' Town - Hallway Pot Key'], ['Thieves Hallway SE', 'Thieves Hallway NE', 'Thieves Hallway WN', 'Thieves Hallway WS']),
|
||||||
|
create_dungeon_region(player, 'Thieves Boss', 'Thieves\' Town', ['Revealing Light', 'Thieves\' Town - Boss', 'Thieves\' Town - Prize'], ['Thieves Boss SE']),
|
||||||
|
create_dungeon_region(player, 'Thieves Pot Alcove Mid', 'Thieves\' Town', None, ['Thieves Pot Alcove Mid ES', 'Thieves Pot Alcove Mid WS']),
|
||||||
|
create_dungeon_region(player, 'Thieves Pot Alcove Bottom', 'Thieves\' Town', None, ['Thieves Pot Alcove Bottom SW']),
|
||||||
|
create_dungeon_region(player, 'Thieves Pot Alcove Top', 'Thieves\' Town', None, ['Thieves Pot Alcove Top NW']),
|
||||||
|
create_dungeon_region(player, 'Thieves Conveyor Maze', 'Thieves\' Town', None, ['Thieves Conveyor Maze SW', 'Thieves Conveyor Maze EN', 'Thieves Conveyor Maze WN', 'Thieves Conveyor Maze Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'Thieves Spike Track', 'Thieves\' Town', None, ['Thieves Spike Track WS', 'Thieves Spike Track ES', 'Thieves Spike Track NE']),
|
||||||
|
create_dungeon_region(player, 'Thieves Hellway', 'Thieves\' Town', None, ['Thieves Hellway Orange Barrier', 'Thieves Hellway NW', 'Thieves Hellway Blue Barrier']),
|
||||||
|
create_dungeon_region(player, 'Thieves Hellway N Crystal', 'Thieves\' Town', None, ['Thieves Hellway Crystal Blue Barrier', 'Thieves Hellway Crystal EN']),
|
||||||
|
create_dungeon_region(player, 'Thieves Hellway S Crystal', 'Thieves\' Town', None, ['Thieves Hellway Crystal Orange Barrier', 'Thieves Hellway Crystal ES']),
|
||||||
|
create_dungeon_region(player, 'Thieves Triple Bypass', 'Thieves\' Town', None, ['Thieves Triple Bypass WN', 'Thieves Triple Bypass EN', 'Thieves Triple Bypass SE']),
|
||||||
|
create_dungeon_region(player, 'Thieves Spike Switch', 'Thieves\' Town', ['Thieves\' Town - Spike Switch Pot Key'], ['Thieves Spike Switch SW', 'Thieves Spike Switch Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'Thieves Attic', 'Thieves\' Town', None, ['Thieves Attic Down Stairs', 'Thieves Attic ES']),
|
||||||
|
create_dungeon_region(player, 'Thieves Cricket Hall Left', 'Thieves\' Town', None, ['Thieves Cricket Hall Left WS', 'Thieves Cricket Hall Left Edge']),
|
||||||
|
create_dungeon_region(player, 'Thieves Cricket Hall Right', 'Thieves\' Town', None, ['Thieves Cricket Hall Right Edge', 'Thieves Cricket Hall Right ES']),
|
||||||
|
create_dungeon_region(player, 'Thieves Attic Window', 'Thieves\' Town', ['Thieves\' Town - Attic', 'Attic Cracked Floor'], ['Thieves Attic Window WS']),
|
||||||
|
create_dungeon_region(player, 'Thieves Basement Block', 'Thieves\' Town', None, ['Thieves Basement Block Up Stairs', 'Thieves Basement Block WN', 'Thieves Basement Block Path']),
|
||||||
|
create_dungeon_region(player, 'Thieves Blocked Entry', 'Thieves\' Town', None, ['Thieves Blocked Entry Path', 'Thieves Blocked Entry SW']),
|
||||||
|
create_dungeon_region(player, 'Thieves Lonely Zazak', 'Thieves\' Town', None, ['Thieves Lonely Zazak WS', 'Thieves Lonely Zazak ES', 'Thieves Lonely Zazak NW']),
|
||||||
|
create_dungeon_region(player, 'Thieves Blind\'s Cell', 'Thieves\' Town', ['Thieves\' Town - Blind\'s Cell', 'Suspicious Maiden'], ['Thieves Blind\'s Cell WS']),
|
||||||
|
create_dungeon_region(player, 'Thieves Conveyor Bridge', 'Thieves\' Town', None, ['Thieves Conveyor Bridge EN', 'Thieves Conveyor Bridge ES', 'Thieves Conveyor Bridge WS', 'Thieves Conveyor Bridge Block Path']),
|
||||||
|
create_dungeon_region(player, 'Thieves Conveyor Block', 'Thieves\' Town', None, ['Thieves Conveyor Block Path', 'Thieves Conveyor Block WN']),
|
||||||
|
create_dungeon_region(player, 'Thieves Big Chest Room', 'Thieves\' Town', ['Thieves\' Town - Big Chest'], ['Thieves Big Chest Room ES']),
|
||||||
|
create_dungeon_region(player, 'Thieves Trap', 'Thieves\' Town', None, ['Thieves Trap EN']),
|
||||||
|
|
||||||
|
# ice
|
||||||
|
create_dungeon_region(player, 'Ice Lobby', 'Ice Palace', None, ['Ice Palace Exit', 'Ice Lobby WS']),
|
||||||
|
create_dungeon_region(player, 'Ice Jelly Key', 'Ice Palace', ['Ice Palace - Jelly Key Drop'], ['Ice Jelly Key ES', 'Ice Jelly Key Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'Ice Floor Switch', 'Ice Palace', None, ['Ice Floor Switch Up Stairs', 'Ice Floor Switch ES']),
|
||||||
|
create_dungeon_region(player, 'Ice Cross Left', 'Ice Palace', None, ['Ice Cross Left WS', 'Ice Cross Left Push Block']),
|
||||||
|
create_dungeon_region(player, 'Ice Cross Bottom', 'Ice Palace', None, ['Ice Cross Bottom SE', 'Ice Cross Bottom Push Block Left', 'Ice Cross Bottom Push Block Right']),
|
||||||
|
create_dungeon_region(player, 'Ice Cross Right', 'Ice Palace', None, ['Ice Cross Right ES', 'Ice Cross Right Push Block Top', 'Ice Cross Right Push Block Bottom']),
|
||||||
|
create_dungeon_region(player, 'Ice Cross Top', 'Ice Palace', None, ['Ice Cross Top NE', 'Ice Cross Top Push Block Left', 'Ice Cross Top Push Block Right']),
|
||||||
|
create_dungeon_region(player, 'Ice Compass Room', 'Ice Palace', ['Ice Palace - Compass Chest'], ['Ice Compass Room NE']),
|
||||||
|
create_dungeon_region(player, 'Ice Pengator Switch', 'Ice Palace', None, ['Ice Pengator Switch WS', 'Ice Pengator Switch ES']),
|
||||||
|
create_dungeon_region(player, 'Ice Dead End', 'Ice Palace', None, ['Ice Dead End WS']),
|
||||||
|
create_dungeon_region(player, 'Ice Big Key', 'Ice Palace', ['Ice Palace - Big Key Chest'], ['Ice Big Key Push Block', 'Ice Big Key Down Ladder']),
|
||||||
|
create_dungeon_region(player, 'Ice Bomb Drop', 'Ice Palace', None, ['Ice Bomb Drop SE', 'Ice Bomb Drop Hole']),
|
||||||
|
create_dungeon_region(player, 'Ice Stalfos Hint', 'Ice Palace', None, ['Ice Stalfos Hint SE']),
|
||||||
|
create_dungeon_region(player, 'Ice Conveyor', 'Ice Palace', ['Ice Palace - Conveyor Key Drop'], ['Ice Conveyor NE', 'Ice Conveyor SW']),
|
||||||
|
create_dungeon_region(player, 'Ice Bomb Jump Ledge', 'Ice Palace', None, ['Ice Bomb Jump NW', 'Ice Bomb Jump Ledge Orange Barrier']),
|
||||||
|
create_dungeon_region(player, 'Ice Bomb Jump Catwalk', 'Ice Palace', None, ['Ice Bomb Jump Catwalk Orange Barrier', 'Ice Bomb Jump EN']),
|
||||||
|
create_dungeon_region(player, 'Ice Narrow Corridor', 'Ice Palace', None, ['Ice Narrow Corridor WN', 'Ice Narrow Corridor Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'Ice Pengator Trap', 'Ice Palace', None, ['Ice Pengator Trap Up Stairs', 'Ice Pengator Trap NE']),
|
||||||
|
create_dungeon_region(player, 'Ice Spike Cross', 'Ice Palace', None, ['Ice Spike Cross SE', 'Ice Spike Cross WS', 'Ice Spike Cross ES', 'Ice Spike Cross NE']),
|
||||||
|
create_dungeon_region(player, 'Ice Firebar', 'Ice Palace', None, ['Ice Firebar ES', 'Ice Firebar Down Ladder']),
|
||||||
|
create_dungeon_region(player, 'Ice Falling Square', 'Ice Palace', None, ['Ice Falling Square SE', 'Ice Falling Square Hole']),
|
||||||
|
create_dungeon_region(player, 'Ice Spike Room', 'Ice Palace', ['Ice Palace - Spike Room'], ['Ice Spike Room WS', 'Ice Spike Room Up Stairs', 'Ice Spike Room Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'Ice Hammer Block', 'Ice Palace', ['Ice Palace - Hammer Block Key Drop', 'Ice Palace - Map Chest'], ['Ice Hammer Block Down Stairs', 'Ice Hammer Block ES']),
|
||||||
|
create_dungeon_region(player, 'Ice Tongue Pull', 'Ice Palace', None, ['Ice Tongue Pull Up Ladder', 'Ice Tongue Pull WS']),
|
||||||
|
create_dungeon_region(player, 'Ice Freezors', 'Ice Palace', ['Ice Palace - Freezor Chest'], ['Ice Freezors Up Ladder', 'Ice Freezors Hole', 'Ice Freezors Bomb Hole']),
|
||||||
|
create_dungeon_region(player, 'Ice Freezors Ledge', 'Ice Palace', None, ['Ice Freezors Ledge ES', 'Ice Freezors Ledge Hole']),
|
||||||
|
create_dungeon_region(player, 'Ice Tall Hint', 'Ice Palace', None, ['Ice Tall Hint WS', 'Ice Tall Hint SE', 'Ice Tall Hint EN']),
|
||||||
|
create_dungeon_region(player, 'Ice Hookshot Ledge', 'Ice Palace', None, ['Ice Hookshot Ledge WN', 'Ice Hookshot Ledge Path']),
|
||||||
|
create_dungeon_region(player, 'Ice Hookshot Balcony', 'Ice Palace', None, ['Ice Hookshot Balcony SW', 'Ice Hookshot Balcony Path']),
|
||||||
|
create_dungeon_region(player, 'Ice Spikeball', 'Ice Palace', None, ['Ice Spikeball NW', 'Ice Spikeball Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'Ice Lonely Freezor', 'Ice Palace', None, ['Ice Lonely Freezor NE', 'Ice Lonely Freezor Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'Iced T', 'Ice Palace', ['Ice Palace - Iced T Room'], ['Iced T Up Stairs', 'Iced T EN']),
|
||||||
|
create_dungeon_region(player, 'Ice Catwalk', 'Ice Palace', None, ['Ice Catwalk WN', 'Ice Catwalk NW']),
|
||||||
|
create_dungeon_region(player, 'Ice Many Pots', 'Ice Palace', ['Ice Palace - Many Pots Pot Key'], ['Ice Many Pots SW', 'Ice Many Pots WS']),
|
||||||
|
create_dungeon_region(player, 'Ice Crystal Right', 'Ice Palace', None, ['Ice Crystal Right ES', 'Ice Crystal Right NE', 'Ice Crystal Right Orange Barrier', 'Ice Crystal Right Blue Hole']),
|
||||||
|
create_dungeon_region(player, 'Ice Crystal Left', 'Ice Palace', None, ['Ice Crystal Left WS', 'Ice Crystal Left Orange Barrier', 'Ice Crystal Left Blue Barrier']),
|
||||||
|
create_dungeon_region(player, 'Ice Crystal Block', 'Ice Palace', ['Ice Block Drop'], ['Ice Crystal Block Hole', 'Ice Crystal Block Exit']),
|
||||||
|
create_dungeon_region(player, 'Ice Big Chest View', 'Ice Palace', None, ['Ice Big Chest View ES']),
|
||||||
|
create_dungeon_region(player, 'Ice Big Chest Landing', 'Ice Palace', ['Ice Palace - Big Chest'], ['Ice Big Chest Landing Push Blocks']),
|
||||||
|
create_dungeon_region(player, 'Ice Backwards Room', 'Ice Palace', None, ['Ice Backwards Room SE', 'Ice Backwards Room Down Stairs', 'Ice Backwards Room Hole']),
|
||||||
|
create_dungeon_region(player, 'Ice Anti-Fairy', 'Ice Palace', None, ['Ice Anti-Fairy Up Stairs', 'Ice Anti-Fairy SE']),
|
||||||
|
create_dungeon_region(player, 'Ice Switch Room', 'Ice Palace', None, ['Ice Switch Room NE', 'Ice Switch Room ES', 'Ice Switch Room SE']),
|
||||||
|
create_dungeon_region(player, 'Ice Refill', 'Ice Palace', None, ['Ice Refill WS']),
|
||||||
|
create_dungeon_region(player, 'Ice Fairy', 'Ice Palace', None, ['Ice Fairy Warp']),
|
||||||
|
create_dungeon_region(player, 'Ice Antechamber', 'Ice Palace', None, ['Ice Antechamber NE', 'Ice Antechamber Hole']),
|
||||||
|
create_dungeon_region(player, 'Ice Boss', 'Ice Palace', ['Ice Palace - Boss', 'Ice Palace - Prize']),
|
||||||
|
|
||||||
|
# mire
|
||||||
|
create_dungeon_region(player, 'Mire Lobby', 'Misery Mire', None, ['Misery Mire Exit', 'Mire Lobby Gap']),
|
||||||
|
create_dungeon_region(player, 'Mire Post-Gap', 'Misery Mire', None, ['Mire Post-Gap Gap', 'Mire Post-Gap Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'Mire 2', 'Misery Mire', None, ['Mire 2 Up Stairs', 'Mire 2 NE']),
|
||||||
|
create_dungeon_region(player, 'Mire Hub', 'Misery Mire', None, ['Mire Hub SE', 'Mire Hub ES', 'Mire Hub E', 'Mire Hub NE', 'Mire Hub WN', 'Mire Hub WS', 'Mire Hub Upper Blue Barrier', 'Mire Hub Lower Blue Barrier']),
|
||||||
|
create_dungeon_region(player, 'Mire Hub Right', 'Misery Mire', None, ['Mire Hub Right EN', 'Mire Hub Right Blue Barrier']),
|
||||||
|
create_dungeon_region(player, 'Mire Hub Top', 'Misery Mire', ['Misery Mire - Main Lobby'], ['Mire Hub Top NW', 'Mire Hub Top Blue Barrier']),
|
||||||
|
create_dungeon_region(player, 'Mire Lone Shooter', 'Misery Mire', None, ['Mire Lone Shooter WS', 'Mire Lone Shooter ES']),
|
||||||
|
create_dungeon_region(player, 'Mire Failure Bridge', 'Misery Mire', None, ['Mire Failure Bridge W', 'Mire Failure Bridge E']),
|
||||||
|
create_dungeon_region(player, 'Mire Falling Bridge', 'Misery Mire', ['Misery Mire - Big Chest'], ['Mire Falling Bridge WS', 'Mire Falling Bridge W', 'Mire Falling Bridge WN']),
|
||||||
|
create_dungeon_region(player, 'Mire Map Spike Side', 'Misery Mire', None, ['Mire Map Spike Side EN', 'Mire Map Spike Side Drop Down', 'Mire Map Spike Side Blue Barrier']),
|
||||||
|
create_dungeon_region(player, 'Mire Map Spot', 'Misery Mire', ['Misery Mire - Map Chest'], ['Mire Map Spot WN', 'Mire Map Spot Blue Barrier']),
|
||||||
|
create_dungeon_region(player, 'Mire Crystal Dead End', 'Misery Mire', None, ['Mire Crystal Dead End Left Barrier', 'Mire Crystal Dead End Right Barrier', 'Mire Crystal Dead End NW']),
|
||||||
|
create_dungeon_region(player, 'Mire Hidden Shooters', 'Misery Mire', None, ['Mire Hidden Shooters SE', 'Mire Hidden Shooters WS', 'Mire Hidden Shooters ES', 'Mire Hidden Shooters NE']),
|
||||||
|
create_dungeon_region(player, 'Mire Cross', 'Misery Mire', None, ['Mire Cross ES', 'Mire Cross SW']),
|
||||||
|
create_dungeon_region(player, 'Mire Minibridge', 'Misery Mire', None, ['Mire Minibridge SE', 'Mire Minibridge NE']),
|
||||||
|
create_dungeon_region(player, 'Mire BK Door Room', 'Misery Mire', None, ['Mire BK Door Room EN', 'Mire BK Door Room N']),
|
||||||
|
create_dungeon_region(player, 'Mire Spikes', 'Misery Mire', ['Misery Mire - Spike Chest', 'Misery Mire - Spikes Pot Key'], ['Mire Spikes WS', 'Mire Spikes SW', 'Mire Spikes NW']),
|
||||||
|
create_dungeon_region(player, 'Mire Ledgehop', 'Misery Mire', None, ['Mire Ledgehop SW', 'Mire Ledgehop WN', 'Mire Ledgehop NW']),
|
||||||
|
create_dungeon_region(player, 'Mire Bent Bridge', 'Misery Mire', None, ['Mire Bent Bridge SW', 'Mire Bent Bridge W']),
|
||||||
|
create_dungeon_region(player, 'Mire Over Bridge', 'Misery Mire', None, ['Mire Over Bridge E', 'Mire Over Bridge W']),
|
||||||
|
create_dungeon_region(player, 'Mire Right Bridge', 'Misery Mire', ['Misery Mire - Bridge Chest'], ['Mire Right Bridge SE']),
|
||||||
|
create_dungeon_region(player, 'Mire Left Bridge', 'Misery Mire', None, ['Mire Left Bridge S', 'Mire Left Bridge Down Stairs', 'Mire Left Bridge Hook Path']),
|
||||||
|
create_dungeon_region(player, 'Mire Fishbone', 'Misery Mire', ['Misery Mire - Fishbone Pot Key'], ['Mire Fishbone E', 'Mire Fishbone Blue Barrier']),
|
||||||
|
create_dungeon_region(player, 'Mire South Fish', 'Misery Mire', None, ['Mire South Fish Blue Barrier', 'Mire Fishbone SE']),
|
||||||
|
create_dungeon_region(player, 'Mire Spike Barrier', 'Misery Mire', None, ['Mire Spike Barrier NE', 'Mire Spike Barrier SE', 'Mire Spike Barrier ES']),
|
||||||
|
create_dungeon_region(player, 'Mire Square Rail', 'Misery Mire', None, ['Mire Square Rail WS', 'Mire Square Rail NW']),
|
||||||
|
create_dungeon_region(player, 'Mire Lone Warp', 'Misery Mire', None, ['Mire Lone Warp SW', 'Mire Lone Warp Warp']),
|
||||||
|
create_dungeon_region(player, 'Mire Wizzrobe Bypass', 'Misery Mire', None, ['Mire Wizzrobe Bypass WN', 'Mire Wizzrobe Bypass EN', 'Mire Wizzrobe Bypass NE']),
|
||||||
|
create_dungeon_region(player, 'Mire Conveyor Crystal', 'Misery Mire', ['Misery Mire - Conveyor Crystal Key Drop'], ['Mire Conveyor Crystal WS', 'Mire Conveyor Crystal ES', 'Mire Conveyor Crystal SE']),
|
||||||
|
create_dungeon_region(player, 'Mire Tile Room', 'Misery Mire', None, ['Mire Tile Room ES', 'Mire Tile Room NW', 'Mire Tile Room SW']),
|
||||||
|
create_dungeon_region(player, 'Mire Compass Room', 'Misery Mire', None, ['Mire Compass Room SW', 'Mire Compass Room EN', 'Mire Compass Blue Barrier']),
|
||||||
|
create_dungeon_region(player, 'Mire Compass Chest', 'Misery Mire', ['Misery Mire - Compass Chest'], ['Mire Compass Chest Exit']),
|
||||||
|
create_dungeon_region(player, 'Mire Neglected Room', 'Misery Mire', None, ['Mire Neglected Room SE', 'Mire Neglected Room NE']),
|
||||||
|
create_dungeon_region(player, 'Mire Chest View', 'Misery Mire', None, ['Mire Chest View NE']),
|
||||||
|
create_dungeon_region(player, 'Mire Conveyor Barrier', 'Misery Mire', None, ['Mire Conveyor Barrier NW', 'Mire Conveyor Barrier Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'Mire BK Chest Ledge', 'Misery Mire', ['Misery Mire - Big Key Chest'], ['Mire BK Chest Ledge WS']),
|
||||||
|
create_dungeon_region(player, 'Mire Warping Pool', 'Misery Mire', None, ['Mire Warping Pool ES', 'Mire Warping Pool Warp']),
|
||||||
|
create_dungeon_region(player, 'Mire Torches Top', 'Misery Mire', None, ['Mire Torches Top Down Stairs', 'Mire Torches Top SW']),
|
||||||
|
create_dungeon_region(player, 'Mire Torches Bottom', 'Misery Mire', None, ['Mire Torches Bottom NW', 'Mire Torches Bottom WS']),
|
||||||
|
create_dungeon_region(player, 'Mire Attic Hint', 'Misery Mire', None, ['Mire Attic Hint ES', 'Mire Attic Hint Hole']),
|
||||||
|
create_dungeon_region(player, 'Mire Dark Shooters', 'Misery Mire', None, ['Mire Dark Shooters Up Stairs', 'Mire Dark Shooters SW', 'Mire Dark Shooters SE']),
|
||||||
|
create_dungeon_region(player, 'Mire Key Rupees', 'Misery Mire', None, ['Mire Key Rupees NE']),
|
||||||
|
create_dungeon_region(player, 'Mire Block X', 'Misery Mire', None, ['Mire Block X NW', 'Mire Block X WS']),
|
||||||
|
create_dungeon_region(player, 'Mire Tall Dark and Roomy', 'Misery Mire', None, ['Mire Tall Dark and Roomy ES', 'Mire Tall Dark and Roomy WS', 'Mire Tall Dark and Roomy WN']),
|
||||||
|
create_dungeon_region(player, 'Mire Crystal Right', 'Misery Mire', None, ['Mire Crystal Right ES', 'Mire Crystal Right Orange Barrier']),
|
||||||
|
create_dungeon_region(player, 'Mire Crystal Mid', 'Misery Mire', None, ['Mire Crystal Mid Orange Barrier', 'Mire Crystal Mid Blue Barrier', 'Mire Crystal Mid NW']),
|
||||||
|
create_dungeon_region(player, 'Mire Crystal Left', 'Misery Mire', None, ['Mire Crystal Left Blue Barrier', 'Mire Crystal Left WS']),
|
||||||
|
create_dungeon_region(player, 'Mire Crystal Top', 'Misery Mire', None, ['Mire Crystal Top SW']),
|
||||||
|
create_dungeon_region(player, 'Mire Shooter Rupees', 'Misery Mire', None, ['Mire Shooter Rupees EN']),
|
||||||
|
create_dungeon_region(player, 'Mire Falling Foes', 'Misery Mire', None, ['Mire Falling Foes ES', 'Mire Falling Foes Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'Mire Firesnake Skip', 'Misery Mire', None, ['Mire Firesnake Skip Down Stairs', 'Mire Firesnake Skip Orange Barrier']),
|
||||||
|
create_dungeon_region(player, 'Mire Antechamber', 'Misery Mire', None, ['Mire Antechamber Orange Barrier', 'Mire Antechamber NW']),
|
||||||
|
create_dungeon_region(player, 'Mire Boss', 'Misery Mire', ['Misery Mire - Boss', 'Misery Mire - Prize'], ['Mire Boss SW']),
|
||||||
|
|
||||||
|
# tr
|
||||||
|
create_dungeon_region(player, 'TR Main Lobby', 'Turtle Rock', None, ['TR Main Lobby Gap', 'Turtle Rock Exit (Front)']),
|
||||||
|
create_dungeon_region(player, 'TR Lobby Ledge', 'Turtle Rock', None, ['TR Lobby Ledge NE', 'TR Lobby Ledge Gap']),
|
||||||
|
create_dungeon_region(player, 'TR Compass Room', 'Turtle Rock', ['Turtle Rock - Compass Chest'], ['TR Compass Room NW']),
|
||||||
|
create_dungeon_region(player, 'TR Hub', 'Turtle Rock', None, ['TR Hub SW', 'TR Hub SE', 'TR Hub ES', 'TR Hub EN', 'TR Hub NW', 'TR Hub NE']),
|
||||||
|
create_dungeon_region(player, 'TR Torches Ledge', 'Turtle Rock', None, ['TR Torches Ledge WS']),
|
||||||
|
create_dungeon_region(player, 'TR Torches', 'Turtle Rock', None, ['TR Torches WN', 'TR Torches NW']),
|
||||||
|
create_dungeon_region(player, 'TR Roller Room', 'Turtle Rock', ['Turtle Rock - Roller Room - Left', 'Turtle Rock - Roller Room - Right'], ['TR Roller Room SW']),
|
||||||
|
create_dungeon_region(player, 'TR Tile Room', 'Turtle Rock', None, ['TR Tile Room SE', 'TR Tile Room NE']),
|
||||||
|
create_dungeon_region(player, 'TR Refill', 'Turtle Rock', None, ['TR Refill SE']),
|
||||||
|
create_dungeon_region(player, 'TR Pokey 1', 'Turtle Rock', ['Turtle Rock - Pokey 1 Key Drop'], ['TR Pokey 1 SW', 'TR Pokey 1 NW']),
|
||||||
|
create_dungeon_region(player, 'TR Chain Chomps', 'Turtle Rock', ['Turtle Rock - Chain Chomps'], ['TR Chain Chomps SW', 'TR Chain Chomps Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'TR Pipe Pit', 'Turtle Rock', None, ['TR Pipe Pit Up Stairs', 'TR Pipe Pit WN']),
|
||||||
|
create_dungeon_region(player, 'TR Pipe Ledge', 'Turtle Rock', None, ['TR Pipe Ledge WS', 'TR Pipe Ledge Drop Down']),
|
||||||
|
create_dungeon_region(player, 'TR Lava Dual Pipes', 'Turtle Rock', None, ['TR Lava Dual Pipes EN', 'TR Lava Dual Pipes WN', 'TR Lava Dual Pipes SW']),
|
||||||
|
create_dungeon_region(player, 'TR Lava Island', 'Turtle Rock', ['Turtle Rock - Big Key Chest'], ['TR Lava Island WS', 'TR Lava Island ES']),
|
||||||
|
create_dungeon_region(player, 'TR Lava Escape', 'Turtle Rock', None, ['TR Lava Escape SE', 'TR Lava Escape NW']),
|
||||||
|
create_dungeon_region(player, 'TR Pokey 2', 'Turtle Rock', ['Turtle Rock - Pokey 2 Key Drop'], ['TR Pokey 2 EN', 'TR Pokey 2 ES']),
|
||||||
|
create_dungeon_region(player, 'TR Twin Pokeys', 'Turtle Rock', None, ['TR Twin Pokeys NW', 'TR Twin Pokeys EN', 'TR Twin Pokeys SW']),
|
||||||
|
create_dungeon_region(player, 'TR Hallway', 'Turtle Rock', None, ['TR Hallway NW', 'TR Hallway ES', 'TR Hallway WS']),
|
||||||
|
create_dungeon_region(player, 'TR Dodgers', 'Turtle Rock', None, ['TR Dodgers WN', 'TR Dodgers SE', 'TR Dodgers NE']),
|
||||||
|
create_dungeon_region(player, 'TR Big View', 'Turtle Rock', None, ['TR Big View WS']),
|
||||||
|
create_dungeon_region(player, 'TR Big Chest', 'Turtle Rock', ['Turtle Rock - Big Chest'], ['TR Big Chest Gap', 'TR Big Chest NE']),
|
||||||
|
create_dungeon_region(player, 'TR Big Chest Entrance', 'Turtle Rock', None, ['Turtle Rock Ledge Exit (East)', 'TR Big Chest Entrance Gap']),
|
||||||
|
create_dungeon_region(player, 'TR Lazy Eyes', 'Turtle Rock', None, ['Turtle Rock Ledge Exit (West)', 'TR Lazy Eyes ES']),
|
||||||
|
create_dungeon_region(player, 'TR Dash Room', 'Turtle Rock', None, ['TR Dash Room SW', 'TR Dash Room ES', 'TR Dash Room NW']),
|
||||||
|
create_dungeon_region(player, 'TR Tongue Pull', 'Turtle Rock', None, ['TR Tongue Pull WS', 'TR Tongue Pull NE']),
|
||||||
|
create_dungeon_region(player, 'TR Rupees', 'Turtle Rock', None, ['TR Rupees SE']),
|
||||||
|
create_dungeon_region(player, 'TR Crystaroller', 'Turtle Rock', ['Turtle Rock - Crystaroller Room'], ['TR Crystaroller SW', 'TR Crystaroller Down Stairs']),
|
||||||
|
create_dungeon_region(player, 'TR Dark Ride', 'Turtle Rock', None, ['TR Dark Ride Up Stairs', 'TR Dark Ride SW']),
|
||||||
|
create_dungeon_region(player, 'TR Dash Bridge', 'Turtle Rock', None, ['TR Dash Bridge NW', 'TR Dash Bridge SW', 'TR Dash Bridge WS']),
|
||||||
|
create_dungeon_region(player, 'TR Eye Bridge', 'Turtle Rock', ['Turtle Rock - Eye Bridge - Bottom Left', 'Turtle Rock - Eye Bridge - Bottom Right',
|
||||||
|
'Turtle Rock - Eye Bridge - Top Left', 'Turtle Rock - Eye Bridge - Top Right'],
|
||||||
|
['Turtle Rock Isolated Ledge Exit', 'TR Eye Bridge NW']),
|
||||||
|
create_dungeon_region(player, 'TR Crystal Maze', 'Turtle Rock', None, ['TR Crystal Maze ES', 'TR Crystal Maze Forwards Path']),
|
||||||
|
create_dungeon_region(player, 'TR Crystal Maze End', 'Turtle Rock', None, ['TR Crystal Maze Blue Path', 'TR Crystal Maze Cane Path', 'TR Crystal Maze North Stairs']),
|
||||||
|
create_dungeon_region(player, 'TR Final Abyss', 'Turtle Rock', None, ['TR Final Abyss South Stairs', 'TR Final Abyss NW']),
|
||||||
|
create_dungeon_region(player, 'TR Boss', 'Turtle Rock', ['Turtle Rock - Boss', 'Turtle Rock - Prize'], ['TR Boss SW']),
|
||||||
|
|
||||||
|
# gt
|
||||||
|
create_dungeon_region(player, 'GT Lobby', 'Ganon\'s Tower', None, ['GT Lobby Left Down Stairs', 'GT Lobby Up Stairs', 'GT Lobby Right Down Stairs', 'Ganons Tower Exit']),
|
||||||
|
create_dungeon_region(player, 'GT Bob\'s Torch', 'Ganon\'s Tower', ['Ganons Tower - Bob\'s Torch'], ['GT Torch Up Stairs', 'GT Torch WN', 'GT Torch EN', 'GT Torch SW']),
|
||||||
|
create_dungeon_region(player, 'GT Hope Room', 'Ganon\'s Tower', ['Ganons Tower - Hope Room - Left', 'Ganons Tower - Hope Room - Right'], ['GT Hope Room Up Stairs', 'GT Hope Room WN', 'GT Hope Room EN']),
|
||||||
|
create_dungeon_region(player, 'GT Big Chest', 'Ganon\'s Tower', ['Ganons Tower - Big Chest'], ['GT Big Chest NW', 'GT Big Chest SW']),
|
||||||
|
create_dungeon_region(player, 'GT Blocked Stairs', 'Ganon\'s Tower', None, ['GT Blocked Stairs Down Stairs', 'GT Blocked Stairs Block Path']),
|
||||||
|
create_dungeon_region(player, 'GT Bob\'s Room', 'Ganon\'s Tower', ['Ganons Tower - Bob\'s Chest'], ['GT Bob\'s Room SE', 'GT Bob\'s Room Hole']),
|
||||||
|
create_dungeon_region(player, 'GT Tile Room', 'Ganon\'s Tower', ['Ganons Tower - Tile Room'], ['GT Tile Room WN', 'GT Tile Room EN']),
|
||||||
|
create_dungeon_region(player, 'GT Speed Torch', 'Ganon\'s Tower', None, ['GT Speed Torch WN', 'GT Speed Torch NE', 'GT Speed Torch WS', 'GT Speed Torch SE']),
|
||||||
|
create_dungeon_region(player, 'GT Pots n Blocks', 'Ganon\'s Tower', None, ['GT Pots n Blocks ES']),
|
||||||
|
create_dungeon_region(player, 'GT Crystal Conveyor', 'Ganon\'s Tower', None, ['GT Crystal Conveyor NE', 'GT Crystal Conveyor WN']),
|
||||||
|
create_dungeon_region(player, 'GT Compass Room', 'Ganon\'s Tower', ['Ganons Tower - Compass Room - Top Left', 'Ganons Tower - Compass Room - Top Right', 'Ganons Tower - Compass Room - Bottom Left', 'Ganons Tower - Compass Room - Bottom Right'],
|
||||||
|
['GT Compass Room EN', 'GT Compass Room Warp']),
|
||||||
|
create_dungeon_region(player, 'GT Invisible Bridges', 'Ganon\'s Tower', None, ['GT Invisible Bridges WS']),
|
||||||
|
create_dungeon_region(player, 'GT Invisible Catwalk', 'Ganon\'s Tower', None, ['GT Invisible Catwalk ES', 'GT Invisible Catwalk WS', 'GT Invisible Catwalk NW', 'GT Invisible Catwalk NE']),
|
||||||
|
create_dungeon_region(player, 'GT Conveyor Cross', 'Ganon\'s Tower', ['Ganons Tower - Conveyor Cross Pot Key'], ['GT Conveyor Cross EN', 'GT Conveyor Cross WN']),
|
||||||
|
create_dungeon_region(player, 'GT Hookshot East Platform', 'Ganon\'s Tower', None, ['GT Hookshot EN', 'GT Hookshot East-North Path', 'GT Hookshot East-South Path']),
|
||||||
|
create_dungeon_region(player, 'GT Hookshot North Platform', 'Ganon\'s Tower', None, ['GT Hookshot NW', 'GT Hookshot North-East Path', 'GT Hookshot North-South Path']),
|
||||||
|
create_dungeon_region(player, 'GT Hookshot South Platform', 'Ganon\'s Tower', None, ['GT Hookshot ES', 'GT Hookshot South-East Path', 'GT Hookshot South-North Path', 'GT Hookshot Platform Blue Barrier']),
|
||||||
|
create_dungeon_region(player, 'GT Hookshot South Entry', 'Ganon\'s Tower', None, ['GT Hookshot SW', 'GT Hookshot Entry Blue Barrier']),
|
||||||
|
create_dungeon_region(player, 'GT Map Room', 'Ganon\'s Tower', ['Ganons Tower - Map Chest'], ['GT Map Room WS']),
|
||||||
|
create_dungeon_region(player, 'GT Double Switch Entry', 'Ganon\'s Tower', None, ['GT Double Switch NW', 'GT Double Switch Orange Barrier', 'GT Double Switch Orange Barrier 2']),
|
||||||
|
create_dungeon_region(player, 'GT Double Switch Switches', 'Ganon\'s Tower', None, ['GT Double Switch Blue Path', 'GT Double Switch Orange Path']),
|
||||||
|
create_dungeon_region(player, 'GT Double Switch Transition', 'Ganon\'s Tower', None, ['GT Double Switch Transition Blue']),
|
||||||
|
create_dungeon_region(player, 'GT Double Switch Key Spot', 'Ganon\'s Tower', ['Ganons Tower - Double Switch Pot Key'], ['GT Double Switch Key Blue Path', 'GT Double Switch Key Orange Path']),
|
||||||
|
create_dungeon_region(player, 'GT Double Switch Exit', 'Ganon\'s Tower', None, ['GT Double Switch EN', 'GT Double Switch Blue Barrier']),
|
||||||
|
create_dungeon_region(player, 'GT Spike Crystals', 'Ganon\'s Tower', None, ['GT Spike Crystals WN', 'GT Spike Crystals Warp']),
|
||||||
|
create_dungeon_region(player, 'GT Warp Maze - Left Section', 'Ganon\'s Tower', None, ['GT Warp Maze - Left Section Warp']),
|
||||||
|
create_dungeon_region(player, 'GT Warp Maze - Mid Section', 'Ganon\'s Tower', None, ['GT Warp Maze - Mid Section Left Warp', 'GT Warp Maze - Mid Section Right Warp']),
|
||||||
|
create_dungeon_region(player, 'GT Warp Maze - Right Section', 'Ganon\'s Tower', None, ['GT Warp Maze - Right Section Warp']),
|
||||||
|
create_dungeon_region(player, 'GT Warp Maze - Pit Section', 'Ganon\'s Tower', None, ['GT Warp Maze - Pit Section Warp Spot']),
|
||||||
|
create_dungeon_region(player, 'GT Warp Maze - Pit Exit Warp Spot', 'Ganon\'s Tower', None, ['GT Warp Maze - Pit Exit Warp']),
|
||||||
|
create_dungeon_region(player, 'GT Warp Maze Exit Section', 'Ganon\'s Tower', None, ['GT Warp Maze (Pits) ES', 'GT Warp Maze Exit Section Warp Spot']),
|
||||||
|
create_dungeon_region(player, 'GT Firesnake Room', 'Ganon\'s Tower', None, ['GT Firesnake Room Hook Path']),
|
||||||
|
create_dungeon_region(player, 'GT Firesnake Room Ledge', 'Ganon\'s Tower', ['Ganons Tower - Firesnake Room'], ['GT Firesnake Room SW']),
|
||||||
|
create_dungeon_region(player, 'GT Warp Maze - Rail Choice', 'Ganon\'s Tower', None, ['GT Warp Maze (Rails) NW', 'GT Warp Maze - Rail Choice Left Warp', 'GT Warp Maze - Rail Choice Right Warp']),
|
||||||
|
create_dungeon_region(player, 'GT Warp Maze - Rando Rail', 'Ganon\'s Tower', None, ['GT Warp Maze (Rails) WS', 'GT Warp Maze - Rando Rail Warp']),
|
||||||
|
create_dungeon_region(player, 'GT Warp Maze - Main Rails', 'Ganon\'s Tower', None, ['GT Warp Maze - Main Rails Best Warp', 'GT Warp Maze - Main Rails Mid Left Warp', 'GT Warp Maze - Main Rails Mid Right Warp', 'GT Warp Maze - Main Rails Right Top Warp', 'GT Warp Maze - Main Rails Right Mid Warp']),
|
||||||
|
create_dungeon_region(player, 'GT Warp Maze - Pot Rail', 'Ganon\'s Tower', None, ['GT Warp Maze - Pot Rail Warp']),
|
||||||
|
create_dungeon_region(player, 'GT Trap Room', 'Ganon\'s Tower', None, ['GT Trap Room SE']),
|
||||||
|
create_dungeon_region(player, 'GT Conveyor Star Pits', 'Ganon\'s Tower', ['Ganons Tower - Conveyor Star Pits Pot Key'], ['GT Conveyor Star Pits EN']),
|
||||||
|
create_dungeon_region(player, 'GT Hidden Star', 'Ganon\'s Tower', None, ['GT Hidden Star ES', 'GT Hidden Star Warp']),
|
||||||
|
create_dungeon_region(player, 'GT DMs Room', 'Ganon\'s Tower', ['Ganons Tower - DMs Room - Top Left', 'Ganons Tower - DMs Room - Top Right',
|
||||||
|
'Ganons Tower - DMs Room - Bottom Left', 'Ganons Tower - DMs Room - Bottom Right'], ['GT DMs Room SW']),
|
||||||
|
create_dungeon_region(player, 'GT Falling Bridge', 'Ganon\'s Tower', None, ['GT Falling Bridge WN', 'GT Falling Bridge WS']),
|
||||||
|
create_dungeon_region(player, 'GT Randomizer Room', 'Ganon\'s Tower', ['Ganons Tower - Randomizer Room - Top Left', 'Ganons Tower - Randomizer Room - Top Right',
|
||||||
|
'Ganons Tower - Randomizer Room - Bottom Left', 'Ganons Tower - Randomizer Room - Bottom Right'], ['GT Randomizer Room ES']),
|
||||||
|
create_dungeon_region(player, 'GT Ice Armos', 'Ganon\'s Tower', None, ['GT Ice Armos NE', 'GT Ice Armos WS']),
|
||||||
|
create_dungeon_region(player, 'GT Big Key Room', 'Ganon\'s Tower', ['Ganons Tower - Big Key Room - Left',
|
||||||
|
'Ganons Tower - Big Key Room - Right', 'Ganons Tower - Big Key Chest'], ['GT Big Key Room SE']),
|
||||||
|
create_dungeon_region(player, 'GT Four Torches', 'Ganon\'s Tower', None, ['GT Four Torches Up Stairs', 'GT Four Torches NW', 'GT Four Torches ES']),
|
||||||
|
create_dungeon_region(player, 'GT Fairy Abyss', 'Ganon\'s Tower', None, ['GT Fairy Abyss SW']),
|
||||||
|
create_dungeon_region(player, 'GT Crystal Paths', 'Ganon\'s Tower', None, ['GT Crystal Paths Down Stairs', 'GT Crystal Paths SW']),
|
||||||
|
create_dungeon_region(player, 'GT Mimics 1', 'Ganon\'s Tower', None, ['GT Mimics 1 NW', 'GT Mimics 1 ES']),
|
||||||
|
create_dungeon_region(player, 'GT Mimics 2', 'Ganon\'s Tower', None, ['GT Mimics 2 WS', 'GT Mimics 2 NE']),
|
||||||
|
create_dungeon_region(player, 'GT Dash Hall', 'Ganon\'s Tower', None, ['GT Dash Hall SE', 'GT Dash Hall NE']),
|
||||||
|
create_dungeon_region(player, 'GT Hidden Spikes', 'Ganon\'s Tower', None, ['GT Hidden Spikes SE', 'GT Hidden Spikes EN']),
|
||||||
|
create_dungeon_region(player, 'GT Cannonball Bridge', 'Ganon\'s Tower', None, ['GT Cannonball Bridge WN', 'GT Cannonball Bridge Up Stairs', 'GT Cannonball Bridge SE']),
|
||||||
|
create_dungeon_region(player, 'GT Refill', 'Ganon\'s Tower', None, ['GT Refill NE']),
|
||||||
|
create_dungeon_region(player, 'GT Gauntlet 1', 'Ganon\'s Tower', None, ['GT Gauntlet 1 Down Stairs', 'GT Gauntlet 1 WN']),
|
||||||
|
create_dungeon_region(player, 'GT Gauntlet 2', 'Ganon\'s Tower', None, ['GT Gauntlet 2 EN', 'GT Gauntlet 2 SW']),
|
||||||
|
create_dungeon_region(player, 'GT Gauntlet 3', 'Ganon\'s Tower', None, ['GT Gauntlet 3 NW', 'GT Gauntlet 3 SW']),
|
||||||
|
create_dungeon_region(player, 'GT Gauntlet 4', 'Ganon\'s Tower', None, ['GT Gauntlet 4 NW', 'GT Gauntlet 4 SW']),
|
||||||
|
create_dungeon_region(player, 'GT Gauntlet 5', 'Ganon\'s Tower', None, ['GT Gauntlet 5 NW', 'GT Gauntlet 5 WS']),
|
||||||
|
create_dungeon_region(player, 'GT Beam Dash', 'Ganon\'s Tower', None, ['GT Beam Dash ES', 'GT Beam Dash WS']),
|
||||||
|
create_dungeon_region(player, 'GT Lanmolas 2', 'Ganon\'s Tower', None, ['GT Lanmolas 2 ES', 'GT Lanmolas 2 NW']),
|
||||||
|
create_dungeon_region(player, 'GT Quad Pot', 'Ganon\'s Tower', None, ['GT Quad Pot SW', 'GT Quad Pot Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'GT Wizzrobes 1', 'Ganon\'s Tower', None, ['GT Wizzrobes 1 Down Stairs', 'GT Wizzrobes 1 SW']),
|
||||||
|
create_dungeon_region(player, 'GT Dashing Bridge', 'Ganon\'s Tower', None, ['GT Dashing Bridge NW', 'GT Dashing Bridge NE']),
|
||||||
|
create_dungeon_region(player, 'GT Wizzrobes 2', 'Ganon\'s Tower', None, ['GT Wizzrobes 2 SE', 'GT Wizzrobes 2 NE']),
|
||||||
|
create_dungeon_region(player, 'GT Conveyor Bridge', 'Ganon\'s Tower', None, ['GT Conveyor Bridge SE', 'GT Conveyor Bridge EN']),
|
||||||
|
create_dungeon_region(player, 'GT Torch Cross', 'Ganon\'s Tower', None, ['GT Torch Cross WN', 'GT Torch Cross ES']),
|
||||||
|
create_dungeon_region(player, 'GT Staredown', 'Ganon\'s Tower', None, ['GT Staredown WS', 'GT Staredown Up Ladder']),
|
||||||
|
create_dungeon_region(player, 'GT Falling Torches', 'Ganon\'s Tower', None, ['GT Falling Torches Down Ladder', 'GT Falling Torches NE', 'GT Falling Torches Hole']),
|
||||||
|
create_dungeon_region(player, 'GT Mini Helmasaur Room', 'Ganon\'s Tower', ['Ganons Tower - Mini Helmasaur Room - Left',
|
||||||
|
'Ganons Tower - Mini Helmasaur Room - Right', 'Ganons Tower - Mini Helmasuar Key Drop'], ['GT Mini Helmasaur Room SE', 'GT Mini Helmasaur Room WN']),
|
||||||
|
create_dungeon_region(player, 'GT Bomb Conveyor', 'Ganon\'s Tower', None, ['GT Bomb Conveyor EN', 'GT Bomb Conveyor SW']),
|
||||||
|
create_dungeon_region(player, 'GT Crystal Circles', 'Ganon\'s Tower', ['Ganons Tower - Pre-Moldorm Chest'], ['GT Crystal Circles NW', 'GT Crystal Circles SW']),
|
||||||
|
create_dungeon_region(player, 'GT Left Moldorm Ledge', 'Ganon\'s Tower', None, ['GT Left Moldorm Ledge Drop Down', 'GT Left Moldorm Ledge NW']),
|
||||||
|
create_dungeon_region(player, 'GT Right Moldorm Ledge', 'Ganon\'s Tower', None, ['GT Right Moldorm Ledge Down Stairs', 'GT Right Moldorm Ledge Drop Down']),
|
||||||
|
create_dungeon_region(player, 'GT Moldorm', 'Ganon\'s Tower', None, ['GT Moldorm Hole', 'GT Moldorm Gap']),
|
||||||
|
create_dungeon_region(player, 'GT Moldorm Pit', 'Ganon\'s Tower', None, ['GT Moldorm Pit Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'GT Validation', 'Ganon\'s Tower', ['Ganons Tower - Validation Chest'], ['GT Validation Block Path']),
|
||||||
|
create_dungeon_region(player, 'GT Validation Door', 'Ganon\'s Tower', None, ['GT Validation WS']),
|
||||||
|
create_dungeon_region(player, 'GT Frozen Over', 'Ganon\'s Tower', None, ['GT Frozen Over ES', 'GT Frozen Over Up Stairs']),
|
||||||
|
create_dungeon_region(player, 'GT Brightly Lit Hall', 'Ganon\'s Tower', None, ['GT Brightly Lit Hall Down Stairs', 'GT Brightly Lit Hall NW']),
|
||||||
|
create_dungeon_region(player, 'GT Agahnim 2', 'Ganon\'s Tower', ['Agahnim 2'], ['GT Agahnim 2 SW'])
|
||||||
]
|
]
|
||||||
|
|
||||||
for region_name, (room_id, shopkeeper, replaceable) in shop_table.items():
|
for region_name, (room_id, default_door_id, shopkeeper, replaceable) in shop_table.items():
|
||||||
region = world.get_region(region_name, player)
|
region = world.get_region(region_name, player)
|
||||||
shop = Shop(region, room_id, ShopType.Shop, shopkeeper, replaceable)
|
shop = Shop(region, room_id, default_door_id, ShopType.Shop, shopkeeper, replaceable)
|
||||||
region.shop = shop
|
region.shop = shop
|
||||||
world.shops.append(shop)
|
world.shops.append(shop)
|
||||||
for index, (item, price) in enumerate(default_shop_contents[region_name]):
|
for index, (item, price) in enumerate(default_shop_contents[region_name]):
|
||||||
shop.add_inventory(index, item, price)
|
shop.add_inventory(index, item, price)
|
||||||
|
|
||||||
region = world.get_region('Capacity Upgrade', player)
|
region = world.get_region('Capacity Upgrade', player)
|
||||||
shop = Shop(region, 0x0115, ShopType.UpgradeShop, 0x04, True)
|
shop = Shop(region, 0x0115, 0x5D, ShopType.UpgradeShop, 0x04, True)
|
||||||
region.shop = shop
|
region.shop = shop
|
||||||
world.shops.append(shop)
|
world.shops.append(shop)
|
||||||
shop.add_inventory(0, 'Bomb Upgrade (+5)', 100, 7)
|
shop.add_inventory(0, 'Bomb Upgrade (+5)', 100, 7)
|
||||||
@@ -331,7 +743,10 @@ def _create_region(player, name, type, hint='Hyrule', locations=None, exits=None
|
|||||||
for exit in exits:
|
for exit in exits:
|
||||||
ret.exits.append(Entrance(player, exit, ret))
|
ret.exits.append(Entrance(player, exit, ret))
|
||||||
for location in locations:
|
for location in locations:
|
||||||
address, player_address, crystal, hint_text = location_table[location]
|
if location in key_only_locations:
|
||||||
|
ret.locations.append(Location(player, location, None, False, None, ret, key_only_locations[location], player_address))
|
||||||
|
else:
|
||||||
|
address, crystal, hint_text = location_table[location]
|
||||||
ret.locations.append(Location(player, location, address, crystal, hint_text, ret, player_address))
|
ret.locations.append(Location(player, location, address, crystal, hint_text, ret, player_address))
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
@@ -344,7 +759,7 @@ def mark_light_world_regions(world, player):
|
|||||||
current = queue.popleft()
|
current = queue.popleft()
|
||||||
current.is_light_world = True
|
current.is_light_world = True
|
||||||
for exit in current.exits:
|
for exit in current.exits:
|
||||||
if exit.connected_region.type == RegionType.DarkWorld:
|
if exit.connected_region is None or exit.connected_region.type == RegionType.DarkWorld: # todo: remove none check
|
||||||
# Don't venture into the dark world
|
# Don't venture into the dark world
|
||||||
continue
|
continue
|
||||||
if exit.connected_region not in seen:
|
if exit.connected_region not in seen:
|
||||||
@@ -357,6 +772,7 @@ def mark_light_world_regions(world, player):
|
|||||||
current = queue.popleft()
|
current = queue.popleft()
|
||||||
current.is_dark_world = True
|
current.is_dark_world = True
|
||||||
for exit in current.exits:
|
for exit in current.exits:
|
||||||
|
if exit.connected_region is not None:
|
||||||
if exit.connected_region.type == RegionType.LightWorld:
|
if exit.connected_region.type == RegionType.LightWorld:
|
||||||
# Don't venture into the light world
|
# Don't venture into the light world
|
||||||
continue
|
continue
|
||||||
@@ -364,18 +780,18 @@ def mark_light_world_regions(world, player):
|
|||||||
seen.add(exit.connected_region)
|
seen.add(exit.connected_region)
|
||||||
queue.append(exit.connected_region)
|
queue.append(exit.connected_region)
|
||||||
|
|
||||||
# (room_id, shopkeeper, replaceable)
|
# (room_id, default_door_id, shopkeeper, replaceable)
|
||||||
shop_table = {
|
shop_table = {
|
||||||
'Cave Shop (Dark Death Mountain)': (0x0112, 0xC1, True),
|
'Cave Shop (Dark Death Mountain)': (0x0112, 0x6E, 0xC1, True),
|
||||||
'Red Shield Shop': (0x0110, 0xC1, True),
|
'Red Shield Shop': (0x0110, 0x75, 0xC1, True),
|
||||||
'Dark Lake Hylia Shop': (0x010F, 0xC1, True),
|
'Dark Lake Hylia Shop': (0x010F, 0x74, 0xC1, True),
|
||||||
'Dark World Lumberjack Shop': (0x010F, 0xC1, True),
|
'Dark World Lumberjack Shop': (0x010F, 0x57, 0xC1, True),
|
||||||
'Village of Outcasts Shop': (0x010F, 0xC1, True),
|
'Village of Outcasts Shop': (0x010F, 0x60, 0xC1, True),
|
||||||
'Dark World Potion Shop': (0x010F, 0xC1, True),
|
'Dark World Potion Shop': (0x010F, 0x6F, 0xC1, True),
|
||||||
'Light World Death Mountain Shop': (0x00FF, 0xA0, True),
|
'Light World Death Mountain Shop': (0x00FF, None, 0xA0, True),
|
||||||
'Kakariko Shop': (0x011F, 0xA0, True),
|
'Kakariko Shop': (0x011F, 0x46, 0xA0, True),
|
||||||
'Cave Shop (Lake Hylia)': (0x0112, 0xA0, True),
|
'Cave Shop (Lake Hylia)': (0x0112, 0x58, 0xA0, True),
|
||||||
'Potion Shop': (0x0109, 0xFF, False),
|
'Potion Shop': (0x0109, 0x4C, 0xFF, False),
|
||||||
# Bomb Shop not currently modeled as a shop, due to special nature of items
|
# Bomb Shop not currently modeled as a shop, due to special nature of items
|
||||||
}
|
}
|
||||||
# region, [item]
|
# region, [item]
|
||||||
@@ -397,6 +813,56 @@ default_shop_contents = {
|
|||||||
'Potion Shop': [('Red Potion', 120), ('Green Potion', 60), ('Blue Potion', 160)],
|
'Potion Shop': [('Red Potion', 120), ('Green Potion', 60), ('Blue Potion', 160)],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
key_only_locations = {
|
||||||
|
'Hyrule Castle - Map Guard Key Drop': 'Small Key (Escape)',
|
||||||
|
'Hyrule Castle - Boomerang Guard Key Drop': 'Small Key (Escape)',
|
||||||
|
'Hyrule Castle - Key Rat Key Drop': 'Small Key (Escape)',
|
||||||
|
'Hyrule Castle - Big Key Drop': 'Big Key (Escape)',
|
||||||
|
'Eastern Palace - Dark Square Pot Key': 'Small Key (Eastern Palace)',
|
||||||
|
'Eastern Palace - Dark Eyegore Key Drop': 'Small Key (Eastern Palace)',
|
||||||
|
'Desert Palace - Desert Tiles 1 Pot Key': 'Small Key (Desert Palace)',
|
||||||
|
'Desert Palace - Beamos Hall Pot Key': 'Small Key (Desert Palace)',
|
||||||
|
'Desert Palace - Desert Tiles 2 Pot Key': 'Small Key (Desert Palace)',
|
||||||
|
'Castle Tower - Dark Archer Key Drop': 'Small Key (Agahnims Tower)',
|
||||||
|
'Castle Tower - Circle of Pots Key Drop': 'Small Key (Agahnims Tower)',
|
||||||
|
'Swamp Palace - Pot Row Pot Key': 'Small Key (Swamp Palace)',
|
||||||
|
'Swamp Palace - Trench 1 Pot Key': 'Small Key (Swamp Palace)',
|
||||||
|
'Swamp Palace - Hookshot Pot Key': 'Small Key (Swamp Palace)',
|
||||||
|
'Swamp Palace - Trench 2 Pot Key': 'Small Key (Swamp Palace)',
|
||||||
|
'Swamp Palace - Waterway Pot Key': 'Small Key (Swamp Palace)',
|
||||||
|
'Skull Woods - West Lobby Pot Key': 'Small Key (Skull Woods)',
|
||||||
|
'Skull Woods - Spike Corner Key Drop': 'Small Key (Skull Woods)',
|
||||||
|
'Thieves\' Town - Hallway Pot Key': 'Small Key (Thieves Town)',
|
||||||
|
'Thieves\' Town - Spike Switch Pot Key': 'Small Key (Thieves Town)',
|
||||||
|
'Ice Palace - Jelly Key Drop': 'Small Key (Ice Palace)',
|
||||||
|
'Ice Palace - Conveyor Key Drop': 'Small Key (Ice Palace)',
|
||||||
|
'Ice Palace - Hammer Block Key Drop': 'Small Key (Ice Palace)',
|
||||||
|
'Ice Palace - Many Pots Pot Key': 'Small Key (Ice Palace)',
|
||||||
|
'Misery Mire - Spikes Pot Key': 'Small Key (Misery Mire)',
|
||||||
|
'Misery Mire - Fishbone Pot Key': 'Small Key (Misery Mire)',
|
||||||
|
'Misery Mire - Conveyor Crystal Key Drop': 'Small Key (Misery Mire)',
|
||||||
|
'Turtle Rock - Pokey 1 Key Drop': 'Small Key (Turtle Rock)',
|
||||||
|
'Turtle Rock - Pokey 2 Key Drop': 'Small Key (Turtle Rock)',
|
||||||
|
'Ganons Tower - Conveyor Cross Pot Key': 'Small Key (Ganons Tower)',
|
||||||
|
'Ganons Tower - Double Switch Pot Key': 'Small Key (Ganons Tower)',
|
||||||
|
'Ganons Tower - Conveyor Star Pits Pot Key': 'Small Key (Ganons Tower)',
|
||||||
|
'Ganons Tower - Mini Helmasuar Key Drop': 'Small Key (Ganons Tower)'
|
||||||
|
}
|
||||||
|
|
||||||
|
dungeon_events = [
|
||||||
|
'Trench 1 Switch',
|
||||||
|
'Trench 2 Switch',
|
||||||
|
'Swamp Drain',
|
||||||
|
'Attic Cracked Floor',
|
||||||
|
'Suspicious Maiden',
|
||||||
|
'Revealing Light',
|
||||||
|
'Ice Block Drop'
|
||||||
|
]
|
||||||
|
|
||||||
|
flooded_keys_reverse = {
|
||||||
|
'Swamp Palace - Trench 1 Pot Key': 'Trench 1 Switch',
|
||||||
|
'Swamp Palace - Trench 2 Pot Key': 'Trench 2 Switch'
|
||||||
|
}
|
||||||
location_table = {'Mushroom': (0x180013, 0x186338, False, 'in the woods'),
|
location_table = {'Mushroom': (0x180013, 0x186338, False, 'in the woods'),
|
||||||
'Bottle Merchant': (0x2eb18, 0x186339, False, 'with a merchant'),
|
'Bottle Merchant': (0x2eb18, 0x186339, False, 'with a merchant'),
|
||||||
'Flute Spot': (0x18014a, 0x18633d, False, 'underground'),
|
'Flute Spot': (0x18014a, 0x18633d, False, 'underground'),
|
||||||
|
|||||||
@@ -9,14 +9,14 @@ import struct
|
|||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from BaseClasses import ShopType, Region, Location, Item
|
from BaseClasses import ShopType, Region, Location, Item, DoorType
|
||||||
from Dungeons import dungeon_music_addresses
|
from Dungeons import dungeon_music_addresses
|
||||||
from Text import MultiByteTextMapper, CompressedTextMapper, text_addresses, Credits, TextTable
|
from Text import MultiByteTextMapper, CompressedTextMapper, text_addresses, Credits, TextTable
|
||||||
from Text import Uncle_texts, Ganon1_texts, TavernMan_texts, Sahasrahla2_texts, Triforce_texts, Blind_texts, BombShop2_texts, junk_texts
|
from Text import Uncle_texts, Ganon1_texts, TavernMan_texts, Sahasrahla2_texts, Triforce_texts, Blind_texts, BombShop2_texts, junk_texts
|
||||||
from Text import KingsReturn_texts, Sanctuary_texts, Kakariko_texts, Blacksmiths_texts, DeathMountain_texts, LostWoods_texts, WishingWell_texts, DesertPalace_texts, MountainTower_texts, LinksHouse_texts, Lumberjacks_texts, SickKid_texts, FluteBoy_texts, Zora_texts, MagicShop_texts, Sahasrahla_names
|
from Text import KingsReturn_texts, Sanctuary_texts, Kakariko_texts, Blacksmiths_texts, DeathMountain_texts, LostWoods_texts, WishingWell_texts, DesertPalace_texts, MountainTower_texts, LinksHouse_texts, Lumberjacks_texts, SickKid_texts, FluteBoy_texts, Zora_texts, MagicShop_texts, Sahasrahla_names
|
||||||
from Utils import output_path, local_path, int16_as_bytes, int32_as_bytes, snes_to_pc
|
from Utils import output_path, local_path, int16_as_bytes, int32_as_bytes, snes_to_pc
|
||||||
from Items import ItemFactory, item_table
|
from Items import ItemFactory, item_table
|
||||||
from EntranceShuffle import door_addresses
|
from EntranceShuffle import door_addresses, exit_ids
|
||||||
|
|
||||||
|
|
||||||
JAP10HASH = '03a63945398191337e896e5771f77173'
|
JAP10HASH = '03a63945398191337e896e5771f77173'
|
||||||
@@ -553,6 +553,31 @@ def patch_rom(world, player, rom, enemized):
|
|||||||
if world.mode[player] == 'inverted':
|
if world.mode[player] == 'inverted':
|
||||||
patch_shuffled_dark_sanc(world, rom, player)
|
patch_shuffled_dark_sanc(world, rom, player)
|
||||||
|
|
||||||
|
# patch doors
|
||||||
|
if world.doorShuffle == 'crossed':
|
||||||
|
rom.write_byte(0x151f1, 2)
|
||||||
|
rom.write_byte(0x15270, 2)
|
||||||
|
rom.write_byte(0x1597b, 2)
|
||||||
|
for door in world.doors:
|
||||||
|
if door.dest is not None and door.player == player and door.type in [DoorType.Normal, DoorType.SpiralStairs]:
|
||||||
|
rom.write_bytes(door.getAddress(), door.dest.getTarget(door.toggle))
|
||||||
|
for room in world.rooms:
|
||||||
|
if room.player == player and room.modified:
|
||||||
|
rom.write_bytes(room.address(), room.rom_data())
|
||||||
|
for paired_door in world.paired_doors[player]:
|
||||||
|
rom.write_bytes(paired_door.address_a(world, player), paired_door.rom_data_a(world, player))
|
||||||
|
rom.write_bytes(paired_door.address_b(world, player), paired_door.rom_data_b(world, player))
|
||||||
|
if world.fix_skullwoods_exit and world.shuffle in ['vanilla', 'simple', 'restricted', 'dungeonssimple']:
|
||||||
|
connect = world.get_entrance('Skull Woods Final Section', player).connected_region
|
||||||
|
exit_name = None
|
||||||
|
for ext in connect.exits:
|
||||||
|
if ext.connected_region.name == 'Skull Woods Forest (West)':
|
||||||
|
exit_name = ext.name
|
||||||
|
break
|
||||||
|
if exit_name is not None and exit_name == 'Skull Woods Final Section Exit':
|
||||||
|
rom.write_int16(0x15DB5 + 2 * exit_ids['Skull Woods Final Section Exit'][1], 0x00F8)
|
||||||
|
# todo: fix other exits if ER enabled and similar situation happens
|
||||||
|
|
||||||
write_custom_shops(rom, world, player)
|
write_custom_shops(rom, world, player)
|
||||||
|
|
||||||
# patch medallion requirements
|
# patch medallion requirements
|
||||||
@@ -951,7 +976,7 @@ def patch_rom(world, player, rom, enemized):
|
|||||||
# compasses showing dungeon count
|
# compasses showing dungeon count
|
||||||
if world.clock_mode != 'off':
|
if world.clock_mode != 'off':
|
||||||
rom.write_byte(0x18003C, 0x00) # Currently must be off if timer is on, because they use same HUD location
|
rom.write_byte(0x18003C, 0x00) # Currently must be off if timer is on, because they use same HUD location
|
||||||
elif world.compassshuffle[player]:
|
elif world.compassshuffle[player] or world.doorShuffle != 'vanilla':
|
||||||
rom.write_byte(0x18003C, 0x01) # show on pickup
|
rom.write_byte(0x18003C, 0x01) # show on pickup
|
||||||
else:
|
else:
|
||||||
rom.write_byte(0x18003C, 0x00)
|
rom.write_byte(0x18003C, 0x00)
|
||||||
|
|||||||
+483
@@ -0,0 +1,483 @@
|
|||||||
|
from enum import Enum, unique
|
||||||
|
from Tables import door_pair_offset_table
|
||||||
|
|
||||||
|
|
||||||
|
def create_rooms(world, player):
|
||||||
|
world.rooms += [
|
||||||
|
Room(player, 0x01, 0x51168).door(Position.WestN2, DoorKind.Warp).door(Position.EastN2, DoorKind.Warp),
|
||||||
|
Room(player, 0x02, 0x50b97).door(Position.South2, DoorKind.TrapTriggerableLow).door(Position.InteriorV2, DoorKind.NormalLow2).door(Position.South2, DoorKind.ToggleFlag),
|
||||||
|
# Room(player, 0x03, 0x509cf).door(Position.SouthW, DoorKind.CaveEntrance),
|
||||||
|
Room(player, 0x04, 0xfe25c).door(Position.NorthW, DoorKind.StairKey2).door(Position.InteriorW, DoorKind.Dashable).door(Position.InteriorS, DoorKind.Dashable).door(Position.InteriorE, DoorKind.TrapTriggerable).door(Position.SouthW, DoorKind.Normal),
|
||||||
|
Room(player, 0x06, 0xfa192).door(Position.SouthW, DoorKind.Trap),
|
||||||
|
# Room(player, 0x08, 0x5064f).door(Position.InteriorS2, DoorKind.CaveEntranceLow08).door(Position.SouthE, DoorKind.CaveEntrance).door(Position.SouthW2, DoorKind.NormalLow2).door(Position.SouthW2, DoorKind.ToggleFlag),
|
||||||
|
Room(player, 0x0a, 0xfa734).door(Position.North, DoorKind.StairKey),
|
||||||
|
Room(player, 0x0b, 0xfabf0).door(Position.InteriorW, DoorKind.TrapTriggerable).door(Position.InteriorS, DoorKind.Trap2).door(Position.InteriorN, DoorKind.SmallKey),
|
||||||
|
Room(player, 0x0c, 0xfef53).door(Position.South, DoorKind.DungeonEntrance),
|
||||||
|
Room(player, 0x0d, 0xf918b).door(Position.SouthW, DoorKind.Trap),
|
||||||
|
Room(player, 0x0e, 0xfc279).door(Position.InteriorW, DoorKind.StairKey2).door(Position.InteriorS, DoorKind.Trap).door(Position.SouthE, DoorKind.DungeonEntrance),
|
||||||
|
|
||||||
|
# Room(player, 0x10, 0x50596).door(Position.SouthW, DoorKind.DungeonEntrance).door(Position.InteriorS, DoorKind.Normal),
|
||||||
|
Room(player, 0x11, 0x50c52).door(Position.InteriorN, DoorKind.Dashable).door(Position.InteriorS, DoorKind.Dashable).door(Position.SouthE, DoorKind.SmallKey),
|
||||||
|
Room(player, 0x12, 0x50a9b).door(Position.North2, DoorKind.NormalLow).door(Position.North2, DoorKind.ToggleFlag).door(Position.South2, DoorKind.NormalLow).door(Position.South2, DoorKind.IncognitoEntrance),
|
||||||
|
Room(player, 0x13, 0xfe29d).door(Position.EastS, DoorKind.SmallKey).door(Position.EastN, DoorKind.Normal),
|
||||||
|
Room(player, 0x14, 0xfe464).door(Position.SouthE, DoorKind.SmallKey).door(Position.WestS, DoorKind.SmallKey).door(Position.NorthW, DoorKind.Normal).door(Position.WestN, DoorKind.Normal).door(Position.SouthW, DoorKind.Normal).door(Position.EastN, DoorKind.Normal).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0x15, 0xfe63e).door(Position.WestS, DoorKind.Trap).door(Position.WestN, DoorKind.Normal),
|
||||||
|
Room(player, 0x16, 0xfa150).door(Position.InteriorV, DoorKind.Bombable).door(Position.InteriorW, DoorKind.SmallKey).door(Position.InteriorE, DoorKind.Normal).door(Position.NorthW, DoorKind.Normal),
|
||||||
|
# Room(player, 0x18, 0x506e5).door(Position.NorthW2, DoorKind.NormalLow).door(Position.NorthW2, DoorKind.ToggleFlag),
|
||||||
|
Room(player, 0x19, 0xfacc6).door(Position.East, DoorKind.Bombable).door(Position.EastN, DoorKind.SmallKey),
|
||||||
|
Room(player, 0x1a, 0xfa670).door(Position.InteriorE, DoorKind.SmallKey).door(Position.WestN, DoorKind.SmallKey).door(Position.West, DoorKind.Bombable).door(Position.SouthW, DoorKind.SmallKey).door(Position.InteriorN, DoorKind.Normal).door(Position.SouthE, DoorKind.Normal),
|
||||||
|
Room(player, 0x1b, 0xfab31).door(Position.InteriorW, DoorKind.TrapTriggerable).door(Position.SouthW, DoorKind.Normal),
|
||||||
|
Room(player, 0x1c, 0xff784).door(Position.InteriorE, DoorKind.TrapTriggerable).door(Position.InteriorS, DoorKind.Trap).door(Position.InteriorW, DoorKind.Dashable),
|
||||||
|
Room(player, 0x1d, 0xfff19).door(Position.NorthW, DoorKind.BigKey),
|
||||||
|
Room(player, 0x1e, 0xfc35e).door(Position.EastS, DoorKind.Trap).door(Position.InteriorS, DoorKind.Trap).door(Position.InteriorE, DoorKind.TrapTriggerable).door(Position.SouthE, DoorKind.Normal),
|
||||||
|
Room(player, 0x1f, 0xfc3af).door(Position.WestS, DoorKind.Trap).door(Position.InteriorS, DoorKind.Trap2),
|
||||||
|
|
||||||
|
Room(player, 0x20, 0xf918b).door(Position.SouthW, DoorKind.Trap),
|
||||||
|
Room(player, 0x21, 0x50d2e).door(Position.NorthE, DoorKind.SmallKey).door(Position.InteriorV, DoorKind.Normal).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0x22, 0x50dd1).door(Position.South, DoorKind.SmallKey).door(Position.WestS, DoorKind.Normal),
|
||||||
|
Room(player, 0x23, 0xfed30).door(Position.SouthE, DoorKind.BombableEntrance).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0x24, 0xfe6ee).door(Position.NorthE, DoorKind.BigKey).door(Position.InteriorN, DoorKind.Trap2).door(Position.InteriorW, DoorKind.Trap2).door(Position.InteriorE, DoorKind.Trap2).door(Position.SouthE, DoorKind.DungeonEntrance).door(Position.NorthW, DoorKind.Normal).door(Position.WestS, DoorKind.Normal).door(Position.InteriorS, DoorKind.Normal),
|
||||||
|
Room(player, 0x26, 0xf9cbb).door(Position.South, DoorKind.SmallKey).door(Position.InteriorW, DoorKind.TrapTriggerable).door(Position.InteriorE, DoorKind.TrapTriggerable).door(Position.InteriorN, DoorKind.Normal),
|
||||||
|
Room(player, 0x28, 0xf92a8).door(Position.NorthW, DoorKind.StairKey2).door(Position.South, DoorKind.DungeonEntrance),
|
||||||
|
Room(player, 0x2a, 0xfa594).door(Position.NorthE, DoorKind.Trap).door(Position.NorthW, DoorKind.SmallKey).door(Position.EastS, DoorKind.Bombable).door(Position.East2, DoorKind.NormalLow).door(Position.SouthW, DoorKind.Normal).door(Position.SouthE, DoorKind.Normal),
|
||||||
|
Room(player, 0x2b, 0xfaaa7).door(Position.InteriorS, DoorKind.Bombable).door(Position.WestS, DoorKind.Bombable).door(Position.NorthW, DoorKind.Trap).door(Position.West2, DoorKind.NormalLow),
|
||||||
|
# Room(player, 0x2c, 0x508cf).door(Position.InteriorW, DoorKind.Bombable).door(Position.InteriorE, DoorKind.Bombable).door(Position.InteriorS, DoorKind.Bombable).door(Position.SouthE, DoorKind.Bombable).door(Position.SouthW, DoorKind.CaveEntrance),
|
||||||
|
Room(player, 0x2e, 0xfc3d8).door(Position.NorthE, DoorKind.Normal),
|
||||||
|
# Room(player, 0x2f, 0x507d1).door(Position.InteriorW, DoorKind.Bombable).door(Position.SouthE, DoorKind.CaveEntrance),
|
||||||
|
|
||||||
|
Room(player, 0x30, 0xf8de3).door(Position.NorthW, DoorKind.Hidden).door(Position.InteriorW, DoorKind.Trap2),
|
||||||
|
Room(player, 0x31, 0xfcf4f).door(Position.InteriorW, DoorKind.BigKey).door(Position.InteriorS, DoorKind.TrapTriggerable),
|
||||||
|
Room(player, 0x32, 0x50e4b).door(Position.North, DoorKind.SmallKey),
|
||||||
|
Room(player, 0x33, 0xf8792).door(Position.SouthW, DoorKind.Trap),
|
||||||
|
Room(player, 0x34, 0xf993c).door(Position.EastN, DoorKind.Normal).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0x35, 0xf97f1).door(Position.EastN, DoorKind.SmallKey).door(Position.WestN, DoorKind.Normal).door(Position.WestS, DoorKind.Normal).door(Position.InteriorE, DoorKind.Normal)
|
||||||
|
.door(Position.EastS, DoorKind.Normal).door(Position.InteriorV2, DoorKind.NormalLow),
|
||||||
|
Room(player, 0x36, 0xf9685).door(Position.EastN, DoorKind.Bombable).door(Position.North, DoorKind.SmallKey).door(Position.WestN, DoorKind.SmallKey).door(Position.WestS, DoorKind.Normal)
|
||||||
|
.door(Position.EastS, DoorKind.Normal).door(Position.South2, DoorKind.NormalLow),
|
||||||
|
Room(player, 0x37, 0xf9492).door(Position.WestN, DoorKind.Bombable).door(Position.EastN, DoorKind.Bombable).door(Position.InteriorW, DoorKind.SmallKey).door(Position.EastS, DoorKind.SmallKey).door(Position.WestS, DoorKind.Normal).door(Position.InteriorV2, DoorKind.NormalLow),
|
||||||
|
Room(player, 0x38, 0xf935b).door(Position.WestN, DoorKind.Bombable).door(Position.WestS, DoorKind.SmallKey),
|
||||||
|
Room(player, 0x39, 0xfc180).door(Position.SouthW, DoorKind.Trap).door(Position.InteriorS, DoorKind.SmallKey),
|
||||||
|
Room(player, 0x3a, 0xfa3f5).door(Position.South, DoorKind.SmallKey).door(Position.NorthW, DoorKind.Normal).door(Position.NorthE, DoorKind.Normal),
|
||||||
|
Room(player, 0x3b, 0xfa9de).door(Position.SouthW, DoorKind.Normal),
|
||||||
|
# Room(player, 0x3c, 0x509a3).door(Position.NorthE, DoorKind.Bombable).door(Position.SouthE, DoorKind.CaveEntrance),
|
||||||
|
Room(player, 0x3d, 0xffd37).door(Position.InteriorE, DoorKind.TrapTriggerable).door(Position.InteriorN, DoorKind.SmallKey).door(Position.SouthW, DoorKind.SmallKey).door(Position.InteriorW, DoorKind.Bombable),
|
||||||
|
Room(player, 0x3e, 0xfc486).door(Position.InteriorE, DoorKind.Trap).door(Position.SouthW, DoorKind.SmallKey),
|
||||||
|
Room(player, 0x3f, 0xfc51b).door(Position.InteriorS, DoorKind.Trap),
|
||||||
|
|
||||||
|
Room(player, 0x40, 0xf8eea).door(Position.InteriorS2, DoorKind.NormalLow2),
|
||||||
|
Room(player, 0x41, 0x50f15).door(Position.South, DoorKind.Trap),
|
||||||
|
Room(player, 0x43, 0xf87f8).door(Position.NorthW, DoorKind.BigKey).door(Position.InteriorE, DoorKind.SmallKey).door(Position.SouthE, DoorKind.SmallKey),
|
||||||
|
Room(player, 0x44, 0xfdbcd).door(Position.InteriorN, DoorKind.Trap2).door(Position.InteriorS, DoorKind.SmallKey).door(Position.EastN, DoorKind.Normal).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0x45, 0xfdcae).door(Position.WestN, DoorKind.Trap).door(Position.InteriorW, DoorKind.Normal).door(Position.WestS, DoorKind.Normal).door(Position.InteriorS, DoorKind.Normal),
|
||||||
|
Room(player, 0x46, 0xf9bbb).door(Position.North2, DoorKind.NormalLow).door(Position.InteriorW2, DoorKind.NormalLow).door(Position.InteriorE2, DoorKind.NormalLow),
|
||||||
|
Room(player, 0x49, 0xfc12c).door(Position.NorthW, DoorKind.Hidden).door(Position.InteriorN, DoorKind.TrapTriggerable).door(Position.SouthW, DoorKind.SmallKey).door(Position.InteriorS, DoorKind.Normal),
|
||||||
|
Room(player, 0x4a, 0xfa267).door(Position.InteriorW, DoorKind.Trap).door(Position.InteriorE, DoorKind.Trap).door(Position.North, DoorKind.SmallKey).door(Position.InteriorV, DoorKind.Normal).door(Position.South, DoorKind.DungeonEntrance),
|
||||||
|
Room(player, 0x4b, 0xfa8c9).door(Position.NorthW, DoorKind.Trap).door(Position.InteriorW, DoorKind.Dashable).door(Position.InteriorE, DoorKind.Dashable),
|
||||||
|
Room(player, 0x4c, 0xffece).door(Position.EastS, DoorKind.Trap),
|
||||||
|
Room(player, 0x4d, 0xffe5a).door(Position.NorthW, DoorKind.SmallKey).door(Position.WestS, DoorKind.Normal),
|
||||||
|
Room(player, 0x4e, 0xfc5ba).door(Position.InteriorN, DoorKind.Trap).door(Position.NorthW, DoorKind.SmallKey),
|
||||||
|
Room(player, 0x4f, 0xfca89).door(Position.WestS, DoorKind.SmallKey),
|
||||||
|
|
||||||
|
Room(player, 0x50, 0x510dc).door(Position.EastN2, DoorKind.Warp).door(Position.SouthE2, DoorKind.NormalLow2),
|
||||||
|
Room(player, 0x51, 0x51029).door(Position.North, DoorKind.Normal).door(Position.North, DoorKind.DungeonChanger),
|
||||||
|
Room(player, 0x52, 0x51230).door(Position.WestN2, DoorKind.Warp).door(Position.SouthW2, DoorKind.NormalLow2).door(Position.South, DoorKind.Normal),
|
||||||
|
Room(player, 0x53, 0xf88ad).door(Position.InteriorW, DoorKind.TrapTriggerable).door(Position.InteriorS, DoorKind.Trap2).door(Position.NorthE, DoorKind.SmallKey),
|
||||||
|
# Room(player, 0x55, 0x50166).door(Position.InteriorW2, DoorKind.NormalLow).door(Position.SouthW, DoorKind.Normal).door(Position.SouthW, DoorKind.IncognitoEntrance),
|
||||||
|
Room(player, 0x56, 0xfbb4e).door(Position.InteriorW, DoorKind.SmallKey).door(Position.SouthW, DoorKind.DungeonEntrance).door(Position.InteriorS, DoorKind.Normal).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0x57, 0xfbbd2).door(Position.InteriorN, DoorKind.Bombable).door(Position.InteriorW, DoorKind.TrapTriggerable).door(Position.EastS, DoorKind.SmallKey).door(Position.SouthW, DoorKind.DungeonEntrance).door(Position.WestS, DoorKind.Normal).door(Position.SouthE, DoorKind.Normal),
|
||||||
|
Room(player, 0x58, 0xfbcf6).door(Position.NorthW, DoorKind.BlastWall).door(Position.WestS, DoorKind.SmallKey).door(Position.SouthE, DoorKind.SmallKey).door(Position.InteriorN, DoorKind.Bombable).door(Position.SouthW, DoorKind.DungeonEntrance).door(Position.InteriorS, DoorKind.Normal),
|
||||||
|
Room(player, 0x59, 0xfbff7).door(Position.NorthW, DoorKind.SmallKey).door(Position.SouthW, DoorKind.DungeonEntrance).door(Position.InteriorN2, DoorKind.NormalLow2).door(Position.InteriorS2, DoorKind.NormalLow2),
|
||||||
|
Room(player, 0x5a, 0xfa7e5).door(Position.SouthE, DoorKind.Trap),
|
||||||
|
Room(player, 0x5b, 0xff8cc).door(Position.SouthE, DoorKind.SmallKey).door(Position.EastN, DoorKind.Trap),
|
||||||
|
Room(player, 0x5c, 0xff976).door(Position.InteriorE, DoorKind.Bombable).door(Position.WestN, DoorKind.Normal),
|
||||||
|
Room(player, 0x5d, 0xff9e1).door(Position.InteriorW, DoorKind.Trap).door(Position.SouthW, DoorKind.Trap).door(Position.InteriorN, DoorKind.Trap),
|
||||||
|
Room(player, 0x5e, 0xfc6b8).door(Position.EastS, DoorKind.SmallKey).door(Position.InteriorE, DoorKind.Trap2).door(Position.SouthE, DoorKind.Normal).door(Position.InteriorS, DoorKind.Normal),
|
||||||
|
Room(player, 0x5f, 0xfc6fa).door(Position.WestS, DoorKind.SmallKey),
|
||||||
|
|
||||||
|
Room(player, 0x60, 0x51309).door(Position.NorthE2, DoorKind.NormalLow2).door(Position.East2, DoorKind.NormalLow2).door(Position.East2, DoorKind.ToggleFlag).door(Position.EastN, DoorKind.Normal).door(Position.SouthE, DoorKind.Normal).door(Position.SouthE, DoorKind.IncognitoEntrance),
|
||||||
|
Room(player, 0x61, 0x51454).door(Position.West2, DoorKind.NormalLow).door(Position.West2, DoorKind.ToggleFlag).door(Position.East2, DoorKind.NormalLow).door(Position.East2, DoorKind.ToggleFlag).door(Position.South2, DoorKind.NormalLow).door(Position.South2, DoorKind.IncognitoEntrance).door(Position.WestN, DoorKind.Normal),
|
||||||
|
Room(player, 0x62, 0x51577).door(Position.West2, DoorKind.NormalLow2).door(Position.West2, DoorKind.ToggleFlag).door(Position.NorthW2, DoorKind.NormalLow2).door(Position.North, DoorKind.Normal).door(Position.SouthW, DoorKind.Normal).door(Position.SouthW, DoorKind.IncognitoEntrance),
|
||||||
|
Room(player, 0x63, 0xf88ed).door(Position.NorthE, DoorKind.StairKey).door(Position.InteriorW, DoorKind.TrapTriggerable).door(Position.SouthW, DoorKind.DungeonEntrance), # looked like a huge typo - I had to guess on StairKey
|
||||||
|
Room(player, 0x64, 0xfda53).door(Position.InteriorS, DoorKind.Trap2),
|
||||||
|
Room(player, 0x65, 0xfdac5).door(Position.InteriorS, DoorKind.Normal),
|
||||||
|
Room(player, 0x66, 0xfa01b).door(Position.InteriorE2, DoorKind.Waterfall).door(Position.SouthW2, DoorKind.NormalLow2).door(Position.SouthW2, DoorKind.ToggleFlag).door(Position.InteriorW2, DoorKind.NormalLow2),
|
||||||
|
Room(player, 0x67, 0xfbe17).door(Position.NorthE, DoorKind.Normal).door(Position.InteriorS, DoorKind.Normal).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0x68, 0xfbf02).door(Position.WestS, DoorKind.Trap).door(Position.NorthE, DoorKind.SmallKey),
|
||||||
|
Room(player, 0x6a, 0xfa7c7).door(Position.NorthE, DoorKind.BigKey),
|
||||||
|
Room(player, 0x6b, 0xff821).door(Position.NorthE, DoorKind.BigKey).door(Position.InteriorE, DoorKind.TrapTriggerable).door(Position.InteriorS, DoorKind.Trap).door(Position.InteriorW, DoorKind.Trap),
|
||||||
|
Room(player, 0x6c, 0xffaa0).door(Position.InteriorS, DoorKind.Trap2).door(Position.InteriorW, DoorKind.Trap).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0x6d, 0xffa4e).door(Position.NorthW, DoorKind.Trap).door(Position.InteriorW, DoorKind.Trap).door(Position.WestS, DoorKind.Trap),
|
||||||
|
Room(player, 0x6e, 0xfc74b).door(Position.NorthE, DoorKind.Trap),
|
||||||
|
|
||||||
|
Room(player, 0x71, 0x52341).door(Position.InteriorW, DoorKind.SmallKey).door(Position.SouthW2, DoorKind.TrapTriggerableLow).door(Position.InteriorS2, DoorKind.TrapTriggerableLow),
|
||||||
|
Room(player, 0x72, 0x51fda).door(Position.InteriorV, DoorKind.SmallKey),
|
||||||
|
Room(player, 0x73, 0xf8972).door(Position.InteriorW, DoorKind.TrapTriggerable).door(Position.InteriorS, DoorKind.Trap2).door(Position.InteriorE, DoorKind.Normal),
|
||||||
|
Room(player, 0x74, 0xf8a66).door(Position.InteriorE, DoorKind.Normal).door(Position.InteriorW, DoorKind.Normal),
|
||||||
|
Room(player, 0x75, 0xf8ab9).door(Position.InteriorW, DoorKind.Trap2).door(Position.SouthE, DoorKind.Normal),
|
||||||
|
Room(player, 0x76, 0xf9e35).door(Position.InteriorN2, DoorKind.NormalLow).door(Position.InteriorS2, DoorKind.NormalLow).door(Position.NorthW2, DoorKind.NormalLow).door(Position.NorthW2, DoorKind.ToggleFlag),
|
||||||
|
Room(player, 0x77, 0xfd0e6).door(Position.NorthW2, DoorKind.StairKeyLow).door(Position.South2, DoorKind.DungeonEntranceLow),
|
||||||
|
Room(player, 0x7b, 0xff02b).door(Position.SouthW, DoorKind.Trap).door(Position.EastN, DoorKind.SmallKey).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0x7c, 0xff0ef).door(Position.NorthE, DoorKind.BlastWall).door(Position.EastS, DoorKind.Bombable).door(Position.WestN, DoorKind.SmallKey).door(Position.WestS, DoorKind.Normal),
|
||||||
|
Room(player, 0x7d, 0xff20c).door(Position.SouthE, DoorKind.Trap).door(Position.WestS, DoorKind.Bombable).door(Position.InteriorW, DoorKind.SmallKey),
|
||||||
|
Room(player, 0x7e, 0xfc7c6).door(Position.SouthE, DoorKind.SmallKey).door(Position.InteriorS, DoorKind.TrapTriggerable).door(Position.EastN, DoorKind.Normal),
|
||||||
|
Room(player, 0x7f, 0xfc827).door(Position.WestN, DoorKind.Trap).door(Position.InteriorW, DoorKind.Normal),
|
||||||
|
|
||||||
|
Room(player, 0x81, 0x5224b).door(Position.NorthW2, DoorKind.NormalLow2),
|
||||||
|
Room(player, 0x83, 0xf8bba).door(Position.InteriorW, DoorKind.TrapTriggerable).door(Position.SouthW, DoorKind.DungeonEntrance).door(Position.InteriorS, DoorKind.Normal),
|
||||||
|
Room(player, 0x84, 0xf8cb7).door(Position.South, DoorKind.DungeonEntrance),
|
||||||
|
Room(player, 0x85, 0xf8d7d).door(Position.NorthE, DoorKind.Trap).door(Position.InteriorN, DoorKind.SmallKey).door(Position.SouthE, DoorKind.DungeonEntrance).door(Position.InteriorS, DoorKind.Normal),
|
||||||
|
Room(player, 0x87, 0xfd1b7).door(Position.InteriorN, DoorKind.Trap2).door(Position.InteriorE, DoorKind.Normal),
|
||||||
|
Room(player, 0x8b, 0xff33f).door(Position.InteriorN, DoorKind.TrapTriggerable).door(Position.InteriorS, DoorKind.SmallKey).door(Position.EastN, DoorKind.Normal).door(Position.SouthW, DoorKind.Normal).door(Position.NorthW, DoorKind.Normal),
|
||||||
|
Room(player, 0x8c, 0xff3ef).door(Position.EastN, DoorKind.Trap).door(Position.InteriorW, DoorKind.Trap2).door(Position.InteriorN, DoorKind.SmallKey).door(Position.WestN, DoorKind.Normal).door(Position.SouthW, DoorKind.Normal).door(Position.SouthE, DoorKind.Normal),
|
||||||
|
Room(player, 0x8d, 0xff4e0).door(Position.SouthE, DoorKind.Trap).door(Position.InteriorN, DoorKind.SmallKey).door(Position.WestN, DoorKind.Normal).door(Position.NorthE, DoorKind.Normal).door(Position.InteriorS, DoorKind.Normal),
|
||||||
|
Room(player, 0x8e, 0xfc84d).door(Position.NorthE, DoorKind.SmallKey),
|
||||||
|
|
||||||
|
Room(player, 0x90, 0xfbab2).door(Position.SouthW, DoorKind.Trap),
|
||||||
|
Room(player, 0x91, 0xfb9e6).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0x92, 0xfb97b).door(Position.InteriorN, DoorKind.Bombable).door(Position.InteriorW, DoorKind.Bombable).door(Position.WestS, DoorKind.Normal).door(Position.InteriorS, DoorKind.Normal).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0x93, 0xfb8e1).door(Position.InteriorW, DoorKind.Trap2).door(Position.InteriorE, DoorKind.SmallKey).door(Position.WestS, DoorKind.Normal),
|
||||||
|
Room(player, 0x95, 0xffc04).door(Position.SouthE, DoorKind.Normal).door(Position.EastN, DoorKind.Normal),
|
||||||
|
Room(player, 0x96, 0xffc78).door(Position.InteriorS, DoorKind.Trap2).door(Position.WestN, DoorKind.Normal),
|
||||||
|
Room(player, 0x97, 0xfb30a).door(Position.InteriorS, DoorKind.Normal).door(Position.InteriorW, DoorKind.Normal),
|
||||||
|
Room(player, 0x98, 0xfaf5b).door(Position.SouthW, DoorKind.DungeonEntrance),
|
||||||
|
Room(player, 0x99, 0x5172a).door(Position.InteriorW, DoorKind.StairKey).door(Position.South, DoorKind.SmallKey).door(Position.InteriorE, DoorKind.Normal),
|
||||||
|
Room(player, 0x9b, 0xff5a2).door(Position.InteriorN, DoorKind.SmallKey).door(Position.NorthW, DoorKind.Normal).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0x9c, 0xff6c9).door(Position.EastS, DoorKind.Trap).door(Position.NorthW, DoorKind.Normal).door(Position.NorthE, DoorKind.Normal).door(Position.WestS, DoorKind.Normal),
|
||||||
|
Room(player, 0x9d, 0xff741).door(Position.NorthE, DoorKind.Normal).door(Position.WestS, DoorKind.Normal).door(Position.InteriorN, DoorKind.Normal),
|
||||||
|
Room(player, 0x9e, 0xfc8c8).door(Position.NorthE, DoorKind.StairKey2).door(Position.InteriorE, DoorKind.BigKey).door(Position.InteriorS, DoorKind.Normal).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0x9f, 0xfc937).door(Position.WestS, DoorKind.Trap).door(Position.SouthW, DoorKind.Trap),
|
||||||
|
|
||||||
|
Room(player, 0xa0, 0xfba9a).door(Position.NorthW, DoorKind.BigKey),
|
||||||
|
Room(player, 0xa1, 0xfb83d).door(Position.SouthE, DoorKind.SmallKey).door(Position.East, DoorKind.Normal),
|
||||||
|
Room(player, 0xa2, 0xfb759).door(Position.South, DoorKind.SmallKey).door(Position.West, DoorKind.Normal).door(Position.East, DoorKind.Normal).door(Position.SouthE, DoorKind.Normal),
|
||||||
|
Room(player, 0xa3, 0xfb667).door(Position.West, DoorKind.Normal).door(Position.SouthW, DoorKind.Normal),
|
||||||
|
Room(player, 0xa4, 0xfe741).door(Position.SouthW, DoorKind.Trap),
|
||||||
|
Room(player, 0xa5, 0xffb7f).door(Position.NorthE, DoorKind.Trap).door(Position.InteriorE, DoorKind.Trap2).door(Position.InteriorW, DoorKind.Trap2),
|
||||||
|
Room(player, 0xa8, 0x51887).door(Position.InteriorS, DoorKind.Trap2).door(Position.InteriorW, DoorKind.TrapTriggerable).door(Position.SouthE, DoorKind.SmallKey).door(Position.InteriorN2, DoorKind.NormalLow2).door(Position.EastN2, DoorKind.NormalLow2).door(Position.East, DoorKind.Normal),
|
||||||
|
Room(player, 0xa9, 0x519c9).door(Position.West, DoorKind.Trap).door(Position.East, DoorKind.Trap).door(Position.North, DoorKind.BigKey).door(Position.WestN2, DoorKind.NormalLow2).door(Position.EastN2, DoorKind.NormalLow2).door(Position.South, DoorKind.Normal),
|
||||||
|
Room(player, 0xaa, 0x51b29).door(Position.InteriorE, DoorKind.Trap2).door(Position.WestN2, DoorKind.NormalLow2).door(Position.InteriorN, DoorKind.Normal).door(Position.InteriorS, DoorKind.Normal).door(Position.West, DoorKind.Normal).door(Position.SouthW, DoorKind.Normal),
|
||||||
|
Room(player, 0xab, 0xfd9a9).door(Position.InteriorW, DoorKind.StairKey).door(Position.SouthW, DoorKind.Normal),
|
||||||
|
Room(player, 0xac, 0xfd9d8).door(Position.SouthE, DoorKind.Trap),
|
||||||
|
Room(player, 0xae, 0xfc975).door(Position.EastN, DoorKind.Normal),
|
||||||
|
Room(player, 0xaf, 0xfc9e1).door(Position.NorthW, DoorKind.Normal).door(Position.WestN, DoorKind.Normal),
|
||||||
|
|
||||||
|
Room(player, 0xb0, 0xf8f6b).door(Position.InteriorW, DoorKind.Trap).door(Position.InteriorN, DoorKind.Trap).door(Position.InteriorS, DoorKind.SmallKey),
|
||||||
|
Room(player, 0xb1, 0xfb3b7).door(Position.InteriorW, DoorKind.BigKey).door(Position.NorthE, DoorKind.SmallKey).door(Position.SouthE, DoorKind.Normal).door(Position.InteriorS, DoorKind.Normal),
|
||||||
|
Room(player, 0xb2, 0xfb4ad).door(Position.North, DoorKind.BigKey).door(Position.InteriorS, DoorKind.Trap2).door(Position.InteriorE, DoorKind.TrapTriggerable).door(Position.EastN2, DoorKind.NormalLow2).door(Position.NorthE, DoorKind.Normal).door(Position.SouthW, DoorKind.Normal).door(Position.SouthE, DoorKind.Normal).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0xb3, 0xfb5e4).door(Position.InteriorW, DoorKind.SmallKey).door(Position.WestN2, DoorKind.NormalLow2).door(Position.NorthW, DoorKind.Normal).door(Position.WestS, DoorKind.Normal).door(Position.SouthW, DoorKind.Normal),
|
||||||
|
Room(player, 0xb4, 0xfe807).door(Position.NorthW, DoorKind.BigKey),
|
||||||
|
Room(player, 0xb5, 0xfeb07).door(Position.SouthW, DoorKind.Trap),
|
||||||
|
Room(player, 0xb6, 0xfdd50).door(Position.NorthW, DoorKind.StairKey2).door(Position.InteriorE, DoorKind.TrapTriggerable).door(Position.SouthW, DoorKind.SmallKey).door(Position.InteriorW, DoorKind.SmallKey).door(Position.SouthE, DoorKind.Normal),
|
||||||
|
Room(player, 0xb7, 0xfddcd).door(Position.SouthW, DoorKind.Normal),
|
||||||
|
Room(player, 0xb8, 0x51b75).door(Position.NorthE, DoorKind.BigKey).door(Position.EastN, DoorKind.Normal),
|
||||||
|
Room(player, 0xb9, 0x51d09).door(Position.EastN, DoorKind.SmallKey).door(Position.North, DoorKind.Normal).door(Position.South, DoorKind.Normal).door(Position.WestN, DoorKind.Normal),
|
||||||
|
Room(player, 0xba, 0x51d57).door(Position.WestN, DoorKind.SmallKey).door(Position.NorthW, DoorKind.Trap).door(Position.InteriorN, DoorKind.Trap2),
|
||||||
|
Room(player, 0xbb, 0xfd86b).door(Position.NorthW, DoorKind.Normal).door(Position.InteriorN, DoorKind.Normal).door(Position.InteriorS, DoorKind.Normal).door(Position.InteriorE, DoorKind.Normal).door(Position.EastN, DoorKind.Normal).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0xbc, 0xfd974).door(Position.InteriorS, DoorKind.SmallKey).door(Position.SouthE, DoorKind.SmallKey).door(Position.InteriorN, DoorKind.Trap).door(Position.SouthW, DoorKind.Bombable).door(Position.WestN, DoorKind.Normal).door(Position.WestS, DoorKind.Normal).door(Position.InteriorW, DoorKind.Normal).door(Position.NorthE, DoorKind.Normal),
|
||||||
|
Room(player, 0xbe, 0xfca28).door(Position.SouthE, DoorKind.Trap).door(Position.EastS, DoorKind.SmallKey).door(Position.InteriorE, DoorKind.Normal),
|
||||||
|
Room(player, 0xbf, 0xfca89).door(Position.WestS, DoorKind.SmallKey),
|
||||||
|
|
||||||
|
Room(player, 0xc0, 0xf9026).door(Position.InteriorN, DoorKind.TrapTriggerable).door(Position.InteriorS, DoorKind.Trap2).door(Position.NorthE, DoorKind.StairKey),
|
||||||
|
Room(player, 0xc1, 0xfb176).door(Position.InteriorS, DoorKind.SmallKey).door(Position.EastS, DoorKind.SmallKey).door(Position.InteriorN, DoorKind.TrapTriggerable).door(Position.InteriorW, DoorKind.TrapTriggerable).door(Position.SouthW, DoorKind.Normal).door(Position.EastN, DoorKind.Normal).door(Position.NorthE, DoorKind.Normal).door(Position.SouthE, DoorKind.Normal),
|
||||||
|
Room(player, 0xc2, 0xfb0e7).door(Position.EastN, DoorKind.SmallKey).door(Position.WestS, DoorKind.SmallKey).door(Position.NorthW, DoorKind.Normal).door(Position.WestN, DoorKind.Normal).door(Position.East, DoorKind.Normal).door(Position.SouthE, DoorKind.Normal).door(Position.EastS, DoorKind.Normal).door(Position.NorthE, DoorKind.Normal),
|
||||||
|
Room(player, 0xc3, 0xfb56c).door(Position.WestN, DoorKind.SmallKey).door(Position.InteriorN, DoorKind.Trap2).door(Position.InteriorH, DoorKind.Trap2).door(Position.InteriorS, DoorKind.TrapTriggerable).door(Position.NorthW, DoorKind.Normal).door(Position.West, DoorKind.Normal).door(Position.WestS, DoorKind.Normal),
|
||||||
|
Room(player, 0xc4, 0xfec3f).door(Position.EastS, DoorKind.SmallKey),
|
||||||
|
Room(player, 0xc5, 0xfece1).door(Position.WestS, DoorKind.SmallKey).door(Position.NorthW, DoorKind.Normal).door(Position.SouthW, DoorKind.Normal),
|
||||||
|
Room(player, 0xc6, 0xfdf5c).door(Position.NorthW, DoorKind.SmallKey).door(Position.NorthE, DoorKind.Normal).door(Position.EastN, DoorKind.Normal).door(Position.EastS, DoorKind.Normal).door(Position.SouthW, DoorKind.Normal).door(Position.SouthE, DoorKind.Normal),
|
||||||
|
Room(player, 0xc7, 0xfe0a1).door(Position.NorthW, DoorKind.Trap).door(Position.WestN, DoorKind.Normal).door(Position.WestS, DoorKind.Normal),
|
||||||
|
Room(player, 0xc8, 0x51596).door(Position.SouthE, DoorKind.Trap),
|
||||||
|
Room(player, 0xc9, 0x51e5a).door(Position.InteriorV, DoorKind.Trap).door(Position.North, DoorKind.Trap).door(Position.InteriorW, DoorKind.Normal).door(Position.InteriorE, DoorKind.Normal).door(Position.South, DoorKind.DungeonEntrance),
|
||||||
|
Room(player, 0xcb, 0xfd630).door(Position.East, DoorKind.Dashable),
|
||||||
|
Room(player, 0xcc, 0xfd783).door(Position.NorthE, DoorKind.BigKey).door(Position.NorthW, DoorKind.Bombable).door(Position.West, DoorKind.Dashable),
|
||||||
|
Room(player, 0xce, 0xfcadd).door(Position.NorthE, DoorKind.Trap),
|
||||||
|
|
||||||
|
Room(player, 0xd0, 0xf90de).door(Position.InteriorS, DoorKind.SmallKey).door(Position.InteriorN, DoorKind.Trap2),
|
||||||
|
Room(player, 0xd1, 0xfb259).door(Position.InteriorS, DoorKind.Trap2).door(Position.NorthW, DoorKind.Normal).door(Position.NorthE, DoorKind.Normal).door(Position.InteriorE, DoorKind.Normal),
|
||||||
|
Room(player, 0xd2, 0xfafd6).door(Position.NorthE, DoorKind.Trap),
|
||||||
|
Room(player, 0xd5, 0xfee40).door(Position.SouthW, DoorKind.BombableEntrance).door(Position.NorthW, DoorKind.Normal),
|
||||||
|
Room(player, 0xd6, 0xfe1cb).door(Position.NorthW, DoorKind.UnknownD6).door(Position.SouthE, DoorKind.DungeonEntrance).door(Position.NorthE, DoorKind.Normal),
|
||||||
|
Room(player, 0xd8, 0x515ed).door(Position.NorthE, DoorKind.Trap).door(Position.InteriorE, DoorKind.TrapTriggerable).door(Position.EastS, DoorKind.Normal),
|
||||||
|
Room(player, 0xd9, 0x5166f).door(Position.WestS, DoorKind.Trap).door(Position.InteriorS, DoorKind.Trap).door(Position.EastS, DoorKind.Trap),
|
||||||
|
Room(player, 0xda, 0x5169d).door(Position.WestS, DoorKind.Trap),
|
||||||
|
Room(player, 0xdb, 0xfd370).door(Position.East, DoorKind.Trap).door(Position.South, DoorKind.DungeonEntrance),
|
||||||
|
Room(player, 0xdc, 0xfd4d1).door(Position.West, DoorKind.Normal),
|
||||||
|
# Room(player, 0xdf, 0x52db4).door(Position.South, DoorKind.CaveEntrance),
|
||||||
|
|
||||||
|
Room(player, 0xe0, 0xf9149).door(Position.InteriorN, DoorKind.Trap2).door(Position.InteriorW, DoorKind.Trap2).door(Position.NorthE, DoorKind.StairKey).door(Position.SouthW, DoorKind.DungeonEntrance),
|
||||||
|
# Room(player, 0xe1, 0x5023c).door(Position.InteriorH2, DoorKind.NormalLow2).door(Position.SouthW, DoorKind.CaveEntrance),
|
||||||
|
# Room(player, 0xe2, 0x50464).door(Position.InteriorH, DoorKind.Normal).door(Position.SouthE, DoorKind.CaveEntrance),
|
||||||
|
# Room(player, 0xe3, 0x5032b).door(Position.InteriorS2, DoorKind.TrapLowE3).door(Position.InteriorE2, DoorKind.NormalLow2).door(Position.SouthW, DoorKind.CaveEntrance),
|
||||||
|
# Room(player, 0xe4, 0x534b1).door(Position.SouthW2, DoorKind.CaveEntranceLow).door(Position.InteriorN, DoorKind.Normal).door(Position.East, DoorKind.Normal),
|
||||||
|
# Room(player, 0xe5, 0x535ba).door(Position.West, DoorKind.Normal).door(Position.South, DoorKind.CaveEntrance),
|
||||||
|
# Room(player, 0xe6, 0x532ee).door(Position.SouthW2, DoorKind.CaveEntranceLow).door(Position.EastN2, DoorKind.NormalLow),
|
||||||
|
# Room(player, 0xe7, 0x533ce).door(Position.SouthE2, DoorKind.CaveEntranceLow).door(Position.WestN2, DoorKind.NormalLow),
|
||||||
|
# Room(player, 0xe8, 0x529d3).door(Position.SouthE, DoorKind.CaveEntrance),
|
||||||
|
# Room(player, 0xea, 0x531f5).door(Position.SouthW, DoorKind.CaveEntrance),
|
||||||
|
# Room(player, 0xeb, 0x52e1a).door(Position.SouthE, DoorKind.CaveEntrance),
|
||||||
|
# Room(player, 0xed, 0x52bec).door(Position.SouthE, DoorKind.CaveEntrance),
|
||||||
|
# Room(player, 0xee, 0x52f76).door(Position.SouthE, DoorKind.CaveEntrance),
|
||||||
|
# Room(player, 0xef, 0x52d37).door(Position.InteriorE, DoorKind.Trap2).door(Position.South, DoorKind.CaveEntrance),
|
||||||
|
|
||||||
|
# Room(player, 0xf0, 0x5258a).door(Position.SouthW, DoorKind.CaveEntrance).door(Position.East2, DoorKind.NormalLow),
|
||||||
|
# Room(player, 0xf1, 0x52703).door(Position.SouthE2, DoorKind.CaveEntranceLow).door(Position.West2, DoorKind.NormalLow),
|
||||||
|
# Room(player, 0xf2, 0x5274a).door(Position.EastS, DoorKind.Normal).door(Position.SouthE, DoorKind.Normal).door(Position.SouthE, DoorKind.IncognitoEntrance),
|
||||||
|
# Room(player, 0xf3, 0x52799).door(Position.WestS, DoorKind.Normal).door(Position.SouthW, DoorKind.Normal).door(Position.SouthW, DoorKind.IncognitoEntrance),
|
||||||
|
# Room(player, 0xf4, 0x527d3).door(Position.EastS, DoorKind.Dashable).door(Position.SouthE, DoorKind.Normal).door(Position.SouthE, DoorKind.IncognitoEntrance),
|
||||||
|
# Room(player, 0xf5, 0x52813).door(Position.WestS, DoorKind.Dashable).door(Position.SouthW, DoorKind.Normal).door(Position.SouthW, DoorKind.IncognitoEntrance),
|
||||||
|
# Room(player, 0xf8, 0x528fe).door(Position.South, DoorKind.CaveEntrance),
|
||||||
|
# Room(player, 0xf9, 0x5305a).door(Position.SouthW, DoorKind.CaveEntrance),
|
||||||
|
# Room(player, 0xfa, 0x53165).door(Position.SouthW2, DoorKind.EntranceLow),
|
||||||
|
# Room(player, 0xfb, 0x52ea4).door(Position.South, DoorKind.CaveEntrance),
|
||||||
|
# Room(player, 0xfd, 0x52ab1).door(Position.South2, DoorKind.CaveEntranceLow),
|
||||||
|
# Room(player, 0xfe, 0x52ff1).door(Position.SouthE2, DoorKind.CaveEntranceLow),
|
||||||
|
# Room(player, 0xff, 0x52c9a).door(Position.InteriorW, DoorKind.Bombable).door(Position.InteriorE, DoorKind.Bombable).door(Position.SouthE, DoorKind.CaveEntrance),
|
||||||
|
]
|
||||||
|
# fix some wonky things
|
||||||
|
world.get_room(0x60, player).swap(2, 4) # puts the exit at pos 2 - enables pos 3
|
||||||
|
world.get_room(0x61, player).swap(1, 6) # puts the WN door at pos 1 - enables it
|
||||||
|
world.get_room(0x61, player).swap(5, 6) # puts the Incognito Entrance at the end, so it can be deleted
|
||||||
|
world.get_room(0x62, player).swap(1, 4) # puts the exit at pos 1 - enables pos 3
|
||||||
|
world.get_room(0x77, player).swap(0, 1) # fixes Hera Lobby Key Stairs - entrance now at pos 0
|
||||||
|
|
||||||
|
|
||||||
|
class Room(object):
|
||||||
|
def __init__(self, player, index, address):
|
||||||
|
self.player = player
|
||||||
|
self.index = index
|
||||||
|
self.doorListAddress = address
|
||||||
|
self.doorList = []
|
||||||
|
self.modified = False
|
||||||
|
|
||||||
|
def door(self, pos, kind):
|
||||||
|
self.doorList.append((pos, kind))
|
||||||
|
return self
|
||||||
|
|
||||||
|
def change(self, list_idx, kind):
|
||||||
|
prev = self.doorList[list_idx]
|
||||||
|
self.doorList[list_idx] = (prev[0], kind)
|
||||||
|
self.modified = True
|
||||||
|
|
||||||
|
def mirror(self, list_idx):
|
||||||
|
prev = self.doorList[list_idx]
|
||||||
|
mirror_door = None
|
||||||
|
for door in self.doorList:
|
||||||
|
if door != prev:
|
||||||
|
mirror_door = door
|
||||||
|
break
|
||||||
|
self.doorList[list_idx] = (mirror_door[0], mirror_door[1])
|
||||||
|
self.modified = True
|
||||||
|
|
||||||
|
def swap(self, idx1, idx2):
|
||||||
|
item1 = self.doorList[idx1]
|
||||||
|
item2 = self.doorList[idx2]
|
||||||
|
self.doorList[idx1] = item2
|
||||||
|
self.doorList[idx2] = item1
|
||||||
|
self.modified = True
|
||||||
|
|
||||||
|
def delete(self, list_idx):
|
||||||
|
self.doorList[list_idx] = (Position.FF, DoorKind.FF)
|
||||||
|
|
||||||
|
def address(self):
|
||||||
|
return self.doorListAddress
|
||||||
|
|
||||||
|
def rom_data(self):
|
||||||
|
byte_array = []
|
||||||
|
for pos, kind in self.doorList:
|
||||||
|
byte_array.append(pos.value)
|
||||||
|
byte_array.append(kind.value)
|
||||||
|
return byte_array
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return str(self.__unicode__())
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return '%s' % self.index
|
||||||
|
|
||||||
|
|
||||||
|
class PairedDoor(object):
|
||||||
|
def __init__(self, door_a, door_b):
|
||||||
|
self.door_a = door_a
|
||||||
|
self.door_b = door_b
|
||||||
|
self.pair = True
|
||||||
|
|
||||||
|
def address_a(self, world, player):
|
||||||
|
d = world.check_for_door(self.door_a, player)
|
||||||
|
return 0x13C000 + (door_pair_offset_table[d.roomIndex]+d.doorListPos)*2
|
||||||
|
|
||||||
|
def address_b(self, world, player):
|
||||||
|
d = world.check_for_door(self.door_b, player)
|
||||||
|
return 0x13C000 + (door_pair_offset_table[d.roomIndex]+d.doorListPos)*2
|
||||||
|
|
||||||
|
def rom_data_a(self, world, player):
|
||||||
|
if not self.pair:
|
||||||
|
return [0x00, 0x00]
|
||||||
|
d = world.check_for_door(self.door_b, player)
|
||||||
|
return [d.roomIndex, pos_map[d.doorListPos]]
|
||||||
|
|
||||||
|
def rom_data_b(self, world, player):
|
||||||
|
if not self.pair:
|
||||||
|
return [0x00, 0x00]
|
||||||
|
d = world.check_for_door(self.door_a, player)
|
||||||
|
return [d.roomIndex, pos_map[d.doorListPos]]
|
||||||
|
|
||||||
|
|
||||||
|
pos_map = {
|
||||||
|
0: 0x80, 1: 0x40, 2: 0x20, 3: 0x10
|
||||||
|
# indices 4-7 not supported yet
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@unique
|
||||||
|
class DoorKind(Enum):
|
||||||
|
Normal = 0x00
|
||||||
|
NormalLow = 0x02
|
||||||
|
EntranceLow = 0x04
|
||||||
|
Waterfall = 0x08
|
||||||
|
DungeonEntrance = 0x0A
|
||||||
|
DungeonEntranceLow = 0x0C
|
||||||
|
CaveEntrance = 0x0E
|
||||||
|
CaveEntranceLow = 0x10
|
||||||
|
IncognitoEntrance = 0x12
|
||||||
|
DungeonChanger = 0x14
|
||||||
|
ToggleFlag = 0x16
|
||||||
|
Trap = 0x18
|
||||||
|
UnknownD6 = 0x1A
|
||||||
|
SmallKey = 0x1C
|
||||||
|
BigKey = 0x1E
|
||||||
|
StairKey = 0x20
|
||||||
|
StairKey2 = 0x22
|
||||||
|
HauntedStairKey = 0x24 # not a real door, can see it in dark rooms when facing left
|
||||||
|
StairKeyLow = 0x26
|
||||||
|
Dashable = 0x28
|
||||||
|
BombableEntrance = 0x2A
|
||||||
|
Bombable = 0x2E
|
||||||
|
BlastWall = 0x30
|
||||||
|
Hidden = 0x32
|
||||||
|
TrapTriggerable = 0x36
|
||||||
|
Trap2 = 0x38
|
||||||
|
NormalLow2 = 0x40
|
||||||
|
TrapTriggerableLow = 0x44
|
||||||
|
Warp = 0x46
|
||||||
|
CaveEntranceLow08 = 0x48
|
||||||
|
TrapLowE3 = 0x4A # Maybe this is a toggle flag too?
|
||||||
|
FF = 0xFF
|
||||||
|
|
||||||
|
|
||||||
|
@unique
|
||||||
|
class Position(Enum):
|
||||||
|
NorthW = 0x00
|
||||||
|
North = 0x10
|
||||||
|
NorthE = 0x20
|
||||||
|
NorthW2 = 0x30
|
||||||
|
North2 = 0x40
|
||||||
|
NorthE2 = 0x50
|
||||||
|
InteriorW = 0x60
|
||||||
|
InteriorV = 0x70
|
||||||
|
InteriorE = 0x80
|
||||||
|
InteriorW2 = 0x90
|
||||||
|
InteriorV2 = 0xA0
|
||||||
|
InteriorE2 = 0xB0
|
||||||
|
SouthW = 0x61
|
||||||
|
South = 0x71
|
||||||
|
SouthE = 0x81
|
||||||
|
SouthW2 = 0x91
|
||||||
|
South2 = 0xA1
|
||||||
|
SouthE2 = 0xB1
|
||||||
|
WestN = 0x02
|
||||||
|
West = 0x12
|
||||||
|
WestS = 0x22
|
||||||
|
WestN2 = 0x32
|
||||||
|
West2 = 0x42
|
||||||
|
# WestS2 = 0x52
|
||||||
|
InteriorN = 0x62
|
||||||
|
InteriorH = 0x72
|
||||||
|
InteriorS = 0x82
|
||||||
|
InteriorN2 = 0x92
|
||||||
|
InteriorH2 = 0xA2
|
||||||
|
InteriorS2 = 0xB2
|
||||||
|
EastN = 0x63
|
||||||
|
East = 0x73
|
||||||
|
EastS = 0x83
|
||||||
|
EastN2 = 0x93
|
||||||
|
East2 = 0xA3
|
||||||
|
# EastS2 = 0xB3
|
||||||
|
FF = 0xFF
|
||||||
|
|
||||||
|
|
||||||
|
class TestWorld(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.rooms = []
|
||||||
|
|
||||||
|
|
||||||
|
# python3 -c "from RoomData import offset_utility; offset_utility()"
|
||||||
|
# This utility was used to calculate the distance offsets
|
||||||
|
def offset_utility():
|
||||||
|
world = TestWorld()
|
||||||
|
create_rooms(world, 1)
|
||||||
|
map = {}
|
||||||
|
cntr = 1
|
||||||
|
for room in world.rooms:
|
||||||
|
map[room.index] = cntr
|
||||||
|
cntr = cntr + len(room.doorList)
|
||||||
|
string = ''
|
||||||
|
for i in range(225):
|
||||||
|
if i % 16 == 0:
|
||||||
|
string = string + 'dw '
|
||||||
|
if i not in map:
|
||||||
|
string = string + '$0000,'
|
||||||
|
else:
|
||||||
|
string = string + hex(map[i]) + ','
|
||||||
|
print(string)
|
||||||
|
|
||||||
|
# python3 -c "from RoomData import key_door_template_generator; key_door_template_generator()"
|
||||||
|
# This utility was used to help initialize the pairing data
|
||||||
|
def key_door_template_generator():
|
||||||
|
world = TestWorld()
|
||||||
|
create_rooms(world, 1)
|
||||||
|
map = {}
|
||||||
|
cntr = 1
|
||||||
|
for room in world.rooms:
|
||||||
|
string = 'dw '
|
||||||
|
for door in room.doorList:
|
||||||
|
if door[1] in [DoorKind.SmallKey, DoorKind.BigKey, DoorKind.SmallKey, DoorKind.Dashable, DoorKind.Bombable]:
|
||||||
|
string = string + '$xxxx,'
|
||||||
|
else:
|
||||||
|
string = string + '$0000,'
|
||||||
|
print(string[0:-1])
|
||||||
|
|
||||||
|
|
||||||
|
# python3 -c "from RoomData import door_address_list; door_address_list('/home/randall/kwyn/orig/z3.sfc')"
|
||||||
|
# python3 -c "from RoomData import door_address_list; door_address_list('path/to/rom.sfc')"
|
||||||
|
def door_address_list(rom):
|
||||||
|
with open(rom, 'rb') as stream:
|
||||||
|
rom_data = bytearray(stream.read())
|
||||||
|
room_index = 0
|
||||||
|
while room_index < 256:
|
||||||
|
offset = room_index * 3
|
||||||
|
address = rom_data[0x0F8000 + offset]
|
||||||
|
address = address + 0x100 * rom_data[0x0F8000 + offset + 1]
|
||||||
|
byte3 = rom_data[0x0F8000 + offset + 2]
|
||||||
|
address = address + (byte3 << 16)
|
||||||
|
if byte3 == 0x03:
|
||||||
|
address = address - 0x020000
|
||||||
|
elif byte3 == 0x0A:
|
||||||
|
address = address - 0x058000
|
||||||
|
elif byte3 == 0x1f:
|
||||||
|
address = address - 0x100000
|
||||||
|
else:
|
||||||
|
print('Byte3 ' + hex(byte3))
|
||||||
|
print('Address ' + hex(address))
|
||||||
|
raise Exception('Bad address?')
|
||||||
|
terminated = False
|
||||||
|
while not terminated:
|
||||||
|
marker = rom_data[address] + (rom_data[address+1] << 8)
|
||||||
|
# if marker == 0xFFFF:
|
||||||
|
# print('Room '+ hex(room_index)+ ' terminated at '+ hex(address))
|
||||||
|
# terminated = True
|
||||||
|
if marker == 0xFFF0:
|
||||||
|
print(hex(room_index) + ': ' + hex(address+2))
|
||||||
|
# print('Room ' + hex(room_index) + ' address: ' + hex(address+2))
|
||||||
|
terminated = True
|
||||||
|
else:
|
||||||
|
address = address + 3
|
||||||
|
room_index = room_index + 1
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import collections
|
import collections
|
||||||
import logging
|
import logging
|
||||||
from BaseClasses import CollectionState
|
from BaseClasses import CollectionState
|
||||||
|
from Regions import key_only_locations
|
||||||
|
|
||||||
|
|
||||||
def set_rules(world, player):
|
def set_rules(world, player):
|
||||||
@@ -57,7 +58,7 @@ def set_rules(world, player):
|
|||||||
|
|
||||||
# if swamp and dam have not been moved we require mirror for swamp palace
|
# if swamp and dam have not been moved we require mirror for swamp palace
|
||||||
if not world.swamp_patch_required[player]:
|
if not world.swamp_patch_required[player]:
|
||||||
add_rule(world.get_entrance('Swamp Palace Moat', player), lambda state: state.has_Mirror(player))
|
add_rule(world.get_entrance('Swamp Lobby Moat', player), lambda state: state.has_Mirror(player))
|
||||||
|
|
||||||
if world.mode[player] != 'inverted':
|
if world.mode[player] != 'inverted':
|
||||||
set_bunny_rules(world, player)
|
set_bunny_rules(world, player)
|
||||||
@@ -142,199 +143,177 @@ def global_rules(world, player):
|
|||||||
set_rule(world.get_location('Hookshot Cave - Bottom Right', player), lambda state: state.has('Hookshot', player) or state.has('Pegasus Boots', player))
|
set_rule(world.get_location('Hookshot Cave - Bottom Right', player), lambda state: state.has('Hookshot', player) or state.has('Pegasus Boots', player))
|
||||||
set_rule(world.get_location('Hookshot Cave - Bottom Left', player), lambda state: state.has('Hookshot', player))
|
set_rule(world.get_location('Hookshot Cave - Bottom Left', player), lambda state: state.has('Hookshot', player))
|
||||||
|
|
||||||
set_rule(world.get_entrance('Sewers Door', player), lambda state: state.has_key('Small Key (Escape)', player) or (world.retro[player] and world.mode[player] == 'standard')) # standard retro cannot access the shop
|
# Start of door rando rules
|
||||||
set_rule(world.get_entrance('Sewers Back Door', player), lambda state: state.has_key('Small Key (Escape)', player))
|
# TODO: Do these need to flag off when door rando is off? - some of them, yes
|
||||||
set_rule(world.get_entrance('Agahnim 1', player), lambda state: state.has_sword(player) and state.has_key('Small Key (Agahnims Tower)', player, 2))
|
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Agahnim 1', player))
|
|
||||||
set_rule(world.get_location('Castle Tower - Dark Maze', player), lambda state: state.has_key('Small Key (Agahnims Tower)', player))
|
|
||||||
|
|
||||||
set_rule(world.get_location('Eastern Palace - Big Chest', player), lambda state: state.has('Big Key (Eastern Palace)', player))
|
# Eastern Palace
|
||||||
set_rule(world.get_location('Eastern Palace - Boss', player), lambda state: state.can_shoot_arrows(player) and state.has('Big Key (Eastern Palace)', player) and world.get_location('Eastern Palace - Boss', player).parent_region.dungeon.boss.can_defeat(state))
|
# Eyegore room needs a bow
|
||||||
set_rule(world.get_location('Eastern Palace - Prize', player), lambda state: state.can_shoot_arrows(player) and state.has('Big Key (Eastern Palace)', player) and world.get_location('Eastern Palace - Prize', player).parent_region.dungeon.boss.can_defeat(state))
|
set_rule(world.get_entrance('Eastern Duo Eyegores NE', player), lambda state: state.can_shoot_arrows(player))
|
||||||
for location in ['Eastern Palace - Boss', 'Eastern Palace - Big Chest']:
|
set_rule(world.get_entrance('Eastern Single Eyegore NE', player), lambda state: state.can_shoot_arrows(player))
|
||||||
forbid_item(world.get_location(location, player), 'Big Key (Eastern Palace)', player)
|
set_rule(world.get_entrance('Eastern Map Balcony Hook Path', player), lambda state: state.has('Hookshot', player))
|
||||||
|
|
||||||
set_rule(world.get_location('Desert Palace - Big Chest', player), lambda state: state.has('Big Key (Desert Palace)', player))
|
# Boss rules. Same as below but no BK or arrow requirement.
|
||||||
|
set_defeat_dungeon_boss_rule(world.get_location('Eastern Palace - Prize', player))
|
||||||
|
set_defeat_dungeon_boss_rule(world.get_location('Eastern Palace - Boss', player))
|
||||||
|
|
||||||
|
# Desert
|
||||||
set_rule(world.get_location('Desert Palace - Torch', player), lambda state: state.has_Boots(player))
|
set_rule(world.get_location('Desert Palace - Torch', player), lambda state: state.has_Boots(player))
|
||||||
set_rule(world.get_entrance('Desert Palace East Wing', player), lambda state: state.has_key('Small Key (Desert Palace)', player))
|
set_rule(world.get_entrance('Desert Wall Slide NW', player), lambda state: state.has_fire_source(player))
|
||||||
set_rule(world.get_location('Desert Palace - Prize', player), lambda state: state.has_key('Small Key (Desert Palace)', player) and state.has('Big Key (Desert Palace)', player) and state.has_fire_source(player) and world.get_location('Desert Palace - Prize', player).parent_region.dungeon.boss.can_defeat(state))
|
add_rule(world.get_entrance('Desert Wall Slide NW', player), lambda state: state.has('Big Key (Desert Palace)', player))
|
||||||
set_rule(world.get_location('Desert Palace - Boss', player), lambda state: state.has_key('Small Key (Desert Palace)', player) and state.has('Big Key (Desert Palace)', player) and state.has_fire_source(player) and world.get_location('Desert Palace - Boss', player).parent_region.dungeon.boss.can_defeat(state))
|
set_defeat_dungeon_boss_rule(world.get_location('Desert Palace - Prize', player))
|
||||||
for location in ['Desert Palace - Boss', 'Desert Palace - Big Chest']:
|
set_defeat_dungeon_boss_rule(world.get_location('Desert Palace - Boss', player))
|
||||||
forbid_item(world.get_location(location, player), 'Big Key (Desert Palace)', player)
|
|
||||||
|
|
||||||
for location in ['Desert Palace - Boss', 'Desert Palace - Big Key Chest', 'Desert Palace - Compass Chest']:
|
# Tower of Hera
|
||||||
forbid_item(world.get_location(location, player), 'Small Key (Desert Palace)', player)
|
|
||||||
|
|
||||||
set_rule(world.get_entrance('Tower of Hera Small Key Door', player), lambda state: state.has_key('Small Key (Tower of Hera)', player) or item_name(state, 'Tower of Hera - Big Key Chest', player) == ('Small Key (Tower of Hera)', player))
|
|
||||||
set_rule(world.get_entrance('Tower of Hera Big Key Door', player), lambda state: state.has('Big Key (Tower of Hera)', player))
|
|
||||||
set_rule(world.get_location('Tower of Hera - Big Chest', player), lambda state: state.has('Big Key (Tower of Hera)', player))
|
|
||||||
set_rule(world.get_location('Tower of Hera - Big Key Chest', player), lambda state: state.has_fire_source(player))
|
set_rule(world.get_location('Tower of Hera - Big Key Chest', player), lambda state: state.has_fire_source(player))
|
||||||
if world.accessibility[player] != 'locations':
|
|
||||||
set_always_allow(world.get_location('Tower of Hera - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Tower of Hera)' and item.player == player)
|
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Boss', player))
|
set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Boss', player))
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Prize', player))
|
set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Prize', player))
|
||||||
for location in ['Tower of Hera - Boss', 'Tower of Hera - Big Chest', 'Tower of Hera - Compass Chest']:
|
|
||||||
forbid_item(world.get_location(location, player), 'Big Key (Tower of Hera)', player)
|
|
||||||
# for location in ['Tower of Hera - Big Key Chest']:
|
|
||||||
# forbid_item(world.get_location(location, player), 'Small Key (Tower of Hera)', player)
|
|
||||||
|
|
||||||
set_rule(world.get_entrance('Swamp Palace Moat', player), lambda state: state.has('Flippers', player) and state.has('Open Floodgate', player))
|
set_rule(world.get_entrance('Tower Altar NW', player), lambda state: state.has_sword(player))
|
||||||
set_rule(world.get_entrance('Swamp Palace Small Key Door', player), lambda state: state.has_key('Small Key (Swamp Palace)', player))
|
|
||||||
set_rule(world.get_entrance('Swamp Palace (Center)', player), lambda state: state.has('Hammer', player))
|
set_rule(world.get_entrance('PoD Arena Bonk Path', player), lambda state: state.has_Boots(player))
|
||||||
set_rule(world.get_location('Swamp Palace - Big Chest', player), lambda state: state.has('Big Key (Swamp Palace)', player) or item_name(state, 'Swamp Palace - Big Chest', player) == ('Big Key (Swamp Palace)', player))
|
set_rule(world.get_entrance('PoD Mimics 1 NW', player), lambda state: state.can_shoot_arrows(player))
|
||||||
if world.accessibility[player] != 'locations':
|
set_rule(world.get_entrance('PoD Mimics 2 NW', player), lambda state: state.can_shoot_arrows(player))
|
||||||
set_always_allow(world.get_location('Swamp Palace - Big Chest', player), lambda state, item: item.name == 'Big Key (Swamp Palace)' and item.player == player)
|
set_rule(world.get_entrance('PoD Bow Statue Down Ladder', player), lambda state: state.can_shoot_arrows(player))
|
||||||
set_rule(world.get_entrance('Swamp Palace (North)', player), lambda state: state.has('Hookshot', player))
|
set_rule(world.get_entrance('PoD Map Balcony Drop Down', player), lambda state: state.has('Hammer', player))
|
||||||
|
set_rule(world.get_entrance('PoD Dark Pegs WN', player), lambda state: state.has('Hammer', player))
|
||||||
|
set_rule(world.get_entrance('PoD Dark Pegs Up Ladder', player), lambda state: state.has('Hammer', player))
|
||||||
|
set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Boss', player))
|
||||||
|
set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Prize', player))
|
||||||
|
|
||||||
|
set_rule(world.get_entrance('Swamp Lobby Moat', player), lambda state: state.has('Flippers', player) and state.has('Open Floodgate', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Trench 1 Approach Dry', player), lambda state: not state.has('Trench 1 Filled', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Trench 1 Key Ledge Dry', player), lambda state: not state.has('Trench 1 Filled', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Trench 1 Departure Dry', player), lambda state: not state.has('Trench 1 Filled', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Trench 1 Approach Key', player), lambda state: state.has('Flippers', player) and state.has('Trench 1 Filled', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Trench 1 Approach Swim Depart', player), lambda state: state.has('Flippers', player) and state.has('Trench 1 Filled', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Trench 1 Key Approach', player), lambda state: state.has('Flippers', player) and state.has('Trench 1 Filled', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Trench 1 Key Ledge Depart', player), lambda state: state.has('Flippers', player) and state.has('Trench 1 Filled', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Trench 1 Departure Approach', player), lambda state: state.has('Flippers', player) and state.has('Trench 1 Filled', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Trench 1 Departure Key', player), lambda state: state.has('Flippers', player) and state.has('Trench 1 Filled', player))
|
||||||
|
set_rule(world.get_location('Trench 1 Switch', player), lambda state: state.has('Hammer', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Hub Hook Path', player), lambda state: state.has('Hookshot', player))
|
||||||
|
set_rule(world.get_location('Swamp Palace - Hookshot Pot Key', player), lambda state: state.has('Hookshot', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Trench 2 Pots Dry', player), lambda state: not state.has('Trench 2 Filled', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Trench 2 Pots Wet', player), lambda state: state.has('Flippers', player) and state.has('Trench 2 Filled', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Trench 2 Departure Wet', player), lambda state: state.has('Flippers', player) and state.has('Trench 2 Filled', player))
|
||||||
|
set_rule(world.get_entrance('Swamp West Ledge Hook Path', player), lambda state: state.has('Hookshot', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Barrier Ledge Hook Path', player), lambda state: state.has('Hookshot', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Drain Right Switch', player), lambda state: state.has('Drained Swamp', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Drain WN', player), lambda state: state.has('Drained Swamp', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Flooded Room WS', player), lambda state: state.has('Drained Swamp', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Flooded Room Ladder', player), lambda state: state.has('Drained Swamp', player))
|
||||||
|
set_rule(world.get_location('Swamp Palace - Flooded Room - Left', player), lambda state: state.has('Drained Swamp', player))
|
||||||
|
set_rule(world.get_location('Swamp Palace - Flooded Room - Right', player), lambda state: state.has('Drained Swamp', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Waterway NW', player), lambda state: state.has('Flippers', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Waterway N', player), lambda state: state.has('Flippers', player))
|
||||||
|
set_rule(world.get_entrance('Swamp Waterway NE', player), lambda state: state.has('Flippers', player))
|
||||||
|
set_rule(world.get_location('Swamp Palace - Waterway Pot Key', player), lambda state: state.has('Flippers', player))
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Swamp Palace - Boss', player))
|
set_defeat_dungeon_boss_rule(world.get_location('Swamp Palace - Boss', player))
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Swamp Palace - Prize', player))
|
set_defeat_dungeon_boss_rule(world.get_location('Swamp Palace - Prize', player))
|
||||||
for location in ['Swamp Palace - Entrance']:
|
|
||||||
forbid_item(world.get_location(location, player), 'Big Key (Swamp Palace)', player)
|
|
||||||
|
|
||||||
set_rule(world.get_entrance('Thieves Town Big Key Door', player), lambda state: state.has('Big Key (Thieves Town)', player))
|
set_rule(world.get_entrance('Skull Big Chest Hookpath', player), lambda state: state.has('Hookshot', player))
|
||||||
set_rule(world.get_entrance('Blind Fight', player), lambda state: state.has_key('Small Key (Thieves Town)', player))
|
set_rule(world.get_entrance('Skull Torch Room WN', player), lambda state: state.has('Fire Rod', player))
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Thieves\' Town - Boss', player))
|
set_rule(world.get_entrance('Skull Vines NW', player), lambda state: state.has_sword(player))
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Thieves\' Town - Prize', player))
|
|
||||||
set_rule(world.get_location('Thieves\' Town - Big Chest', player), lambda state: (state.has_key('Small Key (Thieves Town)', player) or item_name(state, 'Thieves\' Town - Big Chest', player) == ('Small Key (Thieves Town)', player)) and state.has('Hammer', player))
|
|
||||||
if world.accessibility[player] != 'locations':
|
|
||||||
set_always_allow(world.get_location('Thieves\' Town - Big Chest', player), lambda state, item: item.name == 'Small Key (Thieves Town)' and item.player == player and state.has('Hammer', player))
|
|
||||||
set_rule(world.get_location('Thieves\' Town - Attic', player), lambda state: state.has_key('Small Key (Thieves Town)', player))
|
|
||||||
for location in ['Thieves\' Town - Attic', 'Thieves\' Town - Big Chest', 'Thieves\' Town - Blind\'s Cell', 'Thieves\' Town - Boss']:
|
|
||||||
forbid_item(world.get_location(location, player), 'Big Key (Thieves Town)', player)
|
|
||||||
for location in ['Thieves\' Town - Attic', 'Thieves\' Town - Boss']:
|
|
||||||
forbid_item(world.get_location(location, player), 'Small Key (Thieves Town)', player)
|
|
||||||
|
|
||||||
set_rule(world.get_entrance('Skull Woods First Section South Door', player), lambda state: state.has_key('Small Key (Skull Woods)', player))
|
|
||||||
set_rule(world.get_entrance('Skull Woods First Section (Right) North Door', player), lambda state: state.has_key('Small Key (Skull Woods)', player))
|
|
||||||
set_rule(world.get_entrance('Skull Woods First Section West Door', player), lambda state: state.has_key('Small Key (Skull Woods)', player, 2)) # ideally would only be one key, but we may have spent thst key already on escaping the right section
|
|
||||||
set_rule(world.get_entrance('Skull Woods First Section (Left) Door to Exit', player), lambda state: state.has_key('Small Key (Skull Woods)', player, 2))
|
|
||||||
set_rule(world.get_location('Skull Woods - Big Chest', player), lambda state: state.has('Big Key (Skull Woods)', player) or item_name(state, 'Skull Woods - Big Chest', player) == ('Big Key (Skull Woods)', player))
|
|
||||||
if world.accessibility[player] != 'locations':
|
|
||||||
set_always_allow(world.get_location('Skull Woods - Big Chest', player), lambda state, item: item.name == 'Big Key (Skull Woods)' and item.player == player)
|
|
||||||
set_rule(world.get_entrance('Skull Woods Torch Room', player), lambda state: state.has_key('Small Key (Skull Woods)', player, 3) and state.has('Fire Rod', player) and state.has_sword(player)) # sword required for curtain
|
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Boss', player))
|
set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Boss', player))
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Prize', player))
|
set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Prize', player))
|
||||||
for location in ['Skull Woods - Boss']:
|
|
||||||
forbid_item(world.get_location(location, player), 'Small Key (Skull Woods)', player)
|
|
||||||
|
|
||||||
set_rule(world.get_entrance('Ice Palace Entrance Room', player), lambda state: state.can_melt_things(player))
|
# blind can't have the small key? - not necessarily true anymore - but likely still
|
||||||
set_rule(world.get_location('Ice Palace - Big Chest', player), lambda state: state.has('Big Key (Ice Palace)', player))
|
for entrance in ['Thieves Basement Block Path', 'Thieves Blocked Entry Path', 'Thieves Conveyor Block Path', 'Thieves Conveyor Bridge Block Path']:
|
||||||
set_rule(world.get_entrance('Ice Palace (Kholdstare)', player), lambda state: state.can_lift_rocks(player) and state.has('Hammer', player) and state.has('Big Key (Ice Palace)', player) and (state.has_key('Small Key (Ice Palace)', player, 2) or (state.has('Cane of Somaria', player) and state.has_key('Small Key (Ice Palace)', player, 1))))
|
set_rule(world.get_entrance(entrance, player), lambda state: state.can_lift_rocks(player))
|
||||||
# TODO: investigate change from VT. Changed to hookshot or 2 keys (no checking for big key in specific chests)
|
for location in ['Thieves\' Town - Blind\'s Cell', 'Thieves\' Town - Boss']:
|
||||||
set_rule(world.get_entrance('Ice Palace (East)', player), lambda state: (state.has('Hookshot', player) or (item_in_locations(state, 'Big Key (Ice Palace)', player, [('Ice Palace - Spike Room', player), ('Ice Palace - Big Key Chest', player), ('Ice Palace - Map Chest', player)]) and state.has_key('Small Key (Ice Palace)', player))) and (state.world.can_take_damage or state.has('Hookshot', player) or state.has('Cape', player) or state.has('Cane of Byrna', player)))
|
forbid_item(world.get_location(location, player), 'Big Key (Thieves Town)', player)
|
||||||
set_rule(world.get_entrance('Ice Palace (East Top)', player), lambda state: state.can_lift_rocks(player) and state.has('Hammer', player))
|
forbid_item(world.get_location('Thieves\' Town - Blind\'s Cell', player), 'Big Key (Thieves Town)', player)
|
||||||
|
for location in ['Suspicious Maiden', 'Thieves\' Town - Blind\'s Cell']:
|
||||||
|
set_rule(world.get_location(location, player), lambda state: state.has('Big Key (Thieves Town)', player))
|
||||||
|
set_rule(world.get_location('Revealing Light', player), lambda state: state.has('Shining Light', player) and state.has('Maiden Rescued', player))
|
||||||
|
set_rule(world.get_location('Thieves\' Town - Boss', player), lambda state: state.has('Maiden Unmasked', player) and world.get_location('Thieves\' Town - Boss', player).parent_region.dungeon.boss.can_defeat(state))
|
||||||
|
set_rule(world.get_location('Thieves\' Town - Prize', player), lambda state: state.has('Maiden Unmasked', player) and world.get_location('Thieves\' Town - Prize', player).parent_region.dungeon.boss.can_defeat(state))
|
||||||
|
|
||||||
|
set_rule(world.get_entrance('Ice Lobby WS', player), lambda state: state.can_melt_things(player))
|
||||||
|
set_rule(world.get_entrance('Ice Hammer Block ES', player), lambda state: state.can_lift_rocks(player) and state.has('Hammer', player))
|
||||||
|
set_rule(world.get_location('Ice Palace - Hammer Block Key Drop', player), lambda state: state.can_lift_rocks(player) and state.has('Hammer', player))
|
||||||
|
set_rule(world.get_location('Ice Palace - Map Chest', player), lambda state: state.can_lift_rocks(player) and state.has('Hammer', player))
|
||||||
|
set_rule(world.get_entrance('Ice Antechamber Hole', player), lambda state: state.can_lift_rocks(player) and state.has('Hammer', player))
|
||||||
|
# todo: ohko rules for spike room - could split into two regions instead of these, but can_take_damage is usually true
|
||||||
|
set_rule(world.get_entrance('Ice Spike Room WS', player), lambda state: state.world.can_take_damage or state.has('Hookshot', player) or state.has('Cape', player) or state.has('Cane of Byrna', player))
|
||||||
|
set_rule(world.get_entrance('Ice Spike Room Up Stairs', player), lambda state: state.world.can_take_damage or state.has('Hookshot', player) or state.has('Cape', player) or state.has('Cane of Byrna', player))
|
||||||
|
set_rule(world.get_entrance('Ice Spike Room Down Stairs', player), lambda state: state.world.can_take_damage or state.has('Hookshot', player) or state.has('Cape', player) or state.has('Cane of Byrna', player))
|
||||||
|
set_rule(world.get_location('Ice Palace - Spike Room', player), lambda state: state.world.can_take_damage or state.has('Hookshot', player) or state.has('Cape', player) or state.has('Cane of Byrna', player))
|
||||||
|
set_rule(world.get_location('Ice Palace - Freezor Chest', player), lambda state: state.can_melt_things(player))
|
||||||
|
set_rule(world.get_entrance('Ice Hookshot Ledge Path', player), lambda state: state.has('Hookshot', player))
|
||||||
|
set_rule(world.get_entrance('Ice Hookshot Balcony Path', player), lambda state: state.has('Hookshot', player))
|
||||||
|
set_rule(world.get_entrance('Ice Switch Room SE', player), lambda state: state.has('Cane of Somaria', player) or state.has('Convenient Block', player))
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Ice Palace - Boss', player))
|
set_defeat_dungeon_boss_rule(world.get_location('Ice Palace - Boss', player))
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Ice Palace - Prize', player))
|
set_defeat_dungeon_boss_rule(world.get_location('Ice Palace - Prize', player))
|
||||||
for location in ['Ice Palace - Big Chest', 'Ice Palace - Boss']:
|
|
||||||
forbid_item(world.get_location(location, player), 'Big Key (Ice Palace)', player)
|
|
||||||
|
|
||||||
set_rule(world.get_entrance('Misery Mire Entrance Gap', player), lambda state: (state.has_Boots(player) or state.has('Hookshot', player)) and (state.has_sword(player) or state.has('Fire Rod', player) or state.has('Ice Rod', player) or state.has('Hammer', player) or state.has('Cane of Somaria', player) or state.can_shoot_arrows(player))) # need to defeat wizzrobes, bombs don't work ...
|
set_rule(world.get_entrance('Mire Lobby Gap', player), lambda state: state.has_Boots(player) or state.has('Hookshot', player))
|
||||||
set_rule(world.get_location('Misery Mire - Big Chest', player), lambda state: state.has('Big Key (Misery Mire)', player))
|
set_rule(world.get_entrance('Mire Post-Gap Gap', player), lambda state: state.has_Boots(player) or state.has('Hookshot', player))
|
||||||
|
set_rule(world.get_entrance('Mire Falling Bridge WN', player), lambda state: state.has_Boots(player) or state.has('Hookshot', player)) # this is due to the fact the the door opposite is blocked
|
||||||
|
set_rule(world.get_entrance('Mire 2 NE', player), lambda state: state.has_sword(player) or state.has('Fire Rod', player) or state.has('Ice Rod', player) or state.has('Hammer', player) or state.has('Cane of Somaria', player) or state.can_shoot_arrows(player)) # need to defeat wizzrobes, bombs don't work ...
|
||||||
set_rule(world.get_location('Misery Mire - Spike Chest', player), lambda state: (state.world.can_take_damage and state.has_hearts(player, 4)) or state.has('Cane of Byrna', player) or state.has('Cape', player))
|
set_rule(world.get_location('Misery Mire - Spike Chest', player), lambda state: (state.world.can_take_damage and state.has_hearts(player, 4)) or state.has('Cane of Byrna', player) or state.has('Cape', player))
|
||||||
set_rule(world.get_entrance('Misery Mire Big Key Door', player), lambda state: state.has('Big Key (Misery Mire)', player))
|
set_rule(world.get_entrance('Mire Left Bridge Hook Path', player), lambda state: state.has('Hookshot', player))
|
||||||
# you can squander the free small key from the pot by opening the south door to the north west switch room, locking you out of accessing a color switch ...
|
set_rule(world.get_entrance('Mire Tile Room NW', player), lambda state: state.has_fire_source(player))
|
||||||
# big key gives backdoor access to that from the teleporter in the north west
|
set_rule(world.get_entrance('Mire Attic Hint Hole', player), lambda state: state.has_fire_source(player))
|
||||||
set_rule(world.get_location('Misery Mire - Map Chest', player), lambda state: state.has_key('Small Key (Misery Mire)', player, 1) or state.has('Big Key (Misery Mire)', player))
|
set_rule(world.get_entrance('Mire Dark Shooters SW', player), lambda state: state.has('Cane of Somaria', player))
|
||||||
# in addition, you can open the door to the map room before getting access to a color switch, so this is locked behing 2 small keys or the big key...
|
|
||||||
set_rule(world.get_location('Misery Mire - Main Lobby', player), lambda state: state.has_key('Small Key (Misery Mire)', player, 2) or state.has_key('Big Key (Misery Mire)', player))
|
|
||||||
# we can place a small key in the West wing iff it also contains/blocks the Big Key, as we cannot reach and softlock with the basement key door yet
|
|
||||||
set_rule(world.get_entrance('Misery Mire (West)', player), lambda state: state.has_key('Small Key (Misery Mire)', player, 2) if ((item_name(state, 'Misery Mire - Compass Chest', player) in [('Big Key (Misery Mire)', player)]) or
|
|
||||||
(item_name(state, 'Misery Mire - Big Key Chest', player) in [('Big Key (Misery Mire)', player)])) else state.has_key('Small Key (Misery Mire)', player, 3))
|
|
||||||
set_rule(world.get_location('Misery Mire - Compass Chest', player), lambda state: state.has_fire_source(player))
|
|
||||||
set_rule(world.get_location('Misery Mire - Big Key Chest', player), lambda state: state.has_fire_source(player))
|
|
||||||
set_rule(world.get_entrance('Misery Mire (Vitreous)', player), lambda state: state.has('Cane of Somaria', player))
|
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Misery Mire - Boss', player))
|
set_defeat_dungeon_boss_rule(world.get_location('Misery Mire - Boss', player))
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Misery Mire - Prize', player))
|
set_defeat_dungeon_boss_rule(world.get_location('Misery Mire - Prize', player))
|
||||||
for location in ['Misery Mire - Big Chest', 'Misery Mire - Boss']:
|
|
||||||
forbid_item(world.get_location(location, player), 'Big Key (Misery Mire)', player)
|
|
||||||
|
|
||||||
set_rule(world.get_entrance('Turtle Rock Entrance Gap', player), lambda state: state.has('Cane of Somaria', player))
|
set_rule(world.get_entrance('TR Main Lobby Gap', player), lambda state: state.has('Cane of Somaria', player))
|
||||||
set_rule(world.get_entrance('Turtle Rock Entrance Gap Reverse', player), lambda state: state.has('Cane of Somaria', player))
|
set_rule(world.get_entrance('TR Lobby Ledge Gap', player), lambda state: state.has('Cane of Somaria', player))
|
||||||
set_rule(world.get_location('Turtle Rock - Compass Chest', player), lambda state: state.has('Cane of Somaria', player)) # We could get here from the middle section without Cane as we don't cross the entrance gap!
|
set_rule(world.get_entrance('TR Hub SW', player), lambda state: state.has('Cane of Somaria', player))
|
||||||
set_rule(world.get_location('Turtle Rock - Roller Room - Left', player), lambda state: state.has('Cane of Somaria', player) and state.has('Fire Rod', player))
|
set_rule(world.get_entrance('TR Hub SE', player), lambda state: state.has('Cane of Somaria', player))
|
||||||
set_rule(world.get_location('Turtle Rock - Roller Room - Right', player), lambda state: state.has('Cane of Somaria', player) and state.has('Fire Rod', player))
|
set_rule(world.get_entrance('TR Hub ES', player), lambda state: state.has('Cane of Somaria', player))
|
||||||
set_rule(world.get_location('Turtle Rock - Big Chest', player), lambda state: state.has('Big Key (Turtle Rock)', player) and (state.has('Cane of Somaria', player) or state.has('Hookshot', player)))
|
set_rule(world.get_entrance('TR Hub EN', player), lambda state: state.has('Cane of Somaria', player))
|
||||||
set_rule(world.get_entrance('Turtle Rock (Big Chest) (North)', player), lambda state: state.has('Cane of Somaria', player) or state.has('Hookshot', player))
|
set_rule(world.get_entrance('TR Hub NW', player), lambda state: state.has('Cane of Somaria', player))
|
||||||
set_rule(world.get_entrance('Turtle Rock Big Key Door', player), lambda state: state.has('Big Key (Turtle Rock)', player))
|
set_rule(world.get_entrance('TR Hub NE', player), lambda state: state.has('Cane of Somaria', player))
|
||||||
set_rule(world.get_entrance('Turtle Rock (Dark Room) (North)', player), lambda state: state.has('Cane of Somaria', player))
|
set_rule(world.get_entrance('TR Torches NW', player), lambda state: state.has('Cane of Somaria', player) and state.has('Fire Rod', player))
|
||||||
set_rule(world.get_entrance('Turtle Rock (Dark Room) (South)', player), lambda state: state.has('Cane of Somaria', player))
|
set_rule(world.get_entrance('TR Big Chest Entrance Gap', player), lambda state: state.has('Cane of Somaria', player) or state.has('Hookshot', player))
|
||||||
|
set_rule(world.get_entrance('TR Big Chest Gap', player), lambda state: state.has('Cane of Somaria', player) or state.has('Hookshot', player))
|
||||||
|
set_rule(world.get_entrance('TR Dark Ride Up Stairs', player), lambda state: state.has('Cane of Somaria', player))
|
||||||
|
set_rule(world.get_entrance('TR Dark Ride SW', player), lambda state: state.has('Cane of Somaria', player))
|
||||||
|
set_rule(world.get_entrance('TR Crystal Maze Cane Path', player), lambda state: state.has('Cane of Somaria', player))
|
||||||
|
set_rule(world.get_entrance('TR Final Abyss South Stairs', player), lambda state: state.has('Cane of Somaria', player))
|
||||||
|
set_rule(world.get_entrance('TR Final Abyss NW', player), lambda state: state.has('Cane of Somaria', player))
|
||||||
set_rule(world.get_location('Turtle Rock - Eye Bridge - Bottom Left', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player))
|
set_rule(world.get_location('Turtle Rock - Eye Bridge - Bottom Left', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player))
|
||||||
set_rule(world.get_location('Turtle Rock - Eye Bridge - Bottom Right', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player))
|
set_rule(world.get_location('Turtle Rock - Eye Bridge - Bottom Right', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player))
|
||||||
set_rule(world.get_location('Turtle Rock - Eye Bridge - Top Left', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player))
|
set_rule(world.get_location('Turtle Rock - Eye Bridge - Top Left', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player))
|
||||||
set_rule(world.get_location('Turtle Rock - Eye Bridge - Top Right', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player))
|
set_rule(world.get_location('Turtle Rock - Eye Bridge - Top Right', player), lambda state: state.has('Cane of Byrna', player) or state.has('Cape', player) or state.has('Mirror Shield', player))
|
||||||
set_rule(world.get_entrance('Turtle Rock (Trinexx)', player), lambda state: state.has_key('Small Key (Turtle Rock)', player, 4) and state.has('Big Key (Turtle Rock)', player) and state.has('Cane of Somaria', player))
|
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Turtle Rock - Boss', player))
|
set_defeat_dungeon_boss_rule(world.get_location('Turtle Rock - Boss', player))
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Turtle Rock - Prize', player))
|
set_defeat_dungeon_boss_rule(world.get_location('Turtle Rock - Prize', player))
|
||||||
|
|
||||||
set_rule(world.get_entrance('Palace of Darkness Bonk Wall', player), lambda state: state.can_shoot_arrows(player))
|
|
||||||
set_rule(world.get_entrance('Palace of Darkness Hammer Peg Drop', player), lambda state: state.has('Hammer', player))
|
|
||||||
set_rule(world.get_entrance('Palace of Darkness Bridge Room', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 1)) # If we can reach any other small key door, we already have back door access to this area
|
|
||||||
set_rule(world.get_entrance('Palace of Darkness Big Key Door', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6) and state.has('Big Key (Palace of Darkness)', player) and state.can_shoot_arrows(player) and state.has('Hammer', player))
|
|
||||||
set_rule(world.get_entrance('Palace of Darkness (North)', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 4))
|
|
||||||
set_rule(world.get_location('Palace of Darkness - Big Chest', player), lambda state: state.has('Big Key (Palace of Darkness)', player))
|
|
||||||
|
|
||||||
set_rule(world.get_entrance('Palace of Darkness Big Key Chest Staircase', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6) or (item_name(state, 'Palace of Darkness - Big Key Chest', player) in [('Small Key (Palace of Darkness)', player)] and state.has_key('Small Key (Palace of Darkness)', player, 3)))
|
|
||||||
if world.accessibility[player] != 'locations':
|
|
||||||
set_always_allow(world.get_location('Palace of Darkness - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Palace of Darkness)' and item.player == player and state.has_key('Small Key (Palace of Darkness)', player, 5))
|
|
||||||
else:
|
|
||||||
forbid_item(world.get_location('Palace of Darkness - Big Key Chest', player), 'Small Key (Palace of Darkness)', player)
|
|
||||||
|
|
||||||
set_rule(world.get_entrance('Palace of Darkness Spike Statue Room Door', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6) or (item_name(state, 'Palace of Darkness - Harmless Hellway', player) in [('Small Key (Palace of Darkness)', player)] and state.has_key('Small Key (Palace of Darkness)', player, 4)))
|
|
||||||
if world.accessibility[player] != 'locations':
|
|
||||||
set_always_allow(world.get_location('Palace of Darkness - Harmless Hellway', player), lambda state, item: item.name == 'Small Key (Palace of Darkness)' and item.player == player and state.has_key('Small Key (Palace of Darkness)', player, 5))
|
|
||||||
else:
|
|
||||||
forbid_item(world.get_location('Palace of Darkness - Harmless Hellway', player), 'Small Key (Palace of Darkness)', player)
|
|
||||||
|
|
||||||
set_rule(world.get_entrance('Palace of Darkness Maze Door', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6))
|
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Boss', player))
|
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Prize', player))
|
|
||||||
|
|
||||||
# these key rules are conservative, you might be able to get away with more lenient rules
|
|
||||||
randomizer_room_chests = ['Ganons Tower - Randomizer Room - Top Left', 'Ganons Tower - Randomizer Room - Top Right', 'Ganons Tower - Randomizer Room - Bottom Left', 'Ganons Tower - Randomizer Room - Bottom Right']
|
|
||||||
compass_room_chests = ['Ganons Tower - Compass Room - Top Left', 'Ganons Tower - Compass Room - Top Right', 'Ganons Tower - Compass Room - Bottom Left', 'Ganons Tower - Compass Room - Bottom Right']
|
|
||||||
|
|
||||||
set_rule(world.get_location('Ganons Tower - Bob\'s Torch', player), lambda state: state.has_Boots(player))
|
set_rule(world.get_location('Ganons Tower - Bob\'s Torch', player), lambda state: state.has_Boots(player))
|
||||||
set_rule(world.get_entrance('Ganons Tower (Tile Room)', player), lambda state: state.has('Cane of Somaria', player))
|
set_rule(world.get_entrance('GT Hope Room EN', player), lambda state: state.has('Cane of Somaria', player))
|
||||||
set_rule(world.get_entrance('Ganons Tower (Hookshot Room)', player), lambda state: state.has('Hammer', player))
|
set_rule(world.get_entrance('GT Conveyor Cross WN', player), lambda state: state.has('Hammer', player))
|
||||||
|
set_rule(world.get_entrance('GT Conveyor Cross EN', player), lambda state: state.has('Hookshot', player))
|
||||||
|
set_rule(world.get_entrance('GT Speed Torch SE', player), lambda state: state.has('Fire Rod', player))
|
||||||
|
set_rule(world.get_entrance('GT Hookshot East-North Path', player), lambda state: state.has('Hookshot', player))
|
||||||
|
set_rule(world.get_entrance('GT Hookshot South-East Path', player), lambda state: state.has('Hookshot', player))
|
||||||
|
set_rule(world.get_entrance('GT Hookshot South-North Path', player), lambda state: state.has('Hookshot', player))
|
||||||
|
set_rule(world.get_entrance('GT Hookshot East-South Path', player), lambda state: state.has('Hookshot', player) or state.has_Boots(player))
|
||||||
|
set_rule(world.get_entrance('GT Hookshot North-East Path', player), lambda state: state.has('Hookshot', player) or state.has_Boots(player))
|
||||||
|
set_rule(world.get_entrance('GT Hookshot North-South Path', player), lambda state: state.has('Hookshot', player) or state.has_Boots(player))
|
||||||
|
set_rule(world.get_entrance('GT Firesnake Room Hook Path', player), lambda state: state.has('Hookshot', player))
|
||||||
|
# I am tempted to stick an invincibility rule for getting across falling bridge
|
||||||
|
set_rule(world.get_entrance('GT Ice Armos NE', player), lambda state: world.get_region('GT Ice Armos', player).dungeon.bosses['bottom'].can_defeat(state))
|
||||||
|
set_rule(world.get_entrance('GT Ice Armos WS', player), lambda state: world.get_region('GT Ice Armos', player).dungeon.bosses['bottom'].can_defeat(state))
|
||||||
|
|
||||||
set_rule(world.get_entrance('Ganons Tower (Map Room)', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 4) or (item_name(state, 'Ganons Tower - Map Chest', player) in [('Big Key (Ganons Tower)', player), ('Small Key (Ganons Tower)', player)] and state.has_key('Small Key (Ganons Tower)', player, 3)))
|
set_rule(world.get_entrance('GT Mimics 1 NW', player), lambda state: state.can_shoot_arrows(player))
|
||||||
if world.accessibility[player] != 'locations':
|
set_rule(world.get_entrance('GT Mimics 1 ES', player), lambda state: state.can_shoot_arrows(player))
|
||||||
set_always_allow(world.get_location('Ganons Tower - Map Chest', player), lambda state, item: item.name == 'Small Key (Ganons Tower)' and item.player == player and state.has_key('Small Key (Ganons Tower)', player, 3))
|
set_rule(world.get_entrance('GT Mimics 2 WS', player), lambda state: state.can_shoot_arrows(player))
|
||||||
else:
|
set_rule(world.get_entrance('GT Mimics 2 NE', player), lambda state: state.can_shoot_arrows(player))
|
||||||
forbid_item(world.get_location('Ganons Tower - Map Chest', player), 'Small Key (Ganons Tower)', player)
|
# consider access to refill room
|
||||||
|
# consider can_kill_most_things to gauntlet
|
||||||
# It is possible to need more than 2 keys to get through this entance if you spend keys elsewhere. We reflect this in the chest requirements.
|
set_rule(world.get_entrance('GT Lanmolas 2 ES', player), lambda state: world.get_region('GT Lanmolas 2', player).dungeon.bosses['middle'].can_defeat(state))
|
||||||
# However we need to leave these at the lower values to derive that with 3 keys it is always possible to reach Bob and Ice Armos.
|
set_rule(world.get_entrance('GT Lanmolas 2 NW', player), lambda state: world.get_region('GT Lanmolas 2', player).dungeon.bosses['middle'].can_defeat(state))
|
||||||
set_rule(world.get_entrance('Ganons Tower (Double Switch Room)', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 2))
|
set_rule(world.get_entrance('GT Torch Cross ES', player), lambda state: state.has_fire_source(player))
|
||||||
# It is possible to need more than 3 keys ....
|
set_rule(world.get_entrance('GT Falling Torches NE', player), lambda state: state.has_fire_source(player))
|
||||||
set_rule(world.get_entrance('Ganons Tower (Firesnake Room)', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3))
|
set_rule(world.get_entrance('GT Moldorm Gap', player), lambda state: state.has('Hookshot', player) and world.get_region('GT Moldorm', player).dungeon.bosses['top'].can_defeat(state))
|
||||||
|
|
||||||
#The actual requirements for these rooms to avoid key-lock
|
|
||||||
set_rule(world.get_location('Ganons Tower - Firesnake Room', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3) or (item_in_locations(state, 'Big Key (Ganons Tower)', player, zip(randomizer_room_chests, [player] * len(randomizer_room_chests))) and state.has_key('Small Key (Ganons Tower)', player, 2)))
|
|
||||||
for location in randomizer_room_chests:
|
|
||||||
set_rule(world.get_location(location, player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 4) or (item_in_locations(state, 'Big Key (Ganons Tower)', player, zip(randomizer_room_chests, [player] * len(randomizer_room_chests))) and state.has_key('Small Key (Ganons Tower)', player, 3)))
|
|
||||||
|
|
||||||
# Once again it is possible to need more than 3 keys...
|
|
||||||
set_rule(world.get_entrance('Ganons Tower (Tile Room) Key Door', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3) and state.has('Fire Rod', player))
|
|
||||||
# Actual requirements
|
|
||||||
for location in compass_room_chests:
|
|
||||||
set_rule(world.get_location(location, player), lambda state: state.has('Fire Rod', player) and (state.has_key('Small Key (Ganons Tower)', player, 4) or (item_in_locations(state, 'Big Key (Ganons Tower)', player, zip(compass_room_chests, [player] * len(compass_room_chests))) and state.has_key('Small Key (Ganons Tower)', player, 3))))
|
|
||||||
|
|
||||||
set_rule(world.get_location('Ganons Tower - Big Chest', player), lambda state: state.has('Big Key (Ganons Tower)', player))
|
|
||||||
|
|
||||||
set_rule(world.get_location('Ganons Tower - Big Key Room - Left', player), lambda state: world.get_location('Ganons Tower - Big Key Room - Left', player).parent_region.dungeon.bosses['bottom'].can_defeat(state))
|
|
||||||
set_rule(world.get_location('Ganons Tower - Big Key Chest', player), lambda state: world.get_location('Ganons Tower - Big Key Chest', player).parent_region.dungeon.bosses['bottom'].can_defeat(state))
|
|
||||||
set_rule(world.get_location('Ganons Tower - Big Key Room - Right', player), lambda state: world.get_location('Ganons Tower - Big Key Room - Right', player).parent_region.dungeon.bosses['bottom'].can_defeat(state))
|
|
||||||
|
|
||||||
set_rule(world.get_entrance('Ganons Tower Big Key Door', player), lambda state: state.has('Big Key (Ganons Tower)', player) and state.can_shoot_arrows(player))
|
|
||||||
set_rule(world.get_entrance('Ganons Tower Torch Rooms', player), lambda state: state.has_fire_source(player) and world.get_entrance('Ganons Tower Torch Rooms', player).parent_region.dungeon.bosses['middle'].can_defeat(state))
|
|
||||||
set_rule(world.get_location('Ganons Tower - Pre-Moldorm Chest', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 3))
|
|
||||||
set_rule(world.get_entrance('Ganons Tower Moldorm Door', player), lambda state: state.has_key('Small Key (Ganons Tower)', player, 4))
|
|
||||||
set_rule(world.get_entrance('Ganons Tower Moldorm Gap', player), lambda state: state.has('Hookshot', player) and world.get_entrance('Ganons Tower Moldorm Gap', player).parent_region.dungeon.bosses['top'].can_defeat(state))
|
|
||||||
set_defeat_dungeon_boss_rule(world.get_location('Agahnim 2', player))
|
set_defeat_dungeon_boss_rule(world.get_location('Agahnim 2', player))
|
||||||
for location in ['Ganons Tower - Big Chest', 'Ganons Tower - Mini Helmasaur Room - Left', 'Ganons Tower - Mini Helmasaur Room - Right',
|
|
||||||
'Ganons Tower - Pre-Moldorm Chest', 'Ganons Tower - Validation Chest']:
|
|
||||||
forbid_item(world.get_location(location, player), 'Big Key (Ganons Tower)', player)
|
|
||||||
|
|
||||||
|
add_key_logic_rules(world, player)
|
||||||
|
# End of door rando rules.
|
||||||
|
|
||||||
|
add_rule(world.get_location('Sunken Treasure', player), lambda state: state.has('Open Floodgate', player))
|
||||||
set_rule(world.get_location('Ganon', player), lambda state: state.has_beam_sword(player) and state.has_fire_source(player) and state.has_crystals(world.crystals_needed_for_ganon[player], player)
|
set_rule(world.get_location('Ganon', player), lambda state: state.has_beam_sword(player) and state.has_fire_source(player) and state.has_crystals(world.crystals_needed_for_ganon[player], player)
|
||||||
and (state.has('Tempered Sword', player) or state.has('Golden Sword', player) or (state.has('Silver Arrows', player) and state.can_shoot_arrows(player)) or state.has('Lamp', player) or state.can_extend_magic(player, 12))) # need to light torch a sufficient amount of times
|
and (state.has('Tempered Sword', player) or state.has('Golden Sword', player) or (state.has('Silver Arrows', player) and state.can_shoot_arrows(player)) or state.has('Lamp', player) or state.can_extend_magic(player, 12))) # need to light torch a sufficient amount of times
|
||||||
set_rule(world.get_entrance('Ganon Drop', player), lambda state: state.has_beam_sword(player)) # need to damage ganon to get tiles to drop
|
set_rule(world.get_entrance('Ganon Drop', player), lambda state: state.has_beam_sword(player)) # need to damage ganon to get tiles to drop
|
||||||
@@ -457,10 +436,9 @@ def default_rules(world, player):
|
|||||||
if world.swords[player] == 'swordless':
|
if world.swords[player] == 'swordless':
|
||||||
swordless_rules(world, player)
|
swordless_rules(world, player)
|
||||||
|
|
||||||
set_trock_key_rules(world, player)
|
|
||||||
|
|
||||||
set_rule(world.get_entrance('Ganons Tower', player), lambda state: state.has_crystals(world.crystals_needed_for_gt[player], player))
|
set_rule(world.get_entrance('Ganons Tower', player), lambda state: state.has_crystals(world.crystals_needed_for_gt[player], player))
|
||||||
|
|
||||||
|
|
||||||
def inverted_rules(world, player):
|
def inverted_rules(world, player):
|
||||||
# s&q regions. link's house entrance is set to true so the filler knows the chest inside can always be reached
|
# s&q regions. link's house entrance is set to true so the filler knows the chest inside can always be reached
|
||||||
world.get_region('Inverted Links House', player).can_reach_private = lambda state: True
|
world.get_region('Inverted Links House', player).can_reach_private = lambda state: True
|
||||||
@@ -634,14 +612,14 @@ def no_glitches_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Dark Lake Hylia Ledge Drop', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Dark Lake Hylia Ledge Drop', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('East Dark World Pier', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('East Dark World Pier', player), lambda state: state.has('Flippers', player))
|
||||||
|
|
||||||
add_rule(world.get_entrance('Ganons Tower (Hookshot Room)', player), lambda state: state.has('Hookshot', player) or state.has_Boots(player))
|
# todo: move some dungeon rules to no glictes logic - see these for examples
|
||||||
add_rule(world.get_entrance('Ganons Tower (Double Switch Room)', player), lambda state: state.has('Hookshot', player))
|
# add_rule(world.get_entrance('Ganons Tower (Hookshot Room)', player), lambda state: state.has('Hookshot', player) or state.has_Boots(player))
|
||||||
DMs_room_chests = ['Ganons Tower - DMs Room - Top Left', 'Ganons Tower - DMs Room - Top Right', 'Ganons Tower - DMs Room - Bottom Left', 'Ganons Tower - DMs Room - Bottom Right']
|
# add_rule(world.get_entrance('Ganons Tower (Double Switch Room)', player), lambda state: state.has('Hookshot', player))
|
||||||
for location in DMs_room_chests:
|
# DMs_room_chests = ['Ganons Tower - DMs Room - Top Left', 'Ganons Tower - DMs Room - Top Right', 'Ganons Tower - DMs Room - Bottom Left', 'Ganons Tower - DMs Room - Bottom Right']
|
||||||
add_rule(world.get_location(location, player), lambda state: state.has('Hookshot', player))
|
# for location in DMs_room_chests:
|
||||||
|
# add_rule(world.get_location(location, player), lambda state: state.has('Hookshot', player))
|
||||||
set_rule(world.get_entrance('Paradox Cave Push Block Reverse', player), lambda state: False) # no glitches does not require block override
|
set_rule(world.get_entrance('Paradox Cave Push Block Reverse', player), lambda state: False) # no glitches does not require block override
|
||||||
set_rule(world.get_entrance('Paradox Cave Bomb Jump', player), lambda state: False)
|
set_rule(world.get_entrance('Paradox Cave Bomb Jump', player), lambda state: False)
|
||||||
set_rule(world.get_entrance('Skull Woods First Section Bomb Jump', player), lambda state: False)
|
|
||||||
|
|
||||||
# Light cones in standard depend on which world we actually are in, not which one the location would normally be
|
# Light cones in standard depend on which world we actually are in, not which one the location would normally be
|
||||||
# We add Lamp requirements only to those locations which lie in the dark world (or everything if open
|
# We add Lamp requirements only to those locations which lie in the dark world (or everything if open
|
||||||
@@ -662,16 +640,64 @@ def no_glitches_rules(world, player):
|
|||||||
if (not world.dark_world_light_cone and check_is_dark_world(world.get_region(region, player))) or (not world.light_world_light_cone and not check_is_dark_world(world.get_region(region, player))):
|
if (not world.dark_world_light_cone and check_is_dark_world(world.get_region(region, player))) or (not world.light_world_light_cone and not check_is_dark_world(world.get_region(region, player))):
|
||||||
add_lamp_requirement(spot, player)
|
add_lamp_requirement(spot, player)
|
||||||
|
|
||||||
add_conditional_lamp('Misery Mire (Vitreous)', 'Misery Mire (Entrance)', 'Entrance')
|
add_conditional_lamp('TR Dark Ride Up Stairs', 'TR Dark Ride', 'Entrance')
|
||||||
add_conditional_lamp('Turtle Rock (Dark Room) (North)', 'Turtle Rock (Entrance)', 'Entrance')
|
add_conditional_lamp('TR Dark Ride SW', 'TR Dark Ride', 'Entrance')
|
||||||
add_conditional_lamp('Turtle Rock (Dark Room) (South)', 'Turtle Rock (Entrance)', 'Entrance')
|
add_conditional_lamp('Mire Dark Shooters Up Stairs', 'Mire Dark Shooters', 'Entrance')
|
||||||
add_conditional_lamp('Palace of Darkness Big Key Door', 'Palace of Darkness (Entrance)', 'Entrance')
|
add_conditional_lamp('Mire Dark Shooters SW', 'Mire Dark Shooters', 'Entrance')
|
||||||
add_conditional_lamp('Palace of Darkness Maze Door', 'Palace of Darkness (Entrance)', 'Entrance')
|
add_conditional_lamp('Mire Dark Shooters SE', 'Mire Dark Shooters', 'Entrance')
|
||||||
add_conditional_lamp('Palace of Darkness - Dark Basement - Left', 'Palace of Darkness (Entrance)', 'Location')
|
add_conditional_lamp('Mire Key Rupees NE', 'Mire Key Rupees', 'Entrance')
|
||||||
add_conditional_lamp('Palace of Darkness - Dark Basement - Right', 'Palace of Darkness (Entrance)', 'Location')
|
add_conditional_lamp('Mire Block X NW', 'Mire Block X', 'Entrance')
|
||||||
|
add_conditional_lamp('Mire Block X WS', 'Mire Block X', 'Entrance')
|
||||||
|
add_conditional_lamp('Mire Tall Dark and Roomy ES', 'Mire Tall Dark and Roomy', 'Entrance')
|
||||||
|
add_conditional_lamp('Mire Tall Dark and Roomy WS', 'Mire Tall Dark and Roomy', 'Entrance')
|
||||||
|
add_conditional_lamp('Mire Tall Dark and Roomy WN', 'Mire Tall Dark and Roomy', 'Entrance')
|
||||||
|
add_conditional_lamp('Mire Crystal Right ES', 'Mire Crystal Right', 'Entrance')
|
||||||
|
add_conditional_lamp('Mire Crystal Mid NW', 'Mire Crystal Mid', 'Entrance')
|
||||||
|
add_conditional_lamp('Mire Crystal Left WS', 'Mire Crystal Left', 'Entrance')
|
||||||
|
add_conditional_lamp('Mire Crystal Top SW', 'Mire Crystal Top', 'Entrance')
|
||||||
|
add_conditional_lamp('Mire Shooter Rupees EN', 'Mire Shooter Rupees', 'Entrance')
|
||||||
|
add_conditional_lamp('PoD Dark Alley NE', 'PoD Dark Alley', 'Entrance')
|
||||||
|
add_conditional_lamp('PoD Callback WS', 'PoD Callback', 'Entrance')
|
||||||
|
add_conditional_lamp('PoD Callback Warp', 'PoD Callback', 'Entrance')
|
||||||
|
add_conditional_lamp('PoD Turtle Party ES', 'PoD Turtle Party', 'Entrance')
|
||||||
|
add_conditional_lamp('PoD Turtle Party NW', 'PoD Turtle Party', 'Entrance')
|
||||||
|
add_conditional_lamp('PoD Lonely Turtle SW', 'PoD Lonely Turtle', 'Entrance')
|
||||||
|
add_conditional_lamp('PoD Lonely Turtle EN', 'PoD Lonely Turtle', 'Entrance')
|
||||||
|
add_conditional_lamp('PoD Dark Pegs Up Ladder', 'PoD Dark Pegs', 'Entrance')
|
||||||
|
add_conditional_lamp('PoD Dark Pegs WN', 'PoD Dark Pegs', 'Entrance')
|
||||||
|
add_conditional_lamp('PoD Dark Basement W Up Stairs', 'PoD Dark Basement', 'Entrance')
|
||||||
|
add_conditional_lamp('PoD Dark Basement E Up Stairs', 'PoD Dark Basement', 'Entrance')
|
||||||
|
add_conditional_lamp('PoD Dark Maze EN', 'PoD Dark Maze', 'Entrance')
|
||||||
|
add_conditional_lamp('PoD Dark Maze E', 'PoD Dark Maze', 'Entrance')
|
||||||
|
add_conditional_lamp('Palace of Darkness - Dark Basement - Left', 'PoD Dark Basement', 'Location')
|
||||||
|
add_conditional_lamp('Palace of Darkness - Dark Basement - Right', 'PoD Dark Basement', 'Location')
|
||||||
|
add_conditional_lamp('Palace of Darkness - Dark Maze - Top', 'PoD Dark Maze', 'Location')
|
||||||
|
add_conditional_lamp('Palace of Darkness - Dark Maze - Bottom', 'PoD Dark Maze', 'Location')
|
||||||
|
add_conditional_lamp('Eastern Dark Square NW', 'Eastern Dark Square', 'Entrance')
|
||||||
|
add_conditional_lamp('Eastern Dark Square Key Door WN', 'Eastern Dark Square', 'Entrance')
|
||||||
|
add_conditional_lamp('Eastern Dark Square EN', 'Eastern Dark Square', 'Entrance')
|
||||||
|
add_conditional_lamp('Eastern Dark Pots WN', 'Eastern Dark Pots', 'Entrance')
|
||||||
|
add_conditional_lamp('Eastern Darkness S', 'Eastern Darkness', 'Entrance')
|
||||||
|
add_conditional_lamp('Eastern Darkness Up Stairs', 'Eastern Darkness', 'Entrance')
|
||||||
|
add_conditional_lamp('Eastern Darkness NE', 'Eastern Darkness', 'Entrance')
|
||||||
|
add_conditional_lamp('Eastern Rupees SE', 'Eastern Rupees', 'Entrance')
|
||||||
|
add_conditional_lamp('Eastern Palace - Dark Square Pot Key', 'Eastern Dark Square', 'Location')
|
||||||
|
add_conditional_lamp('Eastern Palace - Dark Eyegore Key Drop', 'Eastern Darkness', 'Location')
|
||||||
if world.mode[player] != 'inverted':
|
if world.mode[player] != 'inverted':
|
||||||
add_conditional_lamp('Agahnim 1', 'Agahnims Tower', 'Entrance')
|
add_conditional_lamp('Tower Lone Statue Down Stairs', 'Tower Lone Statue', 'Entrance')
|
||||||
add_conditional_lamp('Castle Tower - Dark Maze', 'Agahnims Tower', 'Location')
|
add_conditional_lamp('Tower Lone Statue WN', 'Tower Lone Statue', 'Entrance')
|
||||||
|
add_conditional_lamp('Tower Dark Maze EN', 'Tower Dark Maze', 'Entrance')
|
||||||
|
add_conditional_lamp('Tower Dark Maze ES', 'Tower Dark Maze', 'Entrance')
|
||||||
|
add_conditional_lamp('Tower Dark Chargers WS', 'Tower Dark Chargers', 'Entrance')
|
||||||
|
add_conditional_lamp('Tower Dark Chargers Up Stairs', 'Tower Dark Chargers', 'Entrance')
|
||||||
|
add_conditional_lamp('Tower Dual Statues Down Stairs', 'Tower Dual Statues', 'Entrance')
|
||||||
|
add_conditional_lamp('Tower Dual Statues WS', 'Tower Dual Statues', 'Entrance')
|
||||||
|
add_conditional_lamp('Tower Dark Pits ES', 'Tower Dark Pits', 'Entrance')
|
||||||
|
add_conditional_lamp('Tower Dark Pits EN', 'Tower Dark Pits', 'Entrance')
|
||||||
|
add_conditional_lamp('Tower Dark Archers WN', 'Tower Dark Archers', 'Entrance')
|
||||||
|
add_conditional_lamp('Tower Dark Archers Up Stairs', 'Tower Dark Archers', 'Entrance')
|
||||||
|
add_conditional_lamp('Castle Tower - Dark Maze', 'Tower Dark Maze', 'Location')
|
||||||
|
add_conditional_lamp('Castle Tower - Dark Archer Key Drop', 'Tower Dark Archers', 'Location')
|
||||||
else:
|
else:
|
||||||
add_conditional_lamp('Agahnim 1', 'Inverted Agahnims Tower', 'Entrance')
|
add_conditional_lamp('Agahnim 1', 'Inverted Agahnims Tower', 'Entrance')
|
||||||
add_conditional_lamp('Castle Tower - Dark Maze', 'Inverted Agahnims Tower', 'Location')
|
add_conditional_lamp('Castle Tower - Dark Maze', 'Inverted Agahnims Tower', 'Location')
|
||||||
@@ -681,14 +707,19 @@ def no_glitches_rules(world, player):
|
|||||||
add_conditional_lamp('Death Mountain Return Cave Exit (West)', 'Death Mountain Return Cave', 'Entrance')
|
add_conditional_lamp('Death Mountain Return Cave Exit (West)', 'Death Mountain Return Cave', 'Entrance')
|
||||||
add_conditional_lamp('Old Man House Front to Back', 'Old Man House', 'Entrance')
|
add_conditional_lamp('Old Man House Front to Back', 'Old Man House', 'Entrance')
|
||||||
add_conditional_lamp('Old Man House Back to Front', 'Old Man House', 'Entrance')
|
add_conditional_lamp('Old Man House Back to Front', 'Old Man House', 'Entrance')
|
||||||
add_conditional_lamp('Eastern Palace - Big Key Chest', 'Eastern Palace', 'Location')
|
|
||||||
add_conditional_lamp('Eastern Palace - Boss', 'Eastern Palace', 'Location')
|
|
||||||
add_conditional_lamp('Eastern Palace - Prize', 'Eastern Palace', 'Location')
|
|
||||||
|
|
||||||
if not world.sewer_light_cone[player]:
|
if not world.sewer_light_cone[player]:
|
||||||
add_lamp_requirement(world.get_location('Sewers - Dark Cross', player), player)
|
add_lamp_requirement(world.get_location('Sewers - Dark Cross', player), player)
|
||||||
add_lamp_requirement(world.get_entrance('Sewers Back Door', player), player)
|
add_lamp_requirement(world.get_entrance('Sewers Behind Tapestry S', player), player)
|
||||||
add_lamp_requirement(world.get_entrance('Throne Room', player), player)
|
add_lamp_requirement(world.get_entrance('Sewers Behind Tapestry Down Stairs', player), player)
|
||||||
|
add_lamp_requirement(world.get_entrance('Sewers Rope Room Up Stairs', player), player)
|
||||||
|
add_lamp_requirement(world.get_entrance('Sewers Rope Room North Stairs', player), player)
|
||||||
|
add_lamp_requirement(world.get_entrance('Sewers Dark Cross South Stairs', player), player)
|
||||||
|
add_lamp_requirement(world.get_entrance('Sewers Dark Cross Key Door N', player), player)
|
||||||
|
add_lamp_requirement(world.get_entrance('Sewers Dark Cross Key Door S', player), player)
|
||||||
|
add_lamp_requirement(world.get_entrance('Sewers Water W', player), player)
|
||||||
|
add_lamp_requirement(world.get_entrance('Sewers Key Rat E', player), player)
|
||||||
|
add_lamp_requirement(world.get_entrance('Sewers Key Rat Key Door N', player), player)
|
||||||
|
|
||||||
|
|
||||||
def open_rules(world, player):
|
def open_rules(world, player):
|
||||||
@@ -699,10 +730,12 @@ def open_rules(world, player):
|
|||||||
|
|
||||||
def swordless_rules(world, player):
|
def swordless_rules(world, player):
|
||||||
|
|
||||||
set_rule(world.get_entrance('Agahnim 1', player), lambda state: (state.has('Hammer', player) or state.has('Fire Rod', player) or state.can_shoot_arrows(player) or state.has('Cane of Somaria', player)) and state.has_key('Small Key (Agahnims Tower)', player, 2))
|
set_rule(world.get_entrance('Tower Altar NW', player), lambda state: True)
|
||||||
|
set_rule(world.get_entrance('Skull Vines NW', player), lambda state: True)
|
||||||
|
set_rule(world.get_entrance('Ice Lobby WS', player), lambda state: state.has('Fire Rod', player) or state.has('Bombos', player))
|
||||||
|
set_rule(world.get_location('Ice Palace - Freezor Chest', player), lambda state: state.has('Fire Rod', player) or state.has('Bombos', player))
|
||||||
|
|
||||||
set_rule(world.get_location('Ether Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has('Hammer', player))
|
set_rule(world.get_location('Ether Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has('Hammer', player))
|
||||||
set_rule(world.get_entrance('Skull Woods Torch Room', player), lambda state: state.has_key('Small Key (Skull Woods)', player, 3) and state.has('Fire Rod', player)) # no curtain
|
|
||||||
set_rule(world.get_entrance('Ice Palace Entrance Room', player), lambda state: state.has('Fire Rod', player) or state.has('Bombos', player)) #in swordless mode bombos pads are present in the relevant parts of ice palace
|
|
||||||
set_rule(world.get_location('Ganon', player), lambda state: state.has('Hammer', player) and state.has_fire_source(player) and state.has('Silver Arrows', player) and state.can_shoot_arrows(player) and state.has_crystals(world.crystals_needed_for_ganon[player], player))
|
set_rule(world.get_location('Ganon', player), lambda state: state.has('Hammer', player) and state.has_fire_source(player) and state.has('Silver Arrows', player) and state.can_shoot_arrows(player) and state.has_crystals(world.crystals_needed_for_ganon[player], player))
|
||||||
set_rule(world.get_entrance('Ganon Drop', player), lambda state: state.has('Hammer', player)) # need to damage ganon to get tiles to drop
|
set_rule(world.get_entrance('Ganon Drop', player), lambda state: state.has('Hammer', player)) # need to damage ganon to get tiles to drop
|
||||||
|
|
||||||
@@ -719,10 +752,32 @@ def swordless_rules(world, player):
|
|||||||
|
|
||||||
|
|
||||||
def standard_rules(world, player):
|
def standard_rules(world, player):
|
||||||
|
# add_rule(world.get_entrance('Sewers Door', player), lambda state: state.can_kill_most_things(player))
|
||||||
|
|
||||||
set_rule(world.get_entrance('Hyrule Castle Exit (East)', player), lambda state: state.can_reach('Sanctuary', 'Region', player))
|
set_rule(world.get_entrance('Hyrule Castle Exit (East)', player), lambda state: state.can_reach('Sanctuary', 'Region', player))
|
||||||
set_rule(world.get_entrance('Hyrule Castle Exit (West)', player), lambda state: state.can_reach('Sanctuary', 'Region', player))
|
set_rule(world.get_entrance('Hyrule Castle Exit (West)', player), lambda state: state.can_reach('Sanctuary', 'Region', player))
|
||||||
|
|
||||||
|
|
||||||
|
def uncle_item_rule(item):
|
||||||
|
copy_state = CollectionState(world)
|
||||||
|
copy_state.collect(item)
|
||||||
|
copy_state.sweep_for_events()
|
||||||
|
return copy_state.can_reach('Sanctuary', 'Region', player)
|
||||||
|
|
||||||
|
add_item_rule(world.get_location('Link\'s Uncle', player), uncle_item_rule)
|
||||||
|
|
||||||
|
# easiest way to enforce key placement not relevant for open
|
||||||
|
set_rule(world.get_location('Sewers - Dark Cross', player), lambda state: state.can_kill_most_things(player))
|
||||||
|
|
||||||
|
set_rule(world.get_location('Hyrule Castle - Boomerang Chest', player), lambda state: state.can_kill_most_things(player))
|
||||||
|
set_rule(world.get_location('Hyrule Castle - Zelda\'s Chest', player), lambda state: state.can_kill_most_things(player))
|
||||||
|
|
||||||
|
set_rule(world.get_location('Hyrule Castle - Map Guard Key Drop', player), lambda state: state.can_kill_most_things(player))
|
||||||
|
set_rule(world.get_location('Hyrule Castle - Boomerang Guard Key Drop', player), lambda state: state.can_kill_most_things(player))
|
||||||
|
set_rule(world.get_location('Hyrule Castle - Key Rat Key Drop', player), lambda state: state.can_kill_most_things(player))
|
||||||
|
set_rule(world.get_entrance('Hyrule Dungeon Armory S', player), lambda state: state.can_kill_most_things(player))
|
||||||
|
|
||||||
|
|
||||||
def set_trock_key_rules(world, player):
|
def set_trock_key_rules(world, player):
|
||||||
|
|
||||||
|
|
||||||
@@ -1233,8 +1288,13 @@ def set_bunny_rules(world, player):
|
|||||||
|
|
||||||
# regions for the exits of multi-entrace caves/drops that bunny cannot pass
|
# regions for the exits of multi-entrace caves/drops that bunny cannot pass
|
||||||
# Note spiral cave may be technically passible, but it would be too absurd to require since OHKO mode is a thing.
|
# Note spiral cave may be technically passible, but it would be too absurd to require since OHKO mode is a thing.
|
||||||
bunny_impassable_caves = ['Bumper Cave', 'Two Brothers House', 'Hookshot Cave', 'Skull Woods First Section (Right)', 'Skull Woods First Section (Left)', 'Skull Woods First Section (Top)', 'Turtle Rock (Entrance)', 'Turtle Rock (Second Section)', 'Turtle Rock (Big Chest)', 'Skull Woods Second Section (Drop)',
|
bunny_impassable_caves = ['Bumper Cave', 'Two Brothers House', 'Hookshot Cave',
|
||||||
'Turtle Rock (Eye Bridge)', 'Sewers', 'Pyramid', 'Spiral Cave (Top)', 'Desert Palace Main (Inner)', 'Fairy Ascension Cave (Drop)']
|
'Pyramid', 'Spiral Cave (Top)', 'Fairy Ascension Cave (Drop)']
|
||||||
|
# todo: bunny impassable caves
|
||||||
|
# sewers drop may or may not be - maybe just new terminology
|
||||||
|
# desert pots are impassible by bunny - need rules for those transitions
|
||||||
|
# skull woods drops tend to soft lock bunny
|
||||||
|
# tr too - dark ride, chest gap, entrance gap, pots in lazy eyes, etc
|
||||||
|
|
||||||
bunny_accessible_locations = ['Link\'s Uncle', 'Sahasrahla', 'Sick Kid', 'Lost Woods Hideout', 'Lumberjack Tree', 'Checkerboard Cave', 'Potion Shop', 'Spectacle Rock Cave', 'Pyramid', 'Hype Cave - Generous Guy', 'Peg Cave', 'Bumper Cave Ledge', 'Dark Blacksmith Ruins']
|
bunny_accessible_locations = ['Link\'s Uncle', 'Sahasrahla', 'Sick Kid', 'Lost Woods Hideout', 'Lumberjack Tree', 'Checkerboard Cave', 'Potion Shop', 'Spectacle Rock Cave', 'Pyramid', 'Hype Cave - Generous Guy', 'Peg Cave', 'Bumper Cave Ledge', 'Dark Blacksmith Ruins']
|
||||||
|
|
||||||
@@ -1372,3 +1432,55 @@ def set_inverted_bunny_rules(world, player):
|
|||||||
add_rule(location, get_rule_to_add(location.parent_region))
|
add_rule(location, get_rule_to_add(location.parent_region))
|
||||||
|
|
||||||
|
|
||||||
|
def add_key_logic_rules(world, player):
|
||||||
|
key_logic = world.key_logic[player]
|
||||||
|
for d_name, d_logic in key_logic.items():
|
||||||
|
for door_name, keys in d_logic.door_rules.items():
|
||||||
|
add_rule(world.get_entrance(door_name, player), create_advanced_key_rule(d_logic, player, keys))
|
||||||
|
for location in d_logic.bk_restricted:
|
||||||
|
if location.name not in key_only_locations.keys():
|
||||||
|
forbid_item(location, d_logic.bk_name, player)
|
||||||
|
for location in d_logic.sm_restricted:
|
||||||
|
forbid_item(location, d_logic.small_key_name, player)
|
||||||
|
for door in d_logic.bk_doors:
|
||||||
|
add_rule(world.get_entrance(door.name, player), create_rule(d_logic.bk_name, player))
|
||||||
|
for chest in d_logic.bk_chests:
|
||||||
|
add_rule(world.get_location(chest.name, player), create_rule(d_logic.bk_name, player))
|
||||||
|
|
||||||
|
|
||||||
|
def create_rule(item_name, player):
|
||||||
|
return lambda state: state.has(item_name, player)
|
||||||
|
|
||||||
|
|
||||||
|
def create_key_rule(small_key_name, player, keys):
|
||||||
|
return lambda state: state.has_key(small_key_name, player, keys)
|
||||||
|
|
||||||
|
|
||||||
|
def create_key_rule_allow_small(small_key_name, player, keys, location):
|
||||||
|
loc = location.name
|
||||||
|
return lambda state: state.has_key(small_key_name, player, keys) or (item_name(state, loc, player) in [(small_key_name, player)] and state.has_key(small_key_name, player, keys-1))
|
||||||
|
|
||||||
|
|
||||||
|
def create_key_rule_bk_exception(small_key_name, big_key_name, player, keys, bk_keys, bk_locs):
|
||||||
|
chest_names = [x.name for x in bk_locs]
|
||||||
|
return lambda state: state.has_key(small_key_name, player, keys) or (item_in_locations(state, big_key_name, player, zip(chest_names, [player] * len(chest_names))) and state.has_key(small_key_name, player, bk_keys))
|
||||||
|
|
||||||
|
|
||||||
|
def create_key_rule_bk_exception_or_allow(small_key_name, big_key_name, player, keys, location, bk_keys, bk_locs):
|
||||||
|
loc = location.name
|
||||||
|
chest_names = [x.name for x in bk_locs]
|
||||||
|
return lambda state: state.has_key(small_key_name, player, keys) or (item_name(state, loc, player) in [(small_key_name, player)] and state.has_key(small_key_name, player, keys-1)) or (item_in_locations(state, big_key_name, player, zip(chest_names, [player] * len(chest_names))) and state.has_key(small_key_name, player, bk_keys))
|
||||||
|
|
||||||
|
|
||||||
|
def create_advanced_key_rule(key_logic, player, rule):
|
||||||
|
if not rule.allow_small and rule.alternate_small_key is None:
|
||||||
|
return create_key_rule(key_logic.small_key_name, player, rule.small_key_num)
|
||||||
|
if rule.allow_small and rule.alternate_small_key is None:
|
||||||
|
return create_key_rule_allow_small(key_logic.small_key_name, player, rule.small_key_num, rule.small_location)
|
||||||
|
if not rule.allow_small and rule.alternate_small_key is not None:
|
||||||
|
return create_key_rule_bk_exception(key_logic.small_key_name, key_logic.bk_name, player, rule.small_key_num,
|
||||||
|
rule.alternate_small_key, rule.alternate_big_key_loc)
|
||||||
|
if rule.allow_small and rule.alternate_small_key is not None:
|
||||||
|
return create_key_rule_bk_exception_or_allow(key_logic.small_key_name, key_logic.bk_name, player,
|
||||||
|
rule.small_key_num, rule.small_location, rule.alternate_small_key,
|
||||||
|
rule.alternate_big_key_loc)
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
## Door Tables ##
|
||||||
|
|
||||||
|
normal_offset_table = {
|
||||||
|
0x01: 0x01, 0x02: 0x02, 0x04: 0x03, 0x06: 0x04, 0x0d: 0x05, 0x11: 0x06, 0x12: 0x07, 0x13: 0x08,
|
||||||
|
0x14: 0x09, 0x15: 0x0A, 0x16: 0x0B, 0x19: 0x0C, 0x1a: 0x0D, 0x1b: 0x0E, 0x1d: 0x0F, 0x1e: 0x10,
|
||||||
|
0x1f: 0x11, 0x20: 0x12, 0x21: 0x13, 0x22: 0x14, 0x23: 0x15, 0x24: 0x16, 0x26: 0x17, 0x2a: 0x18,
|
||||||
|
0x2b: 0x19, 0x2e: 0x1A, 0x30: 0x1B, 0x32: 0x1C, 0x33: 0x1D, 0x34: 0x1E, 0x35: 0x1F, 0x36: 0x20,
|
||||||
|
0x37: 0x21, 0x38: 0x22, 0x39: 0x23, 0x3a: 0x24, 0x3b: 0x25, 0x3d: 0x26, 0x3e: 0x27, 0x41: 0x28,
|
||||||
|
0x43: 0x29, 0x44: 0x2A, 0x45: 0x2B, 0x46: 0x2C, 0x49: 0x2D, 0x4a: 0x2E, 0x4b: 0x2F, 0x4c: 0x30,
|
||||||
|
0x4d: 0x31, 0x4e: 0x32, 0x50: 0x33, 0x51: 0x34, 0x52: 0x35, 0x53: 0x36, 0x56: 0x37, 0x57: 0x38,
|
||||||
|
0x58: 0x39, 0x59: 0x3A, 0x5a: 0x3B, 0x5b: 0x3C, 0x5c: 0x3D, 0x5d: 0x3E, 0x5e: 0x3F, 0x5f: 0x40,
|
||||||
|
0x60: 0x41, 0x61: 0x42, 0x62: 0x43, 0x66: 0x44, 0x67: 0x45, 0x68: 0x46, 0x6a: 0x47, 0x6b: 0x48,
|
||||||
|
0x6c: 0x49, 0x6d: 0x4A, 0x6e: 0x4B, 0x71: 0x4C, 0x75: 0x4D, 0x76: 0x4E, 0x7b: 0x4F, 0x7c: 0x50,
|
||||||
|
0x7d: 0x51, 0x7e: 0x52, 0x7f: 0x53, 0x81: 0x54, 0x85: 0x55, 0x8b: 0x56, 0x8c: 0x57, 0x8d: 0x58,
|
||||||
|
0x8e: 0x59, 0x90: 0x5A, 0x91: 0x5B, 0x92: 0x5C, 0x93: 0x5D, 0x95: 0x5E, 0x96: 0x5F, 0x99: 0x60,
|
||||||
|
0x9b: 0x61, 0x9c: 0x62, 0x9d: 0x63, 0x9e: 0x64, 0x9f: 0x65, 0xa0: 0x66, 0xa1: 0x67, 0xa2: 0x68,
|
||||||
|
0xa3: 0x69, 0xa4: 0x6A, 0xa5: 0x6B, 0xa8: 0x6C, 0xa9: 0x6D, 0xaa: 0x6E, 0xab: 0x6F, 0xac: 0x70,
|
||||||
|
0xae: 0x71, 0xaf: 0x72, 0xb1: 0x73, 0xb2: 0x74, 0xb3: 0x75, 0xb4: 0x76, 0xb5: 0x77, 0xb6: 0x78,
|
||||||
|
0xb7: 0x79, 0xb8: 0x7A, 0xb9: 0x7B, 0xba: 0x7C, 0xbb: 0x7D, 0xbc: 0x7E, 0xbe: 0x7F, 0xbf: 0x80,
|
||||||
|
0xc1: 0x81, 0xc2: 0x82, 0xc3: 0x83, 0xc4: 0x84, 0xc5: 0x85, 0xc6: 0x86, 0xc7: 0x87, 0xc8: 0x88,
|
||||||
|
0xc9: 0x89, 0xcb: 0x8A, 0xcc: 0x8B, 0xce: 0x8C, 0xd1: 0x8D, 0xd2: 0x8E, 0xd5: 0x8F, 0xd6: 0x90,
|
||||||
|
0xd8: 0x91, 0xd9: 0x92, 0xda: 0x93, 0xdb: 0x94, 0xdc: 0x95
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
spiral_offset_table = {
|
||||||
|
0x01: 0x01, 0x02: 0x02, 0x04: 0x03, 0x07: 0x04, 0x09: 0x05, 0x0a: 0x07, 0x0c: 0x08, 0x0e: 0x0b,
|
||||||
|
0x11: 0x0c, 0x15: 0x0d, 0x16: 0x0e, 0x17: 0x0f, 0x1a: 0x11, 0x1c: 0x13, 0x1d: 0x14, 0x1e: 0x15,
|
||||||
|
0x26: 0x16, 0x27: 0x19, 0x28: 0x1b, 0x31: 0x1c, 0x34: 0x1f, 0x38: 0x20, 0x3a: 0x21, 0x3f: 0x22,
|
||||||
|
0x40: 0x23, 0x41: 0x24, 0x42: 0x25, 0x45: 0x26, 0x4a: 0x27, 0x4c: 0x29, 0x4d: 0x2a, 0x4e: 0x2b,
|
||||||
|
0x53: 0x2c, 0x54: 0x2d, 0x5c: 0x2e, 0x5d: 0x2f, 0x5f: 0x30, 0x63: 0x35, 0x64: 0x36, 0x66: 0x37,
|
||||||
|
0x6a: 0x38, 0x6b: 0x3a, 0x6c: 0x3b, 0x6e: 0x3c, 0x70: 0x3d, 0x71: 0x40, 0x72: 0x41, 0x76: 0x42,
|
||||||
|
0x77: 0x45, 0x7f: 0x49, 0x80: 0x4a, 0x87: 0x4b, 0x8c: 0x4f, 0x8e: 0x53, 0x91: 0x54, 0x93: 0x55,
|
||||||
|
0x97: 0x56, 0x98: 0x57, 0x99: 0x58, 0x9e: 0x59, 0xa0: 0x5a, 0xa2: 0x5b, 0xa5: 0x5c, 0xa6: 0x5d,
|
||||||
|
0xab: 0x5e, 0xae: 0x5f, 0xb0: 0x60, 0xb5: 0x63, 0xb6: 0x64, 0xbc: 0x65, 0xbe: 0x66, 0xc0: 0x67,
|
||||||
|
0xd0: 0x6a, 0xd1: 0x6d, 0xd2: 0x6e, 0xda: 0x6f, 0xe0: 0x70
|
||||||
|
}
|
||||||
|
|
||||||
|
door_pair_offset_table = {
|
||||||
|
0x01: 0x0001, 0x02: 0x0003, 0x04: 0x0006, 0x06: 0x000b, 0x0a: 0x000c, 0x0b: 0x000d, 0x0c: 0x0010, 0x0d: 0x0011,
|
||||||
|
0x0e: 0x0012, 0x11: 0x0015, 0x12: 0x0018, 0x13: 0x001c, 0x14: 0x001e, 0x15: 0x0025, 0x16: 0x0027, 0x19: 0x002b,
|
||||||
|
0x1a: 0x002d, 0x1b: 0x0033, 0x1c: 0x0035, 0x1d: 0x0038, 0x1e: 0x0039, 0x1f: 0x003d, 0x20: 0x003f, 0x21: 0x0040,
|
||||||
|
0x22: 0x0043, 0x23: 0x0045, 0x24: 0x0047, 0x26: 0x004f, 0x28: 0x0053, 0x2a: 0x0055, 0x2b: 0x005b, 0x2e: 0x005f,
|
||||||
|
0x30: 0x0060, 0x31: 0x0062, 0x32: 0x0064, 0x33: 0x0065, 0x34: 0x0066, 0x35: 0x0068, 0x36: 0x006e, 0x37: 0x0074,
|
||||||
|
0x38: 0x007a, 0x39: 0x007c, 0x3a: 0x007e, 0x3b: 0x0081, 0x3d: 0x0082, 0x3e: 0x0086, 0x3f: 0x0088, 0x40: 0x0089,
|
||||||
|
0x41: 0x008a, 0x43: 0x008b, 0x44: 0x008e, 0x45: 0x0092, 0x46: 0x0096, 0x49: 0x0099, 0x4a: 0x009d, 0x4b: 0x00a2,
|
||||||
|
0x4c: 0x00a5, 0x4d: 0x00a6, 0x4e: 0x00a8, 0x4f: 0x00aa, 0x50: 0x00ab, 0x51: 0x00ad, 0x52: 0x00af, 0x53: 0x00b2,
|
||||||
|
0x56: 0x00b5, 0x57: 0x00b9, 0x58: 0x00bf, 0x59: 0x00c5, 0x5a: 0x00c9, 0x5b: 0x00ca, 0x5c: 0x00cc, 0x5d: 0x00ce,
|
||||||
|
0x5e: 0x00d1, 0x5f: 0x00d5, 0x60: 0x00d6, 0x61: 0x00dc, 0x62: 0x00e3, 0x63: 0x00e9, 0x64: 0x00ec, 0x65: 0x00ed,
|
||||||
|
0x66: 0x00ee, 0x67: 0x00f2, 0x68: 0x00f5, 0x6a: 0x00f7, 0x6b: 0x00f8, 0x6c: 0x00fc, 0x6d: 0x00ff, 0x6e: 0x0102,
|
||||||
|
0x71: 0x0103, 0x72: 0x0106, 0x73: 0x0107, 0x74: 0x010a, 0x75: 0x010c, 0x76: 0x010e, 0x77: 0x0112, 0x7b: 0x0114,
|
||||||
|
0x7c: 0x0117, 0x7d: 0x011b, 0x7e: 0x011e, 0x7f: 0x0121, 0x81: 0x0123, 0x83: 0x0124, 0x84: 0x0127, 0x85: 0x0128,
|
||||||
|
0x87: 0x012c, 0x8b: 0x012e, 0x8c: 0x0133, 0x8d: 0x0139, 0x8e: 0x013e, 0x90: 0x013f, 0x91: 0x0140, 0x92: 0x0141,
|
||||||
|
0x93: 0x0146, 0x95: 0x0149, 0x96: 0x014b, 0x97: 0x014d, 0x98: 0x014f, 0x99: 0x0150, 0x9b: 0x0153, 0x9c: 0x0156,
|
||||||
|
0x9d: 0x015a, 0x9e: 0x015d, 0x9f: 0x0161, 0xa0: 0x0163, 0xa1: 0x0164, 0xa2: 0x0166, 0xa3: 0x016a, 0xa4: 0x016c,
|
||||||
|
0xa5: 0x016d, 0xa8: 0x0170, 0xa9: 0x0176, 0xaa: 0x017c, 0xab: 0x0182, 0xac: 0x0184, 0xae: 0x0185, 0xaf: 0x0186,
|
||||||
|
0xb0: 0x0188, 0xb1: 0x018b, 0xb2: 0x018f, 0xb3: 0x0197, 0xb4: 0x019c, 0xb5: 0x019d, 0xb6: 0x019e, 0xb7: 0x01a3,
|
||||||
|
0xb8: 0x01a4, 0xb9: 0x01a6, 0xba: 0x01aa, 0xbb: 0x01ad, 0xbc: 0x01b3, 0xbe: 0x01bb, 0xbf: 0x01be, 0xc0: 0x01bf,
|
||||||
|
0xc1: 0x01c2, 0xc2: 0x01ca, 0xc3: 0x01d2, 0xc4: 0x01d9, 0xc5: 0x01da, 0xc6: 0x01dd, 0xc7: 0x01e3, 0xc8: 0x01e6,
|
||||||
|
0xc9: 0x01e7, 0xcb: 0x01ec, 0xcc: 0x01ed, 0xce: 0x01f0, 0xd0: 0x01f1, 0xd1: 0x01f3, 0xd2: 0x01f7, 0xd5: 0x01f8,
|
||||||
|
0xd6: 0x01fa, 0xd8: 0x01fd, 0xd9: 0x0200, 0xda: 0x0203, 0xdb: 0x0204, 0xdc: 0x0206, 0xe0: 0x020
|
||||||
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
@@ -116,3 +117,76 @@ def make_new_base2current(old_rom='Zelda no Densetsu - Kamigami no Triforce (Jap
|
|||||||
basemd5 = hashlib.md5()
|
basemd5 = hashlib.md5()
|
||||||
basemd5.update(new_rom_data)
|
basemd5.update(new_rom_data)
|
||||||
return "New Rom Hash: " + basemd5.hexdigest()
|
return "New Rom Hash: " + basemd5.hexdigest()
|
||||||
|
|
||||||
|
|
||||||
|
entrance_offsets = {
|
||||||
|
'Sanctuary': 0x2,
|
||||||
|
'HC West': 0x3,
|
||||||
|
'HC South': 0x4,
|
||||||
|
'HC East': 0x5,
|
||||||
|
'Eastern': 0x8,
|
||||||
|
'Desert West': 0x0,
|
||||||
|
'Desert South': 0xa,
|
||||||
|
'Desert East': 0xb,
|
||||||
|
'Desert Back': 0xc,
|
||||||
|
'TR Lazy Eyes': 0x15,
|
||||||
|
'TR Eye Bridge': 0x18,
|
||||||
|
'TR Chest': 0x19,
|
||||||
|
'Aga Tower': 0x24,
|
||||||
|
'Swamp': 0x25,
|
||||||
|
'Palace of Darkness': 0x26,
|
||||||
|
'Mire': 0x27,
|
||||||
|
'Skull 2 West': 0x28,
|
||||||
|
'Skull 2 East': 0x29,
|
||||||
|
'Skull 1': 0x2a,
|
||||||
|
'Skull 3': 0x2b,
|
||||||
|
'Ice': 0x2d,
|
||||||
|
'Hera': 0x33,
|
||||||
|
'Thieves': 0x34,
|
||||||
|
'TR Main': 0x35,
|
||||||
|
'GT': 0x37,
|
||||||
|
'Skull Pots': 0x76,
|
||||||
|
'Skull Left Drop': 0x77,
|
||||||
|
'Skull Pinball': 0x78,
|
||||||
|
'Skull Back Drop': 0x79,
|
||||||
|
'Sewer Drop': 0x81
|
||||||
|
}
|
||||||
|
|
||||||
|
entrance_data = {
|
||||||
|
'Room Ids': (0x14577, 2),
|
||||||
|
'Relative coords': (0x14681, 8),
|
||||||
|
'ScrollX': (0x14AA9, 2),
|
||||||
|
'ScrollY': (0x14BB3, 2),
|
||||||
|
'LinkX': (0x14CBD, 2),
|
||||||
|
'LinkY': (0x14DC7, 2),
|
||||||
|
'CameraX': (0x14ED1, 2),
|
||||||
|
'CameraY': (0x14FDB, 2),
|
||||||
|
'Blockset': (0x150e5, 1),
|
||||||
|
'FloorValues': (0x1516A, 1),
|
||||||
|
'Dungeon Value': (0x151EF, 1),
|
||||||
|
'Frame on Exit': (0x15274, 1),
|
||||||
|
'BG Setting': (0x152F9, 1),
|
||||||
|
'HV Scroll': (0x1537E, 1),
|
||||||
|
'Scroll Quad': (0x15403, 1),
|
||||||
|
'Exit Door': (0x15488, 2),
|
||||||
|
'Music': (0x15592, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def read_entrance_data(old_rom='Zelda no Densetsu - Kamigami no Triforce (Japan).sfc'):
|
||||||
|
with open(old_rom, 'rb') as stream:
|
||||||
|
old_rom_data = bytearray(stream.read())
|
||||||
|
|
||||||
|
for ent, offset in entrance_offsets.items():
|
||||||
|
print(ent)
|
||||||
|
for dp, data in entrance_data.items():
|
||||||
|
byte_array = []
|
||||||
|
address, size = data
|
||||||
|
for i in range(0, size):
|
||||||
|
byte_array.append(old_rom_data[address+(offset*size)+i])
|
||||||
|
bytes = ', '.join('0x{:02x}'.format(x) for x in byte_array)
|
||||||
|
print("%s: %s" % (dp, bytes))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
read_entrance_data(old_rom='C:\\Users\\Randall\\Documents\\kwyn\\orig\\z3.sfc')
|
||||||
@@ -0,0 +1,187 @@
|
|||||||
|
|
||||||
|
Dungeon_InterRoomTrans 7.2 -> (01) -> Dungeon_LoadRoom
|
||||||
|
Dungeon_InitStarTileCh
|
||||||
|
**Load and and Prep Here
|
||||||
|
Dungeon_ResetSprites
|
||||||
|
$028908 (PC: 10908) is the jump tample
|
||||||
|
|
||||||
|
hook points 7.2.1
|
||||||
|
22 32 f4 a0
|
||||||
|
$028961 (PC: 10961) 22 a4 fd 00
|
||||||
|
22 39 d7 00
|
||||||
|
e6 b0
|
||||||
|
9c 00 02
|
||||||
|
a5 a2
|
||||||
|
48
|
||||||
|
a5 a0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Modules 04 and 05 skip the PaletteFiltering right above it - moving the pointers slightly might help - didn't help
|
||||||
|
mostly for the black fade out
|
||||||
|
|
||||||
|
60 a5 b0 c9 07 90 ?? ??
|
||||||
|
jsl ?? ?? ??
|
||||||
|
jsl ?? ?? ??
|
||||||
|
jsl 07 ?? ??
|
||||||
|
lda b0
|
||||||
|
jsl 00 ?? ??
|
||||||
|
pointers!!!
|
||||||
|
SpiralStaircase
|
||||||
|
(00) 290C6
|
||||||
|
(01) 28B7A
|
||||||
|
(02) 28FA3 -> Fixed Color see 110A1-$110C6 JUMP LOCATION in Bank02 e944 is PaletteFiltering (Fade out!) (.doFiltering)
|
||||||
|
(03) 28BE4 -> Dungeon_LoadRoom, Dungeon_InitStarTileChr, LoadTransAuxGfx, Dungeon_LoadCustomTileAttr
|
||||||
|
(04) 28D11 -> PrepTransAuxGfx
|
||||||
|
(05) 28D1F -> Sets $17 to #$0A
|
||||||
|
(06) 28C12 -> Dungeon_ResetSprites
|
||||||
|
- these guys called each other a ton
|
||||||
|
c9* b5 ca* b5* ca* b1* b5 c6* ca b1* b5 c6* ca 96---------
|
||||||
|
(07) 28FC9 -> 5 jumps in here, sets $a4 floor
|
||||||
|
112B1 -> may be related to straight staircase only
|
||||||
|
13B7B
|
||||||
|
135DC
|
||||||
|
10EC9
|
||||||
|
10AB3 - right before b5
|
||||||
|
|
||||||
|
(08) 289CA -> calls $113F (above .copyTilemap in Bank 00)
|
||||||
|
(09) 289B5 -> calls $11C4 (updates all tiles in a room)
|
||||||
|
(0a) 289CA -> go through the tilemap....
|
||||||
|
(0b) 289B1 -> runs a filter - new color?, then $11C4 (didn't see call to 289B5)
|
||||||
|
(0c) 289C6 -> runs a filter then $113F
|
||||||
|
(0d) 289B1 -> repeat last two steps
|
||||||
|
(0e) 289C6
|
||||||
|
(0f) 28F96 -> Fade in
|
||||||
|
|
||||||
|
(10) 2905D
|
||||||
|
(11) 2909D
|
||||||
|
(12) 290B7
|
||||||
|
(13) 290DF
|
||||||
|
SpiralStaircase -> (03) 10CE2 -> Dungeon_LoadRoom
|
||||||
|
Dungeon_InitStarTileChr
|
||||||
|
LoadTransAuxGfx
|
||||||
|
Dungeon_LoadCustomTileAttr
|
||||||
|
(04) 10E0F -> PrepTransAuxGfx
|
||||||
|
(06) 10D10 -> Dungeon_ResetSprites
|
||||||
|
|
||||||
|
|
||||||
|
; Upward floor transition
|
||||||
|
Dungeon -> x06 -> $10C14 -> 10CE2 -> Dungeon_LoadRoom
|
||||||
|
Dungeon_InitStarTileChr
|
||||||
|
LoadTransAuxGfx
|
||||||
|
Dungeon_LoadCustomTileAttr
|
||||||
|
10E0F -> PrepTransAuxGfx
|
||||||
|
10D10 -> Dungeon_ResetSprites
|
||||||
|
|
||||||
|
; Downward floor transition
|
||||||
|
Dungeon -> x07 -> $10E27 -> 10CE2 -> Dungeon_LoadRoom
|
||||||
|
Dungeon_InitStarTileChr
|
||||||
|
LoadTransAuxGfx
|
||||||
|
Dungeon_LoadCustomTileAttr
|
||||||
|
10E0F -> PrepTransAuxGfx
|
||||||
|
10D10 -> Dungeon_ResetSprites
|
||||||
|
|
||||||
|
|
||||||
|
StraightStairs_2 -> Dungeon_LoadRoom
|
||||||
|
-> LoadTransAuxGfx
|
||||||
|
StraightStairs_3 -> 10E0F -> PrepTransAuxGfx
|
||||||
|
StraightStairs_4 -> Dungeon_ResetSprites
|
||||||
|
|
||||||
|
|
||||||
|
Dungeon_Teleport -> 10CE2 -> Dungeon_LoadRoom
|
||||||
|
10CE2 -> LoadTransAuxGfx
|
||||||
|
10D10 -> Dungeon_ResetSprites
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Hook points
|
||||||
|
org $00d6ae (PC: 56ae)
|
||||||
|
LoadTransAuxGfx
|
||||||
|
8b 4b ab 64 00
|
||||||
|
|
||||||
|
org $00df5a (PC: 5f5a)
|
||||||
|
PrepTransAuxGfx
|
||||||
|
a9 7e 85 02 85 05 c2 31
|
||||||
|
|
||||||
|
org $0ffd65 (PC: 07fd65)
|
||||||
|
Dungeon_LoadCustomTileAttr
|
||||||
|
8b 4b ab c2 30 ad A2 0A 29 FF 00
|
||||||
|
|
||||||
|
Palette_DungBgMain
|
||||||
|
c2 21 ae b6 0a bf 1b
|
||||||
|
; This is the palette index for a certain background
|
||||||
|
LDX $0AB6
|
||||||
|
|
||||||
|
LDA $1BEC4B, X : ADC.w #$D734 : STA $00 : PHA
|
||||||
|
|
||||||
|
REP #$10
|
||||||
|
|
||||||
|
LDA.w #$0042 ; Target BP-2 through BP-7 (full)
|
||||||
|
LDX.w #$000E ; (Length - 1) (in words) of the palettes.
|
||||||
|
LDY.w #$0005
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Trap doors:
|
||||||
|
|
||||||
|
0468 - flag is set when doors are down (1 = down? 0 = up?)
|
||||||
|
$690 - 7 for open - 0 for down
|
||||||
|
|
||||||
|
IntraRoom: ->
|
||||||
|
Dungeon_IntraRoomTransShutDoors (maybe should be Open)
|
||||||
|
stz $0468
|
||||||
|
#$07 -> $0690
|
||||||
|
|
||||||
|
Dungeon_IntraRoomTransOpenDoors (maybe should be Shut)
|
||||||
|
|
||||||
|
10D71 -> A
|
||||||
|
A -> 0468
|
||||||
|
0468++
|
||||||
|
0 -> 0690
|
||||||
|
|
||||||
|
InterRoom:
|
||||||
|
|
||||||
|
pre
|
||||||
|
01b6b5 sta $0468 (01) in this case
|
||||||
|
01b7ce stz 468 x2
|
||||||
|
post
|
||||||
|
028acc inc $0468
|
||||||
|
028ad2 stz $0690
|
||||||
|
01d391 inc $0690 x 10 during animation
|
||||||
|
|
||||||
|
|
||||||
|
Other transition stuff
|
||||||
|
|
||||||
|
Overworld_LoadTransGfx -> LoadTransAuxGfx
|
||||||
|
Overworld_LoadTransGfx -> PrepTransAuxGfx
|
||||||
|
Module_LoadFile -> Dungeon_ResetSprites
|
||||||
|
Module_HoleToDungeon -> 10D10 -> Dungeon_ResetSprites
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Camera work:
|
||||||
|
Places where sta $e2 happens
|
||||||
|
02ba5d 13A31 -
|
||||||
|
|
||||||
|
028750 Module_Dungeon
|
||||||
|
0286ef Module_Dungeon
|
||||||
|
|
||||||
|
|
||||||
|
Stuff about big key door south
|
||||||
|
1e -> Y
|
||||||
|
this is at 00ce24 or pc 004e24
|
||||||
|
org 00ce24
|
||||||
|
dw 2ac8
|
||||||
|
1aab1 ldx ce06,y (where y is 1e = ce24) loads 2a80, but should be 2ac8 for the gfx
|
||||||
|
not detected as big key door - need to look into tile attributes
|
||||||
|
|
||||||
|
extraneous keydoors
|
||||||
|
$5b - GT 91 idx 0
|
||||||
|
$99 - EP 153 idx 1
|
||||||
|
$a2 - MM 162 idx 0
|
||||||
|
$a8 - EP 168 idx 2
|
||||||
|
$bc - TT 188 idx 1
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
!add = "clc : adc"
|
||||||
|
!sub = "sec : sbc"
|
||||||
|
|
||||||
|
; Free RAM notes
|
||||||
|
; Normal doors use $FE for scrolling indicator
|
||||||
|
; Normal doors use $AB to store the trap door indicator
|
||||||
|
; Spiral doors use $045e to store stair type
|
||||||
|
; Gfx uses $b1 to for sub-sub-sub-module thing
|
||||||
|
|
||||||
|
; Hooks into various routines
|
||||||
|
incsrc drhooks.asm
|
||||||
|
|
||||||
|
;Main Code
|
||||||
|
org $278000 ;138000
|
||||||
|
incsrc normal.asm
|
||||||
|
incsrc spiral.asm
|
||||||
|
incsrc gfx.asm
|
||||||
|
incsrc keydoors.asm
|
||||||
|
|
||||||
|
; Data Section
|
||||||
|
org $279000
|
||||||
|
OffsetTable:
|
||||||
|
dw -8, 8
|
||||||
|
|
||||||
|
; Vert 0,6,0 Horz 2,0,8
|
||||||
|
org $279010
|
||||||
|
CoordIndex: ; Horizontal 1st
|
||||||
|
db 2, 0 ; Coordinate Index $20-$23
|
||||||
|
OppCoordIndex:
|
||||||
|
db 0, 2 ; Swapped coordinate Index $20-$23 (minor optimization)
|
||||||
|
CameraIndex: ; Horizontal 1st
|
||||||
|
db 0, 6 ; Camera Index $e2-$ea
|
||||||
|
CamQuadIndex: ; Horizontal 1st
|
||||||
|
db 8, 0 ; Camera quadrants $600-$60f
|
||||||
|
ShiftQuadIndex:
|
||||||
|
db 2, 1 ; see ShiftQuad func (relates to $a9,$aa)
|
||||||
|
CamBoundIndex: ; Horizontal 1st
|
||||||
|
db 0, 4 ; Camera Bounds $0618-$61f
|
||||||
|
OppCamBoundIndex: ; Horizontal 1st
|
||||||
|
db 4, 0 ; Camera Bounds $0618-$61f
|
||||||
|
CamBoundBaseLine: ; X camera stuff is 1st column todo Y camera needs more testing
|
||||||
|
dw $007f, $0077 ; Left/Top camera bounds when at edge or layout frozen
|
||||||
|
dw $0007, $000b ; Left/Top camera bounds when not frozen + appropriate low byte $22/$20 (preadj. by #$78/#$6c)
|
||||||
|
dw $00ff, $010b ; Right/Bot camera bounds when not frozen + appropriate low byte $20/$22
|
||||||
|
dw $017f, $0187 ; Right/Bot camera bound when at edge or layout frozen
|
||||||
|
|
||||||
|
incsrc doortables.asm
|
||||||
@@ -0,0 +1,491 @@
|
|||||||
|
org $279700
|
||||||
|
KeyDoorOffset:
|
||||||
|
; 0 1 2 3 4 5 6 7 8 9 a b c d e f --Offset Ruler
|
||||||
|
dw $0000,$0001,$0003,$0000,$0006,$0000,$000b,$0000,$0000,$0000,$000c,$000d,$0010,$0011,$0012,$0000
|
||||||
|
dw $0000,$0015,$0018,$001c,$001e,$0025,$0027,$0000,$0000,$002b,$002d,$0033,$0035,$0038,$0039,$003d
|
||||||
|
dw $003f,$0040,$0043,$0045,$0047,$0000,$004f,$0000,$0053,$0000,$0055,$005b,$0000,$0000,$005f,$0000
|
||||||
|
dw $0060,$0062,$0064,$0065,$0066,$0068,$006e,$0074,$007a,$007c,$007e,$0081,$0000,$0082,$0086,$0088
|
||||||
|
dw $0089,$008a,$0000,$008b,$008e,$0092,$0096,$0000,$0000,$0099,$009d,$00a2,$00a5,$00a6,$00a8,$00aa
|
||||||
|
dw $00ab,$00ad,$00af,$00b2,$0000,$0000,$00b5,$00b9,$00bf,$00c5,$00c9,$00ca,$00cc,$00ce,$00d1,$00d5
|
||||||
|
dw $00d6,$00dc,$00e3,$00e9,$00ec,$00ed,$00ee,$00f2,$00f5,$0000,$00f7,$00f8,$00fc,$00ff,$0102,$0000
|
||||||
|
dw $0000,$0103,$0106,$0107,$010a,$010c,$010e,$0112,$0000,$0000,$0000,$0114,$0117,$011b,$011e,$0121
|
||||||
|
dw $0000,$0123,$0000,$0124,$0127,$0128,$0000,$012c,$0000,$0000,$0000,$012e,$0133,$0139,$013e,$0000
|
||||||
|
dw $013f,$0140,$0141,$0146,$0000,$0149,$014b,$014d,$014f,$0150,$0000,$0153,$0156,$015a,$015d,$0161
|
||||||
|
dw $0163,$0164,$0166,$016a,$016c,$016d,$0000,$0000,$0170,$0176,$017c,$0182,$0184,$0000,$0185,$0186
|
||||||
|
dw $0188,$018b,$018f,$0197,$019c,$019d,$019e,$01a3,$01a4,$01a6,$01aa,$01ad,$01b3,$0000,$01bb,$01be
|
||||||
|
dw $01bf,$01c2,$01ca,$01d2,$01d9,$01da,$01dd,$01e3,$01e6,$01e7,$0000,$01ec,$01ed,$0000,$01f0,$0000
|
||||||
|
dw $01f1,$01f3,$01f7,$0000,$0000,$01f8,$01fa,$0000,$01fd,$0200,$0203,$0204,$0206,$0000,$0000,$0000
|
||||||
|
dw $0207
|
||||||
|
|
||||||
|
|
||||||
|
org $279E00
|
||||||
|
SpiralOffset:
|
||||||
|
; 0 1 2 3 4 5 6 7 8 9 a b c d e f --Offset Ruler
|
||||||
|
db $00,$01,$02,$00,$03,$00,$00,$04,$00,$05,$07,$00,$08,$00,$0b,$00
|
||||||
|
db $00,$0c,$00,$00,$00,$0d,$0e,$0f,$00,$00,$11,$00,$13,$14,$15,$00
|
||||||
|
db $00,$00,$00,$00,$00,$00,$16,$19,$1b,$00,$00,$00,$00,$00,$00,$00
|
||||||
|
db $00,$1c,$00,$00,$1f,$00,$00,$00,$20,$00,$21,$00,$00,$00,$00,$22
|
||||||
|
db $23,$24,$25,$00,$00,$26,$00,$00,$00,$00,$27,$00,$29,$2a,$2b,$00
|
||||||
|
db $00,$00,$00,$2c,$2d,$00,$00,$00,$00,$00,$00,$00,$2e,$2f,$00,$30
|
||||||
|
db $00,$00,$00,$35,$36,$00,$37,$00,$00,$00,$38,$3a,$3b,$00,$3c,$00
|
||||||
|
db $3d,$40,$41,$00,$00,$00,$42,$45,$00,$00,$00,$00,$00,$00,$00,$49
|
||||||
|
db $4a,$00,$00,$00,$00,$00,$00,$4b,$00,$00,$00,$00,$4f,$00,$53,$00
|
||||||
|
db $00,$54,$00,$55,$00,$00,$00,$56,$57,$58,$00,$00,$00,$00,$59,$00
|
||||||
|
db $5a,$00,$5b,$00,$00,$5c,$5d,$00,$00,$00,$00,$5e,$00,$00,$5f,$00
|
||||||
|
db $60,$00,$00,$00,$00,$63,$64,$00,$00,$00,$00,$00,$65,$00,$66,$00
|
||||||
|
db $67,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
|
db $6a,$6d,$6e,$00,$00,$00,$00,$00,$00,$00,$6f,$00,$00,$00,$00,$00
|
||||||
|
db $70
|
||||||
|
|
||||||
|
org $279F00
|
||||||
|
DoorOffset:
|
||||||
|
db $00,$01,$02,$00,$03,$00,$04,$00,$00,$00,$00,$00,$00,$05,$00,$00
|
||||||
|
db $00,$06,$07,$08,$09,$0A,$0B,$00,$00,$0C,$0D,$0E,$00,$0F,$10,$11
|
||||||
|
db $12,$13,$14,$15,$16,$00,$17,$00,$00,$00,$18,$19,$00,$00,$1A,$00
|
||||||
|
db $1B,$00,$1C,$1D,$1E,$1F,$20,$21,$22,$23,$24,$25,$00,$26,$27,$00
|
||||||
|
db $00,$28,$00,$29,$2A,$2B,$2C,$00,$00,$2D,$2E,$2F,$30,$31,$32,$00
|
||||||
|
db $33,$34,$35,$36,$00,$00,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F,$40
|
||||||
|
db $41,$42,$43,$00,$00,$00,$44,$45,$46,$00,$47,$48,$49,$4A,$4B,$00
|
||||||
|
db $00,$4C,$00,$00,$00,$4D,$4E,$00,$00,$00,$00,$4F,$50,$51,$52,$53
|
||||||
|
db $00,$54,$00,$00,$00,$55,$00,$00,$00,$00,$00,$56,$57,$58,$59,$00
|
||||||
|
db $5A,$5B,$5C,$5D,$00,$5E,$5F,$00,$00,$60,$00,$61,$62,$63,$64,$65
|
||||||
|
db $66,$67,$68,$69,$6A,$6B,$00,$00,$6C,$6D,$6E,$6F,$70,$00,$71,$72
|
||||||
|
db $00,$73,$74,$75,$76,$77,$78,$79,$7A,$7B,$7C,$7D,$7E,$00,$7F,$80
|
||||||
|
db $00,$81,$82,$83,$84,$85,$86,$87,$88,$89,$00,$8A,$8B,$00,$8C,$00
|
||||||
|
db $00,$8D,$8E,$00,$00,$8F,$90,$00,$91,$92,$93,$94,$95,$00,$00,$00
|
||||||
|
db $00
|
||||||
|
|
||||||
|
org $27A000
|
||||||
|
DoorTable:
|
||||||
|
;; NW 00 N 01 N 02 WN 00 W 01 WS 02 SW 00 S 01 SE 02 EN 00 E 01 ES 02 - Door ruler
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Default/Garbage row
|
||||||
|
dw $8000, $8000, $8000, $0450, $8000, $8000, $8000, $8000, $8000, $0452, $8000, $8000 ; HC Back Hall (x01)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Sewer Switches (x02)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Crystaroller
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Arghus
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Aga 2
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Sewer Secret Room
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Sanc
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TR Pokey
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TR Lava Pipe
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TR Pipes n Ledge
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Swap Canal
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Pod dark Maze
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Pod Bridge
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Pod Eye Statue
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Pre Aga
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ice Cross
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ice BK
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x20 Aga1
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Sewer Key Rat
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Sewer Waters
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TR Eye Entrance
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TR Chest Entrance
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Swamp Statue
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; PoD Arena (x2a)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; PoD Statue (x2b)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ice Compass
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x30 Aga's Altar
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Dark Cross
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Lanmolas
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Swamp West Wing
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Flooded Key
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Swamp Main Hub (x36)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Swamp Hammer Time
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Swamp First Basement
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Drop to the Moth
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Pod 3 Catwalks
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Pod Conveyor
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Minihelma
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ice Conveyor
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Sewers
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Desert Torches
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TT Big Chest
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TT Cellblock
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Swamp Compass Loop
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Skull3 Torches
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Pod Entrance
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Pod Mimics 1
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Conveyor Ice
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Moldorm
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; IPBJ
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $0401, $8000, $8000 ; HC West Hall (x50)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; HC Throne Room (x51)
|
||||||
|
dw $8000, $8000, $8000, $0401, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; HC East Hall (x52)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Desert Tiles 1
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Skull 2 Left Entrance
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Skull 2 Right Entrance
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Skull 1 Entrance
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Skull 3 Entrance
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Helmasaur
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Spike Switch
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Cannonball
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Gauntlet 1
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ice Choice Cross
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Iced U
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; HC West Lobby (x60)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; HC Main Lobby (x61)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; HC East Lobby (x62)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x66 Swamp Waterfall
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x67 Skull 1 Left Drop
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x68 Skull 1 Pinball
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x6a Pod Rupees
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x6b GT Mimics
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x6c GT Lanmolas
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x6d Gauntlet 2
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x6e Ice Gators
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; HC Armory
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Desert BK Chest
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Swamp Flooded Chests
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT DM's Tile
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Randoroom
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Warp Maze
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ice Freezors
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ice Hookpit
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; HC Catawalk
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Desert Right Entrance
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Left
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Hopeful Torch
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Right
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ice Lonely Freezor
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Vitreous (x90)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Rain
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Dark Crystals
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Blockswitch
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Fallbridge
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Torch Cross
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Darkness
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Warp Maze 2
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Invis Bridge
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Compass Room
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ice Big Chests
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Icy Pots
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Pre-Vitreous (xa0)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Fishbone
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Bridges
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Corner
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Trinexx (xa4)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; GT Wizzrobes
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Compass (xa8)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Courtyard (xa9)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Map (xaa)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TT Switch
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Blind
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Iced T
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ice Slipway
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Warpzone
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire ????
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Spikes
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TR Refill
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TR Dark Maze
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TR Chainchomp
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TR Rollers
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Big Key
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Easter Cannonball
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Dark Circle
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TT Hellway
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TT Bossway
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ice Blockswitch
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ice Backtracker
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Tiles
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Main Hub
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Big Chest
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TR Switch Maze
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TR Narrow
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TR Early Hub
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TR Floating Torches
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Armos
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Entrance
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TT NW Quad
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TT NE Quad
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ice Boss Drop
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire BK
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire 2
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TR Laser Bridge
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TR Main Entrance
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Eyegores
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Attic Switches
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Attic Start
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TT Entrance Quad
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; TT SE Quad
|
||||||
|
; this should end at 27AE10 about
|
||||||
|
; some values you can hardcode
|
||||||
|
;dw $0070, $36a0 ; ->HC Stairwell
|
||||||
|
;dw $0072, $4ff8 ; ->HC Map Room
|
||||||
|
;dw $0080, $1f50 ; ->zelda's cellblock
|
||||||
|
|
||||||
|
org $27B000
|
||||||
|
SpiralTable:
|
||||||
|
dw $0203, $8080 ;null row
|
||||||
|
dw $0203, $8080 ;HC Backhallway
|
||||||
|
dw $0203, $8080 ;Sewer Pull
|
||||||
|
dw $0203, $8080 ;Crystaroller
|
||||||
|
dw $0203, $8080 ;Moldorm
|
||||||
|
dw $0203, $8080, $0203, $8080 ;Pod Basement
|
||||||
|
dw $0203, $8080 ;Pod Stalfos
|
||||||
|
dw $0203, $8080, $0203, $8080, $0203, $8080 ;GT Entrance
|
||||||
|
dw $0203, $8080 ;Ice Entrance
|
||||||
|
dw $0203, $8080 ;Escape
|
||||||
|
dw $0203, $8080 ;TR Pipe Ledge
|
||||||
|
dw $0203, $8080 ;Swamp Way
|
||||||
|
dw $0203, $8080, $0203, $8080 ;Hera Fallplace
|
||||||
|
dw $0203, $8080, $0203, $8080 ;PoD Bridge
|
||||||
|
dw $0203, $8080 ;GT Ice
|
||||||
|
dw $0203, $8080 ;GT F8
|
||||||
|
dw $0203, $8080 ;Ice Cross
|
||||||
|
dw $0203, $8080, $0203, $8080, $0203, $8080 ;Swamp Statue
|
||||||
|
dw $0203, $8080, $0203, $8080 ;Hera Big
|
||||||
|
dw $0203, $8080 ;Swamp Ent
|
||||||
|
dw $0203, $8080, $0203, $8080, $0203, $8080 ;Hera Startiles (middle value unused)
|
||||||
|
dw $0203, $8080 ;West Swamp
|
||||||
|
dw $0203, $8080 ;Swamp Basement
|
||||||
|
dw $0203, $8080 ;Pod Drops
|
||||||
|
dw $0203, $8080 ;Ice Hammer
|
||||||
|
dw $0203, $8080 ;Aga Guards
|
||||||
|
dw $0203, $8080 ;Sewer Begin
|
||||||
|
dw $0203, $8080 ;Sewer Rope
|
||||||
|
dw $0203, $8080 ;TT Cellblock
|
||||||
|
dw $0203, $8080, $0203, $8080 ;Pod Entrance
|
||||||
|
dw $0203, $8080 ;GT Icespike
|
||||||
|
dw $0203, $8080 ;GT Moldorm
|
||||||
|
dw $0203, $8080 ;IPBJ
|
||||||
|
dw $0203, $8080 ;Desert Prep
|
||||||
|
dw $0203, $8080 ;Swamp Attic
|
||||||
|
dw $0203, $8080 ;GT Cannonball
|
||||||
|
dw $0203, $8080 ;GT Gauntlet1
|
||||||
|
dw $0203, $8080, $0203, $8080, $0203, $8080, $0203, $8080, $0203, $8080 ;Ice U (1st three values unused)
|
||||||
|
dw $0203, $8080 ;Desert Back
|
||||||
|
dw $0203, $8080 ;TT Attic L
|
||||||
|
dw $0203, $8080 ;Swamp Waterf
|
||||||
|
dw $0203, $8080 ;Pod Rupees
|
||||||
|
dw $0203, $8080 ;Pod Rupees
|
||||||
|
dw $0203, $8080 ;GT Mimics
|
||||||
|
dw $0203, $8080 ;GT Lanmo
|
||||||
|
dw $0203, $8080 ;Ice Gators
|
||||||
|
dw $0203, $8080, $0203, $8080, $0203, $8080 ;HC Tiny (first value placeholder)
|
||||||
|
dw $0203, $8080 ;HC Boomer
|
||||||
|
dw $0203, $8080 ;HC Pits1
|
||||||
|
dw $0203, $8080, $0203, $8080, $0203, $8080 ;Swamp Sunken
|
||||||
|
dw $0203, $8080, $0203, $8080, $0203, $8080, $0203, $8080 ;Hera Entrance (first value unused)
|
||||||
|
dw $0203, $8080 ;Ice Hookshot
|
||||||
|
dw $0203, $8080 ;HC Cellblock
|
||||||
|
dw $0203, $8080, $0203, $8080, $0203, $8080, $0203, $8080 ;Hera Basement (first and third values unused)
|
||||||
|
dw $0203, $8080, $0203, $8080, $0203, $8080, $0203, $8080 ;GT Circle (third value unused)
|
||||||
|
dw $0203, $8080 ;Ice Last Freeze
|
||||||
|
dw $0203, $8080 ;Mire Drops
|
||||||
|
dw $0203, $8080 ;Mire Block
|
||||||
|
dw $0203, $8080 ;Mire Attic
|
||||||
|
dw $0203, $8080 ;Mire Entrance
|
||||||
|
dw $0203, $8080 ;East Dark
|
||||||
|
dw $0203, $8080 ;Ice Big
|
||||||
|
dw $0203, $8080 ;Mire Previtreous
|
||||||
|
dw $0203, $8080 ;Mire Bridges
|
||||||
|
dw $0203, $8080 ;GT Wizzrobes
|
||||||
|
dw $0203, $8080 ;GT Spikepit
|
||||||
|
dw $0203, $8080 ;TT Switch
|
||||||
|
dw $0203, $8080 ;Ice T
|
||||||
|
dw $0203, $8080, $0203, $8080, $0203, $8080 ;Tower Usains (2nd value unused)
|
||||||
|
dw $0203, $8080 ;TR PlatMaze
|
||||||
|
dw $0203, $8080 ;TR Chainchomp
|
||||||
|
dw $0203, $8080 ;TT Bossway
|
||||||
|
dw $0203, $8080 ;Ice FallZone
|
||||||
|
dw $0203, $8080, $0203, $8080, $0203, $8080 ;Tower Dark2 (2nd value unused)
|
||||||
|
dw $0203, $8080, $0203, $8080, $0203, $8080 ;Tower Dark1 (2nd value unused)
|
||||||
|
dw $0203, $8080 ;Mire BK Thang
|
||||||
|
dw $0203, $8080 ;Mire2
|
||||||
|
dw $0203, $8080 ;East Attic Start
|
||||||
|
dw $0203, $8080 ;Tower Entrance
|
||||||
|
|
||||||
|
|
||||||
|
org $27C000 ;ends around 27C418
|
||||||
|
PairedDoorTable:
|
||||||
|
dw $0000 ; the bad template
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
|
||||||
|
dw $0000,$0000,$8021
|
||||||
|
dw $0000,$0000,$0000,$0000
|
||||||
|
dw $4014,$0000
|
||||||
|
dw $8024,$8013,$0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$0000,$0000,$0000
|
||||||
|
dw $201a,$401a
|
||||||
|
dw $0000,$4019,$8019,$402a,$0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
|
||||||
|
dw $0000
|
||||||
|
dw $2011,$0000,$0000
|
||||||
|
dw $8032,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $8014,$0000,$0000,$0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $4036,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$101a,$402b,$0000,$0000,$0000
|
||||||
|
dw $0000,$202a,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $8022
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $2036,$0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $8037,$8026,$8035,$0000,$0000,$0000
|
||||||
|
dw $8036,$8038,$0000,$4038,$0000,$0000
|
||||||
|
dw $4037,$1037
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $204a,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000,$804d,$0000
|
||||||
|
dw $0000,$404e
|
||||||
|
dw $0000
|
||||||
|
|
||||||
|
dw $0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000,$2053
|
||||||
|
dw $0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$8059,$0000
|
||||||
|
dw $0000,$0000,$803a,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $203d,$0000
|
||||||
|
dw $0000,$403e
|
||||||
|
dw $0000 ; this is the odd extra room - shouldn't be used
|
||||||
|
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$2043
|
||||||
|
dw $0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$4058,$0000,$0000,$0000
|
||||||
|
dw $0000,$2057,$4068,$0000,$0000,$0000
|
||||||
|
dw $2049,$0000,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $806b,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $805f,$0000,$0000,$0000
|
||||||
|
dw $805e
|
||||||
|
|
||||||
|
dw $0000,$0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000,$2058
|
||||||
|
dw $0000
|
||||||
|
dw $805b,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$207c,$0000
|
||||||
|
dw $0000,$407d,$407b,$0000
|
||||||
|
dw $0000,$407c,$0000
|
||||||
|
dw $808e,$0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $807e
|
||||||
|
|
||||||
|
dw $0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$20a9,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
|
||||||
|
dw $0000
|
||||||
|
dw $40b1,$0000
|
||||||
|
dw $80b2,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$80b8,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$4099,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000
|
||||||
|
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000,$80a1,$0000,$0000
|
||||||
|
dw $80a2,$0000,$0000,$0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000,$80c6,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $20a8,$0000
|
||||||
|
dw $80ba,$0000,$0000,$0000
|
||||||
|
dw $80b9,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$80cc,$0000,$40cc,$0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$80bf,$0000
|
||||||
|
dw $40be
|
||||||
|
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000,$40c2,$0000,$0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $80c3,$40c1,$0000,$0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $80c2,$0000,$0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $80c5
|
||||||
|
dw $80c4,$0000,$0000
|
||||||
|
dw $20b6,$0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000,$0000,$0000,$0000
|
||||||
|
dw $20cc
|
||||||
|
dw $40bc,$10bc,$80cb
|
||||||
|
dw $0000
|
||||||
|
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$0000,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000,$0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000,$0000,$0000,$0000
|
||||||
|
dw $ffff ; indicates the end - we can drop this
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
org $02b5c4 ; -- moving right routine 135c4
|
||||||
|
jsl WarpRight
|
||||||
|
org $02b665 ; -- moving left routine
|
||||||
|
jsl WarpLeft
|
||||||
|
org $02b713 ; -- moving down routine
|
||||||
|
jsl WarpDown
|
||||||
|
org $02b7b4 ; -- moving up routine
|
||||||
|
jsl WarpUp
|
||||||
|
org $02bd80
|
||||||
|
jsl AdjustTransition
|
||||||
|
nop
|
||||||
|
|
||||||
|
;turn off linking doors -- see .notRoomLinkDoor label in Bank02.asm
|
||||||
|
org $02b5a6
|
||||||
|
bra NotLinkDoor1
|
||||||
|
org $02b5b6
|
||||||
|
NotLinkDoor1:
|
||||||
|
org $02b647
|
||||||
|
bra NotLinkDoor2
|
||||||
|
org $02b657
|
||||||
|
NotLinkDoor2:
|
||||||
|
|
||||||
|
|
||||||
|
; Staircase routine
|
||||||
|
org $01c3d4 ;(PC: c3d4)
|
||||||
|
jsl RecordStairType : nop
|
||||||
|
org $02a1e7 ;(PC: 121e7)
|
||||||
|
jsl SpiralWarp
|
||||||
|
|
||||||
|
|
||||||
|
; Graphics fix
|
||||||
|
org $02895d
|
||||||
|
Splicer:
|
||||||
|
jsl GfxFixer
|
||||||
|
lda $b1 : beq .done
|
||||||
|
rts
|
||||||
|
nop #5
|
||||||
|
.done
|
||||||
|
|
||||||
|
org $00fda4
|
||||||
|
Dungeon_InitStarTileCh:
|
||||||
|
org $00d6ae ;(PC: 56ae)
|
||||||
|
LoadTransAuxGfx:
|
||||||
|
org $00df5a ;(PC: 5f5a)
|
||||||
|
PrepTransAuxGfx:
|
||||||
|
;org $0ffd65 ;(PC: 07fd65)
|
||||||
|
;Dungeon_LoadCustomTileAttr:
|
||||||
|
;org $01fec1
|
||||||
|
;Dungeon_ApproachFixedColor_variable:
|
||||||
|
;org $a0f972 ; Rando version
|
||||||
|
;LoadRoomHook:
|
||||||
|
org $1bee74 ;(PC: 0dee74)
|
||||||
|
Palette_DungBgMain:
|
||||||
|
org $1bec77
|
||||||
|
Palette_SpriteAux3:
|
||||||
|
org $1becc5
|
||||||
|
Palette_SpriteAux2:
|
||||||
|
org $1bece4
|
||||||
|
Palette_SpriteAux1:
|
||||||
|
|
||||||
|
|
||||||
|
; These two, if enabled together, have implications for vanilla BK doors in IP/Hera/Mire
|
||||||
|
; IPBJ is common enough to consider not doing this. Mire is not a concern for vanilla - maybe glitched modes
|
||||||
|
; Hera BK door back can be seen with Pot clipping - likely useful for no logic seeds
|
||||||
|
|
||||||
|
;Kill big key (1e) check for south doors
|
||||||
|
;org $1aa90
|
||||||
|
;DontCheck:
|
||||||
|
;bra .done
|
||||||
|
;nop #3
|
||||||
|
;.done
|
||||||
|
|
||||||
|
;Enable south facing bk graphic
|
||||||
|
;org $4e24
|
||||||
|
;dw $2ac8
|
||||||
|
|
||||||
|
org $01b714 ; PC: b714
|
||||||
|
OpenableDoors:
|
||||||
|
jsl CheckIfDoorsOpen
|
||||||
|
bcs .normal
|
||||||
|
rts
|
||||||
|
.normal
|
||||||
+44
@@ -0,0 +1,44 @@
|
|||||||
|
GfxFixer:
|
||||||
|
{
|
||||||
|
lda $b1 : bne .stage2
|
||||||
|
jsl LoadRoomHook ; this is the rando version - let's only call this guy once - may fix star tiles and slower loads
|
||||||
|
jsl Dungeon_InitStarTileCh
|
||||||
|
jsl LoadTransAuxGfx
|
||||||
|
;jsl Dungeon_LoadCustomTileAttr
|
||||||
|
jsl PrepTransAuxGfx
|
||||||
|
lda #$09 : sta $17 : sta $0710
|
||||||
|
jsl Palette_SpriteAux3
|
||||||
|
jsl Palette_SpriteAux2
|
||||||
|
jsl Palette_SpriteAux1
|
||||||
|
jsl Palette_DungBgMain
|
||||||
|
jsr CgramAuxToMain
|
||||||
|
inc $b1
|
||||||
|
rtl
|
||||||
|
.stage2
|
||||||
|
lda #$0a : sta $17 : sta $0710
|
||||||
|
stz $b1 : inc $b0
|
||||||
|
rtl
|
||||||
|
}
|
||||||
|
|
||||||
|
CgramAuxToMain: ; ripped this from bank02 because it ended with rts
|
||||||
|
{
|
||||||
|
rep #$20
|
||||||
|
ldx.b #$00
|
||||||
|
|
||||||
|
.loop
|
||||||
|
lda $7EC300, X : sta $7EC500, x
|
||||||
|
lda $7EC340, x : sta $7EC540, x
|
||||||
|
lda $7EC380, x : sta $7EC580, x
|
||||||
|
lda $7EC3C0, x : sta $7EC5C0, x
|
||||||
|
lda $7EC400, x : sta $7EC600, x
|
||||||
|
lda $7EC440, x : sta $7EC640, x
|
||||||
|
lda $7EC480, x : sta $7EC680, x
|
||||||
|
lda $7EC4C0, x : sta $7EC6C0, x
|
||||||
|
|
||||||
|
inx #2 : cpx.b #$40 : bne .loop
|
||||||
|
sep #$20
|
||||||
|
|
||||||
|
; tell NMI to upload new CGRAM data
|
||||||
|
inc $15
|
||||||
|
rts
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
; code to un-pair or re-pair doors
|
||||||
|
|
||||||
|
; doorlist is loaded into 19A0 but no terminator
|
||||||
|
; new room is in A0
|
||||||
|
; for "each" door do the following: (each could mean the first four doors?)
|
||||||
|
; in lookup table, grab room and corresponding position
|
||||||
|
; find the info at 7ef000, x where x is twice the paired room
|
||||||
|
; check the corresponding bit (there are only 4)
|
||||||
|
; set the bit in 068C
|
||||||
|
|
||||||
|
; Note the carry bit is used to indicate if we should aborted (set) or not
|
||||||
|
CheckIfDoorsOpen: {
|
||||||
|
jsr TrapDoorFixer ; see normal.asm
|
||||||
|
; note we are 16bit mode right now
|
||||||
|
lda $040c : cmp #$00ff : bne .gtg
|
||||||
|
lda $a0 : dec : tax : and #$000f ; hijacked code
|
||||||
|
sec : rtl ; set carry to indicate normal behavior
|
||||||
|
|
||||||
|
.gtg
|
||||||
|
phb : phk : plb
|
||||||
|
stx $00 : ldy #$0000
|
||||||
|
.nextDoor
|
||||||
|
lda $a0 : asl : tax
|
||||||
|
lda KeyDoorOffset, x : beq .skipDoor
|
||||||
|
asl : sty $05 : !add $05 : tax
|
||||||
|
lda PairedDoorTable, x : beq .skipDoor
|
||||||
|
sta $02 : and #$00ff : asl a : tax
|
||||||
|
lda $02 : and #$ff00 : sta $03
|
||||||
|
lda $7ef000, x : and #$f000 : and $03 : beq .skipDoor
|
||||||
|
tyx : lda $068c : ora $0098c0,x : sta $068c
|
||||||
|
.skipDoor
|
||||||
|
iny #2 : cpy $00 : bne .nextDoor
|
||||||
|
plb : clc : rtl
|
||||||
|
}
|
||||||
|
|
||||||
|
; outstanding issues
|
||||||
|
; how to indicate opening for other (non-first four doors?)
|
||||||
|
; Bank01 Door Register stores the 4 bits in 068c to 400 (depending on type)
|
||||||
|
; Key collision and others depend on F0-F3 attribute not sure if extendable to other numbers
|
||||||
|
; Dungeon_ProcessTorchAndDoorInteractives.isOpenableDoor is the likely culprit for collision problems
|
||||||
|
; Saving open status to other unused rooms is tricky -- Bank 2 13947 (line 8888)
|
||||||
+257
@@ -0,0 +1,257 @@
|
|||||||
|
WarpLeft:
|
||||||
|
lda $040c : cmp.b #$ff : beq .end
|
||||||
|
lda $20 : ldx $aa
|
||||||
|
jsr CalcIndex
|
||||||
|
!add #$06 : ldy #$01 ; offsets in A, Y
|
||||||
|
jsr LoadRoomHorz
|
||||||
|
.end
|
||||||
|
jsr Cleanup
|
||||||
|
rtl
|
||||||
|
|
||||||
|
WarpRight:
|
||||||
|
lda $040c : cmp.b #$ff : beq .end
|
||||||
|
lda $20 : ldx $aa
|
||||||
|
jsr CalcIndex
|
||||||
|
!add #$12 : ldy #$ff ; offsets in A, Y
|
||||||
|
jsr LoadRoomHorz
|
||||||
|
.end
|
||||||
|
jsr Cleanup
|
||||||
|
rtl
|
||||||
|
|
||||||
|
WarpUp:
|
||||||
|
lda $040c : cmp.b #$ff : beq .end
|
||||||
|
lda $22 : ldx $a9
|
||||||
|
jsr CalcIndex
|
||||||
|
ldy #$02 ; offsets in A, Y
|
||||||
|
jsr LoadRoomVert
|
||||||
|
.end
|
||||||
|
jsr Cleanup
|
||||||
|
rtl
|
||||||
|
|
||||||
|
WarpDown:
|
||||||
|
lda $040c : cmp.b #$ff : beq .end
|
||||||
|
lda $22 : ldx $a9
|
||||||
|
jsr CalcIndex
|
||||||
|
!add #$0c : ldy #$ff ; offsets in A, Y
|
||||||
|
jsr LoadRoomVert
|
||||||
|
.end
|
||||||
|
jsr Cleanup
|
||||||
|
rtl
|
||||||
|
|
||||||
|
TrapDoorFixer:
|
||||||
|
lda $ab : and #$0038 : beq .end
|
||||||
|
xba : asl #2 : sta $00
|
||||||
|
stz $0468 : lda $068c : ora $00 : sta $068c
|
||||||
|
.end
|
||||||
|
stz $ab ; clear our ab here because we don't need it anymore
|
||||||
|
rts
|
||||||
|
|
||||||
|
Cleanup:
|
||||||
|
inc $11
|
||||||
|
lda $ef
|
||||||
|
rts
|
||||||
|
|
||||||
|
;A needs be to the low coordinate, x needs to be either 0 for left,upper or non-zero for right,down
|
||||||
|
; This sets A (00,02,04) and stores half that at $04 for later use, (src door)
|
||||||
|
CalcIndex: ; A->low byte of Link's Coord, X-> Link's quadrant, DoorOffset x 2 -> A, DoorOffset -> $04 (vert/horz agnostic)
|
||||||
|
cpx.b #00 : bne .largeDoor
|
||||||
|
cmp.b #$d0 : bcc .smallDoor
|
||||||
|
lda #$01 : bra .done ; Middle Door
|
||||||
|
.smallDoor lda #$00 : bra .done
|
||||||
|
.largeDoor lda #$02
|
||||||
|
.done
|
||||||
|
sta $04
|
||||||
|
asl
|
||||||
|
rts
|
||||||
|
|
||||||
|
; Y is an adjustment for main direction of travel
|
||||||
|
; A is a door table row offset
|
||||||
|
LoadRoomHorz:
|
||||||
|
{
|
||||||
|
phb : phk : plb
|
||||||
|
sty $06 : sta $07 : lda $a0 : pha ; Store normal room on stack
|
||||||
|
lda $07 : jsr LookupNewRoom ; New room is in A, Room Data is in $00
|
||||||
|
lda $01 : and.b #$80 : cmp #$80 : bne .gtg
|
||||||
|
pla : sta $a0 : bra .end ; Restore normal room, abort (straight staircases and open edges can get in this routine)
|
||||||
|
|
||||||
|
.gtg ;Good to Go!
|
||||||
|
pla ; Throw away normal room (don't fill up the stack)
|
||||||
|
lda $a0 : and.b #$0F : asl a : !sub $23 : !add $06 : sta $02
|
||||||
|
ldy #$00 : jsr ShiftVariablesMainDir
|
||||||
|
lda $aa : lsr : sta $07
|
||||||
|
lda $a0 : and.b #$F0 : lsr #3 : !add $07 : !sub $21 : sta $02 : sta $03
|
||||||
|
jsr ShiftLowCoord
|
||||||
|
jsr ShiftQuad
|
||||||
|
jsr ShiftCameraBounds
|
||||||
|
ldy #$01 : jsr ShiftVariablesSubDir ; flip direction
|
||||||
|
lda $01 : sta $ab : and #$04 : lsr #2
|
||||||
|
sta $ee
|
||||||
|
lda $01 : and #$10 : beq .end : stz $0468
|
||||||
|
.end
|
||||||
|
plb ; restore db register
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
; Y is an adjustment for main direction of travel (stored at $06)
|
||||||
|
; A is a door table row offset (stored a $07)
|
||||||
|
LoadRoomVert:
|
||||||
|
{
|
||||||
|
phb : phk : plb
|
||||||
|
sty $06 : sta $07 : lda $a0 : pha ; Store normal room on stack
|
||||||
|
lda $07 : jsr LookupNewRoom ; New room is in A, Room Data is in $00
|
||||||
|
lda $01 : and.b #$80 : cmp #$80 : bne .gtg
|
||||||
|
pla : sta $a0 : bra .end ; Restore normal room, abort (straight staircases and open edges can get in this routine)
|
||||||
|
|
||||||
|
.gtg ;Good to Go!
|
||||||
|
pla ; Throw away normal room (don't fill up the stack)
|
||||||
|
lda $a0 : and.b #$F0 : lsr #3 : !sub $21 : !add $06 : sta $02
|
||||||
|
ldy #$01 : jsr ShiftVariablesMainDir
|
||||||
|
lda $a0 : and.b #$0F : asl a : !add $a9 : !sub $23 : sta $02 : sta $03
|
||||||
|
jsr ShiftLowCoord
|
||||||
|
jsr ShiftQuad
|
||||||
|
jsr ShiftCameraBounds
|
||||||
|
ldy #$00 : jsr ShiftVariablesSubDir ; flip direction
|
||||||
|
lda $01 : sta $ab : and #$04 : lsr #2
|
||||||
|
sta $ee
|
||||||
|
.end
|
||||||
|
plb ; restore db register
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
LookupNewRoom: ; expects data offset to be in A
|
||||||
|
{
|
||||||
|
rep #$30 : and #$00FF ;sanitize A reg (who knows what is in the high byte)
|
||||||
|
sta $00 ; offset in 00
|
||||||
|
lda $a2 : tax ; probably okay loading $a3 in the high byte
|
||||||
|
lda DoorOffset,x : and #$00FF ;we only want the low byte
|
||||||
|
asl #3 : sta $02 : !add $02 : !add $02 ;multiply by 24 (data size)
|
||||||
|
!add $00 ; should now have the offset of the address I want to load
|
||||||
|
tax : lda DoorTable,x : sta $00
|
||||||
|
and #$00FF : sta $a0 ; assign new room
|
||||||
|
sep #$30
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
; INPUTS-- X: Direction Index , $02: Shift Value
|
||||||
|
; Sets high bytes of various registers
|
||||||
|
ShiftVariablesMainDir:
|
||||||
|
{
|
||||||
|
lda CoordIndex,y : tax
|
||||||
|
lda $21,x : !add $02 : sta $21,x ; coordinate update
|
||||||
|
lda CameraIndex,y : tax
|
||||||
|
lda $e3,x : !add $02 : sta $e3,x ; scroll register high byte
|
||||||
|
lda CamQuadIndex,y : tax
|
||||||
|
lda $0605,x : !add $02 : sta $0605,x ; high bytes of these guys
|
||||||
|
lda $0607,x : !add $02 : sta $0607,x
|
||||||
|
lda $0601,x : !add $02 : sta $0601,x
|
||||||
|
lda $0603,x : !add $02 : sta $0603,x
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
ShiftLowCoord:
|
||||||
|
{
|
||||||
|
lda $01 : and.b #$03 ; high byte index
|
||||||
|
jsr CalcOpposingShift
|
||||||
|
lda $fe : and.b #$f0 : cmp.b #$20 : bne .lowDone
|
||||||
|
lda OppCoordIndex,y : tax
|
||||||
|
lda #$80 : !add $20,x : sta $20,x
|
||||||
|
.lowDone
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
; expects A to be (0,1,2) (dest number) and (0,1,2) (src door number) to be stored in $04
|
||||||
|
; $0127 will be set to a bitmask aaaa qxxf
|
||||||
|
; a - amount of adjust
|
||||||
|
; f - flag, if set, then amount is pos, otherwise neg.
|
||||||
|
; q - quadrant, if set, then quadrant needs to be modified
|
||||||
|
CalcOpposingShift:
|
||||||
|
{
|
||||||
|
stz $fe ; set up (can you zero out 127 alone?)
|
||||||
|
cmp.b $04 : beq .noOffset ; (equal, no shifts to do)
|
||||||
|
phy : tay ; reserve these
|
||||||
|
lda $04 : tax : tya : !sub $04 : sta $04 : cmp.b #$00 : bpl .shiftPos
|
||||||
|
lda #$40
|
||||||
|
cpx.b #$01 : beq .skipNegQuad
|
||||||
|
ora #$08
|
||||||
|
.skipNegQuad
|
||||||
|
sta $fe : lda $04 : cmp.b #$FE : beq .done ;already set $0127
|
||||||
|
lda $fe : eor #$60
|
||||||
|
bra .setDone
|
||||||
|
|
||||||
|
.shiftPos
|
||||||
|
lda #$41
|
||||||
|
cpy.b #$01 : beq .skipPosQuad
|
||||||
|
ora #$08
|
||||||
|
.skipPosQuad
|
||||||
|
sta $fe : lda $04 : cmp.b #$02 : bcs .done ;already set $0127
|
||||||
|
lda $fe : eor #$60
|
||||||
|
|
||||||
|
.setDone sta $fe
|
||||||
|
.done ply
|
||||||
|
.noOffset rts
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ShiftQuad:
|
||||||
|
{
|
||||||
|
lda $fe : and #$08 : cmp.b #$00 : beq .quadDone
|
||||||
|
lda ShiftQuadIndex,y : tax ; X should be set to either 1 (vertical) or 2 (horizontal) (for a9,aa quadrant)
|
||||||
|
lda $fe : and #$01 : cmp.b #$00 : beq .decQuad
|
||||||
|
inc $02
|
||||||
|
txa : sta $a8, x ; alter a9/aa
|
||||||
|
bra .quadDone
|
||||||
|
.decQuad
|
||||||
|
dec $02
|
||||||
|
lda #$00 : sta $a8, x ; alter a9/aa
|
||||||
|
.quadDone rts
|
||||||
|
}
|
||||||
|
|
||||||
|
ShiftVariablesSubDir:
|
||||||
|
{
|
||||||
|
lda CoordIndex,y : tax
|
||||||
|
lda $21,x : !add $02 : sta $21,x ; coordinate update
|
||||||
|
lda CameraIndex,y : tax
|
||||||
|
lda $e3,x : !add $03 : sta $e3,x ; scroll register high byte
|
||||||
|
lda CamQuadIndex,y : tax
|
||||||
|
lda $0601,x : !add $02 : sta $0601,x
|
||||||
|
lda $0605,x : !add $02 : sta $0605,x ; high bytes of these guys
|
||||||
|
lda $0603,x : !add $03 : sta $0603,x
|
||||||
|
lda $0607,x : !add $03 : sta $0607,x
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
ShiftCameraBounds:
|
||||||
|
{
|
||||||
|
lda CamBoundIndex,y : tax ; should be 0 for horz travel (vert bounds) or 4 for vert travel (horz bounds)
|
||||||
|
rep #$30
|
||||||
|
lda $fe : and #$00f0 : asl #2 : sta $06
|
||||||
|
lda $fe : and #$0001 : cmp #$0000 : beq .subIt
|
||||||
|
lda $0618, x : !add $06 : sta $0618, x
|
||||||
|
lda $061A, x : !add $06 : sta $061A, x
|
||||||
|
sep #$30
|
||||||
|
rts
|
||||||
|
.subIt
|
||||||
|
lda $0618, x : !sub $06 : sta $0618, x
|
||||||
|
lda $061A, x : !sub $06 : sta $061A, x
|
||||||
|
sep #$30
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
AdjustTransition:
|
||||||
|
{
|
||||||
|
lda $fe : and #$00f0 : lsr
|
||||||
|
sep #$20 : cmp $0126 : bcc .reset
|
||||||
|
rep #$20
|
||||||
|
phy : ldy #$06 ; operating on vertical registers during horizontal trans
|
||||||
|
cpx.b #$02 : bcs .horizontalScrolling
|
||||||
|
ldy #$00 ; operate on horizontal regs during vert trans
|
||||||
|
.horizontalScrolling
|
||||||
|
lda $fe : and #$0001 : asl : tax
|
||||||
|
lda.l OffsetTable,x : adc $00E2,y : and.w #$FFFE : sta $00E2,y : sta $00E0,y
|
||||||
|
ply : bra .done
|
||||||
|
.reset ; clear the 0127 variable so to not disturb intra-tile doors
|
||||||
|
stz $fe
|
||||||
|
.done
|
||||||
|
rep #$20 : lda $00 : and #$01fc
|
||||||
|
rtl
|
||||||
|
}
|
||||||
+186
@@ -0,0 +1,186 @@
|
|||||||
|
RecordStairType: {
|
||||||
|
sta $a0
|
||||||
|
lda $0e : sta $045e
|
||||||
|
lda $063d, x
|
||||||
|
rtl
|
||||||
|
}
|
||||||
|
|
||||||
|
SpiralWarp: {
|
||||||
|
lda $040c : cmp.b #$ff : beq .abort ; abort if not in dungeon
|
||||||
|
lda $045e : cmp #$5e : beq .gtg ; abort if not spiral - intended room is in A!
|
||||||
|
cmp #$5f : beq .gtg
|
||||||
|
.abort
|
||||||
|
stz $045e : lda $a2 : and #$0f : rtl ; clear,run hijacked code and get out
|
||||||
|
|
||||||
|
.gtg
|
||||||
|
phb : phk : plb : phx : phy ; push stuff
|
||||||
|
jsr LookupSpiralOffset
|
||||||
|
rep #$30 : and #$00FF : asl #2 : tax
|
||||||
|
lda SpiralTable, x : sta $00
|
||||||
|
lda SpiralTable+2, x : sta $02
|
||||||
|
sep #$30
|
||||||
|
lda $00 : sta $a0
|
||||||
|
; shift quadrant if necessary
|
||||||
|
stz $07 ; this is a x quad adjuster for those blasted staircase on the edges
|
||||||
|
lda $01 : and #$01 : !sub $a9
|
||||||
|
bne .xQuad
|
||||||
|
lda $0462 : and #$04 : bne .xqCont
|
||||||
|
inc $07
|
||||||
|
.xqCont lda $22 : bne .skipXQuad ; this is an edge case
|
||||||
|
dec $23 : bra .skipXQuad ; need to -1 if $22 is 0
|
||||||
|
.xQuad sta $06 : !add $a9 : sta $a9
|
||||||
|
lda $0462 : and #$04 : bne .xCont
|
||||||
|
inc $07 ; up stairs are going to -1 the quad anyway during transition, need to add this back
|
||||||
|
.xCont ldy #$00 : jsr ShiftQuadSimple
|
||||||
|
|
||||||
|
.skipXQuad
|
||||||
|
lda $aa : lsr : sta $06 : lda $01 : and #$02 : lsr : !sub $06
|
||||||
|
beq .skipYQuad
|
||||||
|
sta $06 : asl : !add $aa : sta $aa
|
||||||
|
ldy #$01 : jsr ShiftQuadSimple
|
||||||
|
|
||||||
|
.skipYQuad
|
||||||
|
lda $01 : and #$04 : lsr : sta $048a ;fix layer calc 0->0 2->1
|
||||||
|
lda $01 : and #$08 : lsr #2 : sta $0492 ;fix from layer calc 0->0 2->1
|
||||||
|
; shift lower coordinates
|
||||||
|
lda $02 : sta $22 : bne .adjY : lda $23 : !add $07 : sta $23
|
||||||
|
.adjY lda $03 : sta $20 : bne .upDownAdj : inc $21
|
||||||
|
.upDownAdj ldx #$08
|
||||||
|
lda $0462 : and #$04 : beq .upStairs
|
||||||
|
ldx #$fd
|
||||||
|
lda $01 : and #$80 : bne .set53
|
||||||
|
; if target is also down adjust by (6,-15)
|
||||||
|
lda #$06 : !add $20 : sta $20 : lda #$eb : !add $22 : sta $22 : bra .set53
|
||||||
|
.upStairs
|
||||||
|
lda $01 : and #$80 : beq .set53
|
||||||
|
; if target is also up adjust by (-6, 14)
|
||||||
|
lda #$fa : !add $20 : sta $20 : lda #$14 : !add $22 : sta $22
|
||||||
|
bne .set53 : inc $23
|
||||||
|
.set53
|
||||||
|
txa : !add $22 : sta $53
|
||||||
|
|
||||||
|
lda $01 : and #$10 : sta $07 ; zeroHzCam check
|
||||||
|
ldy #$00 : jsr SetCamera
|
||||||
|
lda $01 : and #$20 : sta $07 ; zeroVtCam check
|
||||||
|
ldy #$01 : jsr SetCamera
|
||||||
|
|
||||||
|
stz $045e ; clear the staircase flag
|
||||||
|
ply : plx : plb ; pull the stuff we pushed
|
||||||
|
lda $a2 : and #$0f ; this is the code we are hijacking
|
||||||
|
rtl
|
||||||
|
}
|
||||||
|
|
||||||
|
;Sets the offset in A
|
||||||
|
LookupSpiralOffset: {
|
||||||
|
;where link currently is in $a2: quad in a8 & #$03
|
||||||
|
;count doors
|
||||||
|
stz $00 : ldx #$00 : stz $01
|
||||||
|
|
||||||
|
.loop
|
||||||
|
lda $047e, x : cmp $00 : bcc .continue
|
||||||
|
sta $00
|
||||||
|
.continue inx #2
|
||||||
|
cpx #$08 : bcc .loop
|
||||||
|
|
||||||
|
lda $00 : lsr
|
||||||
|
cmp #$01 : beq .done
|
||||||
|
|
||||||
|
; look up the quad
|
||||||
|
lda $a9 : ora $aa : and #$03 : beq .quad0
|
||||||
|
cmp #$01 : beq .quad1
|
||||||
|
cmp #$02 : beq .quad2
|
||||||
|
cmp #$03 : beq .quad3
|
||||||
|
.quad0
|
||||||
|
inc $01 : lda $a2
|
||||||
|
cmp #$0c : beq .q0diff ;gt ent
|
||||||
|
cmp #$70 : bne .done ;hc stairwell
|
||||||
|
.q0diff lda $22 : cmp #$00 : beq .secondDoor
|
||||||
|
cmp #$98 : bcc .done ;gt ent and hc stairwell
|
||||||
|
.secondDoor inc $01 : bra .done
|
||||||
|
.quad1
|
||||||
|
lda $a2
|
||||||
|
cmp #$1a : beq .q1diff ;pod compass
|
||||||
|
cmp #$26 : beq .q1diff ;swamp elbows
|
||||||
|
cmp #$6a : beq .q1diff ;pod dark basement
|
||||||
|
cmp #$76 : bne .done ;swamp drain
|
||||||
|
.q1diff lda $22 : cmp #$98 : bcc .done
|
||||||
|
inc $01 : bra .done
|
||||||
|
.quad2
|
||||||
|
lda #$03 : sta $01 : lda $a2
|
||||||
|
cmp #$5f : beq .iceu ;ice u room
|
||||||
|
cmp #$3f : bne .done ;hammer ice exception
|
||||||
|
stz $01 : bra .done
|
||||||
|
.iceu lda $22 : cmp #$78 : bcc .done
|
||||||
|
inc $01 : bra .done
|
||||||
|
.quad3 lda #$02 : sta $01 ; always 2
|
||||||
|
|
||||||
|
.done
|
||||||
|
lda $a2 : tax : lda SpiralOffset,x
|
||||||
|
!add $01 ;add a thing (0 in easy case)
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
ShiftQuadSimple: {
|
||||||
|
lda CoordIndex,y : tax
|
||||||
|
lda $20,x : beq .skip
|
||||||
|
lda $21,x : !add $06 : sta $21,x ; coordinate update
|
||||||
|
.skip
|
||||||
|
lda CamQuadIndex,y : tax
|
||||||
|
lda $0601,x : !add $06 : sta $0601,x
|
||||||
|
lda $0605,x : !add $06 : sta $0605,x ; high bytes of these guys
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
SetCamera: {
|
||||||
|
stz $04
|
||||||
|
tyx : lda $a9,x : bne .nonZeroHalf
|
||||||
|
lda CamQuadIndex,y : tax : lda $607,x : pha
|
||||||
|
lda CameraIndex,y : tax : pla : cmp $e3, x : bne .noQuadAdj
|
||||||
|
dec $e3,x
|
||||||
|
|
||||||
|
.noQuadAdj
|
||||||
|
lda $07 : bne .adj0
|
||||||
|
lda CoordIndex,y : tax
|
||||||
|
lda $20,x : beq .oddQuad
|
||||||
|
cmp #$79 : bcc .adj0
|
||||||
|
!sub #$78 : sta $04
|
||||||
|
tya : asl : !add #$04 : tax : jsr AdjCamBounds : bra .done
|
||||||
|
.oddQuad
|
||||||
|
lda #$80 : sta $04 : bra .adj1 ; this is such a weird case - quad cross boundary
|
||||||
|
.adj0
|
||||||
|
tya : asl : tax : jsr AdjCamBounds : bra .done
|
||||||
|
|
||||||
|
.nonZeroHalf ;meaning either right half or bottom half
|
||||||
|
lda $07 : bne .setQuad
|
||||||
|
lda CoordIndex,y : tax
|
||||||
|
lda $20,x : cmp #$78 : bcs .setQuad
|
||||||
|
!add #$78 : sta $04
|
||||||
|
lda CamQuadIndex,y : tax : lda $0603, x : pha
|
||||||
|
lda CameraIndex,y : tax : pla : sta $e3, x
|
||||||
|
.adj1
|
||||||
|
tya : asl : !add #$08 : tax : jsr AdjCamBounds : bra .done
|
||||||
|
|
||||||
|
.setQuad
|
||||||
|
lda CamQuadIndex,y : tax : lda $0607, x : pha
|
||||||
|
lda CameraIndex,y : tax : pla : sta $e3, x
|
||||||
|
tya : asl : !add #$0c : tax : jsr AdjCamBounds : bra .done
|
||||||
|
|
||||||
|
.done
|
||||||
|
lda CameraIndex,y : tax
|
||||||
|
lda $04 : sta $e2, x
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
; input, expects X to be an appropriate offset into the CamBoundBaseLine table
|
||||||
|
; when $04 is 0 no coordinate are added
|
||||||
|
AdjCamBounds: {
|
||||||
|
rep #$20 : lda CamBoundBaseLine, x : sta $05
|
||||||
|
lda $04 : and #$00ff : beq .common
|
||||||
|
lda CoordIndex,y : tax
|
||||||
|
lda $20, x : and #$00ff : !add $05 : sta $05
|
||||||
|
.common
|
||||||
|
lda OppCamBoundIndex,y : tax
|
||||||
|
lda $05 : sta $0618, x
|
||||||
|
inc #2 : sta $061A, x : sep #$20
|
||||||
|
rts
|
||||||
|
}
|
||||||
Vendored
+227
@@ -0,0 +1,227 @@
|
|||||||
|
org $27A000
|
||||||
|
DoorTable:
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ganon
|
||||||
|
dw $8000, $8000, $8000, $0450, $8000, $8000, $8000, $8000, $8000, $0452, $8000, $8000 ; HC Back Hall (x01)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $0112, $8000, $8000, $8000, $8000 ; Sewer Switches (x02)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x10
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x20
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;PoD Arena (x2a)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $0161, $8000, $8000, $8000, $8000, $8000, $8000 ;PoD Statue (x2b)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x30
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $0061 ; Swamp Main (x36)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x40
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $0061, $8000, $8000 ;HC West Hall (x50)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC Throne Room (x51)
|
||||||
|
dw $8000, $8000, $8000, $0401, $8000, $8000, $0462, $0162, $8000, $8000, $8000, $8000 ;HC East Hall (x52)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $0550, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $0061, $0561, $8000 ;HC West Lobby (x60)
|
||||||
|
dw $8000, $8000, $8000, $0236, $00a9, $8000, $8000, $8000, $8000, $8000, $062b, $8000 ;HC Main Lobby (x61)
|
||||||
|
dw $0452, $0152, $8000, $8000, $0561, $8000, $8000, $8000, $8000, $0203, $0203, $0203 ;HC East Lobby (x62)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;Desert Back (x63)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;TT Attic L (x64)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;TT Attic R (x65)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x66
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x67
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x68
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x69
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6a
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6b
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6c
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6d
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6e
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6f
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x70
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; HC Cellblock (x80)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Vitreous (x90)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Pre-Vitreous (xa0)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Trinexx (xa4)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Compass (xa8)
|
||||||
|
dw $8000, $8000, $8000, $04a8, $00a8, $8000, $8000, $8000, $8000, $0161, $00aa, $8000 ; Eastern Courtyard (xa9)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Map (xaa)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xb0
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xc0
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xd0
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xe0
|
||||||
Vendored
+227
@@ -0,0 +1,227 @@
|
|||||||
|
org $27A000
|
||||||
|
DoorTable:
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ganon
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; HC Back Hall (x01)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Sewer Switches (x02)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x10
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x20
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;PoD Arena (x2a)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;PoD Statue (x2b)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x30
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Swamp Main (x36)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x40
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC West Hall (x50)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC Throne Room (x51)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC East Hall (x52)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC West Lobby (x60)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC Main Lobby (x61)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC East Lobby (x62)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;Desert Back (x63)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;TT Attic L (x64)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;TT Attic R (x65)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x66
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x67
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x68
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x69
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6a
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6b
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6c
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6d
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6e
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6f
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x70
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; HC Cellblock (x80)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Vitreous (x90)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Pre-Vitreous (xa0)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Trinexx (xa4)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Compass (xa8)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Courtyard (xa9)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Map (xaa)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xb0
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xc0
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xd0
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xe0
|
||||||
Vendored
+227
@@ -0,0 +1,227 @@
|
|||||||
|
org $27A000
|
||||||
|
DoorTable:
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ganon
|
||||||
|
dw $8000, $8000, $8000, $0450, $8000, $8000, $8000, $8000, $8000, $0452, $8000, $8000 ; HC Back Hall (x01)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $0112, $8000, $8000, $8000, $8000 ; Sewer Switches (x02)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x10
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x20
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;PoD Arena (x2a)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $0161, $8000, $8000, $8000, $8000, $8000, $8000 ;PoD Statue (x2b)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x30
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $0061 ; Swamp Main (x36)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x40
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $0462, $0061, $8000, $8000 ;HC West Hall (x50)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC Throne Room (x51)
|
||||||
|
dw $8000, $8000, $8000, $0401, $8000, $8000, $0162, $0660, $8000, $8000, $8000, $8000 ;HC East Hall (x52)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $0152, $8000, $8000, $8000, $8000, $8000, $8000, $0061, $0561, $8000 ;HC West Lobby (x60)
|
||||||
|
dw $8000, $8000, $8000, $0236, $0160, $8000, $8000, $8000, $8000, $8000, $0162, $8000 ;HC Main Lobby (x61)
|
||||||
|
dw $0650, $0452, $8000, $8000, $0561, $8000, $8000, $8000, $8000, $0203, $0203, $0203 ;HC East Lobby (x62)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;Desert Back (x63)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;TT Attic L (x64)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;TT Attic R (x65)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x66
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x67
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x68
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x69
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6a
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6b
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6c
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6d
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6e
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6f
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x70
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; HC Cellblock (x80)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Vitreous (x90)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Pre-Vitreous (xa0)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Trinexx (xa4)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Compass (xa8)
|
||||||
|
dw $8000, $8000, $8000, $04a8, $00a8, $8000, $8000, $8000, $8000, $0161, $00aa, $8000 ; Eastern Courtyard (xa9)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Map (xaa)
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xb0
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xc0
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xd0
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000
|
||||||
|
dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xe0
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,21 @@
|
|||||||
|
Notes:
|
||||||
|
|
||||||
|
Ice Spike Stairs seems to be off and maybe Lonely Freezor
|
||||||
|
Pod bk ledge stairs
|
||||||
|
|
||||||
|
AgaTower usually doesn't have enough Key Door candidates
|
||||||
|
(Testing) Camera spots in Aga Tower: Push Statue, Lone Statue maybe?
|
||||||
|
(Testing Waterfall Now) Spiral stairs without keys look funny - change to Incognito instead of Normal
|
||||||
|
|
||||||
|
(Can't Fix yet) Key door on Layer 1 not working (Aga Tower)
|
||||||
|
(Can't Fix yet) Key door in HC Lobby E door not passable - look into it?
|
||||||
|
|
||||||
|
Pairing Notes
|
||||||
|
30-34 4f-37 #$18,-24
|
||||||
|
30-34 37-1f #$18,-24
|
||||||
|
30-34 1f-1f???
|
||||||
|
30-35 1f-1f
|
||||||
|
30-34 36-1e #$18,-24
|
||||||
|
30-34 1e-1f
|
||||||
|
|
||||||
|
inconsistencies are caused by $0492 being set wrong
|
||||||
Reference in New Issue
Block a user