 9ac921380f
			
		
	
	9ac921380f
	
	
	
		
			
			* create building data object and rename ItemSource to Source to be more generic # Conflicts: # worlds/stardew_valley/content/game_content.py # Conflicts: # worlds/stardew_valley/data/artisan.py # worlds/stardew_valley/data/game_item.py # worlds/stardew_valley/data/harvest.py # worlds/stardew_valley/data/shop.py * remove compound sources, replace by other requirements which already handle this usecase * add coops to content packs * add building progression in game features * add shippping bin to starting building; remove has_house * replace config check with feature * add other buildings in content packs * not passing * tests passes, unbelievable * use newly create methods more * use new assets to ease readability * self review * fix flake8 maybe * properly split rule for mapping cave systems * fix tractor garage name * self review * add upgrade_from to farm house buldings * don't override building name variable in logic * remove has_group from buildings * mark some items easy in grinding logic so blueprints buildings can be in more early spheres * move stuff around to maybe avoid future conflicts cuz I have like 10 PRs opened right now * remove price_multiplier, turns out it's unused during generation * disable shop source for mapping cave systems * bunch of code review changes * add petbowl and farmhouse to autobuilding * set min easy items to 300 * fix farm type
		
			
				
	
	
		
			593 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			593 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from ..game_content import ContentPack
 | |
| from ...data import villagers_data, fish_data
 | |
| from ...data.building import Building
 | |
| from ...data.game_item import GenericSource, ItemTag, Tag, CustomRuleSource
 | |
| from ...data.harvest import ForagingSource, SeasonalForagingSource, ArtifactSpotSource
 | |
| from ...data.requirement import ToolRequirement, BookRequirement, SkillRequirement
 | |
| from ...data.shop import ShopSource, MysteryBoxSource, ArtifactTroveSource, PrizeMachineSource, FishingTreasureChestSource
 | |
| from ...strings.artisan_good_names import ArtisanGood
 | |
| from ...strings.book_names import Book
 | |
| from ...strings.building_names import Building as BuildingNames
 | |
| from ...strings.crop_names import Fruit
 | |
| from ...strings.fish_names import WaterItem
 | |
| from ...strings.food_names import Beverage, Meal
 | |
| from ...strings.forageable_names import Forageable, Mushroom
 | |
| from ...strings.fruit_tree_names import Sapling
 | |
| from ...strings.generic_names import Generic
 | |
| from ...strings.material_names import Material
 | |
| from ...strings.metal_names import MetalBar
 | |
| from ...strings.region_names import Region, LogicRegion
 | |
| from ...strings.season_names import Season
 | |
| from ...strings.seed_names import Seed, TreeSeed
 | |
| from ...strings.skill_names import Skill
 | |
| from ...strings.tool_names import Tool, ToolMaterial
 | |
| 
 | |
