diff --git a/worlds/stardew_valley/docs/en_Stardew Valley.md b/worlds/stardew_valley/docs/en_Stardew Valley.md index b460096e..8370eb5d 100644 --- a/worlds/stardew_valley/docs/en_Stardew Valley.md +++ b/worlds/stardew_valley/docs/en_Stardew Valley.md @@ -24,7 +24,7 @@ The player can choose from a number of goals, using their YAML settings. - Get recognized as the [Greatest Walnut Hunter](https://stardewvalleywiki.com/Golden_Walnut) by Mr Qi, which requires finding all 130 golden walnuts on ginger island - Achieve [Perfection](https://stardewvalleywiki.com/Perfection) in your save file -## What are location check in Stardew Valley? +## What are location checks in Stardew Valley? Location checks in Stardew Valley always include: - [Community Center Bundles](https://stardewvalleywiki.com/Bundles) diff --git a/worlds/stardew_valley/items.py b/worlds/stardew_valley/items.py index 3b0e0521..10359970 100644 --- a/worlds/stardew_valley/items.py +++ b/worlds/stardew_valley/items.py @@ -55,7 +55,7 @@ class Group(enum.Enum): RARECROW = enum.auto() TRAP = enum.auto() MAXIMUM_ONE = enum.auto() - EXACTLY_TWO = enum.auto + EXACTLY_TWO = enum.auto() DEPRECATED = enum.auto() RESOURCE_PACK_USEFUL = enum.auto() SPECIAL_ORDER_BOARD = enum.auto() diff --git a/worlds/stardew_valley/locations.py b/worlds/stardew_valley/locations.py index 74b336b8..67bffa13 100644 --- a/worlds/stardew_valley/locations.py +++ b/worlds/stardew_valley/locations.py @@ -276,6 +276,8 @@ def extend_mandatory_locations(randomized_locations: List[LocationData], world_o def extend_backpack_locations(randomized_locations: List[LocationData], world_options): + if world_options[options.BackpackProgression] == options.BackpackProgression.option_vanilla: + return backpack_locations = [location for location in locations_by_tag[LocationTags.BACKPACK]] filtered_backpack_locations = filter_modded_locations(world_options, backpack_locations) randomized_locations.extend(filtered_backpack_locations) diff --git a/worlds/stardew_valley/test/TestBackpack.py b/worlds/stardew_valley/test/TestBackpack.py new file mode 100644 index 00000000..f26a7c1f --- /dev/null +++ b/worlds/stardew_valley/test/TestBackpack.py @@ -0,0 +1,44 @@ +from . import SVTestBase +from .. import options + + +class TestBackpackVanilla(SVTestBase): + options = {options.BackpackProgression.internal_name: options.BackpackProgression.option_vanilla} + + def test_no_backpack_in_pool(self): + item_names = {item.name for item in self.multiworld.get_items()} + self.assertNotIn("Progressive Backpack", item_names) + + def test_no_backpack_locations(self): + location_names = {location.name for location in self.multiworld.get_locations()} + self.assertNotIn("Large Pack", location_names) + self.assertNotIn("Deluxe Pack", location_names) + + +class TestBackpackProgressive(SVTestBase): + options = {options.BackpackProgression.internal_name: options.BackpackProgression.option_progressive} + + def test_backpack_is_in_pool_2_times(self): + item_names = [item.name for item in self.multiworld.get_items()] + self.assertEqual(item_names.count("Progressive Backpack"), 2) + + def test_2_backpack_locations(self): + location_names = {location.name for location in self.multiworld.get_locations()} + self.assertIn("Large Pack", location_names) + self.assertIn("Deluxe Pack", location_names) + + +class TestBackpackEarlyProgressive(SVTestBase): + options = {options.BackpackProgression.internal_name: options.BackpackProgression.option_early_progressive} + + def test_backpack_is_in_pool_2_times(self): + item_names = [item.name for item in self.multiworld.get_items()] + self.assertEqual(item_names.count("Progressive Backpack"), 2) + + def test_2_backpack_locations(self): + location_names = {location.name for location in self.multiworld.get_locations()} + self.assertIn("Large Pack", location_names) + self.assertIn("Deluxe Pack", location_names) + + def test_progressive_backpack_is_in_early_pool(self): + self.assertIn("Progressive Backpack", self.multiworld.early_items[1]) diff --git a/worlds/stardew_valley/test/TestOptions.py b/worlds/stardew_valley/test/TestOptions.py index 350f1862..1cd17ada 100644 --- a/worlds/stardew_valley/test/TestOptions.py +++ b/worlds/stardew_valley/test/TestOptions.py @@ -113,35 +113,6 @@ class TestSeasonRandomization(SVTestBase): self.assertEqual(items.count(Season.progressive), 3) -class TestBackpackProgression(SVTestBase): - def test_given_vanilla_when_generate_then_no_backpack_in_pool(self): - world_options = {options.BackpackProgression.internal_name: options.BackpackProgression.option_vanilla} - multi_world = setup_solo_multiworld(world_options) - - assert "Progressive Backpack" not in {item.name for item in multi_world.get_items()} - - def test_given_progressive_when_generate_then_progressive_backpack_is_in_pool_two_times(self): - world_options = {options.BackpackProgression.internal_name: options.BackpackProgression.option_progressive} - multi_world = setup_solo_multiworld(world_options) - items = [item.name for item in multi_world.get_items()] - self.assertEqual(items.count("Progressive Backpack"), 2) - - def test_given_progressive_when_generate_then_backpack_upgrades_are_locations(self): - world_options = {options.BackpackProgression.internal_name: options.BackpackProgression.option_progressive} - multi_world = setup_solo_multiworld(world_options) - - locations = {locations.name for locations in multi_world.get_locations(1)} - self.assertIn("Large Pack", locations) - self.assertIn("Deluxe Pack", locations) - - def test_given_early_progressive_when_generate_then_progressive_backpack_is_in_early_pool(self): - world_options = { - options.BackpackProgression.internal_name: options.BackpackProgression.option_early_progressive} - multi_world = setup_solo_multiworld(world_options) - - self.assertIn("Progressive Backpack", multi_world.early_items[1]) - - class TestToolProgression(SVTestBase): def test_given_vanilla_when_generate_then_no_tool_in_pool(self): world_options = {options.ToolProgression.internal_name: options.ToolProgression.option_vanilla} diff --git a/worlds/stardew_valley/test/mods/TestBiggerBackpack.py b/worlds/stardew_valley/test/mods/TestBiggerBackpack.py new file mode 100644 index 00000000..0265f617 --- /dev/null +++ b/worlds/stardew_valley/test/mods/TestBiggerBackpack.py @@ -0,0 +1,51 @@ +from .. import SVTestBase +from ... import options +from ...mods.mod_data import ModNames + + +class TestBiggerBackpackVanilla(SVTestBase): + options = {options.BackpackProgression.internal_name: options.BackpackProgression.option_vanilla, + options.Mods.internal_name: ModNames.big_backpack} + + def test_no_backpack_in_pool(self): + item_names = {item.name for item in self.multiworld.get_items()} + self.assertNotIn("Progressive Backpack", item_names) + + def test_no_backpack_locations(self): + location_names = {location.name for location in self.multiworld.get_locations()} + self.assertNotIn("Large Pack", location_names) + self.assertNotIn("Deluxe Pack", location_names) + self.assertNotIn("Premium Pack", location_names) + + +class TestBiggerBackpackProgressive(SVTestBase): + options = {options.BackpackProgression.internal_name: options.BackpackProgression.option_progressive, + options.Mods.internal_name: ModNames.big_backpack} + + def test_backpack_is_in_pool_3_times(self): + item_names = [item.name for item in self.multiworld.get_items()] + self.assertEqual(item_names.count("Progressive Backpack"), 3) + + def test_3_backpack_locations(self): + location_names = {location.name for location in self.multiworld.get_locations()} + self.assertIn("Large Pack", location_names) + self.assertIn("Deluxe Pack", location_names) + self.assertIn("Premium Pack", location_names) + + +class TestBiggerBackpackEarlyProgressive(SVTestBase): + options = {options.BackpackProgression.internal_name: options.BackpackProgression.option_early_progressive, + options.Mods.internal_name: ModNames.big_backpack} + + def test_backpack_is_in_pool_3_times(self): + item_names = [item.name for item in self.multiworld.get_items()] + self.assertEqual(item_names.count("Progressive Backpack"), 3) + + def test_3_backpack_locations(self): + location_names = {location.name for location in self.multiworld.get_locations()} + self.assertIn("Large Pack", location_names) + self.assertIn("Deluxe Pack", location_names) + self.assertIn("Premium Pack", location_names) + + def test_progressive_backpack_is_in_early_pool(self): + self.assertIn("Progressive Backpack", self.multiworld.early_items[1]) diff --git a/worlds/stardew_valley/test/TestMods.py b/worlds/stardew_valley/test/mods/TestMods.py similarity index 88% rename from worlds/stardew_valley/test/TestMods.py rename to worlds/stardew_valley/test/mods/TestMods.py index 0dc66c3f..a3198e4d 100644 --- a/worlds/stardew_valley/test/TestMods.py +++ b/worlds/stardew_valley/test/mods/TestMods.py @@ -4,13 +4,14 @@ import random import sys from BaseClasses import MultiWorld -from . import setup_solo_multiworld -from .TestOptions import basic_checks, SVTestBase -from .. import options, locations, items, Group, ItemClassification, StardewOptions -from ..regions import RandomizationFlag, create_final_connections, randomize_connections, create_final_regions -from ..items import item_table, items_by_group -from ..locations import location_table, LocationTags -from ..options import stardew_valley_option_classes, Mods, EntranceRandomization +from worlds.stardew_valley.test import setup_solo_multiworld +from worlds.stardew_valley.test.TestOptions import basic_checks, SVTestBase +from worlds.stardew_valley import options, locations, items, Group, ItemClassification, StardewOptions +from worlds.stardew_valley.mods.mod_data import ModNames +from worlds.stardew_valley.regions import RandomizationFlag, create_final_connections, randomize_connections, create_final_regions +from worlds.stardew_valley.items import item_table, items_by_group +from worlds.stardew_valley.locations import location_table, LocationTags +from worlds.stardew_valley.options import stardew_valley_option_classes, Mods, EntranceRandomization mod_list = ["DeepWoods", "Tractor Mod", "Bigger Backpack", "Luck Skill", "Magic", "Socializing Skill", "Archaeology", @@ -78,21 +79,6 @@ class TestGenerateModsOptions(SVTestBase): check_stray_mod_items(mod, self, multiworld) -class TestGivenModdedProgressiveBackpack(SVTestBase): - options = {options.BackpackProgression.internal_name: options.BackpackProgression.option_progressive, - options.Mods.internal_name: "Bigger Backpack"} - - def test_when_generate_world_then_three_progressive_backpack_are_added(self): - self.assertEqual(self.multiworld.itempool.count(self.world.create_item("Progressive Backpack")), 3) - - def test_when_generate_world_then_all_backpack_locations_are_added(self): - created_locations = {location.name for location in self.multiworld.get_locations(1)} - backpacks_exist = [location.name in created_locations - for location in locations.locations_by_tag[LocationTags.BACKPACK]] - all_exist = all(backpacks_exist) - self.assertTrue(all_exist) - - class TestBaseItemGeneration(SVTestBase): options = { options.Friendsanity.internal_name: options.Friendsanity.option_all_with_marriage, diff --git a/worlds/stardew_valley/test/mods/__init__.py b/worlds/stardew_valley/test/mods/__init__.py new file mode 100644 index 00000000..e69de29b