From 19dca02c6e59b5ab5eb4118d5d138cf695b6dfc9 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 28 Jul 2021 20:11:38 -0500 Subject: [PATCH] Added bomb logic to OW and removed starting rupees/bombs in Mixed OW Shuffle --- BaseClasses.py | 62 +++++++++++++++++++++++++++++++++++++++++++++++++- ItemList.py | 6 ----- 2 files changed, 61 insertions(+), 7 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 72267aca..e2b7b1f8 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -672,6 +672,66 @@ class CollectionState(object): if shop.region.player == player and shop.has_unlimited(item) and shop.region.can_reach(self): return True return False + + def can_farm_bombs(self, player): + if self.world.mode[player] == 'standard' and not self.has('Zelda Delivered', player): + return True + + bush_bombs = ['Flute Boy Approach Area', + 'Kakariko Area', + 'Village of Outcasts Area', + 'Forgotten Forest Area', + 'Bat Cave Ledge', + 'East Dark Death Mountain (Bottom)'] + rock_bombs = ['Links House Area', + 'Dark Chapel Area', + 'Wooden Bridge Area', + 'Ice Cave Area', + 'Eastern Nook Area', + 'West Death Mountain (Bottom)', + 'Kakariko Fortune Area', + 'Skull Woods Forest', + 'Catfish Area', + 'Dark Fortune Area', + 'Qirn Jump Area', + 'Shield Shop Area', + 'Palace of Darkness Nook Area', + 'Swamp Nook Area', + 'Dark South Pass Area'] + bonk_bombs = ['Kakariko Fortune Area', 'Dark Graveyard Area'] #TODO: Flute Boy Approach Area and Bonk Rock Ledge are available post-Aga + + # TODO: Possibly use tree pulls also in the future, bush crabs also if enemizer is disabled + tree_pulls = ['Lost Woods East Area', + 'Snitch Lady (East)', + 'Turtle Rock Area', + 'Pyramid Area', + 'Hype Cave Area', + 'Dark South Pass Area', + 'Bumper Cave Area'] + pre_aga_tree_pulls = ['Hyrule Castle Courtyard', 'Mountain Entry Area'] + post_aga_tree_pulls = ['Statues Area', 'Eastern Palace Area'] + + def can_reach_non_bunny(regionname): + region = self.world.get_region(regionname, player) + return region.can_reach(self) and (region.type == RegionType.LightWorld or self.has('Pearl', player)) + + for region in bush_bombs: + if can_reach_non_bunny(region): + return True + + if self.can_lift_rocks(player): + for region in rock_bombs: + if can_reach_non_bunny(region): + return True + + if self.has_Boots(player): + for region in bonk_bombs: + if can_reach_non_bunny(region): + return True + + if self.can_reach('Archery Game', None, player) and self.can_buy_unlimited('Bombs (10)', player): + return True + return False def item_count(self, item, player): return self.prog_items[item, player] @@ -731,7 +791,7 @@ class CollectionState(object): # In the future, this can be used to check if the player starts without bombs def can_use_bombs(self, player): - return (not self.world.bomblogic[player] or self.has('Bomb Upgrade (+10)', player)) + return (not self.world.bomblogic[player] or self.has('Bomb Upgrade (+10)', player)) and self.can_farm_bombs(player) def can_hit_crystal(self, player): return (self.can_use_bombs(player) diff --git a/ItemList.py b/ItemList.py index 95ebcaea..e1d40b09 100644 --- a/ItemList.py +++ b/ItemList.py @@ -750,12 +750,6 @@ def get_pool_core(progressive, owShuffle, owSwap, shuffle, difficulty, treasure_ pool.remove('Pegasus Boots') pool.extend(['Rupees (20)']) - if owSwap in ['mixed', 'crossed'] and owShuffle == 'vanilla': - precollected_items.append('Bombs (3)') - precollected_items.append('Rupees (5)') - precollected_items.append('Rupees (5)') - precollected_items.append('Rupees (5)') - if want_progressives(): pool.extend(progressivegloves) else: