Stardew Valley: 5.x.x - The Allsanity Update (#2764)

Major Content update for Stardew Valley, including the following features

- Major performance improvements all across the Stardew Valley apworld, including a significant reduction in the test time
- Randomized Farm Type
- Bundles rework (Remixed Bundles and Missing Bundle!)
- New Settings:
  * Shipsanity - Shipping individual items
  * Monstersanity - Slaying monsters
  * Cooksanity - Cooking individual recipes
  * Chefsanity - Learning individual recipes
  * Craftsanity - Crafting individual items
- New Goals:
  * Protector of the Valley - Complete every monster slayer goal
  * Full Shipment - Ship every item
  * Craftmaster - Craft every item
  * Gourmet Chef - Cook every recipe
  * Legend - Earn 10 000 000g
  * Mystery of the Stardrops - Find every stardrop (Maguffin Hunt)
  * Allsanity - Complete every check in your slot
- Building Shuffle: Cheaper options
- Tool Shuffle: Cheaper options
- Money rework
- New traps
- New isolated checks and items, including the farm cave, the movie theater, etc
- Mod Support: SVE [Albrekka]
- Mod Support: Distant Lands [Albrekka]
- Mod Support: Hat Mouse Lacey [Albrekka]
- Mod Support: Boarding House [Albrekka]

Co-authored-by: Witchybun <elnendil@gmail.com>
Co-authored-by: Witchybun <96719127+Witchybun@users.noreply.github.com>
Co-authored-by: Jouramie <jouramie@hotmail.com>
Co-authored-by: Alchav <59858495+Alchav@users.noreply.github.com>
This commit is contained in:
agilbert1412
2024-03-15 15:05:14 +03:00
committed by GitHub
parent f7da833572
commit 52e65e208e
177 changed files with 17815 additions and 6863 deletions

View File

@@ -1,21 +1,32 @@
from dataclasses import dataclass
from typing import Dict
from typing import Protocol, ClassVar
from Options import Range, NamedRange, Toggle, Choice, OptionSet, PerGameCommonOptions, DeathLink, Option
from Options import Range, NamedRange, Toggle, Choice, OptionSet, PerGameCommonOptions, DeathLink
from .mods.mod_data import ModNames
class StardewValleyOption(Protocol):
internal_name: ClassVar[str]
class Goal(Choice):
"""What's your goal with this play-through?
Community Center: Complete the Community Center.
Grandpa's Evaluation: Succeed grandpa's evaluation with 4 lit candles.
Bottom of the Mines: Reach level 120 in the mineshaft.
Cryptic Note: Complete the quest "Cryptic Note" where Mr Qi asks you to reach floor 100 in the Skull Cavern.
Master Angler: Catch every fish in the game. Pairs well with Fishsanity.
Complete Collection: Complete the museum by donating every possible item. Pairs well with Museumsanity.
Full House: Get married and have two children. Pairs well with Friendsanity.
Community Center: Complete the Community Center
Grandpa's Evaluation: Succeed Grandpa's evaluation with 4 lit candles
Bottom of the Mines: Reach level 120 in the mineshaft
Cryptic Note: Complete the quest "Cryptic Note" where Mr Qi asks you to reach floor 100 in the Skull Cavern
Master Angler: Catch every fish. Adapts to chosen Fishsanity option
Complete Collection: Complete the museum by donating every possible item. Pairs well with Museumsanity
Full House: Get married and have two children. Pairs well with Friendsanity
Greatest Walnut Hunter: Find all 130 Golden Walnuts
Perfection: Attain Perfection, based on the vanilla definition.
Protector of the Valley: Complete all the monster slayer goals. Adapts to Monstersanity
Full Shipment: Ship every item in the collection tab. Adapts to Shipsanity
Gourmet Chef: Cook every recipe. Adapts to Cooksanity
Craft Master: Craft every item.
Legend: Earn 10 000 000g
Mystery of the Stardrops: Find every stardrop
Allsanity: Complete every check in your slot
Perfection: Attain Perfection, based on the vanilla definition
"""
internal_name = "goal"
display_name = "Goal"
@@ -28,16 +39,18 @@ class Goal(Choice):
option_complete_collection = 5
option_full_house = 6
option_greatest_walnut_hunter = 7
option_protector_of_the_valley = 8
option_full_shipment = 9
option_gourmet_chef = 10
option_craft_master = 11
option_legend = 12
option_mystery_of_the_stardrops = 13
# option_junimo_kart =
# option_prairie_king =
# option_fector_challenge =
# option_craft_master =
# option_mystery_of_the_stardrops =
# option_protector_of_the_valley =
# option_full_shipment =
# option_legend =
# option_beloved_farmer =
# option_master_of_the_five_ways =
option_allsanity = 24
option_perfection = 25
@classmethod
@@ -48,6 +61,20 @@ class Goal(Choice):
return super().get_option_name(value)
class FarmType(Choice):
"""What farm to play on?"""
internal_name = "farm_type"
display_name = "Farm Type"
default = "random"
option_standard = 0
option_riverland = 1
option_forest = 2
option_hill_top = 3
option_wilderness = 4
option_four_corners = 5
option_beach = 6
class StartingMoney(NamedRange):
"""Amount of gold when arriving at the farm.
Set to -1 or unlimited for infinite money"""
@@ -90,28 +117,36 @@ class BundleRandomization(Choice):
"""What items are needed for the community center bundles?
Vanilla: Standard bundles from the vanilla game
Thematic: Every bundle will require random items compatible with their original theme
Remixed: Picks bundles at random from thematic, vanilla remixed and new custom ones
Shuffled: Every bundle will require random items and follow no particular structure"""
internal_name = "bundle_randomization"
display_name = "Bundle Randomization"
default = 1
default = 2
option_vanilla = 0
option_thematic = 1
option_shuffled = 2
option_remixed = 2
option_shuffled = 3
class BundlePrice(Choice):
"""How many items are needed for the community center bundles?
Minimum: Every bundle will require only one item
Very Cheap: Every bundle will require 2 items fewer than usual
Cheap: Every bundle will require 1 item fewer than usual
Normal: Every bundle will require the vanilla number of items
Expensive: Every bundle will require 1 extra item when applicable"""
Expensive: Every bundle will require 1 extra item
Very Expensive: Every bundle will require 2 extra items
Maximum: Every bundle will require many extra items"""
internal_name = "bundle_price"
display_name = "Bundle Price"
default = 2
option_very_cheap = 0
option_cheap = 1
option_normal = 2
option_expensive = 3
default = 0
option_minimum = -8
option_very_cheap = -2
option_cheap = -1
option_normal = 0
option_expensive = 1
option_very_expensive = 2
option_maximum = 8
class EntranceRandomization(Choice):
@@ -189,12 +224,18 @@ class BackpackProgression(Choice):
class ToolProgression(Choice):
"""Shuffle the tool upgrades?
Vanilla: Clint will upgrade your tools with metal bars.
Progressive: You will randomly find Progressive Tool upgrades."""
Progressive: You will randomly find Progressive Tool upgrades.
Cheap: Tool Upgrades will cost 2/5th as much
Very Cheap: Tool Upgrades will cost 1/5th as much"""
internal_name = "tool_progression"
display_name = "Tool Progression"
default = 1
option_vanilla = 0
option_progressive = 1
option_vanilla = 0b000 # 0
option_progressive = 0b001 # 1
option_vanilla_cheap = 0b010 # 2
option_vanilla_very_cheap = 0b100 # 4
option_progressive_cheap = 0b011 # 3
option_progressive_very_cheap = 0b101 # 5
class ElevatorProgression(Choice):
@@ -228,13 +269,18 @@ class BuildingProgression(Choice):
Progressive: You will receive the buildings and will be able to build the first one of each type for free,
once it is received. If you want more of the same building, it will cost the vanilla price.
Progressive early shipping bin: Same as Progressive, but the shipping bin will be placed early in the multiworld.
Cheap: Buildings will cost half as much
Very Cheap: Buildings will cost 1/5th as much
"""
internal_name = "building_progression"
display_name = "Building Progression"
default = 2
option_vanilla = 0
option_progressive = 1
option_progressive_early_shipping_bin = 2
default = 3
option_vanilla = 0b000 # 0
option_vanilla_cheap = 0b010 # 2
option_vanilla_very_cheap = 0b100 # 4
option_progressive = 0b001 # 1
option_progressive_cheap = 0b011 # 3
option_progressive_very_cheap = 0b101 # 5
class FestivalLocations(Choice):
@@ -283,19 +329,23 @@ class SpecialOrderLocations(Choice):
option_board_qi = 2
class HelpWantedLocations(NamedRange):
"""Include location checks for Help Wanted quests
Out of every 7 quests, 4 will be item deliveries, and then 1 of each for: Fishing, Gathering and Slaying Monsters.
Choosing a multiple of 7 is recommended."""
internal_name = "help_wanted_locations"
class QuestLocations(NamedRange):
"""Include location checks for quests
None: No quests are checks
Story: Only story quests are checks
Number: Story quests and help wanted quests are checks up to the specified amount. Multiple of 7 recommended
Out of every 7 help wanted quests, 4 will be item deliveries, and then 1 of each for: Fishing, Gathering and Slaying Monsters.
Extra Help wanted quests might be added if current settings don't have enough locations"""
internal_name = "quest_locations"
default = 7
range_start = 0
range_end = 56
# step = 7
display_name = "Number of Help Wanted locations"
display_name = "Quest Locations"
special_range_names = {
"none": 0,
"none": -1,
"story": 0,
"minimum": 7,
"normal": 14,
"lots": 28,
@@ -344,6 +394,115 @@ class Museumsanity(Choice):
option_all = 3
class Monstersanity(Choice):
"""Locations for slaying monsters?
None: There are no checks for slaying monsters
One per category: Every category visible at the adventure guild gives one check
One per Monster: Every unique monster gives one check
Monster Eradication Goals: The Monster Eradication Goals each contain one check
Short Monster Eradication Goals: The Monster Eradication Goals each contain one check, but are reduced by 60%
Very Short Monster Eradication Goals: The Monster Eradication Goals each contain one check, but are reduced by 90%
Progressive Eradication Goals: The Monster Eradication Goals each contain 5 checks, each 20% of the way
Split Eradication Goals: The Monster Eradication Goals are split by monsters, each monster has one check
"""
internal_name = "monstersanity"
display_name = "Monstersanity"
default = 1
option_none = 0
option_one_per_category = 1
option_one_per_monster = 2
option_goals = 3
option_short_goals = 4
option_very_short_goals = 5
option_progressive_goals = 6
option_split_goals = 7
class Shipsanity(Choice):
"""Locations for shipping items?
None: There are no checks for shipping items
Crops: Every crop and forageable being shipped is a check
Fish: Every fish being shipped is a check except legendaries
Full Shipment: Every item in the Collections page is a check
Full Shipment With Fish: Every item in the Collections page and every fish is a check
Everything: Every item in the game that can be shipped is a check
"""
internal_name = "shipsanity"
display_name = "Shipsanity"
default = 0
option_none = 0
option_crops = 1
# option_quality_crops = 2
option_fish = 3
# option_quality_fish = 4
option_full_shipment = 5
# option_quality_full_shipment = 6
option_full_shipment_with_fish = 7
# option_quality_full_shipment_with_fish = 8
option_everything = 9
# option_quality_everything = 10
class Cooksanity(Choice):
"""Locations for cooking food?
None: There are no checks for cooking
Queen of Sauce: Every Queen of Sauce Recipe can be cooked for a check
All: Every cooking recipe can be cooked for a check
"""
internal_name = "cooksanity"
display_name = "Cooksanity"
default = 0
option_none = 0
option_queen_of_sauce = 1
option_all = 2
class Chefsanity(NamedRange):
"""Locations for leaning cooking recipes?
Vanilla: All cooking recipes are learned normally
Queen of Sauce: Every Queen of sauce episode is a check, all queen of sauce recipes are items
Purchases: Every purchasable recipe is a check
Friendship: Recipes obtained from friendship are checks
Skills: Recipes obtained from skills are checks
All: Learning every cooking recipe is a check
"""
internal_name = "chefsanity"
display_name = "Chefsanity"
default = 0
range_start = 0
range_end = 15
option_none = 0b0000 # 0
option_queen_of_sauce = 0b0001 # 1
option_purchases = 0b0010 # 2
option_qos_and_purchases = 0b0011 # 3
option_skills = 0b0100 # 4
option_friendship = 0b1000 # 8
option_all = 0b1111 # 15
special_range_names = {
"none": 0b0000, # 0
"queen_of_sauce": 0b0001, # 1
"purchases": 0b0010, # 2
"qos_and_purchases": 0b0011, # 3
"skills": 0b0100, # 4
"friendship": 0b1000, # 8
"all": 0b1111, # 15
}
class Craftsanity(Choice):
"""Checks for crafting items?
If enabled, all recipes purchased in shops will be checks as well.
Recipes obtained from other sources will depend on related archipelago settings
"""
internal_name = "craftsanity"
display_name = "Craftsanity"
default = 0
option_none = 0
option_all = 1
class Friendsanity(Choice):
"""Shuffle Friendships?
None: Friendship hearts are earned normally
@@ -530,13 +689,15 @@ class Mods(OptionSet):
ModNames.cooking_skill, ModNames.binning_skill, ModNames.juna,
ModNames.jasper, ModNames.alec, ModNames.yoba, ModNames.eugene,
ModNames.wellwick, ModNames.ginger, ModNames.shiko, ModNames.delores,
ModNames.ayeisha, ModNames.riley, ModNames.skull_cavern_elevator
ModNames.ayeisha, ModNames.riley, ModNames.skull_cavern_elevator, ModNames.sve, ModNames.distant_lands,
ModNames.alecto, ModNames.lacey, ModNames.boarding_house
}
@dataclass
class StardewValleyOptions(PerGameCommonOptions):
goal: Goal
farm_type: FarmType
starting_money: StartingMoney
profit_margin: ProfitMargin
bundle_randomization: BundleRandomization
@@ -552,9 +713,14 @@ class StardewValleyOptions(PerGameCommonOptions):
elevator_progression: ElevatorProgression
arcade_machine_locations: ArcadeMachineLocations
special_order_locations: SpecialOrderLocations
help_wanted_locations: HelpWantedLocations
quest_locations: QuestLocations
fishsanity: Fishsanity
museumsanity: Museumsanity
monstersanity: Monstersanity
shipsanity: Shipsanity
cooksanity: Cooksanity
chefsanity: Chefsanity
craftsanity: Craftsanity
friendsanity: Friendsanity
friendsanity_heart_size: FriendsanityHeartSize
movement_buff_number: NumberOfMovementBuffs