From 0fc722cb28b17b155de2d16baef487eaf711766b Mon Sep 17 00:00:00 2001 From: Jouramie <16137441+Jouramie@users.noreply.github.com> Date: Sun, 12 Jan 2025 11:01:02 -0500 Subject: [PATCH] Stardew Valley: Remove seasonal farming event, use regions instead (#4379) --- worlds/stardew_valley/__init__.py | 28 +++---------------- worlds/stardew_valley/logic/farming_logic.py | 15 +++++----- .../strings/ap_names/event_names.py | 4 --- worlds/stardew_valley/test/rules/TestTools.py | 5 +--- 4 files changed, 12 insertions(+), 40 deletions(-) diff --git a/worlds/stardew_valley/__init__.py b/worlds/stardew_valley/__init__.py index 6ba0e35e..9da65052 100644 --- a/worlds/stardew_valley/__init__.py +++ b/worlds/stardew_valley/__init__.py @@ -5,29 +5,23 @@ from typing import Dict, Any, Iterable, Optional, Union, List, TextIO from BaseClasses import Region, Entrance, Location, Item, Tutorial, ItemClassification, MultiWorld, CollectionState from Options import PerGameCommonOptions from worlds.AutoWorld import World, WebWorld -from . import rules from .bundles.bundle_room import BundleRoom from .bundles.bundles import get_all_bundles -from .content import content_packs, StardewContent, unpack_content, create_content +from .content import StardewContent, create_content from .early_items import setup_early_items from .items import item_table, create_items, ItemData, Group, items_by_group, get_all_filler_items, remove_limited_amount_packs from .locations import location_table, create_locations, LocationData, locations_by_tag -from .logic.bundle_logic import BundleLogic from .logic.logic import StardewLogic -from .logic.time_logic import MAX_MONTHS from .options import StardewValleyOptions, SeasonRandomization, Goal, BundleRandomization, EnabledFillerBuffs, NumberOfMovementBuffs, \ - BuildingProgression, ExcludeGingerIsland, TrapItems, EntranceRandomization, FarmType, Walnutsanity + BuildingProgression, ExcludeGingerIsland, TrapItems, EntranceRandomization, FarmType from .options.forced_options import force_change_options_if_incompatible from .options.option_groups import sv_option_groups from .options.presets import sv_options_presets from .regions import create_regions from .rules import set_rules -from .stardew_rule import True_, StardewRule, HasProgressionPercent, true_ +from .stardew_rule import True_, StardewRule, HasProgressionPercent from .strings.ap_names.event_names import Event -from .strings.entrance_names import Entrance as EntranceName from .strings.goal_names import Goal as GoalName -from .strings.metal_names import Ore -from .strings.region_names import Region as RegionName, LogicRegion logger = logging.getLogger(__name__) @@ -159,7 +153,7 @@ class StardewValleyWorld(World): self.multiworld.itempool += created_items setup_early_items(self.multiworld, self.options, self.content, self.player, self.random) - self.setup_player_events() + self.setup_logic_events() self.setup_victory() # This is really a best-effort to get the total progression items count. It is mostly used to spread grinds across spheres are push back locations that @@ -199,20 +193,6 @@ class StardewValleyWorld(World): if self.options.farm_type == FarmType.option_meadowlands and self.options.building_progression & BuildingProgression.option_progressive: self.multiworld.push_precollected(self.create_starting_item("Progressive Coop")) - def setup_player_events(self): - self.setup_action_events() - self.setup_logic_events() - - def setup_action_events(self): - spring_farming = LocationData(None, LogicRegion.spring_farming, Event.spring_farming) - self.create_event_location(spring_farming, true_, Event.spring_farming) - summer_farming = LocationData(None, LogicRegion.summer_farming, Event.summer_farming) - self.create_event_location(summer_farming, true_, Event.summer_farming) - fall_farming = LocationData(None, LogicRegion.fall_farming, Event.fall_farming) - self.create_event_location(fall_farming, true_, Event.fall_farming) - winter_farming = LocationData(None, LogicRegion.winter_farming, Event.winter_farming) - self.create_event_location(winter_farming, true_, Event.winter_farming) - def setup_logic_events(self): def register_event(name: str, region: str, rule: StardewRule): event_location = LocationData(None, region, name) diff --git a/worlds/stardew_valley/logic/farming_logic.py b/worlds/stardew_valley/logic/farming_logic.py index 88523bb8..cb8a55e6 100644 --- a/worlds/stardew_valley/logic/farming_logic.py +++ b/worlds/stardew_valley/logic/farming_logic.py @@ -10,17 +10,16 @@ from .season_logic import SeasonLogicMixin from .tool_logic import ToolLogicMixin from .. import options from ..stardew_rule import StardewRule, True_, false_ -from ..strings.ap_names.event_names import Event from ..strings.fertilizer_names import Fertilizer -from ..strings.region_names import Region +from ..strings.region_names import Region, LogicRegion from ..strings.season_names import Season from ..strings.tool_names import Tool -farming_event_by_season = { - Season.spring: Event.spring_farming, - Season.summer: Event.summer_farming, - Season.fall: Event.fall_farming, - Season.winter: Event.winter_farming, +farming_region_by_season = { + Season.spring: LogicRegion.spring_farming, + Season.summer: LogicRegion.summer_farming, + Season.fall: LogicRegion.fall_farming, + Season.winter: LogicRegion.winter_farming, } @@ -54,7 +53,7 @@ class FarmingLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, RegionLogi if isinstance(seasons, str): seasons = (seasons,) - return self.logic.or_(*(self.logic.received(farming_event_by_season[season]) for season in seasons)) + return self.logic.or_(*(self.logic.region.can_reach(farming_region_by_season[season]) for season in seasons)) def has_island_farm(self) -> StardewRule: if self.options.exclude_ginger_island == options.ExcludeGingerIsland.option_false: diff --git a/worlds/stardew_valley/strings/ap_names/event_names.py b/worlds/stardew_valley/strings/ap_names/event_names.py index 449bb672..b7881b3b 100644 --- a/worlds/stardew_valley/strings/ap_names/event_names.py +++ b/worlds/stardew_valley/strings/ap_names/event_names.py @@ -8,9 +8,5 @@ def event(name: str): class Event: victory = event("Victory") - spring_farming = event("Spring Farming") - summer_farming = event("Summer Farming") - fall_farming = event("Fall Farming") - winter_farming = event("Winter Farming") received_walnuts = event("Received Walnuts") diff --git a/worlds/stardew_valley/test/rules/TestTools.py b/worlds/stardew_valley/test/rules/TestTools.py index 5b8975f4..31dd5819 100644 --- a/worlds/stardew_valley/test/rules/TestTools.py +++ b/worlds/stardew_valley/test/rules/TestTools.py @@ -1,7 +1,7 @@ from collections import Counter from .. import SVTestBase -from ... import Event, options +from ... import options from ...options import ToolProgression, SeasonRandomization from ...strings.entrance_names import Entrance from ...strings.region_names import Region @@ -74,12 +74,10 @@ class TestProgressiveToolsLogic(SVTestBase): self.assert_rule_true(rule, self.multiworld.state) self.remove(fall) - self.remove(self.create_item(Event.fall_farming)) self.assert_rule_false(rule, self.multiworld.state) self.remove(tuesday) green_house = self.create_item("Greenhouse") - self.collect(self.create_item(Event.fall_farming)) self.multiworld.state.collect(green_house) self.assert_rule_false(rule, self.multiworld.state) @@ -88,7 +86,6 @@ class TestProgressiveToolsLogic(SVTestBase): self.assertTrue(self.multiworld.get_location("Old Master Cannoli", 1).access_rule(self.multiworld.state)) self.remove(green_house) - self.remove(self.create_item(Event.fall_farming)) self.assert_rule_false(rule, self.multiworld.state) self.remove(friday)