| pelican_town = ContentPack(
 | |
|     "Pelican Town (Vanilla)",
 | |
|     harvest_sources={
 | |
|         # Spring
 | |
|         Forageable.daffodil: (
 | |
|             ForagingSource(seasons=(Season.spring,), regions=(Region.bus_stop, Region.town, Region.railroad)),
 | |
|         ),
 | |
|         Forageable.dandelion: (
 | |
|             ForagingSource(seasons=(Season.spring,), regions=(Region.bus_stop, Region.forest, Region.railroad)),
 | |
|         ),
 | |
|         Forageable.leek: (
 | |
|             ForagingSource(seasons=(Season.spring,), regions=(Region.backwoods, Region.mountain, Region.bus_stop, Region.railroad)),
 | |
|         ),
 | |
|         Forageable.wild_horseradish: (
 | |
|             ForagingSource(seasons=(Season.spring,), regions=(Region.backwoods, Region.mountain, Region.forest, Region.secret_woods)),
 | |
|         ),
 | |
|         Forageable.salmonberry: (
 | |
|             SeasonalForagingSource(season=Season.spring, days=(15, 16, 17, 18),
 | |
|                                    regions=(Region.backwoods, Region.mountain, Region.town, Region.forest, Region.tunnel_entrance, Region.railroad)),
 | |
|         ),
 | |
|         Forageable.spring_onion: (
 | |
|             ForagingSource(seasons=(Season.spring,), regions=(Region.forest,)),
 | |
|         ),
 | |
| 
 | |
|         # Summer
 | |
|         Fruit.grape: (
 | |
|             ForagingSource(seasons=(Season.summer,), regions=(Region.backwoods, Region.mountain, Region.bus_stop, Region.railroad)),
 | |
|         ),
 | |
|         Forageable.spice_berry: (
 | |
|             ForagingSource(seasons=(Season.summer,), regions=(Region.backwoods, Region.mountain, Region.bus_stop, Region.forest, Region.railroad)),
 | |
|         ),
 | |
|         Forageable.sweet_pea: (
 | |
|             ForagingSource(seasons=(Season.summer,), regions=(Region.bus_stop, Region.town, Region.forest, Region.railroad)),
 | |
|         ),
 | |
|         Forageable.fiddlehead_fern: (
 | |
|             ForagingSource(seasons=(Season.summer,), regions=(Region.secret_woods,)),
 | |
|         ),
 | |
| 
 | |
|         # Fall
 | |
|         Forageable.blackberry: (
 | |
|             ForagingSource(seasons=(Season.fall,), regions=(Region.backwoods, Region.town, Region.forest, Region.railroad)),
 | |
|             SeasonalForagingSource(season=Season.fall, days=(8, 9, 10, 11),
 | |
|                                    regions=(Region.backwoods, Region.mountain, Region.bus_stop, Region.town, Region.forest, Region.tunnel_entrance,
 | |
|                                             Region.railroad)),
 | |
|         ),
 | |
|         Forageable.hazelnut: (
 | |
|             ForagingSource(seasons=(Season.fall,), regions=(Region.backwoods, Region.mountain, Region.bus_stop, Region.railroad)),
 | |
|         ),
 | |
|         Forageable.wild_plum: (
 | |
|             ForagingSource(seasons=(Season.fall,), regions=(Region.mountain, Region.bus_stop, Region.railroad)),
 | |
|         ),
 | |
| 
 | |
|         # Winter
 | |
|         Forageable.crocus: (
 | |
|             ForagingSource(seasons=(Season.winter,),
 | |
|                            regions=(Region.backwoods, Region.mountain, Region.bus_stop, Region.town, Region.forest, Region.secret_woods)),
 | |
|         ),
 | |
|         Forageable.crystal_fruit: (
 | |
|             ForagingSource(seasons=(Season.winter,),
 | |
|                            regions=(Region.backwoods, Region.mountain, Region.bus_stop, Region.town, Region.forest, Region.railroad)),
 | |
|         ),
 | |
|         Forageable.holly: (
 | |
|             ForagingSource(seasons=(Season.winter,),
 | |
|                            regions=(Region.backwoods, Region.mountain, Region.bus_stop, Region.town, Region.forest, Region.railroad)),
 | |
|         ),
 | |
|         Forageable.snow_yam: (
 | |
|             ForagingSource(seasons=(Season.winter,),
 | |
|                            regions=(Region.farm, Region.backwoods, Region.mountain, Region.bus_stop, Region.town, Region.forest, Region.railroad,
 | |
|                                     Region.secret_woods, Region.beach),
 | |
|                            other_requirements=(ToolRequirement(Tool.hoe),)),
 | |
|         ),
 | |
|         Forageable.winter_root: (
 | |
|             ForagingSource(seasons=(Season.winter,),
 | |
|                            regions=(Region.farm, Region.backwoods, Region.mountain, Region.bus_stop, Region.town, Region.forest, Region.railroad,
 | |
|                                     Region.secret_woods, Region.beach),
 | |
|                            other_requirements=(ToolRequirement(Tool.hoe),)),
 | |
|         ),
 | |
| 
 | |
|         # Mushrooms
 | |
|         Mushroom.common: (
 | |
|             ForagingSource(seasons=(Season.spring,), regions=(Region.secret_woods,)),
 | |
|             ForagingSource(seasons=(Season.fall,), regions=(Region.backwoods, Region.mountain, Region.forest)),
 | |
|         ),
 | |
|         Mushroom.chanterelle: (
 | |
|             ForagingSource(seasons=(Season.fall,), regions=(Region.secret_woods,)),
 | |
|         ),
 | |
|         Mushroom.morel: (
 | |
|             ForagingSource(seasons=(Season.spring, Season.fall), regions=(Region.secret_woods,)),
 | |
|         ),
 | |
|         Mushroom.red: (
 | |
|             ForagingSource(seasons=(Season.summer, Season.fall), regions=(Region.secret_woods,)),
 | |
|         ),
 | |
| 
 | |
|         # Beach
 | |
|         WaterItem.coral: (
 | |
|             ForagingSource(regions=(Region.tide_pools,)),
 | |
|             SeasonalForagingSource(season=Season.summer, days=(12, 13, 14), regions=(Region.beach,)),
 | |
|         ),
 | |
|         WaterItem.nautilus_shell: (
 | |
|             ForagingSource(seasons=(Season.winter,), regions=(Region.beach,)),
 | |
|         ),
 | |
|         Forageable.rainbow_shell: (
 | |
|             ForagingSource(seasons=(Season.summer,), regions=(Region.beach,)),
 | |
|         ),
 | |
|         WaterItem.sea_urchin: (
 | |
|             ForagingSource(regions=(Region.tide_pools,)),
 | |
|         ),
 | |
| 
 | |
|         Seed.mixed: (
 | |
|             ForagingSource(seasons=(Season.spring, Season.summer, Season.fall,), regions=(Region.town, Region.farm, Region.forest)),
 | |
|         ),
 | |
| 
 | |
|         Seed.mixed_flower: (
 | |
|             ForagingSource(seasons=(Season.summer,), regions=(Region.town, Region.farm, Region.forest)),
 | |
|         ),
 | |
| 
 | |
|         # Books
 | |
|         Book.jack_be_nimble_jack_be_thick: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             ArtifactSpotSource(amount=22),),  # After 22 spots, there are 50.48% chances player received the book.
 | |
|         Book.woodys_secret: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             GenericSource(regions=(Region.forest, Region.mountain),
 | |
|                           other_requirements=(ToolRequirement(Tool.axe, ToolMaterial.iron), SkillRequirement(Skill.foraging, 5))),),
 | |
