Enemizer refinement

This commit is contained in:
aerinon
2023-05-19 08:53:01 -06:00
parent 907639b984
commit 503be6aa91
23 changed files with 1365 additions and 846 deletions

View File

@@ -2191,7 +2191,8 @@ 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, forced_item=None, player_address=None): def __init__(self, player, name='', address=None, crystal=False, hint_text=None, parent=None, forced_item=None,
player_address=None, note=None):
self.name = name self.name = name
self.parent_region = parent self.parent_region = parent
if forced_item is not None: if forced_item is not None:
@@ -2222,6 +2223,7 @@ class Location(object):
self.type = LocationType.Normal if not crystal else LocationType.Prize self.type = LocationType.Normal if not crystal else LocationType.Prize
self.pot = None self.pot = None
self.drop = None self.drop = None
self.note = note
def can_fill(self, state, item, check_access=True): def can_fill(self, state, item, check_access=True):
if not self.valid_multiworld(state, item): if not self.valid_multiworld(state, item):
@@ -2252,6 +2254,8 @@ class Location(object):
name += f' @ {self.parent_region.dungeon.name}' name += f' @ {self.parent_region.dungeon.name}'
if world and world.players > 1: if world and world.players > 1:
name += f' ({world.get_player_names(self.player)})' name += f' ({world.get_player_names(self.player)})'
if self.note:
name += f' ({self.note})'
return name return name
def __str__(self): def __str__(self):

View File

@@ -2071,7 +2071,9 @@ mandatory_connections = [('Links House S&Q', 'Links House'),
('Lumberjack Tree (top to bottom)', 'Lumberjack Tree (bottom)'), ('Lumberjack Tree (top to bottom)', 'Lumberjack Tree (bottom)'),
('Death Mountain Return Cave E', 'Death Mountain Return Cave (right)'), ('Death Mountain Return Cave E', 'Death Mountain Return Cave (right)'),
('Death Mountain Return Cave W', 'Death Mountain Return Cave (left)'), ('Death Mountain Return Cave W', 'Death Mountain Return Cave (left)'),
('Old Man Cave Dropdown', 'Old Man Cave'), ('Old Man Cave Dropdown', 'Old Man Cave (West)'),
('Old Man Cave W', 'Old Man Cave (West)'),
('Old Man Cave E', 'Old Man Cave (East)'),
('Spectacle Rock Cave Drop', 'Spectacle Rock Cave (Bottom)'), ('Spectacle Rock Cave Drop', 'Spectacle Rock Cave (Bottom)'),
('Spectacle Rock Cave Peak Drop', 'Spectacle Rock Cave (Bottom)'), ('Spectacle Rock Cave Peak Drop', 'Spectacle Rock Cave (Bottom)'),
('Old Man House Front to Back', 'Old Man House Back'), ('Old Man House Front to Back', 'Old Man House Back'),
@@ -2434,7 +2436,7 @@ open_default_connections = [('Links House', 'Links House'),
('Links House Exit', 'Light World'), ('Links House Exit', 'Light World'),
('Big Bomb Shop', 'Big Bomb Shop'), ('Big Bomb Shop', 'Big Bomb Shop'),
('Old Man Cave (West)', 'Old Man Cave Ledge'), ('Old Man Cave (West)', 'Old Man Cave Ledge'),
('Old Man Cave (East)', 'Old Man Cave'), ('Old Man Cave (East)', 'Old Man Cave (East)'),
('Old Man Cave Exit (West)', 'Light World'), ('Old Man Cave Exit (West)', 'Light World'),
('Old Man Cave Exit (East)', 'West Death Mountain (Bottom)'), ('Old Man Cave Exit (East)', 'West Death Mountain (Bottom)'),
('Death Mountain Return Cave (West)', 'Death Mountain Return Cave (left)'), ('Death Mountain Return Cave (West)', 'Death Mountain Return Cave (left)'),
@@ -2463,7 +2465,7 @@ inverted_default_connections = [('Links House', 'Big Bomb Shop'),
('Bumper Cave (Top)', 'Dark Death Mountain Healer Fairy'), ('Bumper Cave (Top)', 'Dark Death Mountain Healer Fairy'),
('Bumper Cave Exit (Top)', 'Death Mountain Return Ledge'), ('Bumper Cave Exit (Top)', 'Death Mountain Return Ledge'),
('Bumper Cave Exit (Bottom)', 'Light World'), ('Bumper Cave Exit (Bottom)', 'Light World'),
('Dark Death Mountain Fairy', 'Old Man Cave'), ('Dark Death Mountain Fairy', 'Old Man Cave (East)'),
('Inverted Pyramid Hole', 'Pyramid'), ('Inverted Pyramid Hole', 'Pyramid'),
('Inverted Pyramid Entrance', 'Bottom of Pyramid'), ('Inverted Pyramid Entrance', 'Bottom of Pyramid'),
('Pyramid Exit', 'Hyrule Castle Courtyard') ('Pyramid Exit', 'Hyrule Castle Courtyard')
@@ -2541,7 +2543,7 @@ indirect_connections = {
'West Dark World': 'Pyramid Fairy', 'West Dark World': 'Pyramid Fairy',
'South Dark World': 'Pyramid Fairy', 'South Dark World': 'Pyramid Fairy',
'Light World': 'Pyramid Fairy', 'Light World': 'Pyramid Fairy',
'Old Man Cave': 'Old Man S&Q' 'Old Man Cave (East)': 'Old Man S&Q'
} }
# format: # format:
# Key=Name # Key=Name

View File

@@ -750,7 +750,7 @@ vanilla_pots = {
Pot(88, 14, PotItem.SmallMagic, 'Bumper Cave (bottom)', obj=RoomObject(0x0AADED, [0xB3, 0x73, 0xFA])), Pot(88, 14, PotItem.SmallMagic, 'Bumper Cave (bottom)', obj=RoomObject(0x0AADED, [0xB3, 0x73, 0xFA])),
Pot(92, 14, PotItem.Heart, 'Bumper Cave (bottom)', obj=RoomObject(0x0AADF0, [0xBB, 0x73, 0xFA])), Pot(92, 14, PotItem.Heart, 'Bumper Cave (bottom)', obj=RoomObject(0x0AADF0, [0xBB, 0x73, 0xFA])),
Pot(96, 14, PotItem.SmallMagic, 'Bumper Cave (bottom)', obj=RoomObject(0x0AADF3, [0xC3, 0x73, 0xFA]))], Pot(96, 14, PotItem.SmallMagic, 'Bumper Cave (bottom)', obj=RoomObject(0x0AADF3, [0xC3, 0x73, 0xFA]))],
0xF1: [Pot(64, 5, PotItem.Heart, 'Old Man Cave', obj=RoomObject(0x0AA6B2, [0x83, 0x2B, 0xFA]))], 0xF1: [Pot(64, 5, PotItem.Heart, 'Old Man Cave (East)', obj=RoomObject(0x0AA6B2, [0x83, 0x2B, 0xFA]))],
0xF3: [Pot(0x28, 0x14, PotItem.Nothing, 'Elder House', obj=RoomObject(0x0AA76F, [0x53, 0xA3, 0xFA])), 0xF3: [Pot(0x28, 0x14, PotItem.Nothing, 'Elder House', obj=RoomObject(0x0AA76F, [0x53, 0xA3, 0xFA])),
Pot(0x2C, 0x14, PotItem.Nothing, 'Elder House', obj=RoomObject(0x0AA772, [0x5B, 0xA3, 0xFA])), Pot(0x2C, 0x14, PotItem.Nothing, 'Elder House', obj=RoomObject(0x0AA772, [0x5B, 0xA3, 0xFA])),
Pot(0x30, 0x14, PotItem.Nothing, 'Elder House', obj=RoomObject(0x0AA775, [0x63, 0xA3, 0xFA]))], Pot(0x30, 0x14, PotItem.Nothing, 'Elder House', obj=RoomObject(0x0AA775, [0x63, 0xA3, 0xFA]))],

View File

@@ -3,7 +3,7 @@ from Items import ItemFactory
from BaseClasses import Region, Location, Entrance, RegionType, Shop, ShopType, LocationType, PotItem, PotFlags from BaseClasses import Region, Location, Entrance, RegionType, Shop, ShopType, LocationType, PotItem, PotFlags
from PotShuffle import key_drop_data, vanilla_pots, choose_pots, PotSecretTable from PotShuffle import key_drop_data, vanilla_pots, choose_pots, PotSecretTable
from source.dungeon.EnemyList import setup_enemy_locations from source.dungeon.EnemyList import setup_enemy_locations, enemy_names
def create_regions(world, player): def create_regions(world, player):
@@ -119,7 +119,8 @@ def create_regions(world, player):
create_cave_region(player, 'Lumberjack Tree (top)', 'a drop\'s exit', ['Lumberjack Tree'], ['Lumberjack Tree (top to bottom)']), create_cave_region(player, 'Lumberjack Tree (top)', 'a drop\'s exit', ['Lumberjack Tree'], ['Lumberjack Tree (top to bottom)']),
create_cave_region(player, 'Lumberjack Tree (bottom)', 'a drop\'s exit', None, ['Lumberjack Tree Exit']), create_cave_region(player, 'Lumberjack Tree (bottom)', 'a drop\'s exit', None, ['Lumberjack Tree Exit']),
create_cave_region(player, 'Lumberjack House', 'a boring house'), create_cave_region(player, 'Lumberjack House', 'a boring house'),
create_cave_region(player, 'Old Man Cave', 'a connector', ['Old Man'], ['Old Man Cave Exit (East)']), create_cave_region(player, 'Old Man Cave (West)', 'a connector', ['Old Man'], ['Old Man Cave E']),
create_cave_region(player, 'Old Man Cave (East)', 'a connector', None, ['Old Man Cave Exit (East)', 'Old Man Cave W']),
create_cave_region(player, 'Old Man Cave Ledge', 'a connector', None, ['Old Man Cave Exit (West)', 'Old Man Cave Dropdown']), create_cave_region(player, 'Old Man Cave Ledge', 'a connector', None, ['Old Man Cave Exit (West)', 'Old Man Cave Dropdown']),
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']),
@@ -1032,7 +1033,10 @@ def adjust_locations(world, player):
loc.type = LocationType.Drop loc.type = LocationType.Drop
snes_address, room, sprite_idx = datum[1] snes_address, room, sprite_idx = datum[1]
loc.address = snes_address loc.address = snes_address
world.data_tables[player].uw_enemy_table.room_map[room][sprite_idx].location = loc sprite = world.data_tables[player].uw_enemy_table.room_map[room][sprite_idx]
sprite.location = loc
if world.enemy_shuffle[player] != 'none':
loc.note = enemy_names[sprite.kind]
else: else:
loc.type = LocationType.Pot loc.type = LocationType.Pot
pot, pot_index = next((p, i) for i, p in enumerate(vanilla_pots[datum[1]]) if p.item == PotItem.Key) pot, pot_index = next((p, i) for i, p in enumerate(vanilla_pots[datum[1]]) if p.item == PotItem.Key)
@@ -1046,7 +1050,6 @@ def adjust_locations(world, player):
else: else:
key_item = loc.item key_item = loc.item
key_item.location = None key_item.location = None
loc.forced_item = None loc.forced_item = None
loc.item = None loc.item = None
loc.event = False loc.event = False

6
Rom.py
View File

@@ -34,12 +34,13 @@ from InitialSram import InitialSram
from source.classes.SFX import randomize_sfx from source.classes.SFX import randomize_sfx
from source.item.FillUtil import valid_pot_items from source.item.FillUtil import valid_pot_items
from source.dungeon.EnemyList import EnemySprite from source.dungeon.EnemyList import EnemySprite
from source.dungeon.RoomObject import DoorObject
from source.enemizer.Bossmizer import boss_writes from source.enemizer.Bossmizer import boss_writes
from source.enemizer.Enemizer import write_enemy_shuffle_settings from source.enemizer.Enemizer import write_enemy_shuffle_settings
JAP10HASH = '03a63945398191337e896e5771f77173' JAP10HASH = '03a63945398191337e896e5771f77173'
RANDOMIZERBASEHASH = 'e1bf0b1e7ff799fcb6c7c16be9dab7f0' RANDOMIZERBASEHASH = '79a57594c59b3fa2e9cf344fc7437bf9'
class JsonRom(object): class JsonRom(object):
@@ -1399,7 +1400,8 @@ def patch_rom(world, rom, player, team, is_mystery=False):
for room in world.rooms: for room in world.rooms:
if room.player == player and room.modified: if room.player == player and room.modified:
if room.index in world.data_tables[player].room_list: if room.index in world.data_tables[player].room_list:
world.data_tables[player].room_list[room.index].doors = room.doorList t = [DoorObject(x[0], x[1]) for x in room.doorList]
world.data_tables[player].room_list[room.index].doors = t
else: else:
rom.write_bytes(room.address(), room.rom_data()) rom.write_bytes(room.address(), room.rom_data())

View File

@@ -868,6 +868,8 @@ def drop_rules(world, player):
if enemy.location.parent_region.name in special_rules_check: if enemy.location.parent_region.name in special_rules_check:
rule = special_rules_for_region(world, player, enemy.location.parent_region.name, rule = special_rules_for_region(world, player, enemy.location.parent_region.name,
enemy.location, rule) enemy.location, rule)
if rule.rule_lambda is None:
raise Exception(f'Bad rule for enemy drop. Need to inspect this case: {hex(enemy.kind)}')
add_rule_new(enemy.location, rule) add_rule_new(enemy.location, rule)
@@ -1101,7 +1103,8 @@ def add_conditional_lamps(world, player):
'Sewers Water': {'sewer': True, 'entrances': ['Sewers Water S', 'Sewers Water W'], 'locations': []}, 'Sewers Water': {'sewer': True, 'entrances': ['Sewers Water S', 'Sewers Water W'], 'locations': []},
'Sewers Dark Aquabats': {'sewer': True, 'entrances': ['Sewers Dark Aquabats N', 'Sewers Dark Aquabats ES'], 'locations': []}, 'Sewers Dark Aquabats': {'sewer': True, 'entrances': ['Sewers Dark Aquabats N', 'Sewers Dark Aquabats ES'], 'locations': []},
'Sewers Key Rat': {'sewer': True, 'entrances': ['Sewers Key Rat S', 'Sewers Key Rat NE'], 'locations': ['Hyrule Castle - Key Rat Key Drop']}, 'Sewers Key Rat': {'sewer': True, 'entrances': ['Sewers Key Rat S', 'Sewers Key Rat NE'], 'locations': ['Hyrule Castle - Key Rat Key Drop']},
'Old Man Cave': {'sewer': False, 'entrances': ['Old Man Cave Exit (East)']}, 'Old Man Cave (East)': {'sewer': False, 'entrances': ['Old Man Cave Exit (East)', 'Old Man Cave W']},
'Old Man Cave (West)': {'sewer': False, 'entrances': ['Old Man Cave E']},
'Old Man House Back': {'sewer': False, 'entrances': ['Old Man House Back to Front', 'Old Man House Exit (Top)']}, 'Old Man House Back': {'sewer': False, 'entrances': ['Old Man House Back to Front', 'Old Man House Exit (Top)']},
'Death Mountain Return Cave (left)': {'sewer': False, 'entrances': ['Death Mountain Return Cave E', 'Death Mountain Return Cave Exit (West)']}, 'Death Mountain Return Cave (left)': {'sewer': False, 'entrances': ['Death Mountain Return Cave E', 'Death Mountain Return Cave Exit (West)']},
'Death Mountain Return Cave (right)': {'sewer': False, 'entrances': ['Death Mountain Return Cave Exit (East)', 'Death Mountain Return Cave W']}, 'Death Mountain Return Cave (right)': {'sewer': False, 'entrances': ['Death Mountain Return Cave Exit (East)', 'Death Mountain Return Cave W']},

View File

@@ -724,6 +724,25 @@ def load_yaml(path_list):
return yaml.load(urllib.request.urlopen(path), Loader=yaml.FullLoader) return yaml.load(urllib.request.urlopen(path), Loader=yaml.FullLoader)
yaml_cache = {}
def load_cached_yaml(path_list):
path = os.path.join(*path_list)
if path in yaml_cache:
return yaml_cache[path]
else:
if os.path.exists(Path(path)):
with open(path, "r", encoding="utf-8") as f:
data = yaml.load(f, Loader=yaml.SafeLoader)
yaml_cache[path] = data
return data
elif urllib.parse.urlparse(path).scheme in ['http', 'https']:
data = yaml.load(urllib.request.urlopen(path), Loader=yaml.FullLoader)
yaml_cache[path] = data
return data
if __name__ == '__main__': if __name__ == '__main__':
# make_new_base2current() # make_new_base2current()
# read_entrance_data(old_rom=sys.argv[1]) # read_entrance_data(old_rom=sys.argv[1])

Binary file not shown.

View File

@@ -208,6 +208,11 @@ class CustomSettings(object):
return self.file_source['drops'] return self.file_source['drops']
return None return None
def get_enemies(self):
if 'enemies' in self.file_source:
return self.file_source['enemies']
return None
def create_from_world(self, world, race): def create_from_world(self, world, race):
self.player_range = range(1, world.players + 1) self.player_range = range(1, world.players + 1)
settings_dict, meta_dict = {}, {} settings_dict, meta_dict = {}, {}

View File

@@ -280,7 +280,7 @@ class SpriteType(FastEnum):
def init_enemy_stats(): def init_enemy_stats():
stats = { stats = {
EnemySprite.Raven: EnemyStats(EnemySprite.Raven, False, True, (6, 2), health=(4, 8), dmg=(1, 8), dmask=0x80), EnemySprite.Raven: EnemyStats(EnemySprite.Raven, False, False, (6, 2), health=(4, 8), dmg=(1, 8), dmask=0x80),
EnemySprite.Vulture: EnemyStats(EnemySprite.Vulture, False, True, 6, health=6, dmg=3, dmask=0x80), EnemySprite.Vulture: EnemyStats(EnemySprite.Vulture, False, True, 6, health=6, dmg=3, dmask=0x80),
EnemySprite.CorrectPullSwitch: EnemyStats(EnemySprite.CorrectPullSwitch, True, ignore=True, dmg=2), EnemySprite.CorrectPullSwitch: EnemyStats(EnemySprite.CorrectPullSwitch, True, ignore=True, dmg=2),
EnemySprite.WrongPullSwitch: EnemyStats(EnemySprite.WrongPullSwitch, True, ignore=True, dmg=2), EnemySprite.WrongPullSwitch: EnemyStats(EnemySprite.WrongPullSwitch, True, ignore=True, dmg=2),
@@ -301,10 +301,10 @@ def init_enemy_stats():
EnemySprite.Wiseman: EnemyStats(EnemySprite.Wiseman, True, dmg=0), EnemySprite.Wiseman: EnemyStats(EnemySprite.Wiseman, True, dmg=0),
EnemySprite.Hoarder: EnemyStats(EnemySprite.Hoarder, False, False, health=2, dmg=2), EnemySprite.Hoarder: EnemyStats(EnemySprite.Hoarder, False, False, health=2, dmg=2),
EnemySprite.MiniMoldorm: EnemyStats(EnemySprite.MiniMoldorm, False, True, 2, health=3, dmg=3), EnemySprite.MiniMoldorm: EnemyStats(EnemySprite.MiniMoldorm, False, True, 2, health=3, dmg=3),
EnemySprite.Poe: EnemyStats(EnemySprite.Poe, False, True, 6, health=8, dmg=5, dmask=0x80), EnemySprite.Poe: EnemyStats(EnemySprite.Poe, False, False, 6, health=8, dmg=5, dmask=0x80),
EnemySprite.Smithy: EnemyStats(EnemySprite.Smithy, True, dmg=0), EnemySprite.Smithy: EnemyStats(EnemySprite.Smithy, True, dmg=0),
EnemySprite.Arrow: EnemyStats(EnemySprite.Arrow, True, ignore=True, dmg=1), EnemySprite.Arrow: EnemyStats(EnemySprite.Arrow, True, ignore=True, dmg=1),
EnemySprite.Statue: EnemyStats(EnemySprite.Statue, True, ignore=True, dmg=0), EnemySprite.Statue: EnemyStats(EnemySprite.Statue, False, ignore=True, dmg=0),
EnemySprite.FluteQuest: EnemyStats(EnemySprite.FluteQuest, True, dmg=0, dmask=0x40), EnemySprite.FluteQuest: EnemyStats(EnemySprite.FluteQuest, True, dmg=0, dmask=0x40),
EnemySprite.CrystalSwitch: EnemyStats(EnemySprite.CrystalSwitch, True, ignore=True, dmg=0), EnemySprite.CrystalSwitch: EnemyStats(EnemySprite.CrystalSwitch, True, ignore=True, dmg=0),
EnemySprite.SickKid: EnemyStats(EnemySprite.SickKid, True, dmg=0), EnemySprite.SickKid: EnemyStats(EnemySprite.SickKid, True, dmg=0),
@@ -362,7 +362,7 @@ def init_enemy_stats():
EnemySprite.ArmosStatue: EnemyStats(EnemySprite.ArmosStatue, False, True, 5, health=8), EnemySprite.ArmosStatue: EnemyStats(EnemySprite.ArmosStatue, False, True, 5, health=8),
EnemySprite.ArmosKnight: EnemyStats(EnemySprite.ArmosKnight, True, False, dmg=1, dmask=0x10), EnemySprite.ArmosKnight: EnemyStats(EnemySprite.ArmosKnight, True, False, dmg=1, dmask=0x10),
EnemySprite.Lanmolas: EnemyStats(EnemySprite.Lanmolas, True, False, dmg=4, dmask=0x10), EnemySprite.Lanmolas: EnemyStats(EnemySprite.Lanmolas, True, False, dmg=4, dmask=0x10),
EnemySprite.FireballZora: EnemyStats(EnemySprite.Zora, False, True, 4, health=8, dmg=1), EnemySprite.FireballZora: EnemyStats(EnemySprite.FireballZora, False, False, 4, health=8, dmg=1),
EnemySprite.Zora: EnemyStats(EnemySprite.Zora, False, True, 4, health=8, dmg=1), EnemySprite.Zora: EnemyStats(EnemySprite.Zora, False, True, 4, health=8, dmg=1),
EnemySprite.DesertStatue: EnemyStats(EnemySprite.DesertStatue, True, dmg=2), EnemySprite.DesertStatue: EnemyStats(EnemySprite.DesertStatue, True, dmg=2),
EnemySprite.Crab: EnemyStats(EnemySprite.Crab, False, True, 1, health=2, dmg=5), EnemySprite.Crab: EnemyStats(EnemySprite.Crab, False, True, 1, health=2, dmg=5),
@@ -398,6 +398,7 @@ def init_enemy_stats():
EnemySprite.BottleMerchant: EnemyStats(EnemySprite.BottleMerchant, True, dmg=0, dmask=0x40), EnemySprite.BottleMerchant: EnemyStats(EnemySprite.BottleMerchant, True, dmg=0, dmask=0x40),
EnemySprite.Zelda: EnemyStats(EnemySprite.Zelda, True, dmg=0), EnemySprite.Zelda: EnemyStats(EnemySprite.Zelda, True, dmg=0),
EnemySprite.Grandma: EnemyStats(EnemySprite.Grandma, True, dmg=0), EnemySprite.Grandma: EnemyStats(EnemySprite.Grandma, True, dmg=0),
EnemySprite.Bee: EnemyStats(EnemySprite.Bee, True, dmg=0),
EnemySprite.Agahnim: EnemyStats(EnemySprite.Agahnim, True, dmg=4, dmask=0x10), EnemySprite.Agahnim: EnemyStats(EnemySprite.Agahnim, True, dmg=4, dmask=0x10),
EnemySprite.FloatingSkull: EnemyStats(EnemySprite.FloatingSkull, False, True, 7, health=24, dmg=6), EnemySprite.FloatingSkull: EnemyStats(EnemySprite.FloatingSkull, False, True, 7, health=24, dmg=6),
EnemySprite.BigSpike: EnemyStats(EnemySprite.BigSpike, False, False, ignore=True, dmg=4), EnemySprite.BigSpike: EnemyStats(EnemySprite.BigSpike, False, False, ignore=True, dmg=4),
@@ -418,10 +419,10 @@ def init_enemy_stats():
EnemySprite.Arrghi: EnemyStats(EnemySprite.Arrghi, True, dmg=5, dmask=0x10), EnemySprite.Arrghi: EnemyStats(EnemySprite.Arrghi, True, dmg=5, dmask=0x10),
EnemySprite.Terrorpin: EnemyStats(EnemySprite.Terrorpin, False, True, 2, health=8, dmg=3), EnemySprite.Terrorpin: EnemyStats(EnemySprite.Terrorpin, False, True, 2, health=8, dmg=3),
EnemySprite.Blob: EnemyStats(EnemySprite.Blob, False, True, 1, health=4, dmg=5), EnemySprite.Blob: EnemyStats(EnemySprite.Blob, False, True, 1, health=4, dmg=5),
EnemySprite.Wallmaster: EnemyStats(EnemySprite.Wallmaster, True, dmg=0), EnemySprite.Wallmaster: EnemyStats(EnemySprite.Wallmaster, False, dmg=0),
EnemySprite.StalfosKnight: EnemyStats(EnemySprite.StalfosKnight, False, True, 4, health=64, dmg=5), EnemySprite.StalfosKnight: EnemyStats(EnemySprite.StalfosKnight, False, True, 4, health=64, dmg=5),
EnemySprite.HelmasaurKing: EnemyStats(EnemySprite.HelmasaurKing, True, dmg=5, dmask=0x10), EnemySprite.HelmasaurKing: EnemyStats(EnemySprite.HelmasaurKing, True, dmg=5, dmask=0x10),
EnemySprite.Bumper: EnemyStats(EnemySprite.Bumper, True, ignore=True, dmg=5), EnemySprite.Bumper: EnemyStats(EnemySprite.Bumper, False, ignore=True, dmg=5),
EnemySprite.Pirogusu: EnemyStats(EnemySprite.Pirogusu, True, dmg=5), EnemySprite.Pirogusu: EnemyStats(EnemySprite.Pirogusu, True, dmg=5),
EnemySprite.LaserEyeLeft: EnemyStats(EnemySprite.LaserEyeLeft, True, ignore=True, dmg=6), EnemySprite.LaserEyeLeft: EnemyStats(EnemySprite.LaserEyeLeft, True, ignore=True, dmg=6),
EnemySprite.LaserEyeRight: EnemyStats(EnemySprite.LaserEyeRight, True, ignore=True, dmg=6), EnemySprite.LaserEyeRight: EnemyStats(EnemySprite.LaserEyeRight, True, ignore=True, dmg=6),
@@ -430,7 +431,7 @@ def init_enemy_stats():
EnemySprite.Pengator: EnemyStats(EnemySprite.Pengator, False, True, 3, health=16, dmg=5), EnemySprite.Pengator: EnemyStats(EnemySprite.Pengator, False, True, 3, health=16, dmg=5),
EnemySprite.Kyameron: EnemyStats(EnemySprite.Kyameron, False, False, health=4, ignore=True, dmg=3), EnemySprite.Kyameron: EnemyStats(EnemySprite.Kyameron, False, False, health=4, ignore=True, dmg=3),
EnemySprite.Wizzrobe: EnemyStats(EnemySprite.Wizzrobe, False, True, 1, health=2, dmg=6), EnemySprite.Wizzrobe: EnemyStats(EnemySprite.Wizzrobe, False, True, 1, health=2, dmg=6),
EnemySprite.Zoro: EnemyStats(EnemySprite.Zoro, True, health=4, dmg=5), EnemySprite.Zoro: EnemyStats(EnemySprite.Zoro, False, True, health=4, dmg=5),
EnemySprite.Babasu: EnemyStats(EnemySprite.Babasu, False, True, 0, health=4, dmg=5), EnemySprite.Babasu: EnemyStats(EnemySprite.Babasu, False, True, 0, health=4, dmg=5),
EnemySprite.GroveOstritch: EnemyStats(EnemySprite.GroveOstritch, True, ignore=True, dmg=3), EnemySprite.GroveOstritch: EnemyStats(EnemySprite.GroveOstritch, True, ignore=True, dmg=3),
EnemySprite.GroveRabbit: EnemyStats(EnemySprite.GroveRabbit, True, ignore=True, dmg=3), EnemySprite.GroveRabbit: EnemyStats(EnemySprite.GroveRabbit, True, ignore=True, dmg=3),
@@ -442,8 +443,8 @@ def init_enemy_stats():
EnemySprite.BlueZazak: EnemyStats(EnemySprite.BlueZazak, False, True, 6, health=4, dmg=5), EnemySprite.BlueZazak: EnemyStats(EnemySprite.BlueZazak, False, True, 6, health=4, dmg=5),
EnemySprite.RedZazak: EnemyStats(EnemySprite.RedZazak, False, True, 6, health=8, dmg=5), EnemySprite.RedZazak: EnemyStats(EnemySprite.RedZazak, False, True, 6, health=8, dmg=5),
EnemySprite.Stalfos: EnemyStats(EnemySprite.Stalfos, False, True, 6, health=4, dmg=1), EnemySprite.Stalfos: EnemyStats(EnemySprite.Stalfos, False, True, 6, health=4, dmg=1),
EnemySprite.GreenZirro: EnemyStats(EnemySprite.GreenZirro, False, True, 1, health=4, dmg=5, dmask=0x80), EnemySprite.GreenZirro: EnemyStats(EnemySprite.GreenZirro, False, False, 1, health=4, dmg=5, dmask=0x80),
EnemySprite.BlueZirro: EnemyStats(EnemySprite.BlueZirro, False, True, 7, health=8, dmg=3, dmask=0x80), EnemySprite.BlueZirro: EnemyStats(EnemySprite.BlueZirro, False, False, 7, health=8, dmg=3, dmask=0x80),
EnemySprite.Pikit: EnemyStats(EnemySprite.Pikit, False, True, 2, health=12, dmg=5), EnemySprite.Pikit: EnemyStats(EnemySprite.Pikit, False, True, 2, health=12, dmg=5),
EnemySprite.OldMan: EnemyStats(EnemySprite.OldMan, True, dmg=0), EnemySprite.OldMan: EnemyStats(EnemySprite.OldMan, True, dmg=0),
@@ -476,14 +477,18 @@ def init_enemy_stats():
EnemySprite.TrinexxFireHead: EnemyStats(EnemySprite.TrinexxFireHead, True, dmg=7, dmask=0x10), EnemySprite.TrinexxFireHead: EnemyStats(EnemySprite.TrinexxFireHead, True, dmg=7, dmask=0x10),
EnemySprite.TrinexxIceHead: EnemyStats(EnemySprite.TrinexxIceHead, True, dmg=7, dmask=0x10), EnemySprite.TrinexxIceHead: EnemyStats(EnemySprite.TrinexxIceHead, True, dmg=7, dmask=0x10),
EnemySprite.Blind: EnemyStats(EnemySprite.Blind, True, dmg=5, dmask=0x10), EnemySprite.Blind: EnemyStats(EnemySprite.Blind, True, dmg=5, dmask=0x10),
EnemySprite.Swamola: EnemyStats(EnemySprite.Swamola, False, True, 0, health=16, dmg=7), EnemySprite.Swamola: EnemyStats(EnemySprite.Swamola, False, False, 0, health=16, dmg=7),
EnemySprite.Lynel: EnemyStats(EnemySprite.Lynel, False, True, 7, health=24, dmg=6), EnemySprite.Lynel: EnemyStats(EnemySprite.Lynel, False, True, 7, health=24, dmg=6),
# medallions can kill bunny beams, but we don't need that in logic per se # medallions can kill bunny beams, but we don't need that in logic per se
EnemySprite.BunnyBeam: EnemyStats(EnemySprite.BunnyBeam, False, False, ignore=True, dmg=0, dmask=0x10), EnemySprite.BunnyBeam: EnemyStats(EnemySprite.BunnyBeam, False, False, ignore=True, dmg=0, dmask=0x10),
EnemySprite.FloppingFish: EnemyStats(EnemySprite.FloppingFish, True, dmg=0), EnemySprite.FloppingFish: EnemyStats(EnemySprite.FloppingFish, False, dmg=0),
EnemySprite.Stal: EnemyStats(EnemySprite.Stal, False, True, 1, health=4, dmg=3), EnemySprite.Stal: EnemyStats(EnemySprite.Stal, False, True, 1, health=4, dmg=3),
EnemySprite.Ganon: EnemyStats(EnemySprite.Ganon, True, dmg=9, dmask=0x10), EnemySprite.Ganon: EnemyStats(EnemySprite.Ganon, True, dmg=9, dmask=0x10),
EnemySprite.SmallHeart: EnemyStats(EnemySprite.SmallHeart, True, ignore=True, dmg=0),
EnemySprite.BlueRupee: EnemyStats(EnemySprite.BlueRupee, True, ignore=True, dmg=0),
EnemySprite.RedRupee: EnemyStats(EnemySprite.RedRupee, True, ignore=True, dmg=0),
EnemySprite.BombRefill1: EnemyStats(EnemySprite.BombRefill1, True, ignore=True, dmg=0),
EnemySprite.BombRefill4: EnemyStats(EnemySprite.BombRefill4, True, ignore=True, dmg=0),
EnemySprite.Faerie: EnemyStats(EnemySprite.Faerie, True, ignore=True, dmg=0, dmask=0x10), EnemySprite.Faerie: EnemyStats(EnemySprite.Faerie, True, ignore=True, dmg=0, dmask=0x10),
EnemySprite.SmallKey: EnemyStats(EnemySprite.SmallKey, True, ignore=True, dmg=0), EnemySprite.SmallKey: EnemyStats(EnemySprite.SmallKey, True, ignore=True, dmg=0),
EnemySprite.FakeMasterSword: EnemyStats(EnemySprite.FakeMasterSword, False, False, ignore=True, dmg=0), EnemySprite.FakeMasterSword: EnemyStats(EnemySprite.FakeMasterSword, False, False, ignore=True, dmg=0),
@@ -526,11 +531,15 @@ class Sprite(object):
self.original_address = None self.original_address = None
self.static = False # don't randomize me self.static = False # don't randomize me
self.water = False # water types can spawn here self.water = False # water types can spawn here
self.embedded = False # sprite starts on impassible terrian
def copy(self): def copy(self):
sprite = Sprite(self.super_tile, self.kind, self.sub_type, self.layer, self.tile_x, self.tile_y, self.region, sprite = Sprite(self.super_tile, self.kind, self.sub_type, self.layer, self.tile_x, self.tile_y, self.region,
self.drops_item, self.drop_item_kind) self.drops_item, self.drop_item_kind)
sprite.original_address = self.original_address sprite.original_address = self.original_address
sprite.static = self.static
sprite.water = self.water
sprite.embedded = self.embedded
return sprite return sprite
def sprite_data(self): def sprite_data(self):
@@ -558,7 +567,7 @@ vanilla_sprites = {}
def create_sprite(super_tile, kind, sub_type, layer, tile_x, tile_y, region=None, def create_sprite(super_tile, kind, sub_type, layer, tile_x, tile_y, region=None,
drops_item=False, drop_item_kind=None, fix=False, water=False): drops_item=False, drop_item_kind=None, fix=False, water=False, embed=False):
if super_tile not in vanilla_sprites: if super_tile not in vanilla_sprites:
vanilla_sprites[super_tile] = [] vanilla_sprites[super_tile] = []
sprite = Sprite(super_tile, kind, sub_type, layer, tile_x, tile_y, region, drops_item, drop_item_kind) sprite = Sprite(super_tile, kind, sub_type, layer, tile_x, tile_y, region, drops_item, drop_item_kind)
@@ -566,6 +575,8 @@ def create_sprite(super_tile, kind, sub_type, layer, tile_x, tile_y, region=None
sprite.static = True sprite.static = True
if water: if water:
sprite.water = True sprite.water = True
if embed:
sprite.embedded = True
vanilla_sprites[super_tile].append(sprite) vanilla_sprites[super_tile].append(sprite)
@@ -665,7 +676,7 @@ def init_vanilla_sprites():
create_sprite(0x0013, EnemySprite.Pokey, 0x00, 0, 0x16, 0x18, 'TR Pokey 2 Bottom', True, 0xe4) create_sprite(0x0013, EnemySprite.Pokey, 0x00, 0, 0x16, 0x18, 'TR Pokey 2 Bottom', True, 0xe4)
create_sprite(0x0013, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x18) create_sprite(0x0013, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x18)
create_sprite(0x0013, EnemySprite.FloatingSkull, 0x00, 0, 0x14, 0x1a, 'TR Pokey 2 Bottom') create_sprite(0x0013, EnemySprite.FloatingSkull, 0x00, 0, 0x14, 0x1a, 'TR Pokey 2 Bottom')
create_sprite(0x0013, EnemySprite.BunnyBeam, 0x00, 0, 0x1b, 0x1b) create_sprite(0x0013, EnemySprite.BunnyBeam, 0x00, 0, 0x1b, 0x1b, 'TR Pokey 2 Bottom')
create_sprite(0x0014, EnemySprite.PipeRight, 0x00, 1, 0x0c, 0x04) create_sprite(0x0014, EnemySprite.PipeRight, 0x00, 1, 0x0c, 0x04)
create_sprite(0x0014, EnemySprite.PipeUp, 0x00, 1, 0x0f, 0x0a) create_sprite(0x0014, EnemySprite.PipeUp, 0x00, 1, 0x0f, 0x0a)
create_sprite(0x0014, EnemySprite.PipeDown, 0x00, 1, 0x19, 0x0a) create_sprite(0x0014, EnemySprite.PipeDown, 0x00, 1, 0x19, 0x0a)
@@ -693,9 +704,9 @@ def init_vanilla_sprites():
create_sprite(0x0016, EnemySprite.Hover, 0x00, 1, 0x0c, 0x18, 'Swamp Waterway', fix=True) create_sprite(0x0016, EnemySprite.Hover, 0x00, 1, 0x0c, 0x18, 'Swamp Waterway', fix=True)
create_sprite(0x0016, EnemySprite.Hover, 0x00, 1, 0x07, 0x1b, 'Swamp Waterway', fix=True) create_sprite(0x0016, EnemySprite.Hover, 0x00, 1, 0x07, 0x1b, 'Swamp Waterway', fix=True)
create_sprite(0x0016, EnemySprite.Hover, 0x00, 1, 0x14, 0x1b, 'Swamp Waterway', fix=True) create_sprite(0x0016, EnemySprite.Hover, 0x00, 1, 0x14, 0x1b, 'Swamp Waterway', fix=True)
create_sprite(0x0017, EnemySprite.Bumper, 0x00, 0, 0x07, 0x0b) create_sprite(0x0017, EnemySprite.Bumper, 0x00, 0, 0x07, 0x0b, 'Hera 5F')
create_sprite(0x0017, EnemySprite.Bumper, 0x00, 0, 0x10, 0x0e) create_sprite(0x0017, EnemySprite.Bumper, 0x00, 0, 0x10, 0x0e, 'Hera 5F')
create_sprite(0x0017, EnemySprite.Bumper, 0x00, 0, 0x07, 0x16) create_sprite(0x0017, EnemySprite.Bumper, 0x00, 0, 0x07, 0x16, 'Hera 5F')
create_sprite(0x0017, EnemySprite.HardhatBeetle, 0x00, 0, 0x15, 0x07, 'Hera 5F') create_sprite(0x0017, EnemySprite.HardhatBeetle, 0x00, 0, 0x15, 0x07, 'Hera 5F')
create_sprite(0x0017, EnemySprite.HardhatBeetle, 0x00, 0, 0x0b, 0x09, 'Hera 5F') create_sprite(0x0017, EnemySprite.HardhatBeetle, 0x00, 0, 0x0b, 0x09, 'Hera 5F')
create_sprite(0x0017, EnemySprite.FirebarCW, 0x00, 0, 0x06, 0x11, 'Hera 5F') create_sprite(0x0017, EnemySprite.FirebarCW, 0x00, 0, 0x06, 0x11, 'Hera 5F')
@@ -714,7 +725,7 @@ def init_vanilla_sprites():
create_sprite(0x001a, EnemySprite.MiniHelmasaur, 0x00, 0, 0x07, 0x10, 'PoD Falling Bridge Mid') create_sprite(0x001a, EnemySprite.MiniHelmasaur, 0x00, 0, 0x07, 0x10, 'PoD Falling Bridge Mid')
create_sprite(0x001a, EnemySprite.SpikeBlock, 0x00, 0, 0x16, 0x15, 'PoD Harmless Hellway') create_sprite(0x001a, EnemySprite.SpikeBlock, 0x00, 0, 0x16, 0x15, 'PoD Harmless Hellway')
create_sprite(0x001a, EnemySprite.SpikeBlock, 0x00, 0, 0x16, 0x17, 'PoD Harmless Hellway') create_sprite(0x001a, EnemySprite.SpikeBlock, 0x00, 0, 0x16, 0x17, 'PoD Harmless Hellway')
create_sprite(0x001a, EnemySprite.Statue, 0x00, 0, 0x15, 0x19) create_sprite(0x001a, EnemySprite.Statue, 0x00, 0, 0x15, 0x19, 'PoD Harmless Hellway')
create_sprite(0x001a, EnemySprite.SpikeBlock, 0x00, 0, 0x16, 0x19, 'PoD Harmless Hellway') create_sprite(0x001a, EnemySprite.SpikeBlock, 0x00, 0, 0x16, 0x19, 'PoD Harmless Hellway')
create_sprite(0x001a, 0x0b, SpriteType.Overlord, 0, 0x07, 0x1a) create_sprite(0x001a, 0x0b, SpriteType.Overlord, 0, 0x07, 0x1a)
create_sprite(0x001b, EnemySprite.CrystalSwitch, 0x00, 0, 0x07, 0x04) create_sprite(0x001b, EnemySprite.CrystalSwitch, 0x00, 0, 0x07, 0x04)
@@ -744,7 +755,7 @@ def init_vanilla_sprites():
create_sprite(0x001f, EnemySprite.Pengator, 0x00, 0, 0x04, 0x15, 'Ice Pengator Switch') create_sprite(0x001f, EnemySprite.Pengator, 0x00, 0, 0x04, 0x15, 'Ice Pengator Switch')
create_sprite(0x001f, EnemySprite.Pengator, 0x00, 0, 0x09, 0x15, 'Ice Pengator Switch') create_sprite(0x001f, EnemySprite.Pengator, 0x00, 0, 0x09, 0x15, 'Ice Pengator Switch')
create_sprite(0x001f, EnemySprite.AntiFairy, 0x00, 0, 0x06, 0x16, 'Ice Pengator Switch') create_sprite(0x001f, EnemySprite.AntiFairy, 0x00, 0, 0x06, 0x16, 'Ice Pengator Switch')
create_sprite(0x001f, EnemySprite.BunnyBeam, 0x00, 0, 0x07, 0x17, 'Ice Pengator Switch', fix=True) create_sprite(0x001f, EnemySprite.BunnyBeam, 0x00, 0, 0x07, 0x17, 'Ice Pengator Switch') #, fix=True)
create_sprite(0x001f, EnemySprite.Pengator, 0x00, 0, 0x0a, 0x17, 'Ice Pengator Switch') create_sprite(0x001f, EnemySprite.Pengator, 0x00, 0, 0x0a, 0x17, 'Ice Pengator Switch')
create_sprite(0x001f, EnemySprite.Pengator, 0x00, 0, 0x0a, 0x19, 'Ice Pengator Switch') create_sprite(0x001f, EnemySprite.Pengator, 0x00, 0, 0x0a, 0x19, 'Ice Pengator Switch')
create_sprite(0x001f, EnemySprite.Pengator, 0x00, 0, 0x04, 0x1b, 'Ice Pengator Switch') create_sprite(0x001f, EnemySprite.Pengator, 0x00, 0, 0x04, 0x1b, 'Ice Pengator Switch')
@@ -779,14 +790,14 @@ def init_vanilla_sprites():
create_sprite(0x0024, EnemySprite.Pokey, 0x00, 0, 0x05, 0x08, 'TR Twin Pokeys') create_sprite(0x0024, EnemySprite.Pokey, 0x00, 0, 0x05, 0x08, 'TR Twin Pokeys')
create_sprite(0x0024, EnemySprite.Medusa, 0x00, 0, 0x07, 0x08, 'TR Twin Pokeys') create_sprite(0x0024, EnemySprite.Medusa, 0x00, 0, 0x07, 0x08, 'TR Twin Pokeys')
create_sprite(0x0024, EnemySprite.Pokey, 0x00, 0, 0x0a, 0x08, 'TR Twin Pokeys') create_sprite(0x0024, EnemySprite.Pokey, 0x00, 0, 0x0a, 0x08, 'TR Twin Pokeys')
create_sprite(0x0024, EnemySprite.BunnyBeam, 0x00, 0, 0x0c, 0x0c, 'TR Twin Pokeys', fix=True) create_sprite(0x0024, EnemySprite.BunnyBeam, 0x00, 0, 0x0c, 0x0c, 'TR Twin Pokeys') #, fix=True)
create_sprite(0x0026, EnemySprite.Medusa, 0x00, 0, 0x03, 0x04) create_sprite(0x0026, EnemySprite.Medusa, 0x00, 0, 0x03, 0x04)
create_sprite(0x0026, EnemySprite.RedBari, 0x00, 0, 0x1a, 0x05, 'Swamp Right Elbow') create_sprite(0x0026, EnemySprite.RedBari, 0x00, 0, 0x1a, 0x05, 'Swamp Right Elbow')
create_sprite(0x0026, EnemySprite.RedBari, 0x00, 0, 0x05, 0x06, 'Swamp Shooters') create_sprite(0x0026, EnemySprite.RedBari, 0x00, 0, 0x05, 0x06, 'Swamp Shooters')
create_sprite(0x0026, EnemySprite.Stalfos, 0x00, 0, 0x09, 0x06, 'Swamp Shooters') create_sprite(0x0026, EnemySprite.Stalfos, 0x00, 0, 0x09, 0x06, 'Swamp Shooters')
create_sprite(0x0026, EnemySprite.Stalfos, 0x00, 0, 0x04, 0x09, 'Swamp Shooters') create_sprite(0x0026, EnemySprite.Stalfos, 0x00, 0, 0x04, 0x09, 'Swamp Shooters')
create_sprite(0x0026, EnemySprite.Medusa, 0x00, 0, 0x0c, 0x0c) create_sprite(0x0026, EnemySprite.Medusa, 0x00, 0, 0x0c, 0x0c)
create_sprite(0x0026, EnemySprite.Statue, 0x00, 0, 0x06, 0x17) create_sprite(0x0026, EnemySprite.Statue, 0x00, 0, 0x06, 0x17, fix=True)
create_sprite(0x0026, EnemySprite.FourWayShooter, 0x00, 0, 0x19, 0x17) create_sprite(0x0026, EnemySprite.FourWayShooter, 0x00, 0, 0x19, 0x17)
create_sprite(0x0026, EnemySprite.RedBari, 0x00, 0, 0x07, 0x18, 'Swamp Push Statue') create_sprite(0x0026, EnemySprite.RedBari, 0x00, 0, 0x07, 0x18, 'Swamp Push Statue')
create_sprite(0x0026, EnemySprite.Kyameron, 0x00, 0, 0x15, 0x18, 'Swamp Push Statue', water=True) create_sprite(0x0026, EnemySprite.Kyameron, 0x00, 0, 0x15, 0x18, 'Swamp Push Statue', water=True)
@@ -815,7 +826,7 @@ def init_vanilla_sprites():
create_sprite(0x002a, EnemySprite.HardhatBeetle, 0x00, 0, 0x13, 0x11, 'PoD Arena Main') create_sprite(0x002a, EnemySprite.HardhatBeetle, 0x00, 0, 0x13, 0x11, 'PoD Arena Main')
create_sprite(0x002a, EnemySprite.HardhatBeetle, 0x00, 0, 0x0f, 0x13, 'PoD Arena Main') create_sprite(0x002a, EnemySprite.HardhatBeetle, 0x00, 0, 0x0f, 0x13, 'PoD Arena Main')
create_sprite(0x002b, EnemySprite.CrystalSwitch, 0x00, 0, 0x0a, 0x11) create_sprite(0x002b, EnemySprite.CrystalSwitch, 0x00, 0, 0x0a, 0x11)
create_sprite(0x002b, EnemySprite.Statue, 0x00, 0, 0x0a, 0x0a) create_sprite(0x002b, EnemySprite.Statue, 0x00, 0, 0x0a, 0x0a, fix=True)
create_sprite(0x002b, EnemySprite.RedBari, 0x00, 0, 0x07, 0x17, 'PoD Map Balcony') create_sprite(0x002b, EnemySprite.RedBari, 0x00, 0, 0x07, 0x17, 'PoD Map Balcony')
create_sprite(0x002b, EnemySprite.Faerie, 0x00, 0, 0x16, 0x17) create_sprite(0x002b, EnemySprite.Faerie, 0x00, 0, 0x16, 0x17)
create_sprite(0x002b, EnemySprite.Faerie, 0x00, 0, 0x18, 0x18) create_sprite(0x002b, EnemySprite.Faerie, 0x00, 0, 0x18, 0x18)
@@ -939,11 +950,11 @@ def init_vanilla_sprites():
create_sprite(0x003e, EnemySprite.CrystalSwitch, 0x00, 0, 0x06, 0x15) create_sprite(0x003e, EnemySprite.CrystalSwitch, 0x00, 0, 0x06, 0x15)
create_sprite(0x003e, EnemySprite.StalfosKnight, 0x00, 0, 0x19, 0x04, 'Ice Stalfos Hint') create_sprite(0x003e, EnemySprite.StalfosKnight, 0x00, 0, 0x19, 0x04, 'Ice Stalfos Hint')
create_sprite(0x003e, EnemySprite.StalfosKnight, 0x00, 0, 0x16, 0x0b, 'Ice Stalfos Hint') create_sprite(0x003e, EnemySprite.StalfosKnight, 0x00, 0, 0x16, 0x0b, 'Ice Stalfos Hint')
create_sprite(0x003e, EnemySprite.Babasu, 0x00, 0, 0x05, 0x12, 'Ice Conveyor', fix=True) create_sprite(0x003e, EnemySprite.Babasu, 0x00, 0, 0x05, 0x12, 'Ice Conveyor', fix=True, embed=True)
create_sprite(0x003e, EnemySprite.Babasu, 0x00, 0, 0x0e, 0x12, 'Ice Conveyor', fix=True) create_sprite(0x003e, EnemySprite.Babasu, 0x00, 0, 0x0e, 0x12, 'Ice Conveyor', fix=True, embed=True)
create_sprite(0x003e, 0x07, SpriteType.Overlord, 0, 0x10, 0x12) create_sprite(0x003e, 0x07, SpriteType.Overlord, 0, 0x10, 0x12)
create_sprite(0x003e, EnemySprite.Babasu, 0x00, 0, 0x12, 0x12, 'Ice Conveyor', fix=True) create_sprite(0x003e, EnemySprite.Babasu, 0x00, 0, 0x12, 0x12, 'Ice Conveyor', fix=True, embed=True)
create_sprite(0x003e, EnemySprite.Babasu, 0x00, 0, 0x15, 0x12, 'Ice Conveyor', fix=True) create_sprite(0x003e, EnemySprite.Babasu, 0x00, 0, 0x15, 0x12, 'Ice Conveyor', fix=True, embed=True)
create_sprite(0x003e, EnemySprite.BlueBari, 0x00, 0, 0x07, 0x16, 'Ice Conveyor') create_sprite(0x003e, EnemySprite.BlueBari, 0x00, 0, 0x07, 0x16, 'Ice Conveyor')
create_sprite(0x003e, EnemySprite.BlueBari, 0x00, 0, 0x11, 0x18, 'Ice Conveyor', True, 0xe4) create_sprite(0x003e, EnemySprite.BlueBari, 0x00, 0, 0x11, 0x18, 'Ice Conveyor', True, 0xe4)
create_sprite(0x003e, EnemySprite.BlueBari, 0x00, 0, 0x15, 0x19, 'Ice Conveyor') create_sprite(0x003e, EnemySprite.BlueBari, 0x00, 0, 0x15, 0x19, 'Ice Conveyor')
@@ -955,7 +966,7 @@ def init_vanilla_sprites():
create_sprite(0x003f, EnemySprite.BunnyBeam, 0x00, 0, 0x08, 0x18, 'Ice Hammer Block') create_sprite(0x003f, EnemySprite.BunnyBeam, 0x00, 0, 0x08, 0x18, 'Ice Hammer Block')
create_sprite(0x0040, EnemySprite.BlueGuard, 0x00, 1, 0x09, 0x08, 'Tower Catwalk') create_sprite(0x0040, EnemySprite.BlueGuard, 0x00, 1, 0x09, 0x08, 'Tower Catwalk')
create_sprite(0x0040, EnemySprite.BlueGuard, 0x1b, 1, 0x09, 0x0f, 'Tower Catwalk') create_sprite(0x0040, EnemySprite.BlueGuard, 0x1b, 1, 0x09, 0x0f, 'Tower Catwalk')
create_sprite(0x0040, EnemySprite.Statue, 0x00, 1, 0x18, 0x15, 'Tower Push Statue') create_sprite(0x0040, EnemySprite.Statue, 0x00, 1, 0x18, 0x15, 'Tower Push Statue', fix=True)
create_sprite(0x0040, EnemySprite.RedSpearGuard, 0x00, 1, 0x1b, 0x18, 'Tower Push Statue') create_sprite(0x0040, EnemySprite.RedSpearGuard, 0x00, 1, 0x1b, 0x18, 'Tower Push Statue')
create_sprite(0x0040, EnemySprite.BlueArcher, 0x00, 1, 0x17, 0x1a, 'Tower Push Statue') create_sprite(0x0040, EnemySprite.BlueArcher, 0x00, 1, 0x17, 0x1a, 'Tower Push Statue')
create_sprite(0x0040, EnemySprite.BlueArcher, 0x00, 1, 0x19, 0x1a, 'Tower Push Statue') create_sprite(0x0040, EnemySprite.BlueArcher, 0x00, 1, 0x19, 0x1a, 'Tower Push Statue')
@@ -984,7 +995,7 @@ def init_vanilla_sprites():
create_sprite(0x0045, EnemySprite.RedZazak, 0x00, 0, 0x06, 0x06, 'Thieves Basement Block') create_sprite(0x0045, EnemySprite.RedZazak, 0x00, 0, 0x06, 0x06, 'Thieves Basement Block')
create_sprite(0x0045, EnemySprite.BlueZazak, 0x00, 0, 0x04, 0x0b, 'Thieves Basement Block') create_sprite(0x0045, EnemySprite.BlueZazak, 0x00, 0, 0x04, 0x0b, 'Thieves Basement Block')
create_sprite(0x0045, EnemySprite.Stalfos, 0x00, 0, 0x0b, 0x0b, 'Thieves Basement Block') create_sprite(0x0045, EnemySprite.Stalfos, 0x00, 0, 0x0b, 0x0b, 'Thieves Basement Block')
create_sprite(0x0045, EnemySprite.BunnyBeam, 0x00, 0, 0x17, 0x0b, "Thieves Blind's Cell Interior", fix=True) create_sprite(0x0045, EnemySprite.BunnyBeam, 0x00, 0, 0x17, 0x0b, "Thieves Blind's Cell Interior") #, fix=True)
create_sprite(0x0045, EnemySprite.BlueZazak, 0x00, 0, 0x18, 0x0c, "Thieves Blind's Cell Interior") create_sprite(0x0045, EnemySprite.BlueZazak, 0x00, 0, 0x18, 0x0c, "Thieves Blind's Cell Interior")
create_sprite(0x0045, EnemySprite.BlueZazak, 0x00, 0, 0x1a, 0x0c, "Thieves Blind's Cell Interior") create_sprite(0x0045, EnemySprite.BlueZazak, 0x00, 0, 0x1a, 0x0c, "Thieves Blind's Cell Interior")
create_sprite(0x0045, EnemySprite.BlueZazak, 0x00, 0, 0x18, 0x11, "Thieves Blind's Cell Interior") create_sprite(0x0045, EnemySprite.BlueZazak, 0x00, 0, 0x18, 0x11, "Thieves Blind's Cell Interior")
@@ -1070,8 +1081,8 @@ def init_vanilla_sprites():
create_sprite(0x0055, EnemySprite.GreenKnifeGuard, 0x00, 0, 0x14, 0x15, 'Hyrule Castle Secret Entrance') create_sprite(0x0055, EnemySprite.GreenKnifeGuard, 0x00, 0, 0x14, 0x15, 'Hyrule Castle Secret Entrance')
create_sprite(0x0055, EnemySprite.GreenKnifeGuard, 0x00, 0, 0x0d, 0x16, 'Hyrule Castle Secret Entrance') create_sprite(0x0055, EnemySprite.GreenKnifeGuard, 0x00, 0, 0x0d, 0x16, 'Hyrule Castle Secret Entrance')
create_sprite(0x0056, 0x0a, SpriteType.Overlord, 0, 0x0b, 0x05, 'Skull X Room') create_sprite(0x0056, 0x0a, SpriteType.Overlord, 0, 0x0b, 0x05, 'Skull X Room')
create_sprite(0x0056, EnemySprite.Bumper, 0x00, 0, 0x07, 0x19) create_sprite(0x0056, EnemySprite.Bumper, 0x00, 0, 0x07, 0x19, 'Skull 2 West Lobby')
create_sprite(0x0056, EnemySprite.Bumper, 0x00, 0, 0x17, 0x19) create_sprite(0x0056, EnemySprite.Bumper, 0x00, 0, 0x17, 0x19, 'Skull Small Hall')
create_sprite(0x0056, EnemySprite.MiniHelmasaur, 0x00, 0, 0x07, 0x04, 'Skull X Room') create_sprite(0x0056, EnemySprite.MiniHelmasaur, 0x00, 0, 0x07, 0x04, 'Skull X Room')
create_sprite(0x0056, EnemySprite.HardhatBeetle, 0x00, 0, 0x1b, 0x05, 'Skull Back Drop') create_sprite(0x0056, EnemySprite.HardhatBeetle, 0x00, 0, 0x1b, 0x05, 'Skull Back Drop')
create_sprite(0x0056, EnemySprite.MiniHelmasaur, 0x00, 0, 0x03, 0x06, 'Skull X Room') create_sprite(0x0056, EnemySprite.MiniHelmasaur, 0x00, 0, 0x03, 0x06, 'Skull X Room')
@@ -1082,7 +1093,7 @@ def init_vanilla_sprites():
create_sprite(0x0056, EnemySprite.HardhatBeetle, 0x00, 0, 0x03, 0x1b, 'Skull 2 West Lobby') create_sprite(0x0056, EnemySprite.HardhatBeetle, 0x00, 0, 0x03, 0x1b, 'Skull 2 West Lobby')
create_sprite(0x0056, EnemySprite.Firesnake, 0x00, 0, 0x13, 0x1c, 'Skull Small Hall') create_sprite(0x0056, EnemySprite.Firesnake, 0x00, 0, 0x13, 0x1c, 'Skull Small Hall')
create_sprite(0x0056, EnemySprite.HardhatBeetle, 0x00, 0, 0x19, 0x1c, 'Skull Small Hall') create_sprite(0x0056, EnemySprite.HardhatBeetle, 0x00, 0, 0x19, 0x1c, 'Skull Small Hall')
create_sprite(0x0057, EnemySprite.BunnyBeam, 0x00, 0, 0x08, 0x04, 'Skull Big Key', fix=True) create_sprite(0x0057, EnemySprite.BunnyBeam, 0x00, 0, 0x08, 0x04, 'Skull Big Key') #, fix=True)
create_sprite(0x0057, EnemySprite.RedBari, 0x00, 0, 0x0c, 0x04, 'Skull Big Key') create_sprite(0x0057, EnemySprite.RedBari, 0x00, 0, 0x0c, 0x04, 'Skull Big Key')
create_sprite(0x0057, EnemySprite.SpikeBlock, 0x00, 0, 0x08, 0x05, 'Skull Big Key') create_sprite(0x0057, EnemySprite.SpikeBlock, 0x00, 0, 0x08, 0x05, 'Skull Big Key')
create_sprite(0x0057, EnemySprite.Stalfos, 0x00, 0, 0x04, 0x07, 'Skull Big Key') create_sprite(0x0057, EnemySprite.Stalfos, 0x00, 0, 0x04, 0x07, 'Skull Big Key')
@@ -1097,7 +1108,7 @@ def init_vanilla_sprites():
create_sprite(0x0057, EnemySprite.Gibdo, 0x00, 0, 0x13, 0x17, 'Skull Pot Prison') create_sprite(0x0057, EnemySprite.Gibdo, 0x00, 0, 0x13, 0x17, 'Skull Pot Prison')
create_sprite(0x0057, EnemySprite.BlueBari, 0x00, 0, 0x07, 0x18, 'Skull 2 East Lobby') create_sprite(0x0057, EnemySprite.BlueBari, 0x00, 0, 0x07, 0x18, 'Skull 2 East Lobby')
create_sprite(0x0057, EnemySprite.BlueBari, 0x00, 0, 0x08, 0x18, 'Skull 2 East Lobby') create_sprite(0x0057, EnemySprite.BlueBari, 0x00, 0, 0x08, 0x18, 'Skull 2 East Lobby')
create_sprite(0x0057, EnemySprite.Statue, 0x00, 0, 0x0b, 0x18, 'Skull 2 East Lobby') create_sprite(0x0057, EnemySprite.Statue, 0x00, 0, 0x0b, 0x18, 'Skull 2 East Lobby', fix=True)
create_sprite(0x0058, EnemySprite.MiniMoldorm, 0x00, 0, 0x0c, 0x14, 'Skull Big Chest') create_sprite(0x0058, EnemySprite.MiniMoldorm, 0x00, 0, 0x0c, 0x14, 'Skull Big Chest')
create_sprite(0x0058, EnemySprite.MiniMoldorm, 0x00, 0, 0x06, 0x16, 'Skull Big Chest') create_sprite(0x0058, EnemySprite.MiniMoldorm, 0x00, 0, 0x06, 0x16, 'Skull Big Chest')
create_sprite(0x0058, EnemySprite.Bumper, 0x00, 0, 0x16, 0x16, 'Skull Map Room') create_sprite(0x0058, EnemySprite.Bumper, 0x00, 0, 0x16, 0x16, 'Skull Map Room')
@@ -1129,9 +1140,9 @@ def init_vanilla_sprites():
create_sprite(0x005b, EnemySprite.SpikeBlock, 0x00, 1, 0x1b, 0x10, 'GT Hidden Spikes') create_sprite(0x005b, EnemySprite.SpikeBlock, 0x00, 1, 0x1b, 0x10, 'GT Hidden Spikes')
create_sprite(0x005b, EnemySprite.SpikeBlock, 0x00, 1, 0x17, 0x11, 'GT Hidden Spikes') create_sprite(0x005b, EnemySprite.SpikeBlock, 0x00, 1, 0x17, 0x11, 'GT Hidden Spikes')
create_sprite(0x005b, EnemySprite.SpikeBlock, 0x00, 1, 0x14, 0x12, 'GT Hidden Spikes') create_sprite(0x005b, EnemySprite.SpikeBlock, 0x00, 1, 0x14, 0x12, 'GT Hidden Spikes')
create_sprite(0x005c, EnemySprite.WallCannonHorzTop, 0x00, 0, 0x0b, 0x02) create_sprite(0x005c, EnemySprite.WallCannonHorzTop, 0x00, 0, 0x0b, 0x02, embed=True)
create_sprite(0x005c, EnemySprite.WallCannonHorzBottom, 0x00, 0, 0x05, 0x0e) create_sprite(0x005c, EnemySprite.WallCannonHorzBottom, 0x00, 0, 0x05, 0x0e, embed=True)
create_sprite(0x005c, EnemySprite.WallCannonHorzBottom, 0x00, 0, 0x0e, 0x0e) create_sprite(0x005c, EnemySprite.WallCannonHorzBottom, 0x00, 0, 0x0e, 0x0e, embed=True)
create_sprite(0x005c, EnemySprite.Faerie, 0x00, 0, 0x17, 0x18) create_sprite(0x005c, EnemySprite.Faerie, 0x00, 0, 0x17, 0x18)
create_sprite(0x005c, EnemySprite.Faerie, 0x00, 0, 0x18, 0x18) create_sprite(0x005c, EnemySprite.Faerie, 0x00, 0, 0x18, 0x18)
create_sprite(0x005d, EnemySprite.Stalfos, 0x00, 0, 0x07, 0x05, 'GT Gauntlet 2') create_sprite(0x005d, EnemySprite.Stalfos, 0x00, 0, 0x07, 0x05, 'GT Gauntlet 2')
@@ -1164,10 +1175,10 @@ def init_vanilla_sprites():
create_sprite(0x0062, EnemySprite.GreenGuard, 0x00, 1, 0x11, 0x0e, 'Hyrule Castle East Lobby') create_sprite(0x0062, EnemySprite.GreenGuard, 0x00, 1, 0x11, 0x0e, 'Hyrule Castle East Lobby')
create_sprite(0x0063, 0x14, SpriteType.Overlord, 0, 0x07, 0x08) create_sprite(0x0063, 0x14, SpriteType.Overlord, 0, 0x07, 0x08)
create_sprite(0x0063, EnemySprite.Beamos, 0x00, 0, 0x07, 0x18, 'Desert Back Lobby') create_sprite(0x0063, EnemySprite.Beamos, 0x00, 0, 0x07, 0x18, 'Desert Back Lobby')
create_sprite(0x0064, EnemySprite.Keese, 0x00, 0, 0x05, 0x12, 'Thieves Attic Hint') create_sprite(0x0064, EnemySprite.Keese, 0x00, 0, 0x05, 0x12, 'Thieves Attic Hint', embed=True)
create_sprite(0x0064, EnemySprite.WrongPullSwitch, 0x00, 0, 0x0b, 0x13) create_sprite(0x0064, EnemySprite.WrongPullSwitch, 0x00, 0, 0x0b, 0x13)
create_sprite(0x0064, EnemySprite.Keese, 0x00, 0, 0x05, 0x13, 'Thieves Attic Hint') create_sprite(0x0064, EnemySprite.Keese, 0x00, 0, 0x05, 0x13, 'Thieves Attic Hint')
create_sprite(0x0064, EnemySprite.BunnyBeam, 0x00, 0, 0x03, 0x16, 'Thieves Attic Hint', fix=True) create_sprite(0x0064, EnemySprite.BunnyBeam, 0x00, 0, 0x03, 0x16, 'Thieves Attic Hint') #, fix=True)
create_sprite(0x0064, EnemySprite.CricketRat, 0x00, 0, 0x17, 0x17, 'Thieves Cricket Hall Left') create_sprite(0x0064, EnemySprite.CricketRat, 0x00, 0, 0x17, 0x17, 'Thieves Cricket Hall Left')
create_sprite(0x0064, EnemySprite.CricketRat, 0x00, 0, 0x19, 0x19, 'Thieves Cricket Hall Left') create_sprite(0x0064, EnemySprite.CricketRat, 0x00, 0, 0x19, 0x19, 'Thieves Cricket Hall Left')
create_sprite(0x0064, EnemySprite.CricketRat, 0x00, 0, 0x05, 0x1a, 'Thieves Attic') create_sprite(0x0064, EnemySprite.CricketRat, 0x00, 0, 0x05, 0x1a, 'Thieves Attic')
@@ -1204,10 +1215,10 @@ def init_vanilla_sprites():
create_sprite(0x0067, EnemySprite.FirebarCW, 0x00, 0, 0x18, 0x14, 'Skull Compass Room') create_sprite(0x0067, EnemySprite.FirebarCW, 0x00, 0, 0x18, 0x14, 'Skull Compass Room')
create_sprite(0x0067, EnemySprite.FirebarCCW, 0x00, 0, 0x07, 0x17, 'Skull Left Drop') create_sprite(0x0067, EnemySprite.FirebarCCW, 0x00, 0, 0x07, 0x17, 'Skull Left Drop')
create_sprite(0x0067, EnemySprite.HardhatBeetle, 0x00, 0, 0x18, 0x1a, 'Skull Compass Room') create_sprite(0x0067, EnemySprite.HardhatBeetle, 0x00, 0, 0x18, 0x1a, 'Skull Compass Room')
create_sprite(0x0068, EnemySprite.Bumper, 0x00, 0, 0x0e, 0x07) create_sprite(0x0068, EnemySprite.Bumper, 0x00, 0, 0x0e, 0x07, 'Skull Pinball')
create_sprite(0x0068, EnemySprite.Bumper, 0x00, 0, 0x11, 0x07) create_sprite(0x0068, EnemySprite.Bumper, 0x00, 0, 0x11, 0x07, 'Skull Pinball')
create_sprite(0x0068, EnemySprite.Bumper, 0x00, 0, 0x0c, 0x0b) create_sprite(0x0068, EnemySprite.Bumper, 0x00, 0, 0x0c, 0x0b, 'Skull Pinball')
create_sprite(0x0068, EnemySprite.Bumper, 0x00, 0, 0x13, 0x0b) create_sprite(0x0068, EnemySprite.Bumper, 0x00, 0, 0x13, 0x0b, 'Skull Pinball')
create_sprite(0x0068, EnemySprite.Gibdo, 0x00, 0, 0x14, 0x08, 'Skull Pinball') create_sprite(0x0068, EnemySprite.Gibdo, 0x00, 0, 0x14, 0x08, 'Skull Pinball')
create_sprite(0x0068, 0x09, SpriteType.Overlord, 0, 0x0f, 0x0f) create_sprite(0x0068, 0x09, SpriteType.Overlord, 0, 0x0f, 0x0f)
create_sprite(0x0068, EnemySprite.Gibdo, 0x00, 0, 0x0e, 0x12, 'Skull Pinball') create_sprite(0x0068, EnemySprite.Gibdo, 0x00, 0, 0x0e, 0x12, 'Skull Pinball')
@@ -1235,7 +1246,7 @@ def init_vanilla_sprites():
create_sprite(0x006c, EnemySprite.Lanmolas, 0x00, 0, 0x06, 0x07, 'GT Lanmolas 2') create_sprite(0x006c, EnemySprite.Lanmolas, 0x00, 0, 0x06, 0x07, 'GT Lanmolas 2')
create_sprite(0x006c, EnemySprite.Lanmolas, 0x00, 0, 0x09, 0x07, 'GT Lanmolas 2') create_sprite(0x006c, EnemySprite.Lanmolas, 0x00, 0, 0x09, 0x07, 'GT Lanmolas 2')
create_sprite(0x006c, EnemySprite.Lanmolas, 0x00, 0, 0x07, 0x09, 'GT Lanmolas 2') create_sprite(0x006c, EnemySprite.Lanmolas, 0x00, 0, 0x07, 0x09, 'GT Lanmolas 2')
create_sprite(0x006c, EnemySprite.BunnyBeam, 0x00, 0, 0x17, 0x18, 'GT Beam Dash') create_sprite(0x006c, EnemySprite.BunnyBeam, 0x00, 0, 0x17, 0x18, 'GT Beam Dash', fix=True)
create_sprite(0x006c, EnemySprite.Medusa, 0x00, 0, 0x03, 0x1c, 'GT Lanmolas 2') create_sprite(0x006c, EnemySprite.Medusa, 0x00, 0, 0x03, 0x1c, 'GT Lanmolas 2')
create_sprite(0x006d, EnemySprite.RedZazak, 0x00, 0, 0x05, 0x06, 'GT Gauntlet 4') create_sprite(0x006d, EnemySprite.RedZazak, 0x00, 0, 0x05, 0x06, 'GT Gauntlet 4')
create_sprite(0x006d, EnemySprite.Beamos, 0x00, 0, 0x0b, 0x06, 'GT Gauntlet 4') create_sprite(0x006d, EnemySprite.Beamos, 0x00, 0, 0x0b, 0x06, 'GT Gauntlet 4')
@@ -1276,8 +1287,8 @@ def init_vanilla_sprites():
create_sprite(0x0075, EnemySprite.Leever, 0x00, 0, 0x0a, 0x05, 'Desert Trap Room') create_sprite(0x0075, EnemySprite.Leever, 0x00, 0, 0x0a, 0x05, 'Desert Trap Room')
create_sprite(0x0075, EnemySprite.Leever, 0x00, 0, 0x06, 0x0a, 'Desert Trap Room') create_sprite(0x0075, EnemySprite.Leever, 0x00, 0, 0x06, 0x0a, 'Desert Trap Room')
create_sprite(0x0075, EnemySprite.Leever, 0x00, 0, 0x0a, 0x0a, 'Desert Trap Room') create_sprite(0x0075, EnemySprite.Leever, 0x00, 0, 0x0a, 0x0a, 'Desert Trap Room')
create_sprite(0x0075, EnemySprite.WallCannonVertLeft, 0x00, 0, 0x11, 0x0b) create_sprite(0x0075, EnemySprite.WallCannonVertLeft, 0x00, 0, 0x11, 0x0b, embed=True)
create_sprite(0x0075, EnemySprite.WallCannonVertRight, 0x00, 0, 0x1e, 0x0b) create_sprite(0x0075, EnemySprite.WallCannonVertRight, 0x00, 0, 0x1e, 0x0b, embed=True)
create_sprite(0x0075, EnemySprite.Leever, 0x00, 0, 0x07, 0x19, 'Desert Arrow Pot Corner') create_sprite(0x0075, EnemySprite.Leever, 0x00, 0, 0x07, 0x19, 'Desert Arrow Pot Corner')
create_sprite(0x0075, EnemySprite.Leever, 0x00, 0, 0x09, 0x19, 'Desert Arrow Pot Corner') create_sprite(0x0075, EnemySprite.Leever, 0x00, 0, 0x09, 0x19, 'Desert Arrow Pot Corner')
create_sprite(0x0076, EnemySprite.WaterSwitch, 0x00, 0, 0x19, 0x03) create_sprite(0x0076, EnemySprite.WaterSwitch, 0x00, 0, 0x19, 0x03)
@@ -1426,7 +1437,7 @@ def init_vanilla_sprites():
create_sprite(0x008d, EnemySprite.BlueBari, 0x00, 0, 0x14, 0x1c, 'GT Speed Torch') create_sprite(0x008d, EnemySprite.BlueBari, 0x00, 0, 0x14, 0x1c, 'GT Speed Torch')
create_sprite(0x008e, EnemySprite.Freezor, 0x00, 0, 0x1b, 0x02, 'Ice Lonely Freezor') create_sprite(0x008e, EnemySprite.Freezor, 0x00, 0, 0x1b, 0x02, 'Ice Lonely Freezor')
create_sprite(0x008e, EnemySprite.Blob, 0x00, 0, 0x18, 0x05, 'Ice Lonely Freezor') create_sprite(0x008e, EnemySprite.Blob, 0x00, 0, 0x18, 0x05, 'Ice Lonely Freezor')
create_sprite(0x008e, EnemySprite.BunnyBeam, 0x00, 0, 0x14, 0x06, 'Ice Lonely Freezor', fix=True) create_sprite(0x008e, EnemySprite.BunnyBeam, 0x00, 0, 0x14, 0x06, 'Ice Lonely Freezor') #, fix=True)
create_sprite(0x008e, EnemySprite.Blob, 0x00, 0, 0x1b, 0x08, 'Ice Lonely Freezor') create_sprite(0x008e, EnemySprite.Blob, 0x00, 0, 0x1b, 0x08, 'Ice Lonely Freezor')
create_sprite(0x008e, EnemySprite.Blob, 0x00, 0, 0x14, 0x09, 'Ice Lonely Freezor') create_sprite(0x008e, EnemySprite.Blob, 0x00, 0, 0x14, 0x09, 'Ice Lonely Freezor')
create_sprite(0x008e, EnemySprite.Blob, 0x00, 0, 0x16, 0x0a, 'Ice Lonely Freezor') create_sprite(0x008e, EnemySprite.Blob, 0x00, 0, 0x16, 0x0a, 'Ice Lonely Freezor')
@@ -1466,10 +1477,10 @@ def init_vanilla_sprites():
create_sprite(0x0095, EnemySprite.RedSpearGuard, 0x00, 0, 0x19, 0x0c, 'GT Conveyor Bridge') create_sprite(0x0095, EnemySprite.RedSpearGuard, 0x00, 0, 0x19, 0x0c, 'GT Conveyor Bridge')
create_sprite(0x0095, 0x0b, SpriteType.Overlord, 0, 0x17, 0x1a) create_sprite(0x0095, 0x0b, SpriteType.Overlord, 0, 0x17, 0x1a)
create_sprite(0x0096, EnemySprite.FirebarCW, 0x00, 0, 0x08, 0x0b, 'GT Torch Cross') create_sprite(0x0096, EnemySprite.FirebarCW, 0x00, 0, 0x08, 0x0b, 'GT Torch Cross')
create_sprite(0x0096, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x15) create_sprite(0x0096, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x15, embed=True)
create_sprite(0x0096, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x17) create_sprite(0x0096, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x17, embed=True)
create_sprite(0x0096, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x19) create_sprite(0x0096, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x19, embed=True)
create_sprite(0x0096, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x1b) create_sprite(0x0096, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x1b, embed=True)
create_sprite(0x0097, 0x15, SpriteType.Overlord, 0, 0x0f, 0x0f) create_sprite(0x0097, 0x15, SpriteType.Overlord, 0, 0x0f, 0x0f)
create_sprite(0x0098, EnemySprite.Blob, 0x00, 0, 0x10, 0x13, 'Mire Lobby') create_sprite(0x0098, EnemySprite.Blob, 0x00, 0, 0x10, 0x13, 'Mire Lobby')
create_sprite(0x0098, EnemySprite.Blob, 0x00, 0, 0x09, 0x14, 'Mire Lobby') create_sprite(0x0098, EnemySprite.Blob, 0x00, 0, 0x09, 0x14, 'Mire Lobby')
@@ -1520,10 +1531,10 @@ def init_vanilla_sprites():
create_sprite(0x009e, EnemySprite.StalfosKnight, 0x00, 0, 0x18, 0x08, 'Ice Backwards Room') create_sprite(0x009e, EnemySprite.StalfosKnight, 0x00, 0, 0x18, 0x08, 'Ice Backwards Room')
create_sprite(0x009e, EnemySprite.RedBari, 0x00, 0, 0x19, 0x08, 'Ice Backwards Room') create_sprite(0x009e, EnemySprite.RedBari, 0x00, 0, 0x19, 0x08, 'Ice Backwards Room')
create_sprite(0x009e, EnemySprite.Freezor, 0x00, 0, 0x14, 0x12, 'Ice Crystal Left') create_sprite(0x009e, EnemySprite.Freezor, 0x00, 0, 0x14, 0x12, 'Ice Crystal Left')
create_sprite(0x009f, EnemySprite.Babasu, 0x00, 0, 0x04, 0x12, 'Ice Many Pots', fix=True) create_sprite(0x009f, EnemySprite.Babasu, 0x00, 0, 0x04, 0x12, 'Ice Many Pots', fix=True, embed=True)
create_sprite(0x009f, EnemySprite.Babasu, 0x00, 0, 0x06, 0x12, 'Ice Many Pots', fix=True) create_sprite(0x009f, EnemySprite.Babasu, 0x00, 0, 0x06, 0x12, 'Ice Many Pots', fix=True, embed=True)
create_sprite(0x009f, EnemySprite.Babasu, 0x00, 0, 0x09, 0x12, 'Ice Many Pots', fix=True) create_sprite(0x009f, EnemySprite.Babasu, 0x00, 0, 0x09, 0x12, 'Ice Many Pots', fix=True, embed=True)
create_sprite(0x009f, EnemySprite.Babasu, 0x00, 0, 0x0b, 0x12, 'Ice Many Pots', fix=True) create_sprite(0x009f, EnemySprite.Babasu, 0x00, 0, 0x0b, 0x12, 'Ice Many Pots', fix=True, embed=True)
create_sprite(0x009f, EnemySprite.AntiFairy, 0x00, 0, 0x07, 0x17, 'Ice Many Pots') create_sprite(0x009f, EnemySprite.AntiFairy, 0x00, 0, 0x07, 0x17, 'Ice Many Pots')
create_sprite(0x009f, EnemySprite.FirebarCW, 0x00, 0, 0x08, 0x18, 'Ice Many Pots') create_sprite(0x009f, EnemySprite.FirebarCW, 0x00, 0, 0x08, 0x18, 'Ice Many Pots')
create_sprite(0x00a0, EnemySprite.Medusa, 0x00, 0, 0x03, 0x08, 'Mire Antechamber') create_sprite(0x00a0, EnemySprite.Medusa, 0x00, 0, 0x03, 0x08, 'Mire Antechamber')
@@ -1536,7 +1547,7 @@ def init_vanilla_sprites():
create_sprite(0x00a1, EnemySprite.Medusa, 0x00, 0, 0x15, 0x15, 'Mire South Fish') create_sprite(0x00a1, EnemySprite.Medusa, 0x00, 0, 0x15, 0x15, 'Mire South Fish')
create_sprite(0x00a1, EnemySprite.Medusa, 0x00, 0, 0x1a, 0x15, 'Mire South Fish') create_sprite(0x00a1, EnemySprite.Medusa, 0x00, 0, 0x1a, 0x15, 'Mire South Fish')
create_sprite(0x00a1, EnemySprite.Stalfos, 0x00, 0, 0x15, 0x19, 'Mire South Fish') create_sprite(0x00a1, EnemySprite.Stalfos, 0x00, 0, 0x15, 0x19, 'Mire South Fish')
create_sprite(0x00a1, EnemySprite.BunnyBeam, 0x00, 0, 0x17, 0x19, 'Mire South Fish', fix=True) create_sprite(0x00a1, EnemySprite.BunnyBeam, 0x00, 0, 0x17, 0x19, 'Mire South Fish') #, fix=True)
create_sprite(0x00a1, EnemySprite.Stalfos, 0x00, 0, 0x1b, 0x19, 'Mire South Fish') create_sprite(0x00a1, EnemySprite.Stalfos, 0x00, 0, 0x1b, 0x19, 'Mire South Fish')
create_sprite(0x00a4, EnemySprite.TrinexxRockHead, 0x00, 0, 0x07, 0x05) create_sprite(0x00a4, EnemySprite.TrinexxRockHead, 0x00, 0, 0x07, 0x05)
create_sprite(0x00a4, EnemySprite.TrinexxFireHead, 0x00, 0, 0x07, 0x05) create_sprite(0x00a4, EnemySprite.TrinexxFireHead, 0x00, 0, 0x07, 0x05)
@@ -1549,8 +1560,8 @@ def init_vanilla_sprites():
create_sprite(0x00a5, EnemySprite.Wizzrobe, 0x00, 0, 0x15, 0x09, 'GT Wizzrobes 2') create_sprite(0x00a5, EnemySprite.Wizzrobe, 0x00, 0, 0x15, 0x09, 'GT Wizzrobes 2')
create_sprite(0x00a5, EnemySprite.Wizzrobe, 0x00, 0, 0x1a, 0x09, 'GT Wizzrobes 2') create_sprite(0x00a5, EnemySprite.Wizzrobe, 0x00, 0, 0x1a, 0x09, 'GT Wizzrobes 2')
create_sprite(0x00a5, EnemySprite.Wizzrobe, 0x00, 0, 0x08, 0x0a, 'GT Wizzrobes 1') create_sprite(0x00a5, EnemySprite.Wizzrobe, 0x00, 0, 0x08, 0x0a, 'GT Wizzrobes 1')
create_sprite(0x00a5, EnemySprite.LaserEyeTop, 0x00, 0, 0x0c, 0x12) create_sprite(0x00a5, EnemySprite.LaserEyeTop, 0x00, 0, 0x0c, 0x12, embed=True)
create_sprite(0x00a5, EnemySprite.LaserEyeTop, 0x00, 0, 0x12, 0x12) create_sprite(0x00a5, EnemySprite.LaserEyeTop, 0x00, 0, 0x12, 0x12, embed=True)
create_sprite(0x00a5, EnemySprite.RedSpearGuard, 0x00, 0, 0x12, 0x17, 'GT Dashing Bridge') create_sprite(0x00a5, EnemySprite.RedSpearGuard, 0x00, 0, 0x12, 0x17, 'GT Dashing Bridge')
create_sprite(0x00a5, EnemySprite.BlueGuard, 0x00, 0, 0x13, 0x18, 'GT Dashing Bridge') create_sprite(0x00a5, EnemySprite.BlueGuard, 0x00, 0, 0x13, 0x18, 'GT Dashing Bridge')
create_sprite(0x00a6, 0x15, SpriteType.Overlord, 0, 0x0f, 0x0f) create_sprite(0x00a6, 0x15, SpriteType.Overlord, 0, 0x0f, 0x0f)
@@ -1612,9 +1623,9 @@ def init_vanilla_sprites():
create_sprite(0x00b1, EnemySprite.AntiFairy, 0x00, 0, 0x15, 0x1a, 'Mire Spike Barrier') create_sprite(0x00b1, EnemySprite.AntiFairy, 0x00, 0, 0x15, 0x1a, 'Mire Spike Barrier')
create_sprite(0x00b1, EnemySprite.Wizzrobe, 0x00, 0, 0x08, 0x1c, 'Mire Square Rail') create_sprite(0x00b1, EnemySprite.Wizzrobe, 0x00, 0, 0x08, 0x1c, 'Mire Square Rail')
create_sprite(0x00b2, EnemySprite.Wizzrobe, 0x00, 1, 0x14, 0x08, 'Mire BK Door Room') create_sprite(0x00b2, EnemySprite.Wizzrobe, 0x00, 1, 0x14, 0x08, 'Mire BK Door Room')
create_sprite(0x00b2, EnemySprite.BunnyBeam, 0x00, 1, 0x0c, 0x0a, 'Mire BK Door Room', fix=True) create_sprite(0x00b2, EnemySprite.BunnyBeam, 0x00, 1, 0x0c, 0x0a, 'Mire BK Door Room') #, fix=True)
create_sprite(0x00b2, EnemySprite.AntiFairy, 0x00, 1, 0x12, 0x0a, 'Mire BK Door Room') create_sprite(0x00b2, EnemySprite.AntiFairy, 0x00, 1, 0x12, 0x0a, 'Mire BK Door Room')
create_sprite(0x00b2, EnemySprite.BunnyBeam, 0x00, 1, 0x13, 0x0a, 'Mire BK Door Room', fix=True) create_sprite(0x00b2, EnemySprite.BunnyBeam, 0x00, 1, 0x13, 0x0a, 'Mire BK Door Room') #, fix=True)
create_sprite(0x00b2, EnemySprite.AntiFairy, 0x00, 1, 0x07, 0x0b, 'Mire BK Door Room') create_sprite(0x00b2, EnemySprite.AntiFairy, 0x00, 1, 0x07, 0x0b, 'Mire BK Door Room')
create_sprite(0x00b2, EnemySprite.Sluggula, 0x00, 0, 0x04, 0x15, 'Mire Cross') create_sprite(0x00b2, EnemySprite.Sluggula, 0x00, 0, 0x04, 0x15, 'Mire Cross')
create_sprite(0x00b2, EnemySprite.Sluggula, 0x00, 0, 0x0b, 0x15, 'Mire Cross') create_sprite(0x00b2, EnemySprite.Sluggula, 0x00, 0, 0x0b, 0x15, 'Mire Cross')
@@ -1715,14 +1726,14 @@ def init_vanilla_sprites():
create_sprite(0x00c2, EnemySprite.Medusa, 0x00, 0, 0x08, 0x10, 'Mire Hub') create_sprite(0x00c2, EnemySprite.Medusa, 0x00, 0, 0x08, 0x10, 'Mire Hub')
create_sprite(0x00c2, EnemySprite.SparkCW, 0x00, 1, 0x10, 0x12, 'Mire Hub') create_sprite(0x00c2, EnemySprite.SparkCW, 0x00, 1, 0x10, 0x12, 'Mire Hub')
create_sprite(0x00c2, EnemySprite.SparkCW, 0x00, 1, 0x19, 0x12, 'Mire Hub') create_sprite(0x00c2, EnemySprite.SparkCW, 0x00, 1, 0x19, 0x12, 'Mire Hub')
create_sprite(0x00c2, EnemySprite.BunnyBeam, 0x00, 1, 0x10, 0x14, 'Mire Hub', fix=True) create_sprite(0x00c2, EnemySprite.BunnyBeam, 0x00, 1, 0x10, 0x14, 'Mire Hub') #, fix=True)
create_sprite(0x00c2, EnemySprite.Firesnake, 0x00, 1, 0x08, 0x16, 'Mire Hub') create_sprite(0x00c2, EnemySprite.Firesnake, 0x00, 1, 0x08, 0x16, 'Mire Hub')
create_sprite(0x00c2, EnemySprite.SparkCW, 0x00, 1, 0x16, 0x16, 'Mire Hub') create_sprite(0x00c2, EnemySprite.SparkCW, 0x00, 1, 0x16, 0x16, 'Mire Hub')
create_sprite(0x00c3, EnemySprite.Medusa, 0x00, 0, 0x05, 0x06) create_sprite(0x00c3, EnemySprite.Medusa, 0x00, 0, 0x05, 0x06)
create_sprite(0x00c3, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x09) create_sprite(0x00c3, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x09, embed=True)
create_sprite(0x00c3, EnemySprite.LaserEyeLeft, 0x00, 0, 0x11, 0x0d) create_sprite(0x00c3, EnemySprite.LaserEyeLeft, 0x00, 0, 0x11, 0x0d, embed=True)
create_sprite(0x00c3, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x11) create_sprite(0x00c3, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x11, embed=True)
create_sprite(0x00c3, EnemySprite.LaserEyeLeft, 0x00, 0, 0x11, 0x15) create_sprite(0x00c3, EnemySprite.LaserEyeLeft, 0x00, 0, 0x11, 0x15, embed=True)
create_sprite(0x00c3, 0x0b, SpriteType.Overlord, 0, 0x17, 0x1a) create_sprite(0x00c3, 0x0b, SpriteType.Overlord, 0, 0x17, 0x1a)
create_sprite(0x00c3, EnemySprite.AntiFairy, 0x00, 0, 0x0a, 0x1b, 'Mire Lone Shooter') create_sprite(0x00c3, EnemySprite.AntiFairy, 0x00, 0, 0x0a, 0x1b, 'Mire Lone Shooter')
create_sprite(0x00c3, EnemySprite.Medusa, 0x00, 0, 0x07, 0x1c, 'Mire Lone Shooter') create_sprite(0x00c3, EnemySprite.Medusa, 0x00, 0, 0x07, 0x1c, 'Mire Lone Shooter')
@@ -1736,14 +1747,14 @@ def init_vanilla_sprites():
create_sprite(0x00c4, EnemySprite.MiniHelmasaur, 0x00, 0, 0x18, 0x14, 'TR Crystal Maze Interior') create_sprite(0x00c4, EnemySprite.MiniHelmasaur, 0x00, 0, 0x18, 0x14, 'TR Crystal Maze Interior')
create_sprite(0x00c4, EnemySprite.AntiFairy, 0x00, 0, 0x0b, 0x1a, 'TR Crystal Maze Interior') create_sprite(0x00c4, EnemySprite.AntiFairy, 0x00, 0, 0x0b, 0x1a, 'TR Crystal Maze Interior')
create_sprite(0x00c4, EnemySprite.AntiFairy, 0x00, 0, 0x14, 0x1a, 'TR Crystal Maze Interior') create_sprite(0x00c4, EnemySprite.AntiFairy, 0x00, 0, 0x14, 0x1a, 'TR Crystal Maze Interior')
create_sprite(0x00c5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x09) create_sprite(0x00c5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x09, embed=True)
create_sprite(0x00c5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x0b) create_sprite(0x00c5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x0b, embed=True)
create_sprite(0x00c5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x0d) create_sprite(0x00c5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x0d, embed=True)
create_sprite(0x00c5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x0f) create_sprite(0x00c5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x0f, embed=True)
create_sprite(0x00c5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x11) create_sprite(0x00c5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x11, embed=True)
create_sprite(0x00c5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x13) create_sprite(0x00c5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x13, embed=True)
create_sprite(0x00c5, EnemySprite.MiniHelmasaur, 0x00, 0, 0x07, 0x15, 'TR Dash Bridge') create_sprite(0x00c5, EnemySprite.MiniHelmasaur, 0x00, 0, 0x07, 0x15, 'TR Dash Bridge')
create_sprite(0x00c5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x15) create_sprite(0x00c5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x15, embed=True)
create_sprite(0x00c6, EnemySprite.Stalfos, 0x00, 0, 0x0b, 0x04, 'TR Hub Ledges') create_sprite(0x00c6, EnemySprite.Stalfos, 0x00, 0, 0x0b, 0x04, 'TR Hub Ledges')
create_sprite(0x00c6, EnemySprite.Stalfos, 0x00, 0, 0x15, 0x04, 'TR Hub Ledges') create_sprite(0x00c6, EnemySprite.Stalfos, 0x00, 0, 0x15, 0x04, 'TR Hub Ledges')
create_sprite(0x00c6, EnemySprite.BlueBari, 0x00, 0, 0x08, 0x09, 'TR Hub Ledges') create_sprite(0x00c6, EnemySprite.BlueBari, 0x00, 0, 0x08, 0x09, 'TR Hub Ledges')
@@ -1761,7 +1772,7 @@ def init_vanilla_sprites():
create_sprite(0x00c9, EnemySprite.Popo2, 0x00, 0, 0x10, 0x05, 'Eastern Lobby Bridge') create_sprite(0x00c9, EnemySprite.Popo2, 0x00, 0, 0x10, 0x05, 'Eastern Lobby Bridge')
create_sprite(0x00c9, EnemySprite.Popo2, 0x00, 0, 0x0f, 0x06, 'Eastern Lobby Bridge') create_sprite(0x00c9, EnemySprite.Popo2, 0x00, 0, 0x0f, 0x06, 'Eastern Lobby Bridge')
create_sprite(0x00c9, EnemySprite.Popo2, 0x00, 0, 0x10, 0x07, 'Eastern Lobby Bridge') create_sprite(0x00c9, EnemySprite.Popo2, 0x00, 0, 0x10, 0x07, 'Eastern Lobby Bridge')
create_sprite(0x00cb, EnemySprite.BunnyBeam, 0x00, 0, 0x14, 0x04, 'Thieves Ambush', fix=True) create_sprite(0x00cb, EnemySprite.BunnyBeam, 0x00, 0, 0x14, 0x04, 'Thieves Ambush') #, fix=True)
create_sprite(0x00cb, EnemySprite.Firesnake, 0x00, 1, 0x08, 0x09, 'Thieves Ambush') create_sprite(0x00cb, EnemySprite.Firesnake, 0x00, 1, 0x08, 0x09, 'Thieves Ambush')
create_sprite(0x00cb, EnemySprite.BlueZazak, 0x00, 1, 0x10, 0x0a, 'Thieves Ambush') create_sprite(0x00cb, EnemySprite.BlueZazak, 0x00, 1, 0x10, 0x0a, 'Thieves Ambush')
create_sprite(0x00cb, EnemySprite.Blob, 0x00, 0, 0x13, 0x0a, 'Thieves Ambush') create_sprite(0x00cb, EnemySprite.Blob, 0x00, 0, 0x13, 0x0a, 'Thieves Ambush')
@@ -1772,7 +1783,7 @@ def init_vanilla_sprites():
create_sprite(0x00cb, EnemySprite.RedZazak, 0x00, 1, 0x08, 0x17, 'Thieves Ambush') create_sprite(0x00cb, EnemySprite.RedZazak, 0x00, 1, 0x08, 0x17, 'Thieves Ambush')
create_sprite(0x00cb, EnemySprite.Blob, 0x00, 0, 0x0b, 0x17, 'Thieves Ambush') create_sprite(0x00cb, EnemySprite.Blob, 0x00, 0, 0x0b, 0x17, 'Thieves Ambush')
create_sprite(0x00cb, EnemySprite.Blob, 0x00, 0, 0x0c, 0x18, 'Thieves Ambush') create_sprite(0x00cb, EnemySprite.Blob, 0x00, 0, 0x0c, 0x18, 'Thieves Ambush')
create_sprite(0x00cb, EnemySprite.BunnyBeam, 0x00, 0, 0x14, 0x1c, 'Thieves Ambush', fix=True) create_sprite(0x00cb, EnemySprite.BunnyBeam, 0x00, 0, 0x14, 0x1c, 'Thieves Ambush') #, fix=True)
create_sprite(0x00cc, EnemySprite.Firesnake, 0x00, 0, 0x13, 0x04, 'Thieves BK Corner') create_sprite(0x00cc, EnemySprite.Firesnake, 0x00, 0, 0x13, 0x04, 'Thieves BK Corner')
create_sprite(0x00cc, EnemySprite.BunnyBeam, 0x00, 1, 0x0b, 0x09, 'Thieves BK Corner') create_sprite(0x00cc, EnemySprite.BunnyBeam, 0x00, 1, 0x0b, 0x09, 'Thieves BK Corner')
create_sprite(0x00cc, EnemySprite.BlueZazak, 0x00, 1, 0x08, 0x0a, 'Thieves BK Corner') create_sprite(0x00cc, EnemySprite.BlueZazak, 0x00, 1, 0x08, 0x0a, 'Thieves BK Corner')
@@ -1824,10 +1835,10 @@ def init_vanilla_sprites():
create_sprite(0x00d2, EnemySprite.Wizzrobe, 0x00, 0, 0x13, 0x10, 'Mire 2') create_sprite(0x00d2, EnemySprite.Wizzrobe, 0x00, 0, 0x13, 0x10, 'Mire 2')
create_sprite(0x00d2, EnemySprite.Popo, 0x00, 0, 0x14, 0x14, 'Mire 2') create_sprite(0x00d2, EnemySprite.Popo, 0x00, 0, 0x14, 0x14, 'Mire 2')
create_sprite(0x00d2, EnemySprite.Popo, 0x00, 0, 0x1c, 0x14, 'Mire 2') create_sprite(0x00d2, EnemySprite.Popo, 0x00, 0, 0x1c, 0x14, 'Mire 2')
create_sprite(0x00d5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x09) create_sprite(0x00d5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x09, embed=True)
create_sprite(0x00d5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x0d) create_sprite(0x00d5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x0d, embed=True)
create_sprite(0x00d5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x11) create_sprite(0x00d5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x11, embed=True)
create_sprite(0x00d5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x15) create_sprite(0x00d5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x15, embed=True)
create_sprite(0x00d5, EnemySprite.HardhatBeetle, 0x00, 0, 0x04, 0x15, 'TR Eye Bridge') create_sprite(0x00d5, EnemySprite.HardhatBeetle, 0x00, 0, 0x04, 0x15, 'TR Eye Bridge')
create_sprite(0x00d6, EnemySprite.LaserEyeTop, 0x00, 0, 0x07, 0x02) create_sprite(0x00d6, EnemySprite.LaserEyeTop, 0x00, 0, 0x07, 0x02)
create_sprite(0x00d6, EnemySprite.Medusa, 0x00, 0, 0x03, 0x16) create_sprite(0x00d6, EnemySprite.Medusa, 0x00, 0, 0x03, 0x16)
@@ -1849,7 +1860,7 @@ def init_vanilla_sprites():
create_sprite(0x00d9, EnemySprite.GreenEyegoreMimic, 0x00, 0, 0x18, 0x1b, 'Eastern False Switches') create_sprite(0x00d9, EnemySprite.GreenEyegoreMimic, 0x00, 0, 0x18, 0x1b, 'Eastern False Switches')
create_sprite(0x00da, EnemySprite.AntiFairy, 0x00, 0, 0x07, 0x18, 'Eastern Attic Start') create_sprite(0x00da, EnemySprite.AntiFairy, 0x00, 0, 0x07, 0x18, 'Eastern Attic Start')
create_sprite(0x00da, EnemySprite.AntiFairy, 0x00, 0, 0x08, 0x18, 'Eastern Attic Start') create_sprite(0x00da, EnemySprite.AntiFairy, 0x00, 0, 0x08, 0x18, 'Eastern Attic Start')
create_sprite(0x00db, EnemySprite.BunnyBeam, 0x00, 0, 0x03, 0x04, 'Thieves Lobby', fix=True) create_sprite(0x00db, EnemySprite.BunnyBeam, 0x00, 0, 0x03, 0x04, 'Thieves Lobby') #, fix=True)
create_sprite(0x00db, EnemySprite.SparkCW, 0x00, 1, 0x0e, 0x0a, 'Thieves Lobby') create_sprite(0x00db, EnemySprite.SparkCW, 0x00, 1, 0x0e, 0x0a, 'Thieves Lobby')
create_sprite(0x00db, EnemySprite.RedZazak, 0x00, 1, 0x17, 0x0b, 'Thieves Lobby') create_sprite(0x00db, EnemySprite.RedZazak, 0x00, 1, 0x17, 0x0b, 'Thieves Lobby')
create_sprite(0x00db, EnemySprite.BlueZazak, 0x00, 1, 0x0f, 0x0c, 'Thieves Lobby') create_sprite(0x00db, EnemySprite.BlueZazak, 0x00, 1, 0x0f, 0x0c, 'Thieves Lobby')
@@ -1884,34 +1895,34 @@ def init_vanilla_sprites():
create_sprite(0x00e2, EnemySprite.Faerie, 0x00, 0, 0x08, 0x07) create_sprite(0x00e2, EnemySprite.Faerie, 0x00, 0, 0x08, 0x07)
create_sprite(0x00e2, EnemySprite.HeartPiece, 0x00, 0, 0x13, 0x10) create_sprite(0x00e2, EnemySprite.HeartPiece, 0x00, 0, 0x13, 0x10)
create_sprite(0x00e3, EnemySprite.MagicBat, 0x00, 1, 0x17, 0x05) create_sprite(0x00e3, EnemySprite.MagicBat, 0x00, 1, 0x17, 0x05)
create_sprite(0x00e4, EnemySprite.Keese, 0x00, 0, 0x19, 0x07, 'Old Man House') create_sprite(0x00e4, EnemySprite.Keese, 0x00, 0, 0x19, 0x07, 'Old Man House', embed=True) # partial
create_sprite(0x00e4, EnemySprite.Keese, 0x00, 0, 0x18, 0x08, 'Old Man House') create_sprite(0x00e4, EnemySprite.Keese, 0x00, 0, 0x18, 0x08, 'Old Man House')
create_sprite(0x00e4, EnemySprite.Keese, 0x00, 0, 0x17, 0x09, 'Old Man House') create_sprite(0x00e4, EnemySprite.Keese, 0x00, 0, 0x17, 0x09, 'Old Man House', embed=True) # partial
create_sprite(0x00e4, EnemySprite.OldMan, 0x00, 0, 0x06, 0x16, 'Old Man House') create_sprite(0x00e4, EnemySprite.OldMan, 0x00, 0, 0x06, 0x16, 'Old Man House')
create_sprite(0x00e5, EnemySprite.Keese, 0x00, 0, 0x0f, 0x09, 'Old Man House Back') create_sprite(0x00e5, EnemySprite.Keese, 0x00, 0, 0x0f, 0x09, 'Old Man House Back')
create_sprite(0x00e5, EnemySprite.Keese, 0x00, 0, 0x10, 0x09, 'Old Man House Back') create_sprite(0x00e5, EnemySprite.Keese, 0x00, 0, 0x10, 0x09, 'Old Man House Back')
create_sprite(0x00e5, EnemySprite.Keese, 0x00, 0, 0x11, 0x09, 'Old Man House Back') create_sprite(0x00e5, EnemySprite.Keese, 0x00, 0, 0x11, 0x09, 'Old Man House Back')
create_sprite(0x00e5, EnemySprite.Keese, 0x00, 0, 0x1b, 0x0e, 'Old Man House Back') create_sprite(0x00e5, EnemySprite.Keese, 0x00, 0, 0x1b, 0x0e, 'Old Man House Back', embed=True)
create_sprite(0x00e5, EnemySprite.Keese, 0x00, 0, 0x0f, 0x12, 'Old Man House Back') create_sprite(0x00e5, EnemySprite.Keese, 0x00, 0, 0x0f, 0x12, 'Old Man House Back', embed=True) # partial
create_sprite(0x00e5, EnemySprite.Keese, 0x00, 0, 0x11, 0x12, 'Old Man House Back') create_sprite(0x00e5, EnemySprite.Keese, 0x00, 0, 0x11, 0x12, 'Old Man House Back', embed=True) # partial
create_sprite(0x00e6, EnemySprite.Keese, 0x00, 0, 0x1b, 0x0b, 'Death Mountain Return Cave (left)') create_sprite(0x00e6, EnemySprite.Keese, 0x00, 0, 0x1b, 0x0b, 'Death Mountain Return Cave (left)', embed=True) # partial
create_sprite(0x00e6, EnemySprite.Keese, 0x00, 0, 0x17, 0x0f, 'Death Mountain Return Cave (left)') create_sprite(0x00e6, EnemySprite.Keese, 0x00, 0, 0x17, 0x0f, 'Death Mountain Return Cave (left)', embed=True) # partial
create_sprite(0x00e6, EnemySprite.Keese, 0x00, 0, 0x13, 0x13, 'Death Mountain Return Cave (left)') create_sprite(0x00e6, EnemySprite.Keese, 0x00, 0, 0x13, 0x13, 'Death Mountain Return Cave (left)', embed=True) # partial
create_sprite(0x00e6, EnemySprite.Keese, 0x00, 0, 0x0f, 0x17, 'Death Mountain Return Cave (left)') create_sprite(0x00e6, EnemySprite.Keese, 0x00, 0, 0x0f, 0x17, 'Death Mountain Return Cave (left)', embed=True) # partial
create_sprite(0x00e6, EnemySprite.Keese, 0x00, 0, 0x0b, 0x1b, 'Death Mountain Return Cave (left)') create_sprite(0x00e6, EnemySprite.Keese, 0x00, 0, 0x0b, 0x1b, 'Death Mountain Return Cave (left)', embed=True) # partial
create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x10, 0x04, 'Death Mountain Return Cave (right)') create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x10, 0x04, 'Death Mountain Return Cave (right)', embed=True) # partial
create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x13, 0x04, 'Death Mountain Return Cave (right)') create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x13, 0x04, 'Death Mountain Return Cave (right)', embed=True) # partial
create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x15, 0x0b, 'Death Mountain Return Cave (right)') create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x15, 0x0b, 'Death Mountain Return Cave (right)', embed=True)
create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x0b, 0x0c, 'Death Mountain Return Cave (right)') create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x0b, 0x0c, 'Death Mountain Return Cave (right)')
create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x0b, 0x0d, 'Death Mountain Return Cave (right)') create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x0b, 0x0d, 'Death Mountain Return Cave (right)')
create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x15, 0x0d, 'Death Mountain Return Cave (right)') create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x15, 0x0d, 'Death Mountain Return Cave (right)', embed=True)
create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x15, 0x0f, 'Death Mountain Return Cave (right)') create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x15, 0x0f, 'Death Mountain Return Cave (right)', embed=True)
create_sprite(0x00e8, EnemySprite.HardhatBeetle, 0x00, 0, 0x07, 0x05, 'Superbunny Cave (Bottom)') create_sprite(0x00e8, EnemySprite.HardhatBeetle, 0x00, 0, 0x07, 0x05, 'Superbunny Cave (Bottom)')
create_sprite(0x00e8, EnemySprite.HardhatBeetle, 0x00, 0, 0x17, 0x08, 'Superbunny Cave (Bottom)') create_sprite(0x00e8, EnemySprite.HardhatBeetle, 0x00, 0, 0x17, 0x08, 'Superbunny Cave (Bottom)')
create_sprite(0x00e8, EnemySprite.HardhatBeetle, 0x00, 0, 0x07, 0x0c, 'Superbunny Cave (Bottom)') create_sprite(0x00e8, EnemySprite.HardhatBeetle, 0x00, 0, 0x07, 0x0c, 'Superbunny Cave (Bottom)')
create_sprite(0x00e8, EnemySprite.HardhatBeetle, 0x00, 0, 0x19, 0x0c, 'Superbunny Cave (Bottom)') create_sprite(0x00e8, EnemySprite.HardhatBeetle, 0x00, 0, 0x19, 0x0c, 'Superbunny Cave (Bottom)')
create_sprite(0x00ea, EnemySprite.HeartPiece, 0x00, 0, 0x0b, 0x0b) create_sprite(0x00ea, EnemySprite.HeartPiece, 0x00, 0, 0x0b, 0x0b)
create_sprite(0x00eb, EnemySprite.Bumper, 0x00, 0, 0x17, 0x14) create_sprite(0x00eb, EnemySprite.Bumper, 0x00, 0, 0x17, 0x14, fix=True) # bumper cave sans logic?
create_sprite(0x00ee, EnemySprite.MiniMoldorm, 0x00, 0, 0x10, 0x04, 'Spiral Cave (Top)') create_sprite(0x00ee, EnemySprite.MiniMoldorm, 0x00, 0, 0x10, 0x04, 'Spiral Cave (Top)')
create_sprite(0x00ee, EnemySprite.MiniMoldorm, 0x00, 0, 0x0b, 0x0e, 'Spiral Cave (Top)') create_sprite(0x00ee, EnemySprite.MiniMoldorm, 0x00, 0, 0x0b, 0x0e, 'Spiral Cave (Top)')
create_sprite(0x00ee, EnemySprite.MiniMoldorm, 0x00, 0, 0x09, 0x1c, 'Spiral Cave (Top)') create_sprite(0x00ee, EnemySprite.MiniMoldorm, 0x00, 0, 0x09, 0x1c, 'Spiral Cave (Top)')
@@ -1921,26 +1932,26 @@ def init_vanilla_sprites():
create_sprite(0x00ef, EnemySprite.MiniMoldorm, 0x00, 0, 0x14, 0x0a, 'Paradox Cave Chest Area') create_sprite(0x00ef, EnemySprite.MiniMoldorm, 0x00, 0, 0x14, 0x0a, 'Paradox Cave Chest Area')
create_sprite(0x00ef, EnemySprite.MiniMoldorm, 0x00, 0, 0x1b, 0x0a, 'Paradox Cave Chest Area') create_sprite(0x00ef, EnemySprite.MiniMoldorm, 0x00, 0, 0x1b, 0x0a, 'Paradox Cave Chest Area')
create_sprite(0x00ef, EnemySprite.CrystalSwitch, 0x00, 0, 0x18, 0x06) create_sprite(0x00ef, EnemySprite.CrystalSwitch, 0x00, 0, 0x18, 0x06)
create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x09, 0x03, 'Old Man Cave') create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x09, 0x03, 'Old Man Cave (West)', embed=True)
create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x10, 0x03, 'Old Man Cave') create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x10, 0x03, 'Old Man Cave (West)', embed=True)
create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x08, 0x04, 'Old Man Cave') create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x08, 0x04, 'Old Man Cave (West)', embed=True) # partial
create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x0a, 0x04, 'Old Man Cave') create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x0a, 0x04, 'Old Man Cave (West)', embed=True) # partial
create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x09, 0x07, 'Old Man Cave') create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x09, 0x07, 'Old Man Cave (West)', embed=True) # partial
create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x03, 0x0a, 'Old Man Cave') create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x03, 0x0a, 'Old Man Cave (West)', embed=True) # partial
create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x05, 0x0a, 'Old Man Cave') create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x05, 0x0a, 'Old Man Cave (West)', embed=True) # partial
create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x0e, 0x0c, 'Old Man Cave') create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x0e, 0x0c, 'Old Man Cave (West)', embed=True)
create_sprite(0x00f0, EnemySprite.OldMan, 0x00, 0, 0x1b, 0x10, 'Old Man Cave') create_sprite(0x00f0, EnemySprite.OldMan, 0x00, 0, 0x1b, 0x10, 'Old Man Cave (West)')
create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x13, 0x13, 'Old Man Cave') create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x13, 0x13, 'Old Man Cave (West)', embed=True)
create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x19, 0x10, 'Old Man Cave') create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x19, 0x10, 'Old Man Cave (East)', embed=True) # partial
create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x1c, 0x10, 'Old Man Cave') create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x1c, 0x10, 'Old Man Cave (East)', embed=True) # partial
create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x18, 0x11, 'Old Man Cave') create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x18, 0x11, 'Old Man Cave (East)', embed=True)
create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x1d, 0x11, 'Old Man Cave') create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x1d, 0x11, 'Old Man Cave (East)', embed=True)
create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x17, 0x12, 'Old Man Cave') create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x17, 0x12, 'Old Man Cave (East)', embed=True)
create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x1e, 0x12, 'Old Man Cave') create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x1e, 0x12, 'Old Man Cave (East)', embed=True)
create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x06, 0x1b, 'Old Man Cave') create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x06, 0x1b, 'Old Man Cave (East)', embed=True) # partial
create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x09, 0x1b, 'Old Man Cave') create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x09, 0x1b, 'Old Man Cave (East)', embed=True) # partial
create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x07, 0x1c, 'Old Man Cave') create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x07, 0x1c, 'Old Man Cave (East)', embed=True) # partial
create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x08, 0x1c, 'Old Man Cave') create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x08, 0x1c, 'Old Man Cave (East)', embed=True) # partial
create_sprite(0x00f3, EnemySprite.Grandma, 0x00, 0, 0x06, 0x14) create_sprite(0x00f3, EnemySprite.Grandma, 0x00, 0, 0x06, 0x14)
create_sprite(0x00f4, EnemySprite.ArgueBros, 0x00, 0, 0x17, 0x14) create_sprite(0x00f4, EnemySprite.ArgueBros, 0x00, 0, 0x17, 0x14)
create_sprite(0x00f5, EnemySprite.ArgueBros, 0x00, 0, 0x08, 0x14) create_sprite(0x00f5, EnemySprite.ArgueBros, 0x00, 0, 0x08, 0x14)
@@ -1951,7 +1962,7 @@ def init_vanilla_sprites():
create_sprite(0x00fa, EnemySprite.Faerie, 0x00, 0, 0x17, 0x0e) create_sprite(0x00fa, EnemySprite.Faerie, 0x00, 0, 0x17, 0x0e)
create_sprite(0x00fa, EnemySprite.Faerie, 0x00, 0, 0x18, 0x10) create_sprite(0x00fa, EnemySprite.Faerie, 0x00, 0, 0x18, 0x10)
create_sprite(0x00fa, EnemySprite.Faerie, 0x00, 0, 0x15, 0x11) create_sprite(0x00fa, EnemySprite.Faerie, 0x00, 0, 0x15, 0x11)
create_sprite(0x00fb, EnemySprite.Bumper, 0x00, 0, 0x17, 0x0d, 'Bumper Cave (top)') create_sprite(0x00fb, EnemySprite.Bumper, 0x00, 0, 0x17, 0x0d, 'Bumper Cave (bottom)')
create_sprite(0x00fb, EnemySprite.HardhatBeetle, 0x00, 0, 0x19, 0x0a, 'Bumper Cave (bottom)') create_sprite(0x00fb, EnemySprite.HardhatBeetle, 0x00, 0, 0x19, 0x0a, 'Bumper Cave (bottom)')
create_sprite(0x00fb, EnemySprite.HardhatBeetle, 0x00, 0, 0x15, 0x12, 'Bumper Cave (bottom)') create_sprite(0x00fb, EnemySprite.HardhatBeetle, 0x00, 0, 0x15, 0x12, 'Bumper Cave (bottom)')
create_sprite(0x00fd, EnemySprite.MiniMoldorm, 0x00, 0, 0x09, 0x0e, 'Fairy Ascension Cave (Bottom)') create_sprite(0x00fd, EnemySprite.MiniMoldorm, 0x00, 0, 0x09, 0x0e, 'Fairy Ascension Cave (Bottom)')
@@ -2124,9 +2135,6 @@ def setup_enemy_locations(world, player):
create_drop_location(sprite, index, super_tile, world, player) create_drop_location(sprite, index, super_tile, world, player)
exceptions = {0xf1: [4, 5]} # these keese cannot be lured away
def valid_drop_location(sprite, index, world, player): def valid_drop_location(sprite, index, world, player):
if world.dropshuffle[player] == 'underworld': if world.dropshuffle[player] == 'underworld':
if sprite.drops_item and sprite.drop_item_kind in [0xe4, 0xe5]: if sprite.drops_item and sprite.drop_item_kind in [0xe4, 0xe5]:
@@ -2134,8 +2142,7 @@ def valid_drop_location(sprite, index, world, player):
return False return False
elif sprite.sub_type != SpriteType.Overlord: elif sprite.sub_type != SpriteType.Overlord:
stat = world.data_tables[player].enemy_stats[sprite.kind] stat = world.data_tables[player].enemy_stats[sprite.kind]
return stat.drop_flag and (sprite.super_tile not in exceptions return stat.drop_flag and (not sprite.embedded or sprite.static) # static for the babusu spawners in Ice
or index not in exceptions[sprite.super_tile])
def create_drop_location(sprite, index, super_tile, world, player): def create_drop_location(sprite, index, super_tile, world, player):
@@ -2144,11 +2151,12 @@ def create_drop_location(sprite, index, super_tile, world, player):
region_name = sprite.region region_name = sprite.region
parent = world.get_region(region_name, player) parent = world.get_region(region_name, player)
enemy_name = enemy_names[sprite.kind] enemy_name = enemy_names[sprite.kind]
descriptor = f'{enemy_name} #{index+1}' descriptor = f'Enemy #{index+1}'
modifier = parent.hint_text not in {'a storyteller', 'fairies deep in a cave', 'a spiky hint', modifier = parent.hint_text not in {'a storyteller', 'fairies deep in a cave', 'a spiky hint',
'a bounty of five items', 'the sick kid', 'Sahasrahla'} 'a bounty of five items', 'the sick kid', 'Sahasrahla'}
hint_text = f'held by a {enemy_name} {"in" if modifier else "near"} {parent.hint_text}' hint_text = f'held by a {enemy_name} {"in" if modifier else "near"} {parent.hint_text}'
drop_location = Location(player, f'{region_name} {descriptor}', address, hint_text=hint_text, parent=parent) drop_location = Location(player, f'{region_name} {descriptor}', address, hint_text=hint_text, parent=parent,
note=enemy_name)
world.dynamic_locations.append(drop_location) world.dynamic_locations.append(drop_location)
drop_location.drop = sprite drop_location.drop = sprite
sprite.location = drop_location sprite.location = drop_location

View File

@@ -1,8 +1,8 @@
from Utils import load_yaml from Utils import load_cached_yaml
class DamageTable: class DamageTable:
def __init__(self): def __init__(self):
self.damage_table = load_yaml(['source', 'enemizer', 'damage_table.yaml']) self.damage_table = load_cached_yaml(['source', 'enemizer', 'damage_table.yaml'])
self.enemy_damage = load_yaml(['source', 'enemizer', 'enemy_damage_table.yaml']) self.enemy_damage = load_cached_yaml(['source', 'enemizer', 'enemy_damage_table.yaml'])

View File

@@ -1,7 +1,7 @@
import RaceRandom as random import RaceRandom as random
from Utils import snes_to_pc from Utils import snes_to_pc
from source.dungeon.EnemyList import SpriteType, EnemySprite from source.dungeon.EnemyList import SpriteType, EnemySprite, sprite_translation
from source.dungeon.RoomList import Room010C from source.dungeon.RoomList import Room010C
from source.enemizer.SpriteSheets import sub_group_choices from source.enemizer.SpriteSheets import sub_group_choices
from source.enemizer.SpriteSheets import randomize_underworld_sprite_sheets, randomize_overworld_sprite_sheets from source.enemizer.SpriteSheets import randomize_underworld_sprite_sheets, randomize_overworld_sprite_sheets
@@ -19,6 +19,7 @@ shutter_sprites = {
0xd2: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, 0xef: {0, 1, 2}, 0x10c: {4, 5, 6, 7}, 0x123: {0, 1, 2, 3} 0xd2: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, 0xef: {0, 1, 2}, 0x10c: {4, 5, 6, 7}, 0x123: {0, 1, 2, 3}
} }
def setup_specific_requirements(data_tables): def setup_specific_requirements(data_tables):
requirements = data_tables.sprite_requirements requirements = data_tables.sprite_requirements
water_groups = set() water_groups = set()
@@ -36,7 +37,7 @@ def setup_specific_requirements(data_tables):
for i in range(0, 4): for i in range(0, 4):
limited = [x for x in requirement.sub_groups[i] if x in sub_group_choices[i]] limited = [x for x in requirement.sub_groups[i] if x in sub_group_choices[i]]
water_sub_groups[i].update(limited) water_sub_groups[i].update(limited)
if requirement.good_for_shutter(): if requirement.good_for_shutter([]):
killable_groups.update(requirement.groups) killable_groups.update(requirement.groups)
for i in range(0, 4): for i in range(0, 4):
killable_sub_groups[i].update(requirement.sub_groups[i]) killable_sub_groups[i].update(requirement.sub_groups[i])
@@ -47,7 +48,7 @@ def setup_specific_requirements(data_tables):
return water_groups, water_sub_groups, killable_groups, killable_sub_groups, key_groups, key_sub_groups return water_groups, water_sub_groups, killable_groups, killable_sub_groups, key_groups, key_sub_groups
def get_possible_sheets(room_id, data_tables, specific, uw_sheets): def get_possible_sheets(room_id, data_tables, specific, all_sheets, uw_sheets):
# forced sprites for room # forced sprites for room
requirements = data_tables.sprite_requirements requirements = data_tables.sprite_requirements
@@ -57,7 +58,7 @@ def get_possible_sheets(room_id, data_tables, specific, uw_sheets):
key_needed = False key_needed = False
killable_needed = room_id in shutter_sprites killable_needed = room_id in shutter_sprites
for sheet in uw_sheets: for sheet in all_sheets:
if room_id in sheet.room_set: if room_id in sheet.room_set:
return [sheet] return [sheet]
@@ -134,10 +135,10 @@ def get_possible_sheets(room_id, data_tables, specific, uw_sheets):
return possible_sheets return possible_sheets
def get_possible_ow_sheets(area_id, ow_sheets, data_tables): def get_possible_ow_sheets(area_id, all_sheets, ow_sheets, data_tables):
requirements = data_tables.sprite_requirements requirements = data_tables.sprite_requirements
for sheet in ow_sheets: for sheet in all_sheets:
if area_id in sheet.room_set: if area_id in sheet.room_set:
return [sheet] return [sheet]
@@ -173,6 +174,10 @@ def get_possible_ow_sheets(area_id, ow_sheets, data_tables):
return possible_sheets return possible_sheets
ignore_sheets_uw = {65, 69, 71, 78, 79, 82, 88, 98}
ignore_sheets_ow = {6}
def find_candidate_sprites(data_tables, sheet_range, uw=True): def find_candidate_sprites(data_tables, sheet_range, uw=True):
requirements = data_tables.sprite_requirements requirements = data_tables.sprite_requirements
sprite_candidates = [] sprite_candidates = []
@@ -195,6 +200,8 @@ def find_candidate_sprites(data_tables, sheet_range, uw=True):
for num in sheet_range: for num in sheet_range:
sheet = data_tables.sprite_sheets[num] sheet = data_tables.sprite_sheets[num]
all_sheets.append(sheet) all_sheets.append(sheet)
if (uw and num in ignore_sheets_uw) or (not uw and num in ignore_sheets_ow):
continue
if candidate_groups and sheet not in candidate_groups: if candidate_groups and sheet not in candidate_groups:
continue continue
test_subs = [i for i in range(0, 4) if candidate_sub_groups[i]] test_subs = [i for i in range(0, 4) if candidate_sub_groups[i]]
@@ -257,8 +264,20 @@ def get_randomize_able_sprites_ow(area_id, data_tables):
return sprite_table return sprite_table
def randomize_underworld_rooms(data_tables, world, player): sprite_limiter = {
EnemySprite.Debirando: 2,
EnemySprite.DebirandoPit: 2,
EnemySprite.AntiFairyCircle: 4
}
def exceeds_sprite_limit(limit, sprite):
return sprite_limiter[sprite.sprite]-1+limit > 16 if sprite.sprite in sprite_limiter else False
def randomize_underworld_rooms(data_tables, world, player, custom_uw):
any_enemy_logic = world.any_enemy_logic[player] any_enemy_logic = world.any_enemy_logic[player]
enemy_drops_active = world.dropshuffle[player] in ['underworld']
specific = setup_specific_requirements(data_tables) specific = setup_specific_requirements(data_tables)
uw_candidates, uw_sheets, all_sheets = find_candidate_sprites(data_tables, range(65, 124)) uw_candidates, uw_sheets, all_sheets = find_candidate_sprites(data_tables, range(65, 124))
for room_id in range(0, 0x128): for room_id in range(0, 0x128):
@@ -268,13 +287,15 @@ def randomize_underworld_rooms(data_tables, world, player):
if room_id not in data_tables.uw_enemy_table.room_map: if room_id not in data_tables.uw_enemy_table.room_map:
continue continue
# sprite_reqs = data_tables.sprite_requirements # sprite_reqs = data_tables.sprite_requirements
current_sprites = data_tables.uw_enemy_table.room_map[room_id]
sprite_limit = sum(sprite_limiter[x.kind] if x.kind in sprite_limiter else 1 for x in current_sprites)
randomizeable_sprites = get_randomize_able_sprites(room_id, data_tables) randomizeable_sprites = get_randomize_able_sprites(room_id, data_tables)
if not randomizeable_sprites: if not randomizeable_sprites:
candidate_sheets = get_possible_sheets(room_id, data_tables, specific, all_sheets) candidate_sheets = get_possible_sheets(room_id, data_tables, specific, all_sheets, uw_sheets)
chosen_sheet = random.choice(candidate_sheets) chosen_sheet = random.choice(candidate_sheets)
data_tables.room_headers[room_id].sprite_sheet = chosen_sheet.id - 0x40 data_tables.room_headers[room_id].sprite_sheet = chosen_sheet.id - 0x40
if randomizeable_sprites: if randomizeable_sprites:
candidate_sheets = get_possible_sheets(room_id, data_tables, specific, all_sheets) candidate_sheets = get_possible_sheets(room_id, data_tables, specific, all_sheets, uw_sheets)
done = False done = False
while not done: while not done:
chosen_sheet = random.choice(candidate_sheets) chosen_sheet = random.choice(candidate_sheets)
@@ -283,28 +304,36 @@ def randomize_underworld_rooms(data_tables, world, player):
randomized = True randomized = True
wallmaster_chosen = room_id in {0x0039, 0x0049, 0x0056, 0x0057, 0x0068, 0x008d} wallmaster_chosen = room_id in {0x0039, 0x0049, 0x0056, 0x0057, 0x0068, 0x008d}
for i, sprite in randomizeable_sprites.items(): for i, sprite in randomizeable_sprites.items():
# filter out water if necessary if room_id in custom_uw and i in custom_uw[room_id]:
candidate_sprites = [x for x in candidate_sprites if not x.water_only or sprite.water] sprite.kind = sprite_translation[custom_uw[room_id][i]]
# filter out wallmaster if already on tile
if wallmaster_chosen:
candidate_sprites = [x for x in candidate_sprites if x.sprite != EnemySprite.Wallmaster]
if sprite.drops_item:
forbidden = determine_forbidden(any_enemy_logic == 'none', room_id, True)
choice_list = [x for x in candidate_sprites if x.good_for_key_drop(forbidden)]
# terrorpin, deadrock, buzzblob, lynel, redmimic/eyegore
elif room_id in shutter_sprites and i in shutter_sprites[room_id]:
forbidden = determine_forbidden(any_enemy_logic != 'allow_all', room_id)
choice_list = [x for x in candidate_sprites if x.good_for_shutter(forbidden)]
else: else:
choice_list = [x for x in candidate_sprites if not x.water_only] # filter out water if necessary
choice_list = filter_choices(choice_list, room_id, i, data_tables.uw_enemy_denials) candidate_sprites = [x for x in candidate_sprites if not x.water_only or sprite.water]
if len(choice_list) == 0: # filter out wallmaster if already on tile
randomized = False if wallmaster_chosen:
break candidate_sprites = [x for x in candidate_sprites if x.sprite != EnemySprite.Wallmaster]
weight = [data_tables.uw_weights[r.sprite] for r in choice_list] candidate_sprites = [x for x in candidate_sprites if not exceeds_sprite_limit(sprite_limit, x)]
chosen = random.choices(choice_list, weight, k=1)[0] if sprite.drops_item:
sprite.kind = chosen.sprite forbidden = determine_forbidden(any_enemy_logic == 'none', room_id, True)
if chosen.sprite == EnemySprite.Wallmaster: choice_list = [x for x in candidate_sprites if x.good_for_key_drop(forbidden)]
# terrorpin, deadrock, buzzblob, lynel, redmimic/eyegore
elif room_id in shutter_sprites and i in shutter_sprites[room_id]:
forbidden = determine_forbidden(any_enemy_logic != 'allow_all', room_id)
choice_list = [x for x in candidate_sprites if x.good_for_shutter(forbidden)]
else:
choice_list = [x for x in candidate_sprites if not x.water_only]
choice_list = filter_choices(choice_list, room_id, i, data_tables.uw_enemy_denials)
if enemy_drops_active:
choice_list = filter_choices(choice_list, room_id, i, data_tables.uw_enemy_drop_denials)
if len(choice_list) == 0:
randomized = False
break
weight = [data_tables.uw_weights[r.sprite] for r in choice_list]
chosen = random.choices(choice_list, weight, k=1)[0]
sprite.kind = chosen.sprite
if sprite.kind in sprite_limiter:
sprite_limit += sprite_limiter[sprite.kind]-1
if sprite.kind == EnemySprite.Wallmaster:
wallmaster_chosen = True wallmaster_chosen = True
sprite.kind = 0x09 sprite.kind = 0x09
sprite.sub_type = SpriteType.Overlord sprite.sub_type = SpriteType.Overlord
@@ -332,7 +361,7 @@ def filter_choices(options, room_id, sprite_idx, denials):
return [x for x in options if key not in denials or x.sprite not in denials[key]] return [x for x in options if key not in denials or x.sprite not in denials[key]]
def randomize_overworld_enemies(data_tables): def randomize_overworld_enemies(data_tables, custom_ow):
ow_candidates, ow_sheets, all_sheets = find_candidate_sprites(data_tables, range(1, 64), False) ow_candidates, ow_sheets, all_sheets = find_candidate_sprites(data_tables, range(1, 64), False)
areas_to_randomize = [0, 2, 3, 5, 7, 0xA, 0xF, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, areas_to_randomize = [0, 2, 3, 5, 7, 0xA, 0xF, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
0x1a, 0x1b, 0x1d, 0x1e, 0x22, 0x25, 0x28, 0x29, 0x2A, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x1a, 0x1b, 0x1d, 0x1e, 0x22, 0x25, 0x28, 0x29, 0x2A, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
@@ -342,19 +371,23 @@ def randomize_overworld_enemies(data_tables):
for area_id in area_list: for area_id in area_list:
randomizeable_sprites = get_randomize_able_sprites_ow(area_id, data_tables) randomizeable_sprites = get_randomize_able_sprites_ow(area_id, data_tables)
if not randomizeable_sprites: if not randomizeable_sprites:
candidate_sheets = get_possible_ow_sheets(area_id, all_sheets, data_tables) candidate_sheets = get_possible_ow_sheets(area_id, all_sheets, ow_sheets, data_tables)
chosen_sheet = random.choice(candidate_sheets) chosen_sheet = random.choice(candidate_sheets)
data_tables.overworld_sprite_sheets[area_id] = chosen_sheet data_tables.overworld_sprite_sheets[area_id] = chosen_sheet
candidate_sprites = get_possible_enemy_sprites_ow(chosen_sheet, ow_candidates, data_tables) candidate_sprites = get_possible_enemy_sprites_ow(chosen_sheet, ow_candidates, data_tables)
else: else:
candidate_sheets = get_possible_ow_sheets(area_id, ow_sheets, data_tables) candidate_sheets = get_possible_ow_sheets(area_id, all_sheets, ow_sheets, data_tables)
chosen_sheet = random.choice(candidate_sheets) chosen_sheet = random.choice(candidate_sheets)
data_tables.overworld_sprite_sheets[area_id] = chosen_sheet data_tables.overworld_sprite_sheets[area_id] = chosen_sheet
candidate_sprites = get_possible_enemy_sprites_ow(chosen_sheet, ow_candidates, data_tables) candidate_sprites = get_possible_enemy_sprites_ow(chosen_sheet, ow_candidates, data_tables)
for i, sprite in randomizeable_sprites.items(): for i, sprite in randomizeable_sprites.items():
weight = [data_tables.ow_weights[r.sprite] for r in candidate_sprites] if area_id in custom_ow and i in custom_ow[area_id]:
chosen = random.choices(candidate_sprites, weight, k=1)[0] sprite.kind = sprite_translation[custom_ow[area_id][i]]
sprite.kind = chosen.sprite else:
candidate_sprites = filter_choices(candidate_sprites, area_id, i, data_tables.ow_enemy_denials)
weight = [data_tables.ow_weights[r.sprite] for r in candidate_sprites]
chosen = random.choices(candidate_sprites, weight, k=1)[0]
sprite.kind = chosen.sprite
# randomize the bush sprite per area # randomize the bush sprite per area
weight = [data_tables.ow_weights[r.sprite] for r in candidate_sprites] weight = [data_tables.ow_weights[r.sprite] for r in candidate_sprites]
bush_sprite_choice = random.choices(candidate_sprites, weight, k=1)[0] bush_sprite_choice = random.choices(candidate_sprites, weight, k=1)[0]
@@ -374,15 +407,22 @@ skip_sprites = {
def randomize_enemies(world, player): def randomize_enemies(world, player):
if world.enemy_shuffle[player] != 'none': if world.enemy_shuffle[player] != 'none':
data_tables = world.data_tables[player] data_tables = world.data_tables[player]
randomize_underworld_sprite_sheets(data_tables.sprite_sheets, data_tables) custom_uw, custom_ow = {}, {}
randomize_underworld_rooms(data_tables, world, player) enemy_map = world.customizer.get_enemies()
randomize_overworld_sprite_sheets(data_tables.sprite_sheets) if enemy_map and player in enemy_map:
randomize_overworld_enemies(data_tables) if 'Underworld' in enemy_map[player]:
custom_uw = enemy_map[player]['Underworld']
if 'Overworld' in enemy_map[player]:
custom_ow = enemy_map[player]['Overworld']
randomize_underworld_sprite_sheets(data_tables.sprite_sheets, data_tables, custom_uw)
randomize_underworld_rooms(data_tables, world, player, custom_uw)
randomize_overworld_sprite_sheets(data_tables.sprite_sheets, data_tables, custom_ow)
randomize_overworld_enemies(data_tables, custom_ow)
# fix thief stats # fix thief stats
subclass_table = world.damage_table[player].damage_table['SubClassTable'] subclass_table = world.damage_table[player].damage_table['SubClassTable']
subclass_table[EnemySprite.Thief] = subclass_table[EnemySprite.GreenEyegoreMimic] subclass_table[EnemySprite.Thief] = subclass_table[EnemySprite.GreenEyegoreMimic]
data_tables.enemy_stats[EnemySprite.Thief].health = 4 data_tables.enemy_stats[EnemySprite.Thief].health = 4
# todo: could turn droppable on here if we wanted # todo: could turn droppable on here if we wanted for theives
# health shuffle # health shuffle
if world.enemy_health[player] != 'default': if world.enemy_health[player] != 'default':
stats = world.data_tables[player].enemy_stats stats = world.data_tables[player].enemy_stats
@@ -423,6 +463,8 @@ def randomize_enemies(world, player):
def write_enemy_shuffle_settings(world, player, rom): def write_enemy_shuffle_settings(world, player, rom):
if world.dropshuffle[player] in ['underworld']:
rom.write_byte(snes_to_pc(0x368109), 0x01)
if world.enemy_shuffle[player] != 'none': if world.enemy_shuffle[player] != 'none':
# killable thief # killable thief
rom.write_byte(snes_to_pc(0x368108), 0xc4) rom.write_byte(snes_to_pc(0x368108), 0xc4)

View File

@@ -2,7 +2,7 @@ from types import SimpleNamespace
from collections import Counter, defaultdict from collections import Counter, defaultdict
from source.dungeon.EnemyList import enemy_names, SpriteType from source.dungeon.EnemyList import enemy_names, SpriteType
from source.enemizer.Enemizer import randomize_underworld_rooms from source.enemizer.Enemizer import randomize_underworld_rooms, randomize_overworld_enemies
from source.enemizer.SpriteSheets import randomize_underworld_sprite_sheets, randomize_overworld_sprite_sheets from source.enemizer.SpriteSheets import randomize_underworld_sprite_sheets, randomize_overworld_sprite_sheets
from source.rom.DataTables import init_data_tables from source.rom.DataTables import init_data_tables
from source.enemizer.DamageTables import DamageTable from source.enemizer.DamageTables import DamageTable
@@ -49,25 +49,125 @@ def calculate_odds():
if __name__ == '__main__': if __name__ == '__main__':
calculate_odds() # calculate_odds()
# random.seed(42) random.seed(42)
# #
# stats = defaultdict(Counter) frequency = Counter()
# column_headers = {} sheet_ctr = Counter()
# ctr_uw = Counter()
# for trial in range(0, 100): ctr_ow = Counter()
# world = SimpleNamespace(pottery={1: 'none'}) sheet_thing = Counter()
# data_tables = init_data_tables(world, 1) sheet_sub_groups = defaultdict(set)
#
# randomize_underworld_sprite_sheets(data_tables.sprite_sheets) for trial in range(0, 100):
# randomize_underworld_rooms(data_tables) world = SimpleNamespace(pottery={1: 'none'}, damage_table={1: DamageTable()}, any_enemy_logic={1: 'allow_all'},
# for room_id, enemy_list in data_tables.uw_enemy_table.room_map.items(): dropshuffle={1: 'off'})
# # print(f'Room {hex(room_id)}:') data_tables = init_data_tables(world, 1)
# for i, sprite in enumerate(enemy_list): stats = data_tables.enemy_stats
# if sprite.sub_type == SpriteType.Overlord:
# result = f'O{hex(sprite.kind)}' def randomize_able_sprite(sprite, stats):
# else: if sprite.static:
# result = enemy_names[sprite.kind] return False
if sprite.sub_type == 0x7 and sprite.kind != 0x9:
return False
if sprite.sub_type == 0x7 and sprite.kind == 0x9:
return True
return sprite.kind not in stats or not stats[sprite.kind].static
if trial == 0:
print(f' Underworld:')
for room_id, enemy_list in data_tables.uw_enemy_table.room_map.items():
print(f' {hex(room_id)}:')
for i, sprite in enumerate(enemy_list):
if randomize_able_sprite(sprite, stats):
print(f' {i}: {str(sprite)}')
print(f' Overworld:')
for area, enemy_list in data_tables.ow_enemy_table.items():
print(f' {hex(area)}:')
for i, sprite in enumerate(enemy_list):
if randomize_able_sprite(sprite, stats):
print(f' {i}: {str(sprite)}')
randomize_underworld_sprite_sheets(data_tables.sprite_sheets, data_tables, {})
randomize_underworld_rooms(data_tables, world, 1)
randomize_overworld_sprite_sheets(data_tables.sprite_sheets, data_tables, {})
randomize_overworld_enemies(data_tables)
for room_id, enemy_list in data_tables.uw_enemy_table.room_map.items():
# print(f'Room {hex(room_id)}:')
for i, sprite in enumerate(enemy_list):
if randomize_able_sprite(sprite, stats):
result = str(sprite)
frequency[result] += 1
for area, enemy_list in data_tables.ow_enemy_table.items():
for i, sprite in enumerate(enemy_list):
if randomize_able_sprite(sprite, stats):
result = str(sprite)
frequency[result] += 1
for num in range(65, 124):
if num in {65, 69, 71, 78, 79, 82, 88, 98}:
continue
sheet = data_tables.sprite_sheets[num]
ret = []
for req in data_tables.sprite_requirements.values():
if not isinstance(req, dict) and sheet.valid_sprite(req) and not req.overlord and not req.static:
ret.append(enemy_names[req.sprite])
for x in ret:
ctr_uw[x] += 1
sheet_ctr[x] += 1
key = tuple(sorted(ret))
sheet_thing[key] += 1
sheet_sub_groups[key].add(tuple(sheet.sub_groups))
for num in range(1, 64):
if num == 6:
continue
sheet = data_tables.sprite_sheets[num]
ret = []
for req in data_tables.sprite_requirements.values():
if not isinstance(req, dict) and sheet.valid_sprite(req) and not req.overlord and not req.static:
ret.append(enemy_names[req.sprite])
for x in ret:
ctr_ow[x] += 1
sheet_ctr[x] += 1
key = tuple(sorted(ret))
sheet_thing[key] += 1
sheet_sub_groups[key].add(tuple(sheet.sub_groups))
total_sheets = sum(sheet_thing.values())
ttl = sum(ctr_uw.values())
print(f'UW: # Total {ttl}')
for k in sorted(list(ctr_uw.keys())):
v = ctr_uw[k]
weight = round(.01 * ttl * 100 / v)
print(f' {k}: {weight} # {v*100/ttl:.5f}% raw:{v} {v*100/total_sheets:.5f}%')
ttl = sum(ctr_ow.values())
print(f'OW: # Total {ttl}')
for k in sorted(list(ctr_ow.keys())):
v = ctr_ow[k]
weight = round(.01 * ttl * 100 / v)
print(f' {k}: {weight} # {v*100/ttl:.5f}% raw:{v} {v*100/total_sheets:.5f}%')
ttl = sum(sheet_ctr.values())
print(f'Sheet: # Total {ttl}')
for k, v in sheet_ctr.items():
print(f' {k} {v*100/ttl:.5f}% raw:{v} {v*100/total_sheets:.5f}%')
ttl = sum(frequency.values())
print(f'Total: {ttl}')
for enemy, freq in frequency.items():
print(f'{enemy} {freq*100/ttl:.5f}% raw:{freq}')
ttl = sum(sheet_thing.values())
print(f'Total Sheets?: {ttl}')
def rejoin(list_of_things):
return f'[{",".join([str(i) for i in list_of_things])}]'
for items, cnt in sheet_thing.items():
print(f'{",".join(items)} {cnt} {cnt*100/ttl:.5f}% {",".join([rejoin(x) for x in sheet_sub_groups[items]])}')
# if result not in column_headers: # if result not in column_headers:
# column_headers[result] = None # column_headers[result] = None
# stats[(room_id, i)][result] += 1 # stats[(room_id, i)][result] += 1

View File

@@ -41,7 +41,7 @@ def defeat_rule_single(world, player, enemy_sprite, region):
rules.append(fire_rod_rule(world, player, vln['FireRod'])) rules.append(fire_rod_rule(world, player, vln['FireRod']))
if vln['Boomerang'] != 0: if vln['Boomerang'] != 0:
rules.append(has_boomerang(player)) rules.append(has_boomerang(player))
if vln['Powder'] != 0: if vln['Powder'] not in [0, -3]: # fairy doesn't make it drop
rules.append(magic_powder_rule(world, player, vln['Powder'])) rules.append(magic_powder_rule(world, player, vln['Powder']))
# skip medallions if vln to Blunt? # skip medallions if vln to Blunt?
if vln['Bombos'] != 0 and vln['Blunt'] == 0: if vln['Bombos'] != 0 and vln['Blunt'] == 0:
@@ -51,7 +51,7 @@ def defeat_rule_single(world, player, enemy_sprite, region):
if vln['Quake'] != 0 and vln['Blunt'] == 0: if vln['Quake'] != 0 and vln['Blunt'] == 0:
rules.append(medallion_rule(world, player, 'Quake', vln['Quake'])) rules.append(medallion_rule(world, player, 'Quake', vln['Quake']))
if enemy_sprite.kind == EnemySprite.StalfosKnight: if enemy_sprite.kind == EnemySprite.StalfosKnight:
# must be bombed to be made vulnerable # must be bombed once made vulnerable
return and_rule(can_use_bombs(world, player), or_rule(*rules)) return and_rule(can_use_bombs(world, player), or_rule(*rules))
return or_rule(*rules) return or_rule(*rules)
@@ -222,19 +222,23 @@ def needed_resources(damage_type, vln_list):
special_rules_check = { special_rules_check = {
'Swamp Waterway': None, 'Swamp Waterway': None,
'Hera Back': [5, 6], 'Hera Back': [5, 6],
'GT Petting Zoo': [1, 4, 5, 7], 'GT Petting Zoo': [5, 8, 9, 11],
'Mimic Cave': [3, 4], 'Mimic Cave': [3, 4],
'Ice Hookshot Ledge': None, 'Ice Hookshot Ledge': None,
'TR Hub Ledges': [3, 4, 5, 6, 7], 'TR Hub Ledges': [3, 4, 5, 6, 7],
'Old Man Cave': None, 'TR Dark Ride': [1, 2, 3],
'GT Speed Torch': [11, 13],
'Old Man Cave (West)': None,
'Old Man Cave (East)': None,
'Old Man House': [1, 3],
'Old Man House Back': [4, 5, 6], 'Old Man House Back': [4, 5, 6],
'Death Mountain Return Cave (left)': None, 'Death Mountain Return Cave (left)': None,
'Death Mountain Return Cave (right)': [1, 2, 3, 6, 7] 'Death Mountain Return Cave (right)': [1, 2, 3, 6, 7] # 2, 5, 6 are considered embedded
} }
def special_rules_for_region(world, player, region_name, location, original_rule): def special_rules_for_region(world, player, region_name, location, original_rule):
if region_name == 'Swamp Waterway': # todo: check on enemizer interaction if region_name == 'Swamp Waterway':
return or_rule(medallion_rule(world, player, 'Quake', 1), return or_rule(medallion_rule(world, player, 'Quake', 1),
medallion_rule(world, player, 'Ether', 1), medallion_rule(world, player, 'Ether', 1),
medallion_rule(world, player, 'Bombos', 1)) medallion_rule(world, player, 'Bombos', 1))
@@ -244,13 +248,24 @@ def special_rules_for_region(world, player, region_name, location, original_rule
return and_rule(original_rule, has_boomerang(player)) return and_rule(original_rule, has_boomerang(player))
else: else:
return original_rule return original_rule
elif region_name in ['TR Hub Ledges', 'Ice Hookshot Ledge', 'Old Man Cave', 'Old Man House Back', elif region_name in ['TR Hub Ledges', 'Ice Hookshot Ledge', 'TR Dark Ride']:
'Death Mountain Return Cave (left)', 'Death Mountain Return Cave (right)']:
enemy_number = int(location.name.split('#')[1]) enemy_number = int(location.name.split('#')[1])
if special_rules_check[region_name] is None or enemy_number in special_rules_check[region_name]: if special_rules_check[region_name] is None or enemy_number in special_rules_check[region_name]:
return and_rule(original_rule, or_rule(has_boomerang(player), has('Hookshot', player))) return and_rule(original_rule, or_rule(has_boomerang(player), has('Hookshot', player)))
else: else:
return original_rule return original_rule
elif region_name in ['Old Man Cave (West)', 'Old Man Cave (East)', 'Old Man House Back', 'Old Man House',
'Death Mountain Return Cave (left)', 'Death Mountain Return Cave (right)']:
enemy_number = int(location.name.split('#')[1])
if region_name == 'Death Mountain Return Cave (left)':
if enemy_number in [1, 5]:
return and_rule(original_rule, or_rule(has_boomerang(player), has('Hookshot', player)))
else:
return and_rule(original_rule, has('Hookshot', player))
if special_rules_check[region_name] is None or enemy_number in special_rules_check[region_name]:
return and_rule(original_rule, has('Hookshot', player))
else:
return original_rule
return original_rule return original_rule
@@ -258,10 +273,14 @@ def has_blunt_weapon(player):
return or_rule(has_sword(player), has('Hammer', player)) return or_rule(has_sword(player), has('Hammer', player))
# Bombs, Arrows, Bombos, FireRod, Somaria, Byrna should be handled by the damage table logic
# Powder doesn't work (also handled by damage table)
def buzzblob_rule(player): def buzzblob_rule(player):
return or_rule(has('Golden Sword', player), return or_rule(has('Golden Sword', player),
and_rule(has_blunt_weapon(player), and_rule(has_blunt_weapon(player),
or_rule(has_boomerang(player), has('Hookshot', player)))) # freeze it? or_rule(has_boomerang(player), has('Hookshot', player), has('Ice Rod', player))),
and_rule(has('Ether', player), has_sword(player)),
and_rule(has('Quake', player), has_sword(player)))
def has_class_2_weapon(player): def has_class_2_weapon(player):
@@ -456,7 +475,10 @@ def enemy_vulnerability(world, player, enemy_sprite, region):
vulnerability['Silvers'] = hits vulnerability['Silvers'] = hits
for method in ['Bomb', 'Hookshot', 'FireRod', 'IceRod', 'Boomerang', 'Powder', 'Bombos', 'Ether', 'Quake']: for method in ['Bomb', 'Hookshot', 'FireRod', 'IceRod', 'Boomerang', 'Powder', 'Bombos', 'Ether', 'Quake']:
hits = number_of_hits(method, damage_src, enemy_sub_class, stats, enemy_sprite, region) hits = number_of_hits(method, damage_src, enemy_sub_class, stats, enemy_sprite, region)
if hits != 0: if hits == -3:
if enemy_sprite.kind != EnemySprite.Buzzblob: # buzzblobs are special and don't die
vulnerability[method] = -1
elif hits != 0:
vulnerability[method] = hits vulnerability[method] = hits
return vulnerability return vulnerability
@@ -483,12 +505,14 @@ def number_of_hits(source_name, damage_src, enemy_sub_class, stats, enemy_sprite
health = max(health) health = max(health)
return math.ceil(health / damage_amount) return math.ceil(health / damage_amount)
elif damage_amount in [0xF9, 0xFA, 0xFD]: elif damage_amount in [0xF9, 0xFA, 0xFD]:
# -1 faired or incinerated; -2 blobbed # -1 incinerated; -2 blobbed, -3 fairy-ed (depends on enemy if "killed" or not)
# F9: fairy, defeated, but doesn't drop anything # F9: fairy, defeated, but doesn't drop anything: -3
# FA: blobbed - can you kill a blob? = -2 # FA: blobbed - can you kill a blob? = -2
# FD: incinerated # FD: incinerated
return -1 if damage_amount != 0xFA else -2 return special_classes[damage_amount]
else: else:
return 0 return 0
special_classes = {0xF9: -3, 0xFA: -2, 0xFD: -1}

View File

@@ -2,7 +2,7 @@ from source.dungeon.EnemyList import Sprite, EnemySprite
vanilla_sprites_ow = {} vanilla_sprites_ow = {}
def create_sprite(area_id, kind, tile_x, tile_y, region=None, address=None, fix=True, water=False): def create_sprite(area_id, kind, tile_x, tile_y, region=None, address=None, fix=False, water=False, embed=False):
if area_id not in vanilla_sprites_ow: if area_id not in vanilla_sprites_ow:
vanilla_sprites_ow[area_id] = [] vanilla_sprites_ow[area_id] = []
sprite = Sprite(area_id, kind, 0, 0, tile_x, tile_y, region, False, None) sprite = Sprite(area_id, kind, 0, 0, tile_x, tile_y, region, False, None)
@@ -10,11 +10,15 @@ def create_sprite(area_id, kind, tile_x, tile_y, region=None, address=None, fix=
sprite.water = True sprite.water = True
if fix: if fix:
sprite.static = True sprite.static = True
if embed:
sprite.embedded = True
sprite.original_address = address sprite.original_address = address
vanilla_sprites_ow[area_id].append(sprite) vanilla_sprites_ow[area_id].append(sprite)
def init_vanilla_sprites_ow(): def init_vanilla_sprites_ow():
if vanilla_sprites_ow:
return
create_sprite(0x21b, EnemySprite.LightningGate, 0x1F, 0x06, '', 0x09CB42) create_sprite(0x21b, EnemySprite.LightningGate, 0x1F, 0x06, '', 0x09CB42)
create_sprite(0x21b, EnemySprite.TutorialGuard, 0x01, 0x12, '', 0x09CB45) create_sprite(0x21b, EnemySprite.TutorialGuard, 0x01, 0x12, '', 0x09CB45)
create_sprite(0x21b, EnemySprite.TutorialGuard, 0x01, 0x14, '', 0x09CB48) create_sprite(0x21b, EnemySprite.TutorialGuard, 0x01, 0x14, '', 0x09CB48)
@@ -75,8 +79,8 @@ def init_vanilla_sprites_ow():
create_sprite(0x4a, EnemySprite.Moblin, 0x0B, 0x0F, '', 0x09CBDF) create_sprite(0x4a, EnemySprite.Moblin, 0x0B, 0x0F, '', 0x09CBDF)
create_sprite(0x4a, EnemySprite.Moblin, 0x08, 0x10, '', 0x09CBE2) create_sprite(0x4a, EnemySprite.Moblin, 0x08, 0x10, '', 0x09CBE2)
create_sprite(0x4a, EnemySprite.Moblin, 0x16, 0x13, '', 0x09CBE5) create_sprite(0x4a, EnemySprite.Moblin, 0x16, 0x13, '', 0x09CBE5)
create_sprite(0x4a, EnemySprite.Raven, 0x13, 0x13, '', 0x09CBE8) create_sprite(0x4a, EnemySprite.Raven, 0x13, 0x13, '', 0x09CBE8, embed=True)
create_sprite(0x4a, EnemySprite.Raven, 0x13, 0x14, '', 0x09CBEB) create_sprite(0x4a, EnemySprite.Raven, 0x13, 0x14, '', 0x09CBEB, embed=True)
create_sprite(0x4a, EnemySprite.Ropa, 0x0E, 0x18, '', 0x09CBEE) create_sprite(0x4a, EnemySprite.Ropa, 0x0E, 0x18, '', 0x09CBEE)
create_sprite(0x4a, EnemySprite.Stal, 0x14, 0x1A, '', 0x09CBF1) create_sprite(0x4a, EnemySprite.Stal, 0x14, 0x1A, '', 0x09CBF1)
# Screen4F: # Screen4F:
@@ -206,7 +210,7 @@ def init_vanilla_sprites_ow():
create_sprite(0x5e, EnemySprite.Ropa, 0x24, 0x30, '', 0x09CD4C) create_sprite(0x5e, EnemySprite.Ropa, 0x24, 0x30, '', 0x09CD4C)
create_sprite(0x5e, EnemySprite.Faerie, 0x30, 0x30, '', 0x09CD4F) create_sprite(0x5e, EnemySprite.Faerie, 0x30, 0x30, '', 0x09CD4F)
create_sprite(0x5e, EnemySprite.Hinox, 0x35, 0x36, '', 0x09CD52) create_sprite(0x5e, EnemySprite.Hinox, 0x35, 0x36, '', 0x09CD52)
create_sprite(0x5e, EnemySprite.Raven, 0x29, 0x37, '', 0x09CD55) create_sprite(0x5e, EnemySprite.Raven, 0x29, 0x37, '', 0x09CD55, embed=True)
# Screen62: # Screen62:
create_sprite(0x62, EnemySprite.PurpleChest, 0x0D, 0x05, '', 0x09CD59) create_sprite(0x62, EnemySprite.PurpleChest, 0x0D, 0x05, '', 0x09CD59)
create_sprite(0x62, EnemySprite.Cucco, 0x13, 0x11, '', 0x09CD5C) create_sprite(0x62, EnemySprite.Cucco, 0x13, 0x11, '', 0x09CD5C)
@@ -257,15 +261,15 @@ def init_vanilla_sprites_ow():
create_sprite(0x6f, EnemySprite.Snapdragon, 0x0D, 0x08, '', 0x09CDD1) create_sprite(0x6f, EnemySprite.Snapdragon, 0x0D, 0x08, '', 0x09CDD1)
create_sprite(0x6f, EnemySprite.Snapdragon, 0x0F, 0x08, '', 0x09CDD4) create_sprite(0x6f, EnemySprite.Snapdragon, 0x0F, 0x08, '', 0x09CDD4)
create_sprite(0x6f, EnemySprite.Snapdragon, 0x0E, 0x0B, '', 0x09CDD7) create_sprite(0x6f, EnemySprite.Snapdragon, 0x0E, 0x0B, '', 0x09CDD7)
create_sprite(0x6f, EnemySprite.Raven, 0x17, 0x0C, '', 0x09CDDA) create_sprite(0x6f, EnemySprite.Raven, 0x17, 0x0C, '', 0x09CDDA, embed=True)
create_sprite(0x6f, EnemySprite.Stal, 0x09, 0x17, '', 0x09CDDD) create_sprite(0x6f, EnemySprite.Stal, 0x09, 0x17, '', 0x09CDDD)
# Screen70: # Screen70:
create_sprite(0x70, EnemySprite.Raven, 0x21, 0x1B, '', 0x09CDE1) create_sprite(0x70, EnemySprite.Raven, 0x21, 0x1B, '', 0x09CDE1, embed=True)
create_sprite(0x70, EnemySprite.FireballZora, 0x2B, 0x1C, '', 0x09CDE4, water=True) create_sprite(0x70, EnemySprite.FireballZora, 0x2B, 0x1C, '', 0x09CDE4, water=True)
create_sprite(0x70, EnemySprite.FireballZora, 0x12, 0x21, '', 0x09CDE7, water=True) create_sprite(0x70, EnemySprite.FireballZora, 0x12, 0x21, '', 0x09CDE7, water=True)
create_sprite(0x70, EnemySprite.Swamola, 0x1B, 0x24, '', 0x09CDEA, water=True) create_sprite(0x70, EnemySprite.Swamola, 0x1B, 0x24, '', 0x09CDEA, water=True)
create_sprite(0x70, EnemySprite.Swamola, 0x10, 0x27, '', 0x09CDED, water=True) create_sprite(0x70, EnemySprite.Swamola, 0x10, 0x27, '', 0x09CDED, water=True)
create_sprite(0x70, EnemySprite.Raven, 0x07, 0x28, '', 0x09CDF0) create_sprite(0x70, EnemySprite.Raven, 0x07, 0x28, '', 0x09CDF0, embed=True)
create_sprite(0x70, EnemySprite.FireballZora, 0x16, 0x2B, '', 0x09CDF3, water=True) create_sprite(0x70, EnemySprite.FireballZora, 0x16, 0x2B, '', 0x09CDF3, water=True)
create_sprite(0x70, EnemySprite.FireballZora, 0x1E, 0x2E, '', 0x09CDF6, water=True) create_sprite(0x70, EnemySprite.FireballZora, 0x1E, 0x2E, '', 0x09CDF6, water=True)
create_sprite(0x70, EnemySprite.Swamola, 0x17, 0x33, '', 0x09CDF9, water=True) create_sprite(0x70, EnemySprite.Swamola, 0x17, 0x33, '', 0x09CDF9, water=True)
@@ -390,7 +394,7 @@ def init_vanilla_sprites_ow():
create_sprite(0x81, EnemySprite.Zora, 0x37, 0x36, '', 0x09CF48, water=True) create_sprite(0x81, EnemySprite.Zora, 0x37, 0x36, '', 0x09CF48, water=True)
# Screen00_1: # Screen00_1:
create_sprite(0x0, EnemySprite.FakeMasterSword, 0x07, 0x12, '', 0x09CF4C) create_sprite(0x0, EnemySprite.FakeMasterSword, 0x07, 0x12, '', 0x09CF4C)
create_sprite(0x0, EnemySprite.Raven, 0x12, 0x0B, '', 0x09CF4F) create_sprite(0x0, EnemySprite.Raven, 0x12, 0x0B, '', 0x09CF4F, embed=True)
create_sprite(0x0, EnemySprite.Mushroom, 0x1E, 0x15, '', 0x09CF52) create_sprite(0x0, EnemySprite.Mushroom, 0x1E, 0x15, '', 0x09CF52)
create_sprite(0x0, EnemySprite.FakeMasterSword, 0x28, 0x06, '', 0x09CF55) create_sprite(0x0, EnemySprite.FakeMasterSword, 0x28, 0x06, '', 0x09CF55)
create_sprite(0x0, EnemySprite.Buzzblob, 0x31, 0x0A, '', 0x09CF58) create_sprite(0x0, EnemySprite.Buzzblob, 0x31, 0x0A, '', 0x09CF58)
@@ -446,10 +450,10 @@ def init_vanilla_sprites_ow():
create_sprite(0xa, EnemySprite.Raven, 0x05, 0x09, '', 0x09CFE4) create_sprite(0xa, EnemySprite.Raven, 0x05, 0x09, '', 0x09CFE4)
create_sprite(0xa, EnemySprite.Buzzblob, 0x10, 0x0D, '', 0x09CFE7) create_sprite(0xa, EnemySprite.Buzzblob, 0x10, 0x0D, '', 0x09CFE7)
create_sprite(0xa, EnemySprite.Buzzblob, 0x0B, 0x0E, '', 0x09CFEA) create_sprite(0xa, EnemySprite.Buzzblob, 0x0B, 0x0E, '', 0x09CFEA)
create_sprite(0xa, EnemySprite.Raven, 0x13, 0x16, '', 0x09CFED) create_sprite(0xa, EnemySprite.Raven, 0x13, 0x16, '', 0x09CFED, embed=True)
create_sprite(0xa, EnemySprite.Hoarder, 0x0E, 0x16, '', 0x09CFF0) create_sprite(0xa, EnemySprite.Hoarder, 0x0E, 0x16, '', 0x09CFF0)
create_sprite(0xa, EnemySprite.Buzzblob, 0x16, 0x16, '', 0x09CFF3) create_sprite(0xa, EnemySprite.Buzzblob, 0x16, 0x16, '', 0x09CFF3)
create_sprite(0xa, EnemySprite.Raven, 0x11, 0x17, '', 0x09CFF6) create_sprite(0xa, EnemySprite.Raven, 0x11, 0x17, '', 0x09CFF6, embed=True)
create_sprite(0xa, EnemySprite.Apple, 0x19, 0x1A, '', 0x09CFF9) create_sprite(0xa, EnemySprite.Apple, 0x19, 0x1A, '', 0x09CFF9)
# Screen0F_1: # Screen0F_1:
create_sprite(0xf, EnemySprite.Waterfall, 0x06, 0x02, '', 0x09CFFD) create_sprite(0xf, EnemySprite.Waterfall, 0x06, 0x02, '', 0x09CFFD)
@@ -457,7 +461,7 @@ def init_vanilla_sprites_ow():
create_sprite(0xf, EnemySprite.FireballZora, 0x05, 0x10, '', 0x09D003, water=True) create_sprite(0xf, EnemySprite.FireballZora, 0x05, 0x10, '', 0x09D003, water=True)
create_sprite(0xf, EnemySprite.Crab, 0x11, 0x12, '', 0x09D006) create_sprite(0xf, EnemySprite.Crab, 0x11, 0x12, '', 0x09D006)
create_sprite(0xf, EnemySprite.Whirlpool, 0x08, 0x13, '', 0x09D009) create_sprite(0xf, EnemySprite.Whirlpool, 0x08, 0x13, '', 0x09D009)
create_sprite(0xf, EnemySprite.Raven, 0x1C, 0x15, '', 0x09D00C) create_sprite(0xf, EnemySprite.Raven, 0x1C, 0x15, '', 0x09D00C, embed=True)
create_sprite(0xf, EnemySprite.Octorok4Way, 0x0E, 0x17, '', 0x09D00F) create_sprite(0xf, EnemySprite.Octorok4Way, 0x0E, 0x17, '', 0x09D00F)
# Screen10_1: # Screen10_1:
create_sprite(0x10, EnemySprite.GreenGuard, 0x05, 0x0C, '', 0x09D013) create_sprite(0x10, EnemySprite.GreenGuard, 0x05, 0x0C, '', 0x09D013)
@@ -681,7 +685,7 @@ def init_vanilla_sprites_ow():
create_sprite(0x37, EnemySprite.FireballZora, 0x12, 0x19, '', 0x09D268, water=True) create_sprite(0x37, EnemySprite.FireballZora, 0x12, 0x19, '', 0x09D268, water=True)
# Screen3A_1: # Screen3A_1:
create_sprite(0x3a, EnemySprite.Locksmith, 0x17, 0x05, '', 0x09D26C) create_sprite(0x3a, EnemySprite.Locksmith, 0x17, 0x05, '', 0x09D26C)
create_sprite(0x3a, EnemySprite.Raven, 0x0E, 0x09, '', 0x09D26F) create_sprite(0x3a, EnemySprite.Raven, 0x0E, 0x09, '', 0x09D26F, embed=True)
create_sprite(0x3a, EnemySprite.Hoarder2, 0x0B, 0x0A, '', 0x09D272) create_sprite(0x3a, EnemySprite.Hoarder2, 0x0B, 0x0A, '', 0x09D272)
create_sprite(0x3a, EnemySprite.Hoarder2, 0x18, 0x0E, '', 0x09D275) create_sprite(0x3a, EnemySprite.Hoarder2, 0x18, 0x0E, '', 0x09D275)
# Screen3B_1: # Screen3B_1:
@@ -692,7 +696,7 @@ def init_vanilla_sprites_ow():
create_sprite(0x3b, EnemySprite.HeartPiece, 0x14, 0x0E, '', 0x09D285) create_sprite(0x3b, EnemySprite.HeartPiece, 0x14, 0x0E, '', 0x09D285)
create_sprite(0x3b, EnemySprite.FloppingFish, 0x1B, 0x10, '', 0x09D288, water=True) create_sprite(0x3b, EnemySprite.FloppingFish, 0x1B, 0x10, '', 0x09D288, water=True)
create_sprite(0x3b, EnemySprite.Toppo, 0x0F, 0x14, '', 0x09D28B) create_sprite(0x3b, EnemySprite.Toppo, 0x0F, 0x14, '', 0x09D28B)
create_sprite(0x3b, EnemySprite.Raven, 0x14, 0x1B, '', 0x09D28E) create_sprite(0x3b, EnemySprite.Raven, 0x14, 0x1B, '', 0x09D28E, embed=True)
# Screen3C_1: # Screen3C_1:
create_sprite(0x3c, EnemySprite.GreenBushGuard, 0x08, 0x0C, '', 0x09D292) create_sprite(0x3c, EnemySprite.GreenBushGuard, 0x08, 0x0C, '', 0x09D292)
create_sprite(0x3c, EnemySprite.Octorok, 0x14, 0x0F, '', 0x09D295) create_sprite(0x3c, EnemySprite.Octorok, 0x14, 0x0F, '', 0x09D295)
@@ -765,10 +769,10 @@ def init_vanilla_sprites_ow():
# Screen0A_2: # Screen0A_2:
create_sprite(0x9a, EnemySprite.Bee, 0x0E, 0x04, '', 0x09D353) create_sprite(0x9a, EnemySprite.Bee, 0x0E, 0x04, '', 0x09D353)
create_sprite(0x9a, EnemySprite.BlueGuard, 0x10, 0x0D, '', 0x09D356) create_sprite(0x9a, EnemySprite.BlueGuard, 0x10, 0x0D, '', 0x09D356)
create_sprite(0x9a, EnemySprite.Raven, 0x11, 0x16, '', 0x09D359) create_sprite(0x9a, EnemySprite.Raven, 0x11, 0x16, '', 0x09D359, embed=True)
create_sprite(0x9a, EnemySprite.Raven, 0x13, 0x16, '', 0x09D35C) create_sprite(0x9a, EnemySprite.Raven, 0x13, 0x16, '', 0x09D35C, embed=True)
create_sprite(0x9a, EnemySprite.Hoarder, 0x0E, 0x16, '', 0x09D35F) create_sprite(0x9a, EnemySprite.Hoarder, 0x0E, 0x16, '', 0x09D35F)
create_sprite(0x9a, EnemySprite.Raven, 0x11, 0x17, '', 0x09D362) create_sprite(0x9a, EnemySprite.Raven, 0x11, 0x17, '', 0x09D362, embed=True)
create_sprite(0x9a, EnemySprite.Apple, 0x19, 0x1A, '', 0x09D365) create_sprite(0x9a, EnemySprite.Apple, 0x19, 0x1A, '', 0x09D365)
# Screen0F_2: # Screen0F_2:
create_sprite(0x9f, EnemySprite.Waterfall, 0x06, 0x02, '', 0x09D369) create_sprite(0x9f, EnemySprite.Waterfall, 0x06, 0x02, '', 0x09D369)
@@ -986,7 +990,7 @@ def init_vanilla_sprites_ow():
create_sprite(0xc5, EnemySprite.Buzzblob, 0x27, 0x1F, '', 0x09D5AA) create_sprite(0xc5, EnemySprite.Buzzblob, 0x27, 0x1F, '', 0x09D5AA)
create_sprite(0xc5, EnemySprite.Buzzblob, 0x2F, 0x1F, '', 0x09D5AD) create_sprite(0xc5, EnemySprite.Buzzblob, 0x2F, 0x1F, '', 0x09D5AD)
create_sprite(0xc5, EnemySprite.FireballZora, 0x1B, 0x26, '', 0x09D5B0, water=True) create_sprite(0xc5, EnemySprite.FireballZora, 0x1B, 0x26, '', 0x09D5B0, water=True)
create_sprite(0xc5, EnemySprite.Raven, 0x0D, 0x2F, '', 0x09D5B3) create_sprite(0xc5, EnemySprite.Raven, 0x0D, 0x2F, '', 0x09D5B3, embed=True)
create_sprite(0xc5, EnemySprite.Octorok, 0x06, 0x34, '', 0x09D5B6) create_sprite(0xc5, EnemySprite.Octorok, 0x06, 0x34, '', 0x09D5B6)
create_sprite(0xc5, EnemySprite.Octorok, 0x0A, 0x35, '', 0x09D5B9) create_sprite(0xc5, EnemySprite.Octorok, 0x0A, 0x35, '', 0x09D5B9)
create_sprite(0xc5, EnemySprite.FireballZora, 0x14, 0x35, '', 0x09D5BC, water=True) create_sprite(0xc5, EnemySprite.FireballZora, 0x14, 0x35, '', 0x09D5BC, water=True)
@@ -1006,10 +1010,10 @@ def init_vanilla_sprites_ow():
# Screen3A_2: # Screen3A_2:
create_sprite(0xca, EnemySprite.Locksmith, 0x17, 0x05, '', 0x09D5E5) create_sprite(0xca, EnemySprite.Locksmith, 0x17, 0x05, '', 0x09D5E5)
create_sprite(0xca, EnemySprite.Hoarder2, 0x0B, 0x0A, '', 0x09D5E8) create_sprite(0xca, EnemySprite.Hoarder2, 0x0B, 0x0A, '', 0x09D5E8)
create_sprite(0xca, EnemySprite.Raven, 0x14, 0x0D, '', 0x09D5EB) create_sprite(0xca, EnemySprite.Raven, 0x14, 0x0D, '', 0x09D5EB, embed=True)
create_sprite(0xca, EnemySprite.Raven, 0x13, 0x0E, '', 0x09D5EE) create_sprite(0xca, EnemySprite.Raven, 0x13, 0x0E, '', 0x09D5EE, embed=True)
create_sprite(0xca, EnemySprite.Raven, 0x14, 0x0F, '', 0x09D5F1) create_sprite(0xca, EnemySprite.Raven, 0x14, 0x0F, '', 0x09D5F1, embed=True)
create_sprite(0xca, EnemySprite.Raven, 0x13, 0x10, '', 0x09D5F4) create_sprite(0xca, EnemySprite.Raven, 0x13, 0x10, '', 0x09D5F4, embed=True)
create_sprite(0xca, EnemySprite.UsainBolt, 0x11, 0x0F, '', 0x09D5F7) create_sprite(0xca, EnemySprite.UsainBolt, 0x11, 0x0F, '', 0x09D5F7)
create_sprite(0xca, EnemySprite.Hoarder2, 0x17, 0x17, '', 0x09D5FA) create_sprite(0xca, EnemySprite.Hoarder2, 0x17, 0x17, '', 0x09D5FA)
# Screen3B_2: # Screen3B_2:
@@ -1018,9 +1022,9 @@ def init_vanilla_sprites_ow():
create_sprite(0xcb, EnemySprite.HeartPiece, 0x14, 0x0E, '', 0x09D604) create_sprite(0xcb, EnemySprite.HeartPiece, 0x14, 0x0E, '', 0x09D604)
create_sprite(0xcb, EnemySprite.Octorok4Way, 0x0F, 0x14, '', 0x09D607) create_sprite(0xcb, EnemySprite.Octorok4Way, 0x0F, 0x14, '', 0x09D607)
create_sprite(0xcb, EnemySprite.BlueGuard, 0x17, 0x18, '', 0x09D60A) create_sprite(0xcb, EnemySprite.BlueGuard, 0x17, 0x18, '', 0x09D60A)
create_sprite(0xcb, EnemySprite.Raven, 0x14, 0x1B, '', 0x09D60D) create_sprite(0xcb, EnemySprite.Raven, 0x14, 0x1B, '', 0x09D60D, embed=True)
# Screen3C_2: # Screen3C_2:
create_sprite(0xcc, EnemySprite.Raven, 0x0B, 0x09, '', 0x09D611) create_sprite(0xcc, EnemySprite.Raven, 0x0B, 0x09, '', 0x09D611, embed=True)
create_sprite(0xcc, EnemySprite.BlueGuard, 0x08, 0x0A, '', 0x09D614) create_sprite(0xcc, EnemySprite.BlueGuard, 0x08, 0x0A, '', 0x09D614)
create_sprite(0xcc, EnemySprite.Octorok, 0x14, 0x0F, '', 0x09D617) create_sprite(0xcc, EnemySprite.Octorok, 0x14, 0x0F, '', 0x09D617)
create_sprite(0xcc, EnemySprite.UsainBolt, 0x09, 0x11, '', 0x09D61A) create_sprite(0xcc, EnemySprite.UsainBolt, 0x09, 0x11, '', 0x09D61A)

View File

@@ -1,7 +1,8 @@
import logging
from collections import defaultdict from collections import defaultdict
import RaceRandom as random import RaceRandom as random
from source.dungeon.EnemyList import EnemySprite, enemy_names from source.dungeon.EnemyList import EnemySprite, SpriteType, enemy_names, sprite_translation, overlord_names
from source.dungeon.RoomConstants import * from source.dungeon.RoomConstants import *
@@ -100,7 +101,7 @@ class SpriteRequirement:
return self.good_for_shutter(forbidden) and self.can_drop return self.good_for_shutter(forbidden) and self.can_drop
def __str__(self): def __str__(self):
return f'Req for {enemy_names[self.sprite]}' return f'Req for {enemy_names[self.kind] if self.sub_type != 0x7 else overlord_names[self.kind]}'
NoFlyingRooms = {0xd2, 0x10c} # Mire 2, Mimic Cave NoFlyingRooms = {0xd2, 0x10c} # Mire 2, Mimic Cave
@@ -160,7 +161,7 @@ WallmasterValidRooms = {
def init_sprite_requirements(): def init_sprite_requirements():
reqs = [ reqs = [
SpriteRequirement(EnemySprite.Raven).no_drop().sub_group(3, [0x11, 0x19]).exclude(NoFlyingRooms), SpriteRequirement(EnemySprite.Raven).no_drop().sub_group(3, [0x11, 0x19]).exclude(NoFlyingRooms),
SpriteRequirement(EnemySprite.Vulture).no_drop().sub_group(2, 0x12).exclude(NoFlyingRooms), SpriteRequirement(EnemySprite.Vulture).sub_group(2, 0x12).exclude(NoFlyingRooms),
SpriteRequirement(EnemySprite.CorrectPullSwitch).affix().sub_group(3, [0x52, 0x53]), SpriteRequirement(EnemySprite.CorrectPullSwitch).affix().sub_group(3, [0x52, 0x53]),
SpriteRequirement(EnemySprite.WrongPullSwitch).affix().sub_group(3, [0x52, 0x53]), SpriteRequirement(EnemySprite.WrongPullSwitch).affix().sub_group(3, [0x52, 0x53]),
SpriteRequirement(EnemySprite.Octorok).sub_group(2, [0xc, 0x18]), SpriteRequirement(EnemySprite.Octorok).sub_group(2, [0xc, 0x18]),
@@ -186,7 +187,7 @@ def init_sprite_requirements():
SpriteRequirement(EnemySprite.Sluggula).sub_group(2, 0x25), SpriteRequirement(EnemySprite.Sluggula).sub_group(2, 0x25),
SpriteRequirement(EnemySprite.WaterSwitch).affix().sub_group(3, 0x53), SpriteRequirement(EnemySprite.WaterSwitch).affix().sub_group(3, 0x53),
SpriteRequirement(EnemySprite.Ropa).sub_group(0, 0x16), SpriteRequirement(EnemySprite.Ropa).sub_group(0, 0x16),
SpriteRequirement(EnemySprite.RedBari).no_drop().sub_group(0, 0x1f), SpriteRequirement(EnemySprite.RedBari).sub_group(0, 0x1f),
SpriteRequirement(EnemySprite.BlueBari).sub_group(0, 0x1f), SpriteRequirement(EnemySprite.BlueBari).sub_group(0, 0x1f),
SpriteRequirement(EnemySprite.TalkingTree).affix().sub_group(0, 0x15), SpriteRequirement(EnemySprite.TalkingTree).affix().sub_group(0, 0x15),
SpriteRequirement(EnemySprite.HardhatBeetle).sub_group(1, 0x1e), SpriteRequirement(EnemySprite.HardhatBeetle).sub_group(1, 0x1e),
@@ -222,17 +223,16 @@ def init_sprite_requirements():
SpriteRequirement(EnemySprite.RedBushGuard).sub_group(0, 0x46).sub_group(1, 0x49), SpriteRequirement(EnemySprite.RedBushGuard).sub_group(0, 0x46).sub_group(1, 0x49),
SpriteRequirement(EnemySprite.BombGuard).sub_group(0, 0x46).sub_group(1, 0x49), SpriteRequirement(EnemySprite.BombGuard).sub_group(0, 0x46).sub_group(1, 0x49),
SpriteRequirement(EnemySprite.GreenKnifeGuard).sub_group(1, 0x49).sub_group(2, 0x13), SpriteRequirement(EnemySprite.GreenKnifeGuard).sub_group(1, 0x49).sub_group(2, 0x13),
SpriteRequirement(EnemySprite.Geldman).no_drop().sub_group(2, 0x12).exclude({0x10c}), SpriteRequirement(EnemySprite.Geldman).sub_group(2, 0x12).exclude({0x10c}),
SpriteRequirement(EnemySprite.Toppo).no_drop().sub_group(3, 0x11), SpriteRequirement(EnemySprite.Toppo).no_drop().sub_group(3, 0x11),
SpriteRequirement(EnemySprite.Popo).sub_group(1, 0x2c), SpriteRequirement(EnemySprite.Popo).sub_group(1, 0x2c),
SpriteRequirement(EnemySprite.Popo2).sub_group(1, 0x2c), SpriteRequirement(EnemySprite.Popo2).sub_group(1, 0x2c),
SpriteRequirement(EnemySprite.Popo2).sub_group(1, 0x2c),
SpriteRequirement(EnemySprite.ArmosStatue).sub_group(3, 0x10).exclude({0x10c}), SpriteRequirement(EnemySprite.ArmosStatue).sub_group(3, 0x10).exclude({0x10c}),
SpriteRequirement(EnemySprite.KingZora).affix().sub_group(3, 0x44), SpriteRequirement(EnemySprite.KingZora).affix().sub_group(3, 0x44),
SpriteRequirement(EnemySprite.ArmosKnight).exalt().sub_group(3, 0x1d), SpriteRequirement(EnemySprite.ArmosKnight).exalt().sub_group(3, 0x1d),
SpriteRequirement(EnemySprite.Lanmolas).exalt().sub_group(3, 0x31), SpriteRequirement(EnemySprite.Lanmolas).exalt().sub_group(3, 0x31),
SpriteRequirement(EnemySprite.FireballZora).immerse().no_drop().sub_group(2, [0xc, 0x18]), # .uw_skip() test SpriteRequirement(EnemySprite.FireballZora).immerse().no_drop().sub_group(2, [0xc, 0x18]), # .uw_skip() test
SpriteRequirement(EnemySprite.Zora).no_drop().sub_group(2, 0xc).sub_group(3, 0x44), # .uw_skip() test SpriteRequirement(EnemySprite.Zora).sub_group(2, 0xc).sub_group(3, 0x44), # .uw_skip() test
SpriteRequirement(EnemySprite.DesertStatue).affix().sub_group(2, 0x12), SpriteRequirement(EnemySprite.DesertStatue).affix().sub_group(2, 0x12),
SpriteRequirement(EnemySprite.Crab).sub_group(2, 0xc), SpriteRequirement(EnemySprite.Crab).sub_group(2, 0xc),
SpriteRequirement(EnemySprite.LostWoodsBird).affix().sub_group(2, 0x37).sub_group(3, 0x36), SpriteRequirement(EnemySprite.LostWoodsBird).affix().sub_group(2, 0x37).sub_group(3, 0x36),
@@ -257,8 +257,8 @@ def init_sprite_requirements():
SpriteRequirement(EnemySprite.CannonTrooper).sub_group(0, 0x46).sub_group(1, 0x49), SpriteRequirement(EnemySprite.CannonTrooper).sub_group(0, 0x46).sub_group(1, 0x49),
SpriteRequirement(EnemySprite.CricketRat).sub_group(2, [0x1c, 0x24]), SpriteRequirement(EnemySprite.CricketRat).sub_group(2, [0x1c, 0x24]),
SpriteRequirement(EnemySprite.Snake).sub_group(2, [0x1c, 0x24]), SpriteRequirement(EnemySprite.Snake).sub_group(2, [0x1c, 0x24]),
SpriteRequirement(EnemySprite.Keese).no_drop().sub_group(2, [0x1c, 0x24]), SpriteRequirement(EnemySprite.Keese).sub_group(2, [0x1c, 0x24]),
SpriteRequirement(EnemySprite.Leever).no_drop().sub_group(0, 0x2f), SpriteRequirement(EnemySprite.Leever).sub_group(0, 0x2f),
SpriteRequirement(EnemySprite.FairyPondTrigger).affix().sub_group(3, 0x36), SpriteRequirement(EnemySprite.FairyPondTrigger).affix().sub_group(3, 0x36),
SpriteRequirement(EnemySprite.UnclePriest).affix().sub_group(0, [0x47, 0x51]), SpriteRequirement(EnemySprite.UnclePriest).affix().sub_group(0, [0x47, 0x51]),
SpriteRequirement(EnemySprite.RunningNpc).affix().group(6), SpriteRequirement(EnemySprite.RunningNpc).affix().group(6),
@@ -267,7 +267,7 @@ def init_sprite_requirements():
SpriteRequirement(EnemySprite.Grandma).affix().sub_group(0, 0x4b).sub_group(1, 0x4d).sub_group(2, 0x4a), SpriteRequirement(EnemySprite.Grandma).affix().sub_group(0, 0x4b).sub_group(1, 0x4d).sub_group(2, 0x4a),
SpriteRequirement(EnemySprite.Agahnim).exalt().sub_group(0, 0x55).sub_group(1, [0x1a, 0x3d]).sub_group(2, 0x42) SpriteRequirement(EnemySprite.Agahnim).exalt().sub_group(0, 0x55).sub_group(1, [0x1a, 0x3d]).sub_group(2, 0x42)
.sub_group(3, 0x43), .sub_group(3, 0x43),
SpriteRequirement(EnemySprite.FloatingSkull).no_drop().sub_group(0, 0x1f).exclude(NoFlyingRooms), SpriteRequirement(EnemySprite.FloatingSkull).sub_group(0, 0x1f).exclude(NoFlyingRooms),
SpriteRequirement(EnemySprite.BigSpike).sub_group(3, [0x52, 0x53]).no_drop(), SpriteRequirement(EnemySprite.BigSpike).sub_group(3, [0x52, 0x53]).no_drop(),
SpriteRequirement(EnemySprite.FirebarCW).immune().sub_group(0, 0x1f), SpriteRequirement(EnemySprite.FirebarCW).immune().sub_group(0, 0x1f),
SpriteRequirement(EnemySprite.FirebarCCW).immune().sub_group(0, 0x1f), SpriteRequirement(EnemySprite.FirebarCCW).immune().sub_group(0, 0x1f),
@@ -298,8 +298,8 @@ def init_sprite_requirements():
SpriteRequirement(EnemySprite.Pengator).sub_group(2, 0x26), SpriteRequirement(EnemySprite.Pengator).sub_group(2, 0x26),
SpriteRequirement(EnemySprite.Kyameron).no_drop().immerse().sub_group(2, 0x22), SpriteRequirement(EnemySprite.Kyameron).no_drop().immerse().sub_group(2, 0x22),
SpriteRequirement(EnemySprite.Wizzrobe).sub_group(2, [0x25, 0x29]), SpriteRequirement(EnemySprite.Wizzrobe).sub_group(2, [0x25, 0x29]),
SpriteRequirement(EnemySprite.Zoro).no_drop().sub_group(1, 0x20), SpriteRequirement(EnemySprite.Zoro).sub_group(1, 0x20),
SpriteRequirement(EnemySprite.Babasu).no_drop().sub_group(1, 0x20), SpriteRequirement(EnemySprite.Babasu).sub_group(1, 0x20),
SpriteRequirement(EnemySprite.GroveOstritch).affix().sub_group(2, 0x4e), SpriteRequirement(EnemySprite.GroveOstritch).affix().sub_group(2, 0x4e),
SpriteRequirement(EnemySprite.GroveRabbit).affix(), SpriteRequirement(EnemySprite.GroveRabbit).affix(),
SpriteRequirement(EnemySprite.GroveBird).affix().sub_group(2, 0x4e), SpriteRequirement(EnemySprite.GroveBird).affix().sub_group(2, 0x4e),
@@ -312,7 +312,7 @@ def init_sprite_requirements():
SpriteRequirement(EnemySprite.Stalfos).sub_group(0, 0x1f), SpriteRequirement(EnemySprite.Stalfos).sub_group(0, 0x1f),
SpriteRequirement(EnemySprite.GreenZirro).no_drop().sub_group(3, 0x1b).exclude(NoFlyingRooms), SpriteRequirement(EnemySprite.GreenZirro).no_drop().sub_group(3, 0x1b).exclude(NoFlyingRooms),
SpriteRequirement(EnemySprite.BlueZirro).no_drop().sub_group(3, 0x1b).exclude(NoFlyingRooms), SpriteRequirement(EnemySprite.BlueZirro).no_drop().sub_group(3, 0x1b).exclude(NoFlyingRooms),
SpriteRequirement(EnemySprite.Pikit).no_drop().sub_group(3, 0x1b), SpriteRequirement(EnemySprite.Pikit).sub_group(3, 0x1b),
SpriteRequirement(EnemySprite.CrystalMaiden).affix(), SpriteRequirement(EnemySprite.CrystalMaiden).affix(),
SpriteRequirement(EnemySprite.OldMan).affix().sub_group(0, 0x46).sub_group(1, 0x49).sub_group(2, 0x1c), SpriteRequirement(EnemySprite.OldMan).affix().sub_group(0, 0x46).sub_group(1, 0x49).sub_group(2, 0x1c),
SpriteRequirement(EnemySprite.PipeDown).affix(), SpriteRequirement(EnemySprite.PipeDown).affix(),
@@ -513,8 +513,9 @@ def setup_required_dungeon_groups(sheets, data_tables):
sheets[did(1)].add_sprite_to_sheet([70, 73, 28, 82], {0xe4, 0xf0}) # old man sheets[did(1)].add_sprite_to_sheet([70, 73, 28, 82], {0xe4, 0xf0}) # old man
# various npcs # various npcs
sheets[did(5)].add_sprite_to_sheet([75, 77, 74, 90], {0xf3, 0x109, 0x10e, 0x10f, 0x110, 0x111, 0x11a, 0x11c, 0x122}) sheets[did(5)].add_sprite_to_sheet([75, 77, 74, 90], {0xf3, 0x109, 0x10e, 0x10f, 0x110, 0x111, 0x112,
sheets[did(7)].add_sprite_to_sheet([75, 77, 57, 54], {0x8, 0x2c, 0x114, 0x115}) # big fairies 0x11a, 0x11c, 0x11f, 0x122})
sheets[did(7)].add_sprite_to_sheet([75, 77, 57, 54], {0x8, 0x2c, 0x114, 0x115, 0x116}) # big fairies
sheets[did(13)].add_sprite_to_sheet([81, None, None, None], {0x55, 0x102, 0x104}) # uncle, sick kid sheets[did(13)].add_sprite_to_sheet([81, None, None, None], {0x55, 0x102, 0x104}) # uncle, sick kid
sheets[did(14)].add_sprite_to_sheet([71, 73, 76, 80], {0x12, 0x105, 0x10a}) # wisemen sheets[did(14)].add_sprite_to_sheet([71, 73, 76, 80], {0x12, 0x105, 0x10a}) # wisemen
sheets[did(15)].add_sprite_to_sheet([79, 77, 74, 80], {0xf4, 0xf5, 0x101, 0x103, 0x106, 0x118, 0x119}) # more npcs sheets[did(15)].add_sprite_to_sheet([79, 77, 74, 80], {0xf4, 0xf5, 0x101, 0x103, 0x106, 0x118, 0x119}) # more npcs
@@ -531,37 +532,42 @@ def setup_required_dungeon_groups(sheets, data_tables):
# not sure 31 is needed above # not sure 31 is needed above
free_sheet_reqs = [ free_sheet_reqs = [
([75, None, None, None], [0xff, 0x112, 0x11f]), # shopkeepers ([75, None, None, None], [0xff, 0x11f]), # shopkeepers
([None, 77, None, 21], [0x121]), # smithy ([None, 77, None, 21], [0x121]), # smithy
([None, None, None, 80], [0x108]), # chicken house ([None, None, None, 80], [0x108]), # chicken house
([14, 30, None, None], [0x123]), # mini moldorm (shutter door) ([14, 30, None, None], [0x123]), # mini moldorm (shutter door)
([None, None, 34, None], [0x36, 0x46, 0x66, 0x76]), # pirogusu spawners ([None, None, 34, None], [0x36, 0x46, 0x66, 0x76]), # pirogusu spawners
([None, 32, None, None], [0x9f]), # babasu spawners ([None, 32, None, None], [0x9f]), # babasu spawners
([31, None, None, None], [0x7f]), # force baris ([31, None, None, None], [0x7f]), # force baris
([None, None, 35, None], [0x39, 0x49, 0x8d]), # wallmasters ([None, None, 35, None], [0x39, 0x49]), # wallmasters
# bumpers - why the split - because of other requirements - # bumpers - why the split - because of other requirements -
([None, None, None, (82, 83)], [0x17, 0x2a, 0x4c, 0x59, 0x67, 0x7e, 0x8b, 0xeb, 0xfb]), ([None, None, None, (82, 83)], [0x17, 0x2a, 0x4c, 0x59, 0x67, 0x7e, 0x8b, 0xeb, 0xfb]),
# crystal switches - split for some reason # crystal switches - split for some reason
([None, None, None, (82, 83)], [0xb, 0x13, 0x1b, 0x1e, 0x2a, 0x2b, 0x31, 0x5b, 0x6b, 0x77, 0x8b, ([None, None, None, (82, 83)], [0xb, 0x13, 0x1b, 0x1e, 0x2a, 0x2b, 0x31, 0x5b, 0x6b, 0x77, 0x8b,
0x91, 0x92, 0x9b, 0x9d, 0xa1, 0xab, 0xb6, 0xbf, 0xc1, 0xc4, 0xef]), 0x91, 0x92, 0x9b, 0x9d, 0xa1, 0xab, 0xbf, 0xc4, 0xef]),
# laser eyes - split for some reason # laser eyes - split for some reason
([None, None, None, (82, 83)], [0x13, 0x23, 0x96, 0xa5, 0xc5, 0xd5]), ([None, None, None, (82, 83)], [0x13, 0x23, 0x96, 0xa5, 0xc5, 0xd5]),
# statues - split for some reason # statues - split for some reason
([None, None, None, (82, 83)], [0x26, 0x2b, 0x40, 0x4a, 0x6b, 0x7b]), ([None, None, None, (82, 83)], [0x26, 0x2b, 0x40, 0x4a, 0x6b, 0x7b]),
([None, None, None, 83], [0x43, 0x63, 0x87]), # tile rooms
# non-optional # non-optional
([None, None, None, 82], [0x2, 0x58, 0x64, 0x8c, 0x10b]), # pull switches ([None, None, None, 82], [0x58, 0x8c, 0x10b]), # pull switches
([None, None, (28, 36), 82], [0x2, 0x64]), # pull switches (snakes)
([None, None, None, 82], [0x1a, 0x3d, 0x44, 0x5e, 0x7c, 0x95, 0xc3]), # collapsing bridges ([None, None, None, 82], [0x1a, 0x3d, 0x44, 0x5e, 0x7c, 0x95, 0xc3]), # collapsing bridges
([None, None, None, 83], [0x4, 0x3f, 0xce]), # pull tongue ([None, None, None, 83], [0x3f, 0xce]), # pull tongue
([None, None, None, 83], [0x35, 0x37, 0x76]), # swamp drains ([None, None, None, 83], [0x35, 0x37, 0x76]), # swamp drains
([None, None, 34, None], [0x28]), # tektike forced? - spawn chest ([None, None, 34, None], [0x28]), # tektike forced? - spawn chest
([None, None, 37, None], [0x97]), # wizzrobe spawner - in middle of room... ([None, None, 37, None], [0x97]), # wizzrobe spawner - in middle of room...
# combined # combined
([None, 32, None, (82, 83)], [0x3e]), # babasu spawners + crystal switch ([None, 32, None, (82, 83)], [0x3e]), # babasu spawners + crystal switch
([None, 32, None, 83], [0x4]), # zoro spawners + crystal switch + pull switch
([None, None, 35, 82], [0x56]), # wallmaster + collasping bridge ([None, None, 35, 82], [0x56]), # wallmaster + collasping bridge
([None, None, 35, (82, 83)], [0x57, 0x68]), # wallmaster + statue and wallmaster + bumpers ([None, None, 35, (82, 83)], [0x57, 0x68]), # wallmaster + statue and wallmaster + bumpers
([None, None, 34, 83], [0x76]), # swamp drain + pirogusu spawners ([None, None, 34, 83], [0x76]), # swamp drain + pirogusu spawners
([None, None, 35, 83], [0x8d]), # wallmaster + tile room
([None, None, None, 83], [0xb6, 0xc1]), # tile room + crystal switch
# allow some sprites / increase odds: # allow some sprites / increase odds:
([72, 73, None, None], []), # allow for blue archer + greenbush ([72, 73, None, None], []), # allow for blue archer + greenbush
@@ -584,25 +590,85 @@ def setup_required_dungeon_groups(sheets, data_tables):
# roomCollection.RandomizeRoomSpriteGroups(spriteGroupCollection, optionFlags); # roomCollection.RandomizeRoomSpriteGroups(spriteGroupCollection, optionFlags);
# more stuff # more stuff
sub_group_choices = { sub_group_choices = {
0: [22, 31, 47, 14, 72, 70], # 70, 72 for guards #72 specifically for BlueArcher/GreenBush 0: [22, 31, 47, 14],
1: [44, 30, 32], # 73, 13 1: [44, 30, 32], # 73, 13
2: [12, 18, 23, 24, 28, 46, 34, 35, 39, 40, 38, 41, 36, 37, 42, 19], # 19 for GreenKnifeGuard 2: [12, 18, 23, 24, 28, 46, 34, 35, 39, 40, 38, 41, 36, 37, 42],
3: [17, 16, 27, 20, 82, 83, 25, 68] # 25 for Swamola, 68 for Zora (walking?) 3: [17, 16, 27, 20, 82, 83, 25] # 25 for Swamola
} }
# 70, 72 for guards
# 0: 72 specifically for BlueArcher/GreenBush (but needs combination)
# 0: 70 for guards but needs combination
# 2: 19 for green knife guard, but needs combination
# 3: 68 for Zora, but needs combination
def randomize_underworld_sprite_sheets(sheets, data_tables): def combine_req(sub_groups, requirement):
for i in range(0, 4):
if requirement.sub_groups[i]:
if len(sub_groups[i]) == 0:
sub_groups[i].update(requirement.sub_groups[i])
else:
if len(sub_groups[i].intersection(requirement.sub_groups[i])) == 0:
raise IncompatibleEnemyException
sub_groups[i].intersection_update(requirement.sub_groups[i])
def setup_custom_enemy_sheets(custom_enemies, sheets, data_tables, sheet_range, uw=True):
requirements = data_tables.sprite_requirements
for room_id, enemy_map in custom_enemies.items():
if uw:
original_list = data_tables.uw_enemy_table.room_map[room_id]
else:
original_list = data_tables.ow_enemy_table[room_id]
sub_groups_choices = [set(), set(), set(), set()]
for idx, sprite in enumerate(original_list):
if idx in enemy_map:
key = (sprite_translation[enemy_map[idx]], 0)
if key not in requirements:
continue
req = requirements[key]
try:
combine_req(sub_groups_choices, req)
except IncompatibleEnemyException:
logging.getLogger('').warning(f'Incompatible enemy: {hex(room_id)}:{idx} {enemy_map[idx]}')
else:
sprite_secondary = 0 if sprite.sub_type != SpriteType.Overlord else sprite.sub_type
key = (sprite.kind, sprite_secondary)
if key not in requirements:
continue
req = requirements[key]
if isinstance(req, dict):
req = req[room_id]
if req.static or not req.can_randomize:
try:
combine_req(sub_groups_choices, req)
except IncompatibleEnemyException:
raise IncompatibleEnemyException(f'Incompatible enemy: {hex(room_id)}:{idx} {str(req)}')
sheet_req = [None if not x else tuple(x) for x in sub_groups_choices]
find_matching_sheet(sheet_req, sheets, sheet_range, [room_id], True)
def randomize_underworld_sprite_sheets(sheets, data_tables, custom_enemies):
setup_required_dungeon_groups(sheets, data_tables) setup_required_dungeon_groups(sheets, data_tables)
setup_custom_enemy_sheets(custom_enemies, sheets, data_tables, range(65, 124), True)
for num in range(65, 124): # sheets 0x41 to 0x7B inclusive for num in range(65, 124): # sheets 0x41 to 0x7B inclusive
sheet = sheets[num] sheet = sheets[num]
if not sheet.locked[1] and num in [65, 66, 67, 68]: # if not sheet.locked[1] and num in [65, 66, 67, 68]: # guard stuff, kind of
sheet.locked[1] = True # sheet.locked[1] = True
sheet.sub_groups[1] = random.choice([13, 73]) # sheet.sub_groups[1] = random.choice([13, 73])
for idx in range(0, 4):
if not sheet.locked[idx]: free_slots = [idx for idx in range(0, 4) if not sheet.locked[idx]]
sheet.sub_groups[idx] = random.choice(sub_group_choices[idx]) while free_slots:
# lock the group? choices = [c for c in data_tables.sheet_choices if all(slot in free_slots for slot in c.slots)]
weights = [c.weight for c in choices]
choice = random.choices(choices, weights, k=1)[0]
for idx, val in choice.assignments.items():
v = random.choice(val) if isinstance(val, list) else val
sheet.sub_groups[idx] = v
sheet.locked[idx] = True
free_slots = [idx for idx in range(0, 4) if not sheet.locked[idx]]
def setup_required_overworld_groups(sheets): def setup_required_overworld_groups(sheets):
@@ -612,7 +678,8 @@ def setup_required_overworld_groups(sheets):
sheets[4].add_sprite_to_sheet([None, None, None, None], {0xF, 0x9F}) # Waterfall of wishing (pre/post-Aga) sheets[4].add_sprite_to_sheet([None, None, None, None], {0xF, 0x9F}) # Waterfall of wishing (pre/post-Aga)
sheets[3].add_sprite_to_sheet([None, None, None, 14], {0x14, 0xA4}) # Graveyard (pre/post-Aga) sheets[3].add_sprite_to_sheet([None, None, None, 14], {0x14, 0xA4}) # Graveyard (pre/post-Aga)
sheets[1].add_sprite_to_sheet([None, None, 76, 63], {0x1B, 0xAB}) # Hyrule Castle (pre/post-Aga) sheets[1].add_sprite_to_sheet([None, None, 76, 63], {0x1B, 0xAB}) # Hyrule Castle (pre/post-Aga)
sheets[6].add_sprite_to_sheet([None, None, None, None], {0x22, 0x28, 0xB2, 0xB8}) # Smithy/Race (pre/post-Aga) # Smithy/Race/Kak (pre/post-Aga)
sheets[6].add_sprite_to_sheet([0x4F, 0x49, 0x4A, 0x50], {0x18, 0x22, 0x28, 0xA8, 0xB2, 0xB8})
sheets[8].add_sprite_to_sheet([None, None, 18, None], {0x30, 0xC0}) # Desert (pre/post-Aga) sheets[8].add_sprite_to_sheet([None, None, 18, None], {0x30, 0xC0}) # Desert (pre/post-Aga)
sheets[10].add_sprite_to_sheet([None, None, None, 17], {0x3A, 0xCA}) # M-rock (pre/post-Aga) sheets[10].add_sprite_to_sheet([None, None, None, 17], {0x3A, 0xCA}) # M-rock (pre/post-Aga)
sheets[22].add_sprite_to_sheet([None, None, 24, None], {0x4F, 0xDF}) # Catfish (pre/post-Aga) sheets[22].add_sprite_to_sheet([None, None, 24, None], {0x4F, 0xDF}) # Catfish (pre/post-Aga)
@@ -628,6 +695,7 @@ def setup_required_overworld_groups(sheets):
sheets[23].add_sprite_to_sheet([None, None, None, 25], {0x5E, 0xEE}) # PoD pre/post-Aga sheets[23].add_sprite_to_sheet([None, None, None, 25], {0x5E, 0xEE}) # PoD pre/post-Aga
free_sheet_reqs = [ free_sheet_reqs = [
[None, None, None, 0x14], # bully+pink ball needs this
[72, 73, None, None], # allow for blue archer + green bush [72, 73, None, None], # allow for blue archer + green bush
[None, 73, 19, None], # allow for green knife guard [None, 73, 19, None], # allow for green knife guard
[22, None, 23, None], # increase odds for snapdragon [22, None, 23, None], # increase odds for snapdragon
@@ -638,10 +706,20 @@ def setup_required_overworld_groups(sheets):
find_matching_sheet(group, sheets, range(1, 64)) find_matching_sheet(group, sheets, range(1, 64))
def find_matching_sheet(groups, sheets, search_sheets, room_list=None): class NoMatchingSheetException(Exception):
pass
class IncompatibleEnemyException(Exception):
pass
def find_matching_sheet(groups, sheets, search_sheets, room_list=None, lock_match=False):
possible_sheets = [] possible_sheets = []
found_match = False found_match = False
for num in search_sheets: for num in search_sheets:
if num in {6, 65, 69, 71, 78, 79, 82, 88, 98}: # these are not useful sheets for randomization
continue
sheet = sheets[num] sheet = sheets[num]
valid = True valid = True
match = True match = True
@@ -655,37 +733,44 @@ def find_matching_sheet(groups, sheets, search_sheets, room_list=None):
match = False match = False
if match: if match:
found_match = True found_match = True
if lock_match and room_list is not None:
sheet.room_set.update(room_list)
break break
if valid: if valid:
possible_sheets.append(sheet) possible_sheets.append(sheet)
if not found_match: if not found_match:
if len(possible_sheets) == 0:
raise NoMatchingSheetException
chosen_sheet = random.choice(possible_sheets) chosen_sheet = random.choice(possible_sheets)
chosen_groups = [(random.choice(g) if isinstance(g, tuple) else g) for g in groups] chosen_groups = [(random.choice(g) if isinstance(g, tuple) else g) for g in groups]
chosen_sheet.add_sprite_to_sheet(chosen_groups, room_list) chosen_sheet.add_sprite_to_sheet(chosen_groups, room_list)
def randomize_overworld_sprite_sheets(sheets): def randomize_overworld_sprite_sheets(sheets, data_tables, custom_enemies):
setup_required_overworld_groups(sheets) setup_required_overworld_groups(sheets)
setup_custom_enemy_sheets(custom_enemies, sheets, data_tables, range(1, 64), False)
for num in range(1, 64): # sheets 0x1 to 0x3F inclusive for num in range(1, 64): # sheets 0x1 to 0x3F inclusive
sheet = sheets[num] sheet = sheets[num]
if num == 6: # skip this group, would like to know why though if num == 6: # skip this group - it is locked for kakariko
continue continue
for idx in range(0, 4):
if not sheet.locked[idx]: free_slots = [idx for idx in range(0, 4) if not sheet.locked[idx]]
sheet.sub_groups[idx] = random.choice(sub_group_choices[idx]) while free_slots:
# lock the group? choices = [c for c in data_tables.sheet_choices if all(slot in free_slots for slot in c.slots)]
weights = [c.weight for c in choices]
choice = random.choices(choices, weights, k=1)[0]
for idx, val in choice.assignments.items():
v = random.choice(val) if isinstance(val, list) else val
sheet.sub_groups[idx] = v
sheet.locked[idx] = True
free_slots = [idx for idx in range(0, 4) if not sheet.locked[idx]]
class SheetChoice:
def __init__(self, slots, assignments, weight):
self.slots = slots
self.assignments = assignments
self.weight = weight

View File

@@ -183,7 +183,7 @@ SubClassTable:
0x60: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 0x60: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
0x61: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 0x61: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
0x62: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 0x62: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
0x63: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 0x63: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 3, 3, 3] # the pit spawns the 0x64
0x64: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 3, 3, 3] 0x64: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 3, 3, 3]
0x65: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 0x65: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
0x66: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 0x66: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

View File

@@ -0,0 +1,390 @@
UwGeneralDeny:
- [ 0x0002, 0, [ "RollerVerticalDown" ] ] #"Sewers - Rat Pots - Rat 1"
- [ 0x0002, 1, [ "RollerVerticalDown" ] ] #"Sewers - Rat Pots - Rat 2"
- [ 0x0002, 2, [ "RollerVerticalUp" ] ] #"Sewers - Rat Pots - Rat 3"
- [ 0x0002, 3, [ "RollerVerticalUp" ] ] #"Sewers - Rat Pots - Rat 4"
- [ 0x0002, 15, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft" ] ] #"Sewers - Rat Pots - Rat 6"
- [ 0x0002, 16, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft" ] ] #"Sewers - Rat Pots - Rat 7"
- [ 0x000a, 0, [ "RollerVerticalDown", "RollerVerticalUp" ] ] #"Palace of Darkness - Basement Ledge - Terrorpin 1"
- [ 0x000a, 1, [ "RollerHorizontalRight", "RollerHorizontalLeft" ] ] #"Palace of Darkness - Basement Ledge - Terrorpin 2"
- [ 0x000b, 1, [ "RollerVerticalDown", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Palace of Darkness - Callback - Terrorpin 1"
- [ 0x000e, 0, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft" ] ] #"Ice Palace - Entrance - Freezor"
- [ 0x000e, 1, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft" ] ] #"Ice Palace - Bari Key - Top Bari"
- [ 0x000e, 2, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft" ] ] #"Ice Palace - Bari Key - Middle Bari"
- [ 0x0016, 0, [ "RollerVerticalDown", "RollerVerticalUp", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Swamp Palace - Pool - Zol 1"
- [ 0x0016, 1, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Swamp Palace - Pool - Zol 2"
- [ 0x0016, 2, [ "SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Swamp Palace - Pool - Blue Bari"
- [ 0x0016, 3, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Swamp Palace - Pool - Zol 3"
- [ 0x0017, 5, [ "Beamos", "AntiFairyCircle", "SpikeBlock", "Bumper" ] ] #"Tower Of Hera - Bumper Room - Fire Bar (Clockwise)"
- [ 0x0019, 0, [ "SparkCW", "SparkCCW", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Palace of Darkness - Dark Maze - Kodongo 1"
- [ 0x0019, 1, [ "RollerVerticalUp" ] ] #"Palace of Darkness - Dark Maze - Kodongo 2"
- [ 0x0019, 2, [ "RollerVerticalDown", "RollerVerticalUp" ] ] #"Palace of Darkness - Dark Maze - Kodongo 3"
- [ 0x0019, 3, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft" ] ] #"Palace of Darkness - Dark Maze - Kodongo 4"
- [ 0x001a, 0, [ "SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper" ] ] #"Palace of Darkness - Compass Room - Mini Helmasaur 1"
- [ 0x001a, 5, [ "SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper" ] ] #"Palace of Darkness - Compass Room - Mini Helmasaur 2"
- [ 0x001b, 3, [ "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Palace of Darkness - Mimics 2 - Red Eyegore"
- [ 0x001b, 4, [ "RollerVerticalUp" ] ] #"Palace of Darkness - Mimics 2 - Green Eyegore L"
- [ 0x001e, 3, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "BigSpike", "Bumper" ] ] #"Ice Palace - Blob Ambush - Red Bari 3"
- [ 0x001e, 4, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "BigSpike", "Bumper" ] ] #"Ice Palace - Blob Ambush - Red Bari 4"
- [ 0x001e, 5, [ "SparkCW", "SparkCCW", "RollerVerticalDown", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ice Palace - Blob Ambush - Zol 1"
- [ 0x001e, 6, [ "SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ice Palace - Blob Ambush - Zol 2"
- [ 0x001f, 0, [ "RollerHorizontalRight" ] ] #"Ice Palace - Big Key View - Pengator 1"
- [ 0x0021, 3, [ "RollerVerticalDown", "RollerVerticalUp" ] ] #"Sewers - Dark U - Rat 2"
- [ 0x0021, 4, [ "RollerVerticalDown", "RollerVerticalUp" ] ] #"Sewers - Dark U - Rat 3"
- [ 0x0026, 1, [ "SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Swamp Palace - Big Spoon - Red Bari 1"
- [ 0x0026, 8, [ "AntiFairyCircle", "Bumper" ] ] #"Swamp Palace - Big Spoon - Red Bari 3"
- [ 0x0026, 9, [ "RollerHorizontalRight" ] ] #"Swamp Palace - Big Spoon - Kyameron"
- [ 0x0027, 0, [ "SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalLeft", "FirebarCW" ] ] #"Tower Of Hera - Petting Zoo - Mini Moldorm 1"
- [ 0x0027, 1, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "AntiFairyCircle", "SpikeBlock", "Bumper" ] ] #"Tower Of Hera - Petting Zoo - Mini Moldorm 2"
- [ 0x0027, 2, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "AntiFairyCircle", "SpikeBlock", "Bumper" ] ] #"Tower Of Hera - Petting Zoo - Mini Moldorm 3"
- [ 0x0027, 5, [ "SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Tower Of Hera - Petting Zoo - Kodongo 1"
- [ 0x0028, 4, [ "RollerVerticalUp" ] ] #"Swamp Palace - Entrance Ledge - Spike Trap"
- [ 0x002a, 2, [ "SparkCW", "SparkCCW", "RollerHorizontalRight", "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "SpikeBlock" ] ] #"Palace of Darkness - Arena Main - Hardhat Beetle 1"
- [ 0x002a, 3, [ "Statue", "SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper" ] ] #"Palace of Darkness - Arena Main - Hardhat Beetle 2"
- [ 0x002a, 6, [ "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Palace of Darkness - Arena Main - Hardhat Beetle 5"
- [ 0x002b, 5, [ "RollerHorizontalRight" ] ] #"Palace of Darkness - Fairies - Red Bari 2"
- [ 0x002e, 0, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "BigSpike", "FirebarCW", "FirebarCCW" ] ] #"Ice Palace - Penguin Chest - Pengator 1"
- [ 0x002e, 1, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "BigSpike", "FirebarCW", "FirebarCCW" ] ] #"Ice Palace - Penguin Chest - Pengator 2"
- [ 0x002e, 2, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "BigSpike", "FirebarCW", "FirebarCCW" ] ] #"Ice Palace - Penguin Chest - Pengator 3"
- [ 0x002e, 3, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "BigSpike", "FirebarCW", "FirebarCCW" ] ] #"Ice Palace - Penguin Chest - Pengator 4"
- [ 0x002e, 4, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "BigSpike", "FirebarCW", "FirebarCCW" ] ] #"Ice Palace - Penguin Chest - Pengator 5"
- [ 0x002e, 5, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "BigSpike", "FirebarCW", "FirebarCCW" ] ] #"Ice Palace - Penguin Chest - Pengator 6"
- [ 0x0034, 0, [ "SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Swamp Palace - West Wing - Hover 1"
- [ 0x0034, 1, [ "SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Swamp Palace - West Wing - Hover 2"
- [ 0x0034, 2, [ "SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Swamp Palace - West Wing - Kyameron"
- [ 0x0034, 4, [ "Statue", "SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Swamp Palace - West Wing - Zol"
- [ 0x0035, 6, [ "RollerHorizontalRight" ] ] #"Swamp Palace - West Lever - Stalfos 2"
- [ 0x0035, 9, [ "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Swamp Palace - West Lever - Blue Bari"
- [ 0x0036, 7, [ "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper" ] ] #"Swamp Palace - Lobby - Hover 3"
- [ 0x0037, 7, [ "RollerHorizontalRight" ] ] #"Swamp Palace - Water 1 - Blue Bari"
- [ 0x0038, 4, [ "RollerHorizontalRight" ] ] #"Swamp Palace - Long Hall - Kyameron 2"
- [ 0x0039, 3, [ "RollerVerticalUp", "RollerHorizontalLeft" ] ] #"Skull Woods - Play Pen - Mini Helmasaur"
- [ 0x0039, 4, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "FirebarCW", "FirebarCCW" ] ] #"Skull Woods - Play Pen - Spike Trap 1"
- [ 0x0039, 5, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft" ] ] #"Skull Woods - Play Pen - Hardhat Beetle"
- [ 0x0039, 6, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "FirebarCW", "FirebarCCW" ] ] #"Skull Woods - Play Pen - Spike Trap 2"
- [ 0x003c, 1, [ "SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Hookshot Cave - Blue Bari 1"
- [ 0x003c, 2, [ "SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Hookshot Cave - Blue Bari 2"
- [ 0x003d, 9, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - Torches 2 - Spark (Counterclockwise)"
- [ 0x003d, 10, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - Torches 2 - Spark (Clockwise) 1"
- [ 0x003d, 12, [ "AntiFairyCircle", "Bumper" ] ] #"Ganon's Tower - Torches 2 - Bunny Beam"
- [ 0x003d, 13, [ "AntiFairyCircle", "Bumper" ] ] #"Ganon's Tower - Torches 2 - Antifairy"
- [ 0x003f, 1, [ "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper" ] ] #"Ice Palace - P Room - Stalfos Knight 1"
- [ 0x003f, 3, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ice Palace - P Room - Stalfos Knight 2"
- [ 0x0040, 0, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] # Agahnims Tower - Bridge - Blue Guard 1
- [ 0x0040, 1, [ "Statue", "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] # Agahnims Tower - Bridge - Blue Guard 2
- [ 0x0041, 0, [ "RollerHorizontalLeft" ] ] #"Sewers - Dark Cactus - Rat 1"
- [ 0x0041, 1, [ "RollerVerticalDown", "RollerHorizontalRight" ] ] #"Sewers - Dark Cactus - Rat 2"
- [ 0x0041, 2, [ "RollerVerticalUp" ] ] #"Sewers - Dark Cactus - Rat 3"
- [ 0x0042, 0, [ "SparkCW", "SparkCCW", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Sewers - Dark Rope Corridor - Rope 1"
- [ 0x0042, 1, [ "SparkCW", "SparkCCW", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Sewers - Dark Rope Corridor - Rope 2"
- [ 0x0042, 2, [ "SparkCW", "SparkCCW", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Sewers - Dark Rope Corridor - Rope 3"
- [ 0x0042, 3, [ "SparkCW", "SparkCCW", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Sewers - Dark Rope Corridor - Rope 4"
- [ 0x0042, 4, [ "SparkCW", "SparkCCW", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Sewers - Dark Rope Corridor - Rope 5"
- [ 0x0042, 5, [ "SparkCW", "SparkCCW", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Sewers - Dark Rope Corridor - Rope 6"
- [ 0x0044, 4, [ "RollerVerticalUp", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Joke Room - Zol"
- [ 0x0044, 6, [ "RollerVerticalUp", "RollerVerticalDown", "Beamos", "BigSpike" ] ] #"Thieves' Town - Joke Room - Red Bari"
- [ 0x0044, 8, [ "Statue", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Joke Room - Blue Bari 4"
- [ 0x0045, 1, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Thieves' Town - Basement Block Totems - Red Zazak"
- [ 0x0045, 7, [ "AntiFairyCircle", "Bumper" ] ] #"Thieves' Town - Cells - Blue Zazak 4"
- [ 0x0045, 8, [ "RollerHorizontalRight" ] ] #"Thieves' Town - Cells - Zol"
- [ 0x0046, 0, [ "RollerVerticalUp", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Swamp Palace - Big O Top - Hover 1"
- [ 0x0046, 2, [ "RollerVerticalDown", "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Swamp Palace - Big O Top - Hover 2"
- [ 0x0046, 4, [ "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Swamp Palace - Big O Top - Hover 3"
- [ 0x0049, 5, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Skull Woods - Bari Pits - Gibdo 2"
- [ 0x0049, 7, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Skull Woods - Bari Pits - Gibdo 4"
- [ 0x0049, 8, [ "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Skull Woods - Bari Pits - Gibdo 5"
- [ 0x004b, 0, [ "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Palace of Darkness - Mimics 1 - Red Eyegore"
- [ 0x004b, 1, [ "RollerHorizontalRight" ] ] #"Palace of Darkness - Warp Hint - Antifairy 1"
- [ 0x004b, 5, [ "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Palace of Darkness - Jelly Hall - Blue Bari 1"
- [ 0x004b, 6, [ "AntiFairyCircle", "BigSpike" ] ] #"Palace of Darkness - Jelly Hall - Blue Bari 2"
- [ 0x004b, 7, [ "AntiFairyCircle", "BigSpike" ] ] #"Palace of Darkness - Jelly Hall - Blue Bari 3"
- [ 0x004e, 0, [ "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ice Palace - Blob Alley - Zol 1"
- [ 0x004e, 1, [ "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ice Palace - Blob Alley - Zol 2"
- [ 0x004e, 2, [ "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ice Palace - Blob Alley - Zol 3"
- [ 0x0050, 0, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Hyrule Castle - North West Passage - Green Guard"
- [ 0x0050, 1, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Hyrule Castle - North West Passage - Green Knife Guard 1"
- [ 0x0050, 2, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Hyrule Castle - North West Passage - Green Knife Guard 2"
- [ 0x0052, 0, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "Bumper" ] ] #"Hyrule Castle - North East Passage - Green Guard"
- [ 0x0052, 1, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "Bumper" ] ] #"Hyrule Castle - North East Passage - Green Knife Guard 1"
- [ 0x0052, 2, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "Bumper" ] ] #"Hyrule Castle - North East Passage - Green Knife Guard 2"
- [ 0x0053, 1, [ "AntiFairyCircle", "Bumper" ] ] #"Desert Palace - Bridge - Beamos 1"
- [ 0x0053, 5, [ "RollerVerticalDown" ] ] #"Desert Palace - Popo Genocide - Popo TL"
- [ 0x0053, 7, [ "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Desert Palace - Bridge - Popo 5"
- [ 0x0055, 1, [ "RollerVerticalUp", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Secret Passage Exit - Green Knife Guard 1"
- [ 0x0057, 2, [ "RollerVerticalUp", "AntiFairyCircle", "Bumper" ] ] #"Skull Woods - Big Key Room - Spike Trap"
- [ 0x0057, 7, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Skull Woods - Big Key Room - Gibdo 2"
- [ 0x0057, 12, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Skull Woods - Big Key Room - Gibdo 6"
- [ 0x0057, 13, [ "RollerVerticalDown", "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Skull Woods - Big Key Room - Blue Bari 1"
- [ 0x0057, 14, [ "RollerVerticalDown", "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Skull Woods - Big Key Room - Blue Bari 2"
- [ 0x0058, 7, [ "RollerHorizontalLeft" ] ] #"Skull Woods - Lever Room - Hardhat Beetle 2"
- [ 0x0059, 0, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Skull Woods - Bridge Room - Mini Moldorm 1"
- [ 0x0059, 1, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Skull Woods - Bridge Room - Mini Moldorm 2"
- [ 0x0059, 9, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Skull Woods - Bridge Room - Gibdo 1"
- [ 0x005e, 3, [ "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "SpikeBlock", "Bumper" ] ] #"Ice Palace - Pit Trap - Big Spike Trap"
- [ 0x005e, 4, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Ice Palace - Pit Trap - Fire Bar (Clockwise)"
- [ 0x005f, 0, [ "RollerVerticalDown", "RollerHorizontalLeft" ] ] #"Ice Palace - Bari University - Blue Bari 1"
- [ 0x005f, 1, [ "RollerVerticalDown", "RollerHorizontalRight" ] ] #"Ice Palace - Bari University - Blue Bari 2"
- [ 0x0060, 0, [ "RollerVerticalUp", "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Hyrule Castle - West - Blue Guard"
- [ 0x0062, 0, [ "RollerVerticalUp", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Hyrule Castle - East - Blue Guard"
- [ 0x0064, 4, [ "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Thieves' Town - Attic Hall Left - Rat 1"
- [ 0x0065, 0, [ "RollerVerticalUp", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Attic Window - Rat 1"
- [ 0x0065, 1, [ "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Thieves' Town - Attic Window - Rat 2"
- [ 0x0065, 2, [ "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Thieves' Town - Attic Window - Rat 3"
- [ 0x0066, 0, [ "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Swamp Palace - Waterfall Room - Hover 1"
- [ 0x0067, 1, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Skull Woods - Firebar Pits - Blue Bari 1"
- [ 0x0067, 3, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Skull Woods - Firebar Pits - Hardhat Beetle 1"
- [ 0x0067, 5, [ "RollerVerticalDown" ] ] #"Skull Woods - Firebar Pits - Hardhat Beetle 3"
- [ 0x0067, 6, [ "RollerVerticalDown" ] ] #"Skull Woods - Firebar Pits - Hardhat Beetle 4"
- [ 0x0067, 7, [ "Beamos", "AntiFairyCircle", "Bumper", "BunnyBeam" ] ] #"Skull Woods - Firebar Pits - Fire Bar (Clockwise)"
- [ 0x006a, 0, [ "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Palace of Darkness - Dark Alley - Terrorpin 1"
- [ 0x006a, 1, [ "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Palace of Darkness - Dark Alley - Terrorpin 2"
- [ 0x006a, 2, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Palace of Darkness - Dark Alley - Antifairy 1"
- [ 0x006a, 4, [ "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Palace of Darkness - Dark Alley - Terrorpin 3"
- [ 0x006a, 5, [ "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Palace of Darkness - Dark Alley - Terrorpin 4"
- [ 0x006b, 7, [ "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Ganon's Tower - Mimics 1 - Spike Trap 1"
- [ 0x0071, 0, [ "RollerHorizontalLeft" ] ] #"Hyrule Castle - Basement Trap - Green Guard"
- [ 0x0074, 0, [ "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Desert Palace - North Hallway - Red Devalant 1"
- [ 0x0074, 1, [ "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Desert Palace - North Hallway - Red Devalant 2"
- [ 0x0074, 4, [ "AntiFairyCircle", "Bumper" ] ] #"Desert Palace - North Hallway - Leever 1"
- [ 0x0074, 5, [ "AntiFairyCircle", "Bumper" ] ] #"Desert Palace - North Hallway - Leever 2"
- [ 0x0076, 1, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Swamp Palace - Toilet Left - Hover 1"
- [ 0x0076, 2, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Swamp Palace - Toilet Left - Kyameron"
- [ 0x0076, 3, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Swamp Palace - Toilet Left - Hover 2"
- [ 0x0076, 4, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Swamp Palace - Toilet Left - Zol"
- [ 0x0076, 6, [ "RollerVerticalDown", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Swamp Palace - Toilet Left - Blue Bari"
- [ 0x007b, 0, [ "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - DMs Room - Blue Bari 1"
- [ 0x007b, 1, [ "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - DMs Room - Blue Bari 2"
- [ 0x007b, 6, [ "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - DMs Room - Statue"
- [ 0x007b, 7, [ "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - DMs Room - Hardhat Beetle"
- [ 0x007c, 1, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - Randomizer Room - Fire Bar (Counterclockwise)"
- [ 0x007c, 2, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Randomizer Room - Spike Trap"
- [ 0x007c, 3, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Randomizer Room - Fire Bar (Clockwise)"
- [ 0x007c, 4, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - Randomizer Room - Hardhat Beetle"
- [ 0x007d, 0, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - The Zoo - Fire Snake 1"
- [ 0x007d, 1, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - The Zoo - Fire Snake 2"
- [ 0x007d, 2, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - The Zoo - Fire Snake 3"
- [ 0x007d, 3, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - The Zoo - Fire Snake 4"
- [ 0x007d, 7, [ "RollerVerticalUp", "RollerHorizontalLeft" ] ] #"Ganon's Tower - The Zoo - Mini Helmasaur"
- [ 0x007d, 8, [ "RollerVerticalUp", "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Ganon's Tower - The Zoo - Red Bari"
# todo - consider adding firesnake to 0-3: has a hard time moving, could block hookshots for quite a while
- [ 0x007f, 0, [ "Statue", "SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock" ] ] #"Ice Palace - Big Spikes - Red Bari 1"
- [ 0x007f, 1, [ "Statue", "SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock" ] ] #"Ice Palace - Big Spikes - Red Bari 2"
- [ 0x007f, 2, [ "Statue", "SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock" ] ] #"Ice Palace - Big Spikes - Red Bari 3"
- [ 0x007f, 3, [ "Statue", "SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock" ] ] #"Ice Palace - Big Spikes - Red Bari 4"
- [ 0x007f, 4, [ "RollerVerticalDown" ] ] #"Ice Palace - Big Spikes - Big Spike Trap 1"
- [ 0x007f, 5, [ "RollerVerticalDown" ] ] #"Ice Palace - Big Spikes - Big Spike Trap 2"
- [ 0x0082, 0, [ "RollerVerticalDown" ] ] #"Hyrule Castle - Basement Playpit - Blue Guard 1"
- [ 0x0082, 2, [ "RollerVerticalUp" ] ] #"Hyrule Castle - Basement Playpit - Blue Guard 3"
- [ 0x0083, 0, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Desert Palace - Left Hallway - Blue Devalant 1"
- [ 0x0084, 0, [ "RollerVerticalDown", "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Desert Palace - Main Room - Left - Leever 1"
- [ 0x0084, 1, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Desert Palace - Main Room - Left - Leever 2"
- [ 0x0085, 2, [ "RollerHorizontalRight" ] ] #"Desert Palace - Compass Room - Popo TL"
- [ 0x0085, 7, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Desert Palace - Right Hallway - Leever 2"
- [ 0x008b, 4, [ "Statue", "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Ganon's Tower - Map Room - Spike Trap"
- [ 0x008b, 6, [ "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Map Room - Fire Bar (Clockwise)"
- [ 0x008b, 7, [ "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Map Room - Fire Bar (Counterclockwise)"
- [ 0x008d, 1, [ "AntiFairyCircle", "Bumper" ] ] #"Ganon's Tower - Tile Room - Yomo Medusa T"
- [ 0x008d, 7, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Tile Room - Spike Trap"
- [ 0x008d, 8, [ "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - Tile Room - Stalfos"
- [ 0x008d, 9, [ "Statue", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - Tile Room - Fire Bar (Clockwise)"
- [ 0x008d, 10, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Ganon's Tower - Tile Room - Blue Bari 1"
- [ 0x008d, 12, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Ganon's Tower - Tile Room - Blue Bari 2"
- [ 0x0092, 8, [ "RollerVerticalUp", "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Misery Mire - Dark Weave - Spike Trap"
- [ 0x0092, 9, [ "RollerHorizontalRight" ] ] #"Misery Mire - Dark Weave - Antifairy 3"
- [ 0x0092, 10, [ "RollerHorizontalLeft" ] ] #"Misery Mire - Dark Weave - Stalfos"
- [ 0x0095, 0, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock" ] ] #"Ganon's Tower - Conveyer Falling Bridge - Red Spear Guard 1"
- [ 0x0095, 1, [ "Statue", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - Conveyer Falling Bridge - Red Spear Guard 2"
- [ 0x0095, 2, [ "Statue", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - Conveyer Falling Bridge - Red Spear Guard 3"
- [ 0x0095, 3, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "SpikeBlock" ] ] #"Ganon's Tower - Conveyer Falling Bridge - Red Spear Guard 4"
- [ 0x0096, 0, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - Torches 1 - Fire Bar (Clockwise)"
- [ 0x0098, 0, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Misery Mire - Entrance - Zol 1"
- [ 0x0098, 1, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Misery Mire - Entrance - Zol 2"
- [ 0x0098, 2, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Misery Mire - Entrance - Zol 3"
- [ 0x0098, 3, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Misery Mire - Entrance - Zol 4"
- [ 0x0098, 4, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Misery Mire - Entrance - Zol 5"
- [ 0x009b, 3, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Spike Switch - Spike Trap 1"
- [ 0x009b, 4, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Spike Switch - Spike Trap 2"
- [ 0x009b, 6, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Spike Switch - Yomo Medusa"
- [ 0x009b, 7, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Spike Switch - Spike Trap 4"
- [ 0x009b, 8, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Spike Switch - Spike Trap 5"
- [ 0x009b, 9, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Spike Switch - Spike Trap 6"
- [ 0x009b, 10, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Spike Switch - Spike Trap 7"
- [ 0x009c, 1, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - Invisible Floor Maze - Mini Helmasaur"
- [ 0x009c, 2, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - Invisible Floor Maze - Hardhat Beetle 2"
- [ 0x009c, 3, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - Invisible Floor Maze - Hardhat Beetle 3"
- [ 0x009c, 4, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Invisible Floor Maze - Hardhat Beetle 4"
- [ 0x009c, 5, [ "RollerVerticalUp", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Invisible Floor Maze - Hardhat Beetle 5"
- [ 0x009d, 3, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - Compass Room - Gibdo 2"
- [ 0x009d, 6, [ "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Ganon's Tower - Compass Room - Blue Bari 1"
- [ 0x009d, 7, [ "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Compass Room - Blue Bari 2"
- [ 0x009d, 8, [ "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Ganon's Tower - Compass Room - Blue Bari 3"
- [ 0x009e, 0, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ice Palace - Fairy Drop - blue - Red Bari 1"
- [ 0x009e, 1, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ice Palace - Fairy Drop - blue - Red Bari 2"
- [ 0x009e, 2, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ice Palace - Fairy Drop - blue - Stalfos Knight"
- [ 0x009e, 3, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ice Palace - Fairy Drop - blue - Red Bari 3"
- [ 0x00a0, 1, [ "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Misery Mire - Boss Antechamber - Antifairy"
- [ 0x00a1, 2, [ "Statue", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Misery Mire - Fish Room - Spark (Clockwise) 2"
- [ 0x00a5, 10, [ "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Laser Bridge - Red Spear Guard"
- [ 0x00a8, 1, [ "RollerVerticalUp", "RollerHorizontalLeft" ] ] #"Eastern Palace - West Wing - Top - Stalfos 2"
- [ 0x00a8, 3, [ "RollerVerticalDown", "RollerHorizontalLeft" ] ] #"Eastern Palace - West Wing - Top - Stalfos 4"
- [ 0x00aa, 4, [ "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Eastern Palace - East Wing - Top - Stalfos 3"
- [ 0x00aa, 5, [ "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Eastern Palace - East Wing - Top - Popo B 2"
- [ 0x00ab, 7, [ "RollerVerticalUp", "RollerHorizontalLeft" ] ] #"Thieves' Town - Spike Dodge - Spike Trap 6"
- [ 0x00ae, 0, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ice Palace - Ice T - Blue Bari 1"
- [ 0x00ae, 1, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ice Palace - Ice T - Blue Bari 2"
- [ 0x00af, 0, [ "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ice Palace - Ice Clock - Fire Bar (Clockwise)"
- [ 0x00b1, 2, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Misery Mire - Hourglass - Spike Trap 1"
- [ 0x00b1, 3, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Misery Mire - Hourglass - Spike Trap 2"
- [ 0x00b2, 6, [ "RollerVerticalUp", "RollerHorizontalLeft" ] ] #"Misery Mire - Sluggula Cross - Sluggula TR"
- [ 0x00b2, 8, [ "RollerVerticalDown" ] ] #"Misery Mire - Popo Push - Medusa 1"
- [ 0x00b2, 9, [ "RollerVerticalUp" ] ] #"Misery Mire - Sluggula Cross - Sluggula BL"
- [ 0x00b3, 0, [ "RollerVerticalUp", "RollerHorizontalRight", "BigSpike", "SpikeBlock" ] ] #"Misery Mire - Spike Room - Stalfos 1"
- [ 0x00b3, 2, [ "Statue", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "Bumper" ] ] #"Misery Mire - Spike Room - Beamos"
- [ 0x00b3, 3, [ "AntiFairyCircle", "Bumper" ] ] #"Misery Mire - Spike Room - Yomo Medusa"
- [ 0x00b6, 7, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Turtle Rock - Tile Room - Zol 1"
- [ 0x00b6, 8, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Turtle Rock - Tile Room - Zol 2"
- [ 0x00ba, 1, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Eastern Palace - Dark Stalfos - Antifairy 1"
- [ 0x00ba, 3, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Eastern Palace - Dark Stalfos - Antifairy 2"
- [ 0x00ba, 4, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Eastern Palace - Dark Stalfos - Popo B 1"
- [ 0x00ba, 6, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Eastern Palace - Dark Stalfos - Popo B 2"
- [ 0x00bb, 1, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Thieves' Town - Spikeveyer - Gibo 1"
- [ 0x00bb, 4, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "Bumper" ] ] #"Thieves' Town - Spikeveyer - Antifairy 1"
- [ 0x00bb, 5, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Spikeveyer - Gibo 3"
- [ 0x00bb, 6, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Thieves' Town - Spikeveyer - Fire Snake"
- [ 0x00bb, 7, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Spikeveyer - Gibo 4"
- [ 0x00bb, 8, [ "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Thieves' Town - Spikeveyer - Gibo 5"
- [ 0x00bb, 9, [ "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Thieves' Town - Spikeveyer - Antifairy 2"
- [ 0x00bc, 6, [ "AntiFairyCircle", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Toilet - Stalfos 2"
- [ 0x00bc, 7, [ "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Toilet - Stalfos 3"
- [ 0x00bc, 8, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Thieves' Town - Toilet - Stalfos 4"
- [ 0x00c1, 3, [ "RollerVerticalUp", "RollerHorizontalLeft" ] ] #"Misery Mire - 4 Rails - Stalfos 1"
- [ 0x00c2, 0, [ "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Misery Mire - Main Lobby - blue - Fire Snake 1"
- [ 0x00c5, 6, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Turtle Rock - Catwalk - Mini Helmasaur"
- [ 0x00c5, 7, [ "Statue" ] ] #"Turtle Rock - Catwalk - Laser Eye (Left) 4"
- [ 0x00cb, 3, [ "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Grand Room NW - Zol 1"
- [ 0x00cb, 5, [ "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Grand Room NW - Zol 2"
- [ 0x00ce, 0, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "AntiFairyCircle", "Antifairy", "BigSpike", "FirebarCCW", "Bumper" ] ] #"Ice Palace - Over Boss - top - Red Bari 1"
- [ 0x00ce, 1, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "AntiFairyCircle", "Antifairy", "BigSpike", "FirebarCW", "Bumper" ] ] #"Ice Palace - Over Boss - top - Red Bari 2"
- [ 0x00ce, 3, [ "SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "Antifairy", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper" ] ] #"Ice Palace - Over Boss - top - Statue"
- [ 0x00d0, 6, [ "Statue", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] # Agahnims Tower - Dark Maze - Blue Guard 2
- [ 0x00d2, 8, [ "RollerVerticalDown", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Misery Mire - Mire 2 - Popo BL"
- [ 0x00d5, 4, [ "Statue", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper" ] ] #"Turtle Rock - Eye Bridge - Hardhat Beetle"
- [ 0x00d8, 0, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Eastern Palace - Kill Room 2 - Red Eyegore L"
- [ 0x00d8, 1, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Eastern Palace - Kill Room 2 - Red Eyegore R"
- [ 0x00d8, 2, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Eastern Palace - Kill Room 2 - Popo B TL"
- [ 0x00d8, 3, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Eastern Palace - Kill Room 2 - Popo B TR"
- [ 0x00d8, 4, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Eastern Palace - Kill Room 2 - Popo B LT"
- [ 0x00d8, 5, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Eastern Palace - Kill Room 2 - Popo B RT"
- [ 0x00d8, 6, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Eastern Palace - Kill Room 2 - Popo LB"
- [ 0x00d8, 7, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Eastern Palace - Kill Room 2 - Popo RB"
- [ 0x00d8, 8, [ "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Eastern Palace - Kill Room 1 - Red Eyegore"
- [ 0x00d9, 1, [ "RollerHorizontalRight" ] ] #"Eastern Palace - Dodgeball - Green Eyegore 1"
- [ 0x00dc, 9, [ "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Thieves' Town - Grand Room SE - Fire Snake 2"
- [ 0x00df, 0, [ "RollerVerticalDown", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Paradox Cave - Top - Mini Moldorm 1"
- [ 0x00df, 1, [ "RollerVerticalDown", "RollerHorizontalRight", "AntiFairyCircle" ] ] #"Paradox Cave - Top - Mini Moldorm 2"
- [ 0x00e4, 0, [ "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Old Man Home - Keese 1"
- [ 0x00e4, 1, [ "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Old Man Home - Keese 2"
- [ 0x00e4, 2, [ "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Old Man Home - Keese 3"
- [ 0x00e5, 4, [ "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Old Man Home Circle - Keese 5"
- [ 0x00e5, 5, [ "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Old Man Home Circle - Keese 6"
- [ 0x00e7, 0, [ "RollerVerticalUp", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Death Mountain Descent Cave Right - Keese 1"
- [ 0x00e7, 1, [ "RollerVerticalUp", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Death Mountain Descent Cave Right - Keese 2"
- [ 0x00e7, 2, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalRight" ] ] #"Death Mountain Descent Cave Right - Keese 3"
- [ 0x00e7, 3, [ "RollerVerticalDown", "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Death Mountain Descent Cave Right - Keese 4"
- [ 0x00e7, 4, [ "RollerVerticalDown", "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Death Mountain Descent Cave Right - Keese 5"
- [ 0x00e7, 5, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalRight" ] ] #"Death Mountain Descent Cave Right - Keese 6"
- [ 0x00e7, 6, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalRight" ] ] #"Death Mountain Descent Cave Right - Keese 7"
- [ 0x00e8, 0, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "SpikeBlock", "Bumper" ] ] #"Super Bunny Exit - Hardhat Beetle 1"
- [ 0x00e8, 1, [ "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Super Bunny Exit - Hardhat Beetle 2"
- [ 0x00ee, 0, [ "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Sprial Cave Top - Mini Moldorm 1"
- [ 0x00ee, 1, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Sprial Cave Top - Mini Moldorm 2"
- [ 0x00ee, 2, [ "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Sprial Cave Top - Mini Moldorm 3"
- [ 0x00ee, 3, [ "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Sprial Cave Top - Blue Bari 1"
- [ 0x00ee, 4, [ "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Sprial Cave Top - Blue Bari 2"
- [ 0x00ef, 1, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Paradox Cave - Middle - Mini Moldorm 2"
- [ 0x00f1, 0, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Old Man Maze - Keese 1"
- [ 0x00f1, 1, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Old Man Maze - Keese 2"
- [ 0x00f1, 2, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Old Man Maze - Keese 3"
- [ 0x00f1, 3, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Old Man Maze - Keese 4"
- [ 0x00f1, 4, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Old Man Maze - Keese 5"
- [ 0x00f1, 5, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Old Man Maze - Keese 6"
OwGeneralDeny:
- [0x5e, 4, ["RollerVerticalUp", "Gibo"]] # forbid that one roller for kiki pod, and the kiki eating Gibo
- [0x5e, 5, ["Gibo"]] # kiki eating Gibo
UwEnemyDrop:
- [0x0044, 4, ["HardhatBeetle"]] # kept falling off before killing was possible
- [0x0085, 9, ["Babasu"]] # ran off the edge and didn't return
- [0x00cc, 5, ["Babasu"]] # little hard to see and kill appropriately
# the following are behind rails
- [0x0077, 4, ["StalfosKnight", "Geldman", "Blob"]] # can't activate here
- [0x0077, 5, ["StalfosKnight", "Geldman", "Blob"]]
- [0x007D, 4, ["StalfosKnight", "Geldman", "Blob"]]
- [0x007D, 7, ["StalfosKnight", "Geldman", "Blob"]]
- [0x007D, 8, ["StalfosKnight", "Geldman", "Blob"]]
- [0x007D, 10, ["StalfosKnight", "Geldman", "Blob"]]
- [0x008D, 10, ["StalfosKnight", "Geldman", "Blob"]]
- [0x008D, 12, ["StalfosKnight", "Geldman", "Blob"]]
- [0x010C, 2, ["StalfosKnight", "Geldman", "Blob"]]
- [0x010C, 3, ["StalfosKnight", "Geldman", "Blob"]]
# the following are not allowed at certain pits
# because they despawned or clipped away or immediately fell
- [0x007f, 0, ["HardhatBeetle", "Wizzrobe", "MiniHelmasaur", "BlueGuard", "GreenGuard", "RedSpearGuard",
"BluesainBolt", "UsainBolt", "BlueArcher", "GreenBushGuard", "RedJavelinGuard", "RedBushGuard",
"BombGuard", "GreenKnifeGuard"]]
- [0x007f, 1, ["HardhatBeetle", "Wizzrobe", "MiniHelmasaur", "BlueGuard", "GreenGuard", "RedSpearGuard",
"BluesainBolt", "UsainBolt", "BlueArcher", "GreenBushGuard", "RedJavelinGuard", "RedBushGuard",
"BombGuard", "GreenKnifeGuard"]]
- [0x007f, 2, ["HardhatBeetle", "Wizzrobe", "MiniHelmasaur", "BlueGuard", "GreenGuard", "RedSpearGuard",
"BluesainBolt", "UsainBolt", "BlueArcher", "GreenBushGuard", "RedJavelinGuard", "RedBushGuard",
"BombGuard", "GreenKnifeGuard"]]
- [0x007f, 3, ["HardhatBeetle", "Wizzrobe", "MiniHelmasaur", "BlueGuard", "GreenGuard", "RedSpearGuard",
"BluesainBolt", "UsainBolt", "BlueArcher", "GreenBushGuard", "RedJavelinGuard", "RedBushGuard",
"BombGuard", "GreenKnifeGuard"]]
- [0x00b5, 0, ["HardhatBeetle", "Wizzrobe", "MiniHelmasaur", "BlueGuard", "GreenGuard", "RedSpearGuard",
"BluesainBolt", "UsainBolt", "BlueArcher", "GreenBushGuard", "RedJavelinGuard", "RedBushGuard",
"BombGuard", "GreenKnifeGuard"]]
- [0x00b5, 1, ["HardhatBeetle", "Wizzrobe", "MiniHelmasaur", "BlueGuard", "GreenGuard", "RedSpearGuard",
"BluesainBolt", "UsainBolt", "BlueArcher", "GreenBushGuard", "RedJavelinGuard", "RedBushGuard",
"BombGuard", "GreenKnifeGuard"]]
- [0x00b5, 2, ["HardhatBeetle", "Wizzrobe", "MiniHelmasaur", "BlueGuard", "GreenGuard", "RedSpearGuard",
"BluesainBolt", "UsainBolt", "BlueArcher", "GreenBushGuard", "RedJavelinGuard", "RedBushGuard",
"BombGuard", "GreenKnifeGuard"]]
- [0x00c6, 2, ["HardhatBeetle", "Wizzrobe", "MiniHelmasaur", "BlueGuard", "GreenGuard", "RedSpearGuard",
"BluesainBolt", "UsainBolt", "BlueArcher", "GreenBushGuard", "RedJavelinGuard", "RedBushGuard",
"BombGuard", "GreenKnifeGuard"]]
- [0x00c6, 3, ["HardhatBeetle", "Wizzrobe", "MiniHelmasaur", "BlueGuard", "GreenGuard", "RedSpearGuard",
"BluesainBolt", "UsainBolt", "BlueArcher", "GreenBushGuard", "RedJavelinGuard", "RedBushGuard",
"BombGuard", "GreenKnifeGuard"]]
- [0x00c6, 4, ["HardhatBeetle", "Wizzrobe", "MiniHelmasaur", "BlueGuard", "GreenGuard", "RedSpearGuard",
"BluesainBolt", "UsainBolt", "BlueArcher", "GreenBushGuard", "RedJavelinGuard", "RedBushGuard",
"BombGuard", "GreenKnifeGuard"]]
- [0x00c6, 5, ["HardhatBeetle", "Wizzrobe", "MiniHelmasaur", "BlueGuard", "GreenGuard", "RedSpearGuard",
"BluesainBolt", "UsainBolt", "BlueArcher", "GreenBushGuard", "RedJavelinGuard", "RedBushGuard",
"BombGuard", "GreenKnifeGuard"]]
- [0x00c6, 6, ["HardhatBeetle", "Wizzrobe", "MiniHelmasaur", "BlueGuard", "GreenGuard", "RedSpearGuard",
"BluesainBolt", "UsainBolt", "BlueArcher", "GreenBushGuard", "RedJavelinGuard", "RedBushGuard",
"BombGuard", "GreenKnifeGuard"]]
# the following are all slightly in the wall on spawn
- [0x0064, 0, ["Leever"]]
- [0x00e5, 4, ["Leever"]]
- [0x00e5, 5, ["Leever"]]
- [0x00e6, 0, ["HardhatBeetle", "Wizzrobe"]] # over pit might be okay for Leever
- [0x00e6, 1, ["Leever"]]
- [0x00e6, 2, ["Leever"]]
- [0x00e6, 3, ["Leever"]]
- [0x00e6, 4, ["Leever"]]
- [0x00e7, 3, ["Leever"]]
- [0x00e7, 4, ["Leever"]]
- [0x00f0, 2, ["Leever"]] # clipped away
- [0x00f0, 3, ["Leever"]]
- [0x00f0, 4, ["Leever"]]
- [0x00f0, 5, ["Leever"]]
- [0x00f0, 6, ["Leever"]]
- [0x00f0, 8, ["Leever"]]
- [0x00f1, 0, ["Leever"]]
- [0x00f1, 1, ["Leever"]]
- [0x00f1, 6, ["Leever"]]
- [0x00f1, 7, ["Leever"]]
- [0x00f1, 8, ["Leever"]]
- [0x00f1, 9, ["Leever"]]

View File

@@ -1,198 +1,198 @@
UW: # Total 82753 UW: # Total 94431
AntiFairy: 50 # f1.99026% raw:1647 AntiFairy: 40 # 1.82885% raw:1727 15.28319%
Statue: 50 # f1.99026% raw:1647 AntiFairyCircle: 40 # 1.82885% raw:1727 15.28319%
BlueGuard: 124 # f0.80480% raw:666 ArmosStatue: 186 # 0.53796% raw:508 4.49558%
GreenGuard: 157 # f0.63563% raw:526 Babasu: 80 # 1.15428% raw:1090 9.64602%
RedSpearGuard: 124 # f0.80480% raw:666 BallNChain: 163 # 0.61526% raw:581 5.14159%
BluesainBolt: 567 # f0.17643% raw:146 Beamos: 155 # 0.64703% raw:611 5.40708%
UsainBolt: 124 # f0.80480% raw:666 BigSpike: 40 # 1.82885% raw:1727 15.28319%
RedJavelinGuard: 662 # f0.15105% raw:125 Blob: 87 # 1.15428% raw:1090 9.64602%
RedBushGuard: 662 # f0.15105% raw:125 BlueArcher: 325 # 0.30816% raw:291 2.57522%
BombGuard: 662 # f0.15105% raw:125 BlueBari: 49 # 2.02688% raw:1914 16.93805%
BallNChain: 662 # f0.15105% raw:125 BlueGuard: 44 # 2.28527% raw:2158 19.09735%
CannonTrooper: 662 # f0.15105% raw:125 BlueZazak: 294 # 0.33993% raw:321 2.84071%
CricketRat: 169 # f0.59212% raw:490 BlueZirro: 180 # 0.55702% raw:526 4.65487%
Snake: 169 # f0.59212% raw:490 BluesainBolt: 150 # 0.66821% raw:631 5.58407%
Keese: 169 # f0.59212% raw:490 BombGuard: 163 # 0.61526% raw:581 5.14159%
BigSpike: 50 # f1.99026% raw:1647 Bumper: 55 # 1.82885% raw:1727 15.28319%
AntiFairyCircle: 50 # f1.99026% raw:1647 BunnyBeam: 19 # 5.40077% raw:5100 45.13274%
SpikeBlock: 50 # f1.99026% raw:1647 Buzzblob: 123 # 0.81223% raw:767 6.78761%
Bumper: 50 # f1.99026% raw:1647 CannonTrooper: 163 # 0.61526% raw:581 5.14159%
BunnyBeam: 14 # f7.12965% raw:5900 Chainchomp: 238 # 0.42041% raw:397 3.51327%
FloppingFish: 14 # f7.12965% raw:5900 Crab: 204 # 0.48925% raw:462 4.08850%
Stal: 14 # f7.12965% raw:5900 CricketRat: 212 # 0.47230% raw:446 3.94690%
Landmine: 14 # f7.12965% raw:5900 Cucco: 120 # 0.54325% raw:513 4.53982%
Octorok: 159 # f0.62717% raw:519 Deadrock: 186 # 0.53796% raw:508 4.49558%
RedBari: 99 # f1.01386% raw:839 Debirando: 154 # 0.65127% raw:615 5.44248%
BlueBari: 99 # f1.01386% raw:839 DebirandoPit: 154 # 0.65127% raw:615 5.44248%
FireballZora: 159 # f0.62717% raw:519 FakeMasterSword: 120 # 0.81223% raw:767 6.78761%
SparkCW: 99 # f1.01386% raw:839 FireballZora: 165 # 0.60679% raw:573 5.07080%
SparkCCW: 99 # f1.01386% raw:839 FirebarCCW: 49 # 2.02688% raw:1914 16.93805%
FloatingSkull: 99 # f1.01386% raw:839 FirebarCW: 49 # 2.02688% raw:1914 16.93805%
FirebarCW: 99 # f1.01386% raw:839 Firesnake: 49 # 2.02688% raw:1914 16.93805%
FirebarCCW: 99 # f1.01386% raw:839 FloatingSkull: 49 # 2.02688% raw:1914 16.93805%
Firesnake: 99 # f1.01386% raw:839 FloppingFish: 30 # 5.40077% raw:5100 45.13274%
Stalfos: 99 # f1.01386% raw:839 Freezor: 454 # 0.22027% raw:208 1.84071%
Raven: 92 # f1.09120% raw:903 Geldman: 445 # 0.22450% raw:212 1.87611%
Vulture: 400 # f0.25014% raw:207 Gibdo: 150 # 0.40453% raw:382 3.38053%
Buzzblob: 196 # f0.51116% raw:423 Gibo: 294 # 0.33993% raw:321 2.84071%
Hoarder: 196 # f0.51116% raw:423 GreenBushGuard: 325 # 0.30816% raw:291 2.57522%
Hoarder2: 196 # f0.51116% raw:423 GreenEyegoreMimic: 175 # 0.57291% raw:541 4.78761%
Geldman: 400 # f0.25014% raw:207 GreenGuard: 55 # 1.80237% raw:1702 15.06195%
Toppo: 196 # f0.51116% raw:423 GreenKnifeGuard: 621 # 0.16096% raw:152 1.34513%
FakeMasterSword: 196 # f0.51116% raw:423 GreenZirro: 180 # 0.55702% raw:526 4.65487%
MiniHelmasaur: 56 # f1.79450% raw:1485 HardhatBeetle: 109 # 0.91495% raw:864 7.64602%
MiniMoldorm: 56 # f1.79450% raw:1485 Hinox: 140 # 0.71269% raw:673 5.95575%
HardhatBeetle: 56 # f1.79450% raw:1485 Hoarder: 123 # 0.81223% raw:767 6.78761%
Lynel: 172 # f0.58246% raw:482 Hoarder2: 123 # 0.81223% raw:767 6.78761%
Deadrock: 176 # f0.56796% raw:470 Hover: 150 # 0.42147% raw:398 3.52212%
ArmosStatue: 176 # f0.56796% raw:470 Keese: 212 # 0.47230% raw:446 3.94690%
Hover: 211 # f0.47370% raw:392 Kodongo: 463 # 0.21603% raw:204 1.80531%
Blob: 52 # f1.90930% raw:1580 Kyameron: 237 # 0.42147% raw:398 3.52212%
StalfosKnight: 52 # f1.90930% raw:1580 Landmine: 19 # 5.40077% raw:5100 45.13274%
Kyameron: 211 # f0.47370% raw:392 Leever: 154 # 0.65127% raw:615 5.44248%
Zoro: 52 # f1.90930% raw:1580 Lynel: 559 # 0.17897% raw:169 1.49558%
Babasu: 52 # f1.90930% raw:1580 MiniHelmasaur: 109 # 0.91495% raw:864 7.64602%
Tektite: 176 # f0.56796% raw:470 MiniMoldorm: 109 # 0.91495% raw:864 7.64602%
Popo: 56 # f1.77516% raw:1469 Moblin: 367 # 0.27216% raw:257 2.27434%
Popo2: 56 # f1.77516% raw:1469 Octoballoon: 204 # 0.48925% raw:462 4.08850%
Beamos: 56 # f1.77516% raw:1469 Octorok: 165 # 0.60679% raw:573 5.07080%
DebirandoPit: 110 # f0.90510% raw:749 Octorok4Way: 204 # 0.48925% raw:462 4.08850%
Debirando: 110 # f0.90510% raw:749 Pengator: 300 # 0.22027% raw:208 1.84071%
Leever: 110 # f0.90510% raw:749 Pikit: 180 # 0.55702% raw:526 4.65487%
GreenEyegoreMimic: 270 # f0.36978% raw:306 Poe: 284 # 0.35264% raw:333 2.94690%
RedEyegoreMimic: 270 # f0.36978% raw:306 Pokey: 238 # 0.42041% raw:397 3.51327%
Swamola: 172 # f0.58004% raw:480 Popo: 155 # 0.64703% raw:611 5.40708%
GreenZirro: 191 # f0.52324% raw:433 Popo2: 155 # 0.64703% raw:611 5.40708%
BlueZirro: 191 # f0.52324% raw:433 Raven: 94 # 1.06109% raw:1002 8.86726%
Pikit: 191 # f0.52324% raw:433 RedBari: 49 # 2.02688% raw:1914 16.93805%
Cucco: 207 # f0.48337% raw:400 RedBushGuard: 163 # 0.61526% raw:581 5.14159%
Moblin: 281 # f0.35648% raw:295 RedEyegoreMimic: 175 # 0.57291% raw:541 4.78761%
Octorok4Way: 273 # f0.36615% raw:303 RedJavelinGuard: 163 # 0.61526% raw:581 5.14159%
Octoballoon: 273 # f0.36615% raw:303 RedSpearGuard: 44 # 2.28527% raw:2158 19.09735%
Zora: 690 # f0.14501% raw:120 RedZazak: 294 # 0.33993% raw:321 2.84071%
Crab: 273 # f0.36615% raw:303 RollerHorizontalLeft: 238 # 0.42041% raw:397 3.51327%
Thief: 81 # f1.22896% raw:1017 RollerHorizontalRight: 238 # 0.42041% raw:397 3.51327%
Wizzrobe: 155 # f0.64529% raw:534 RollerVerticalDown: 238 # 0.42041% raw:397 3.51327%
Poe: 828 # f0.12084% raw:100 RollerVerticalUp: 238 # 0.42041% raw:397 3.51327%
Hinox: 109 # f0.92081% raw:762 Ropa: 140 # 0.71269% raw:673 5.95575%
Ropa: 109 # f0.92081% raw:762 Sluggula: 360 # 0.27745% raw:262 2.31858%
Pengator: 294 # f0.33956% raw:281 Snake: 212 # 0.47230% raw:446 3.94690%
Freezor: 294 # f0.33956% raw:281 Snapdragon: 562 # 0.17791% raw:168 1.48673%
Sluggula: 239 # f0.41811% raw:346 SparkCCW: 49 # 2.02688% raw:1914 16.93805%
RollerVerticalUp: 280 # f0.35769% raw:296 SparkCW: 49 # 2.02688% raw:1914 16.93805%
RollerVerticalDown: 280 # f0.35769% raw:296 SpikeBlock: 55 # 1.82885% raw:1727 15.28319%
RollerHorizontalLeft: 280 # f0.35769% raw:296 Stal: 19 # 5.40077% raw:5100 45.13274%
RollerHorizontalRight: 280 # f0.35769% raw:296 Stalfos: 49 # 2.02688% raw:1914 16.93805%
Pokey: 280 # f0.35769% raw:296 StalfosKnight: 87 # 1.15428% raw:1090 9.64602%
Chainchomp: 280 # f0.35769% raw:296 Statue: 30 # 1.82885% raw:1727 15.28319%
Gibdo: 196 # f0.51116% raw:423 Swamola: 402 # 0.24886% raw:235 2.07965%
Wallmaster: 196 # f0.51116% raw:423 Tektite: 186 # 0.53796% raw:508 4.49558%
GreenKnifeGuard: 773 # f0.12930% raw:107 Terrorpin: 463 # 0.21603% raw:204 1.80531%
BlueArcher: 632 # f0.15830% raw:131 Thief: 100 # 0.60997% raw:576 5.09735%
GreenBushGuard: 632 # f0.15830% raw:131 Toppo: 123 # 0.81223% raw:767 6.78761%
Snapdragon: 690 # f0.14501% raw:120 UsainBolt: 44 # 2.28527% raw:2158 19.09735%
Kodongo: 368 # f0.27189% raw:225 Vulture: 445 # 0.22450% raw:212 1.87611%
Terrorpin: 368 # f0.27189% raw:225 Wallmaster: 247 # 0.40453% raw:382 3.38053%
BlueZazak: 400 # f0.25014% raw:207 Wizzrobe: 306 # 0.32722% raw:309 2.73451%
RedZazak: 400 # f0.25014% raw:207 Zora: 609 # 0.16414% raw:155 1.37168%
Gibo: 400 # f0.25014% raw:207 Zoro: 80 # 1.15428% raw:1090 9.64602%
OW: # Total 94707 OW: # Total 117724
Popo: 50 # f2.00513% raw:1899 AntiFairy: 60 # 0.97346% raw:1146 10.14159%
Popo2: 50 # f2.00513% raw:1899 AntiFairyCircle: 60 # 0.97346% raw:1146 10.14159%
Beamos: 50 # f2.00513% raw:1899 ArmosStatue: 144 # 0.69570% raw:819 7.24779%
DebirandoPit: 100 # f1.00415% raw:951 Babasu: 100 # 0.84605% raw:996 8.81416%
Debirando: 100 # f1.00415% raw:951 BallNChain: 121 # 0.82651% raw:973 8.61062%
Leever: 100 # f1.00415% raw:951 Beamos: 184 # 0.54364% raw:640 5.66372%
BunnyBeam: 15 # f6.65210% raw:6300 BigSpike: 70 # 0.97346% raw:1146 10.14159%
FloppingFish: 15 # f6.65210% raw:6300 Blob: 118 # 0.84605% raw:996 8.81416%
Stal: 15 # f6.65210% raw:6300 BlueArcher: 291 # 0.34403% raw:405 3.58407%
Landmine: 15 # f6.65210% raw:6300 BlueBari: 47 # 2.11767% raw:2493 22.06195%
MiniHelmasaur: 49 # f2.03364% raw:1926 BlueGuard: 39 # 2.56617% raw:3021 26.73451%
AntiFairy: 73 # f1.36738% raw:1295 BlueZazak: 247 # 0.40519% raw:477 4.22124%
MiniMoldorm: 49 # f2.03364% raw:1926 BlueZirro: 158 # 0.63369% raw:746 6.60177%
Statue: 73 # f1.36738% raw:1295 BluesainBolt: 111 # 0.90381% raw:1064 9.41593%
HardhatBeetle: 49 # f2.03364% raw:1926 BombGuard: 121 # 0.82651% raw:973 8.61062%
BigSpike: 73 # f1.36738% raw:1295 Bumper: 103 # 0.97346% raw:1146 10.14159%
AntiFairyCircle: 73 # f1.36738% raw:1295 BunnyBeam: 19 # 5.26656% raw:6200 54.86726%
GreenEyegoreMimic: 316 # f0.31677% raw:300 Buzzblob: 86 # 1.15609% raw:1361 12.04425%
RedEyegoreMimic: 316 # f0.31677% raw:300 CannonTrooper: 121 # 0.82651% raw:973 8.61062%
SpikeBlock: 73 # f1.36738% raw:1295 Chainchomp: 226 # 0.44341% raw:522 4.61947%
Bumper: 73 # f1.36738% raw:1295 Crab: 163 # 0.61500% raw:724 6.40708%
Hinox: 87 # f1.14353% raw:1083 CricketRat: 236 # 0.42387% raw:499 4.41593%
Ropa: 87 # f1.14353% raw:1083 Cucco: 140 # 0.60396% raw:711 6.29204%
CricketRat: 160 # f0.62509% raw:592 Deadrock: 144 # 0.69570% raw:819 7.24779%
Snake: 160 # f0.62509% raw:592 Debirando: 164 # 0.60905% raw:717 6.34513%
Keese: 160 # f0.62509% raw:592 DebirandoPit: 164 # 0.60905% raw:717 6.34513%
GreenZirro: 151 # f0.66415% raw:629 FakeMasterSword: 120 # 1.15609% raw:1361 12.04425%
BlueZirro: 151 # f0.66415% raw:629 FireballZora: 119 # 0.84350% raw:993 8.78761%
Pikit: 151 # f0.66415% raw:629 FirebarCCW: 47 # 2.11767% raw:2493 22.06195%
Raven: 61 # f1.64719% raw:1560 FirebarCW: 47 # 2.11767% raw:2493 22.06195%
RollerVerticalUp: 272 # f0.36745% raw:348 Firesnake: 47 # 2.11767% raw:2493 22.06195%
RollerVerticalDown: 272 # f0.36745% raw:348 FloatingSkull: 47 # 2.11767% raw:2493 22.06195%
RollerHorizontalLeft: 272 # f0.36745% raw:348 FloppingFish: 30 # 5.26656% raw:6200 54.86726%
RollerHorizontalRight: 272 # f0.36745% raw:348 Freezor: 692 # 0.14441% raw:170 1.50442%
Pokey: 272 # f0.36745% raw:348 Geldman: 229 # 0.43746% raw:515 4.55752%
Chainchomp: 272 # f0.36745% raw:348 Gibdo: 300 # 0.15545% raw:183 1.61947%
Swamola: 128 # f0.78030% raw:739 Gibo: 247 # 0.40519% raw:477 4.22124%
Cucco: 316 # f0.31677% raw:300 GreenBushGuard: 291 # 0.34403% raw:405 3.58407%
BlueGuard: 239 # f0.41813% raw:396 GreenEyegoreMimic: 171 # 0.58527% raw:689 6.09735%
GreenGuard: 239 # f0.41813% raw:396 GreenGuard: 48 # 2.06330% raw:2429 21.49558%
RedSpearGuard: 239 # f0.41813% raw:396 GreenKnifeGuard: 589 # 0.16989% raw:200 1.76991%
UsainBolt: 239 # f0.41813% raw:396 GreenZirro: 158 # 0.63369% raw:746 6.60177%
Buzzblob: 115 # f0.86688% raw:821 HardhatBeetle: 113 # 0.88682% raw:1044 9.23894%
Hoarder: 115 # f0.86688% raw:821 Hinox: 123 # 0.81462% raw:959 8.48673%
RedBari: 98 # f1.01999% raw:966 Hoarder: 86 # 1.15609% raw:1361 12.04425%
BlueBari: 98 # f1.01999% raw:966 Hoarder2: 86 # 1.15609% raw:1361 12.04425%
Hoarder2: 115 # f0.86688% raw:821 Hover: 200 # 0.32449% raw:382 3.38053%
Toppo: 115 # f0.86688% raw:821 Keese: 236 # 0.42387% raw:499 4.41593%
SparkCW: 98 # f1.01999% raw:966 Kodongo: 346 # 0.28881% raw:340 3.00885%
SparkCCW: 98 # f1.01999% raw:966 Kyameron: 308 # 0.32449% raw:382 3.38053%
FloatingSkull: 98 # f1.01999% raw:966 Landmine: 19 # 5.26656% raw:6200 54.86726%
FirebarCW: 98 # f1.01999% raw:966 Leever: 164 # 0.60905% raw:717 6.34513%
FirebarCCW: 98 # f1.01999% raw:966 Lynel: 325 # 0.30750% raw:362 3.20354%
Firesnake: 98 # f1.01999% raw:966 MiniHelmasaur: 113 # 0.88682% raw:1044 9.23894%
Stalfos: 98 # f1.01999% raw:966 MiniMoldorm: 113 # 0.88682% raw:1044 9.23894%
FakeMasterSword: 115 # f0.86688% raw:821 Moblin: 303 # 0.33043% raw:389 3.44248%
Vulture: 184 # f0.54484% raw:516 Octoballoon: 163 # 0.61500% raw:724 6.40708%
Geldman: 184 # f0.54484% raw:516 Octorok: 119 # 0.84350% raw:993 8.78761%
Blob: 50 # f1.98401% raw:1879 Octorok4Way: 163 # 0.61500% raw:724 6.40708%
StalfosKnight: 50 # f1.98401% raw:1879 Pengator: 400 # 0.14441% raw:170 1.50442%
Zoro: 50 # f1.98401% raw:1879 Pikit: 158 # 0.63369% raw:746 6.60177%
Babasu: 50 # f1.98401% raw:1879 Poe: 202 # 0.49608% raw:584 5.16814%
Octorok: 112 # f0.89011% raw:843 Pokey: 226 # 0.44341% raw:522 4.61947%
Octorok4Way: 226 # f0.44242% raw:419 Popo: 184 # 0.54364% raw:640 5.66372%
Octoballoon: 226 # f0.44242% raw:419 Popo2: 184 # 0.54364% raw:640 5.66372%
FireballZora: 112 # f0.89011% raw:843 Raven: 65 # 1.53325% raw:1805 15.97345%
Crab: 226 # f0.44242% raw:419 RedBari: 47 # 2.11767% raw:2493 22.06195%
Thief: 90 # f1.11713% raw:1058 RedBushGuard: 121 # 0.82651% raw:973 8.61062%
Zora: 686 # f0.14571% raw:138 RedEyegoreMimic: 171 # 0.58527% raw:689 6.09735%
Deadrock: 127 # f0.78769% raw:746 RedJavelinGuard: 121 # 0.82651% raw:973 8.61062%
ArmosStatue: 127 # f0.78769% raw:746 RedSpearGuard: 39 # 2.56617% raw:3021 26.73451%
Tektite: 127 # f0.78769% raw:746 RedZazak: 247 # 0.40519% raw:477 4.22124%
Hover: 301 # f0.33260% raw:315 RollerHorizontalLeft: 226 # 0.44341% raw:522 4.61947%
Kyameron: 301 # f0.33260% raw:315 RollerHorizontalRight: 226 # 0.44341% raw:522 4.61947%
Pengator: 274 # f0.36534% raw:346 RollerVerticalDown: 226 # 0.44341% raw:522 4.61947%
Freezor: 274 # f0.36534% raw:346 RollerVerticalUp: 226 # 0.44341% raw:522 4.61947%
BlueArcher: 824 # f0.12143% raw:115 Ropa: 123 # 0.81462% raw:959 8.48673%
GreenBushGuard: 824 # f0.12143% raw:115 Sluggula: 443 # 0.22595% raw:266 2.35398%
Kodongo: 287 # f0.34844% raw:330 Snake: 236 # 0.42387% raw:499 4.41593%
Terrorpin: 287 # f0.34844% raw:330 Snapdragon: 526 # 0.19028% raw:224 1.98230%
Wizzrobe: 152 # f0.65676% raw:622 SparkCCW: 47 # 2.11767% raw:2493 22.06195%
Poe: 474 # f0.21118% raw:200 SparkCW: 47 # 2.11767% raw:2493 22.06195%
Snapdragon: 596 # f0.16789% raw:159 SpikeBlock: 103 # 0.97346% raw:1146 10.14159%
Moblin: 221 # f0.45298% raw:429 Stal: 19 # 5.26656% raw:6200 54.86726%
Lynel: 145 # f0.69161% raw:655 Stalfos: 47 # 2.11767% raw:2493 22.06195%
BlueZazak: 308 # f0.32416% raw:307 StalfosKnight: 118 # 0.84605% raw:996 8.81416%
RedZazak: 308 # f0.32416% raw:307 Statue: 60 # 0.97346% raw:1146 10.14159%
Gibo: 308 # f0.32416% raw:307 Swamola: 265 # 0.37715% raw:444 3.92920%
Gibdo: 290 # f0.34528% raw:327 Tektite: 144 # 0.69570% raw:819 7.24779%
Wallmaster: 290 # f0.34528% raw:327 Terrorpin: 346 # 0.28881% raw:340 3.00885%
GreenKnifeGuard: 853 # f0.11720% raw:111 Thief: 100 # 0.39244% raw:462 4.08850%
BluesainBolt: 803 # f0.12459% raw:118 Toppo: 86 # 1.15609% raw:1361 12.04425%
RedJavelinGuard: 803 # f0.12459% raw:118 UsainBolt: 39 # 2.56617% raw:3021 26.73451%
RedBushGuard: 803 # f0.12459% raw:118 Vulture: 229 # 0.43746% raw:515 4.55752%
BombGuard: 803 # f0.12459% raw:118 Wallmaster: 643 # 0.15545% raw:183 1.61947%
BallNChain: 803 # f0.12459% raw:118 Wizzrobe: 345 # 0.28966% raw:341 3.01770%
CannonTrooper: 803 # f0.12459% raw:118 Zora: 558 # 0.17923% raw:211 1.86726%
Sluggula: 302 # f0.33155% raw:314 Zoro: 100 # 0.84605% raw:996 8.81416%

View File

@@ -0,0 +1,168 @@
SheetChoices:
# Complex
- slots: [0, 1]
assignments:
0: 0x46
1: 0xd
weight: .5 # BluesainBolt(1/2) - 2 types
- slots: [0, 1]
assignments:
0: 0x46
1: 0x49
weight: 5.5 # CannonTrooper, BallNChain, RedBushGuard, RedJavelinGuard, BombGuard, BluesainBolt(1/2)
- slots: [0, 1]
assignments:
0: 0x48
1: 0x49
weight: 2 # GreenBushGuard, BlueArcher
- slots: [1, 2]
assignments:
1: 0x49
2: 0x13
weight: 1 # GreenKnifeGuard
- slots: [0, 2]
assignments:
0: 0x16
2: 0x17
weight: 1 # Snapdragon
- slots: [2, 3]
assignments:
2: 0xc
3: 0x44
weight: 1 # Zora (walking)
# Slot 0 (21 enemy types require slot 0)
- slots: [0]
assignments:
0: [0xe, 0x15]
weight: 1 # Thief
- slots: [0]
assignments:
0: 0x16
weight: 2 # Ropa, Hinox
- slots: [0]
assignments:
0: 0x1f
weight: 7 # Sparks, Firebars, FloatingSkull, RedBari, BlueBari, Firesnake, Stalfos
- slots: [0]
assignments:
0: 0x2f
weight: 2 # Debirandos, Leever
# Slot 1 (24 enemy types require slot 1)
- slots: [1]
assignments:
1: 0x1e
weight: 3 # MiniMoldorm, MiniHelmasaur, Hardhat
- slots: [1]
assignments:
1: 0x20
weight: 3 # StalfosKnight, Blob, Babasus
- slots: [1]
assignments:
1: 0x23
weight: 1 # Wallmaster
- slots: [1]
assignments:
1: 0x2c
weight: 2 # Beamos, Popos
- slots: [1]
assignments:
1: 0x49
weight: 2.5 # GreenGuard, RedSpearGuard, BlueGuard, UsainBolt (1/2)
- slots: [1]
assignments:
1: 0xd
weight: 1.5 # RedSpearGuard, BlueGuard, UsainBolt (1/2)
# Slot 2 (29 enemy types require slot 2)
- slots: [2]
assignments:
2: 0xc
weight: 3 # Crab, Octoballon, FireballZora(1/2), Octorocks(1/2) (4Way is 0xC only?)
- slots: [2]
assignments:
2: 0x12
weight: 2 # Vulture, Geldman
- slots: [2]
assignments:
2: 0x17
weight: 1 # Moblin
- slots: [2]
assignments:
2: 0x18
weight: 1 # FireballZora(1/2) (note: immersible only), Octoroks(1/2)
- slots: [2]
assignments:
2: [0x1c, 0x24]
weight: 3 # Keese, CricketRat, Snake
- slots: [2]
assignments:
2: 0x22
weight: 2 # Kyameron (note: immersible only), Hover
- slots: [2]
assignments:
2: 0x23
weight: 1 # Gibdo
- slots: [2]
assignments:
2: 0x25
weight: 1.5 # Sluggula, Wizzrobe (half)
- slots: [2]
assignments:
2: 0x26
weight: 1 # Pengator
- slots: [2]
assignments:
2: 0x27
weight: 3 # Rollers4, Chainchomp, Pokey
- slots: [2]
assignments:
2: 0x28
weight: 3 # Gibo, BlueZazak, RedZazak
- slots: [2]
assignments:
2: 0x29
weight: .5 # Wizzrobe (half)
- slots: [2]
assignments:
2: 0x2a
weight: 2 # Kodongo, Terrorpin
- slots: [2]
assignments:
2: 0x2e
weight: 4 # GreenEyeGoreMimic(x2!), RedEyeGoreMimic(x2!)
# Slot 3 (21 enemy types require slot 3)
- slots: [3]
assignments:
3: 0x10
weight: 3 # Deadrock, Tektite, ArmosStatue
- slots: [3]
assignments:
3: 0x11
weight: 4.5 # FakeMasterSword, Hoarder, Buzzblob, Toppo, Raven(1/2)
- slots: [3]
assignments:
3: 0x14
weight: 1 # Lynel
- slots: [3]
assignments:
3: 0x15
weight: 1.5 # Poe, Cucco(1/2)
- slots: [3]
assignments:
3: 0x19
weight: 1.5 # Swamola, Raven(1/2)
- slots: [3]
assignments:
3: 0x1b
weight: 3 # GreenZirro, BlueZirro, Pikit
- slots: [3]
assignments:
3: [0x50]
weight: .5 # Cucco(1/2)
- slots: [3]
assignments:
3: [0x52, 0x53]
weight: 5 # SpikeBlock, Bumper, BigSpike, AntiFairy, Statue (AntiFairyCircle?)

View File

@@ -1,354 +0,0 @@
- [0x0002, 0, ["RollerVerticalDown"]] #"Sewers - Rat Pots - Rat 1"
- [0x0002, 1, ["RollerVerticalDown"]] #"Sewers - Rat Pots - Rat 2"
- [0x0002, 2, ["RollerVerticalUp"]] #"Sewers - Rat Pots - Rat 3"
- [0x0002, 3, ["RollerVerticalUp"]] #"Sewers - Rat Pots - Rat 4"
- [0x0002, 15, ["RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft"]] #"Sewers - Rat Pots - Rat 6"
- [0x0002, 16, ["RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft"]] #"Sewers - Rat Pots - Rat 7"
- [0x000a, 0, ["RollerVerticalDown", "RollerVerticalUp"]] #"Palace of Darkness - Basement Ledge - Terrorpin 1"
- [0x000a, 1, ["RollerHorizontalRight", "RollerHorizontalLeft"]] #"Palace of Darkness - Basement Ledge - Terrorpin 2"
- [0x000b, 1, ["RollerVerticalDown", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Palace of Darkness - Callback - Terrorpin 1"
- [0x000e, 0, ["RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft"]] #"Ice Palace - Entrance - Freezor"
- [0x000e, 1, ["RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft"]] #"Ice Palace - Bari Key - Top Bari"
- [0x000e, 2, ["RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft"]] #"Ice Palace - Bari Key - Middle Bari"
- [0x0016, 0, ["RollerVerticalDown", "RollerVerticalUp", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Swamp Palace - Pool - Zol 1"
- [0x0016, 1, ["RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Swamp Palace - Pool - Zol 2"
- [0x0016, 2, ["SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Swamp Palace - Pool - Blue Bari"
- [0x0016, 3, ["RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Swamp Palace - Pool - Zol 3"
- [0x0017, 5, ["Beamos", "AntiFairyCircle", "SpikeBlock", "Bumper"]] #"Tower Of Hera - Bumper Room - Fire Bar (Clockwise)"
- [0x0019, 0, ["SparkCW", "SparkCCW", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Palace of Darkness - Dark Maze - Kodongo 1"
- [0x0019, 1, ["RollerVerticalUp"]] #"Palace of Darkness - Dark Maze - Kodongo 2"
- [0x0019, 2, ["RollerVerticalDown", "RollerVerticalUp"]] #"Palace of Darkness - Dark Maze - Kodongo 3"
- [0x0019, 3, ["RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft"]] #"Palace of Darkness - Dark Maze - Kodongo 4"
- [0x001a, 0, ["SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper"]] #"Palace of Darkness - Compass Room - Mini Helmasaur 1"
- [0x001a, 5, ["SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper"]] #"Palace of Darkness - Compass Room - Mini Helmasaur 2"
- [0x001b, 3, ["Beamos", "AntiFairyCircle", "Bumper"]] #"Palace of Darkness - Mimics 2 - Red Eyegore"
- [0x001b, 4, ["RollerVerticalUp"]] #"Palace of Darkness - Mimics 2 - Green Eyegore L"
- [0x001e, 3, ["RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "BigSpike", "Bumper"]] #"Ice Palace - Blob Ambush - Red Bari 3"
- [0x001e, 4, ["RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "BigSpike", "Bumper"]] #"Ice Palace - Blob Ambush - Red Bari 4"
- [0x001e, 5, ["SparkCW", "SparkCCW", "RollerVerticalDown", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ice Palace - Blob Ambush - Zol 1"
- [0x001e, 6, ["SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ice Palace - Blob Ambush - Zol 2"
- [0x001f, 0, ["RollerHorizontalRight"]] #"Ice Palace - Big Key View - Pengator 1"
- [0x0021, 3, ["RollerVerticalDown", "RollerVerticalUp"]] #"Sewers - Dark U - Rat 2"
- [0x0021, 4, ["RollerVerticalDown", "RollerVerticalUp"]] #"Sewers - Dark U - Rat 3"
- [0x0026, 1, ["SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Swamp Palace - Big Spoon - Red Bari 1"
- [0x0026, 8, ["AntiFairyCircle", "Bumper"]] #"Swamp Palace - Big Spoon - Red Bari 3"
- [0x0026, 9, ["RollerHorizontalRight"]] #"Swamp Palace - Big Spoon - Kyameron"
- [0x0027, 0, ["SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalLeft", "FirebarCW"]] #"Tower Of Hera - Petting Zoo - Mini Moldorm 1"
- [0x0027, 1, ["RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "AntiFairyCircle", "SpikeBlock", "Bumper"]] #"Tower Of Hera - Petting Zoo - Mini Moldorm 2"
- [0x0027, 2, ["RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "AntiFairyCircle", "SpikeBlock", "Bumper"]] #"Tower Of Hera - Petting Zoo - Mini Moldorm 3"
- [0x0027, 5, ["SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Tower Of Hera - Petting Zoo - Kodongo 1"
- [0x0028, 4, ["RollerVerticalUp"]] #"Swamp Palace - Entrance Ledge - Spike Trap"
- [0x002a, 2, ["SparkCW", "SparkCCW", "RollerHorizontalRight", "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "SpikeBlock"]] #"Palace of Darkness - Arena Main - Hardhat Beetle 1"
- [0x002a, 3, ["Statue", "SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper"]] #"Palace of Darkness - Arena Main - Hardhat Beetle 2"
- [0x002a, 6, ["RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Palace of Darkness - Arena Main - Hardhat Beetle 5"
- [0x002b, 5, ["RollerHorizontalRight"]] #"Palace of Darkness - Fairies - Red Bari 2"
- [0x002e, 0, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "BigSpike", "FirebarCW", "FirebarCCW"]] #"Ice Palace - Penguin Chest - Pengator 1"
- [0x002e, 1, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "BigSpike", "FirebarCW", "FirebarCCW"]] #"Ice Palace - Penguin Chest - Pengator 2"
- [0x002e, 2, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "BigSpike", "FirebarCW", "FirebarCCW"]] #"Ice Palace - Penguin Chest - Pengator 3"
- [0x002e, 3, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "BigSpike", "FirebarCW", "FirebarCCW"]] #"Ice Palace - Penguin Chest - Pengator 4"
- [0x002e, 4, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "BigSpike", "FirebarCW", "FirebarCCW"]] #"Ice Palace - Penguin Chest - Pengator 5"
- [0x002e, 5, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "BigSpike", "FirebarCW", "FirebarCCW"]] #"Ice Palace - Penguin Chest - Pengator 6"
- [0x0034, 0, ["SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Swamp Palace - West Wing - Hover 1"
- [0x0034, 1, ["SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Swamp Palace - West Wing - Hover 2"
- [0x0034, 2, ["SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Swamp Palace - West Wing - Kyameron"
- [0x0034, 4, ["Statue", "SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Swamp Palace - West Wing - Zol"
- [0x0035, 6, ["RollerHorizontalRight"]] #"Swamp Palace - West Lever - Stalfos 2"
- [0x0035, 9, ["RollerHorizontalRight", "Beamos", "AntiFairyCircle", "Bumper"]] #"Swamp Palace - West Lever - Blue Bari"
- [0x0036, 7, ["RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper"]] #"Swamp Palace - Lobby - Hover 3"
- [0x0037, 7, ["RollerHorizontalRight"]] #"Swamp Palace - Water 1 - Blue Bari"
- [0x0038, 4, ["RollerHorizontalRight"]] #"Swamp Palace - Long Hall - Kyameron 2"
- [0x0039, 3, ["RollerVerticalUp", "RollerHorizontalLeft"]] #"Skull Woods - Play Pen - Mini Helmasaur"
- [0x0039, 4, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "FirebarCW", "FirebarCCW"]] #"Skull Woods - Play Pen - Spike Trap 1"
- [0x0039, 5, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft"]] #"Skull Woods - Play Pen - Hardhat Beetle"
- [0x0039, 6, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "FirebarCW", "FirebarCCW"]] #"Skull Woods - Play Pen - Spike Trap 2"
- [0x003c, 1, ["SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Hookshot Cave - Blue Bari 1"
- [0x003c, 2, ["SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Hookshot Cave - Blue Bari 2"
- [0x003d, 9, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ganon's Tower - Torches 2 - Spark (Counterclockwise)"
- [0x003d, 10, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ganon's Tower - Torches 2 - Spark (Clockwise) 1"
- [0x003d, 12, ["AntiFairyCircle", "Bumper"]] #"Ganon's Tower - Torches 2 - Bunny Beam"
- [0x003d, 13, ["AntiFairyCircle", "Bumper"]] #"Ganon's Tower - Torches 2 - Antifairy"
#- [0x003e, 3, ["Kodongo"]] #"Ice Palace - Conveyor - Babasu 1"
#- [0x003e, 4, ["Kodongo"]] #"Ice Palace - Conveyor - Babasu 2"
#- [0x003e, 6, ["Kodongo"]] #"Ice Palace - Conveyor - Babasu 3"
#- [0x003e, 7, ["Kodongo"]] #"Ice Palace - Conveyor - Babasu 4"
- [0x003f, 1, ["RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper"]] #"Ice Palace - P Room - Stalfos Knight 1"
- [0x003f, 3, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ice Palace - P Room - Stalfos Knight 2"
- [0x0040, 0, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] # Agahnims Tower - Bridge - Blue Guard 1
- [0x0040, 1, ["Statue", "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] # Agahnims Tower - Bridge - Blue Guard 2
- [0x0041, 0, ["RollerHorizontalLeft"]] #"Sewers - Dark Cactus - Rat 1"
- [0x0041, 1, ["RollerVerticalDown", "RollerHorizontalRight"]] #"Sewers - Dark Cactus - Rat 2"
- [0x0041, 2, ["RollerVerticalUp"]] #"Sewers - Dark Cactus - Rat 3"
- [0x0042, 0, ["SparkCW", "SparkCCW", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Sewers - Dark Rope Corridor - Rope 1"
- [0x0042, 1, ["SparkCW", "SparkCCW", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Sewers - Dark Rope Corridor - Rope 2"
- [0x0042, 2, ["SparkCW", "SparkCCW", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Sewers - Dark Rope Corridor - Rope 3"
- [0x0042, 3, ["SparkCW", "SparkCCW", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Sewers - Dark Rope Corridor - Rope 4"
- [0x0042, 4, ["SparkCW", "SparkCCW", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Sewers - Dark Rope Corridor - Rope 5"
- [0x0042, 5, ["SparkCW", "SparkCCW", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Sewers - Dark Rope Corridor - Rope 6"
- [0x0044, 4, ["RollerVerticalUp", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Thieves' Town - Joke Room - Zol"
- [0x0044, 6, ["RollerVerticalUp", "RollerVerticalDown", "Beamos", "BigSpike"]] #"Thieves' Town - Joke Room - Red Bari"
- [0x0044, 8, ["Statue", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "SpikeBlock", "Bumper"]] #"Thieves' Town - Joke Room - Blue Bari 4"
- [0x0045, 1, ["RollerVerticalUp", "RollerVerticalDown"]] #"Thieves' Town - Basement Block Totems - Red Zazak"
- [0x0045, 7, ["AntiFairyCircle", "Bumper"]] #"Thieves' Town - Cells - Blue Zazak 4"
- [0x0045, 8, ["RollerHorizontalRight"]] #"Thieves' Town - Cells - Zol"
- [0x0046, 0, ["RollerVerticalUp", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Swamp Palace - Big O Top - Hover 1"
- [0x0046, 2, ["RollerVerticalDown", "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Swamp Palace - Big O Top - Hover 2"
- [0x0046, 4, ["RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Swamp Palace - Big O Top - Hover 3"
- [0x0049, 5, ["RollerVerticalUp", "RollerVerticalDown"]] #"Skull Woods - Bari Pits - Gibdo 2"
- [0x0049, 7, ["RollerVerticalUp", "RollerVerticalDown"]] #"Skull Woods - Bari Pits - Gibdo 4"
- [0x0049, 8, ["Beamos", "AntiFairyCircle", "Bumper"]] #"Skull Woods - Bari Pits - Gibdo 5"
- [0x004b, 0, ["Beamos", "AntiFairyCircle", "Bumper"]] #"Palace of Darkness - Mimics 1 - Red Eyegore"
- [0x004b, 1, ["RollerHorizontalRight"]] #"Palace of Darkness - Warp Hint - Antifairy 1"
- [0x004b, 5, ["RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Palace of Darkness - Jelly Hall - Blue Bari 1"
- [0x004b, 6, ["AntiFairyCircle", "BigSpike"]] #"Palace of Darkness - Jelly Hall - Blue Bari 2"
- [0x004b, 7, ["AntiFairyCircle", "BigSpike"]] #"Palace of Darkness - Jelly Hall - Blue Bari 3"
- [0x004e, 0, ["RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ice Palace - Blob Alley - Zol 1"
- [0x004e, 1, ["RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ice Palace - Blob Alley - Zol 2"
- [0x004e, 2, ["RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ice Palace - Blob Alley - Zol 3"
- [0x0050, 0, ["RollerVerticalUp", "RollerVerticalDown"]] #"Hyrule Castle - North West Passage - Green Guard"
- [0x0050, 1, ["RollerVerticalUp", "RollerVerticalDown"]] #"Hyrule Castle - North West Passage - Green Knife Guard 1"
- [0x0050, 2, ["RollerVerticalUp", "RollerVerticalDown"]] #"Hyrule Castle - North West Passage - Green Knife Guard 2"
- [0x0052, 0, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "Bumper"]] #"Hyrule Castle - North East Passage - Green Guard"
- [0x0052, 1, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "Bumper"]] #"Hyrule Castle - North East Passage - Green Knife Guard 1"
- [0x0052, 2, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "Bumper"]] #"Hyrule Castle - North East Passage - Green Knife Guard 2"
- [0x0053, 1, ["AntiFairyCircle", "Bumper"]] #"Desert Palace - Bridge - Beamos 1"
- [0x0053, 5, ["RollerVerticalDown"]] #"Desert Palace - Popo Genocide - Popo TL"
- [0x0053, 7, ["Beamos", "AntiFairyCircle", "Bumper"]] #"Desert Palace - Bridge - Popo 5"
- [0x0055, 1, ["RollerVerticalUp", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Secret Passage Exit - Green Knife Guard 1"
- [0x0057, 2, ["RollerVerticalUp", "AntiFairyCircle", "Bumper"]] #"Skull Woods - Big Key Room - Spike Trap"
- [0x0057, 7, ["RollerVerticalUp", "RollerVerticalDown"]] #"Skull Woods - Big Key Room - Gibdo 2"
- [0x0057, 12, ["RollerVerticalUp", "RollerVerticalDown"]] #"Skull Woods - Big Key Room - Gibdo 6"
- [0x0057, 13, ["RollerVerticalDown", "Beamos", "AntiFairyCircle", "Bumper"]] #"Skull Woods - Big Key Room - Blue Bari 1"
- [0x0057, 14, ["RollerVerticalDown", "Beamos", "AntiFairyCircle", "Bumper"]] #"Skull Woods - Big Key Room - Blue Bari 2"
- [0x0058, 7, ["RollerHorizontalLeft"]] #"Skull Woods - Lever Room - Hardhat Beetle 2"
- [0x0059, 0, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Skull Woods - Bridge Room - Mini Moldorm 1"
- [0x0059, 1, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Skull Woods - Bridge Room - Mini Moldorm 2"
- [0x0059, 9, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Skull Woods - Bridge Room - Gibdo 1"
- [0x005e, 3, ["RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "SpikeBlock", "Bumper"]] #"Ice Palace - Pit Trap - Big Spike Trap"
- [0x005e, 4, ["RollerVerticalUp", "RollerVerticalDown"]] #"Ice Palace - Pit Trap - Fire Bar (Clockwise)"
- [0x005f, 0, ["RollerVerticalDown", "RollerHorizontalLeft"]] #"Ice Palace - Bari University - Blue Bari 1"
- [0x005f, 1, ["RollerVerticalDown", "RollerHorizontalRight"]] #"Ice Palace - Bari University - Blue Bari 2"
- [0x0060, 0, ["RollerVerticalUp", "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Hyrule Castle - West - Blue Guard"
- [0x0062, 0, ["RollerVerticalUp", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Hyrule Castle - East - Blue Guard"
- [0x0064, 0, ["Kodongo"]] #"Thieves' Town - Attic Hall Left - Keese 1"
- [0x0064, 2, ["Kodongo"]] #"Thieves' Town - Attic Hall Left - Keese 2"
- [0x0064, 4, ["RollerHorizontalLeft", "RollerHorizontalRight"]] #"Thieves' Town - Attic Hall Left - Rat 1"
- [0x0065, 0, ["RollerVerticalUp", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Thieves' Town - Attic Window - Rat 1"
- [0x0065, 1, ["RollerHorizontalLeft", "RollerHorizontalRight"]] #"Thieves' Town - Attic Window - Rat 2"
- [0x0065, 2, ["Beamos", "AntiFairyCircle", "Bumper"]] #"Thieves' Town - Attic Window - Rat 3"
- [0x0066, 0, ["Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Swamp Palace - Waterfall Room - Hover 1"
- [0x0067, 1, ["RollerVerticalUp", "RollerVerticalDown"]] #"Skull Woods - Firebar Pits - Blue Bari 1"
- [0x0067, 3, ["RollerVerticalUp", "RollerVerticalDown"]] #"Skull Woods - Firebar Pits - Hardhat Beetle 1"
- [0x0067, 5, ["RollerVerticalDown"]] #"Skull Woods - Firebar Pits - Hardhat Beetle 3"
- [0x0067, 6, ["RollerVerticalDown"]] #"Skull Woods - Firebar Pits - Hardhat Beetle 4"
- [0x0067, 7, ["Beamos", "AntiFairyCircle", "Bumper"]] #"Skull Woods - Firebar Pits - Fire Bar (Clockwise)"
- [0x006a, 0, ["RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Palace of Darkness - Dark Alley - Terrorpin 1"
- [0x006a, 1, ["RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Palace of Darkness - Dark Alley - Terrorpin 2"
- [0x006a, 2, ["RollerVerticalUp", "RollerVerticalDown"]] #"Palace of Darkness - Dark Alley - Antifairy 1"
- [0x006a, 4, ["RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Palace of Darkness - Dark Alley - Terrorpin 3"
- [0x006a, 5, ["RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Palace of Darkness - Dark Alley - Terrorpin 4"
- [0x006b, 7, ["RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "Bumper"]] #"Ganon's Tower - Mimics 1 - Spike Trap 1"
- [0x0071, 0, ["RollerHorizontalLeft"]] #"Hyrule Castle - Basement Trap - Green Guard"
- [0x0074, 0, ["AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Desert Palace - North Hallway - Red Devalant 1"
- [0x0074, 1, ["AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Desert Palace - North Hallway - Red Devalant 2"
- [0x0074, 4, ["AntiFairyCircle", "Bumper"]] #"Desert Palace - North Hallway - Leever 1"
- [0x0074, 5, ["AntiFairyCircle", "Bumper"]] #"Desert Palace - North Hallway - Leever 2"
- [0x0075, 6, ["Kodongo"]] #"Desert Palace - Trap Room - Moving Cannon (Right)"
- [0x0075, 7, ["Kodongo"]] #"Desert Palace - Trap Room - Moving Cannon (Left)"
- [0x0076, 1, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Swamp Palace - Toilet Left - Hover 1"
- [0x0076, 2, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Swamp Palace - Toilet Left - Kyameron"
- [0x0076, 3, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Swamp Palace - Toilet Left - Hover 2"
- [0x0076, 4, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Swamp Palace - Toilet Left - Zol"
- [0x0076, 6, ["RollerVerticalDown", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Swamp Palace - Toilet Left - Blue Bari"
- [0x007b, 0, ["RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - DMs Room - Blue Bari 1"
- [0x007b, 1, ["AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - DMs Room - Blue Bari 2"
- [0x007b, 6, ["Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ganon's Tower - DMs Room - Statue"
- [0x007b, 7, ["Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ganon's Tower - DMs Room - Hardhat Beetle"
- [0x007c, 1, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ganon's Tower - Randomizer Room - Fire Bar (Counterclockwise)"
- [0x007c, 2, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Randomizer Room - Spike Trap"
- [0x007c, 3, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Randomizer Room - Fire Bar (Clockwise)"
- [0x007c, 4, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ganon's Tower - Randomizer Room - Hardhat Beetle"
- [0x007d, 0, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - The Zoo - Fire Snake 1"
- [0x007d, 1, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - The Zoo - Fire Snake 2"
- [0x007d, 2, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - The Zoo - Fire Snake 3"
- [0x007d, 3, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - The Zoo - Fire Snake 4"
- [0x007d, 7, ["RollerVerticalUp", "RollerHorizontalLeft"]] #"Ganon's Tower - The Zoo - Mini Helmasaur"
- [0x007d, 8, ["RollerVerticalUp", "RollerHorizontalLeft", "RollerHorizontalRight"]] #"Ganon's Tower - The Zoo - Red Bari"
- [0x007f, 0, ["Statue", "SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock"]] #"Ice Palace - Big Spikes - Red Bari 1"
- [0x007f, 1, ["Statue", "SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock"]] #"Ice Palace - Big Spikes - Red Bari 2"
- [0x007f, 2, ["Statue", "SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock"]] #"Ice Palace - Big Spikes - Red Bari 3"
- [0x007f, 3, ["Statue", "SparkCW", "SparkCCW", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock"]] #"Ice Palace - Big Spikes - Red Bari 4"
- [0x007f, 4, ["RollerVerticalDown"]] #"Ice Palace - Big Spikes - Big Spike Trap 1"
- [0x007f, 5, ["RollerVerticalDown"]] #"Ice Palace - Big Spikes - Big Spike Trap 2"
- [0x0082, 0, ["RollerVerticalDown"]] #"Hyrule Castle - Basement Playpit - Blue Guard 1"
- [0x0082, 2, ["RollerVerticalUp"]] #"Hyrule Castle - Basement Playpit - Blue Guard 3"
- [0x0083, 0, ["RollerVerticalUp", "RollerVerticalDown"]] #"Desert Palace - Left Hallway - Blue Devalant 1"
- [0x0084, 0, ["RollerVerticalDown", "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Desert Palace - Main Room - Left - Leever 1"
- [0x0084, 1, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Desert Palace - Main Room - Left - Leever 2"
- [0x0085, 2, ["RollerHorizontalRight"]] #"Desert Palace - Compass Room - Popo TL"
- [0x0085, 7, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Desert Palace - Right Hallway - Leever 2"
- [0x008b, 4, ["Statue", "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "Bumper"]] #"Ganon's Tower - Map Room - Spike Trap"
- [0x008b, 6, ["Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Map Room - Fire Bar (Clockwise)"
- [0x008b, 7, ["Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Map Room - Fire Bar (Counterclockwise)"
- [0x008d, 1, ["AntiFairyCircle", "Bumper"]] #"Ganon's Tower - Tile Room - Yomo Medusa T"
- [0x008d, 7, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Tile Room - Spike Trap"
- [0x008d, 8, ["RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ganon's Tower - Tile Room - Stalfos"
- [0x008d, 9, ["Statue", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ganon's Tower - Tile Room - Fire Bar (Clockwise)"
- [0x008d, 10, ["RollerVerticalUp", "RollerVerticalDown"]] #"Ganon's Tower - Tile Room - Blue Bari 1"
- [0x008d, 12, ["RollerVerticalUp", "RollerVerticalDown"]] #"Ganon's Tower - Tile Room - Blue Bari 2"
- [0x0092, 8, ["RollerVerticalUp", "Beamos", "AntiFairyCircle", "Bumper"]] #"Misery Mire - Dark Weave - Spike Trap"
- [0x0092, 9, ["RollerHorizontalRight"]] #"Misery Mire - Dark Weave - Antifairy 3"
- [0x0092, 10, ["RollerHorizontalLeft"]] #"Misery Mire - Dark Weave - Stalfos"
- [0x0095, 0, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock"]] #"Ganon's Tower - Conveyer Falling Bridge - Red Spear Guard 1"
- [0x0095, 1, ["Statue", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ganon's Tower - Conveyer Falling Bridge - Red Spear Guard 2"
- [0x0095, 2, ["Statue", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ganon's Tower - Conveyer Falling Bridge - Red Spear Guard 3"
- [0x0095, 3, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "SpikeBlock"]] #"Ganon's Tower - Conveyer Falling Bridge - Red Spear Guard 4"
- [0x0096, 0, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ganon's Tower - Torches 1 - Fire Bar (Clockwise)"
- [0x0096, 1, ["Kodongo"]] #"Ganon's Tower - Torches 1 - Laser Eye (Left) 1"
- [0x0096, 2, ["Kodongo"]] #"Ganon's Tower - Torches 1 - Laser Eye (Left) 2"
- [0x0096, 3, ["Kodongo"]] #"Ganon's Tower - Torches 1 - Laser Eye (Left) 3"
- [0x0096, 4, ["Kodongo"]] #"Ganon's Tower - Torches 1 - Laser Eye (Left) 4"
- [0x0098, 0, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Misery Mire - Entrance - Zol 1"
- [0x0098, 1, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Misery Mire - Entrance - Zol 2"
- [0x0098, 2, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Misery Mire - Entrance - Zol 3"
- [0x0098, 3, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Misery Mire - Entrance - Zol 4"
- [0x0098, 4, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Misery Mire - Entrance - Zol 5"
- [0x009b, 3, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Spike Switch - Spike Trap 1"
- [0x009b, 4, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Spike Switch - Spike Trap 2"
- [0x009b, 6, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Spike Switch - Yomo Medusa"
- [0x009b, 7, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Spike Switch - Spike Trap 4"
- [0x009b, 8, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Spike Switch - Spike Trap 5"
- [0x009b, 9, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Spike Switch - Spike Trap 6"
- [0x009b, 10, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Spike Switch - Spike Trap 7"
- [0x009c, 1, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ganon's Tower - Invisible Floor Maze - Mini Helmasaur"
- [0x009c, 2, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ganon's Tower - Invisible Floor Maze - Hardhat Beetle 2"
- [0x009c, 3, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ganon's Tower - Invisible Floor Maze - Hardhat Beetle 3"
- [0x009c, 4, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Invisible Floor Maze - Hardhat Beetle 4"
- [0x009c, 5, ["RollerVerticalUp", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Invisible Floor Maze - Hardhat Beetle 5"
- [0x009d, 3, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ganon's Tower - Compass Room - Gibdo 2"
- [0x009d, 6, ["RollerHorizontalLeft", "RollerHorizontalRight"]] #"Ganon's Tower - Compass Room - Blue Bari 1"
- [0x009d, 7, ["RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Compass Room - Blue Bari 2"
- [0x009d, 8, ["RollerHorizontalLeft", "RollerHorizontalRight"]] #"Ganon's Tower - Compass Room - Blue Bari 3"
- [0x009e, 0, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ice Palace - Fairy Drop - blue - Red Bari 1"
- [0x009e, 1, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ice Palace - Fairy Drop - blue - Red Bari 2"
- [0x009e, 2, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ice Palace - Fairy Drop - blue - Stalfos Knight"
- [0x009e, 3, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ice Palace - Fairy Drop - blue - Red Bari 3"
- [0x009f, 0, ["Kodongo"]] #"Ice Palace - Pottery Barn - Babasu 1"
- [0x009f, 1, ["Kodongo"]] #"Ice Palace - Pottery Barn - Babasu 2"
- [0x009f, 2, ["Kodongo"]] #"Ice Palace - Pottery Barn - Babasu 3"
- [0x009f, 3, ["Kodongo"]] #"Ice Palace - Pottery Barn - Babasu 4"
- [0x00a0, 1, ["RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Misery Mire - Boss Antichamber - Antifairy"
- [0x00a1, 2, ["Statue", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Misery Mire - Fish Room - Spark (Clockwise) 2"
- [0x00a5, 8, ["Kodongo"]] #"Ganon's Tower - Laser Bridge - Laser Eye (Down) L"
- [0x00a5, 9, ["Kodongo"]] #"Ganon's Tower - Laser Bridge - Laser Eye (Down) R"
- [0x00a5, 10, ["RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ganon's Tower - Laser Bridge - Red Spear Guard"
- [0x00a8, 1, ["RollerVerticalUp", "RollerHorizontalLeft"]] #"Eastern Palace - West Wing - Top - Stalfos 2"
- [0x00a8, 3, ["RollerVerticalDown", "RollerHorizontalLeft"]] #"Eastern Palace - West Wing - Top - Stalfos 4"
- [0x00aa, 4, ["AntiFairyCircle", "BigSpike", "Bumper"]] #"Eastern Palace - East Wing - Top - Stalfos 3"
- [0x00aa, 5, ["Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Eastern Palace - East Wing - Top - Popo B 2"
- [0x00ab, 7, ["RollerVerticalUp", "RollerHorizontalLeft"]] #"Thieves' Town - Spike Dodge - Spike Trap 6"
- [0x00ae, 0, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ice Palace - Ice T - Blue Bari 1"
- [0x00ae, 1, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Ice Palace - Ice T - Blue Bari 2"
- [0x00af, 0, ["RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Ice Palace - Ice Clock - Fire Bar (Clockwise)"
- [0x00b1, 2, ["RollerVerticalUp", "RollerVerticalDown"]] #"Misery Mire - Hourglass - Spike Trap 1"
- [0x00b1, 3, ["RollerVerticalUp", "RollerVerticalDown"]] #"Misery Mire - Hourglass - Spike Trap 2"
- [0x00b2, 6, ["RollerVerticalUp", "RollerHorizontalLeft"]] #"Misery Mire - Sluggula Cross - Sluggula TR"
- [0x00b2, 8, ["RollerVerticalDown"]] #"Misery Mire - Popo Push - Medusa 1"
- [0x00b2, 9, ["RollerVerticalUp"]] #"Misery Mire - Sluggula Cross - Sluggula BL"
- [0x00b3, 0, ["RollerVerticalUp", "RollerHorizontalRight", "BigSpike", "SpikeBlock"]] #"Misery Mire - Spike Room - Stalfos 1"
- [0x00b3, 2, ["Statue", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "Bumper"]] #"Misery Mire - Spike Room - Beamos"
- [0x00b3, 3, ["AntiFairyCircle", "Bumper"]] #"Misery Mire - Spike Room - Yomo Medusa"
- [0x00b6, 7, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Turtle Rock - Tile Room - Zol 1"
- [0x00b6, 8, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Turtle Rock - Tile Room - Zol 2"
- [0x00ba, 1, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Eastern Palace - Dark Stalfos - Antifairy 1"
- [0x00ba, 3, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Eastern Palace - Dark Stalfos - Antifairy 2"
- [0x00ba, 4, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Eastern Palace - Dark Stalfos - Popo B 1"
- [0x00ba, 6, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Eastern Palace - Dark Stalfos - Popo B 2"
- [0x00bb, 1, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight"]] #"Thieves' Town - Spikeveyer - Gibo 1"
- [0x00bb, 4, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "Bumper"]] #"Thieves' Town - Spikeveyer - Antifairy 1"
- [0x00bb, 5, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Thieves' Town - Spikeveyer - Gibo 3"
- [0x00bb, 6, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight"]] #"Thieves' Town - Spikeveyer - Fire Snake"
- [0x00bb, 7, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "SpikeBlock", "Bumper"]] #"Thieves' Town - Spikeveyer - Gibo 4"
- [0x00bb, 8, ["RollerHorizontalLeft", "RollerHorizontalRight"]] #"Thieves' Town - Spikeveyer - Gibo 5"
- [0x00bb, 9, ["RollerHorizontalLeft", "RollerHorizontalRight"]] #"Thieves' Town - Spikeveyer - Antifairy 2"
- [0x00bc, 6, ["AntiFairyCircle", "SpikeBlock", "Bumper"]] #"Thieves' Town - Toilet - Stalfos 2"
- [0x00bc, 7, ["AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Thieves' Town - Toilet - Stalfos 3"
- [0x00bc, 8, ["RollerVerticalUp", "RollerVerticalDown"]] #"Thieves' Town - Toilet - Stalfos 4"
- [0x00c1, 3, ["RollerVerticalUp", "RollerHorizontalLeft"]] #"Misery Mire - 4 Rails - Stalfos 1"
- [0x00c2, 0, ["RollerHorizontalLeft", "RollerHorizontalRight"]] #"Misery Mire - Main Lobby - blue - Fire Snake 1"
- [0x00c3, 1, ["Kodongo"]] #"Misery Mire - Falling Bridge - Laser Eye (Left) 1"
- [0x00c3, 2, ["Kodongo"]] #"Misery Mire - Falling Bridge - Laser Eye (Right) 1"
- [0x00c3, 3, ["Kodongo"]] #"Misery Mire - Falling Bridge - Laser Eye (Left) 2"
- [0x00c3, 4, ["Kodongo"]] #"Misery Mire - Falling Bridge - Laser Eye (Right) 2"
- [0x00c5, 0, ["Kodongo"]] #"Turtle Rock - Catwalk - Laser Eye (Left) 1"
- [0x00c5, 1, ["Kodongo"]] #"Turtle Rock - Catwalk - Laser Eye (Right) 1"
- [0x00c5, 2, ["Kodongo"]] #"Turtle Rock - Catwalk - Laser Eye (Left) 2"
- [0x00c5, 3, ["Kodongo"]] #"Turtle Rock - Catwalk - Laser Eye (Right) 2"
- [0x00c5, 4, ["Kodongo"]] #"Turtle Rock - Catwalk - Laser Eye (Left) 3"
- [0x00c5, 5, ["Kodongo"]] #"Turtle Rock - Catwalk - Laser Eye (Right) 3"
- [0x00c5, 6, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Turtle Rock - Catwalk - Mini Helmasaur"
- [0x00c5, 7, ["Statue"]] #"Turtle Rock - Catwalk - Laser Eye (Left) 4"
- [0x00cb, 3, ["RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Thieves' Town - Grand Room NW - Zol 1"
- [0x00cb, 5, ["RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Thieves' Town - Grand Room NW - Zol 2"
- [0x00ce, 0, ["RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "AntiFairyCircle", "Antifairy", "BigSpike", "FirebarCCW", "Bumper"]] #"Ice Palace - Over Boss - top - Red Bari 1"
- [0x00ce, 1, ["RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "AntiFairyCircle", "Antifairy", "BigSpike", "FirebarCW", "Bumper"]] #"Ice Palace - Over Boss - top - Red Bari 2"
- [0x00ce, 3, ["SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "Antifairy", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper"]] #"Ice Palace - Over Boss - top - Statue"
- [0x00d0, 6, ["Statue", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] # Agahnims Tower - Dark Maze - Blue Guard 2
- [0x00d2, 8, ["RollerVerticalDown", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Misery Mire - Mire 2 - Popo BL"
- [0x00d5, 0, ["Kodongo"]] #"Turtle Rock - Eye Bridge - Laser Eye (Left) 1"
- [0x00d5, 1, ["Kodongo"]] #"Turtle Rock - Eye Bridge - Laser Eye (Right) 1"
- [0x00d5, 2, ["Kodongo"]] #"Turtle Rock - Eye Bridge - Laser Eye (Left) 2"
- [0x00d5, 3, ["Kodongo"]] #"Turtle Rock - Eye Bridge - Laser Eye (Right) 2"
- [0x00d5, 4, ["Statue", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper"]] #"Turtle Rock - Eye Bridge - Hardhat Beetle"
- [0x00d8, 0, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Eastern Palace - Kill Room 2 - Red Eyegore L"
- [0x00d8, 1, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Eastern Palace - Kill Room 2 - Red Eyegore R"
- [0x00d8, 2, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Eastern Palace - Kill Room 2 - Popo B TL"
- [0x00d8, 3, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Eastern Palace - Kill Room 2 - Popo B TR"
- [0x00d8, 4, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Eastern Palace - Kill Room 2 - Popo B LT"
- [0x00d8, 5, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Eastern Palace - Kill Room 2 - Popo B RT"
- [0x00d8, 6, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Eastern Palace - Kill Room 2 - Popo LB"
- [0x00d8, 7, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Eastern Palace - Kill Room 2 - Popo RB"
- [0x00d8, 8, ["Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Eastern Palace - Kill Room 1 - Red Eyegore"
- [0x00d9, 1, ["RollerHorizontalRight"]] #"Eastern Palace - Dodgeball - Green Eyegore 1"
- [0x00dc, 9, ["RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Thieves' Town - Grand Room SE - Fire Snake 2"
- [0x00df, 0, ["RollerVerticalDown", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Paradox Cave - Top - Mini Moldorm 1"
- [0x00df, 1, ["RollerVerticalDown", "RollerHorizontalRight", "AntiFairyCircle"]] #"Paradox Cave - Top - Mini Moldorm 2"
- [0x00e4, 0, ["RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Old Man Home - Keese 1"
- [0x00e4, 1, ["RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Old Man Home - Keese 2"
- [0x00e4, 2, ["RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Old Man Home - Keese 3"
#- [0x00e5, 3, ["Kodongo"]] #"Old Man Home Circle - Keese 4"
- [0x00e5, 4, ["RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Kodongo", "Bumper"]] #"Old Man Home Circle - Keese 5"
- [0x00e5, 5, ["RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Kodongo", "Bumper"]] #"Old Man Home Circle - Keese 6"
- [0x00e7, 0, [ "RollerVerticalUp", "Kodongo", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Death Mountain Descent Cave Right - Keese 1"
- [0x00e7, 1, [ "RollerVerticalUp", "Kodongo", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Death Mountain Descent Cave Right - Keese 2"
- [0x00e7, 2, [ "Kodongo", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalRight" ] ] #"Death Mountain Descent Cave Right - Keese 3"
- [0x00e7, 3, [ "RollerVerticalDown", "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Death Mountain Descent Cave Right - Keese 4"
- [0x00e7, 4, [ "RollerVerticalDown", "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Death Mountain Descent Cave Right - Keese 5"
- [0x00e7, 5, [ "Kodongo", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalRight" ] ] #"Death Mountain Descent Cave Right - Keese 6"
- [0x00e7, 6, [ "Kodongo", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalRight" ] ] #"Death Mountain Descent Cave Right - Keese 7"
- [0x00e8, 0, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "SpikeBlock", "Bumper"]] #"Super Bunny Exit - Hardhat Beetle 1"
- [0x00e8, 1, ["RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Super Bunny Exit - Hardhat Beetle 2"
- [0x00ee, 0, ["RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper"]] #"Sprial Cave Top - Mini Moldorm 1"
- [0x00ee, 1, ["RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Sprial Cave Top - Mini Moldorm 2"
- [0x00ee, 2, ["RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Sprial Cave Top - Mini Moldorm 3"
- [0x00ee, 3, ["RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Sprial Cave Top - Blue Bari 1"
- [0x00ee, 4, ["RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] #"Sprial Cave Top - Blue Bari 2"
- [0x00ef, 1, ["RollerVerticalUp", "RollerVerticalDown"]] #"Paradox Cave - Middle - Mini Moldorm 2"
#- [0x00f0, 0, ["Kodongo"]] #"Old Man Cave Ledge - Keese 1"
#- [0x00f0, 1, ["Kodongo"]] #"Old Man Cave Ledge - Keese 2"
#- [0x00f0, 2, ["Kodongo"]] #"Old Man Cave Ledge - Keese 3"
#- [0x00f0, 3, ["Kodongo"]] #"Old Man Cave Ledge - Keese 4"
#- [0x00f0, 4, ["Kodongo"]] #"Old Man Cave Ledge - Keese 5"
#- [0x00f0, 5, ["Kodongo"]] #"Old Man Cave Ledge - Keese 6"
#- [0x00f0, 6, ["Kodongo"]] #"Old Man Cave Ledge - Keese 7"
#- [0x00f0, 7, ["Kodongo"]] #"Old Man Cave Ledge - Keese 8"
#- [0x00f0, 9, ["Kodongo"]] #"Old Man Cave Ledge - Keese 9"
- [0x00f1, 0, ["Kodongo", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight"]] #"Old Man Maze - Keese 1"
- [0x00f1, 1, ["Kodongo", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight"]] #"Old Man Maze - Keese 2"
- [0x00f1, 2, ["Kodongo", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight"]] #"Old Man Maze - Keese 3"
- [0x00f1, 3, ["Kodongo", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight"]] #"Old Man Maze - Keese 4"
- [0x00f1, 4, ["Kodongo", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight"]] #"Old Man Maze - Keese 5"
- [0x00f1, 5, ["Kodongo", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight"]] #"Old Man Maze - Keese 6"
#- [0x00f1, 6, ["Kodongo"]] #"Old Man Maze - Keese 7"
#- [0x00f1, 7, ["Kodongo"]] #"Old Man Maze - Keese 8"
#- [0x00f1, 8, ["Kodongo"]] #"Old Man Maze - Keese 9"
#- [0x00f1, 9, ["Kodongo"]] #"Old Man Maze - Keese 10"

View File

@@ -1866,7 +1866,9 @@ mandatory_connections = [('Links House S&Q', 'Links House'),
('Lumberjack Tree (top to bottom)', 'Lumberjack Tree (bottom)'), ('Lumberjack Tree (top to bottom)', 'Lumberjack Tree (bottom)'),
('Death Mountain Return Cave E', 'Death Mountain Return Cave (right)'), ('Death Mountain Return Cave E', 'Death Mountain Return Cave (right)'),
('Death Mountain Return Cave W', 'Death Mountain Return Cave (left)'), ('Death Mountain Return Cave W', 'Death Mountain Return Cave (left)'),
('Old Man Cave Dropdown', 'Old Man Cave'), ('Old Man Cave Dropdown', 'Old Man Cave (East)'),
('Old Man Cave W', 'Old Man Cave (West)'),
('Old Man Cave E', 'Old Man Cave (East)'),
('Spectacle Rock Cave Drop', 'Spectacle Rock Cave (Bottom)'), ('Spectacle Rock Cave Drop', 'Spectacle Rock Cave (Bottom)'),
('Spectacle Rock Cave Peak Drop', 'Spectacle Rock Cave (Bottom)'), ('Spectacle Rock Cave Peak Drop', 'Spectacle Rock Cave (Bottom)'),
('Old Man House Front to Back', 'Old Man House Back'), ('Old Man House Front to Back', 'Old Man House Back'),
@@ -2229,7 +2231,7 @@ open_default_connections = {'Links House': 'Links House',
'Links House Exit': 'Light World', 'Links House Exit': 'Light World',
'Big Bomb Shop': 'Big Bomb Shop', 'Big Bomb Shop': 'Big Bomb Shop',
'Old Man Cave (West)': 'Old Man Cave Ledge', 'Old Man Cave (West)': 'Old Man Cave Ledge',
'Old Man Cave (East)': 'Old Man Cave', 'Old Man Cave (East)': 'Old Man Cave (East)',
'Old Man Cave Exit (West)': 'Light World', 'Old Man Cave Exit (West)': 'Light World',
'Old Man Cave Exit (East)': 'West Death Mountain (Bottom)', 'Old Man Cave Exit (East)': 'West Death Mountain (Bottom)',
'Death Mountain Return Cave (West)': 'Death Mountain Return Cave (left)', 'Death Mountain Return Cave (West)': 'Death Mountain Return Cave (left)',
@@ -2258,7 +2260,7 @@ inverted_default_connections = {'Links House': 'Big Bomb Shop',
'Bumper Cave (Top)': 'Dark Death Mountain Healer Fairy', 'Bumper Cave (Top)': 'Dark Death Mountain Healer Fairy',
'Bumper Cave Exit (Top)': 'Death Mountain Return Ledge', 'Bumper Cave Exit (Top)': 'Death Mountain Return Ledge',
'Bumper Cave Exit (Bottom)': 'Light World', 'Bumper Cave Exit (Bottom)': 'Light World',
'Dark Death Mountain Fairy': 'Old Man Cave', 'Dark Death Mountain Fairy': 'Old Man Cave (East)',
'Inverted Pyramid Hole': 'Pyramid', 'Inverted Pyramid Hole': 'Pyramid',
'Inverted Pyramid Entrance': 'Bottom of Pyramid', 'Inverted Pyramid Entrance': 'Bottom of Pyramid',
'Pyramid Exit': 'Hyrule Castle Courtyard' 'Pyramid Exit': 'Hyrule Castle Courtyard'
@@ -2336,7 +2338,7 @@ indirect_connections = {
'West Dark World': 'Pyramid Fairy', 'West Dark World': 'Pyramid Fairy',
'South Dark World': 'Pyramid Fairy', 'South Dark World': 'Pyramid Fairy',
'Light World': 'Pyramid Fairy', 'Light World': 'Pyramid Fairy',
'Old Man Cave': 'Old Man S&Q' 'Old Man Cave (East)': 'Old Man S&Q'
} }
# format: # format:
# Key=Name # Key=Name

View File

@@ -1,13 +1,13 @@
from collections import defaultdict from collections import defaultdict
from Utils import snes_to_pc, int24_as_bytes, int16_as_bytes, load_yaml from Utils import snes_to_pc, int24_as_bytes, int16_as_bytes, load_cached_yaml
from source.dungeon.EnemyList import EnemyTable, init_vanilla_sprites, vanilla_sprites, init_enemy_stats, EnemySprite from source.dungeon.EnemyList import EnemyTable, init_vanilla_sprites, vanilla_sprites, init_enemy_stats, EnemySprite
from source.dungeon.EnemyList import sprite_translation from source.dungeon.EnemyList import sprite_translation
from source.dungeon.RoomHeader import init_room_headers from source.dungeon.RoomHeader import init_room_headers
from source.dungeon.RoomList import Room0127 from source.dungeon.RoomList import Room0127
from source.enemizer.OwEnemyList import init_vanilla_sprites_ow, vanilla_sprites_ow from source.enemizer.OwEnemyList import init_vanilla_sprites_ow, vanilla_sprites_ow
from source.enemizer.SpriteSheets import init_sprite_sheets, init_sprite_requirements from source.enemizer.SpriteSheets import init_sprite_sheets, init_sprite_requirements, SheetChoice
def convert_area_id_to_offset(area_id): def convert_area_id_to_offset(area_id):
@@ -39,12 +39,24 @@ class DataTables:
# enemizer conditions # enemizer conditions
self.uw_enemy_denials = {} self.uw_enemy_denials = {}
for denial in load_yaml(['source', 'enemizer', 'uw_enemy_deny.yaml']): self.ow_enemy_denials = {}
self.uw_enemy_drop_denials = {}
self.sheet_choices = []
denial_data = load_cached_yaml(['source', 'enemizer', 'enemy_deny.yaml'])
for denial in denial_data['UwGeneralDeny']:
self.uw_enemy_denials[denial[0], denial[1]] = {sprite_translation[x] for x in denial[2]} self.uw_enemy_denials[denial[0], denial[1]] = {sprite_translation[x] for x in denial[2]}
# todo: ow_denials for denial in denial_data['OwGeneralDeny']:
weights = load_yaml(['source', 'enemizer', 'enemy_weight.yaml']) self.ow_enemy_denials[denial[0], denial[1]] = {sprite_translation[x] for x in denial[2]}
for denial in denial_data['UwEnemyDrop']:
self.uw_enemy_drop_denials[denial[0], denial[1]] = {sprite_translation[x] for x in denial[2]}
weights = load_cached_yaml(['source', 'enemizer', 'enemy_weight.yaml'])
self.uw_weights = {sprite_translation[k]: v for k, v in weights['UW'].items()} self.uw_weights = {sprite_translation[k]: v for k, v in weights['UW'].items()}
self.ow_weights = {sprite_translation[k]: v for k, v in weights['OW'].items()} self.ow_weights = {sprite_translation[k]: v for k, v in weights['OW'].items()}
sheet_weights = load_cached_yaml(['source', 'enemizer', 'sheet_weight.yaml'])
for item in sheet_weights['SheetChoices']:
choice = SheetChoice(tuple(item['slots']), item['assignments'], item['weight'])
self.sheet_choices.append(choice)
def write_to_rom(self, rom, colorize_pots=False, increase_bush_sprite_chance=False): def write_to_rom(self, rom, colorize_pots=False, increase_bush_sprite_chance=False):
if self.pot_secret_table.size() > 0x11c0: if self.pot_secret_table.size() > 0x11c0: