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
This commit is contained in:
0
worlds/stardew_valley/content/mods/__init__.py
Normal file
0
worlds/stardew_valley/content/mods/__init__.py
Normal file
20
worlds/stardew_valley/content/mods/archeology.py
Normal file
20
worlds/stardew_valley/content/mods/archeology.py
Normal file
@@ -0,0 +1,20 @@
|
||||
from ..game_content import ContentPack
|
||||
from ..mod_registry import register_mod_content_pack
|
||||
from ...data.game_item import ItemTag, Tag
|
||||
from ...data.shop import ShopSource
|
||||
from ...data.skill import Skill
|
||||
from ...mods.mod_data import ModNames
|
||||
from ...strings.book_names import ModBook
|
||||
from ...strings.region_names import LogicRegion
|
||||
from ...strings.skill_names import ModSkill
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.archaeology,
|
||||
shop_sources={
|
||||
ModBook.digging_like_worms: (
|
||||
Tag(ItemTag.BOOK, ItemTag.BOOK_SKILL),
|
||||
ShopSource(money_price=500, shop_region=LogicRegion.bookseller_1),),
|
||||
},
|
||||
skills=(Skill(name=ModSkill.archaeology, has_mastery=False),),
|
||||
|
||||
))
|
||||
7
worlds/stardew_valley/content/mods/big_backpack.py
Normal file
7
worlds/stardew_valley/content/mods/big_backpack.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from ..game_content import ContentPack
|
||||
from ..mod_registry import register_mod_content_pack
|
||||
from ...mods.mod_data import ModNames
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.big_backpack,
|
||||
))
|
||||
13
worlds/stardew_valley/content/mods/boarding_house.py
Normal file
13
worlds/stardew_valley/content/mods/boarding_house.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from ..game_content import ContentPack
|
||||
from ..mod_registry import register_mod_content_pack
|
||||
from ...data import villagers_data
|
||||
from ...mods.mod_data import ModNames
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.boarding_house,
|
||||
villagers=(
|
||||
villagers_data.gregory,
|
||||
villagers_data.sheila,
|
||||
villagers_data.joel,
|
||||
)
|
||||
))
|
||||
28
worlds/stardew_valley/content/mods/deepwoods.py
Normal file
28
worlds/stardew_valley/content/mods/deepwoods.py
Normal file
@@ -0,0 +1,28 @@
|
||||
from ..game_content import ContentPack
|
||||
from ..mod_registry import register_mod_content_pack
|
||||
from ...data.harvest import ForagingSource
|
||||
from ...mods.mod_data import ModNames
|
||||
from ...strings.crop_names import Fruit
|
||||
from ...strings.flower_names import Flower
|
||||
from ...strings.region_names import DeepWoodsRegion
|
||||
from ...strings.season_names import Season
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.deepwoods,
|
||||
harvest_sources={
|
||||
# Deep enough to have seen such a tree at least once
|
||||
Fruit.apple: (ForagingSource(regions=(DeepWoodsRegion.floor_10,)),),
|
||||
Fruit.apricot: (ForagingSource(regions=(DeepWoodsRegion.floor_10,)),),
|
||||
Fruit.cherry: (ForagingSource(regions=(DeepWoodsRegion.floor_10,)),),
|
||||
Fruit.orange: (ForagingSource(regions=(DeepWoodsRegion.floor_10,)),),
|
||||
Fruit.peach: (ForagingSource(regions=(DeepWoodsRegion.floor_10,)),),
|
||||
Fruit.pomegranate: (ForagingSource(regions=(DeepWoodsRegion.floor_10,)),),
|
||||
Fruit.mango: (ForagingSource(regions=(DeepWoodsRegion.floor_10,)),),
|
||||
|
||||
Flower.tulip: (ForagingSource(seasons=Season.not_winter, regions=(DeepWoodsRegion.floor_10,)),),
|
||||
Flower.blue_jazz: (ForagingSource(regions=(DeepWoodsRegion.floor_10,)),),
|
||||
Flower.summer_spangle: (ForagingSource(seasons=Season.not_winter, regions=(DeepWoodsRegion.floor_10,)),),
|
||||
Flower.poppy: (ForagingSource(seasons=Season.not_winter, regions=(DeepWoodsRegion.floor_10,)),),
|
||||
Flower.fairy_rose: (ForagingSource(regions=(DeepWoodsRegion.floor_10,)),),
|
||||
}
|
||||
))
|
||||
17
worlds/stardew_valley/content/mods/distant_lands.py
Normal file
17
worlds/stardew_valley/content/mods/distant_lands.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from ..game_content import ContentPack
|
||||
from ..mod_registry import register_mod_content_pack
|
||||
from ...data import villagers_data, fish_data
|
||||
from ...mods.mod_data import ModNames
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.distant_lands,
|
||||
fishes=(
|
||||
fish_data.void_minnow,
|
||||
fish_data.purple_algae,
|
||||
fish_data.swamp_leech,
|
||||
fish_data.giant_horsehoe_crab,
|
||||
),
|
||||
villagers=(
|
||||
villagers_data.zic,
|
||||
)
|
||||
))
|
||||
14
worlds/stardew_valley/content/mods/jasper.py
Normal file
14
worlds/stardew_valley/content/mods/jasper.py
Normal file
@@ -0,0 +1,14 @@
|
||||
from ..game_content import ContentPack
|
||||
from ..mod_registry import register_mod_content_pack
|
||||
from ..override import override
|
||||
from ...data import villagers_data
|
||||
from ...mods.mod_data import ModNames
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.jasper,
|
||||
villagers=(
|
||||
villagers_data.jasper,
|
||||
override(villagers_data.gunther, mod_name=ModNames.jasper),
|
||||
override(villagers_data.marlon, mod_name=ModNames.jasper),
|
||||
)
|
||||
))
|
||||
10
worlds/stardew_valley/content/mods/magic.py
Normal file
10
worlds/stardew_valley/content/mods/magic.py
Normal file
@@ -0,0 +1,10 @@
|
||||
from ..game_content import ContentPack
|
||||
from ..mod_registry import register_mod_content_pack
|
||||
from ...data.skill import Skill
|
||||
from ...mods.mod_data import ModNames
|
||||
from ...strings.skill_names import ModSkill
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.magic,
|
||||
skills=(Skill(name=ModSkill.magic, has_mastery=False),)
|
||||
))
|
||||
88
worlds/stardew_valley/content/mods/npc_mods.py
Normal file
88
worlds/stardew_valley/content/mods/npc_mods.py
Normal file
@@ -0,0 +1,88 @@
|
||||
from ..game_content import ContentPack
|
||||
from ..mod_registry import register_mod_content_pack
|
||||
from ...data import villagers_data
|
||||
from ...mods.mod_data import ModNames
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.alec,
|
||||
villagers=(
|
||||
villagers_data.alec,
|
||||
)
|
||||
))
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.ayeisha,
|
||||
villagers=(
|
||||
villagers_data.ayeisha,
|
||||
)
|
||||
))
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.delores,
|
||||
villagers=(
|
||||
villagers_data.delores,
|
||||
)
|
||||
))
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.eugene,
|
||||
villagers=(
|
||||
villagers_data.eugene,
|
||||
)
|
||||
))
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.juna,
|
||||
villagers=(
|
||||
villagers_data.juna,
|
||||
)
|
||||
))
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.ginger,
|
||||
villagers=(
|
||||
villagers_data.kitty,
|
||||
)
|
||||
))
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.shiko,
|
||||
villagers=(
|
||||
villagers_data.shiko,
|
||||
)
|
||||
))
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.wellwick,
|
||||
villagers=(
|
||||
villagers_data.wellwick,
|
||||
)
|
||||
))
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.yoba,
|
||||
villagers=(
|
||||
villagers_data.yoba,
|
||||
)
|
||||
))
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.riley,
|
||||
villagers=(
|
||||
villagers_data.riley,
|
||||
)
|
||||
))
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.alecto,
|
||||
villagers=(
|
||||
villagers_data.alecto,
|
||||
)
|
||||
))
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.lacey,
|
||||
villagers=(
|
||||
villagers_data.lacey,
|
||||
)
|
||||
))
|
||||
25
worlds/stardew_valley/content/mods/skill_mods.py
Normal file
25
worlds/stardew_valley/content/mods/skill_mods.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from ..game_content import ContentPack
|
||||
from ..mod_registry import register_mod_content_pack
|
||||
from ...data.skill import Skill
|
||||
from ...mods.mod_data import ModNames
|
||||
from ...strings.skill_names import ModSkill
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.luck_skill,
|
||||
skills=(Skill(name=ModSkill.luck, has_mastery=False),)
|
||||
))
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.socializing_skill,
|
||||
skills=(Skill(name=ModSkill.socializing, has_mastery=False),)
|
||||
))
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.cooking_skill,
|
||||
skills=(Skill(name=ModSkill.cooking, has_mastery=False),)
|
||||
))
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.binning_skill,
|
||||
skills=(Skill(name=ModSkill.binning, has_mastery=False),)
|
||||
))
|
||||
@@ -0,0 +1,7 @@
|
||||
from ..game_content import ContentPack
|
||||
from ..mod_registry import register_mod_content_pack
|
||||
from ...mods.mod_data import ModNames
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.skull_cavern_elevator,
|
||||
))
|
||||
126
worlds/stardew_valley/content/mods/sve.py
Normal file
126
worlds/stardew_valley/content/mods/sve.py
Normal file
@@ -0,0 +1,126 @@
|
||||
from ..game_content import ContentPack, StardewContent
|
||||
from ..mod_registry import register_mod_content_pack
|
||||
from ..override import override
|
||||
from ..vanilla.ginger_island import ginger_island_content_pack as ginger_island_content_pack
|
||||
from ...data import villagers_data, fish_data
|
||||
from ...data.harvest import ForagingSource
|
||||
from ...data.requirement import YearRequirement
|
||||
from ...mods.mod_data import ModNames
|
||||
from ...strings.crop_names import Fruit
|
||||
from ...strings.fish_names import WaterItem
|
||||
from ...strings.flower_names import Flower
|
||||
from ...strings.forageable_names import Mushroom, Forageable
|
||||
from ...strings.region_names import Region, SVERegion
|
||||
from ...strings.season_names import Season
|
||||
|
||||
|
||||
class SVEContentPack(ContentPack):
|
||||
|
||||
def fish_hook(self, content: StardewContent):
|
||||
if ginger_island_content_pack.name not in content.registered_packs:
|
||||
content.fishes.pop(fish_data.baby_lunaloo.name)
|
||||
content.fishes.pop(fish_data.clownfish.name)
|
||||
content.fishes.pop(fish_data.lunaloo.name)
|
||||
content.fishes.pop(fish_data.seahorse.name)
|
||||
content.fishes.pop(fish_data.shiny_lunaloo.name)
|
||||
content.fishes.pop(fish_data.starfish.name)
|
||||
content.fishes.pop(fish_data.sea_sponge.name)
|
||||
|
||||
# Remove Highlands fishes at it requires 2 Lance hearts for the quest to access it
|
||||
content.fishes.pop(fish_data.daggerfish.name)
|
||||
content.fishes.pop(fish_data.gemfish.name)
|
||||
|
||||
# Remove Fable Reef fishes at it requires 8 Lance hearts for the event to access it
|
||||
content.fishes.pop(fish_data.torpedo_trout.name)
|
||||
|
||||
def villager_hook(self, content: StardewContent):
|
||||
if ginger_island_content_pack.name not in content.registered_packs:
|
||||
# Remove Lance if Ginger Island is not in content since he is first encountered in Volcano Forge
|
||||
content.villagers.pop(villagers_data.lance.name)
|
||||
|
||||
|
||||
register_mod_content_pack(SVEContentPack(
|
||||
ModNames.sve,
|
||||
weak_dependencies=(
|
||||
ginger_island_content_pack.name,
|
||||
ModNames.jasper, # To override Marlon and Gunther
|
||||
),
|
||||
harvest_sources={
|
||||
Mushroom.red: (
|
||||
ForagingSource(regions=(SVERegion.forest_west,), seasons=(Season.summer, Season.fall)), ForagingSource(regions=(SVERegion.sprite_spring_cave,), )
|
||||
),
|
||||
Mushroom.purple: (
|
||||
ForagingSource(regions=(SVERegion.forest_west,), seasons=(Season.fall,)), ForagingSource(regions=(SVERegion.sprite_spring_cave,), )
|
||||
),
|
||||
Mushroom.morel: (
|
||||
ForagingSource(regions=(SVERegion.forest_west,), seasons=(Season.fall,)), ForagingSource(regions=(SVERegion.sprite_spring_cave,), )
|
||||
),
|
||||
Mushroom.chanterelle: (
|
||||
ForagingSource(regions=(SVERegion.forest_west,), seasons=(Season.fall,)), ForagingSource(regions=(SVERegion.sprite_spring_cave,), )
|
||||
),
|
||||
Flower.tulip: (ForagingSource(regions=(SVERegion.sprite_spring,), seasons=(Season.spring,)),),
|
||||
Flower.blue_jazz: (ForagingSource(regions=(SVERegion.sprite_spring,), seasons=(Season.spring,)),),
|
||||
Flower.summer_spangle: (ForagingSource(regions=(SVERegion.sprite_spring,), seasons=(Season.summer,)),),
|
||||
Flower.sunflower: (ForagingSource(regions=(SVERegion.sprite_spring,), seasons=(Season.summer,)),),
|
||||
Flower.fairy_rose: (ForagingSource(regions=(SVERegion.sprite_spring,), seasons=(Season.fall,)),),
|
||||
Fruit.ancient_fruit: (
|
||||
ForagingSource(regions=(SVERegion.sprite_spring,), seasons=(Season.spring, Season.summer, Season.fall), other_requirements=(YearRequirement(3),)),
|
||||
ForagingSource(regions=(SVERegion.sprite_spring_cave,)),
|
||||
),
|
||||
Fruit.sweet_gem_berry: (
|
||||
ForagingSource(regions=(SVERegion.sprite_spring,), seasons=(Season.spring, Season.summer, Season.fall), other_requirements=(YearRequirement(3),)),
|
||||
),
|
||||
|
||||
# Fable Reef
|
||||
WaterItem.coral: (ForagingSource(regions=(SVERegion.fable_reef,)),),
|
||||
Forageable.rainbow_shell: (ForagingSource(regions=(SVERegion.fable_reef,)),),
|
||||
WaterItem.sea_urchin: (ForagingSource(regions=(SVERegion.fable_reef,)),),
|
||||
},
|
||||
fishes=(
|
||||
fish_data.baby_lunaloo, # Removed when no ginger island
|
||||
fish_data.bonefish,
|
||||
fish_data.bull_trout,
|
||||
fish_data.butterfish,
|
||||
fish_data.clownfish, # Removed when no ginger island
|
||||
fish_data.daggerfish,
|
||||
fish_data.frog,
|
||||
fish_data.gemfish,
|
||||
fish_data.goldenfish,
|
||||
fish_data.grass_carp,
|
||||
fish_data.king_salmon,
|
||||
fish_data.kittyfish,
|
||||
fish_data.lunaloo, # Removed when no ginger island
|
||||
fish_data.meteor_carp,
|
||||
fish_data.minnow,
|
||||
fish_data.puppyfish,
|
||||
fish_data.radioactive_bass,
|
||||
fish_data.seahorse, # Removed when no ginger island
|
||||
fish_data.shiny_lunaloo, # Removed when no ginger island
|
||||
fish_data.snatcher_worm,
|
||||
fish_data.starfish, # Removed when no ginger island
|
||||
fish_data.torpedo_trout,
|
||||
fish_data.undeadfish,
|
||||
fish_data.void_eel,
|
||||
fish_data.water_grub,
|
||||
fish_data.sea_sponge, # Removed when no ginger island
|
||||
|
||||
),
|
||||
villagers=(
|
||||
villagers_data.claire,
|
||||
villagers_data.lance, # Removed when no ginger island
|
||||
villagers_data.mommy,
|
||||
villagers_data.sophia,
|
||||
villagers_data.victor,
|
||||
villagers_data.andy,
|
||||
villagers_data.apples,
|
||||
villagers_data.gunther,
|
||||
villagers_data.martin,
|
||||
villagers_data.marlon,
|
||||
villagers_data.morgan,
|
||||
villagers_data.scarlett,
|
||||
villagers_data.susan,
|
||||
villagers_data.morris,
|
||||
# The wizard leaves his tower on sunday, for like 1 hour... Good enough for entrance rando!
|
||||
override(villagers_data.wizard, locations=(Region.wizard_tower, Region.forest), bachelor=True, mod_name=ModNames.sve),
|
||||
)
|
||||
))
|
||||
7
worlds/stardew_valley/content/mods/tractor.py
Normal file
7
worlds/stardew_valley/content/mods/tractor.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from ..game_content import ContentPack
|
||||
from ..mod_registry import register_mod_content_pack
|
||||
from ...mods.mod_data import ModNames
|
||||
|
||||
register_mod_content_pack(ContentPack(
|
||||
ModNames.tractor,
|
||||
))
|
||||
Reference in New Issue
Block a user