|     },
 | |
|     shop_sources={
 | |
|         # Saplings
 | |
|         Sapling.apple: (ShopSource(money_price=4000, shop_region=Region.pierre_store),),
 | |
|         Sapling.apricot: (ShopSource(money_price=2000, shop_region=Region.pierre_store),),
 | |
|         Sapling.cherry: (ShopSource(money_price=3400, shop_region=Region.pierre_store),),
 | |
|         Sapling.orange: (ShopSource(money_price=4000, shop_region=Region.pierre_store),),
 | |
|         Sapling.peach: (ShopSource(money_price=6000, shop_region=Region.pierre_store),),
 | |
|         Sapling.pomegranate: (ShopSource(money_price=6000, shop_region=Region.pierre_store),),
 | |
| 
 | |
|         # Crop seeds, assuming they are bought in season, otherwise price is different with missing stock list.
 | |
|         Seed.parsnip: (ShopSource(money_price=20, shop_region=Region.pierre_store, seasons=(Season.spring,)),),
 | |
|         Seed.bean: (ShopSource(money_price=60, shop_region=Region.pierre_store, seasons=(Season.spring,)),),
 | |
|         Seed.cauliflower: (ShopSource(money_price=80, shop_region=Region.pierre_store, seasons=(Season.spring,)),),
 | |
|         Seed.potato: (ShopSource(money_price=50, shop_region=Region.pierre_store, seasons=(Season.spring,)),),
 | |
|         Seed.tulip: (ShopSource(money_price=20, shop_region=Region.pierre_store, seasons=(Season.spring,)),),
 | |
|         Seed.kale: (ShopSource(money_price=70, shop_region=Region.pierre_store, seasons=(Season.spring,)),),
 | |
|         Seed.jazz: (ShopSource(money_price=30, shop_region=Region.pierre_store, seasons=(Season.spring,)),),
 | |
|         Seed.garlic: (ShopSource(money_price=40, shop_region=Region.pierre_store, seasons=(Season.spring,)),),
 | |
|         Seed.rice: (ShopSource(money_price=40, shop_region=Region.pierre_store, seasons=(Season.spring,)),),
 | |
| 
 | |
|         Seed.melon: (ShopSource(money_price=80, shop_region=Region.pierre_store, seasons=(Season.summer,)),),
 | |
|         Seed.tomato: (ShopSource(money_price=50, shop_region=Region.pierre_store, seasons=(Season.summer,)),),
 | |
|         Seed.blueberry: (ShopSource(money_price=80, shop_region=Region.pierre_store, seasons=(Season.summer,)),),
 | |
|         Seed.pepper: (ShopSource(money_price=40, shop_region=Region.pierre_store, seasons=(Season.summer,)),),
 | |
|         Seed.wheat: (ShopSource(money_price=10, shop_region=Region.pierre_store, seasons=(Season.summer, Season.fall)),),
 | |
|         Seed.radish: (ShopSource(money_price=40, shop_region=Region.pierre_store, seasons=(Season.summer,)),),
 | |
|         Seed.poppy: (ShopSource(money_price=100, shop_region=Region.pierre_store, seasons=(Season.summer,)),),
 | |
|         Seed.spangle: (ShopSource(money_price=50, shop_region=Region.pierre_store, seasons=(Season.summer,)),),
 | |
|         Seed.hops: (ShopSource(money_price=60, shop_region=Region.pierre_store, seasons=(Season.summer,)),),
 | |
|         Seed.corn: (ShopSource(money_price=150, shop_region=Region.pierre_store, seasons=(Season.summer, Season.fall)),),
 | |
|         Seed.sunflower: (ShopSource(money_price=200, shop_region=Region.pierre_store, seasons=(Season.summer, Season.fall)),),
 | |
|         Seed.red_cabbage: (ShopSource(money_price=100, shop_region=Region.pierre_store, seasons=(Season.summer,)),),
 | |
| 
 | |
|         Seed.eggplant: (ShopSource(money_price=20, shop_region=Region.pierre_store, seasons=(Season.fall,)),),
 | |
|         Seed.pumpkin: (ShopSource(money_price=100, shop_region=Region.pierre_store, seasons=(Season.fall,)),),
 | |
|         Seed.bok_choy: (ShopSource(money_price=50, shop_region=Region.pierre_store, seasons=(Season.fall,)),),
 | |
|         Seed.yam: (ShopSource(money_price=60, shop_region=Region.pierre_store, seasons=(Season.fall,)),),
 | |
|         Seed.cranberry: (ShopSource(money_price=240, shop_region=Region.pierre_store, seasons=(Season.fall,)),),
 | |
|         Seed.fairy: (ShopSource(money_price=200, shop_region=Region.pierre_store, seasons=(Season.fall,)),),
 | |
|         Seed.amaranth: (ShopSource(money_price=70, shop_region=Region.pierre_store, seasons=(Season.fall,)),),
 | |
|         Seed.grape: (ShopSource(money_price=60, shop_region=Region.pierre_store, seasons=(Season.fall,)),),
 | |
|         Seed.artichoke: (ShopSource(money_price=30, shop_region=Region.pierre_store, seasons=(Season.fall,)),),
 | |
| 
 | |
|         Seed.broccoli: (ShopSource(items_price=((5, Material.moss),), shop_region=LogicRegion.raccoon_shop),),
 | |
|         Seed.carrot: (ShopSource(items_price=((1, TreeSeed.maple),), shop_region=LogicRegion.raccoon_shop),),
 | |
|         Seed.powdermelon: (ShopSource(items_price=((2, TreeSeed.acorn),), shop_region=LogicRegion.raccoon_shop),),
 | |
|         Seed.summer_squash: (ShopSource(items_price=((15, Material.sap),), shop_region=LogicRegion.raccoon_shop),),
 | |
| 
 | |
|         Seed.strawberry: (ShopSource(money_price=100, shop_region=LogicRegion.egg_festival, seasons=(Season.spring,)),),
 | |
|         Seed.rare_seed: (ShopSource(money_price=1000, shop_region=LogicRegion.traveling_cart, seasons=(Season.spring, Season.summer)),),
 | |
| 
 | |
|         # Saloon
 | |
|         Beverage.beer: (ShopSource(money_price=400, shop_region=Region.saloon),),
 | |
|         Meal.salad: (ShopSource(money_price=220, shop_region=Region.saloon),),
 | |
|         Meal.bread: (ShopSource(money_price=100, shop_region=Region.saloon),),
 | |
|         Meal.spaghetti: (ShopSource(money_price=240, shop_region=Region.saloon),),
 | |
|         Meal.pizza: (ShopSource(money_price=600, shop_region=Region.saloon),),
 | |
|         Beverage.coffee: (ShopSource(money_price=300, shop_region=Region.saloon),),
 | |
| 
 | |
|         # Books
 | |
|         Book.animal_catalogue: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             ShopSource(money_price=5000, shop_region=Region.ranch),),
 | |
