diff --git a/Main.py b/Main.py index 8fdddb6e..010a5798 100644 --- a/Main.py +++ b/Main.py @@ -40,7 +40,7 @@ from source.enemizer.DamageTables import DamageTable from source.enemizer.Enemizer import randomize_enemies from source.rom.DataTables import init_data_tables -version_number = '1.4.1.7' +version_number = '1.4.1.8' version_branch = '-u' __version__ = f'{version_number}{version_branch}' diff --git a/RELEASENOTES.md b/RELEASENOTES.md index bb0a41d2..c7e37651 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -141,6 +141,12 @@ These are now independent of retro mode and have three options: None, Random, an # Patch Notes +* 1.4.1.8u + * HUD: New dungeon indicators based on common abbreviations + * OWG+HMG: EG is allowed to be armed + * Drop Shuffle: Fixed an issue with minor drops counting for the wrong dungeon + * Enemizer: Trinexx ice breath should be properly disabled if Trinexx is located outside of Turtle Rock + * Enemizer: Enemy bans * 1.4.1.7u * Some bugs around Triforce Pieces smoothed out * Enemizer: No exception for mimics/eyegores in vanilla rooms if enemy logic is turned to off diff --git a/Rom.py b/Rom.py index 361729b8..73e48a30 100644 --- a/Rom.py +++ b/Rom.py @@ -715,7 +715,7 @@ def patch_rom(world, rom, player, team, is_mystery=False): dr_flags |= DROptions.OriginalPalettes if world.experimental[player]: dr_flags |= DROptions.DarkWorld_Spawns - if world.logic[player] != 'nologic': + if world.logic[player] not in ['owglitches', 'hybridglitches', 'nologic']: dr_flags |= DROptions.Fix_EG if world.door_type_mode[player] in ['big', 'all', 'chaos']: dr_flags |= DROptions.BigKeyDoor_Shuffle @@ -1411,10 +1411,10 @@ def patch_rom(world, rom, player, team, is_mystery=False): digging_game_rng = random.randint(1, 30) # set rng for digging game rom.write_byte(0x180020, digging_game_rng) rom.write_byte(0xEFD95, digging_game_rng) - rom.write_byte(0x1800A3, 0x01) # enable correct world setting behaviour after agahnim kills - rom.write_byte(0x1800A4, 0x01 if world.logic[player] != 'nologic' else 0x00) # enable POD EG fix - rom.write_byte(0x180042, 0x01 if world.save_and_quit_from_boss else 0x00) # Allow Save and Quit after boss kill glitches_enabled = world.logic[player] in ['owglitches', 'hybridglitches', 'nologic'] + rom.write_byte(0x1800A3, 0x01) # enable correct world setting behaviour after agahnim kills + rom.write_byte(0x1800A4, 0x01 if not glitches_enabled else 0x00) # enable POD EG fix + rom.write_byte(0x180042, 0x01 if world.save_and_quit_from_boss else 0x00) # Allow Save and Quit after boss kill rom.write_byte(0x180358, 0x01 if glitches_enabled else 0x00) rom.write_byte(0x18008B, 0x01 if glitches_enabled else 0x00) diff --git a/source/enemizer/Bossmizer.py b/source/enemizer/Bossmizer.py index 398cba89..85b8a3c2 100644 --- a/source/enemizer/Bossmizer.py +++ b/source/enemizer/Bossmizer.py @@ -166,14 +166,14 @@ def boss_writes(world, player, rom): data_tables.room_headers[room_id].byte_0 = 0x60 data_tables.room_headers[room_id].effect = 4 # $2E, $98, $FF (original shell) + # disable trinexx ice breath with No-ops if there's a trinexx anywhere outside TR + rom.write_bytes(snes_to_pc(0x09B37E), [0xEA, 0xEA, 0xEA, 0xEA]) if boss.name == 'Kholdstare' and (dungeon.name != 'Ice Palace' or level is not None): add_shell_to_boss_room(data_tables, dungeon.name, level, 0xF95) data_tables.room_headers[room_id].byte_0 = 0xE0 data_tables.room_headers[room_id].effect = 1 if boss.name != 'Trinexx' and dungeon.name == 'Turtle Rock' and level is None: remove_shell_from_boss_room(data_tables, dungeon.name, level, 0xFF2) - # disable trinexx ice breath with No-ops - rom.write_bytes(snes_to_pc(0x09B37E), [0xEA, 0xEA, 0xEA, 0xEA]) if boss.name != 'Kholdstare' and dungeon.name == 'Ice Palace' and level is None: remove_shell_from_boss_room(data_tables, dungeon.name, level, 0xF95) if boss.name != 'Blind' and dungeon.name == 'Thieves Town' and level is None: diff --git a/source/enemizer/enemy_deny.yaml b/source/enemizer/enemy_deny.yaml index b55e90a4..b3d94127 100644 --- a/source/enemizer/enemy_deny.yaml +++ b/source/enemizer/enemy_deny.yaml @@ -160,6 +160,7 @@ UwGeneralDeny: - [ 0x0058, 8, ["Statue"]] - [ 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, 5, ["RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] - [ 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)" diff --git a/test/suite/enemy_logic/lynel_test.yaml b/test/suite/enemy_logic/lynel_test.yaml new file mode 100644 index 00000000..9c779af5 --- /dev/null +++ b/test/suite/enemy_logic/lynel_test.yaml @@ -0,0 +1,29 @@ +meta: + players: 1 +settings: + 1: + mode: open + enemy_shuffle: shuffled + dropshuffle: underworld +enemies: + 1: + Underworld: + 0x55: + 1: Lynel +placements: # all the ways to kill a Lynel are Flipper locked + 1: + Waterfall Fairy - Left: Progressive Sword + Waterfall Fairy - Right: Progressive Sword + Hobo: Progressive Sword + Swamp Palace - Map Chest: Progressive Bow + Swamp Palace - Compass Chest: Progressive Bow + Zora's Ledge: Hammer +advanced_placements: + 1: + - type: Verification + item: Flippers + locations: + 'Hyrule Castle Secret Entrance Enemy #2': False # can't kill the lynel + Link's Uncle: True + +