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:
parent
fa3d69cf48
commit
bb069443a4
|
@ -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)
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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])
|
|
@ -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}
|
||||||
|
|
|
@ -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])
|
|
@ -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,
|
Loading…
Reference in New Issue