From e681968aa2498c4efbc96ca99dfd5fb91c0341cf Mon Sep 17 00:00:00 2001 From: aerinon Date: Mon, 15 Jul 2024 13:02:06 -0600 Subject: [PATCH] feat: 300 Rupees marked as priority fix: PreferredLocationGroup works with priority items and pre-activated flute --- CHANGELOG.md | 11 +++++++++++ Fill.py | 6 ++---- Items.py | 2 +- Main.py | 2 +- RELEASENOTES.md | 12 +++--------- source/item/FillUtil.py | 2 ++ 6 files changed, 20 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 707d2f06..0b209701 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,17 @@ # Patch Notes Changelog archive + +* 1.4.5 + - Logic: Added appropriate enemy logic to GT Mimics 1 and 2 rooms + - Logic: Added appropriate enemy logic to Mire 2 room. Note this does change the default logical strats, due to how enemy kill logic works. + - Ice Rod + 1 Bomb is now out of logic + - Fire Rod + 1 Bomb is now out of logic + - Fire Rod + 1 magic extension is still in logic + - Byrna + 1 magic extension is newly in logic + + (One magic extension is either half magic or a bottle with the ability to purchase a blue or green potion) In general, making up for a lack of magic extension with a few bombs is something that could be added to the logic. Using the ice rod to freeze an enemy and then using that enemy to deal blunt damage and then using bombs to clear the frozen enemy is another strategy that could be added to the logic someday. If these are important to you, let me know. + - Generation: Fixed an issue with dungeonsfull shuffle * 1.4.4 - Fixed a crash near the end of the credits when total collection rate was over 1000 * 1.4.3 diff --git a/Fill.py b/Fill.py index f41f845c..feacb10b 100644 --- a/Fill.py +++ b/Fill.py @@ -448,11 +448,9 @@ def distribute_items_restrictive(world, gftower_trash=False, fill_locations=None fill_restrictive(world, world.state, fill_locations, progitempool, key_pool, vanilla=True) fill_restrictive(world, world.state, fill_locations, progitempool, key_pool) random.shuffle(fill_locations) - if world.algorithm == 'balanced': - fast_fill(world, prioitempool, fill_locations) - elif world.algorithm == 'vanilla_fill': + if world.algorithm == 'vanilla_fill': fast_vanilla_fill(world, prioitempool, fill_locations) - elif world.algorithm in ['major_only', 'dungeon_only', 'district']: + elif world.algorithm in ['balanced', 'major_only', 'dungeon_only', 'district']: filtered_fill(world, prioitempool, fill_locations) else: # just need to ensure dungeon items still get placed in dungeons fast_equitable_fill(world, prioitempool, fill_locations) diff --git a/Items.py b/Items.py index 76dd7bfc..e83c6e25 100644 --- a/Items.py +++ b/Items.py @@ -105,7 +105,7 @@ item_table = {'Bow': (True, False, None, 0x0B, 200, 'Bow!\nJoin the archer class 'Rupees (20)': (False, False, None, 0x36, 10, 'Rupees!\nJust couch\ncash.', 'and the couch cash', 'the piggy-bank kid', 'life lesson for sale', 'the witch buying drugs', 'destitute boy has lunch again', 'a red rupee'), 'Rupees (50)': (False, False, None, 0x41, 25, 'Rupees!\nA big pile!', 'and the rupee pile', 'the well-off kid', 'life lesson for sale', 'buying okay drugs', 'destitute boy has dinner again', 'fifty rupees'), 'Rupees (100)': (False, False, None, 0x40, 50, 'Rupees!\nA big stash!', 'and the rupee stash', 'the kind-of-rich kid', 'life lesson for sale', 'buying good drugs', 'affluent boy goes drinking again', 'one hundred rupees'), - 'Rupees (300)': (False, False, None, 0x46, 150, 'Rupees!\nA big hoard!', 'and the rupee hoard', 'the really-rich kid', 'life lesson for sale', 'buying the best drugs', 'fat-cat boy is rich again', 'three hundred rupees'), + 'Rupees (300)': (False, True, None, 0x46, 150, 'Rupees!\nA big hoard!', 'and the rupee hoard', 'the really-rich kid', 'life lesson for sale', 'buying the best drugs', 'fat-cat boy is rich again', 'three hundred rupees'), 'Rupoor': (False, False, None, 0x59, 0, 'Rupoor!\nI\'ll take your rupees!', 'and the toll-booth', 'the toll-booth kid', 'double loss for sale', 'witch stole your rupees', 'affluent boy steals rupees', 'a rupoor'), 'Red Clock': (False, True, None, 0x5B, 0, 'Red Clock!\nA waste of time.', 'the ruby clock', 'the ruby-time kid', 'red time for sale', 'for ruby time', 'moment boy travels time again', 'a red clock'), 'Blue Clock': (False, True, None, 0x5C, 50, 'Blue Clock!\nA bit of time!', 'the sapphire clock', 'sapphire-time kid', 'blue time for sale', 'for sapphire time', 'moment boy time travels again', 'a blue clock'), diff --git a/Main.py b/Main.py index 43bb4290..af8ba0ab 100644 --- a/Main.py +++ b/Main.py @@ -38,7 +38,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.5' +version_number = '1.4.6' version_branch = '-u' __version__ = f'{version_number}{version_branch}' diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 087fad11..59d49859 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,12 +1,6 @@ # Patch Notes -1.4.5 -- Logic: Added appropriate enemy logic to GT Mimics 1 and 2 rooms -- Logic: Added appropriate enemy logic to Mire 2 room. Note this does change the default logical strats, due to how enemy kill logic works. - - Ice Rod + 1 Bomb is now out of logic - - Fire Rod + 1 Bomb is now out of logic - - Fire Rod + 1 magic extension is still in logic - - Byrna + 1 magic extension is newly in logic +1.4.6 - (One magic extension is either half magic or a bottle with the ability to purchase a blue or green potion) In general, making up for a lack of magic extension with a few bombs is something that could be added to the logic. Using the ice rod to freeze an enemy and then using that enemy to deal blunt damage and then using bombs to clear the frozen enemy is another strategy that could be added to the logic someday. If these are important to you, let me know. -- Generation: Fixed an issue with dungeonsfull shuffle \ No newline at end of file +- The 300 Rupees item is now marked as priority, so it will not be used as GT junk fill (this matches a recent change in the VT randomizer) +- Fixed an issue around PreferredLocationGroups in customizer which would not work with pre-activated Ocraina or priority items. diff --git a/source/item/FillUtil.py b/source/item/FillUtil.py index db5a1a4f..add18502 100644 --- a/source/item/FillUtil.py +++ b/source/item/FillUtil.py @@ -408,11 +408,13 @@ def filter_locations(item_to_place, locations, world, vanilla_skip=False, potion config = world.item_pool_config if not isinstance(item_to_place, str): item_name = 'Bottle' if item_to_place.name.startswith('Bottle') else item_to_place.name + item_name = 'Ocarina' if item_name.startswith('Ocarina') else item_name else: item_name = item_to_place if world.algorithm == 'vanilla_fill': filtered = [] item_name = 'Bottle' if item_to_place.name.startswith('Bottle') else item_to_place.name + item_name = 'Ocarina' if item_name.startswith('Ocarina') else item_name if item_name in config.static_placement[item_to_place.player]: restricted = config.static_placement[item_to_place.player][item_name] filtered = [l for l in locations if l.player == item_to_place.player and l.name in restricted]