|         Book.book_of_mysteries: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             MysteryBoxSource(amount=38),),  # After 38 boxes, there are 49.99% chances player received the book.
 | |
|         Book.dwarvish_safety_manual: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             ShopSource(money_price=4000, shop_region=LogicRegion.mines_dwarf_shop),
 | |
|             ShopSource(money_price=20000, shop_region=LogicRegion.bookseller_3),),
 | |
|         Book.friendship_101: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             PrizeMachineSource(amount=9),
 | |
|             ShopSource(money_price=20000, shop_region=LogicRegion.bookseller_3),),
 | |
|         Book.horse_the_book: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             ShopSource(money_price=25000, shop_region=LogicRegion.bookseller_2),),
 | |
|         Book.jack_be_nimble_jack_be_thick: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             ShopSource(money_price=20000, shop_region=LogicRegion.bookseller_3),),
 | |
|         Book.jewels_of_the_sea: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             FishingTreasureChestSource(amount=21),  # After 21 chests, there are 49.44% chances player received the book.
 | |
|             ShopSource(money_price=20000, shop_region=LogicRegion.bookseller_3),),
 | |
|         Book.mapping_cave_systems: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             GenericSource(regions=(Region.adventurer_guild_bedroom,)),
 | |
|             # Disabling the shop source for better game design.
 | |
