Fixes to Aga Tower staircases
Lots of initial work on key doors and other door pairs
This commit is contained in:
@@ -83,6 +83,7 @@ class World(object):
|
||||
self.spoiler = Spoiler(self)
|
||||
self.lamps_needed_for_dark_rooms = 1
|
||||
self.doors = []
|
||||
self.rooms = []
|
||||
|
||||
def intialize_regions(self):
|
||||
for region in self.regions:
|
||||
@@ -878,6 +879,25 @@ class Door(object):
|
||||
bitmask += 0x80 if self.direction == Direction.Up else 0
|
||||
return [self.roomIndex, bitmask + self.quadrant, self.shiftX, self.shiftY]
|
||||
|
||||
def small_key(self):
|
||||
self.smallKey = True
|
||||
return self
|
||||
|
||||
def big_key(self):
|
||||
self.bigKey = True
|
||||
return self
|
||||
|
||||
def toggle(self):
|
||||
self.toggle = True
|
||||
return self
|
||||
|
||||
def blocked(self):
|
||||
self.blocked = True
|
||||
return self
|
||||
|
||||
def trap(self, trapFlag):
|
||||
self.trap = trapFlag
|
||||
return self
|
||||
|
||||
def __str__(self):
|
||||
return str(self.__unicode__())
|
||||
|
||||
@@ -576,9 +576,9 @@ def shuffle_dungeon_no_repeats(world, player, available_sectors, entrance_region
|
||||
raise Exception('Rejected last option due to dead end... infinite loop ensues')
|
||||
else:
|
||||
# If there's no available region with a door, use an internal connection
|
||||
# todo: find all possibles for this door first
|
||||
connect_door = find_compatible_door_in_list_old(world, door, reachable_doors, player)
|
||||
if connect_door is not None:
|
||||
compatibles = find_all_compatible_door_in_list(door, reachable_doors)
|
||||
while len(compatibles) > 0:
|
||||
connect_door = compatibles.pop()
|
||||
logger.info(' Adding loop via %s', connect_door.name)
|
||||
# Check if valid
|
||||
if is_loop_valid(door, connect_door, sector, len(available_sectors) == 1):
|
||||
@@ -591,13 +591,14 @@ def shuffle_dungeon_no_repeats(world, player, available_sectors, entrance_region
|
||||
available_sectors.remove(connect_sector)
|
||||
sector.outstanding_doors.extend(connect_sector.outstanding_doors)
|
||||
sector.regions.extend(connect_sector.regions)
|
||||
break # skips else block with exception
|
||||
else:
|
||||
logger.info(' Not Linking %s to %s', door.name, connect_door.name)
|
||||
sector.outstanding_doors.insert(0, door)
|
||||
if len(reachable_doors) <= 2:
|
||||
raise Exception('Rejected last option due to likely improper loops...')
|
||||
else:
|
||||
raise Exception('Something has gone terribly wrong')
|
||||
raise Exception('Nothing is apparently compatible with %s', door.name)
|
||||
# Check that we used everything, we failed otherwise
|
||||
if len(available_sectors) != 1:
|
||||
logger.warning('Failed to add all regions/doors to dungeon, generation will likely fail.')
|
||||
@@ -638,18 +639,19 @@ def find_all_compatible_door_in_sectors_ex(door, sectors, reachable_doors):
|
||||
return result
|
||||
|
||||
|
||||
def find_compatible_door_in_list_old(world, door, doors, player):
|
||||
def find_all_compatible_door_in_list(door, doors):
|
||||
result = []
|
||||
for proposed_door in doors:
|
||||
if doors_compatible_ignore_keys(door, proposed_door):
|
||||
return proposed_door
|
||||
if proposed_door != door and doors_compatible_ignore_keys(door, proposed_door):
|
||||
result.append(proposed_door)
|
||||
return result
|
||||
|
||||
|
||||
# this method also assumes that sectors have been build appropriately
|
||||
def doors_compatible_ignore_keys(a, b):
|
||||
if a.type != b.type:
|
||||
return False
|
||||
# todo: test spirals linking to each other
|
||||
if a.type == DoorType.SpiralStairs:
|
||||
if a.type == DoorType.SpiralStairs and a != b:
|
||||
return True
|
||||
return a.direction == switch_dir(b.direction)
|
||||
|
||||
@@ -664,10 +666,14 @@ def is_valid(door_a, door_b, sector_a, sector_b, available_sectors):
|
||||
return False
|
||||
elif door_a.blocked and door_b.blocked: # I can't see this going well unless we are in loop generation...
|
||||
return False
|
||||
elif not door_a.blocked and not door_b.blocked:
|
||||
elif not door_a.blocked and not door_b.blocked and sector_a != sector_b:
|
||||
return sector_a.outflow() + sector_b.outflow() - 1 > 0 # door_a has been removed already, so a.outflow is reduced by one
|
||||
elif door_a.blocked or door_b.blocked:
|
||||
elif door_a.blocked or door_b.blocked and sector_a != sector_b:
|
||||
return sector_a.outflow() + sector_b.outflow() > 0
|
||||
elif sector_a == sector_b and not door_a.blocked and not door_b.blocked:
|
||||
return sector_a.outflow() - 1 > 0
|
||||
elif sector_a == sector_b and door_a.blocked or door_b.blocked:
|
||||
return sector_a.outflow() > 0
|
||||
return False # not sure how we got here, but it's a bad idea
|
||||
|
||||
|
||||
|
||||
14
Doors.py
14
Doors.py
@@ -219,26 +219,26 @@ def create_doors(world, player):
|
||||
create_dir_door(player, 'Tower Gold Knights SW', DoorType.Interior, Direction.South, 0xe0, Left, High),
|
||||
create_dir_door(player, 'Tower Gold Knights EN', DoorType.Interior, Direction.East, 0xe0, Top, High),
|
||||
create_dir_door(player, 'Tower Room 03 WN', DoorType.Interior, Direction.West, 0xe0, Bot, High),
|
||||
small_key(create_spiral_stairs(player, 'Tower Room 03 Up Stairs', DoorType.SpiralStairs, Direction.Up, 0xe0, 0, HTH, S, 0x1a, 0x6c)),
|
||||
create_spiral_stairs(player, 'Tower Room 03 Up Stairs', DoorType.SpiralStairs, Direction.Up, 0xe0, 0, HTH, S, 0x1a, 0x6c).small_key(),
|
||||
create_spiral_stairs(player, 'Tower Lone Statue Down Stairs', DoorType.SpiralStairs, Direction.Down, 0xd0, 0, HTH, S, 0x11, 0x80),
|
||||
create_dir_door(player, 'Tower Lone Statue WN', DoorType.Interior, Direction.West, 0xd0, Top, High),
|
||||
create_dir_door(player, 'Tower Dark Maze EN', DoorType.Interior, Direction.East, 0xd0, Top, High),
|
||||
small_key(create_dir_door(player, 'Tower Dark Maze ES', DoorType.Interior, Direction.East, 0xd0, Bot, High)),
|
||||
small_key(create_dir_door(player, 'Tower Dark Chargers WS', DoorType.Interior, Direction.West, 0xd0, Bot, High)),
|
||||
create_dir_door(player, 'Tower Dark Maze ES', DoorType.Interior, Direction.East, 0xd0, Bot, High).small_key(),
|
||||
create_dir_door(player, 'Tower Dark Chargers WS', DoorType.Interior, Direction.West, 0xd0, Bot, High).small_key(),
|
||||
create_spiral_stairs(player, 'Tower Dark Chargers Up Stairs', DoorType.SpiralStairs, Direction.Up, 0xd0, 2, HTH, X, 0x1b, 0x8c),
|
||||
create_spiral_stairs(player, 'Tower Dual Statues Down Stairs', DoorType.SpiralStairs, Direction.Down, 0xc0, 2, HTH, X, 0x12, 0xa0),
|
||||
create_dir_door(player, 'Tower Dual Statues WS', DoorType.Interior, Direction.West, 0xc0, Bot, High),
|
||||
create_dir_door(player, 'Tower Dark Pits ES', DoorType.Interior, Direction.East, 0xc0, Bot, High),
|
||||
create_dir_door(player, 'Tower Dark Pits EN', DoorType.Interior, Direction.East, 0xc0, Top, High),
|
||||
create_dir_door(player, 'Tower Dark Archers WS', DoorType.Interior, Direction.West, 0xc0, Top, High),
|
||||
small_key(create_spiral_stairs(player, 'Tower Dark Archers Up Stairs', DoorType.SpiralStairs, Direction.Up, 0xc0, 0, HTH, S, 0x1b, 0x6c)),
|
||||
create_spiral_stairs(player, 'Tower Dark Archers Up Stairs', DoorType.SpiralStairs, Direction.Up, 0xc0, 0, HTH, S, 0x1b, 0x6c).small_key(),
|
||||
create_spiral_stairs(player, 'Tower Red Spears Down Stairs', DoorType.SpiralStairs, Direction.Down, 0xb0, 0, HTH, S, 0x12, 0x80),
|
||||
create_dir_door(player, 'Tower Red Spears WN', DoorType.Interior, Direction.West, 0xb0, Top, High),
|
||||
create_dir_door(player, 'Tower Red Guards EN', DoorType.Interior, Direction.East, 0xb0, Top, High),
|
||||
create_dir_door(player, 'Tower Red Guards SW', DoorType.Interior, Direction.South, 0xb0, Left, High),
|
||||
create_dir_door(player, 'Tower Circle of Pots NW', DoorType.Interior, Direction.North, 0xb0, Left, High),
|
||||
small_key(create_dir_door(player, 'Tower Circle of Pots WS', DoorType.Interior, Direction.West, 0xb0, Bot, High)),
|
||||
small_key(create_dir_door(player, 'Tower Pacifist Run ES', DoorType.Interior, Direction.East, 0xb0, Bot, High)),
|
||||
create_dir_door(player, 'Tower Circle of Pots WS', DoorType.Interior, Direction.West, 0xb0, Bot, High).small_key(),
|
||||
create_dir_door(player, 'Tower Pacifist Run ES', DoorType.Interior, Direction.East, 0xb0, Bot, High).small_key(),
|
||||
create_spiral_stairs(player, 'Tower Pacifist Run Up Stairs', DoorType.SpiralStairs, Direction.Up, 0xb0, 2, LTH, X, 0x33, 0x8c),
|
||||
create_spiral_stairs(player, 'Tower Push Statue Down Stairs', DoorType.SpiralStairs, Direction.Down, 0x40, 0, HTL, X, 0x12, 0xa0),
|
||||
create_dir_door(player, 'Tower Push Statue WS', DoorType.Interior, Direction.West, 0x40, Bot, Low),
|
||||
@@ -248,7 +248,7 @@ def create_doors(world, player):
|
||||
create_dir_door(player, 'Tower Antechamber NW', DoorType.Interior, Direction.North, 0x30, Left, High),
|
||||
create_dir_door(player, 'Tower Altar SW', DoorType.Interior, Direction.South, 0x30, Left, High),
|
||||
create_dir_door(player, 'Tower Altar NW', DoorType.Normal, Direction.North, 0x30, Left, High),
|
||||
trap(blocked(create_dir_door(player, 'Tower Agahnim 1 SW', DoorType.Normal, Direction.South, 0x20, Left, High)), 0x2),
|
||||
create_dir_door(player, 'Tower Agahnim 1 SW', DoorType.Normal, Direction.South, 0x20, Left, High).blocked().trap(0x2),
|
||||
]
|
||||
|
||||
|
||||
|
||||
2
Rom.py
2
Rom.py
@@ -18,7 +18,7 @@ from EntranceShuffle import door_addresses
|
||||
|
||||
|
||||
JAP10HASH = '03a63945398191337e896e5771f77173'
|
||||
RANDOMIZERBASEHASH = '7227bd73423d4ff43e731ee436d7c596'
|
||||
RANDOMIZERBASEHASH = '1d85b39d2745d745dc02d60b1380ae9f'
|
||||
|
||||
|
||||
class JsonRom(object):
|
||||
|
||||
414
RoomData.py
Normal file
414
RoomData.py
Normal file
@@ -0,0 +1,414 @@
|
||||
from enum import Enum, unique
|
||||
|
||||
|
||||
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.TrapLow),
|
||||
# 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.TrapLow),
|
||||
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.TrapLow).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.TrapLow),
|
||||
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.TrapLow).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.TrapLow).door(Position.East2, DoorKind.NormalLow).door(Position.East2, DoorKind.TrapLow).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.TrapLow).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), # todo: looks 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.TrapLow).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.TrapLow),
|
||||
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.UnknownD7).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),
|
||||
]
|
||||
|
||||
|
||||
class Room(object):
|
||||
def __init__(self, player, index, address):
|
||||
self.player = player
|
||||
self.index = index
|
||||
self.doorListAddress = address
|
||||
self.doorList = []
|
||||
|
||||
def door(self, pos, kind):
|
||||
self.doorList.append((pos, kind))
|
||||
return self
|
||||
|
||||
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
|
||||
|
||||
|
||||
@unique
|
||||
class DoorKind(Enum):
|
||||
Normal = 0x00
|
||||
NormalLow = 0x02
|
||||
EntranceLow = 0x04
|
||||
Waterfall = 0x08
|
||||
DungeonEntrance = 0x0A
|
||||
DungeonEntranceLow = 0x0C
|
||||
CaveEntrance = 0x0E
|
||||
CaveEntranceLow = 0x10
|
||||
IncognitoEntrance = 0x12
|
||||
DungeonChanger = 0x14
|
||||
TrapLow = 0x16
|
||||
Trap = 0x18
|
||||
UnknownD7 = 0x1A
|
||||
SmallKey = 0x1C
|
||||
BigKey = 0x1E
|
||||
StairKey = 0x20
|
||||
StairKey2 = 0x22
|
||||
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
|
||||
|
||||
|
||||
@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
|
||||
|
||||
|
||||
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
|
||||
25
Tables.py
25
Tables.py
@@ -35,3 +35,28 @@ spiral_offset_table = {
|
||||
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
|
||||
}
|
||||
@@ -184,242 +184,4 @@ $a2 - MM 162 idx 0
|
||||
$a8 - EP 168 idx 2
|
||||
$bc - TT 188 idx 1
|
||||
|
||||
Door Data:
|
||||
|
||||
Room 001 : 32 46, 93 46
|
||||
Room 002 : A1 44, A0 40, A1 16
|
||||
Room 003 : 61 0E
|
||||
Room 004 : 00 22, 60 28, 82 28, 80 36, 61 00
|
||||
Room 006 : 61 18
|
||||
Room 008 : B2 48, 81 0E, 91 40, 91 16
|
||||
|
||||
Room 010 : 10 20
|
||||
Room 011 : 60 36, 82 38, 62 1C
|
||||
Room 012 : 71 0A
|
||||
Room 013 : 61 18
|
||||
Room 014 : 60 22, 82 18, 81 0A
|
||||
Room 016 : 61 0A, 82 00
|
||||
Room 017 : 62 28, 82 28, 81 1C
|
||||
Room 018 : 40 02, 40 16, A1 02, A1 12
|
||||
Room 019 : 83 1C, 63 00
|
||||
|
||||
Room 020 : 81 1C, 22 1C, 00 00, 02 00, 61 00, 63 00, 83 00
|
||||
Room 021 : 22 18, 02 00
|
||||
Room 022 : 70 2E, 60 1C, 80 00, 00 00
|
||||
Room 024 : 30 02, 30 16
|
||||
Room 025 : 73 2E, 63 1C
|
||||
Room 026 : 80 1C, 02 1C, 12 2E, 61 1C, 62 00, 81 00
|
||||
Room 027 : 60 36, 61 00
|
||||
Room 028 : 80 36, 82 18, 60 28
|
||||
Room 029 : 00 1E
|
||||
|
||||
Room 030 : 83 18, 82 18, 80 36, 81 00
|
||||
Room 031 : 22 18, 82 38
|
||||
Room 032 : 61 18
|
||||
Room 033 : 20 1C, 70 00, 83 00
|
||||
Room 034 : 71 1C, 22 00
|
||||
Room 035 : 81 2A, 83 00
|
||||
Room 036 : 20 1E, 62 38, 60 38, 80 38, 81 0A, 00 00, 22 00, 82 00
|
||||
Room 038 : 71 1C, 60 36, 80 36, 62 00
|
||||
|
||||
Room 040 : 00 22, 71 0A
|
||||
Room 042 : 20 18, 00 1C, 83 2E, A3 02, 61 00, 81 00
|
||||
Room 043 : 82 2E, 22 2E, 00 18, 42 02
|
||||
Room 044 : 60 2E, 80 2E, 82 2E, 81 2E, 61 0E
|
||||
Room 046 : 20 00
|
||||
Room 047 : 60 2E, 81 0E
|
||||
Room 048 : 00 32, 60 38
|
||||
Room 049 : 60 1E, 82 36
|
||||
|
||||
Room 050 : 10 1C
|
||||
Room 051 : 61 18
|
||||
Room 052 : 63 00, 83 00
|
||||
Room 053 : 63 1C, 02 00, 22 00, 80 00, 83 00, A0 02
|
||||
Room 054 : 63 2E, 10 1C, 02 1C, 22 00, 83 00, A1 02
|
||||
Room 055 : 02 2E, 63 2E, 60 1C, 83 1C, 22 00, A0 02
|
||||
Room 056 : 02 2E, 22 1C
|
||||
Room 057 : 61 18, 82 1C
|
||||
Room 058 : 71 1C, 00 00, 20 00
|
||||
Room 059 : 61 00
|
||||
|
||||
Room 060 : 20 2E, 81 0E
|
||||
Room 061 : 80 36, 62 1C, 61 1C, 60 2E
|
||||
Room 062 : 80 18, 61 1C
|
||||
Room 063 : 82 18
|
||||
Room 064 : B2 40
|
||||
Room 065 : 71 18
|
||||
Room 067 : 00 1E, 80 1C, 81 1C
|
||||
Room 068 : 62 38, 82 1C, 63 00, 83 00
|
||||
Room 069 : 02 18, 60 00, 22 00, 82 00
|
||||
|
||||
Room 070 : 40 02, 90 02, B0 02
|
||||
Room 073 : 00 32, 62 36, 61 1C, 82 00
|
||||
Room 074 : 60 18, 80 18, 10 1C, 70 00, 71 0A
|
||||
Room 075 : 00 18, 60 28, 80 28
|
||||
Room 076 : 83 18
|
||||
Room 077 : 00 1C, 22 00
|
||||
Room 078 : 62 18, 00 1C
|
||||
Room 079 : 22 1C
|
||||
|
||||
Room 080 : 93 46, B1 40
|
||||
Room 081 : 10 00, 10 14
|
||||
Room 082 : 32 46, 91 40, 71 00
|
||||
Room 083 : 60 36, 82 38, 20 1C
|
||||
Room 085 : 90 02, 61 00, 61 12
|
||||
Room 086 : 60 1C, 61 0A, 82 00, 83 00
|
||||
Room 087 : 62 2E, 60 36, 83 1C, 61 0A, 22 00, 81 00
|
||||
Room 088 : 00 30, 22 1C, 81 1C, 62 2E, 61 0A, 82 00
|
||||
Room 089 : 00 1C, 61 0A, 92 40, B2 40
|
||||
|
||||
Room 090 : 81 18
|
||||
Room 091 : 81 1C, 63 18
|
||||
Room 092 : 80 2E, 02 00
|
||||
Room 093 : 60 18, 61 18, 62 18
|
||||
Room 094 : 83 1C, 80 38, 81 00, 82 00
|
||||
Room 095 : 22 1C
|
||||
Room 096 : 50 40, A3 40, A3 16, 63 00, 81 00, 81 12
|
||||
Room 097 : 42 02, 42 16, A3 02, A3 16, A1 02, A1 12, 02 00
|
||||
Room 098 : 42 40, 42 16, 30 40, 10 00, 61 00, 61 12
|
||||
Room 099 : 20 60, 36 61, 0A
|
||||
|
||||
Room 100 : 82 38
|
||||
Room 101 : 82 00
|
||||
Room 102 : B0 08, 91 40, 91 16, 90 40
|
||||
Room 103 : 20 00, 82 00, 83 00
|
||||
Room 104 : 22 18, 20 1C
|
||||
Room 106 : 20 1E
|
||||
Room 107 : 20 1E, 80 36, 82 18, 60 18
|
||||
Room 108 : 82 38, 60 18, 83 00
|
||||
Room 109 : 00 18, 60 18, 22 18
|
||||
|
||||
Room 110 : 20 18
|
||||
Room 113 : 60 1C, 91 44, B2 44
|
||||
Room 114 : 70 1C
|
||||
Room 115 : 60 36, 82 38, 80 00
|
||||
Room 116 : 80 00, 60 00
|
||||
Room 117 : 60 38, 81 00
|
||||
Room 118 : 92 02, B2 02, 30 02, 30 16
|
||||
Room 119 : 30 26, A1 0C
|
||||
|
||||
Room 123 : 61 18, 63 1C, 83 00
|
||||
Room 124 : 20 30, 83 2E, 02 1C, 22 00
|
||||
Room 125 : 81 18, 22 2E, 60 1C
|
||||
Room 126 : 81 1C, 82 36, 63 00
|
||||
Room 127 : 02 18, 60 00
|
||||
Room 129 : 30 40
|
||||
|
||||
Room 131 : 60 36, 61 0A, 82 00
|
||||
Room 132 : 71 0A
|
||||
Room 134 : 20 18, 62 1C, 81 0A, 82 00
|
||||
Room 135 : 62 38, 80 00
|
||||
Room 139 : 62 36, 82 1C, 63 00, 61 00, 00 00
|
||||
|
||||
Room 140 : 63 18, 60 38, 62 1C, 02 00, 61 00, 81 00
|
||||
Room 141 : 81 18, 62 1C, 02 00, 20 00, 82 00
|
||||
Room 142 : 20 1C
|
||||
Room 144 : 61 18
|
||||
Room 145 : 83 00
|
||||
Room 146 : 62 2E, 60 2E, 22 00, 82 00, 83 00
|
||||
Room 147 : 60 38, 80 1C, 22 00
|
||||
Room 149 : 81 00, 63 00
|
||||
|
||||
Room 150 : 82 38, 02 00
|
||||
Room 151 : 82 00, 60 00
|
||||
Room 152 : 61 0A
|
||||
Room 153 : 60 20, 71 1C, 80 00
|
||||
Room 155 : 62 1C, 00 00, 83 00
|
||||
Room 156 : 83 18, 00 00, 20 00, 22 00
|
||||
Room 157 : 20 00, 22 00, 62 00
|
||||
Room 158 : 20 22, 80 1E, 82 00, 83 00
|
||||
Room 159 : 22 18, 61 18
|
||||
|
||||
Room 160 : 00 1E
|
||||
Room 161 : 81 1C, 73 00
|
||||
Room 162 : 71 1C, 12 00, 73 00, 81 00
|
||||
Room 163 : 12 00, 61 00
|
||||
Room 164 : 61 18
|
||||
Room 165 : 20 18, 80 38, 60 38
|
||||
Room 168 : 82 38, 60 36, 81 1C, 92 40, 93 40, 73 00
|
||||
Room 169 : 12 18, 73 18, 10 1E, 32 40, 93 40, 71 00
|
||||
|
||||
Room 170 : 80 38, 32 40, 62 00, 82 00, 12 00, 61 00
|
||||
Room 171 : 60 20, 61 00
|
||||
Room 172 : 81 18
|
||||
Room 174 : 63 00
|
||||
Room 175 : 00 00, 02 00
|
||||
Room 176 : 60 18, 62 18, 82 1C
|
||||
Room 177 : 60 1E, 20 1C, 81 00, 82 00
|
||||
Room 178 : 10 1E, 82 38, 80 36, 93 40, 20 00, 61 00, 81 00, 83 00
|
||||
Room 179 : 60 1C, 32 40, 00 00, 22 00, 61 00
|
||||
|
||||
Room 180 : 00 1E
|
||||
Room 181 : 61 18
|
||||
Room 182 : 00 22, 80 36, 61 1C, 60 1C, 81 00
|
||||
Room 183 : 61 00
|
||||
Room 184 : 20 1E, 63 00
|
||||
Room 185 : 63 1C, 10 00, 71 00, 02 00
|
||||
Room 186 : 02 1C, 00 18, 62 38
|
||||
Room 187 : 00 00, 62 00, 82 00, 80 00, 63 00, 83 00
|
||||
Room 188 : 82 1C, 81 1C, 62 18, 61 2E, 02 00, 22 00, 60 00, 20 00
|
||||
|
||||
Room 190 : 81 18, 83 1C, 80 00
|
||||
Room 191 : 22 1C
|
||||
Room 192 : 62 36, 82 38, 20 20
|
||||
Room 193 : 82 1C, 83 1C, 62 36, 60 36, 61 00, 63 00, 20 00, 81 00
|
||||
Room 194 : 63 1C, 22 1C, 00 00, 02 00, 73 00, 81 00, 83 00, 20 00
|
||||
Room 195 : 02 1C, 62 38, 72 38, 82 36, 00 00, 12 00, 22 00
|
||||
Room 196 : 83 1C
|
||||
Room 197 : 22 1C, 00 00, 61 00
|
||||
Room 198 : 00 1C, 20 00, 63 00, 83 00, 61 00, 81 00
|
||||
Room 199 : 00 18, 02 00, 22 00
|
||||
|
||||
Room 200 : 81 18
|
||||
Room 201 : 70 18, 10 18, 60 00, 80 00, 71 0A
|
||||
Room 203 : 73 28
|
||||
Room 204 : 20 1E, 00 2E, 12 28
|
||||
Room 206 : 20 18
|
||||
Room 208 : 82 1C, 62 38
|
||||
Room 209 : 82 38, 00 00, 20 00, 80 00
|
||||
|
||||
Room 210 : 20 18
|
||||
Room 213 : 61 2A, 00 00
|
||||
Room 215 : 00 1A, 81 0A, 20 00
|
||||
Room 216 : 20 18, 80 36, 83 00
|
||||
Room 217 : 22 18, 82 18, 83 18
|
||||
Room 218 : 22 18
|
||||
Room 219 : 73 18, 71 0A
|
||||
|
||||
Room 220 : 12 00
|
||||
Room 223 : 71 0E
|
||||
Room 224 : 62 38, 60 38, 20 20, 61 0A
|
||||
Room 225 : A2 40, 61 0E
|
||||
Room 226 : 72 00, 81 0E
|
||||
Room 227 : B2 4A, B0 40, 61 0E
|
||||
Room 228 : 91 10, 62 00, 73 00
|
||||
Room 229 : 12 00, 71 0E
|
||||
|
||||
Room 230 : 91 10, 93 02
|
||||
Room 231 : B1 10, 32 02
|
||||
Room 232 : 81 0E
|
||||
Room 233 :
|
||||
Room 234 : 61 0E
|
||||
Room 235 : 81 0E
|
||||
Room 236 :
|
||||
Room 237 : 81 0E
|
||||
Room 238 : 81 0E
|
||||
Room 239 : 80 38, 71 0E
|
||||
|
||||
Room 240 : 61 0E, A3 02
|
||||
Room 241 : B1 10, 42 02
|
||||
Room 242 : 83 00, 81 00, 81 12
|
||||
Room 243 : 22 00, 61 00, 61 12
|
||||
Room 244 : 83 28, 81 00, 81 12
|
||||
Room 245 : 22 28, 61 00, 61 12
|
||||
Room 248 : 71 0E
|
||||
Room 249 : 61 0E
|
||||
|
||||
Room 250 : 91 04
|
||||
Room 251 : 71 0E
|
||||
Room 253 : A1 10
|
||||
Room 254 : B1 10
|
||||
Room 255 : 60 2E, 80 2E, 81 0E
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
; Gfx uses $b1 to for sub-sub-sub-module thing
|
||||
|
||||
; Hooks into various routines
|
||||
incsrc drhooks.asm
|
||||
|
||||
org $02b5c4 ; -- moving right routine 135c4
|
||||
jsl WarpRight
|
||||
@@ -20,8 +21,6 @@ jsl WarpUp
|
||||
org $02bd80
|
||||
jsl AdjustTransition
|
||||
nop
|
||||
org $01b714
|
||||
jsl TrapDoorFixer
|
||||
|
||||
;turn off linking doors -- see .notRoomLinkDoor label in Bank02.asm
|
||||
org $02b5a6
|
||||
|
||||
@@ -1,3 +1,23 @@
|
||||
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
|
||||
@@ -274,3 +294,197 @@ 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,$2053
|
||||
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
|
||||
7
asm/drhooks.asm
Normal file
7
asm/drhooks.asm
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
org $01b714 ; PC: b714
|
||||
OpenableDoors:
|
||||
jsl CheckIfDoorsOpen
|
||||
bcs .normal
|
||||
rts
|
||||
.normal
|
||||
@@ -15,3 +15,43 @@ dw $3882, $3660, $1e81
|
||||
org $1fd974 ;(PC: 0fd974) TT Bossway 0xbc
|
||||
dw $1c82, $0081
|
||||
|
||||
; 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 #$00 : stz $03
|
||||
.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 $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 fo collision problems
|
||||
; Saving open status to other unused rooms is tricky -- Bank 2 13947 (line 8888)
|
||||
@@ -44,8 +44,7 @@ TrapDoorFixer:
|
||||
stz $0468 : lda $068c : ora $00 : sta $068c
|
||||
.end
|
||||
stz $ab ; clear our ab here because we don't need it anymore
|
||||
lda $a0 : dec : tax
|
||||
rtl
|
||||
rts
|
||||
|
||||
Cleanup:
|
||||
inc $11
|
||||
|
||||
@@ -13,7 +13,7 @@ SpiralWarp: {
|
||||
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 highjack code and get out
|
||||
stz $045e : lda $a2 : and #$0f : rtl ; clear,run highjack code and get out
|
||||
|
||||
.gtg
|
||||
phb : phk : plb : phx : phy ; push stuff
|
||||
@@ -61,7 +61,7 @@ SpiralWarp: {
|
||||
lda $01 : and #$20 : sta $07 ; zeroVtCam check
|
||||
ldy #$01 : jsr SetCamera
|
||||
|
||||
stz $045e
|
||||
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
|
||||
@@ -103,7 +103,7 @@ LookupSpiralOffset: {
|
||||
|
||||
.done
|
||||
lda $a2 : tax : lda SpiralOffset,x
|
||||
!add $01 ;add a thing (0 in .easy)
|
||||
!add $01 ;add a thing (0 in easy case)
|
||||
rts
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user