Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stardew valley: backpack fix #2028

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion worlds/stardew_valley/docs/en_Stardew Valley.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion worlds/stardew_valley/items.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
2 changes: 2 additions & 0 deletions worlds/stardew_valley/locations.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
44 changes: 44 additions & 0 deletions worlds/stardew_valley/test/TestBackpack.py
Original file line number Diff line number Diff line change
@@ -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])
29 changes: 0 additions & 29 deletions worlds/stardew_valley/test/TestOptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,35 +113,6 @@ def test_given_progressive_when_generate_then_3_progressive_seasons_are_in_the_p
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}
Expand Down
51 changes: 51 additions & 0 deletions worlds/stardew_valley/test/mods/TestBiggerBackpack.py
Original file line number Diff line number Diff line change
@@ -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])
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@
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",
Expand Down Expand Up @@ -78,21 +79,6 @@ def test_given_mod_names_when_generate_paired_with_other_options_then_basic_chec
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,
Expand Down
Empty file.