|             # ShopSource(money_price=20000, shop_region=LogicRegion.bookseller_3),
 | |
|         ),
 | |
|         Book.monster_compendium: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             CustomRuleSource(create_rule=lambda logic: logic.monster.can_kill_many(Generic.any)),
 | |
|             ShopSource(money_price=20000, shop_region=LogicRegion.bookseller_3),),
 | |
|         Book.ol_slitherlegs: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             ShopSource(money_price=25000, shop_region=LogicRegion.bookseller_2),),
 | |
|         Book.price_catalogue: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             ShopSource(money_price=3000, shop_region=LogicRegion.bookseller_2),),
 | |
|         Book.the_alleyway_buffet: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             GenericSource(regions=(Region.town,),
 | |
|                           other_requirements=(ToolRequirement(Tool.axe, ToolMaterial.iron), ToolRequirement(Tool.pickaxe, ToolMaterial.iron))),
 | |
|             ShopSource(money_price=20000, shop_region=LogicRegion.bookseller_3),),
 | |
|         Book.the_art_o_crabbing: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             CustomRuleSource(create_rule=lambda logic: logic.festival.has_squidfest_day_1_iridium_reward()),
 | |
|             ShopSource(money_price=20000, shop_region=LogicRegion.bookseller_3),),
 | |
|         Book.treasure_appraisal_guide: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             ArtifactTroveSource(amount=18),  # After 18 troves, there is 49,88% chances player received the book.
 | |
|             ShopSource(money_price=20000, shop_region=LogicRegion.bookseller_3),),
 | |
|         Book.raccoon_journal: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             ShopSource(money_price=20000, shop_region=LogicRegion.bookseller_3),
 | |
|             ShopSource(items_price=((999, Material.fiber),), shop_region=LogicRegion.raccoon_shop),),
 | |
|         Book.way_of_the_wind_pt_1: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             ShopSource(money_price=15000, shop_region=LogicRegion.bookseller_2),),
 | |
|         Book.way_of_the_wind_pt_2: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             ShopSource(money_price=35000, shop_region=LogicRegion.bookseller_2, other_requirements=(BookRequirement(Book.way_of_the_wind_pt_1),)),),
 | |
|         Book.woodys_secret: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_POWER),
 | |
|             ShopSource(money_price=20000, shop_region=LogicRegion.bookseller_3),),
 | |
| 
 | |
|         # Experience Books
 | |
|         Book.book_of_stars: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_SKILL),
 | |
|             ShopSource(money_price=5000, shop_region=LogicRegion.bookseller_1),),
 | |
|         Book.bait_and_bobber: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_SKILL),
 | |
|             ShopSource(money_price=5000, shop_region=LogicRegion.bookseller_1),),
 | |
