Stardew valley: backpack fix, enum fix (#2028)

* - Reorganised tests for better backpack coverage
- Added a test for backpack locations being absent on vanilla

* - Fix backpack locations on vanilla

* - Fixed a typo in documentation

* - Added missing parenthesis after enum.auto so that Python 3.11 still works

* - Added Blank lines at the end of the backpack test files

* - cleaned whitespace
This commit is contained in:
agilbert1412 2023-07-24 19:52:15 -04:00 committed by GitHub
parent fa3d69cf48
commit bb069443a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 107 additions and 53 deletions

View File

@ -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 - 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 - 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: Location checks in Stardew Valley always include:
- [Community Center Bundles](https://stardewvalleywiki.com/Bundles) - [Community Center Bundles](https://stardewvalleywiki.com/Bundles)

View File

@ -55,7 +55,7 @@ class Group(enum.Enum):
RARECROW = enum.auto() RARECROW = enum.auto()
TRAP = enum.auto() TRAP = enum.auto()
MAXIMUM_ONE = enum.auto() MAXIMUM_ONE = enum.auto()
EXACTLY_TWO = enum.auto EXACTLY_TWO = enum.auto()
DEPRECATED = enum.auto() DEPRECATED = enum.auto()
RESOURCE_PACK_USEFUL = enum.auto() RESOURCE_PACK_USEFUL = enum.auto()
SPECIAL_ORDER_BOARD = enum.auto() SPECIAL_ORDER_BOARD = enum.auto()

View File

@ -276,6 +276,8 @@ def extend_mandatory_locations(randomized_locations: List[LocationData], world_o
def extend_backpack_locations(randomized_locations: List[LocationData], world_options): 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]] backpack_locations = [location for location in locations_by_tag[LocationTags.BACKPACK]]
filtered_backpack_locations = filter_modded_locations(world_options, backpack_locations) filtered_backpack_locations = filter_modded_locations(world_options, backpack_locations)
randomized_locations.extend(filtered_backpack_locations) randomized_locations.extend(filtered_backpack_locations)

View File

@ -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])

View File

@ -113,35 +113,6 @@ class TestSeasonRandomization(SVTestBase):
self.assertEqual(items.count(Season.progressive), 3) 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): class TestToolProgression(SVTestBase):
def test_given_vanilla_when_generate_then_no_tool_in_pool(self): def test_given_vanilla_when_generate_then_no_tool_in_pool(self):
world_options = {options.ToolProgression.internal_name: options.ToolProgression.option_vanilla} world_options = {options.ToolProgression.internal_name: options.ToolProgression.option_vanilla}

View File

@ -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])

View File

@ -4,13 +4,14 @@ import random
import sys import sys
from BaseClasses import MultiWorld from BaseClasses import MultiWorld
from . import setup_solo_multiworld from worlds.stardew_valley.test import setup_solo_multiworld
from .TestOptions import basic_checks, SVTestBase from worlds.stardew_valley.test.TestOptions import basic_checks, SVTestBase
from .. import options, locations, items, Group, ItemClassification, StardewOptions from worlds.stardew_valley import options, locations, items, Group, ItemClassification, StardewOptions
from ..regions import RandomizationFlag, create_final_connections, randomize_connections, create_final_regions from worlds.stardew_valley.mods.mod_data import ModNames
from ..items import item_table, items_by_group from worlds.stardew_valley.regions import RandomizationFlag, create_final_connections, randomize_connections, create_final_regions
from ..locations import location_table, LocationTags from worlds.stardew_valley.items import item_table, items_by_group
from ..options import stardew_valley_option_classes, Mods, EntranceRandomization 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", mod_list = ["DeepWoods", "Tractor Mod", "Bigger Backpack",
"Luck Skill", "Magic", "Socializing Skill", "Archaeology", "Luck Skill", "Magic", "Socializing Skill", "Archaeology",
@ -78,21 +79,6 @@ class TestGenerateModsOptions(SVTestBase):
check_stray_mod_items(mod, self, multiworld) 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): class TestBaseItemGeneration(SVTestBase):
options = { options = {
options.Friendsanity.internal_name: options.Friendsanity.option_all_with_marriage, options.Friendsanity.internal_name: options.Friendsanity.option_all_with_marriage,