From 1b060f893b80edf875fce674590d0449716d982b Mon Sep 17 00:00:00 2001 From: aerinon Date: Mon, 30 Nov 2020 15:54:39 -0700 Subject: [PATCH] Prevent HUD from showing key counter when in the overworld. (Aga 2 doesn't always clear the dungeon indicator) Fixed key logic regarding certain isolated "important" locations Fixed a problem with keydropshuffle thinking certain progression items are keys A couple of inverted rules fixed (from an outstanding ER pull request) A more accurate count of which locations are blocked by the big key in Ganon's Tower Updated base rom to 31.0.7 (includes potential hera basement cage fix) --- KeyDoorShuffle.py | 28 +++++++++++++++------------- Main.py | 2 +- RELEASENOTES.md | 7 +++++++ Rom.py | 2 +- Rules.py | 5 ++++- asm/hudadditions.asm | 5 +++-- asm/keydropshuffle.asm | 2 +- data/base2current.bps | Bin 130964 -> 131148 bytes 8 files changed, 32 insertions(+), 19 deletions(-) diff --git a/KeyDoorShuffle.py b/KeyDoorShuffle.py index 26db7f9e..5b690c22 100644 --- a/KeyDoorShuffle.py +++ b/KeyDoorShuffle.py @@ -169,21 +169,11 @@ class KeyCounter(object): self.big_key_opened = False self.important_location = False self.other_locations = {} + self.important_locations = {} def used_smalls_loc(self, reserve=0): return max(self.used_keys + reserve - len(self.key_only_locations), 0) - def copy(self): - ret = KeyCounter(self.max_chests) - ret.free_locations.update(self.free_locations) - ret.key_only_locations.update(self.key_only_locations) - ret.child_doors.update(self.child_doors) - ret.used_keys = self.used_keys - ret.open_doors.update(self.open_doors) - ret.big_key_opened = self.big_key_opened - ret.important_location = self.important_location - return ret - def build_key_layout(builder, start_regions, proposal, world, player): key_layout = KeyLayout(builder.master_sector, start_regions, proposal) @@ -540,6 +530,9 @@ def relative_empty_counter(odd_counter, key_counter): return False if len(set(odd_counter.free_locations).difference(key_counter.free_locations)) > 0: return False + # important only + if len(set(odd_counter.important_locations).difference(key_counter.important_locations)) > 0: + return False new_child_door = False for child in odd_counter.child_doors: if unique_child_door(child, key_counter): @@ -555,6 +548,9 @@ def relative_empty_counter_2(odd_counter, key_counter): return False if len(set(odd_counter.free_locations).difference(key_counter.free_locations)) > 0: return False + # important only + if len(set(odd_counter.important_locations).difference(key_counter.important_locations)) > 0: + return False for child in odd_counter.child_doors: if unique_child_door_2(child, key_counter): return False @@ -981,11 +977,15 @@ def filter_big_chest(locations): def count_locations_exclude_logic(locations, key_logic): cnt = 0 for loc in locations: - if loc not in key_logic.bk_restricted and not loc.forced_item and not prize_or_event(loc): - cnt += 1 + if not location_is_bk_locked(loc, key_logic) and not loc.forced_item and not prize_or_event(loc): + cnt += 1 return cnt +def location_is_bk_locked(loc, key_logic): + return loc in key_logic.bk_chests or loc in key_logic.bk_locked + + def prize_or_event(loc): return loc.name in dungeon_events or '- Prize' in loc.name or loc.name in ['Agahnim 1', 'Agahnim 2'] @@ -1417,6 +1417,7 @@ def create_key_counter(state, key_layout, world, player): if important_location(loc, world, player): key_counter.important_location = True key_counter.other_locations[loc] = None + key_counter.important_locations[loc] = None elif loc.forced_item and loc.item.name == key_layout.key_logic.small_key_name: key_counter.key_only_locations[loc] = None elif loc.forced_item and loc.item.name == key_layout.key_logic.bk_name: @@ -1456,6 +1457,7 @@ def create_odd_key_counter(door, parent_counter, key_layout, world, player): odd_counter.key_only_locations = dict_difference(next_counter.key_only_locations, parent_counter.key_only_locations) odd_counter.child_doors = dict_difference(next_counter.child_doors, parent_counter.child_doors) odd_counter.other_locations = dict_difference(next_counter.other_locations, parent_counter.other_locations) + odd_counter.important_locations = dict_difference(next_counter.important_locations, parent_counter.important_locations) for loc in odd_counter.other_locations: if important_location(loc, world, player): odd_counter.important_location = True diff --git a/Main.py b/Main.py index c0e52af4..20cd433f 100644 --- a/Main.py +++ b/Main.py @@ -24,7 +24,7 @@ from Fill import distribute_items_cutoff, distribute_items_staleness, distribute from ItemList import generate_itempool, difficulties, fill_prizes, fill_specific_items from Utils import output_path, parse_player_names -__version__ = '0.2.0.15u' +__version__ = '0.2.0.16u' class EnemizerError(RuntimeError): pass diff --git a/RELEASENOTES.md b/RELEASENOTES.md index e4aca12d..eb30ad5e 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -92,6 +92,13 @@ testing to verify logic is all good. # Bug Fixes +* 2.0.16u + * Prevent HUD from showing key counter when in the overworld. (Aga 2 doesn't always clear the dungeon indicator) + * Fixed key logic regarding certain isolated "important" locations + * Fixed a problem with keydropshuffle thinking certain progression items are keys + * A couple of inverted rules fixed + * A more accurate count of which locations are blocked by teh big key in Ganon's Tower + * Updated base rom to 31.0.7 (includes potential hera basement cage fix) * 2.0.15u * Allow Aga Tower lobby door as a a paired keydoor (typo) * Fix portal check for multi-entrance dungeons diff --git a/Rom.py b/Rom.py index 59a82fef..99ee1f2a 100644 --- a/Rom.py +++ b/Rom.py @@ -26,7 +26,7 @@ from EntranceShuffle import door_addresses, exit_ids JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '55b2f851e5d643e1e72befc631ea3c6d' +RANDOMIZERBASEHASH = '185a0f74ab0e2ce8899c8d7d309ca68c' class JsonRom(object): diff --git a/Rules.py b/Rules.py index 118b3bb2..ce769974 100644 --- a/Rules.py +++ b/Rules.py @@ -467,7 +467,7 @@ def default_rules(world, player): set_rule(world.get_entrance('East Dark World Bridge', player), lambda state: state.has_Pearl(player) and state.has('Hammer', player)) set_rule(world.get_entrance('Lake Hylia Island Mirror Spot', player), lambda state: state.has_Pearl(player) and state.has_Mirror(player) and state.has('Flippers', player)) set_rule(world.get_entrance('Lake Hylia Central Island Mirror Spot', player), lambda state: state.has_Mirror(player)) - set_rule(world.get_entrance('East Dark World River Pier', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) # ToDo any fake flipper set up? + set_rule(world.get_entrance('East Dark World River Pier', player), lambda state: state.has_Pearl(player)) set_rule(world.get_entrance('Graveyard Ledge Mirror Spot', player), lambda state: state.has_Pearl(player) and state.has_Mirror(player)) set_rule(world.get_entrance('Bumper Cave Entrance Rock', player), lambda state: state.has_Pearl(player) and state.can_lift_rocks(player)) set_rule(world.get_entrance('Bumper Cave Ledge Mirror Spot', player), lambda state: state.has_Mirror(player)) @@ -513,6 +513,7 @@ def inverted_rules(world, player): set_rule(world.get_entrance('Castle Ledge S&Q', player), lambda state: state.has_Mirror(player) and state.has('Beat Agahnim 1', player)) # overworld requirements + set_rule(world.get_location('Ice Rod Cave', player), lambda state: state.has_Pearl(player)) set_rule(world.get_location('Maze Race', player), lambda state: state.has_Pearl(player)) set_rule(world.get_entrance('Mini Moldorm Cave', player), lambda state: state.has_Pearl(player)) set_rule(world.get_entrance('Light Hype Fairy', player), lambda state: state.has_Pearl(player)) @@ -664,6 +665,7 @@ def no_glitches_rules(world, player): add_rule(world.get_entrance('Dark Lake Hylia Drop (East)', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) add_rule(world.get_entrance('Dark Lake Hylia Teleporter', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player) and (state.has('Hammer', player) or state.can_lift_rocks(player))) add_rule(world.get_entrance('Dark Lake Hylia Ledge Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) + add_rule(world.get_entrance('East Dark World River Pier', player), lambda state: state.has('Flippers', player)) else: add_rule(world.get_entrance('Zoras River', player), lambda state: state.has_Pearl(player) and (state.has('Flippers', player) or state.can_lift_rocks(player))) add_rule(world.get_entrance('Lake Hylia Central Island Pier', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) # can be fake flippered to @@ -673,6 +675,7 @@ def no_glitches_rules(world, player): add_rule(world.get_entrance('Dark Lake Hylia Teleporter', player), lambda state: state.has('Flippers', player) and (state.has('Hammer', player) or state.can_lift_rocks(player))) add_rule(world.get_entrance('Dark Lake Hylia Ledge Drop', player), lambda state: state.has('Flippers', player)) add_rule(world.get_entrance('East Dark World Pier', player), lambda state: state.has('Flippers', player)) + add_rule(world.get_entrance('East Dark World River Pier', player), lambda state: state.has('Flippers', player)) # todo: move some dungeon rules to no glictes logic - see these for examples # add_rule(world.get_entrance('Ganons Tower (Hookshot Room)', player), lambda state: state.has('Hookshot', player) or state.has_Boots(player)) diff --git a/asm/hudadditions.asm b/asm/hudadditions.asm index f0ed773e..9b78a0a4 100644 --- a/asm/hudadditions.asm +++ b/asm/hudadditions.asm @@ -15,8 +15,9 @@ HudAdditions: LDX.b $07 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+14 ; draw 1's digit ++ - ldx $040c : cpx #$ff : bne + : rts : + - lda.l DRMode : bne + : rts : + + LDX $1B : BNE + : RTS : + ; Skip if outdoors + ldx $040c : cpx #$ff : bne + : rts : + ; Skip if not in dungeon + lda.l DRMode : bne + : rts : + ; Skip if not door rando phb : phk : plb lda $7ef364 : and.l $0098c0, x : beq + lda.w CompassBossIndicator, x : and #$00ff : cmp $a0 : bne + diff --git a/asm/keydropshuffle.asm b/asm/keydropshuffle.asm index 7b64746f..a150774f 100644 --- a/asm/keydropshuffle.asm +++ b/asm/keydropshuffle.asm @@ -126,7 +126,7 @@ KeyGet: lda !MULTIWORLD_ITEM_PLAYER_ID : bne .receive phx lda $040c : lsr : tax - lda $00 : cmp KeyTable, x : bne + + lda $00 : CMP.l KeyTable, x : bne + - JSL.l FullInventoryExternal : jsl CountChestKeyLong : plx : pla : rtl + cmp #$af : beq - ; universal key cmp #$24 : beq - ; small key for this dungeon diff --git a/data/base2current.bps b/data/base2current.bps index 2b70fcc071246cef6f8be55fc6b7fd5d5ba5a093..61323175649e7f91ca4f97404fb5a9657034ca8d 100644 GIT binary patch delta 13283 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 VBS>UCNASJ;-FJfH?vyOA`ag0DhQj~= delta 13286 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