Enemizer refinement

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

View File

@@ -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 = {}, {}

View File

@@ -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

View File

@@ -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'])

View File

@@ -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)

View File

@@ -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

View File

@@ -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}

View File

@@ -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)

View File

@@ -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

View File

@@ -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]

View File

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

View File

@@ -1,198 +1,198 @@
UW: # Total 82753
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
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%

View File

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

View File

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

View File

@@ -1866,7 +1866,9 @@ mandatory_connections = [('Links House S&Q', 'Links House'),
('Lumberjack Tree (top to bottom)', 'Lumberjack Tree (bottom)'),
('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

View File

@@ -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: