diff --git a/BaseClasses.py b/BaseClasses.py index f07e76e5..78630427 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -2191,7 +2191,8 @@ class Boss(object): return self.defeat_rule(state, self.player) 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.parent_region = parent if forced_item is not None: @@ -2222,6 +2223,7 @@ class Location(object): self.type = LocationType.Normal if not crystal else LocationType.Prize self.pot = None self.drop = None + self.note = note def can_fill(self, state, item, check_access=True): if not self.valid_multiworld(state, item): @@ -2252,6 +2254,8 @@ class Location(object): name += f' @ {self.parent_region.dungeon.name}' if world and world.players > 1: name += f' ({world.get_player_names(self.player)})' + if self.note: + name += f' ({self.note})' return name def __str__(self): diff --git a/EntranceShuffle.py b/EntranceShuffle.py index 2e5162e4..d8d0367e 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -2071,7 +2071,9 @@ mandatory_connections = [('Links House S&Q', 'Links House'), ('Lumberjack Tree (top to bottom)', 'Lumberjack Tree (bottom)'), ('Death Mountain Return Cave E', 'Death Mountain Return Cave (right)'), ('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 Peak Drop', 'Spectacle Rock Cave (Bottom)'), ('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'), ('Big Bomb Shop', 'Big Bomb Shop'), ('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 (East)', 'West Death Mountain (Bottom)'), ('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 Exit (Top)', 'Death Mountain Return Ledge'), ('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 Entrance', 'Bottom of Pyramid'), ('Pyramid Exit', 'Hyrule Castle Courtyard') @@ -2541,7 +2543,7 @@ indirect_connections = { 'West Dark World': 'Pyramid Fairy', 'South Dark World': 'Pyramid Fairy', 'Light World': 'Pyramid Fairy', - 'Old Man Cave': 'Old Man S&Q' + 'Old Man Cave (East)': 'Old Man S&Q' } # format: # Key=Name diff --git a/PotShuffle.py b/PotShuffle.py index ea98ffff..e76dcc76 100644 --- a/PotShuffle.py +++ b/PotShuffle.py @@ -750,7 +750,7 @@ vanilla_pots = { 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(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])), 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]))], diff --git a/Regions.py b/Regions.py index 5c077b6a..d804d7a8 100644 --- a/Regions.py +++ b/Regions.py @@ -3,7 +3,7 @@ from Items import ItemFactory from BaseClasses import Region, Location, Entrance, RegionType, Shop, ShopType, LocationType, PotItem, PotFlags 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): @@ -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 (bottom)', 'a drop\'s exit', None, ['Lumberjack Tree Exit']), 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 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']), @@ -1032,7 +1033,10 @@ def adjust_locations(world, player): loc.type = LocationType.Drop snes_address, room, sprite_idx = datum[1] 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: loc.type = LocationType.Pot 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: key_item = loc.item key_item.location = None - loc.forced_item = None loc.item = None loc.event = False diff --git a/Rom.py b/Rom.py index aa780c5f..f3fdfa59 100644 --- a/Rom.py +++ b/Rom.py @@ -34,12 +34,13 @@ from InitialSram import InitialSram from source.classes.SFX import randomize_sfx from source.item.FillUtil import valid_pot_items from source.dungeon.EnemyList import EnemySprite +from source.dungeon.RoomObject import DoorObject from source.enemizer.Bossmizer import boss_writes from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'e1bf0b1e7ff799fcb6c7c16be9dab7f0' +RANDOMIZERBASEHASH = '79a57594c59b3fa2e9cf344fc7437bf9' class JsonRom(object): @@ -1399,7 +1400,8 @@ def patch_rom(world, rom, player, team, is_mystery=False): for room in world.rooms: if room.player == player and room.modified: 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: rom.write_bytes(room.address(), room.rom_data()) diff --git a/Rules.py b/Rules.py index 153b167a..c9eb67e0 100644 --- a/Rules.py +++ b/Rules.py @@ -868,6 +868,8 @@ def drop_rules(world, player): if enemy.location.parent_region.name in special_rules_check: rule = special_rules_for_region(world, player, enemy.location.parent_region.name, 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) @@ -1101,7 +1103,8 @@ def add_conditional_lamps(world, player): '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 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)']}, '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']}, diff --git a/Utils.py b/Utils.py index d26a83e8..c32adbd8 100644 --- a/Utils.py +++ b/Utils.py @@ -724,6 +724,25 @@ def load_yaml(path_list): 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__': # make_new_base2current() # read_entrance_data(old_rom=sys.argv[1]) diff --git a/data/base2current.bps b/data/base2current.bps index 6eefc4cf..55b2a98f 100644 Binary files a/data/base2current.bps and b/data/base2current.bps differ diff --git a/source/classes/CustomSettings.py b/source/classes/CustomSettings.py index 91bcf371..5811761f 100644 --- a/source/classes/CustomSettings.py +++ b/source/classes/CustomSettings.py @@ -208,6 +208,11 @@ class CustomSettings(object): return self.file_source['drops'] 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): self.player_range = range(1, world.players + 1) settings_dict, meta_dict = {}, {} diff --git a/source/dungeon/EnemyList.py b/source/dungeon/EnemyList.py index f8d55dc3..64beb1d0 100644 --- a/source/dungeon/EnemyList.py +++ b/source/dungeon/EnemyList.py @@ -280,7 +280,7 @@ class SpriteType(FastEnum): def init_enemy_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.CorrectPullSwitch: EnemyStats(EnemySprite.CorrectPullSwitch, 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.Hoarder: EnemyStats(EnemySprite.Hoarder, False, False, health=2, dmg=2), 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.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.CrystalSwitch: EnemyStats(EnemySprite.CrystalSwitch, True, ignore=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.ArmosKnight: EnemyStats(EnemySprite.ArmosKnight, True, False, dmg=1, 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.DesertStatue: EnemyStats(EnemySprite.DesertStatue, True, dmg=2), 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.Zelda: EnemyStats(EnemySprite.Zelda, 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.FloatingSkull: EnemyStats(EnemySprite.FloatingSkull, False, True, 7, health=24, dmg=6), 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.Terrorpin: EnemyStats(EnemySprite.Terrorpin, False, True, 2, health=8, dmg=3), 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.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.LaserEyeLeft: EnemyStats(EnemySprite.LaserEyeLeft, 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.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.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.GroveOstritch: EnemyStats(EnemySprite.GroveOstritch, 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.RedZazak: EnemyStats(EnemySprite.RedZazak, False, True, 6, health=8, dmg=5), 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.BlueZirro: EnemyStats(EnemySprite.BlueZirro, False, True, 7, health=8, dmg=3, dmask=0x80), + EnemySprite.GreenZirro: EnemyStats(EnemySprite.GreenZirro, False, False, 1, health=4, dmg=5, 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.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.TrinexxIceHead: EnemyStats(EnemySprite.TrinexxIceHead, True, dmg=7, 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), # 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.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.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.SmallKey: EnemyStats(EnemySprite.SmallKey, True, 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.static = False # don't randomize me self.water = False # water types can spawn here + self.embedded = False # sprite starts on impassible terrian def copy(self): 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) sprite.original_address = self.original_address + sprite.static = self.static + sprite.water = self.water + sprite.embedded = self.embedded return sprite 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, - 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: vanilla_sprites[super_tile] = [] 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 if water: sprite.water = True + if embed: + sprite.embedded = True 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.LaserEyeRight, 0x00, 0, 0x1e, 0x18) 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.PipeUp, 0x00, 1, 0x0f, 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, 0x07, 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, 0x10, 0x0e) - create_sprite(0x0017, EnemySprite.Bumper, 0x00, 0, 0x07, 0x16) + create_sprite(0x0017, EnemySprite.Bumper, 0x00, 0, 0x07, 0x0b, 'Hera 5F') + create_sprite(0x0017, EnemySprite.Bumper, 0x00, 0, 0x10, 0x0e, 'Hera 5F') + 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, 0x0b, 0x09, '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.SpikeBlock, 0x00, 0, 0x16, 0x15, '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, 0x0b, SpriteType.Overlord, 0, 0x07, 0x1a) 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, 0x09, 0x15, '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, 0x19, '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.Medusa, 0x00, 0, 0x07, 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.RedBari, 0x00, 0, 0x1a, 0x05, 'Swamp Right Elbow') 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, 0x04, 0x09, 'Swamp Shooters') 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.RedBari, 0x00, 0, 0x07, 0x18, 'Swamp Push Statue') 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, 0x0f, 0x13, 'PoD Arena Main') 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.Faerie, 0x00, 0, 0x16, 0x17) 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.StalfosKnight, 0x00, 0, 0x19, 0x04, '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, 0x0e, 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, embed=True) 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, 0x15, 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, embed=True) 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, 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(0x0040, EnemySprite.BlueGuard, 0x00, 1, 0x09, 0x08, '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.BlueArcher, 0x00, 1, 0x17, 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.BlueZazak, 0x00, 0, 0x04, 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, 0x1a, 0x0c, "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, 0x0d, 0x16, 'Hyrule Castle Secret Entrance') 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, 0x17, 0x19) + create_sprite(0x0056, EnemySprite.Bumper, 0x00, 0, 0x07, 0x19, 'Skull 2 West Lobby') + 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.HardhatBeetle, 0x00, 0, 0x1b, 0x05, 'Skull Back Drop') 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.Firesnake, 0x00, 0, 0x13, 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.SpikeBlock, 0x00, 0, 0x08, 0x05, '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.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.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, 0x06, 0x16, 'Skull Big Chest') 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, 0x17, 0x11, '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.WallCannonHorzBottom, 0x00, 0, 0x05, 0x0e) - create_sprite(0x005c, EnemySprite.WallCannonHorzBottom, 0x00, 0, 0x0e, 0x0e) + create_sprite(0x005c, EnemySprite.WallCannonHorzTop, 0x00, 0, 0x0b, 0x02, embed=True) + create_sprite(0x005c, EnemySprite.WallCannonHorzBottom, 0x00, 0, 0x05, 0x0e, embed=True) + 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, 0x18, 0x18) 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(0x0063, 0x14, SpriteType.Overlord, 0, 0x07, 0x08) 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.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, 0x19, 0x19, 'Thieves Cricket Hall Left') 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.FirebarCCW, 0x00, 0, 0x07, 0x17, 'Skull Left Drop') 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, 0x11, 0x07) - create_sprite(0x0068, EnemySprite.Bumper, 0x00, 0, 0x0c, 0x0b) - create_sprite(0x0068, EnemySprite.Bumper, 0x00, 0, 0x13, 0x0b) + create_sprite(0x0068, EnemySprite.Bumper, 0x00, 0, 0x0e, 0x07, 'Skull Pinball') + create_sprite(0x0068, EnemySprite.Bumper, 0x00, 0, 0x11, 0x07, 'Skull Pinball') + create_sprite(0x0068, EnemySprite.Bumper, 0x00, 0, 0x0c, 0x0b, 'Skull Pinball') + 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, 0x09, SpriteType.Overlord, 0, 0x0f, 0x0f) 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, 0x09, 0x07, '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(0x006d, EnemySprite.RedZazak, 0x00, 0, 0x05, 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, 0x06, 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.WallCannonVertRight, 0x00, 0, 0x1e, 0x0b) + create_sprite(0x0075, EnemySprite.WallCannonVertLeft, 0x00, 0, 0x11, 0x0b, embed=True) + 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, 0x09, 0x19, 'Desert Arrow Pot Corner') 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(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.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, 0x14, 0x09, '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, 0x0b, SpriteType.Overlord, 0, 0x17, 0x1a) 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, 0x17) - create_sprite(0x0096, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x19) - create_sprite(0x0096, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x1b) + create_sprite(0x0096, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x15, embed=True) + create_sprite(0x0096, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x17, embed=True) + create_sprite(0x0096, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x19, embed=True) + create_sprite(0x0096, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x1b, embed=True) 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, 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.RedBari, 0x00, 0, 0x19, 0x08, 'Ice Backwards Room') 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, 0x06, 0x12, 'Ice Many Pots', fix=True) - create_sprite(0x009f, EnemySprite.Babasu, 0x00, 0, 0x09, 0x12, 'Ice Many Pots', fix=True) - create_sprite(0x009f, EnemySprite.Babasu, 0x00, 0, 0x0b, 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, embed=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, embed=True) 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(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, 0x1a, 0x15, '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(0x00a4, EnemySprite.TrinexxRockHead, 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, 0x1a, 0x09, 'GT Wizzrobes 2') 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, 0x12, 0x12) + create_sprite(0x00a5, EnemySprite.LaserEyeTop, 0x00, 0, 0x0c, 0x12, embed=True) + 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.BlueGuard, 0x00, 0, 0x13, 0x18, 'GT Dashing Bridge') 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.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.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.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.Sluggula, 0x00, 0, 0x04, 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.SparkCW, 0x00, 1, 0x10, 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.SparkCW, 0x00, 1, 0x16, 0x16, 'Mire Hub') create_sprite(0x00c3, EnemySprite.Medusa, 0x00, 0, 0x05, 0x06) - create_sprite(0x00c3, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x09) - create_sprite(0x00c3, EnemySprite.LaserEyeLeft, 0x00, 0, 0x11, 0x0d) - create_sprite(0x00c3, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x11) - create_sprite(0x00c3, EnemySprite.LaserEyeLeft, 0x00, 0, 0x11, 0x15) + create_sprite(0x00c3, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x09, embed=True) + create_sprite(0x00c3, EnemySprite.LaserEyeLeft, 0x00, 0, 0x11, 0x0d, embed=True) + create_sprite(0x00c3, EnemySprite.LaserEyeRight, 0x00, 0, 0x1e, 0x11, embed=True) + create_sprite(0x00c3, EnemySprite.LaserEyeLeft, 0x00, 0, 0x11, 0x15, embed=True) 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.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.AntiFairy, 0x00, 0, 0x0b, 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.LaserEyeLeft, 0x00, 0, 0x01, 0x0b) - create_sprite(0x00c5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x0d) - create_sprite(0x00c5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x0f) - create_sprite(0x00c5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x11) - create_sprite(0x00c5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x13) + create_sprite(0x00c5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x09, embed=True) + create_sprite(0x00c5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x0b, embed=True) + create_sprite(0x00c5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x0d, embed=True) + create_sprite(0x00c5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x0f, embed=True) + create_sprite(0x00c5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x11, embed=True) + 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.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, 0x15, 0x04, '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, 0x0f, 0x06, '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.BlueZazak, 0x00, 1, 0x10, 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.Blob, 0x00, 0, 0x0b, 0x17, '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.BunnyBeam, 0x00, 1, 0x0b, 0x09, '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.Popo, 0x00, 0, 0x14, 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.LaserEyeLeft, 0x00, 0, 0x01, 0x0d) - create_sprite(0x00d5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x11) - create_sprite(0x00d5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x15) + create_sprite(0x00d5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x09, embed=True) + create_sprite(0x00d5, EnemySprite.LaserEyeLeft, 0x00, 0, 0x01, 0x0d, embed=True) + create_sprite(0x00d5, EnemySprite.LaserEyeRight, 0x00, 0, 0x0e, 0x11, embed=True) + 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(0x00d6, EnemySprite.LaserEyeTop, 0x00, 0, 0x07, 0x02) 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(0x00da, EnemySprite.AntiFairy, 0x00, 0, 0x07, 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.RedZazak, 0x00, 1, 0x17, 0x0b, '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.HeartPiece, 0x00, 0, 0x13, 0x10) 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, 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(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, 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, 0x0f, 0x12, 'Old Man House Back') - create_sprite(0x00e5, EnemySprite.Keese, 0x00, 0, 0x11, 0x12, 'Old Man House Back') - create_sprite(0x00e6, EnemySprite.Keese, 0x00, 0, 0x1b, 0x0b, 'Death Mountain Return Cave (left)') - create_sprite(0x00e6, EnemySprite.Keese, 0x00, 0, 0x17, 0x0f, 'Death Mountain Return Cave (left)') - create_sprite(0x00e6, EnemySprite.Keese, 0x00, 0, 0x13, 0x13, 'Death Mountain Return Cave (left)') - create_sprite(0x00e6, EnemySprite.Keese, 0x00, 0, 0x0f, 0x17, 'Death Mountain Return Cave (left)') - create_sprite(0x00e6, EnemySprite.Keese, 0x00, 0, 0x0b, 0x1b, 'Death Mountain Return Cave (left)') - create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x10, 0x04, 'Death Mountain Return Cave (right)') - create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x13, 0x04, 'Death Mountain Return Cave (right)') - create_sprite(0x00e7, EnemySprite.Keese, 0x00, 0, 0x15, 0x0b, 'Death Mountain Return Cave (right)') + 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', embed=True) # partial + 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)', embed=True) # partial + 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)', embed=True) # partial + 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)', embed=True) # partial + 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)', embed=True) # partial + 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, 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, 0x0f, '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)', embed=True) 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, 0x07, 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(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, 0x0b, 0x0e, '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, 0x1b, 0x0a, 'Paradox Cave Chest Area') 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, 0x10, 0x03, 'Old Man Cave') - create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x08, 0x04, 'Old Man Cave') - create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x0a, 0x04, 'Old Man Cave') - create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x09, 0x07, 'Old Man Cave') - create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x03, 0x0a, 'Old Man Cave') - create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x05, 0x0a, 'Old Man Cave') - create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x0e, 0x0c, 'Old Man Cave') - create_sprite(0x00f0, EnemySprite.OldMan, 0x00, 0, 0x1b, 0x10, 'Old Man Cave') - create_sprite(0x00f0, EnemySprite.Keese, 0x00, 0, 0x13, 0x13, 'Old Man Cave') - create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x19, 0x10, 'Old Man Cave') - create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x1c, 0x10, 'Old Man Cave') - create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x18, 0x11, 'Old Man Cave') - create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x1d, 0x11, 'Old Man Cave') - create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x17, 0x12, 'Old Man Cave') - create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x1e, 0x12, 'Old Man Cave') - create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x06, 0x1b, 'Old Man Cave') - create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x09, 0x1b, 'Old Man Cave') - create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x07, 0x1c, 'Old Man Cave') - create_sprite(0x00f1, EnemySprite.Keese, 0x00, 0, 0x08, 0x1c, '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 (West)', embed=True) + 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 (West)', embed=True) # partial + 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 (West)', embed=True) # partial + 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 (West)', embed=True) + 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 (West)', embed=True) + 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 (East)', embed=True) # partial + 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 (East)', embed=True) + 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 (East)', embed=True) + 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 (East)', embed=True) # partial + 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 (East)', embed=True) # partial create_sprite(0x00f3, EnemySprite.Grandma, 0x00, 0, 0x06, 0x14) create_sprite(0x00f4, EnemySprite.ArgueBros, 0x00, 0, 0x17, 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, 0x18, 0x10) 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, 0x15, 0x12, 'Bumper 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) -exceptions = {0xf1: [4, 5]} # these keese cannot be lured away - - def valid_drop_location(sprite, index, world, player): if world.dropshuffle[player] == 'underworld': 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 elif sprite.sub_type != SpriteType.Overlord: stat = world.data_tables[player].enemy_stats[sprite.kind] - return stat.drop_flag and (sprite.super_tile not in exceptions - or index not in exceptions[sprite.super_tile]) + return stat.drop_flag and (not sprite.embedded or sprite.static) # static for the babusu spawners in Ice 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 parent = world.get_region(region_name, player) 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', '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}' - 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) drop_location.drop = sprite sprite.location = drop_location diff --git a/source/enemizer/DamageTables.py b/source/enemizer/DamageTables.py index 032e9942..77e98c21 100644 --- a/source/enemizer/DamageTables.py +++ b/source/enemizer/DamageTables.py @@ -1,8 +1,8 @@ -from Utils import load_yaml +from Utils import load_cached_yaml class DamageTable: def __init__(self): - self.damage_table = load_yaml(['source', 'enemizer', 'damage_table.yaml']) - self.enemy_damage = load_yaml(['source', 'enemizer', 'enemy_damage_table.yaml']) + self.damage_table = load_cached_yaml(['source', 'enemizer', 'damage_table.yaml']) + self.enemy_damage = load_cached_yaml(['source', 'enemizer', 'enemy_damage_table.yaml']) diff --git a/source/enemizer/Enemizer.py b/source/enemizer/Enemizer.py index d97c0cd3..00aba1a8 100644 --- a/source/enemizer/Enemizer.py +++ b/source/enemizer/Enemizer.py @@ -1,7 +1,7 @@ import RaceRandom as random 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.enemizer.SpriteSheets import sub_group_choices 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} } + def setup_specific_requirements(data_tables): requirements = data_tables.sprite_requirements water_groups = set() @@ -36,7 +37,7 @@ def setup_specific_requirements(data_tables): for i in range(0, 4): limited = [x for x in requirement.sub_groups[i] if x in sub_group_choices[i]] water_sub_groups[i].update(limited) - if requirement.good_for_shutter(): + if requirement.good_for_shutter([]): killable_groups.update(requirement.groups) for i in range(0, 4): 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 -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 requirements = data_tables.sprite_requirements @@ -57,7 +58,7 @@ def get_possible_sheets(room_id, data_tables, specific, uw_sheets): key_needed = False killable_needed = room_id in shutter_sprites - for sheet in uw_sheets: + for sheet in all_sheets: if room_id in sheet.room_set: return [sheet] @@ -134,10 +135,10 @@ def get_possible_sheets(room_id, data_tables, specific, uw_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 - for sheet in ow_sheets: + for sheet in all_sheets: if area_id in sheet.room_set: return [sheet] @@ -173,6 +174,10 @@ def get_possible_ow_sheets(area_id, ow_sheets, data_tables): 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): requirements = data_tables.sprite_requirements sprite_candidates = [] @@ -195,6 +200,8 @@ def find_candidate_sprites(data_tables, sheet_range, uw=True): for num in sheet_range: sheet = data_tables.sprite_sheets[num] 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: continue 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 -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] + enemy_drops_active = world.dropshuffle[player] in ['underworld'] specific = setup_specific_requirements(data_tables) uw_candidates, uw_sheets, all_sheets = find_candidate_sprites(data_tables, range(65, 124)) 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: continue # 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) 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) data_tables.room_headers[room_id].sprite_sheet = chosen_sheet.id - 0x40 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 while not done: chosen_sheet = random.choice(candidate_sheets) @@ -283,28 +304,36 @@ def randomize_underworld_rooms(data_tables, world, player): randomized = True wallmaster_chosen = room_id in {0x0039, 0x0049, 0x0056, 0x0057, 0x0068, 0x008d} for i, sprite in randomizeable_sprites.items(): - # filter out water if necessary - candidate_sprites = [x for x in candidate_sprites if not x.water_only or sprite.water] - # 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)] + if room_id in custom_uw and i in custom_uw[room_id]: + sprite.kind = sprite_translation[custom_uw[room_id][i]] 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 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 chosen.sprite == EnemySprite.Wallmaster: + # filter out water if necessary + candidate_sprites = [x for x in candidate_sprites if not x.water_only or sprite.water] + # filter out wallmaster if already on tile + if wallmaster_chosen: + candidate_sprites = [x for x in candidate_sprites if x.sprite != EnemySprite.Wallmaster] + candidate_sprites = [x for x in candidate_sprites if not exceeds_sprite_limit(sprite_limit, x)] + 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: + 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 sprite.kind = 0x09 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]] -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) 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, @@ -342,19 +371,23 @@ def randomize_overworld_enemies(data_tables): for area_id in area_list: randomizeable_sprites = get_randomize_able_sprites_ow(area_id, data_tables) 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) data_tables.overworld_sprite_sheets[area_id] = chosen_sheet candidate_sprites = get_possible_enemy_sprites_ow(chosen_sheet, ow_candidates, data_tables) 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) data_tables.overworld_sprite_sheets[area_id] = chosen_sheet candidate_sprites = get_possible_enemy_sprites_ow(chosen_sheet, ow_candidates, data_tables) for i, sprite in randomizeable_sprites.items(): - 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 + if area_id in custom_ow and i in custom_ow[area_id]: + sprite.kind = sprite_translation[custom_ow[area_id][i]] + 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 weight = [data_tables.ow_weights[r.sprite] for r in candidate_sprites] bush_sprite_choice = random.choices(candidate_sprites, weight, k=1)[0] @@ -374,15 +407,22 @@ skip_sprites = { def randomize_enemies(world, player): if world.enemy_shuffle[player] != 'none': data_tables = world.data_tables[player] - randomize_underworld_sprite_sheets(data_tables.sprite_sheets, data_tables) - randomize_underworld_rooms(data_tables, world, player) - randomize_overworld_sprite_sheets(data_tables.sprite_sheets) - randomize_overworld_enemies(data_tables) + custom_uw, custom_ow = {}, {} + enemy_map = world.customizer.get_enemies() + if enemy_map and player in enemy_map: + 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 subclass_table = world.damage_table[player].damage_table['SubClassTable'] subclass_table[EnemySprite.Thief] = subclass_table[EnemySprite.GreenEyegoreMimic] 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 if world.enemy_health[player] != 'default': stats = world.data_tables[player].enemy_stats @@ -423,6 +463,8 @@ def randomize_enemies(world, player): 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': # killable thief rom.write_byte(snes_to_pc(0x368108), 0xc4) diff --git a/source/enemizer/EnemizerTestHarness.py b/source/enemizer/EnemizerTestHarness.py index 5013fcc0..37295bae 100644 --- a/source/enemizer/EnemizerTestHarness.py +++ b/source/enemizer/EnemizerTestHarness.py @@ -2,7 +2,7 @@ from types import SimpleNamespace from collections import Counter, defaultdict 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.rom.DataTables import init_data_tables from source.enemizer.DamageTables import DamageTable @@ -49,25 +49,125 @@ def calculate_odds(): if __name__ == '__main__': - calculate_odds() - # random.seed(42) + # calculate_odds() + random.seed(42) # - # stats = defaultdict(Counter) - # column_headers = {} - # - # for trial in range(0, 100): - # world = SimpleNamespace(pottery={1: 'none'}) - # data_tables = init_data_tables(world, 1) - # - # randomize_underworld_sprite_sheets(data_tables.sprite_sheets) - # randomize_underworld_rooms(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 sprite.sub_type == SpriteType.Overlord: - # result = f'O{hex(sprite.kind)}' - # else: - # result = enemy_names[sprite.kind] + frequency = Counter() + sheet_ctr = Counter() + ctr_uw = Counter() + ctr_ow = Counter() + sheet_thing = Counter() + sheet_sub_groups = defaultdict(set) + + for trial in range(0, 100): + world = SimpleNamespace(pottery={1: 'none'}, damage_table={1: DamageTable()}, any_enemy_logic={1: 'allow_all'}, + dropshuffle={1: 'off'}) + data_tables = init_data_tables(world, 1) + stats = data_tables.enemy_stats + + def randomize_able_sprite(sprite, stats): + if sprite.static: + 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: # column_headers[result] = None # stats[(room_id, i)][result] += 1 diff --git a/source/enemizer/EnemyLogic.py b/source/enemizer/EnemyLogic.py index e036e773..05bcb5e4 100644 --- a/source/enemizer/EnemyLogic.py +++ b/source/enemizer/EnemyLogic.py @@ -41,7 +41,7 @@ def defeat_rule_single(world, player, enemy_sprite, region): rules.append(fire_rod_rule(world, player, vln['FireRod'])) if vln['Boomerang'] != 0: 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'])) # skip medallions if vln to Blunt? 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: rules.append(medallion_rule(world, player, 'Quake', vln['Quake'])) 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 or_rule(*rules) @@ -222,19 +222,23 @@ def needed_resources(damage_type, vln_list): special_rules_check = { 'Swamp Waterway': None, 'Hera Back': [5, 6], - 'GT Petting Zoo': [1, 4, 5, 7], + 'GT Petting Zoo': [5, 8, 9, 11], 'Mimic Cave': [3, 4], 'Ice Hookshot Ledge': None, '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], '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): - if region_name == 'Swamp Waterway': # todo: check on enemizer interaction + if region_name == 'Swamp Waterway': return or_rule(medallion_rule(world, player, 'Quake', 1), medallion_rule(world, player, 'Ether', 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)) else: return original_rule - elif region_name in ['TR Hub Ledges', 'Ice Hookshot Ledge', 'Old Man Cave', 'Old Man House Back', - 'Death Mountain Return Cave (left)', 'Death Mountain Return Cave (right)']: + elif region_name in ['TR Hub Ledges', 'Ice Hookshot Ledge', 'TR Dark Ride']: enemy_number = int(location.name.split('#')[1]) 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))) else: 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 @@ -258,10 +273,14 @@ def has_blunt_weapon(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): return or_rule(has('Golden Sword', 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): @@ -456,7 +475,10 @@ def enemy_vulnerability(world, player, enemy_sprite, region): vulnerability['Silvers'] = hits 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) - 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 return vulnerability @@ -483,12 +505,14 @@ def number_of_hits(source_name, damage_src, enemy_sub_class, stats, enemy_sprite health = max(health) return math.ceil(health / damage_amount) elif damage_amount in [0xF9, 0xFA, 0xFD]: - # -1 faired or incinerated; -2 blobbed - # F9: fairy, defeated, but doesn't drop anything + # -1 incinerated; -2 blobbed, -3 fairy-ed (depends on enemy if "killed" or not) + # F9: fairy, defeated, but doesn't drop anything: -3 # FA: blobbed - can you kill a blob? = -2 # FD: incinerated - return -1 if damage_amount != 0xFA else -2 + return special_classes[damage_amount] else: return 0 +special_classes = {0xF9: -3, 0xFA: -2, 0xFD: -1} + diff --git a/source/enemizer/OwEnemyList.py b/source/enemizer/OwEnemyList.py index 90882a4e..84cca225 100644 --- a/source/enemizer/OwEnemyList.py +++ b/source/enemizer/OwEnemyList.py @@ -2,7 +2,7 @@ from source.dungeon.EnemyList import Sprite, EnemySprite 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: vanilla_sprites_ow[area_id] = [] 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 if fix: sprite.static = True + if embed: + sprite.embedded = True sprite.original_address = address 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.TutorialGuard, 0x01, 0x12, '', 0x09CB45) 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, 0x08, 0x10, '', 0x09CBE2) create_sprite(0x4a, EnemySprite.Moblin, 0x16, 0x13, '', 0x09CBE5) - create_sprite(0x4a, EnemySprite.Raven, 0x13, 0x13, '', 0x09CBE8) - create_sprite(0x4a, EnemySprite.Raven, 0x13, 0x14, '', 0x09CBEB) + create_sprite(0x4a, EnemySprite.Raven, 0x13, 0x13, '', 0x09CBE8, embed=True) + create_sprite(0x4a, EnemySprite.Raven, 0x13, 0x14, '', 0x09CBEB, embed=True) create_sprite(0x4a, EnemySprite.Ropa, 0x0E, 0x18, '', 0x09CBEE) create_sprite(0x4a, EnemySprite.Stal, 0x14, 0x1A, '', 0x09CBF1) # Screen4F: @@ -206,7 +210,7 @@ def init_vanilla_sprites_ow(): create_sprite(0x5e, EnemySprite.Ropa, 0x24, 0x30, '', 0x09CD4C) create_sprite(0x5e, EnemySprite.Faerie, 0x30, 0x30, '', 0x09CD4F) 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: create_sprite(0x62, EnemySprite.PurpleChest, 0x0D, 0x05, '', 0x09CD59) 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, 0x0F, 0x08, '', 0x09CDD4) 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) # 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, 0x12, 0x21, '', 0x09CDE7, 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.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, 0x1E, 0x2E, '', 0x09CDF6, 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) # Screen00_1: 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.FakeMasterSword, 0x28, 0x06, '', 0x09CF55) 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.Buzzblob, 0x10, 0x0D, '', 0x09CFE7) 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.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) # Screen0F_1: 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.Crab, 0x11, 0x12, '', 0x09D006) 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) # Screen10_1: 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) # Screen3A_1: 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, 0x18, 0x0E, '', 0x09D275) # Screen3B_1: @@ -692,7 +696,7 @@ def init_vanilla_sprites_ow(): create_sprite(0x3b, EnemySprite.HeartPiece, 0x14, 0x0E, '', 0x09D285) create_sprite(0x3b, EnemySprite.FloppingFish, 0x1B, 0x10, '', 0x09D288, water=True) 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: create_sprite(0x3c, EnemySprite.GreenBushGuard, 0x08, 0x0C, '', 0x09D292) create_sprite(0x3c, EnemySprite.Octorok, 0x14, 0x0F, '', 0x09D295) @@ -765,10 +769,10 @@ def init_vanilla_sprites_ow(): # Screen0A_2: create_sprite(0x9a, EnemySprite.Bee, 0x0E, 0x04, '', 0x09D353) create_sprite(0x9a, EnemySprite.BlueGuard, 0x10, 0x0D, '', 0x09D356) - create_sprite(0x9a, EnemySprite.Raven, 0x11, 0x16, '', 0x09D359) - create_sprite(0x9a, EnemySprite.Raven, 0x13, 0x16, '', 0x09D35C) + create_sprite(0x9a, EnemySprite.Raven, 0x11, 0x16, '', 0x09D359, embed=True) + create_sprite(0x9a, EnemySprite.Raven, 0x13, 0x16, '', 0x09D35C, embed=True) 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) # Screen0F_2: 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, 0x2F, 0x1F, '', 0x09D5AD) 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, 0x0A, 0x35, '', 0x09D5B9) create_sprite(0xc5, EnemySprite.FireballZora, 0x14, 0x35, '', 0x09D5BC, water=True) @@ -1006,10 +1010,10 @@ def init_vanilla_sprites_ow(): # Screen3A_2: create_sprite(0xca, EnemySprite.Locksmith, 0x17, 0x05, '', 0x09D5E5) create_sprite(0xca, EnemySprite.Hoarder2, 0x0B, 0x0A, '', 0x09D5E8) - create_sprite(0xca, EnemySprite.Raven, 0x14, 0x0D, '', 0x09D5EB) - create_sprite(0xca, EnemySprite.Raven, 0x13, 0x0E, '', 0x09D5EE) - create_sprite(0xca, EnemySprite.Raven, 0x14, 0x0F, '', 0x09D5F1) - create_sprite(0xca, EnemySprite.Raven, 0x13, 0x10, '', 0x09D5F4) + create_sprite(0xca, EnemySprite.Raven, 0x14, 0x0D, '', 0x09D5EB, embed=True) + create_sprite(0xca, EnemySprite.Raven, 0x13, 0x0E, '', 0x09D5EE, embed=True) + create_sprite(0xca, EnemySprite.Raven, 0x14, 0x0F, '', 0x09D5F1, embed=True) + create_sprite(0xca, EnemySprite.Raven, 0x13, 0x10, '', 0x09D5F4, embed=True) create_sprite(0xca, EnemySprite.UsainBolt, 0x11, 0x0F, '', 0x09D5F7) create_sprite(0xca, EnemySprite.Hoarder2, 0x17, 0x17, '', 0x09D5FA) # Screen3B_2: @@ -1018,9 +1022,9 @@ def init_vanilla_sprites_ow(): create_sprite(0xcb, EnemySprite.HeartPiece, 0x14, 0x0E, '', 0x09D604) create_sprite(0xcb, EnemySprite.Octorok4Way, 0x0F, 0x14, '', 0x09D607) 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: - 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.Octorok, 0x14, 0x0F, '', 0x09D617) create_sprite(0xcc, EnemySprite.UsainBolt, 0x09, 0x11, '', 0x09D61A) diff --git a/source/enemizer/SpriteSheets.py b/source/enemizer/SpriteSheets.py index 97baf0a1..610f1696 100644 --- a/source/enemizer/SpriteSheets.py +++ b/source/enemizer/SpriteSheets.py @@ -1,7 +1,8 @@ +import logging from collections import defaultdict 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 * @@ -100,7 +101,7 @@ class SpriteRequirement: return self.good_for_shutter(forbidden) and self.can_drop 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 @@ -160,7 +161,7 @@ WallmasterValidRooms = { def init_sprite_requirements(): reqs = [ 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.WrongPullSwitch).affix().sub_group(3, [0x52, 0x53]), 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.WaterSwitch).affix().sub_group(3, 0x53), 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.TalkingTree).affix().sub_group(0, 0x15), 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.BombGuard).sub_group(0, 0x46).sub_group(1, 0x49), 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.Popo).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.KingZora).affix().sub_group(3, 0x44), SpriteRequirement(EnemySprite.ArmosKnight).exalt().sub_group(3, 0x1d), SpriteRequirement(EnemySprite.Lanmolas).exalt().sub_group(3, 0x31), 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.Crab).sub_group(2, 0xc), 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.CricketRat).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.Leever).no_drop().sub_group(0, 0x2f), + SpriteRequirement(EnemySprite.Keese).sub_group(2, [0x1c, 0x24]), + SpriteRequirement(EnemySprite.Leever).sub_group(0, 0x2f), SpriteRequirement(EnemySprite.FairyPondTrigger).affix().sub_group(3, 0x36), SpriteRequirement(EnemySprite.UnclePriest).affix().sub_group(0, [0x47, 0x51]), 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.Agahnim).exalt().sub_group(0, 0x55).sub_group(1, [0x1a, 0x3d]).sub_group(2, 0x42) .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.FirebarCW).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.Kyameron).no_drop().immerse().sub_group(2, 0x22), SpriteRequirement(EnemySprite.Wizzrobe).sub_group(2, [0x25, 0x29]), - SpriteRequirement(EnemySprite.Zoro).no_drop().sub_group(1, 0x20), - SpriteRequirement(EnemySprite.Babasu).no_drop().sub_group(1, 0x20), + SpriteRequirement(EnemySprite.Zoro).sub_group(1, 0x20), + SpriteRequirement(EnemySprite.Babasu).sub_group(1, 0x20), SpriteRequirement(EnemySprite.GroveOstritch).affix().sub_group(2, 0x4e), SpriteRequirement(EnemySprite.GroveRabbit).affix(), 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.GreenZirro).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.OldMan).affix().sub_group(0, 0x46).sub_group(1, 0x49).sub_group(2, 0x1c), 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 # various npcs - sheets[did(5)].add_sprite_to_sheet([75, 77, 74, 90], {0xf3, 0x109, 0x10e, 0x10f, 0x110, 0x111, 0x11a, 0x11c, 0x122}) - sheets[did(7)].add_sprite_to_sheet([75, 77, 57, 54], {0x8, 0x2c, 0x114, 0x115}) # big fairies + sheets[did(5)].add_sprite_to_sheet([75, 77, 74, 90], {0xf3, 0x109, 0x10e, 0x10f, 0x110, 0x111, 0x112, + 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(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 @@ -531,37 +532,42 @@ def setup_required_dungeon_groups(sheets, data_tables): # not sure 31 is needed above 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, None, None, 80], [0x108]), # chicken house ([14, 30, None, None], [0x123]), # mini moldorm (shutter door) ([None, None, 34, None], [0x36, 0x46, 0x66, 0x76]), # pirogusu spawners ([None, 32, None, None], [0x9f]), # babasu spawners ([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 - ([None, None, None, (82, 83)], [0x17, 0x2a, 0x4c, 0x59, 0x67, 0x7e, 0x8b, 0xeb, 0xfb]), # crystal switches - split for some reason ([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 ([None, None, None, (82, 83)], [0x13, 0x23, 0x96, 0xa5, 0xc5, 0xd5]), # statues - split for some reason ([None, None, None, (82, 83)], [0x26, 0x2b, 0x40, 0x4a, 0x6b, 0x7b]), + ([None, None, None, 83], [0x43, 0x63, 0x87]), # tile rooms # 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, 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, 34, None], [0x28]), # tektike forced? - spawn chest ([None, None, 37, None], [0x97]), # wizzrobe spawner - in middle of room... # combined ([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, 83)], [0x57, 0x68]), # wallmaster + statue and wallmaster + bumpers ([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: ([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); # more stuff 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 - 2: [12, 18, 23, 24, 28, 46, 34, 35, 39, 40, 38, 41, 36, 37, 42, 19], # 19 for GreenKnifeGuard - 3: [17, 16, 27, 20, 82, 83, 25, 68] # 25 for Swamola, 68 for Zora (walking?) + 2: [12, 18, 23, 24, 28, 46, 34, 35, 39, 40, 38, 41, 36, 37, 42], + 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_custom_enemy_sheets(custom_enemies, sheets, data_tables, range(65, 124), True) + for num in range(65, 124): # sheets 0x41 to 0x7B inclusive sheet = sheets[num] - if not sheet.locked[1] and num in [65, 66, 67, 68]: - sheet.locked[1] = True - sheet.sub_groups[1] = random.choice([13, 73]) - for idx in range(0, 4): - if not sheet.locked[idx]: - sheet.sub_groups[idx] = random.choice(sub_group_choices[idx]) - # lock the group? + # if not sheet.locked[1] and num in [65, 66, 67, 68]: # guard stuff, kind of + # sheet.locked[1] = True + # sheet.sub_groups[1] = random.choice([13, 73]) + + free_slots = [idx for idx in range(0, 4) if not sheet.locked[idx]] + while free_slots: + 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): @@ -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[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[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[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) @@ -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 free_sheet_reqs = [ + [None, None, None, 0x14], # bully+pink ball needs this [72, 73, None, None], # allow for blue archer + green bush [None, 73, 19, None], # allow for green knife guard [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)) -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 = [] found_match = False 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] valid = True match = True @@ -655,37 +733,44 @@ def find_matching_sheet(groups, sheets, search_sheets, room_list=None): match = False if match: found_match = True + if lock_match and room_list is not None: + sheet.room_set.update(room_list) break if valid: possible_sheets.append(sheet) if not found_match: + if len(possible_sheets) == 0: + raise NoMatchingSheetException chosen_sheet = random.choice(possible_sheets) 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) -def randomize_overworld_sprite_sheets(sheets): +def randomize_overworld_sprite_sheets(sheets, data_tables, custom_enemies): 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 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 - for idx in range(0, 4): - if not sheet.locked[idx]: - sheet.sub_groups[idx] = random.choice(sub_group_choices[idx]) - # lock the group? - - - - - - - - - - - + + free_slots = [idx for idx in range(0, 4) if not sheet.locked[idx]] + while free_slots: + 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 diff --git a/source/enemizer/damage_table.yaml b/source/enemizer/damage_table.yaml index e68d98c1..8e1f3bf1 100644 --- a/source/enemizer/damage_table.yaml +++ b/source/enemizer/damage_table.yaml @@ -183,7 +183,7 @@ SubClassTable: 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] 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] 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] diff --git a/source/enemizer/enemy_deny.yaml b/source/enemizer/enemy_deny.yaml new file mode 100644 index 00000000..13bf6763 --- /dev/null +++ b/source/enemizer/enemy_deny.yaml @@ -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"]] + diff --git a/source/enemizer/enemy_weight.yaml b/source/enemizer/enemy_weight.yaml index 99d86f73..f98db4b3 100644 --- a/source/enemizer/enemy_weight.yaml +++ b/source/enemizer/enemy_weight.yaml @@ -1,198 +1,198 @@ -UW: # Total 82753 - AntiFairy: 50 # f1.99026% raw:1647 - Statue: 50 # f1.99026% raw:1647 - BlueGuard: 124 # f0.80480% raw:666 - GreenGuard: 157 # f0.63563% raw:526 - RedSpearGuard: 124 # f0.80480% raw:666 - BluesainBolt: 567 # f0.17643% raw:146 - UsainBolt: 124 # f0.80480% raw:666 - RedJavelinGuard: 662 # f0.15105% raw:125 - RedBushGuard: 662 # f0.15105% raw:125 - BombGuard: 662 # f0.15105% raw:125 - BallNChain: 662 # f0.15105% raw:125 - CannonTrooper: 662 # f0.15105% raw:125 - CricketRat: 169 # f0.59212% raw:490 - Snake: 169 # f0.59212% raw:490 - Keese: 169 # f0.59212% raw:490 - BigSpike: 50 # f1.99026% raw:1647 - AntiFairyCircle: 50 # f1.99026% raw:1647 - SpikeBlock: 50 # f1.99026% raw:1647 - Bumper: 50 # f1.99026% raw:1647 - BunnyBeam: 14 # f7.12965% raw:5900 - FloppingFish: 14 # f7.12965% raw:5900 - Stal: 14 # f7.12965% raw:5900 - Landmine: 14 # f7.12965% raw:5900 - Octorok: 159 # f0.62717% raw:519 - RedBari: 99 # f1.01386% raw:839 - BlueBari: 99 # f1.01386% raw:839 - FireballZora: 159 # f0.62717% raw:519 - SparkCW: 99 # f1.01386% raw:839 - SparkCCW: 99 # f1.01386% raw:839 - FloatingSkull: 99 # f1.01386% raw:839 - FirebarCW: 99 # f1.01386% raw:839 - FirebarCCW: 99 # f1.01386% raw:839 - Firesnake: 99 # f1.01386% raw:839 - Stalfos: 99 # f1.01386% raw:839 - Raven: 92 # f1.09120% raw:903 - Vulture: 400 # f0.25014% raw:207 - Buzzblob: 196 # f0.51116% raw:423 - Hoarder: 196 # f0.51116% raw:423 - Hoarder2: 196 # f0.51116% raw:423 - Geldman: 400 # f0.25014% raw:207 - Toppo: 196 # f0.51116% raw:423 - FakeMasterSword: 196 # f0.51116% raw:423 - MiniHelmasaur: 56 # f1.79450% raw:1485 - MiniMoldorm: 56 # f1.79450% raw:1485 - HardhatBeetle: 56 # f1.79450% raw:1485 - Lynel: 172 # f0.58246% raw:482 - Deadrock: 176 # f0.56796% raw:470 - ArmosStatue: 176 # f0.56796% raw:470 - Hover: 211 # f0.47370% raw:392 - Blob: 52 # f1.90930% raw:1580 - StalfosKnight: 52 # f1.90930% raw:1580 - Kyameron: 211 # f0.47370% raw:392 - Zoro: 52 # f1.90930% raw:1580 - Babasu: 52 # f1.90930% raw:1580 - Tektite: 176 # f0.56796% raw:470 - Popo: 56 # f1.77516% raw:1469 - Popo2: 56 # f1.77516% raw:1469 - Beamos: 56 # f1.77516% raw:1469 - DebirandoPit: 110 # f0.90510% raw:749 - Debirando: 110 # f0.90510% raw:749 - Leever: 110 # f0.90510% raw:749 - GreenEyegoreMimic: 270 # f0.36978% raw:306 - RedEyegoreMimic: 270 # f0.36978% raw:306 - Swamola: 172 # f0.58004% raw:480 - GreenZirro: 191 # f0.52324% raw:433 - BlueZirro: 191 # f0.52324% raw:433 - Pikit: 191 # f0.52324% raw:433 - Cucco: 207 # f0.48337% raw:400 - Moblin: 281 # f0.35648% raw:295 - Octorok4Way: 273 # f0.36615% raw:303 - Octoballoon: 273 # f0.36615% raw:303 - Zora: 690 # f0.14501% raw:120 - Crab: 273 # f0.36615% raw:303 - Thief: 81 # f1.22896% raw:1017 - Wizzrobe: 155 # f0.64529% raw:534 - Poe: 828 # f0.12084% raw:100 - Hinox: 109 # f0.92081% raw:762 - Ropa: 109 # f0.92081% raw:762 - Pengator: 294 # f0.33956% raw:281 - Freezor: 294 # f0.33956% raw:281 - Sluggula: 239 # f0.41811% raw:346 - RollerVerticalUp: 280 # f0.35769% raw:296 - RollerVerticalDown: 280 # f0.35769% raw:296 - RollerHorizontalLeft: 280 # f0.35769% raw:296 - RollerHorizontalRight: 280 # f0.35769% raw:296 - Pokey: 280 # f0.35769% raw:296 - Chainchomp: 280 # f0.35769% raw:296 - Gibdo: 196 # f0.51116% raw:423 - Wallmaster: 196 # f0.51116% raw:423 - GreenKnifeGuard: 773 # f0.12930% raw:107 - BlueArcher: 632 # f0.15830% raw:131 - GreenBushGuard: 632 # f0.15830% raw:131 - Snapdragon: 690 # f0.14501% raw:120 - Kodongo: 368 # f0.27189% raw:225 - Terrorpin: 368 # f0.27189% raw:225 - BlueZazak: 400 # f0.25014% raw:207 - RedZazak: 400 # f0.25014% raw:207 - Gibo: 400 # f0.25014% raw:207 -OW: # Total 94707 - Popo: 50 # f2.00513% raw:1899 - Popo2: 50 # f2.00513% raw:1899 - Beamos: 50 # f2.00513% raw:1899 - DebirandoPit: 100 # f1.00415% raw:951 - Debirando: 100 # f1.00415% raw:951 - Leever: 100 # f1.00415% raw:951 - BunnyBeam: 15 # f6.65210% raw:6300 - FloppingFish: 15 # f6.65210% raw:6300 - Stal: 15 # f6.65210% raw:6300 - Landmine: 15 # f6.65210% raw:6300 - MiniHelmasaur: 49 # f2.03364% raw:1926 - AntiFairy: 73 # f1.36738% raw:1295 - MiniMoldorm: 49 # f2.03364% raw:1926 - Statue: 73 # f1.36738% raw:1295 - HardhatBeetle: 49 # f2.03364% raw:1926 - BigSpike: 73 # f1.36738% raw:1295 - AntiFairyCircle: 73 # f1.36738% raw:1295 - GreenEyegoreMimic: 316 # f0.31677% raw:300 - RedEyegoreMimic: 316 # f0.31677% raw:300 - SpikeBlock: 73 # f1.36738% raw:1295 - Bumper: 73 # f1.36738% raw:1295 - Hinox: 87 # f1.14353% raw:1083 - Ropa: 87 # f1.14353% raw:1083 - CricketRat: 160 # f0.62509% raw:592 - Snake: 160 # f0.62509% raw:592 - Keese: 160 # f0.62509% raw:592 - GreenZirro: 151 # f0.66415% raw:629 - BlueZirro: 151 # f0.66415% raw:629 - Pikit: 151 # f0.66415% raw:629 - Raven: 61 # f1.64719% raw:1560 - RollerVerticalUp: 272 # f0.36745% raw:348 - RollerVerticalDown: 272 # f0.36745% raw:348 - RollerHorizontalLeft: 272 # f0.36745% raw:348 - RollerHorizontalRight: 272 # f0.36745% raw:348 - Pokey: 272 # f0.36745% raw:348 - Chainchomp: 272 # f0.36745% raw:348 - Swamola: 128 # f0.78030% raw:739 - Cucco: 316 # f0.31677% raw:300 - BlueGuard: 239 # f0.41813% raw:396 - GreenGuard: 239 # f0.41813% raw:396 - RedSpearGuard: 239 # f0.41813% raw:396 - UsainBolt: 239 # f0.41813% raw:396 - Buzzblob: 115 # f0.86688% raw:821 - Hoarder: 115 # f0.86688% raw:821 - RedBari: 98 # f1.01999% raw:966 - BlueBari: 98 # f1.01999% raw:966 - Hoarder2: 115 # f0.86688% raw:821 - Toppo: 115 # f0.86688% raw:821 - SparkCW: 98 # f1.01999% raw:966 - SparkCCW: 98 # f1.01999% raw:966 - FloatingSkull: 98 # f1.01999% raw:966 - FirebarCW: 98 # f1.01999% raw:966 - FirebarCCW: 98 # f1.01999% raw:966 - Firesnake: 98 # f1.01999% raw:966 - Stalfos: 98 # f1.01999% raw:966 - FakeMasterSword: 115 # f0.86688% raw:821 - Vulture: 184 # f0.54484% raw:516 - Geldman: 184 # f0.54484% raw:516 - Blob: 50 # f1.98401% raw:1879 - StalfosKnight: 50 # f1.98401% raw:1879 - Zoro: 50 # f1.98401% raw:1879 - Babasu: 50 # f1.98401% raw:1879 - Octorok: 112 # f0.89011% raw:843 - Octorok4Way: 226 # f0.44242% raw:419 - Octoballoon: 226 # f0.44242% raw:419 - FireballZora: 112 # f0.89011% raw:843 - Crab: 226 # f0.44242% raw:419 - Thief: 90 # f1.11713% raw:1058 - Zora: 686 # f0.14571% raw:138 - Deadrock: 127 # f0.78769% raw:746 - ArmosStatue: 127 # f0.78769% raw:746 - Tektite: 127 # f0.78769% raw:746 - Hover: 301 # f0.33260% raw:315 - Kyameron: 301 # f0.33260% raw:315 - Pengator: 274 # f0.36534% raw:346 - Freezor: 274 # f0.36534% raw:346 - BlueArcher: 824 # f0.12143% raw:115 - GreenBushGuard: 824 # f0.12143% raw:115 - Kodongo: 287 # f0.34844% raw:330 - Terrorpin: 287 # f0.34844% raw:330 - Wizzrobe: 152 # f0.65676% raw:622 - Poe: 474 # f0.21118% raw:200 - Snapdragon: 596 # f0.16789% raw:159 - Moblin: 221 # f0.45298% raw:429 - Lynel: 145 # f0.69161% raw:655 - BlueZazak: 308 # f0.32416% raw:307 - RedZazak: 308 # f0.32416% raw:307 - Gibo: 308 # f0.32416% raw:307 - Gibdo: 290 # f0.34528% raw:327 - Wallmaster: 290 # f0.34528% raw:327 - GreenKnifeGuard: 853 # f0.11720% raw:111 - BluesainBolt: 803 # f0.12459% raw:118 - RedJavelinGuard: 803 # f0.12459% raw:118 - RedBushGuard: 803 # f0.12459% raw:118 - BombGuard: 803 # f0.12459% raw:118 - BallNChain: 803 # f0.12459% raw:118 - CannonTrooper: 803 # f0.12459% raw:118 - Sluggula: 302 # f0.33155% raw:314 \ No newline at end of file +UW: # Total 94431 + AntiFairy: 40 # 1.82885% raw:1727 15.28319% + AntiFairyCircle: 40 # 1.82885% raw:1727 15.28319% + ArmosStatue: 186 # 0.53796% raw:508 4.49558% + Babasu: 80 # 1.15428% raw:1090 9.64602% + BallNChain: 163 # 0.61526% raw:581 5.14159% + Beamos: 155 # 0.64703% raw:611 5.40708% + BigSpike: 40 # 1.82885% raw:1727 15.28319% + Blob: 87 # 1.15428% raw:1090 9.64602% + BlueArcher: 325 # 0.30816% raw:291 2.57522% + BlueBari: 49 # 2.02688% raw:1914 16.93805% + BlueGuard: 44 # 2.28527% raw:2158 19.09735% + BlueZazak: 294 # 0.33993% raw:321 2.84071% + BlueZirro: 180 # 0.55702% raw:526 4.65487% + BluesainBolt: 150 # 0.66821% raw:631 5.58407% + BombGuard: 163 # 0.61526% raw:581 5.14159% + Bumper: 55 # 1.82885% raw:1727 15.28319% + BunnyBeam: 19 # 5.40077% raw:5100 45.13274% + Buzzblob: 123 # 0.81223% raw:767 6.78761% + CannonTrooper: 163 # 0.61526% raw:581 5.14159% + Chainchomp: 238 # 0.42041% raw:397 3.51327% + Crab: 204 # 0.48925% raw:462 4.08850% + CricketRat: 212 # 0.47230% raw:446 3.94690% + Cucco: 120 # 0.54325% raw:513 4.53982% + Deadrock: 186 # 0.53796% raw:508 4.49558% + Debirando: 154 # 0.65127% raw:615 5.44248% + DebirandoPit: 154 # 0.65127% raw:615 5.44248% + FakeMasterSword: 120 # 0.81223% raw:767 6.78761% + FireballZora: 165 # 0.60679% raw:573 5.07080% + FirebarCCW: 49 # 2.02688% raw:1914 16.93805% + FirebarCW: 49 # 2.02688% raw:1914 16.93805% + Firesnake: 49 # 2.02688% raw:1914 16.93805% + FloatingSkull: 49 # 2.02688% raw:1914 16.93805% + FloppingFish: 30 # 5.40077% raw:5100 45.13274% + Freezor: 454 # 0.22027% raw:208 1.84071% + Geldman: 445 # 0.22450% raw:212 1.87611% + Gibdo: 150 # 0.40453% raw:382 3.38053% + Gibo: 294 # 0.33993% raw:321 2.84071% + GreenBushGuard: 325 # 0.30816% raw:291 2.57522% + GreenEyegoreMimic: 175 # 0.57291% raw:541 4.78761% + GreenGuard: 55 # 1.80237% raw:1702 15.06195% + GreenKnifeGuard: 621 # 0.16096% raw:152 1.34513% + GreenZirro: 180 # 0.55702% raw:526 4.65487% + HardhatBeetle: 109 # 0.91495% raw:864 7.64602% + Hinox: 140 # 0.71269% raw:673 5.95575% + Hoarder: 123 # 0.81223% raw:767 6.78761% + Hoarder2: 123 # 0.81223% raw:767 6.78761% + Hover: 150 # 0.42147% raw:398 3.52212% + Keese: 212 # 0.47230% raw:446 3.94690% + Kodongo: 463 # 0.21603% raw:204 1.80531% + Kyameron: 237 # 0.42147% raw:398 3.52212% + Landmine: 19 # 5.40077% raw:5100 45.13274% + Leever: 154 # 0.65127% raw:615 5.44248% + Lynel: 559 # 0.17897% raw:169 1.49558% + MiniHelmasaur: 109 # 0.91495% raw:864 7.64602% + MiniMoldorm: 109 # 0.91495% raw:864 7.64602% + Moblin: 367 # 0.27216% raw:257 2.27434% + Octoballoon: 204 # 0.48925% raw:462 4.08850% + Octorok: 165 # 0.60679% raw:573 5.07080% + Octorok4Way: 204 # 0.48925% raw:462 4.08850% + Pengator: 300 # 0.22027% raw:208 1.84071% + Pikit: 180 # 0.55702% raw:526 4.65487% + Poe: 284 # 0.35264% raw:333 2.94690% + Pokey: 238 # 0.42041% raw:397 3.51327% + Popo: 155 # 0.64703% raw:611 5.40708% + Popo2: 155 # 0.64703% raw:611 5.40708% + Raven: 94 # 1.06109% raw:1002 8.86726% + RedBari: 49 # 2.02688% raw:1914 16.93805% + RedBushGuard: 163 # 0.61526% raw:581 5.14159% + RedEyegoreMimic: 175 # 0.57291% raw:541 4.78761% + RedJavelinGuard: 163 # 0.61526% raw:581 5.14159% + RedSpearGuard: 44 # 2.28527% raw:2158 19.09735% + RedZazak: 294 # 0.33993% raw:321 2.84071% + RollerHorizontalLeft: 238 # 0.42041% raw:397 3.51327% + RollerHorizontalRight: 238 # 0.42041% raw:397 3.51327% + RollerVerticalDown: 238 # 0.42041% raw:397 3.51327% + RollerVerticalUp: 238 # 0.42041% raw:397 3.51327% + Ropa: 140 # 0.71269% raw:673 5.95575% + Sluggula: 360 # 0.27745% raw:262 2.31858% + Snake: 212 # 0.47230% raw:446 3.94690% + Snapdragon: 562 # 0.17791% raw:168 1.48673% + SparkCCW: 49 # 2.02688% raw:1914 16.93805% + SparkCW: 49 # 2.02688% raw:1914 16.93805% + SpikeBlock: 55 # 1.82885% raw:1727 15.28319% + Stal: 19 # 5.40077% raw:5100 45.13274% + Stalfos: 49 # 2.02688% raw:1914 16.93805% + StalfosKnight: 87 # 1.15428% raw:1090 9.64602% + Statue: 30 # 1.82885% raw:1727 15.28319% + Swamola: 402 # 0.24886% raw:235 2.07965% + Tektite: 186 # 0.53796% raw:508 4.49558% + Terrorpin: 463 # 0.21603% raw:204 1.80531% + Thief: 100 # 0.60997% raw:576 5.09735% + Toppo: 123 # 0.81223% raw:767 6.78761% + UsainBolt: 44 # 2.28527% raw:2158 19.09735% + Vulture: 445 # 0.22450% raw:212 1.87611% + Wallmaster: 247 # 0.40453% raw:382 3.38053% + Wizzrobe: 306 # 0.32722% raw:309 2.73451% + Zora: 609 # 0.16414% raw:155 1.37168% + Zoro: 80 # 1.15428% raw:1090 9.64602% +OW: # Total 117724 + AntiFairy: 60 # 0.97346% raw:1146 10.14159% + AntiFairyCircle: 60 # 0.97346% raw:1146 10.14159% + ArmosStatue: 144 # 0.69570% raw:819 7.24779% + Babasu: 100 # 0.84605% raw:996 8.81416% + BallNChain: 121 # 0.82651% raw:973 8.61062% + Beamos: 184 # 0.54364% raw:640 5.66372% + BigSpike: 70 # 0.97346% raw:1146 10.14159% + Blob: 118 # 0.84605% raw:996 8.81416% + BlueArcher: 291 # 0.34403% raw:405 3.58407% + BlueBari: 47 # 2.11767% raw:2493 22.06195% + BlueGuard: 39 # 2.56617% raw:3021 26.73451% + BlueZazak: 247 # 0.40519% raw:477 4.22124% + BlueZirro: 158 # 0.63369% raw:746 6.60177% + BluesainBolt: 111 # 0.90381% raw:1064 9.41593% + BombGuard: 121 # 0.82651% raw:973 8.61062% + Bumper: 103 # 0.97346% raw:1146 10.14159% + BunnyBeam: 19 # 5.26656% raw:6200 54.86726% + Buzzblob: 86 # 1.15609% raw:1361 12.04425% + CannonTrooper: 121 # 0.82651% raw:973 8.61062% + Chainchomp: 226 # 0.44341% raw:522 4.61947% + Crab: 163 # 0.61500% raw:724 6.40708% + CricketRat: 236 # 0.42387% raw:499 4.41593% + Cucco: 140 # 0.60396% raw:711 6.29204% + Deadrock: 144 # 0.69570% raw:819 7.24779% + Debirando: 164 # 0.60905% raw:717 6.34513% + DebirandoPit: 164 # 0.60905% raw:717 6.34513% + FakeMasterSword: 120 # 1.15609% raw:1361 12.04425% + FireballZora: 119 # 0.84350% raw:993 8.78761% + FirebarCCW: 47 # 2.11767% raw:2493 22.06195% + FirebarCW: 47 # 2.11767% raw:2493 22.06195% + Firesnake: 47 # 2.11767% raw:2493 22.06195% + FloatingSkull: 47 # 2.11767% raw:2493 22.06195% + FloppingFish: 30 # 5.26656% raw:6200 54.86726% + Freezor: 692 # 0.14441% raw:170 1.50442% + Geldman: 229 # 0.43746% raw:515 4.55752% + Gibdo: 300 # 0.15545% raw:183 1.61947% + Gibo: 247 # 0.40519% raw:477 4.22124% + GreenBushGuard: 291 # 0.34403% raw:405 3.58407% + GreenEyegoreMimic: 171 # 0.58527% raw:689 6.09735% + GreenGuard: 48 # 2.06330% raw:2429 21.49558% + GreenKnifeGuard: 589 # 0.16989% raw:200 1.76991% + GreenZirro: 158 # 0.63369% raw:746 6.60177% + HardhatBeetle: 113 # 0.88682% raw:1044 9.23894% + Hinox: 123 # 0.81462% raw:959 8.48673% + Hoarder: 86 # 1.15609% raw:1361 12.04425% + Hoarder2: 86 # 1.15609% raw:1361 12.04425% + Hover: 200 # 0.32449% raw:382 3.38053% + Keese: 236 # 0.42387% raw:499 4.41593% + Kodongo: 346 # 0.28881% raw:340 3.00885% + Kyameron: 308 # 0.32449% raw:382 3.38053% + Landmine: 19 # 5.26656% raw:6200 54.86726% + Leever: 164 # 0.60905% raw:717 6.34513% + Lynel: 325 # 0.30750% raw:362 3.20354% + MiniHelmasaur: 113 # 0.88682% raw:1044 9.23894% + MiniMoldorm: 113 # 0.88682% raw:1044 9.23894% + Moblin: 303 # 0.33043% raw:389 3.44248% + Octoballoon: 163 # 0.61500% raw:724 6.40708% + Octorok: 119 # 0.84350% raw:993 8.78761% + Octorok4Way: 163 # 0.61500% raw:724 6.40708% + Pengator: 400 # 0.14441% raw:170 1.50442% + Pikit: 158 # 0.63369% raw:746 6.60177% + Poe: 202 # 0.49608% raw:584 5.16814% + Pokey: 226 # 0.44341% raw:522 4.61947% + Popo: 184 # 0.54364% raw:640 5.66372% + Popo2: 184 # 0.54364% raw:640 5.66372% + Raven: 65 # 1.53325% raw:1805 15.97345% + RedBari: 47 # 2.11767% raw:2493 22.06195% + RedBushGuard: 121 # 0.82651% raw:973 8.61062% + RedEyegoreMimic: 171 # 0.58527% raw:689 6.09735% + RedJavelinGuard: 121 # 0.82651% raw:973 8.61062% + RedSpearGuard: 39 # 2.56617% raw:3021 26.73451% + RedZazak: 247 # 0.40519% raw:477 4.22124% + RollerHorizontalLeft: 226 # 0.44341% raw:522 4.61947% + RollerHorizontalRight: 226 # 0.44341% raw:522 4.61947% + RollerVerticalDown: 226 # 0.44341% raw:522 4.61947% + RollerVerticalUp: 226 # 0.44341% raw:522 4.61947% + Ropa: 123 # 0.81462% raw:959 8.48673% + Sluggula: 443 # 0.22595% raw:266 2.35398% + Snake: 236 # 0.42387% raw:499 4.41593% + Snapdragon: 526 # 0.19028% raw:224 1.98230% + SparkCCW: 47 # 2.11767% raw:2493 22.06195% + SparkCW: 47 # 2.11767% raw:2493 22.06195% + SpikeBlock: 103 # 0.97346% raw:1146 10.14159% + Stal: 19 # 5.26656% raw:6200 54.86726% + Stalfos: 47 # 2.11767% raw:2493 22.06195% + StalfosKnight: 118 # 0.84605% raw:996 8.81416% + Statue: 60 # 0.97346% raw:1146 10.14159% + Swamola: 265 # 0.37715% raw:444 3.92920% + Tektite: 144 # 0.69570% raw:819 7.24779% + Terrorpin: 346 # 0.28881% raw:340 3.00885% + Thief: 100 # 0.39244% raw:462 4.08850% + Toppo: 86 # 1.15609% raw:1361 12.04425% + UsainBolt: 39 # 2.56617% raw:3021 26.73451% + Vulture: 229 # 0.43746% raw:515 4.55752% + Wallmaster: 643 # 0.15545% raw:183 1.61947% + Wizzrobe: 345 # 0.28966% raw:341 3.01770% + Zora: 558 # 0.17923% raw:211 1.86726% + Zoro: 100 # 0.84605% raw:996 8.81416% \ No newline at end of file diff --git a/source/enemizer/sheet_weight.yaml b/source/enemizer/sheet_weight.yaml new file mode 100644 index 00000000..3337ef89 --- /dev/null +++ b/source/enemizer/sheet_weight.yaml @@ -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?) diff --git a/source/enemizer/uw_enemy_deny.yaml b/source/enemizer/uw_enemy_deny.yaml deleted file mode 100644 index 7aaa41c0..00000000 --- a/source/enemizer/uw_enemy_deny.yaml +++ /dev/null @@ -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" \ No newline at end of file diff --git a/source/overworld/EntranceShuffle2.py b/source/overworld/EntranceShuffle2.py index 77790bda..08a53237 100644 --- a/source/overworld/EntranceShuffle2.py +++ b/source/overworld/EntranceShuffle2.py @@ -1866,7 +1866,9 @@ mandatory_connections = [('Links House S&Q', 'Links House'), ('Lumberjack Tree (top to bottom)', 'Lumberjack Tree (bottom)'), ('Death Mountain Return Cave E', 'Death Mountain Return Cave (right)'), ('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 Peak Drop', 'Spectacle Rock Cave (Bottom)'), ('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', 'Big Bomb Shop': 'Big Bomb Shop', '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 (East)': 'West Death Mountain (Bottom)', '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 Exit (Top)': 'Death Mountain Return Ledge', '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 Entrance': 'Bottom of Pyramid', 'Pyramid Exit': 'Hyrule Castle Courtyard' @@ -2336,7 +2338,7 @@ indirect_connections = { 'West Dark World': 'Pyramid Fairy', 'South Dark World': 'Pyramid Fairy', 'Light World': 'Pyramid Fairy', - 'Old Man Cave': 'Old Man S&Q' + 'Old Man Cave (East)': 'Old Man S&Q' } # format: # Key=Name diff --git a/source/rom/DataTables.py b/source/rom/DataTables.py index 2d891c20..8cfb3c32 100644 --- a/source/rom/DataTables.py +++ b/source/rom/DataTables.py @@ -1,13 +1,13 @@ 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 sprite_translation from source.dungeon.RoomHeader import init_room_headers from source.dungeon.RoomList import Room0127 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): @@ -39,12 +39,24 @@ class DataTables: # enemizer conditions 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]} - # todo: ow_denials - weights = load_yaml(['source', 'enemizer', 'enemy_weight.yaml']) + for denial in denial_data['OwGeneralDeny']: + 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.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): if self.pot_secret_table.size() > 0x11c0: