mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user