From a55bcae3ec35fafa5b91ae55acee1e97aa45c08b Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Sat, 22 May 2021 09:30:09 -0500 Subject: [PATCH] Minecraft logic improvements - Very Very Frightening now properly accounts for getting a villager into the overworld by curing a zombie villager - Hot Tourist Destinations no longer requires striders, since no one was using them anyway - Saddles are now also obtainable from raids by killing a ravager (100% drop rate) --- test/minecraft/TestAdvancements.py | 14 +++++--------- worlds/minecraft/Locations.py | 2 +- worlds/minecraft/Rules.py | 9 +++++---- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/test/minecraft/TestAdvancements.py b/test/minecraft/TestAdvancements.py index 8f2ed075..21c3ba57 100644 --- a/test/minecraft/TestAdvancements.py +++ b/test/minecraft/TestAdvancements.py @@ -201,14 +201,9 @@ class TestAdvancements(TestMinecraft): ["Hot Tourist Destinations", False, [], ['Ingot Crafting']], ["Hot Tourist Destinations", False, [], ['Flint and Steel']], ["Hot Tourist Destinations", False, [], ['Progressive Tools']], - ["Hot Tourist Destinations", False, [], ['Progressive Weapons']], - ["Hot Tourist Destinations", False, [], ['Progressive Armor', 'Shield']], - ["Hot Tourist Destinations", False, [], ['Fishing Rod']], ["Hot Tourist Destinations", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["Hot Tourist Destinations", True, ['Ingot Crafting', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor', 'Flint and Steel', 'Bucket', 'Fishing Rod']], - ["Hot Tourist Destinations", True, ['Ingot Crafting', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Fishing Rod']], - ["Hot Tourist Destinations", True, ['Ingot Crafting', 'Progressive Tools', 'Progressive Weapons', 'Shield', 'Flint and Steel', 'Bucket', 'Fishing Rod']], - ["Hot Tourist Destinations", True, ['Ingot Crafting', 'Progressive Tools', 'Progressive Weapons', 'Shield', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Fishing Rod']], + ["Hot Tourist Destinations", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']], + ["Hot Tourist Destinations", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools']], ]) def test_42015(self): @@ -1099,16 +1094,17 @@ class TestAdvancements(TestMinecraft): self.run_location_tests([ ["When Pigs Fly", False, []], ["When Pigs Fly", False, [], ['Ingot Crafting']], - ["When Pigs Fly", False, [], ['Flint and Steel']], ["When Pigs Fly", False, [], ['Progressive Tools']], ["When Pigs Fly", False, [], ['Progressive Weapons']], ["When Pigs Fly", False, [], ['Progressive Armor', 'Shield']], ["When Pigs Fly", False, [], ['Fishing Rod']], - ["When Pigs Fly", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["When Pigs Fly", False, ['Progressive Weapons'], ['Flint and Steel', 'Progressive Weapons', 'Progressive Weapons']], + ["When Pigs Fly", False, ['Progressive Tools', 'Progressive Tools', 'Progressive Weapons'], ['Bucket', 'Progressive Tools', 'Progressive Weapons', 'Progressive Weapons']], ["When Pigs Fly", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Progressive Armor', 'Fishing Rod']], ["When Pigs Fly", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor', 'Fishing Rod']], ["When Pigs Fly", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Shield', 'Fishing Rod']], ["When Pigs Fly", True, ['Ingot Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Shield', 'Fishing Rod']], + ["When Pigs Fly", True, ['Progressive Weapons', 'Progressive Weapons', 'Progressive Armor', 'Shield', 'Ingot Crafting', 'Progressive Tools', 'Fishing Rod']], ]) def test_42089(self): diff --git a/worlds/minecraft/Locations.py b/worlds/minecraft/Locations.py index 8d24338d..aff4c403 100644 --- a/worlds/minecraft/Locations.py +++ b/worlds/minecraft/Locations.py @@ -15,7 +15,7 @@ advancement_table = { "Who is Cutting Onions?": AdvData(42000, 'Overworld'), "Oh Shiny": AdvData(42001, 'Overworld'), "Suit Up": AdvData(42002, 'Overworld'), - "Very Very Frightening": AdvData(42003, 'Village'), + "Very Very Frightening": AdvData(42003, 'Overworld'), "Hot Stuff": AdvData(42004, 'Overworld'), "Free the End": AdvData(42005, 'The End'), "A Furious Cocktail": AdvData(42006, 'Nether Fortress'), diff --git a/worlds/minecraft/Rules.py b/worlds/minecraft/Rules.py index 44992188..41765202 100644 --- a/worlds/minecraft/Rules.py +++ b/worlds/minecraft/Rules.py @@ -42,7 +42,8 @@ def set_rules(world: MultiWorld, player: int): set_rule(world.get_location("Who is Cutting Onions?", player), lambda state: state.can_piglin_trade(player)) set_rule(world.get_location("Oh Shiny", player), lambda state: state.can_piglin_trade(player)) set_rule(world.get_location("Suit Up", player), lambda state: state.has("Progressive Armor", player) and state.has_iron_ingots(player)) - set_rule(world.get_location("Very Very Frightening", player), lambda state: state.has("Channeling Book", player) and state.can_use_anvil(player) and state.can_enchant(player)) + set_rule(world.get_location("Very Very Frightening", player), lambda state: state.has("Channeling Book", player) and state.can_use_anvil(player) and state.can_enchant(player) and \ + ((world.get_region('Village', player).entrances[0].parent_region.name != 'The End' and state.can_reach('Village', 'Region', player)) or state.can_reach('Zombie Doctor', 'Location', player))) # need villager into the overworld for lightning strike set_rule(world.get_location("Hot Stuff", player), lambda state: state.has("Bucket", player) and state.has_iron_ingots(player)) set_rule(world.get_location("Free the End", player), lambda state: can_complete(state)) set_rule(world.get_location("A Furious Cocktail", player), lambda state: state.can_brew_potions(player) and @@ -58,8 +59,8 @@ def set_rules(world: MultiWorld, player: int): set_rule(world.get_location("Local Brewery", player), lambda state: state.can_brew_potions(player)) set_rule(world.get_location("The Next Generation", player), lambda state: can_complete(state)) set_rule(world.get_location("Fishy Business", player), lambda state: state.has("Fishing Rod", player)) - set_rule(world.get_location("Hot Tourist Destinations", player), lambda state: state.fortress_loot(player) and state.has("Fishing Rod", player)) - set_rule(world.get_location("This Boat Has Legs", player), lambda state: state.fortress_loot(player) and state.has("Fishing Rod", player)) + set_rule(world.get_location("Hot Tourist Destinations", player), lambda state: True) + set_rule(world.get_location("This Boat Has Legs", player), lambda state: (state.fortress_loot(player) or state.complete_raid(player)) and state.has("Fishing Rod", player)) set_rule(world.get_location("Sniper Duel", player), lambda state: state.has("Archery", player)) set_rule(world.get_location("Nether", player), lambda state: True) set_rule(world.get_location("Great View From Up Here", player), lambda state: state.basic_combat(player)) @@ -141,7 +142,7 @@ def set_rules(world: MultiWorld, player: int): set_rule(world.get_location("On a Rail", player), lambda state: state.has_iron_ingots(player) and state.has('Progressive Tools', player, 2)) # powered rails set_rule(world.get_location("Time to Strike!", player), lambda state: True) set_rule(world.get_location("Cow Tipper", player), lambda state: True) - set_rule(world.get_location("When Pigs Fly", player), lambda state: state.fortress_loot(player) and state.has("Fishing Rod", player) and state.can_adventure(player)) # saddles in fortress chests + set_rule(world.get_location("When Pigs Fly", player), lambda state: (state.fortress_loot(player) or state.complete_raid(player)) and state.has("Fishing Rod", player) and state.can_adventure(player)) set_rule(world.get_location("Overkill", player), lambda state: state.can_brew_potions(player) and (state.has("Progressive Weapons", player) or state.can_reach('The Nether', 'Region', player))) # strength 1 + stone axe crit OR strength 2 + wood axe crit set_rule(world.get_location("Librarian", player), lambda state: state.has("Enchanting", player)) set_rule(world.get_location("Overpowered", player), lambda state: state.has("Resource Blocks", player) and state.has_gold_ingots(player))