|         Book.combat_quarterly: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_SKILL),
 | |
|             ShopSource(money_price=5000, shop_region=LogicRegion.bookseller_1),),
 | |
|         Book.mining_monthly: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_SKILL),
 | |
|             ShopSource(money_price=5000, shop_region=LogicRegion.bookseller_1),),
 | |
|         Book.stardew_valley_almanac: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_SKILL),
 | |
|             ShopSource(money_price=5000, shop_region=LogicRegion.bookseller_1),),
 | |
|         Book.woodcutters_weekly: (
 | |
|             Tag(ItemTag.BOOK, ItemTag.BOOK_SKILL),
 | |
|             ShopSource(money_price=5000, shop_region=LogicRegion.bookseller_1),),
 | |
|     },
 | |
|     fishes=(
 | |
|         fish_data.albacore,
 | |
|         fish_data.anchovy,
 | |
|         fish_data.bream,
 | |
|         fish_data.bullhead,
 | |
|         fish_data.carp,
 | |
|         fish_data.catfish,
 | |
|         fish_data.chub,
 | |
|         fish_data.dorado,
 | |
|         fish_data.eel,
 | |
|         fish_data.flounder,
 | |
|         fish_data.goby,
 | |
|         fish_data.halibut,
 | |
|         fish_data.herring,
 | |
|         fish_data.largemouth_bass,
 | |
|         fish_data.lingcod,
 | |
|         fish_data.midnight_carp,  # Ginger island override
 | |
|         fish_data.octopus,
 | |
|         fish_data.perch,
 | |
|         fish_data.pike,
 | |
|         fish_data.pufferfish,  # Ginger island override
 | |
|         fish_data.rainbow_trout,
 | |
|         fish_data.red_mullet,
 | |
|         fish_data.red_snapper,
 | |
|         fish_data.salmon,
 | |
|         fish_data.sardine,
 | |
|         fish_data.sea_cucumber,
 | |
|         fish_data.shad,
 | |
|         fish_data.slimejack,
 | |
|         fish_data.smallmouth_bass,
 | |
|         fish_data.squid,
 | |
|         fish_data.sturgeon,
 | |
|         fish_data.sunfish,
 | |
|         fish_data.super_cucumber,  # Ginger island override
 | |
|         fish_data.tiger_trout,
 | |
|         fish_data.tilapia,  # Ginger island override
 | |
|         fish_data.tuna,  # Ginger island override
 | |
|         fish_data.void_salmon,
 | |
|         fish_data.walleye,
 | |
|         fish_data.woodskip,
 | |
|         fish_data.blobfish,
 | |
|         fish_data.midnight_squid,
 | |
|         fish_data.spook_fish,
 | |
| 
 | |
|         # Legendaries
 | |
|         fish_data.angler,
 | |
|         fish_data.crimsonfish,
 | |
|         fish_data.glacierfish,
 | |
|         fish_data.legend,
 | |
|         fish_data.mutant_carp,
 | |
| 
 | |
|         # Crab pot
 | |
|         fish_data.clam,
 | |
|         fish_data.cockle,
 | |
|         fish_data.crab,
 | |
|         fish_data.crayfish,
 | |
|         fish_data.lobster,
 | |
|         fish_data.mussel,
 | |
|         fish_data.oyster,
 | |
|         fish_data.periwinkle,
 | |
|         fish_data.shrimp,
 | |
|         fish_data.snail,
 | |
|     ),
 | |
|     villagers=(
 | |
|         villagers_data.josh,
 | |
|         villagers_data.elliott,
 | |
|         villagers_data.harvey,
 | |
|         villagers_data.sam,
 | |
|         villagers_data.sebastian,
 | |
|         villagers_data.shane,
 | |
|         villagers_data.abigail,
 | |
|         villagers_data.emily,
 | |
|         villagers_data.haley,
 | |
|         villagers_data.leah,
 | |
|         villagers_data.maru,
 | |
|         villagers_data.penny,
 | |
|         villagers_data.caroline,
 | |
|         villagers_data.clint,
 | |
|         villagers_data.demetrius,
 | |
|         villagers_data.evelyn,
 | |
|         villagers_data.george,
 | |
|         villagers_data.gus,
 | |
|         villagers_data.jas,
 | |
|         villagers_data.jodi,
 | |
|         villagers_data.kent,
 | |
|         villagers_data.krobus,
 | |
|         villagers_data.lewis,
 | |
|         villagers_data.linus,
 | |
|         villagers_data.marnie,
 | |
|         villagers_data.pam,
 | |
|         villagers_data.pierre,
 | |
|         villagers_data.robin,
 | |
|         villagers_data.vincent,
 | |
|         villagers_data.willy,
 | |
|         villagers_data.wizard,
 | |
|     ),
 | |
