From f83b28adb670e2805a68bc0be1d670ed9bc6dd6d Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 5 Feb 2021 15:05:16 -0700 Subject: [PATCH] -Disallowed Swamp Lobby in Hyrule Castle in Standard mode -Prevent defeating Aga 1 before Zelda is delivered to the Sanctuary. (He can't take damage) -Fix for Ice Jelly room when going backward and enemizer is on -Fix for inverted - don't start as a bunny in Dark Sanctuary -Fix for non-ER Inverted with Lobby shuffle. Aga Tower's exit works properly now. --- BaseClasses.py | 1 + DoorShuffle.py | 38 +++++++++++++++++++------------------- Doors.py | 1 + RELEASENOTES.md | 6 ++++++ Rom.py | 11 +++++++++-- RoomData.py | 7 ++++--- asm/dr_lobby.asm | 1 + asm/drhooks.asm | 3 +++ asm/overrides.asm | 7 +++++++ data/base2current.bps | Bin 131877 -> 132335 bytes 10 files changed, 51 insertions(+), 24 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 6be6174b..9ac6377b 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -1214,6 +1214,7 @@ class Door(object): self.passage = True self.dungeonLink = None self.bk_shuffle_req = False + self.standard_restrict = False # flag if portal is not allowed in HC in standard # self.incognitoPos = -1 # self.sectorLink = False diff --git a/DoorShuffle.py b/DoorShuffle.py index 58d84688..c2085c50 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -357,6 +357,7 @@ def choose_portals(world, player): if world.doorShuffle[player] in ['basic', 'crossed']: cross_flag = world.doorShuffle[player] == 'crossed' bk_shuffle = world.bigkeyshuffle[player] + std_flag = world.mode[player] == 'standard' # roast incognito doors world.get_room(0x60, player).delete(5) world.get_room(0x60, player).change(2, DoorKind.DungeonEntrance) @@ -369,13 +370,14 @@ def choose_portals(world, player): region_map = defaultdict(list) reachable_portals = [] inaccessible_portals = [] + hc_flag = std_flag and dungeon == 'Hyrule Castle' for portal in portal_list: placeholder = world.get_region(portal + ' Portal', player) portal_region = placeholder.exits[0].connected_region name = portal_region.name if portal_region.type == RegionType.LightWorld: world.get_portal(portal, player).light_world = True - if name in world.inaccessible_regions[player]: + if name in world.inaccessible_regions[player] or (hc_flag and portal != 'Hyrule Castle South'): name_key = 'Desert Ledge' if name == 'Desert Palace Entrance (North) Spot' else name region_map[name_key].append(portal) inaccessible_portals.append(portal) @@ -397,7 +399,8 @@ def choose_portals(world, player): portal_assignment = defaultdict(list) for dungeon, info in info_map.items(): outstanding_portals = list(dungeon_portals[dungeon]) - if dungeon == 'Hyrule Castle' and world.mode[player] == 'standard': + hc_flag = std_flag and dungeon == 'Hyrule Castle' + if hc_flag: sanc = world.get_portal('Sanctuary', player) sanc.destination = True clean_up_portal_assignment(portal_assignment, dungeon, sanc, master_door_list, outstanding_portals) @@ -425,7 +428,7 @@ def choose_portals(world, player): the_rest = info.total - len(portal_assignment[dungeon]) for i in range(0, the_rest): candidates = find_portal_candidates(master_door_list, dungeon, crossed=cross_flag, - bk_shuffle=bk_shuffle) + bk_shuffle=bk_shuffle, standard=hc_flag) choice, portal = assign_portal(candidates, outstanding_portals, world, player) clean_up_portal_assignment(portal_assignment, dungeon, portal, master_door_list, outstanding_portals) @@ -536,23 +539,20 @@ def disconnect_portal(portal, world, player): chosen_door.entranceFlag = False -def find_portal_candidates(door_list, dungeon, need_passage=False, dead_end_allowed=False, crossed=False, bk_shuffle=False): - filter_list = [x for x in door_list if bk_shuffle or not x.bk_shuffle_req] - if need_passage: - if crossed: - return [x for x in filter_list if x.passage and (x.dungeonLink is None or x.entrance.parent_region.dungeon.name == dungeon)] - else: - return [x for x in filter_list if x.passage and x.entrance.parent_region.dungeon.name == dungeon] - elif dead_end_allowed: - if crossed: - return [x for x in filter_list if x.dungeonLink is None or x.entrance.parent_region.dungeon.name == dungeon] - else: - return [x for x in filter_list if x.entrance.parent_region.dungeon.name == dungeon] +def find_portal_candidates(door_list, dungeon, need_passage=False, dead_end_allowed=False, crossed=False, + bk_shuffle=False, standard=False): + ret = [x for x in door_list if bk_shuffle or not x.bk_shuffle_req] + if crossed: + ret = [x for x in ret if not x.dungeonLink or x.entrance.parent_region.dungeon.name == dungeon] else: - if crossed: - return [x for x in filter_list if (not x.dungeonLink or x.entrance.parent_region.dungeon.name == dungeon) and not x.deadEnd] - else: - return [x for x in filter_list if x.entrance.parent_region.dungeon.name == dungeon and not x.deadEnd] + ret = [x for x in ret if x.entrance.parent_region.dungeon.name == dungeon] + if need_passage: + ret = [x for x in ret if x.passage] + if not dead_end_allowed: + ret = [x for x in ret if not x.deadEnd] + if standard: + ret = [x for x in ret if not x.standard_restrict] + return ret def assign_portal(candidates, possible_portals, world, player): diff --git a/Doors.py b/Doors.py index 3bc41766..c3cc969d 100644 --- a/Doors.py +++ b/Doors.py @@ -1306,6 +1306,7 @@ def create_doors(world, player): world.get_door("GT Bob\'s Room SE", player).passage = False world.get_door('PoD Mimics 2 SW', player).bk_shuffle_req = True world.get_door('Desert Tiles 2 SE', player).bk_shuffle_req = True # key-drop note (todo) + world.get_door('Swamp Lobby S', player).standard_restricted = True # key-drop note (todo) # can't unlink from boss right now world.get_door('Hera Lobby S', player).dungeonLink = 'Tower of Hera' diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 460d34ad..339ed2f8 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -9,6 +9,12 @@ Big thanks to Catobat for doing all the hard work. # Bug Fixes +* 0.3.0.2-u + * Disallowed Swamp Lobby in Hyrule Castle in Standard mode + * Prevent defeating Aga 1 before Zelda is delivered to the Sanctuary. (He can't take damage) + * Fix for Ice Jelly room when going backward and enemizer is on + * Fix for inverted - don't start as a bunny in Dark Sanctuary + * Fix for non-ER Inverted with Lobby shuffle. Aga Tower's exit works properly now. * 0.3.0.1-u * Problem with lobbies on re-rolls corrected * Potential playthrough problem addressed diff --git a/Rom.py b/Rom.py index 4b9680da..a356fb08 100644 --- a/Rom.py +++ b/Rom.py @@ -711,6 +711,12 @@ def patch_rom(world, rom, player, team, enemized): if dr_flags & DROptions.Town_Portal and world.mode[player] == 'inverted': rom.write_byte(0x138006, 1) + # swap in non-ER Lobby Shuffle Inverted - but only then + if world.mode[player] == 'inverted' and world.intensity[player] >= 3 and world.doorShuffle[player] != 'vanilla' and world.shuffle[player] == 'vanilla': + aga_portal = world.get_portal('Agahnims Tower', player) + gt_portal = world.get_portal('Ganons Tower', player) + aga_portal.exit_offset, gt_portal.exit_offset = gt_portal.exit_offset, aga_portal.exit_offset + for portal in world.dungeon_portals[player]: if not portal.default: offset = portal.ent_offset @@ -2093,8 +2099,9 @@ def set_inverted_mode(world, player, rom): if world.shuffle[player] == 'vanilla': rom.write_byte(0xDBB73 + 0x23, 0x37) # switch AT and GT rom.write_byte(0xDBB73 + 0x36, 0x24) - write_int16(rom, 0x15AEE + 2*0x38, 0x00E0) - write_int16(rom, 0x15AEE + 2*0x25, 0x000C) + if world.doorShuffle[player] == 'vanilla' or world.intensity[player] < 3: + write_int16(rom, 0x15AEE + 2*0x38, 0x00E0) + write_int16(rom, 0x15AEE + 2*0x25, 0x000C) if world.shuffle[player] in ['vanilla', 'dungeonssimple', 'dungeonsfull']: rom.write_byte(0x15B8C, 0x6C) rom.write_byte(0xDBB73 + 0x00, 0x53) # switch bomb shop and links house diff --git a/RoomData.py b/RoomData.py index 3fe8d594..f3c82576 100644 --- a/RoomData.py +++ b/RoomData.py @@ -252,6 +252,7 @@ def create_rooms(world, player): world.get_room(0x77, player).swap(0, 1) # fixes Hera Lobby Key Stairs - entrance now at pos 0 if world.enemy_shuffle[player] != 'none': world.get_room(0xc0, player).change(0, DoorKind.Normal) # fix this kill room if enemizer is on + world.get_room(0x0e, player).change(1, DoorKind.TrapTriggerable) # fix this kill room if enemizer is on def reset_rooms(world, player): @@ -369,7 +370,7 @@ class DoorKind(Enum): IncognitoEntrance = 0x12 DungeonChanger = 0x14 ToggleFlag = 0x16 - Trap = 0x18 + Trap = 0x18 # both sides trapped UnknownD6 = 0x1A SmallKey = 0x1C BigKey = 0x1E @@ -382,8 +383,8 @@ class DoorKind(Enum): Bombable = 0x2E BlastWall = 0x30 Hidden = 0x32 - TrapTriggerable = 0x36 - Trap2 = 0x38 + TrapTriggerable = 0x36 # right side trap or south side trap + Trap2 = 0x38 # left side trap or north side trap NormalLow2 = 0x40 TrapTriggerableLow = 0x44 Warp = 0x46 diff --git a/asm/dr_lobby.asm b/asm/dr_lobby.asm index c2f08fa6..cf3ed694 100644 --- a/asm/dr_lobby.asm +++ b/asm/dr_lobby.asm @@ -1,5 +1,6 @@ CheckDarkWorldSanc: STA $A0 : STA $048E ; what we wrote over + LDA.l InvertedMode : BNE + LDA.l SancDarkWorldFlag : BEQ + SEP #$30 LDA $A0 : CMP #$12 : BNE ++ diff --git a/asm/drhooks.asm b/asm/drhooks.asm index 1aa62dde..c4939e9d 100644 --- a/asm/drhooks.asm +++ b/asm/drhooks.asm @@ -170,6 +170,9 @@ JSL CheckDarkWorldSanc : NOP org $01891e ; <- Bank 01.asm : 991 Dungeon_LoadType2Object (LDA $00 : XBA : AND.w #$00FF) JSL RainPrevention : NOP #2 +org $1edabf ; <- sprite_energy_ball.asm : 86-7 Sprite_EnergyBall (LDA.b #$10 : LDX.b #$00) +JSL StandardAgaDmg + ; These two, if enabled together, have implications for vanilla BK doors in IP/Hera/Mire ; IPBJ is common enough to consider not doing this. Mire is not a concern for vanilla - maybe glitched modes ; Hera BK door back can be seen with Pot clipping - likely useful for no logic seeds diff --git a/asm/overrides.asm b/asm/overrides.asm index d47d565f..28eb7f91 100644 --- a/asm/overrides.asm +++ b/asm/overrides.asm @@ -142,3 +142,10 @@ RainPrevention: PLA : LDA #$0008 : RTL .done PLA : RTL +; A should be how much dmg to do to Aga when leaving this function +StandardAgaDmg: + LDX.b #$00 ; part of what we wrote over + LDA.l $7EF3C6 : AND #$04 : BEQ + ; zelda's not been rescued + LDA.b #$10 ; hurt him! + + RTL ; A is zero if the AND results in zero and then Agahnim's invincible! + diff --git a/data/base2current.bps b/data/base2current.bps index 970df14e576c2923e6564beaed7c30e523d35e04..4674a0635dce4700727220b4681a6fc78d7892e8 100644 GIT binary patch delta 17234 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 DK#F>= delta 16883 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