diff --git a/ItemList.py b/ItemList.py index 3e98a693..a5c895c2 100644 --- a/ItemList.py +++ b/ItemList.py @@ -509,7 +509,7 @@ def set_up_take_anys(world, player, skip_adjustments=False): else: if world.shopsanity[player] and not skip_adjustments: world.itempool.append(ItemFactory('Rupees (300)', player)) - old_man_take_any.shop.add_inventory(0, 'Rupees (300)', 0, 0, create_location=world.shopsanity[player]) + old_man_take_any.shop.add_inventory(0, 'Rupees (300)', 0, 0, create_location=True) take_any_type = ShopType.Shop if world.shopsanity[player] else ShopType.TakeAny for num in range(4): @@ -524,7 +524,7 @@ def set_up_take_anys(world, player, skip_adjustments=False): take_any.shop = Shop(take_any, room_id, take_any_type, 0xE3, True, not world.shopsanity[player], 33 + num*2) world.shops[player].append(take_any.shop) take_any.shop.add_inventory(0, 'Blue Potion', 0, 0, create_location=world.shopsanity[player]) - take_any.shop.add_inventory(1, 'Boss Heart Container', 0, 0, create_location=world.shopsanity[player]) + take_any.shop.add_inventory(1, 'Boss Heart Container', 0, 0, create_location=True) if world.shopsanity[player] and not skip_adjustments: world.itempool.append(ItemFactory('Blue Potion', player)) world.itempool.append(ItemFactory('Boss Heart Container', player)) diff --git a/Rom.py b/Rom.py index 2ddf48b2..aa2f47c6 100644 --- a/Rom.py +++ b/Rom.py @@ -40,7 +40,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'cd3a693a5f772e83cdad5dd2b53d5586' +RANDOMIZERBASEHASH = 'f3cc032fa0a1ccf9624d0fb3e9926c3b' class JsonRom(object): @@ -737,7 +737,7 @@ def patch_rom(world, rom, player, team, is_mystery=False): rom.write_byte(cr_pc+0x1e, 0xEE) # slash rom.write_byte(cr_pc+0x1f, thousands_bot) # modify stat config - stat_address = 0x2297B2 # 0x23B969 - old + stat_address = 0x2397B2 # 0x23B969 - old stat_pc = snes_to_pc(stat_address) rom.write_byte(stat_pc, 0xa9) # change to pos 21 (from b1) rom.write_byte(stat_pc+2, 0xc0) # change to 12 bits (from a0) diff --git a/data/base2current.bps b/data/base2current.bps index f1aa6074..947bf97a 100644 Binary files a/data/base2current.bps and b/data/base2current.bps differ diff --git a/resources/app/cli/args.json b/resources/app/cli/args.json index 49aa032b..b1e5a510 100644 --- a/resources/app/cli/args.json +++ b/resources/app/cli/args.json @@ -474,9 +474,7 @@ "shuffleenemies": { "choices": [ "none", - "shuffled", - "random", - "legacy" + "shuffled" ] }, "enemy_health": { diff --git a/source/dungeon/EnemyList.py b/source/dungeon/EnemyList.py index 360dd9b6..0325fba3 100644 --- a/source/dungeon/EnemyList.py +++ b/source/dungeon/EnemyList.py @@ -283,7 +283,7 @@ class SpriteType(FastEnum): def init_enemy_stats(): stats = { EnemySprite.Raven: EnemyStats(EnemySprite.Raven, False, False, (6, 2), health=(4, 8), dmg=(1, 8), dmask=0x80), - EnemySprite.Vulture: EnemyStats(EnemySprite.Vulture, False, True, 6, health=6, dmg=3, dmask=0x80), + EnemySprite.Vulture: EnemyStats(EnemySprite.Vulture, False, False, 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), EnemySprite.Octorok: EnemyStats(EnemySprite.Octorok, False, True, 2, health=(2, 4), dmg=(3, 5)), @@ -301,7 +301,7 @@ def init_enemy_stats(): EnemySprite.ThievesTownGrate: EnemyStats(EnemySprite.ThievesTownGrate, True, dmg=0, dmask=0x40), EnemySprite.AntiFairy: EnemyStats(EnemySprite.AntiFairy, False, False, dmg=4), EnemySprite.Wiseman: EnemyStats(EnemySprite.Wiseman, True, dmg=0), - EnemySprite.Hoarder: EnemyStats(EnemySprite.Hoarder, False, False, health=2, dmg=2), + EnemySprite.Hoarder: EnemyStats(EnemySprite.Hoarder, False, True, health=2, dmg=2), EnemySprite.MiniMoldorm: EnemyStats(EnemySprite.MiniMoldorm, False, True, 2, health=3, dmg=3), EnemySprite.Poe: EnemyStats(EnemySprite.Poe, False, False, 6, health=8, dmg=5, dmask=0x80), EnemySprite.Smithy: EnemyStats(EnemySprite.Smithy, True, dmg=0), @@ -340,7 +340,7 @@ def init_enemy_stats(): EnemySprite.BonkItem: EnemyStats(EnemySprite.BonkItem, True, dmg=0), EnemySprite.KidInKak: EnemyStats(EnemySprite.KidInKak, True, dmg=0), EnemySprite.OldSnitch: EnemyStats(EnemySprite.OldSnitch, True, dmg=0), - EnemySprite.Hoarder2: EnemyStats(EnemySprite.Hoarder2, False, False, health=2, dmg=2), + EnemySprite.Hoarder2: EnemyStats(EnemySprite.Hoarder2, False, True, health=2, dmg=2), EnemySprite.TutorialGuard: EnemyStats(EnemySprite.TutorialGuard, True, dmg=2), EnemySprite.LightningGate: EnemyStats(EnemySprite.LightningGate, True, dmg=0), diff --git a/source/enemizer/Enemizer.py b/source/enemizer/Enemizer.py index 9181add5..2460c7fa 100644 --- a/source/enemizer/Enemizer.py +++ b/source/enemizer/Enemizer.py @@ -405,7 +405,7 @@ def randomize_enemies(world, player): if world.enemy_shuffle[player] != 'none': data_tables = world.data_tables[player] custom_uw, custom_ow = {}, {} - enemy_map = world.customizer.get_enemies() + enemy_map = world.customizer.get_enemies() if world.customizer else None if enemy_map and player in enemy_map: if 'Underworld' in enemy_map[player]: custom_uw = enemy_map[player]['Underworld'] @@ -430,6 +430,10 @@ def randomize_enemies(world, player): for sprite, stat in stats.items(): if sprite == EnemySprite.Octorok4Way: stat.health = stats[EnemySprite.Octorok].health # these guys share data + elif sprite == EnemySprite.GreenMimic: + stat.health = stats[EnemySprite.GreenEyegoreMimic].health # these share data + elif sprite == EnemySprite.RedMimic: + stat.health = stats[EnemySprite.RedEyegoreMimic].health # these share data elif sprite not in skip_sprites: if isinstance(stat.health, tuple): stat.health = random.randint(min_h, max_h), random.randint(min_h, max_h) @@ -441,6 +445,10 @@ def randomize_enemies(world, player): for sprite, stat in stats.items(): if sprite == EnemySprite.Octorok4Way: stat.damage = stats[EnemySprite.Octorok].damage # these guys share data + elif sprite == EnemySprite.GreenMimic: + stat.damage = stats[EnemySprite.GreenEyegoreMimic].damage # these share data + elif sprite == EnemySprite.RedMimic: + stat.damage = stats[EnemySprite.RedEyegoreMimic].damage # these share data elif sprite not in skip_sprites: if isinstance(stat.damage, tuple): stat.damage = random.randint(0, 8), random.randint(0, 8) @@ -477,11 +485,12 @@ def write_enemy_shuffle_settings(world, player, rom): mimic_room.layer1[40].data[1] = 0x9C mimic_room.layer1[45].data[1] = 0xB0 # block adjust 1 mimic_room.layer1[47].data[1] = 0xD0 # block adjust 2 - if world.enemy_shuffle[player] == 'random': - rom.write_byte(snes_to_pc(0x368100), 1) # randomize bushes + # random tile pattern pattern_name, tile_pattern = random.choice(tile_patterns) rom.write_byte(snes_to_pc(0x9BA1D), len(tile_pattern)) for idx, pair in enumerate(tile_pattern): rom.write_byte(snes_to_pc(0x09BA2A + idx), (pair[0] + 3) * 16) rom.write_byte(snes_to_pc(0x09BA40 + idx), (pair[1] + 4) * 16) + if world.enemy_shuffle[player] == 'random': + rom.write_byte(snes_to_pc(0x368100), 1) # randomize bushes diff --git a/source/enemizer/SpriteSheets.py b/source/enemizer/SpriteSheets.py index 717a51bf..a1b681f3 100644 --- a/source/enemizer/SpriteSheets.py +++ b/source/enemizer/SpriteSheets.py @@ -161,7 +161,7 @@ WallmasterValidRooms = { def init_sprite_requirements(): reqs = [ SpriteRequirement(EnemySprite.Raven).no_drop().sub_group(3, [0x11, 0x19]).exclude(NoFlyingRooms), - SpriteRequirement(EnemySprite.Vulture).sub_group(2, 0x12).exclude(NoFlyingRooms), + SpriteRequirement(EnemySprite.Vulture).no_drop().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]), @@ -177,7 +177,7 @@ def init_sprite_requirements(): SpriteRequirement(EnemySprite.AntiFairy).no_drop().sub_group(3, [0x52, 0x53]) .exclude(NoFlyingRooms).exclude({0x40}), # no anti-fairies in aga tower bridge room SpriteRequirement(EnemySprite.Wiseman).affix().sub_group(2, 0x4c), - SpriteRequirement(EnemySprite.Hoarder).no_drop().sub_group(3, 0x11).exclude({0x10c}), + SpriteRequirement(EnemySprite.Hoarder).sub_group(3, 0x11).exclude({0x10c}), SpriteRequirement(EnemySprite.MiniMoldorm).sub_group(1, 0x1e), SpriteRequirement(EnemySprite.Poe).no_drop().sub_group(3, 0x15).exclude(NoFlyingRooms), SpriteRequirement(EnemySprite.Smithy).affix().sub_group(1, 0x1d).sub_group(3, 0x15), @@ -209,7 +209,7 @@ def init_sprite_requirements(): SpriteRequirement(EnemySprite.MagicBat).affix().sub_group(3, 0x1d), SpriteRequirement(EnemySprite.KidInKak).affix().group(6), SpriteRequirement(EnemySprite.OldSnitch).affix().group(6), - SpriteRequirement(EnemySprite.Hoarder2).no_drop().sub_group(3, 0x11).exclude({0x10c}), + SpriteRequirement(EnemySprite.Hoarder2).sub_group(3, 0x11).exclude({0x10c}), SpriteRequirement(EnemySprite.TutorialGuard).affix(), SpriteRequirement(EnemySprite.LightningGate).affix().sub_group(3, 0x3f), SpriteRequirement(EnemySprite.BlueGuard).sub_group(1, [0xd, 0x49]), @@ -257,7 +257,7 @@ 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).sub_group(2, [0x1c, 0x24]), + SpriteRequirement(EnemySprite.Keese).no_drop().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]), @@ -408,8 +408,9 @@ def init_sprite_requirements(): return simple +# sheet 1 and 1c have group 4 modified from vanilla for murahdahla vanilla_sheets = [ - (0x00, 0x49, 0x00, 0x00), (0x46, 0x49, 0x0C, 0x1D), (0x48, 0x49, 0x13, 0x1D), (0x46, 0x49, 0x13, 0x0E), + (0x00, 0x49, 0x00, 0x00), (0x46, 0x49, 0x0C, 0x3F), (0x48, 0x49, 0x13, 0x1D), (0x46, 0x49, 0x13, 0x0E), (0x48, 0x49, 0x0C, 0x11), (0x48, 0x49, 0x0C, 0x10), (0x4F, 0x49, 0x4A, 0x50), (0x0E, 0x49, 0x4A, 0x11), (0x46, 0x49, 0x12, 0x00), (0x00, 0x49, 0x00, 0x50), (0x00, 0x49, 0x00, 0x11), (0x48, 0x49, 0x0C, 0x00), (0x00, 0x00, 0x37, 0x36), (0x48, 0x49, 0x4C, 0x11), (0x5D, 0x2C, 0x0C, 0x44), (0x00, 0x00, 0x4E, 0x00), @@ -417,7 +418,7 @@ vanilla_sheets = [ (0x0F, 0x00, 0x12, 0x10), (0x00, 0x00, 0x00, 0x4C), (0x00, 0x0D, 0x17, 0x00), (0x16, 0x0D, 0x17, 0x1B), (0x16, 0x0D, 0x17, 0x14), (0x15, 0x0D, 0x17, 0x15), (0x16, 0x0D, 0x18, 0x19), (0x16, 0x0D, 0x17, 0x19), (0x16, 0x0D, 0x00, 0x00), (0x16, 0x0D, 0x18, 0x1B), (0x0F, 0x49, 0x4A, 0x11), (0x4B, 0x2A, 0x5C, 0x15), - (0x16, 0x49, 0x17, 0x1D), (0x00, 0x00, 0x00, 0x15), (0x16, 0x0D, 0x17, 0x10), (0x16, 0x49, 0x12, 0x00), + (0x16, 0x49, 0x17, 0x3F), (0x00, 0x00, 0x00, 0x15), (0x16, 0x0D, 0x17, 0x10), (0x16, 0x49, 0x12, 0x00), (0x16, 0x49, 0x0C, 0x11), (0x00, 0x00, 0x12, 0x10), (0x16, 0x0D, 0x00, 0x11), (0x16, 0x49, 0x0C, 0x00), (0x16, 0x0D, 0x4C, 0x11), (0x0E, 0x0D, 0x4A, 0x11), (0x16, 0x1A, 0x17, 0x1B), (0x4F, 0x34, 0x4A, 0x50), @@ -679,7 +680,7 @@ def setup_required_overworld_groups(sheets): sheets[7].add_sprite_to_sheet([None, None, None, 17], {0xA, 0x9A}) # DM Foothills? (pre/post-Aga) sheets[4].add_sprite_to_sheet([None, None, None, None], {0xF, 0x9F}) # Waterfall of wishing (pre/post-Aga) sheets[3].add_sprite_to_sheet([None, None, None, 14], {0x14, 0xA4}) # Graveyard (pre/post-Aga) - sheets[1].add_sprite_to_sheet([None, None, 76, 63], {0x1B, 0xAB}) # Hyrule Castle (pre/post-Aga) + sheets[1].add_sprite_to_sheet([None, None, 76, 0x3F], {0x1B, 0xAB}) # Hyrule Castle (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) diff --git a/source/enemizer/TilePattern.py b/source/enemizer/TilePattern.py index c5584722..5dc00020 100644 --- a/source/enemizer/TilePattern.py +++ b/source/enemizer/TilePattern.py @@ -15,64 +15,64 @@ tile_patterns = [ (6, 6), (4, 2), (8, 3), (1, 3), (3, 6), (8, 2)]), ('metroid', [(2, 7), (7, 7), (1, 3), (3, 1), (8, 3), (1, 6), (4, 5), (5, 3), (1, 4), (6, 1), (6, 4), (8, 6), (3, 4), (7, 5), (4, 1), (5, 5), (2, 2), (2, 5), (7, 2), (5, 1), (4, 3), (8, 4)]), - ('moldorm vertical', [(5, 1), (6, 0), (7, 2), (5, 4), (4, 4), (4, 1), (3, 5), (5, 6), (3, 2), (6, 6), (7, 5), - (6, 1), (4, 8), (3, 3), (5, 7), (3, 8), (2, 7), (6, 4), (4, 0), (3, 6), (7, 3), (4, 6)]), - ('scream emoji', [(2, 2), (7, 2), (2, 3), (7, 3), (1, 7), (8, 7), (3, 2), (6, 2), (2, 6), (7, 6), (3, 3), (6, 3), - (2, 7), (7, 7), (4, 5), (5, 7), (5, 5), (4, 7), (4, 6), (5, 6), (2, 5), (7, 5)]), + # ('moldorm vertical', [(5, 1), (6, 0), (7, 2), (5, 4), (4, 4), (4, 1), (3, 5), (5, 6), (3, 2), (6, 6), (7, 5), + # (6, 1), (4, 8), (3, 3), (5, 7), (3, 8), (2, 7), (6, 4), (4, 0), (3, 6), (7, 3), (4, 6)]), + # ('scream emoji', [(2, 2), (7, 2), (2, 3), (7, 3), (1, 7), (8, 7), (3, 2), (6, 2), (2, 6), (7, 6), (3, 3), (6, 3), + # (2, 7), (7, 7), (4, 5), (5, 7), (5, 5), (4, 7), (4, 6), (5, 6), (2, 5), (7, 5)]), ('mario mushroom', [(3, 7), (4, 7), (5, 7), (3, 4), (4, 4), (5, 4), (3, 1), (4, 1), (5, 1), (2, 2), (6, 6), (6, 2), (2, 6), (1, 3), (7, 5), (7, 3), (1, 5), (1, 4), (6, 5), (7, 4), (2, 5)]), ('moldorm', [(1, 3), (2, 5), (3, 6), (5, 5), (7, 5), (7, 2), (5, 3), (3, 2), (2, 4), (1, 5), (5, 4), (6, 2), (7, 4), (8, 1), (8, 4), (4, 2), (9, 2), (2, 3), (4, 6), (9, 3), (7, 3), (6, 6)]), - ('thinking emoji', [(5, 6), (6, 4), (4, 3), (3, 1), (2, 6), (5, 3), (6, 6), (6, 1), (3, 0), (4, 7), (2, 4), (3, 8), - (6, 0), (3, 7), (3, 3)]), + # ('thinking emoji', [(5, 6), (6, 4), (4, 3), (3, 1), (2, 6), (5, 3), (6, 6), (6, 1), (3, 0), (4, 7), (2, 4), + # (3, 8), (6, 0), (3, 7), (3, 3)]), ('triangle', [(1, 5), (7, 5), (4, 2), (3, 5), (5, 5), (4, 3), (2, 4), (6, 4), (5, 3), (2, 5), (6, 5), (3, 3), (4, 5), (5, 4), (3, 4), (4, 4)]), ('heart', [(8, 3), (2, 3), (5, 7), (2, 4), (8, 4), (4, 6), (6, 6), (8, 2), (2, 2), (5, 2), (7, 1), (3, 1), (3, 5), (6, 1), (7, 5), (4, 1)]), ('arrghus', [(4, 1), (6, 2), (2, 3), (4, 3), (3, 4), (4, 5), (5, 6), (3, 7), (1, 4), (2, 5), (5, 1), (6, 3), (2, 2), (7, 4), (5, 4), (4, 4), (6, 5), (3, 6), (5, 7), (3, 1), (3, 5), (5, 5)]), - ('cowboy smile', [(1, 2), (3, 3), (4, 1), (3, 5), (5, 8), (6, 7), (5, 2), (7, 2), (1, 3), (2, 7), (5, 5), (5, 3), - (3, 2), (4, 3), (7, 3), (2, 3), (4, 2), (3, 8), (4, 8), (6, 3)]), + # ('cowboy smile', [(1, 2), (3, 3), (4, 1), (3, 5), (5, 8), (6, 7), (5, 2), (7, 2), (1, 3), (2, 7), (5, 5), (5, 3), + # (3, 2), (4, 3), (7, 3), (2, 3), (4, 2), (3, 8), (4, 8), (6, 3)]), ('clown face happy', [(2, 2), (7, 6), (7, 2), (2, 6), (3, 3), (6, 7), (6, 3), (3, 7), (2, 3), (5, 6), (7, 3), (4, 6), (2, 5), (6, 6), (7, 5), (3, 6), (4, 5), (5, 7), (5, 5), (4, 7), (3, 2), (6, 2)]), ('generic happy face', [(2, 1), (6, 3), (6, 5), (4, 6), (2, 2), (6, 6), (2, 3), (3, 5), (3, 2), (3, 3), (6, 2), (5, 5), (1, 2), (3, 6), (7, 5), (7, 1), (4, 5), (8, 2), (5, 6), (2, 5), (7, 3), (7, 2)]), - ('YMCA', [(1, 2), (2, 3), (5, 2), (7, 2), (6, 3), (7, 4), (2, 4), (5, 4), (6, 2), (3, 2), (5, 3), (7, 3), (7, 6), - (4, 8), (2, 7), (6, 7), (4, 6), (8, 8), (8, 7), (3, 8), (3, 6), (6, 8)]), - ('ze', [(5, 7), (6, 7), (7, 7), (1, 3), (2, 3), (3, 3), (5, 5), (6, 5), (7, 5), (1, 7), (2, 7), (3, 7), (5, 3), - (6, 3), (7, 3), (3, 4), (2, 5), (1, 6), (5, 4), (5, 6)]), - ('space invader metroid', [(4, 1), (2, 3), (3, 5), (5, 6), (7, 6), (7, 3), (2, 8), (3, 2), (1, 7), (1, 4), (6, 2), - (8, 5), (7, 8), (4, 6), (8, 7), (5, 1), (2, 6), (8, 4), (1, 5), (6, 5)]), + # ('YMCA', [(1, 2), (2, 3), (5, 2), (7, 2), (6, 3), (7, 4), (2, 4), (5, 4), (6, 2), (3, 2), (5, 3), (7, 3), (7, 6), + # (4, 8), (2, 7), (6, 7), (4, 6), (8, 8), (8, 7), (3, 8), (3, 6), (6, 8)]), + # ('ze', [(5, 7), (6, 7), (7, 7), (1, 3), (2, 3), (3, 3), (5, 5), (6, 5), (7, 5), (1, 7), (2, 7), (3, 7), (5, 3), + # (6, 3), (7, 3), (3, 4), (2, 5), (1, 6), (5, 4), (5, 6)]), + # ('space invader metroid', [(4, 1), (2, 3), (3, 5), (5, 6), (7, 6), (7, 3), (2, 8), (3, 2), (1, 7), (1, 4), (6, 2), + # (8, 5), (7, 8), (4, 6), (8, 7), (5, 1), (2, 6), (8, 4), (1, 5), (6, 5)]), ('screw attack', [(2, 7), (7, 4), (6, 1), (3, 7), (2, 4), (5, 6), (4, 2), (5, 4), (3, 6), (7, 1), (3, 3), (6, 4), (4, 6), (4, 3), (6, 2), (3, 4), (6, 5), (5, 2), (4, 5), (4, 4), (5, 3), (5, 5)]), ('vanilla wrong order', [(7, 2), (7, 4), (7, 5), (7, 7), (6, 3), (6, 5), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (3, 3), (3, 5), (2, 2), (2, 4), (2, 5), (2, 7)]), ('tile shaped tiles', [(2, 7), (2, 6), (2, 5), (2, 4), (2, 3), (2, 2), (3, 2), (4, 2), (5, 2), (6, 2), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (7, 7), (6, 7), (5, 7), (4, 7), (3, 7), (4, 5), (5, 4)]), - ('panda shocked emoji', [(7, 3), (7, 4), (3, 3), (3, 4), (5, 5), (5, 6), (5, 7), (4, 6), (4, 7), (6, 7), (6, 6), - (8, 6), (8, 7), (8, 8), (2, 8), (2, 7), (2, 6), (2, 1), (3, 1), (7, 1), (8, 1), (5, 8)]), + # ('panda shocked emoji', [(7, 3), (7, 4), (3, 3), (3, 4), (5, 5), (5, 6), (5, 7), (4, 6), (4, 7), (6, 7), (6, 6), + # (8, 6), (8, 7), (8, 8), (2, 8), (2, 7), (2, 6), (2, 1), (3, 1), (7, 1), (8, 1), (5, 8)]), ('JK', [(1, 5), (3, 4), (5, 3), (7, 3), (3, 2), (7, 5), (6, 4), (2, 6), (5, 6), (5, 5), (8, 2), (3, 5), (8, 6), (5, 2), (3, 3), (5, 4)]), ('dollar sign', [(6, 2), (5, 1), (4, 1), (3, 1), (2, 2), (2, 6), (3, 7), (4, 7), (5, 7), (6, 6), (2, 3), (6, 5), (3, 4), (5, 4), (4, 4), (4, 0), (4, 2), (4, 3), (4, 5), (4, 6), (4, 8)]), - ('rupee diagonal', [(1, 4), (1, 5), (1, 6), (1, 7), (2, 7), (3, 7), (4, 7), (5, 6), (6, 5), (7, 4), (7, 3), (7, 2), - (7, 1), (6, 1), (5, 1), (4, 1), (3, 2), (2, 3), (3, 5), (4, 4), (5, 3)]), - ('sword', [(1, 8), (8, 1), (8, 2), (1, 4), (7, 1), (5, 8), (7, 3), (2, 4), (6, 2), (5, 7), (6, 4), (2, 5), (5, 3), - (4, 7), (5, 5), (3, 6), (4, 4), (2, 7), (4, 6), (3, 5)]), + # ('rupee diagonal', [(1, 4), (1, 5), (1, 6), (1, 7), (2, 7), (3, 7), (4, 7), (5, 6), (6, 5), (7, 4), (7, 3), + # (7, 2), (7, 1), (6, 1), (5, 1), (4, 1), (3, 2), (2, 3), (3, 5), (4, 4), (5, 3)]), + # ('sword', [(1, 8), (8, 1), (8, 2), (1, 4), (7, 1), (5, 8), (7, 3), (2, 4), (6, 2), (5, 7), (6, 4), (2, 5), (5, 3), + # (4, 7), (5, 5), (3, 6), (4, 4), (2, 7), (4, 6), (3, 5)]), ('z1 dungeon1', [(4, 6), (6, 4), (2, 4), (3, 7), (4, 3), (5, 7), (3, 2), (5, 4), (3, 5), (5, 5), (4, 2), (6, 3), (4, 7), (3, 4), (7, 3), (4, 5), (4, 4)]), - ('z1 dungeon 4', [(4, 8), (3, 6), (4, 4), (5, 2), (3, 1), (4, 3), (6, 2), (4, 1), (3, 3), (5, 4), (3, 5), (4, 7), - (6, 1), (3, 8), (5, 7), (3, 2), (4, 6), (3, 4), (5, 1)]), - ('LTTP', [(3, 4), (2, 3), (6, 2), (6, 4), (2, 2), (5, 2), (6, 3), (2, 4), (7, 2), (3, 6), (4, 8), (8, 7), (7, 6), - (7, 8), (5, 6), (7, 7), (4, 6), (4, 7), (8, 6)]), + # ('z1 dungeon 4', [(4, 8), (3, 6), (4, 4), (5, 2), (3, 1), (4, 3), (6, 2), (4, 1), (3, 3), (5, 4), (3, 5), (4, 7), + # (6, 1), (3, 8), (5, 7), (3, 2), (4, 6), (3, 4), (5, 1)]), + # ('LTTP', [(3, 4), (2, 3), (6, 2), (6, 4), (2, 2), (5, 2), (6, 3), (2, 4), (7, 2), (3, 6), (4, 8), (8, 7), (7, 6), + # (7, 8), (5, 6), (7, 7), (4, 6), (4, 7), (8, 6)]), ('triple triforce', [(4, 2), (3, 3), (4, 3), (5, 3), (6, 5), (5, 6), (6, 6), (7, 6), (3, 6), (2, 6), (2, 5), (1, 6)]), - ('TILE', [(2, 2), (5, 4), (3, 2), (2, 4), (5, 2), (2, 3), (1, 2), (5, 3), (3, 6), (6, 6), (7, 8), (8, 6), (6, 7), - (3, 8), (4, 8), (3, 7), (6, 8), (7, 6), (7, 7), (8, 8)]), - ('panda thinking emoji', [(2, 1), (3, 1), (6, 2), (7, 2), (6, 3), (3, 2), (3, 3), (3, 5), (4, 5), (5, 5), (2, 6), - (2, 7), (1, 7), (2, 8), (1, 8), (3, 7), (4, 7), (3, 8)]), - ('pokata key', [(3, 1), (4, 2), (5, 3), (4, 4), (4, 6), (5, 7), (6, 8), (4, 8), (6, 6), (3, 3), (5, 1), (4, 5), - (3, 2), (4, 3), (5, 4), (5, 6), (4, 7), (5, 8), (3, 4), (5, 2), (4, 1)]), + # ('TILE', [(2, 2), (5, 4), (3, 2), (2, 4), (5, 2), (2, 3), (1, 2), (5, 3), (3, 6), (6, 6), (7, 8), (8, 6), (6, 7), + # (3, 8), (4, 8), (3, 7), (6, 8), (7, 6), (7, 7), (8, 8)]), + # ('panda thinking emoji', [(2, 1), (3, 1), (6, 2), (7, 2), (6, 3), (3, 2), (3, 3), (3, 5), (4, 5), (5, 5), (2, 6), + # (2, 7), (1, 7), (2, 8), (1, 8), (3, 7), (4, 7), (3, 8)]), + # ('pokata key', [(3, 1), (4, 2), (5, 3), (4, 4), (4, 6), (5, 7), (6, 8), (4, 8), (6, 6), (3, 3), (5, 1), (4, 5), + # (3, 2), (4, 3), (5, 4), (5, 6), (4, 7), (5, 8), (3, 4), (5, 2), (4, 1)]), ('tile shaped tiles randomish', [(4, 2), (2, 2), (7, 5), (5, 4), (3, 2), (4, 5), (4, 7), (7, 7), (2, 7), (2, 4), (7, 2), (2, 5), (5, 7), (7, 4), (5, 2), (6, 2), (3, 7), (2, 3), (7, 6), (6, 7), (7, 3), (2, 6)]), @@ -80,14 +80,23 @@ tile_patterns = [ (4, 2), (2, 3), (7, 2), (8, 2), (8, 3), (4, 3), (6, 3)]), ('bomb', [(3, 3), (5, 7), (6, 4), (2, 6), (5, 3), (3, 7), (6, 6), (2, 4), (7, 2), (2, 5), (4, 7), (5, 1), (4, 2), (6, 5), (6, 1), (4, 3), (8, 2)]), - ('boot', [(6, 7), (8, 6), (5, 5), (5, 3), (8, 2), (3, 6), (4, 8), (7, 8), (8, 4), (6, 2), (2, 7), (3, 8), (4, 5), - (5, 4), (7, 2), (8, 7), (8, 8), (8, 3), (5, 8), (2, 8), (5, 2), (8, 5)]), - ('javalogo', [(5, 8), (4, 8), (3, 8), (2, 8), (1, 7), (5, 6), (4, 6), (3, 6), (2, 6), (1, 5), (7, 7), (8, 6), - (7, 5), (3, 4), (3, 3), (2, 2), (3, 1), (5, 4), (5, 3), (6, 2)]), - ('pokata and ender key', [(3, 1), (5, 3), (4, 4), (4, 6), (5, 7), (6, 8), (4, 8), (6, 6), (3, 3), (5, 1), (4, 5), - (3, 2), (4, 7), (4, 1), (5, 8), (5, 2), (3, 4), (5, 6), (5, 4)]), + # ('boot', [(6, 7), (8, 6), (5, 5), (5, 3), (8, 2), (3, 6), (4, 8), (7, 8), (8, 4), (6, 2), (2, 7), (3, 8), (4, 5), + # (5, 4), (7, 2), (8, 7), (8, 8), (8, 3), (5, 8), (2, 8), (5, 2), (8, 5)]), + # ('javalogo', [(5, 8), (4, 8), (3, 8), (2, 8), (1, 7), (5, 6), (4, 6), (3, 6), (2, 6), (1, 5), (7, 7), (8, 6), + # (7, 5), (3, 4), (3, 3), (2, 2), (3, 1), (5, 4), (5, 3), (6, 2)]), + # ('pokata and ender key', [(3, 1), (5, 3), (4, 4), (4, 6), (5, 7), (6, 8), (4, 8), (6, 6), (3, 3), (5, 1), (4, 5), + # (3, 2), (4, 7), (4, 1), (5, 8), (5, 2), (3, 4), (5, 6), (5, 4)]), ('kitty', [(3, 1), (6, 4), (7, 6), (8, 3), (1, 4), (3, 7), (3, 4), (2, 2), (5, 2), (6, 1), (6, 5), (6, 7), (2, 6), (7, 2), (8, 5), (1, 3), (1, 5), (4, 2), (3, 5), (4, 6), (8, 4), (5, 6)]), ('creeper face', [(3, 7), (4, 5), (5, 4), (5, 6), (3, 3), (2, 2), (3, 2), (7, 3), (6, 7), (4, 6), (6, 3), (7, 2), - (2, 3), (4, 4), (3, 6), (6, 2), (6, 6), (5, 5)]) + (2, 3), (4, 4), (3, 6), (6, 2), (6, 6), (5, 5)]), + ('fast', [7, 7]) ] + + +banned_tiles = { + # these are pots in tower of hera, only ban if pottery is on? + (1, 8), (1, 7), (3, 8), (5, 8), (7, 8), + # these are crystal barrier tiles + # (8, 3), (8, 4), (8, 5) # should I ban these too? bypasses barrier logic? regex \(8, [345]\) +} diff --git a/source/enemizer/enemy_deny.yaml b/source/enemizer/enemy_deny.yaml index b98a4b98..902629d0 100644 --- a/source/enemizer/enemy_deny.yaml +++ b/source/enemizer/enemy_deny.yaml @@ -237,6 +237,7 @@ UwGeneralDeny: - [ 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" + - [ 0x00a9, 1, [ "RollerHorizontalRight", "RollerHorizontalLeft" ] ] - [ 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"