mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00

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>
68 lines
1.7 KiB
Python
68 lines
1.7 KiB
Python
from enum import IntFlag
|
|
from typing import Optional, List
|
|
from dataclasses import dataclass, field
|
|
|
|
connector_keyword = " to "
|
|
|
|
|
|
class ModificationFlag(IntFlag):
|
|
NOT_MODIFIED = 0
|
|
MODIFIED = 1
|
|
|
|
class RandomizationFlag(IntFlag):
|
|
NOT_RANDOMIZED = 0b0
|
|
PELICAN_TOWN = 0b11111
|
|
NON_PROGRESSION = 0b11110
|
|
BUILDINGS = 0b11100
|
|
EVERYTHING = 0b11000
|
|
CHAOS = 0b10000
|
|
GINGER_ISLAND = 0b0100000
|
|
LEAD_TO_OPEN_AREA = 0b1000000
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class RegionData:
|
|
name: str
|
|
exits: List[str] = field(default_factory=list)
|
|
flag: ModificationFlag = ModificationFlag.NOT_MODIFIED
|
|
|
|
def get_merged_with(self, exits: List[str]):
|
|
merged_exits = []
|
|
merged_exits.extend(self.exits)
|
|
if exits is not None:
|
|
merged_exits.extend(exits)
|
|
merged_exits = list(set(merged_exits))
|
|
return RegionData(self.name, merged_exits)
|
|
|
|
def get_without_exit(self, exit_to_remove: str):
|
|
exits = [exit for exit in self.exits if exit != exit_to_remove]
|
|
return RegionData(self.name, exits)
|
|
|
|
def get_clone(self):
|
|
return self.get_merged_with(None)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ConnectionData:
|
|
name: str
|
|
destination: str
|
|
origin: Optional[str] = None
|
|
reverse: Optional[str] = None
|
|
flag: RandomizationFlag = RandomizationFlag.NOT_RANDOMIZED
|
|
|
|
def __post_init__(self):
|
|
if connector_keyword in self.name:
|
|
origin, destination = self.name.split(connector_keyword)
|
|
if self.reverse is None:
|
|
super().__setattr__("reverse", f"{destination}{connector_keyword}{origin}")
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ModRegionData:
|
|
mod_name: str
|
|
regions: List[RegionData]
|
|
connections: List[ConnectionData]
|
|
|
|
|
|
|