Stardew Valley 6.x.x: The Content Update (#3478)
Focus of the Update: Compatibility with Stardew Valley 1.6 Released on March 19th 2024
This includes randomization for pretty much all of the new content, including but not limited to
- Raccoon Bundles
- Booksanity
- Skill Masteries
- New Recipes, Craftables, Fish, Maps, Farm Type, Festivals and Quests
This also includes a significant reorganisation of the code into "Content Packs", to allow for easier modularity of various game mechanics between the settings and the supported mods. This improves maintainability quite a bit.
In addition to that, a few **very** requested new features have been introduced, although they weren't the focus of this update
- Walnutsanity
- Player Buffs
- More customizability in settings, such as shorter special orders, ER without farmhouse
- New Remixed Bundles
2024-07-07 13:04:25 +00:00
from __future__ import annotations
from dataclasses import dataclass , field
from typing import Dict , Iterable , Set , Any , Mapping , Type , Tuple , Union
2024-12-01 02:52:07 +00:00
from . feature import booksanity , cropsanity , fishsanity , friendsanity , skill_progression
Stardew Valley 6.x.x: The Content Update (#3478)
Focus of the Update: Compatibility with Stardew Valley 1.6 Released on March 19th 2024
This includes randomization for pretty much all of the new content, including but not limited to
- Raccoon Bundles
- Booksanity
- Skill Masteries
- New Recipes, Craftables, Fish, Maps, Farm Type, Festivals and Quests
This also includes a significant reorganisation of the code into "Content Packs", to allow for easier modularity of various game mechanics between the settings and the supported mods. This improves maintainability quite a bit.
In addition to that, a few **very** requested new features have been introduced, although they weren't the focus of this update
- Walnutsanity
- Player Buffs
- More customizability in settings, such as shorter special orders, ER without farmhouse
- New Remixed Bundles
2024-07-07 13:04:25 +00:00
from . . data . fish_data import FishItem
from . . data . game_item import GameItem , ItemSource , ItemTag
from . . data . skill import Skill
from . . data . villagers_data import Villager
@dataclass ( frozen = True )
class StardewContent :
features : StardewFeatures
registered_packs : Set [ str ] = field ( default_factory = set )
# regions -> To be used with can reach rule
game_items : Dict [ str , GameItem ] = field ( default_factory = dict )
fishes : Dict [ str , FishItem ] = field ( default_factory = dict )
villagers : Dict [ str , Villager ] = field ( default_factory = dict )
skills : Dict [ str , Skill ] = field ( default_factory = dict )
quests : Dict [ str , Any ] = field ( default_factory = dict )
def find_sources_of_type ( self , types : Union [ Type [ ItemSource ] , Tuple [ Type [ ItemSource ] ] ] ) - > Iterable [ ItemSource ] :
for item in self . game_items . values ( ) :
for source in item . sources :
if isinstance ( source , types ) :
yield source
def source_item ( self , item_name : str , * sources : ItemSource ) :
item = self . game_items . setdefault ( item_name , GameItem ( item_name ) )
item . add_sources ( sources )
def tag_item ( self , item_name : str , * tags : ItemTag ) :
item = self . game_items . setdefault ( item_name , GameItem ( item_name ) )
item . add_tags ( tags )
def untag_item ( self , item_name : str , tag : ItemTag ) :
self . game_items [ item_name ] . tags . remove ( tag )
def find_tagged_items ( self , tag : ItemTag ) - > Iterable [ GameItem ] :
# TODO might be worth caching this, but it need to only be cached once the content is finalized...
for item in self . game_items . values ( ) :
if tag in item . tags :
yield item
@dataclass ( frozen = True )
class StardewFeatures :
booksanity : booksanity . BooksanityFeature
cropsanity : cropsanity . CropsanityFeature
fishsanity : fishsanity . FishsanityFeature
friendsanity : friendsanity . FriendsanityFeature
2024-12-01 02:52:07 +00:00
skill_progression : skill_progression . SkillProgressionFeature
Stardew Valley 6.x.x: The Content Update (#3478)
Focus of the Update: Compatibility with Stardew Valley 1.6 Released on March 19th 2024
This includes randomization for pretty much all of the new content, including but not limited to
- Raccoon Bundles
- Booksanity
- Skill Masteries
- New Recipes, Craftables, Fish, Maps, Farm Type, Festivals and Quests
This also includes a significant reorganisation of the code into "Content Packs", to allow for easier modularity of various game mechanics between the settings and the supported mods. This improves maintainability quite a bit.
In addition to that, a few **very** requested new features have been introduced, although they weren't the focus of this update
- Walnutsanity
- Player Buffs
- More customizability in settings, such as shorter special orders, ER without farmhouse
- New Remixed Bundles
2024-07-07 13:04:25 +00:00
@dataclass ( frozen = True )
class ContentPack :
name : str
dependencies : Iterable [ str ] = ( )
""" Hard requirement, generation will fail if it ' s missing. """
weak_dependencies : Iterable [ str ] = ( )
""" Not a strict dependency, only used only for ordering the packs to make sure hooks are applied correctly. """
# items
# def item_hook
# ...
harvest_sources : Mapping [ str , Iterable [ ItemSource ] ] = field ( default_factory = dict )
""" Harvest sources contains both crops and forageables, but also fruits from trees, the cave farm and stuff harvested from tapping like maple syrup. """
def harvest_source_hook ( self , content : StardewContent ) :
. . .
shop_sources : Mapping [ str , Iterable [ ItemSource ] ] = field ( default_factory = dict )
def shop_source_hook ( self , content : StardewContent ) :
. . .
fishes : Iterable [ FishItem ] = ( )
def fish_hook ( self , content : StardewContent ) :
. . .
crafting_sources : Mapping [ str , Iterable [ ItemSource ] ] = field ( default_factory = dict )
def crafting_hook ( self , content : StardewContent ) :
. . .
artisan_good_sources : Mapping [ str , Iterable [ ItemSource ] ] = field ( default_factory = dict )
def artisan_good_hook ( self , content : StardewContent ) :
. . .
villagers : Iterable [ Villager ] = ( )
def villager_hook ( self , content : StardewContent ) :
. . .
skills : Iterable [ Skill ] = ( )
def skill_hook ( self , content : StardewContent ) :
. . .
quests : Iterable [ Any ] = ( )
def quest_hook ( self , content : StardewContent ) :
. . .
def finalize_hook ( self , content : StardewContent ) :
""" Last hook called on the pack, once all other content packs have been registered.
This is the place to do any final adjustments to the content , like adding rules based on tags applied by other packs .
"""
. . .