|     farm_buildings=(
 | |
|         Building(
 | |
|             BuildingNames.barn,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=6000,
 | |
|                     items_price=((350, Material.wood), (150, Material.stone))
 | |
|                 ),
 | |
|             ),
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.big_barn,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=12_000,
 | |
|                     items_price=((450, Material.wood), (200, Material.stone))
 | |
|                 ),
 | |
|             ),
 | |
|             upgrade_from=BuildingNames.barn,
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.deluxe_barn,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=25_000,
 | |
|                     items_price=((550, Material.wood), (300, Material.stone))
 | |
|                 ),
 | |
|             ),
 | |
|             upgrade_from=BuildingNames.big_barn,
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.coop,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=4000,
 | |
|                     items_price=((300, Material.wood), (100, Material.stone))
 | |
|                 ),
 | |
|             ),
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.big_coop,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=10_000,
 | |
|                     items_price=((400, Material.wood), (150, Material.stone))
 | |
|                 ),
 | |
|             ),
 | |
|             upgrade_from=BuildingNames.coop,
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.deluxe_coop,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=20_000,
 | |
|                     items_price=((500, Material.wood), (200, Material.stone))
 | |
|                 ),
 | |
|             ),
 | |
|             upgrade_from=BuildingNames.big_coop,
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.fish_pond,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=5000,
 | |
|                     items_price=((200, Material.stone), (5, WaterItem.seaweed), (5, WaterItem.green_algae))
 | |
|                 ),
 | |
|             ),
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.mill,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=2500,
 | |
|                     items_price=((50, Material.stone), (150, Material.wood), (4, ArtisanGood.cloth))
 | |
|                 ),
 | |
|             ),
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.shed,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=15_000,
 | |
|                     items_price=((300, Material.wood),)
 | |
|                 ),
 | |
|             ),
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.big_shed,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=20_000,
 | |
|                     items_price=((550, Material.wood), (300, Material.stone))
 | |
|                 ),
 | |
|             ),
 | |
|             upgrade_from=BuildingNames.shed,
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.silo,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=100,
 | |
|                     items_price=((100, Material.stone), (10, Material.clay), (5, MetalBar.copper))
 | |
|                 ),
 | |
|             ),
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.slime_hutch,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=10_000,
 | |
|                     items_price=((500, Material.stone), (10, MetalBar.quartz), (1, MetalBar.iridium))
 | |
|                 ),
 | |
|             ),
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.stable,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=10_000,
 | |
|                     items_price=((100, Material.hardwood), (5, MetalBar.iron))
 | |
|                 ),
 | |
|             ),
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.well,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=1000,
 | |
|                     items_price=((75, Material.stone),)
 | |
|                 ),
 | |
|             ),
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.shipping_bin,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=250,
 | |
|                     items_price=((150, Material.wood),)
 | |
|                 ),
 | |
|             ),
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.pet_bowl,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=5000,
 | |
|                     items_price=((25, Material.hardwood),)
 | |
|                 ),
 | |
|             ),
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.kitchen,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=10_000,
 | |
|                     items_price=((450, Material.wood),)
 | |
|                 ),
 | |
|             ),
 | |
|             upgrade_from=BuildingNames.farm_house,
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.kids_room,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=65_000,
 | |
|                     items_price=((100, Material.hardwood),)
 | |
|                 ),
 | |
|             ),
 | |
|             upgrade_from=BuildingNames.kitchen,
 | |
|         ),
 | |
|         Building(
 | |
|             BuildingNames.cellar,
 | |
|             sources=(
 | |
|                 ShopSource(
 | |
|                     shop_region=Region.carpenter,
 | |
|                     money_price=100_000,
 | |
|                 ),
 | |
|             ),
 | |
|             upgrade_from=BuildingNames.kids_room,
 | |
|         ),
 | |
|     )
 | |
| )
 |