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:
File diff suppressed because it is too large
Load Diff
@@ -1,9 +0,0 @@
|
||||
fishing_chest = "Fishing Chest"
|
||||
secret_note = "Secret Note"
|
||||
|
||||
quality_dict = {
|
||||
0: "",
|
||||
1: "Silver",
|
||||
2: "Gold",
|
||||
3: "Iridium"
|
||||
}
|
||||
313
worlds/stardew_valley/data/craftable_data.py
Normal file
313
worlds/stardew_valley/data/craftable_data.py
Normal file
@@ -0,0 +1,313 @@
|
||||
from typing import Dict, List, Optional
|
||||
|
||||
from ..mods.mod_data import ModNames
|
||||
from .recipe_source import RecipeSource, StarterSource, QueenOfSauceSource, ShopSource, SkillSource, FriendshipSource, ShopTradeSource, CutsceneSource, \
|
||||
ArchipelagoSource, LogicSource, SpecialOrderSource, FestivalShopSource, QuestSource
|
||||
from ..strings.artisan_good_names import ArtisanGood
|
||||
from ..strings.craftable_names import Bomb, Fence, Sprinkler, WildSeeds, Floor, Fishing, Ring, Consumable, Edible, Lighting, Storage, Furniture, Sign, Craftable, \
|
||||
ModEdible, ModCraftable, ModMachine, ModFloor, ModConsumable
|
||||
from ..strings.crop_names import Fruit, Vegetable
|
||||
from ..strings.currency_names import Currency
|
||||
from ..strings.fertilizer_names import Fertilizer, RetainingSoil, SpeedGro
|
||||
from ..strings.fish_names import Fish, WaterItem
|
||||
from ..strings.flower_names import Flower
|
||||
from ..strings.food_names import Meal
|
||||
from ..strings.forageable_names import Forageable, SVEForage, DistantLandsForageable
|
||||
from ..strings.ingredient_names import Ingredient
|
||||
from ..strings.machine_names import Machine
|
||||
from ..strings.material_names import Material
|
||||
from ..strings.metal_names import Ore, MetalBar, Fossil, Artifact, Mineral, ModFossil
|
||||
from ..strings.monster_drop_names import Loot
|
||||
from ..strings.quest_names import Quest
|
||||
from ..strings.region_names import Region, SVERegion
|
||||
from ..strings.seed_names import Seed, TreeSeed
|
||||
from ..strings.skill_names import Skill, ModSkill
|
||||
from ..strings.special_order_names import SpecialOrder
|
||||
from ..strings.villager_names import NPC, ModNPC
|
||||
|
||||
|
||||
class CraftingRecipe:
|
||||
item: str
|
||||
ingredients: Dict[str, int]
|
||||
source: RecipeSource
|
||||
mod_name: Optional[str]
|
||||
|
||||
def __init__(self, item: str, ingredients: Dict[str, int], source: RecipeSource, mod_name: Optional[str] = None):
|
||||
self.item = item
|
||||
self.ingredients = ingredients
|
||||
self.source = source
|
||||
self.mod_name = mod_name
|
||||
|
||||
def __repr__(self):
|
||||
return f"{self.item} (Source: {self.source} |" \
|
||||
f" Ingredients: {self.ingredients})"
|
||||
|
||||
|
||||
all_crafting_recipes: List[CraftingRecipe] = []
|
||||
|
||||
|
||||
def friendship_recipe(name: str, friend: str, hearts: int, ingredients: Dict[str, int], mod_name: Optional[str] = None) -> CraftingRecipe:
|
||||
source = FriendshipSource(friend, hearts)
|
||||
return create_recipe(name, ingredients, source, mod_name)
|
||||
|
||||
|
||||
def cutscene_recipe(name: str, region: str, friend: str, hearts: int, ingredients: Dict[str, int]) -> CraftingRecipe:
|
||||
source = CutsceneSource(region, friend, hearts)
|
||||
return create_recipe(name, ingredients, source)
|
||||
|
||||
|
||||
def skill_recipe(name: str, skill: str, level: int, ingredients: Dict[str, int], mod_name: Optional[str] = None) -> CraftingRecipe:
|
||||
source = SkillSource(skill, level)
|
||||
return create_recipe(name, ingredients, source, mod_name)
|
||||
|
||||
|
||||
def shop_recipe(name: str, region: str, price: int, ingredients: Dict[str, int], mod_name: Optional[str] = None) -> CraftingRecipe:
|
||||
source = ShopSource(region, price)
|
||||
return create_recipe(name, ingredients, source, mod_name)
|
||||
|
||||
|
||||
def festival_shop_recipe(name: str, region: str, price: int, ingredients: Dict[str, int]) -> CraftingRecipe:
|
||||
source = FestivalShopSource(region, price)
|
||||
return create_recipe(name, ingredients, source)
|
||||
|
||||
|
||||
def shop_trade_recipe(name: str, region: str, currency: str, price: int, ingredients: Dict[str, int]) -> CraftingRecipe:
|
||||
source = ShopTradeSource(region, currency, price)
|
||||
return create_recipe(name, ingredients, source)
|
||||
|
||||
|
||||
def queen_of_sauce_recipe(name: str, year: int, season: str, day: int, ingredients: Dict[str, int]) -> CraftingRecipe:
|
||||
source = QueenOfSauceSource(year, season, day)
|
||||
return create_recipe(name, ingredients, source)
|
||||
|
||||
|
||||
def quest_recipe(name: str, quest: str, ingredients: Dict[str, int]) -> CraftingRecipe:
|
||||
source = QuestSource(quest)
|
||||
return create_recipe(name, ingredients, source)
|
||||
|
||||
|
||||
def special_order_recipe(name: str, special_order: str, ingredients: Dict[str, int]) -> CraftingRecipe:
|
||||
source = SpecialOrderSource(special_order)
|
||||
return create_recipe(name, ingredients, source)
|
||||
|
||||
|
||||
def starter_recipe(name: str, ingredients: Dict[str, int]) -> CraftingRecipe:
|
||||
source = StarterSource()
|
||||
return create_recipe(name, ingredients, source)
|
||||
|
||||
|
||||
def ap_recipe(name: str, ingredients: Dict[str, int], ap_item: str = None) -> CraftingRecipe:
|
||||
if ap_item is None:
|
||||
ap_item = f"{name} Recipe"
|
||||
source = ArchipelagoSource(ap_item)
|
||||
return create_recipe(name, ingredients, source)
|
||||
|
||||
|
||||
def cellar_recipe(name: str, ingredients: Dict[str, int]) -> CraftingRecipe:
|
||||
source = LogicSource("Cellar")
|
||||
return create_recipe(name, ingredients, source)
|
||||
|
||||
|
||||
def create_recipe(name: str, ingredients: Dict[str, int], source: RecipeSource, mod_name: Optional[str] = None) -> CraftingRecipe:
|
||||
recipe = CraftingRecipe(name, ingredients, source, mod_name)
|
||||
all_crafting_recipes.append(recipe)
|
||||
return recipe
|
||||
|
||||
|
||||
cherry_bomb = skill_recipe(Bomb.cherry_bomb, Skill.mining, 1, {Ore.copper: 4, Material.coal: 1})
|
||||
bomb = skill_recipe(Bomb.bomb, Skill.mining, 6, {Ore.iron: 4, Material.coal: 1})
|
||||
mega_bomb = skill_recipe(Bomb.mega_bomb, Skill.mining, 8, {Ore.gold: 4, Loot.solar_essence: 1, Loot.void_essence: 1})
|
||||
|
||||
gate = starter_recipe(Fence.gate, {Material.wood: 10})
|
||||
wood_fence = starter_recipe(Fence.wood, {Material.wood: 2})
|
||||
stone_fence = skill_recipe(Fence.stone, Skill.farming, 2, {Material.stone: 2})
|
||||
iron_fence = skill_recipe(Fence.iron, Skill.farming, 4, {MetalBar.iron: 2})
|
||||
hardwood_fence = skill_recipe(Fence.hardwood, Skill.farming, 6, {Material.hardwood: 2})
|
||||
|
||||
sprinkler = skill_recipe(Sprinkler.basic, Skill.farming, 2, {MetalBar.copper: 1, MetalBar.iron: 1})
|
||||
quality_sprinkler = skill_recipe(Sprinkler.quality, Skill.farming, 6, {MetalBar.iron: 1, MetalBar.gold: 1, MetalBar.quartz: 1})
|
||||
iridium_sprinkler = skill_recipe(Sprinkler.iridium, Skill.farming, 9, {MetalBar.gold: 1, MetalBar.iridium: 1, ArtisanGood.battery_pack: 1})
|
||||
|
||||
bee_house = skill_recipe(Machine.bee_house, Skill.farming, 3, {Material.wood: 40, Material.coal: 8, MetalBar.iron: 1, ArtisanGood.maple_syrup: 1})
|
||||
cask = cellar_recipe(Machine.cask, {Material.wood: 40, Material.hardwood: 1})
|
||||
cheese_press = skill_recipe(Machine.cheese_press, Skill.farming, 6, {Material.wood: 45, Material.stone: 45, Material.hardwood: 10, MetalBar.copper: 1})
|
||||
keg = skill_recipe(Machine.keg, Skill.farming, 8, {Material.wood: 30, MetalBar.copper: 1, MetalBar.iron: 1, ArtisanGood.oak_resin: 1})
|
||||
loom = skill_recipe(Machine.loom, Skill.farming, 7, {Material.wood: 60, Material.fiber: 30, ArtisanGood.pine_tar: 1})
|
||||
mayonnaise_machine = skill_recipe(Machine.mayonnaise_machine, Skill.farming, 2, {Material.wood: 15, Material.stone: 15, Mineral.earth_crystal: 10, MetalBar.copper: 1})
|
||||
oil_maker = skill_recipe(Machine.oil_maker, Skill.farming, 8, {Loot.slime: 50, Material.hardwood: 20, MetalBar.gold: 1})
|
||||
preserves_jar = skill_recipe(Machine.preserves_jar, Skill.farming, 4, {Material.wood: 50, Material.stone: 40, Material.coal: 8})
|
||||
|
||||
basic_fertilizer = skill_recipe(Fertilizer.basic, Skill.farming, 1, {Material.sap: 2})
|
||||
quality_fertilizer = skill_recipe(Fertilizer.quality, Skill.farming, 9, {Material.sap: 2, Fish.any: 1})
|
||||
deluxe_fertilizer = ap_recipe(Fertilizer.deluxe, {MetalBar.iridium: 1, Material.sap: 40})
|
||||
basic_speed_gro = skill_recipe(SpeedGro.basic, Skill.farming, 3, {ArtisanGood.pine_tar: 1, Fish.clam: 1})
|
||||
deluxe_speed_gro = skill_recipe(SpeedGro.deluxe, Skill.farming, 8, {ArtisanGood.oak_resin: 1, WaterItem.coral: 1})
|
||||
hyper_speed_gro = ap_recipe(SpeedGro.hyper, {Ore.radioactive: 1, Fossil.bone_fragment: 3, Loot.solar_essence: 1})
|
||||
basic_retaining_soil = skill_recipe(RetainingSoil.basic, Skill.farming, 4, {Material.stone: 2})
|
||||
quality_retaining_soil = skill_recipe(RetainingSoil.quality, Skill.farming, 7, {Material.stone: 3, Material.clay: 1})
|
||||
deluxe_retaining_soil = shop_trade_recipe(RetainingSoil.deluxe, Region.island_trader, Currency.cinder_shard, 50, {Material.stone: 5, Material.fiber: 3, Material.clay: 1})
|
||||
tree_fertilizer = skill_recipe(Fertilizer.tree, Skill.foraging, 7, {Material.fiber: 5, Material.stone: 5})
|
||||
|
||||
spring_seeds = skill_recipe(WildSeeds.spring, Skill.foraging, 1, {Forageable.wild_horseradish: 1, Forageable.daffodil: 1, Forageable.leek: 1, Forageable.dandelion: 1})
|
||||
summer_seeds = skill_recipe(WildSeeds.summer, Skill.foraging, 4, {Forageable.spice_berry: 1, Fruit.grape: 1, Forageable.sweet_pea: 1})
|
||||
fall_seeds = skill_recipe(WildSeeds.fall, Skill.foraging, 6, {Forageable.common_mushroom: 1, Forageable.wild_plum: 1, Forageable.hazelnut: 1, Forageable.blackberry: 1})
|
||||
winter_seeds = skill_recipe(WildSeeds.winter, Skill.foraging, 7, {Forageable.winter_root: 1, Forageable.crystal_fruit: 1, Forageable.snow_yam: 1, Forageable.crocus: 1})
|
||||
ancient_seeds = ap_recipe(WildSeeds.ancient, {Artifact.ancient_seed: 1})
|
||||
grass_starter = shop_recipe(WildSeeds.grass_starter, Region.pierre_store, 1000, {Material.fiber: 10})
|
||||
for wild_seeds in [WildSeeds.spring, WildSeeds.summer, WildSeeds.fall, WildSeeds.winter]:
|
||||
tea_sapling = cutscene_recipe(WildSeeds.tea_sapling, Region.sunroom, NPC.caroline, 2, {wild_seeds: 2, Material.fiber: 5, Material.wood: 5})
|
||||
fiber_seeds = special_order_recipe(WildSeeds.fiber, SpecialOrder.community_cleanup, {Seed.mixed: 1, Material.sap: 5, Material.clay: 1})
|
||||
|
||||
wood_floor = shop_recipe(Floor.wood, Region.carpenter, 100, {Material.wood: 1})
|
||||
rustic_floor = shop_recipe(Floor.rustic, Region.carpenter, 200, {Material.wood: 1})
|
||||
straw_floor = shop_recipe(Floor.straw, Region.carpenter, 200, {Material.wood: 1, Material.fiber: 1})
|
||||
weathered_floor = shop_recipe(Floor.weathered, Region.mines_dwarf_shop, 500, {Material.wood: 1})
|
||||
crystal_floor = shop_recipe(Floor.crystal, Region.sewer, 500, {MetalBar.quartz: 1})
|
||||
stone_floor = shop_recipe(Floor.stone, Region.carpenter, 100, {Material.stone: 1})
|
||||
stone_walkway_floor = shop_recipe(Floor.stone_walkway, Region.carpenter, 200, {Material.stone: 1})
|
||||
brick_floor = shop_recipe(Floor.brick, Region.carpenter, 500, {Material.clay: 2, Material.stone: 5})
|
||||
wood_path = starter_recipe(Floor.wood_path, {Material.wood: 1})
|
||||
gravel_path = starter_recipe(Floor.gravel_path, {Material.stone: 1})
|
||||
cobblestone_path = starter_recipe(Floor.cobblestone_path, {Material.stone: 1})
|
||||
stepping_stone_path = shop_recipe(Floor.stepping_stone_path, Region.carpenter, 100, {Material.stone: 1})
|
||||
crystal_path = shop_recipe(Floor.crystal_path, Region.carpenter, 200, {MetalBar.quartz: 1})
|
||||
|
||||
spinner = skill_recipe(Fishing.spinner, Skill.fishing, 6, {MetalBar.iron: 2})
|
||||
trap_bobber = skill_recipe(Fishing.trap_bobber, Skill.fishing, 6, {MetalBar.copper: 1, Material.sap: 10})
|
||||
cork_bobber = skill_recipe(Fishing.cork_bobber, Skill.fishing, 7, {Material.wood: 10, Material.hardwood: 5, Loot.slime: 10})
|
||||
quality_bobber = special_order_recipe(Fishing.quality_bobber, SpecialOrder.juicy_bugs_wanted, {MetalBar.copper: 1, Material.sap: 20, Loot.solar_essence: 5})
|
||||
treasure_hunter = skill_recipe(Fishing.treasure_hunter, Skill.fishing, 7, {MetalBar.gold: 2})
|
||||
dressed_spinner = skill_recipe(Fishing.dressed_spinner, Skill.fishing, 8, {MetalBar.iron: 2, ArtisanGood.cloth: 1})
|
||||
barbed_hook = skill_recipe(Fishing.barbed_hook, Skill.fishing, 8, {MetalBar.copper: 1, MetalBar.iron: 1, MetalBar.gold: 1})
|
||||
magnet = skill_recipe(Fishing.magnet, Skill.fishing, 9, {MetalBar.iron: 1})
|
||||
bait = skill_recipe(Fishing.bait, Skill.fishing, 2, {Loot.bug_meat: 1})
|
||||
wild_bait = cutscene_recipe(Fishing.wild_bait, Region.tent, NPC.linus, 4, {Material.fiber: 10, Loot.bug_meat: 5, Loot.slime: 5})
|
||||
magic_bait = ap_recipe(Fishing.magic_bait, {Ore.radioactive: 1, Loot.bug_meat: 3})
|
||||
crab_pot = skill_recipe(Machine.crab_pot, Skill.fishing, 3, {Material.wood: 40, MetalBar.iron: 3})
|
||||
|
||||
sturdy_ring = skill_recipe(Ring.sturdy_ring, Skill.combat, 1, {MetalBar.copper: 2, Loot.bug_meat: 25, Loot.slime: 25})
|
||||
warrior_ring = skill_recipe(Ring.warrior_ring, Skill.combat, 4, {MetalBar.iron: 10, Material.coal: 25, Mineral.frozen_tear: 10})
|
||||
ring_of_yoba = skill_recipe(Ring.ring_of_yoba, Skill.combat, 7, {MetalBar.gold: 5, MetalBar.iron: 5, Mineral.diamond: 1})
|
||||
thorns_ring = skill_recipe(Ring.thorns_ring, Skill.combat, 7, {Fossil.bone_fragment: 50, Material.stone: 50, MetalBar.gold: 1})
|
||||
glowstone_ring = skill_recipe(Ring.glowstone_ring, Skill.mining, 4, {Loot.solar_essence: 5, MetalBar.iron: 5})
|
||||
iridium_band = skill_recipe(Ring.iridium_band, Skill.combat, 9, {MetalBar.iridium: 5, Loot.solar_essence: 50, Loot.void_essence: 50})
|
||||
wedding_ring = shop_recipe(Ring.wedding_ring, Region.traveling_cart, 500, {MetalBar.iridium: 5, Mineral.prismatic_shard: 1})
|
||||
|
||||
field_snack = skill_recipe(Edible.field_snack, Skill.foraging, 1, {TreeSeed.acorn: 1, TreeSeed.maple: 1, TreeSeed.pine: 1})
|
||||
bug_steak = skill_recipe(Edible.bug_steak, Skill.combat, 1, {Loot.bug_meat: 10})
|
||||
life_elixir = skill_recipe(Edible.life_elixir, Skill.combat, 2, {Forageable.red_mushroom: 1, Forageable.purple_mushroom: 1, Forageable.morel: 1, Forageable.chanterelle: 1})
|
||||
oil_of_garlic = skill_recipe(Edible.oil_of_garlic, Skill.combat, 6, {Vegetable.garlic: 10, Ingredient.oil: 1})
|
||||
|
||||
monster_musk = special_order_recipe(Consumable.monster_musk, SpecialOrder.prismatic_jelly, {Loot.bat_wing: 30, Loot.slime: 30})
|
||||
fairy_dust = quest_recipe(Consumable.fairy_dust, Quest.the_pirates_wife, {Mineral.diamond: 1, Flower.fairy_rose: 1})
|
||||
warp_totem_beach = skill_recipe(Consumable.warp_totem_beach, Skill.foraging, 6, {Material.hardwood: 1, WaterItem.coral: 2, Material.fiber: 10})
|
||||
warp_totem_mountains = skill_recipe(Consumable.warp_totem_mountains, Skill.foraging, 7, {Material.hardwood: 1, MetalBar.iron: 1, Material.stone: 25})
|
||||
warp_totem_farm = skill_recipe(Consumable.warp_totem_farm, Skill.foraging, 8, {Material.hardwood: 1, ArtisanGood.honey: 1, Material.fiber: 20})
|
||||
warp_totem_desert = shop_trade_recipe(Consumable.warp_totem_desert, Region.desert, MetalBar.iridium, 10, {Material.hardwood: 2, Forageable.coconut: 1, Ore.iridium: 4})
|
||||
warp_totem_island = shop_recipe(Consumable.warp_totem_island, Region.volcano_dwarf_shop, 10000, {Material.hardwood: 5, Forageable.dragon_tooth: 1, Forageable.ginger: 1})
|
||||
rain_totem = skill_recipe(Consumable.rain_totem, Skill.foraging, 9, {Material.hardwood: 1, ArtisanGood.truffle_oil: 1, ArtisanGood.pine_tar: 5})
|
||||
|
||||
torch = starter_recipe(Lighting.torch, {Material.wood: 1, Material.sap: 2})
|
||||
campfire = starter_recipe(Lighting.campfire, {Material.stone: 10, Material.wood: 10, Material.fiber: 10})
|
||||
wooden_brazier = shop_recipe(Lighting.wooden_brazier, Region.carpenter, 250, {Material.wood: 10, Material.coal: 1, Material.fiber: 5})
|
||||
stone_brazier = shop_recipe(Lighting.stone_brazier, Region.carpenter, 400, {Material.stone: 10, Material.coal: 1, Material.fiber: 5})
|
||||
gold_brazier = shop_recipe(Lighting.gold_brazier, Region.carpenter, 1000, {MetalBar.gold: 1, Material.coal: 1, Material.fiber: 5})
|
||||
carved_brazier = shop_recipe(Lighting.carved_brazier, Region.carpenter, 2000, {Material.hardwood: 10, Material.coal: 1})
|
||||
stump_brazier = shop_recipe(Lighting.stump_brazier, Region.carpenter, 800, {Material.hardwood: 5, Material.coal: 1})
|
||||
barrel_brazier = shop_recipe(Lighting.barrel_brazier, Region.carpenter, 800, {Material.wood: 50, Loot.solar_essence: 1, Material.coal: 1})
|
||||
skull_brazier = shop_recipe(Lighting.skull_brazier, Region.carpenter, 3000, {Fossil.bone_fragment: 10})
|
||||
marble_brazier = shop_recipe(Lighting.marble_brazier, Region.carpenter, 5000, {Mineral.marble: 1, Mineral.aquamarine: 1, Material.stone: 100})
|
||||
wood_lamp_post = shop_recipe(Lighting.wood_lamp_post, Region.carpenter, 500, {Material.wood: 50, ArtisanGood.battery_pack: 1})
|
||||
iron_lamp_post = shop_recipe(Lighting.iron_lamp_post, Region.carpenter, 1000, {MetalBar.iron: 1, ArtisanGood.battery_pack: 1})
|
||||
jack_o_lantern = festival_shop_recipe(Lighting.jack_o_lantern, Region.spirit_eve, 2000, {Vegetable.pumpkin: 1, Lighting.torch: 1})
|
||||
|
||||
bone_mill = special_order_recipe(Machine.bone_mill, SpecialOrder.fragments_of_the_past, {Fossil.bone_fragment: 10, Material.clay: 3, Material.stone: 20})
|
||||
charcoal_kiln = skill_recipe(Machine.charcoal_kiln, Skill.foraging, 4, {Material.wood: 20, MetalBar.copper: 2})
|
||||
crystalarium = skill_recipe(Machine.crystalarium, Skill.mining, 9, {Material.stone: 99, MetalBar.gold: 5, MetalBar.iridium: 2, ArtisanGood.battery_pack: 1})
|
||||
furnace = skill_recipe(Machine.furnace, Skill.mining, 1, {Ore.copper: 20, Material.stone: 25})
|
||||
geode_crusher = special_order_recipe(Machine.geode_crusher, SpecialOrder.cave_patrol, {MetalBar.gold: 2, Material.stone: 50, Mineral.diamond: 1})
|
||||
heavy_tapper = ap_recipe(Machine.heavy_tapper, {Material.hardwood: 30, MetalBar.radioactive: 1})
|
||||
lightning_rod = skill_recipe(Machine.lightning_rod, Skill.foraging, 6, {MetalBar.iron: 1, MetalBar.quartz: 1, Loot.bat_wing: 5})
|
||||
ostrich_incubator = ap_recipe(Machine.ostrich_incubator, {Fossil.bone_fragment: 50, Material.hardwood: 50, Currency.cinder_shard: 20})
|
||||
recycling_machine = skill_recipe(Machine.recycling_machine, Skill.fishing, 4, {Material.wood: 25, Material.stone: 25, MetalBar.iron: 1})
|
||||
seed_maker = skill_recipe(Machine.seed_maker, Skill.farming, 9, {Material.wood: 25, Material.coal: 10, MetalBar.gold: 1})
|
||||
slime_egg_press = skill_recipe(Machine.slime_egg_press, Skill.combat, 6, {Material.coal: 25, Mineral.fire_quartz: 1, ArtisanGood.battery_pack: 1})
|
||||
slime_incubator = skill_recipe(Machine.slime_incubator, Skill.combat, 8, {MetalBar.iridium: 2, Loot.slime: 100})
|
||||
solar_panel = special_order_recipe(Machine.solar_panel, SpecialOrder.island_ingredients, {MetalBar.quartz: 10, MetalBar.iron: 5, MetalBar.gold: 5})
|
||||
tapper = skill_recipe(Machine.tapper, Skill.foraging, 3, {Material.wood: 40, MetalBar.copper: 2})
|
||||
worm_bin = skill_recipe(Machine.worm_bin, Skill.fishing, 8, {Material.hardwood: 25, MetalBar.gold: 1, MetalBar.iron: 1, Material.fiber: 50})
|
||||
|
||||
tub_o_flowers = festival_shop_recipe(Furniture.tub_o_flowers, Region.flower_dance, 2000, {Material.wood: 15, Seed.tulip: 1, Seed.jazz: 1, Seed.poppy: 1, Seed.spangle: 1})
|
||||
wicked_statue = shop_recipe(Furniture.wicked_statue, Region.sewer, 1000, {Material.stone: 25, Material.coal: 5})
|
||||
flute_block = cutscene_recipe(Furniture.flute_block, Region.carpenter, NPC.robin, 6, {Material.wood: 10, Ore.copper: 2, Material.fiber: 20})
|
||||
drum_block = cutscene_recipe(Furniture.drum_block, Region.carpenter, NPC.robin, 6, {Material.stone: 10, Ore.copper: 2, Material.fiber: 20})
|
||||
|
||||
chest = starter_recipe(Storage.chest, {Material.wood: 50})
|
||||
stone_chest = special_order_recipe(Storage.stone_chest, SpecialOrder.robins_resource_rush, {Material.stone: 50})
|
||||
|
||||
wood_sign = starter_recipe(Sign.wood, {Material.wood: 25})
|
||||
stone_sign = starter_recipe(Sign.stone, {Material.stone: 25})
|
||||
dark_sign = friendship_recipe(Sign.dark, NPC.krobus, 3, {Loot.bat_wing: 5, Fossil.bone_fragment: 5})
|
||||
|
||||
garden_pot = ap_recipe(Craftable.garden_pot, {Material.clay: 1, Material.stone: 10, MetalBar.quartz: 1}, "Greenhouse")
|
||||
scarecrow = skill_recipe(Craftable.scarecrow, Skill.farming, 1, {Material.wood: 50, Material.coal: 1, Material.fiber: 20})
|
||||
deluxe_scarecrow = ap_recipe(Craftable.deluxe_scarecrow, {Material.wood: 50, Material.fiber: 40, Ore.iridium: 1})
|
||||
staircase = skill_recipe(Craftable.staircase, Skill.mining, 2, {Material.stone: 99})
|
||||
explosive_ammo = skill_recipe(Craftable.explosive_ammo, Skill.combat, 8, {MetalBar.iron: 1, Material.coal: 2})
|
||||
transmute_fe = skill_recipe(Craftable.transmute_fe, Skill.mining, 4, {MetalBar.copper: 3})
|
||||
transmute_au = skill_recipe(Craftable.transmute_au, Skill.mining, 7, {MetalBar.iron: 2})
|
||||
mini_jukebox = cutscene_recipe(Craftable.mini_jukebox, Region.saloon, NPC.gus, 5, {MetalBar.iron: 2, ArtisanGood.battery_pack: 1})
|
||||
mini_obelisk = special_order_recipe(Craftable.mini_obelisk, SpecialOrder.a_curious_substance, {Material.hardwood: 30, Loot.solar_essence: 20, MetalBar.gold: 3})
|
||||
farm_computer = special_order_recipe(Craftable.farm_computer, SpecialOrder.aquatic_overpopulation, {Artifact.dwarf_gadget: 1, ArtisanGood.battery_pack: 1, MetalBar.quartz: 10})
|
||||
hopper = ap_recipe(Craftable.hopper, {Material.hardwood: 10, MetalBar.iridium: 1, MetalBar.radioactive: 1})
|
||||
cookout_kit = skill_recipe(Craftable.cookout_kit, Skill.foraging, 9, {Material.wood: 15, Material.fiber: 10, Material.coal: 3})
|
||||
|
||||
travel_charm = shop_recipe(ModCraftable.travel_core, Region.adventurer_guild, 250, {Loot.solar_essence: 1, Loot.void_essence: 1}, ModNames.magic)
|
||||
preservation_chamber = skill_recipe(ModMachine.preservation_chamber, ModSkill.archaeology, 2, {MetalBar.copper: 1, Material.wood: 15, ArtisanGood.oak_resin: 30},
|
||||
ModNames.archaeology)
|
||||
preservation_chamber_h = skill_recipe(ModMachine.hardwood_preservation_chamber, ModSkill.archaeology, 7, {MetalBar.copper: 1, Material.hardwood: 15,
|
||||
ArtisanGood.oak_resin: 30}, ModNames.archaeology)
|
||||
grinder = skill_recipe(ModMachine.grinder, ModSkill.archaeology, 8, {Artifact.rusty_cog: 10, MetalBar.iron: 5, ArtisanGood.battery_pack: 1}, ModNames.archaeology)
|
||||
ancient_battery = skill_recipe(ModMachine.ancient_battery, ModSkill.archaeology, 6, {Material.stone: 40, MetalBar.copper: 10, MetalBar.iron: 5},
|
||||
ModNames.archaeology)
|
||||
glass_bazier = skill_recipe(ModCraftable.glass_bazier, ModSkill.archaeology, 1, {Artifact.glass_shards: 10}, ModNames.archaeology)
|
||||
glass_path = skill_recipe(ModFloor.glass_path, ModSkill.archaeology, 1, {Artifact.glass_shards: 1}, ModNames.archaeology)
|
||||
glass_fence = skill_recipe(ModCraftable.glass_fence, ModSkill.archaeology, 1, {Artifact.glass_shards: 5}, ModNames.archaeology)
|
||||
bone_path = skill_recipe(ModFloor.bone_path, ModSkill.archaeology, 3, {Fossil.bone_fragment: 1}, ModNames.archaeology)
|
||||
water_shifter = skill_recipe(ModCraftable.water_shifter, ModSkill.archaeology, 4, {Material.wood: 40, MetalBar.copper: 4}, ModNames.archaeology)
|
||||
wooden_display = skill_recipe(ModCraftable.wooden_display, ModSkill.archaeology, 2, {Material.wood: 25}, ModNames.archaeology)
|
||||
hardwood_display = skill_recipe(ModCraftable.hardwood_display, ModSkill.archaeology, 7, {Material.hardwood: 10}, ModNames.archaeology)
|
||||
volcano_totem = skill_recipe(ModConsumable.volcano_totem, ModSkill.archaeology, 9, {Material.cinder_shard: 5, Artifact.rare_disc: 1, Artifact.dwarf_gadget: 1},
|
||||
ModNames.archaeology)
|
||||
haste_elixir = shop_recipe(ModEdible.haste_elixir, SVERegion.alesia_shop, 35000, {Loot.void_essence: 35, SVEForage.void_soul: 5, Ingredient.sugar: 1,
|
||||
Meal.spicy_eel: 1}, ModNames.sve)
|
||||
hero_elixir = shop_recipe(ModEdible.hero_elixir, SVERegion.isaac_shop, 65000, {SVEForage.void_pebble: 3, SVEForage.void_soul: 5, Ingredient.oil: 1,
|
||||
Loot.slime: 10}, ModNames.sve)
|
||||
armor_elixir = shop_recipe(ModEdible.armor_elixir, SVERegion.alesia_shop, 50000, {Loot.solar_essence: 30, SVEForage.void_soul: 5, Ingredient.vinegar: 5,
|
||||
Fossil.bone_fragment: 5}, ModNames.sve)
|
||||
ginger_tincture = friendship_recipe(ModConsumable.ginger_tincture, ModNPC.goblin, 4, {DistantLandsForageable.brown_amanita: 1, Forageable.ginger: 5,
|
||||
Material.cinder_shard: 1, DistantLandsForageable.swamp_herb: 1}, ModNames.distant_lands)
|
||||
|
||||
neanderthal_skeleton = shop_recipe(ModCraftable.neanderthal_skeleton, Region.mines_dwarf_shop, 5000,
|
||||
{ModFossil.neanderthal_skull: 1, ModFossil.neanderthal_ribs: 1, ModFossil.neanderthal_pelvis: 1, ModFossil.neanderthal_limb_bones: 1,
|
||||
MetalBar.iron: 5, Material.hardwood: 10}, ModNames.boarding_house)
|
||||
pterodactyl_skeleton_l = shop_recipe(ModCraftable.pterodactyl_skeleton_l, Region.mines_dwarf_shop, 5000,
|
||||
{ModFossil.pterodactyl_phalange: 1, ModFossil.pterodactyl_skull: 1, ModFossil.pterodactyl_l_wing_bone: 1,
|
||||
MetalBar.iron: 10, Material.hardwood: 15}, ModNames.boarding_house)
|
||||
pterodactyl_skeleton_m = shop_recipe(ModCraftable.pterodactyl_skeleton_m, Region.mines_dwarf_shop, 5000,
|
||||
{ModFossil.pterodactyl_phalange: 1, ModFossil.pterodactyl_vertebra: 1, ModFossil.pterodactyl_ribs: 1,
|
||||
MetalBar.iron: 10, Material.hardwood: 15}, ModNames.boarding_house)
|
||||
pterodactyl_skeleton_r = shop_recipe(ModCraftable.pterodactyl_skeleton_r, Region.mines_dwarf_shop, 5000,
|
||||
{ModFossil.pterodactyl_phalange: 1, ModFossil.pterodactyl_claw: 1, ModFossil.pterodactyl_r_wing_bone: 1,
|
||||
MetalBar.iron: 10, Material.hardwood: 15}, ModNames.boarding_house)
|
||||
trex_skeleton_l = shop_recipe(ModCraftable.trex_skeleton_l, Region.mines_dwarf_shop, 5000,
|
||||
{ModFossil.dinosaur_vertebra: 1, ModFossil.dinosaur_tooth: 1, ModFossil.dinosaur_skull: 1,
|
||||
MetalBar.iron: 10, Material.hardwood: 15}, ModNames.boarding_house)
|
||||
trex_skeleton_m = shop_recipe(ModCraftable.trex_skeleton_m, Region.mines_dwarf_shop, 5000,
|
||||
{ModFossil.dinosaur_vertebra: 1, ModFossil.dinosaur_ribs: 1, ModFossil.dinosaur_claw: 1,
|
||||
MetalBar.iron: 10, Material.hardwood: 15}, ModNames.boarding_house)
|
||||
trex_skeleton_r = shop_recipe(ModCraftable.trex_skeleton_r, Region.mines_dwarf_shop, 5000,
|
||||
{ModFossil.dinosaur_vertebra: 1, ModFossil.dinosaur_femur: 1, ModFossil.dinosaur_pelvis: 1,
|
||||
MetalBar.iron: 10, Material.hardwood: 15}, ModNames.boarding_house)
|
||||
|
||||
all_crafting_recipes_by_name = {recipe.item: recipe for recipe in all_crafting_recipes}
|
||||
@@ -1,40 +1,41 @@
|
||||
crop,farm_growth_seasons,seed,seed_seasons,seed_regions
|
||||
Amaranth,Fall,Amaranth Seeds,Fall,"Pierre's General Store,JojaMart"
|
||||
Artichoke,Fall,Artichoke Seeds,Fall,"Pierre's General Store,JojaMart"
|
||||
Beet,Fall,Beet Seeds,Fall,Oasis
|
||||
Blue Jazz,Spring,Jazz Seeds,Spring,"Pierre's General Store,JojaMart"
|
||||
Blueberry,Summer,Blueberry Seeds,Summer,"Pierre's General Store,JojaMart"
|
||||
Bok Choy,Fall,Bok Choy Seeds,Fall,"Pierre's General Store,JojaMart"
|
||||
Cactus Fruit,,Cactus Seeds,,Oasis
|
||||
Cauliflower,Spring,Cauliflower Seeds,Spring,"Pierre's General Store,JojaMart"
|
||||
Coffee Bean,"Spring,Summer",Coffee Bean,"Summer,Fall","Traveling Cart"
|
||||
Corn,"Summer,Fall",Corn Seeds,"Summer,Fall","Pierre's General Store,JojaMart"
|
||||
Cranberries,Fall,Cranberry Seeds,Fall,"Pierre's General Store,JojaMart"
|
||||
Eggplant,Fall,Eggplant Seeds,Fall,"Pierre's General Store,JojaMart"
|
||||
Fairy Rose,Fall,Fairy Seeds,Fall,"Pierre's General Store,JojaMart"
|
||||
Garlic,Spring,Garlic Seeds,Spring,"Pierre's General Store,JojaMart"
|
||||
Grape,Fall,Grape Starter,Fall,"Pierre's General Store,JojaMart"
|
||||
Green Bean,Spring,Bean Starter,Spring,"Pierre's General Store,JojaMart"
|
||||
Hops,Summer,Hops Starter,Summer,"Pierre's General Store,JojaMart"
|
||||
Hot Pepper,Summer,Pepper Seeds,Summer,"Pierre's General Store,JojaMart"
|
||||
Kale,Spring,Kale Seeds,Spring,"Pierre's General Store,JojaMart"
|
||||
Melon,Summer,Melon Seeds,Summer,"Pierre's General Store,JojaMart"
|
||||
Parsnip,Spring,Parsnip Seeds,Spring,"Pierre's General Store,JojaMart"
|
||||
Pineapple,Summer,Pineapple Seeds,Summer,"Island Trader"
|
||||
Poppy,Summer,Poppy Seeds,Summer,"Pierre's General Store,JojaMart"
|
||||
Potato,Spring,Potato Seeds,Spring,"Pierre's General Store,JojaMart"
|
||||
Pumpkin,Fall,Pumpkin Seeds,Fall,"Pierre's General Store,JojaMart"
|
||||
Radish,Summer,Radish Seeds,Summer,"Pierre's General Store,JojaMart"
|
||||
Red Cabbage,Summer,Red Cabbage Seeds,Summer,"Pierre's General Store,JojaMart"
|
||||
Rhubarb,Spring,Rhubarb Seeds,Spring,Oasis
|
||||
Starfruit,Summer,Starfruit Seeds,Summer,Oasis
|
||||
Strawberry,Spring,Strawberry Seeds,Spring,"Pierre's General Store,JojaMart"
|
||||
Summer Spangle,Summer,Spangle Seeds,Summer,"Pierre's General Store,JojaMart"
|
||||
Sunflower,"Summer,Fall",Sunflower Seeds,"Summer,Fall","Pierre's General Store,JojaMart"
|
||||
Sweet Gem Berry,Fall,Rare Seed,"Spring,Summer",Traveling Cart
|
||||
Taro Root,Summer,Taro Tuber,Summer,"Island Trader"
|
||||
Tomato,Summer,Tomato Seeds,Summer,"Pierre's General Store,JojaMart"
|
||||
Tulip,Spring,Tulip Bulb,Spring,"Pierre's General Store,JojaMart"
|
||||
Unmilled Rice,Spring,Rice Shoot,Spring,"Pierre's General Store,JojaMart"
|
||||
Wheat,"Summer,Fall",Wheat Seeds,"Summer,Fall","Pierre's General Store,JojaMart"
|
||||
Yam,Fall,Yam Seeds,Fall,"Pierre's General Store,JojaMart"
|
||||
crop,farm_growth_seasons,seed,seed_seasons,seed_regions,requires_island
|
||||
Amaranth,Fall,Amaranth Seeds,Fall,"Pierre's General Store",False
|
||||
Artichoke,Fall,Artichoke Seeds,Fall,"Pierre's General Store",False
|
||||
Beet,Fall,Beet Seeds,Fall,Oasis,False
|
||||
Blue Jazz,Spring,Jazz Seeds,Spring,"Pierre's General Store",False
|
||||
Blueberry,Summer,Blueberry Seeds,Summer,"Pierre's General Store",False
|
||||
Bok Choy,Fall,Bok Choy Seeds,Fall,"Pierre's General Store",False
|
||||
Cactus Fruit,,Cactus Seeds,,Oasis,False
|
||||
Cauliflower,Spring,Cauliflower Seeds,Spring,"Pierre's General Store",False
|
||||
Coffee Bean,"Spring,Summer",Coffee Bean,"Summer,Fall","Traveling Cart",False
|
||||
Corn,"Summer,Fall",Corn Seeds,"Summer,Fall","Pierre's General Store",False
|
||||
Cranberries,Fall,Cranberry Seeds,Fall,"Pierre's General Store",False
|
||||
Eggplant,Fall,Eggplant Seeds,Fall,"Pierre's General Store",False
|
||||
Fairy Rose,Fall,Fairy Seeds,Fall,"Pierre's General Store",False
|
||||
Garlic,Spring,Garlic Seeds,Spring,"Pierre's General Store",False
|
||||
Grape,Fall,Grape Starter,Fall,"Pierre's General Store",False
|
||||
Green Bean,Spring,Bean Starter,Spring,"Pierre's General Store",False
|
||||
Hops,Summer,Hops Starter,Summer,"Pierre's General Store",False
|
||||
Hot Pepper,Summer,Pepper Seeds,Summer,"Pierre's General Store",False
|
||||
Kale,Spring,Kale Seeds,Spring,"Pierre's General Store",False
|
||||
Melon,Summer,Melon Seeds,Summer,"Pierre's General Store",False
|
||||
Parsnip,Spring,Parsnip Seeds,Spring,"Pierre's General Store",False
|
||||
Pineapple,Summer,Pineapple Seeds,Summer,"Island Trader",True
|
||||
Poppy,Summer,Poppy Seeds,Summer,"Pierre's General Store",False
|
||||
Potato,Spring,Potato Seeds,Spring,"Pierre's General Store",False
|
||||
Qi Fruit,"Spring,Summer,Fall,Winter",Qi Bean,"Spring,Summer,Fall,Winter","Qi's Walnut Room",True
|
||||
Pumpkin,Fall,Pumpkin Seeds,Fall,"Pierre's General Store",False
|
||||
Radish,Summer,Radish Seeds,Summer,"Pierre's General Store",False
|
||||
Red Cabbage,Summer,Red Cabbage Seeds,Summer,"Pierre's General Store",False
|
||||
Rhubarb,Spring,Rhubarb Seeds,Spring,Oasis,False
|
||||
Starfruit,Summer,Starfruit Seeds,Summer,Oasis,False
|
||||
Strawberry,Spring,Strawberry Seeds,Spring,"Pierre's General Store",False
|
||||
Summer Spangle,Summer,Spangle Seeds,Summer,"Pierre's General Store",False
|
||||
Sunflower,"Summer,Fall",Sunflower Seeds,"Summer,Fall","Pierre's General Store",False
|
||||
Sweet Gem Berry,Fall,Rare Seed,"Spring,Summer",Traveling Cart,False
|
||||
Taro Root,Summer,Taro Tuber,Summer,"Island Trader",True
|
||||
Tomato,Summer,Tomato Seeds,Summer,"Pierre's General Store",False
|
||||
Tulip,Spring,Tulip Bulb,Spring,"Pierre's General Store",False
|
||||
Unmilled Rice,Spring,Rice Shoot,Spring,"Pierre's General Store",False
|
||||
Wheat,"Summer,Fall",Wheat Seeds,"Summer,Fall","Pierre's General Store",False
|
||||
Yam,Fall,Yam Seeds,Fall,"Pierre's General Store",False
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
from dataclasses import dataclass
|
||||
from typing import List
|
||||
from typing import Tuple
|
||||
|
||||
from .. import data
|
||||
|
||||
@@ -7,14 +7,15 @@ from .. import data
|
||||
@dataclass(frozen=True)
|
||||
class SeedItem:
|
||||
name: str
|
||||
seasons: List[str]
|
||||
regions: List[str]
|
||||
seasons: Tuple[str]
|
||||
regions: Tuple[str]
|
||||
requires_island: bool
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class CropItem:
|
||||
name: str
|
||||
farm_growth_seasons: List[str]
|
||||
farm_growth_seasons: Tuple[str]
|
||||
seed: SeedItem
|
||||
|
||||
|
||||
@@ -32,13 +33,14 @@ def load_crop_csv():
|
||||
|
||||
for item in reader:
|
||||
seeds.append(SeedItem(item["seed"],
|
||||
[season for season in item["seed_seasons"].split(",")]
|
||||
if item["seed_seasons"] else [],
|
||||
[region for region in item["seed_regions"].split(",")]
|
||||
if item["seed_regions"] else []))
|
||||
tuple(season for season in item["seed_seasons"].split(","))
|
||||
if item["seed_seasons"] else tuple(),
|
||||
tuple(region for region in item["seed_regions"].split(","))
|
||||
if item["seed_regions"] else tuple(),
|
||||
item["requires_island"] == "True"))
|
||||
crops.append(CropItem(item["crop"],
|
||||
[season for season in item["farm_growth_seasons"].split(",")]
|
||||
if item["farm_growth_seasons"] else [],
|
||||
tuple(season for season in item["farm_growth_seasons"].split(","))
|
||||
if item["farm_growth_seasons"] else tuple(),
|
||||
seeds[-1]))
|
||||
return crops, seeds
|
||||
|
||||
|
||||
@@ -1,20 +1,24 @@
|
||||
from dataclasses import dataclass
|
||||
from typing import List, Tuple, Union, Optional
|
||||
from typing import List, Tuple, Union, Optional, Set
|
||||
|
||||
from . import season_data as season
|
||||
from .game_item import GameItem
|
||||
from ..strings.region_names import Region
|
||||
from ..strings.fish_names import Fish, SVEFish, DistantLandsFish
|
||||
from ..strings.region_names import Region, SVERegion
|
||||
from ..mods.mod_data import ModNames
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class FishItem(GameItem):
|
||||
class FishItem:
|
||||
name: str
|
||||
locations: Tuple[str]
|
||||
seasons: Tuple[str]
|
||||
difficulty: int
|
||||
mod_name: Optional[str]
|
||||
legendary: bool
|
||||
extended_family: bool
|
||||
mod_name: Optional[str] = None
|
||||
|
||||
def __repr__(self):
|
||||
return f"{self.name} [{self.item_id}] (Locations: {self.locations} |" \
|
||||
return f"{self.name} (Locations: {self.locations} |" \
|
||||
f" Seasons: {self.seasons} |" \
|
||||
f" Difficulty: {self.difficulty}) |" \
|
||||
f"Mod: {self.mod_name}"
|
||||
@@ -39,92 +43,149 @@ ginger_island_ocean = (Region.island_south, Region.island_west)
|
||||
ginger_island_river = (Region.island_west,)
|
||||
pirate_cove = (Region.pirate_cove,)
|
||||
|
||||
crimson_badlands = (SVERegion.crimson_badlands,)
|
||||
shearwater = (SVERegion.shearwater,)
|
||||
highlands = (SVERegion.highlands_outside,)
|
||||
sprite_spring = (SVERegion.sprite_spring,)
|
||||
fable_reef = (SVERegion.fable_reef,)
|
||||
vineyard = (SVERegion.blue_moon_vineyard,)
|
||||
|
||||
all_fish: List[FishItem] = []
|
||||
|
||||
|
||||
def create_fish(name: str, item_id: int, locations: Tuple[str, ...], seasons: Union[str, Tuple[str, ...]],
|
||||
difficulty: int, mod_name: Optional[str] = None) -> FishItem:
|
||||
def create_fish(name: str, locations: Tuple[str, ...], seasons: Union[str, Tuple[str, ...]],
|
||||
difficulty: int, legendary: bool = False, extended_family: bool = False, mod_name: Optional[str] = None) -> FishItem:
|
||||
if isinstance(seasons, str):
|
||||
seasons = (seasons,)
|
||||
|
||||
fish_item = FishItem(name, item_id, locations, seasons, difficulty, mod_name)
|
||||
fish_item = FishItem(name, locations, seasons, difficulty, legendary, extended_family, mod_name)
|
||||
all_fish.append(fish_item)
|
||||
return fish_item
|
||||
|
||||
|
||||
albacore = create_fish("Albacore", 705, ocean, (season.fall, season.winter), 60)
|
||||
anchovy = create_fish("Anchovy", 129, ocean, (season.spring, season.fall), 30)
|
||||
blue_discus = create_fish("Blue Discus", 838, ginger_island_river, season.all_seasons, 60)
|
||||
bream = create_fish("Bream", 132, town_river + forest_river, season.all_seasons, 35)
|
||||
bullhead = create_fish("Bullhead", 700, mountain_lake, season.all_seasons, 46)
|
||||
carp = create_fish("Carp", 142, mountain_lake + secret_woods + sewers + mutant_bug_lair, season.not_winter, 15)
|
||||
catfish = create_fish("Catfish", 143, town_river + forest_river + secret_woods, (season.spring, season.fall), 75)
|
||||
chub = create_fish("Chub", 702, forest_river + mountain_lake, season.all_seasons, 35)
|
||||
dorado = create_fish("Dorado", 704, forest_river, season.summer, 78)
|
||||
eel = create_fish("Eel", 148, ocean, (season.spring, season.fall), 70)
|
||||
flounder = create_fish("Flounder", 267, ocean, (season.spring, season.summer), 50)
|
||||
ghostfish = create_fish("Ghostfish", 156, mines_floor_20 + mines_floor_60, season.all_seasons, 50)
|
||||
halibut = create_fish("Halibut", 708, ocean, season.not_fall, 50)
|
||||
herring = create_fish("Herring", 147, ocean, (season.spring, season.winter), 25)
|
||||
ice_pip = create_fish("Ice Pip", 161, mines_floor_60, season.all_seasons, 85)
|
||||
largemouth_bass = create_fish("Largemouth Bass", 136, mountain_lake, season.all_seasons, 50)
|
||||
lava_eel = create_fish("Lava Eel", 162, mines_floor_100, season.all_seasons, 90)
|
||||
lingcod = create_fish("Lingcod", 707, town_river + forest_river + mountain_lake, season.winter, 85)
|
||||
lionfish = create_fish("Lionfish", 837, ginger_island_ocean, season.all_seasons, 50)
|
||||
midnight_carp = create_fish("Midnight Carp", 269, mountain_lake + forest_pond + ginger_island_river,
|
||||
albacore = create_fish("Albacore", ocean, (season.fall, season.winter), 60)
|
||||
anchovy = create_fish("Anchovy", ocean, (season.spring, season.fall), 30)
|
||||
blue_discus = create_fish("Blue Discus", ginger_island_river, season.all_seasons, 60)
|
||||
bream = create_fish("Bream", town_river + forest_river, season.all_seasons, 35)
|
||||
bullhead = create_fish("Bullhead", mountain_lake, season.all_seasons, 46)
|
||||
carp = create_fish(Fish.carp, mountain_lake + secret_woods + sewers + mutant_bug_lair, season.not_winter, 15)
|
||||
catfish = create_fish("Catfish", town_river + forest_river + secret_woods, (season.spring, season.fall), 75)
|
||||
chub = create_fish("Chub", forest_river + mountain_lake, season.all_seasons, 35)
|
||||
dorado = create_fish("Dorado", forest_river, season.summer, 78)
|
||||
eel = create_fish("Eel", ocean, (season.spring, season.fall), 70)
|
||||
flounder = create_fish("Flounder", ocean, (season.spring, season.summer), 50)
|
||||
ghostfish = create_fish("Ghostfish", mines_floor_20 + mines_floor_60, season.all_seasons, 50)
|
||||
halibut = create_fish("Halibut", ocean, season.not_fall, 50)
|
||||
herring = create_fish("Herring", ocean, (season.spring, season.winter), 25)
|
||||
ice_pip = create_fish("Ice Pip", mines_floor_60, season.all_seasons, 85)
|
||||
largemouth_bass = create_fish("Largemouth Bass", mountain_lake, season.all_seasons, 50)
|
||||
lava_eel = create_fish("Lava Eel", mines_floor_100, season.all_seasons, 90)
|
||||
lingcod = create_fish("Lingcod", town_river + forest_river + mountain_lake, season.winter, 85)
|
||||
lionfish = create_fish("Lionfish", ginger_island_ocean, season.all_seasons, 50)
|
||||
midnight_carp = create_fish("Midnight Carp", mountain_lake + forest_pond + ginger_island_river,
|
||||
(season.fall, season.winter), 55)
|
||||
octopus = create_fish("Octopus", 149, ocean, season.summer, 95)
|
||||
perch = create_fish("Perch", 141, town_river + forest_river + forest_pond + mountain_lake, season.winter, 35)
|
||||
pike = create_fish("Pike", 144, town_river + forest_river + forest_pond, (season.summer, season.winter), 60)
|
||||
pufferfish = create_fish("Pufferfish", 128, ocean + ginger_island_ocean, season.summer, 80)
|
||||
rainbow_trout = create_fish("Rainbow Trout", 138, town_river + forest_river + mountain_lake, season.summer, 45)
|
||||
red_mullet = create_fish("Red Mullet", 146, ocean, (season.summer, season.winter), 55)
|
||||
red_snapper = create_fish("Red Snapper", 150, ocean, (season.summer, season.fall), 40)
|
||||
salmon = create_fish("Salmon", 139, town_river + forest_river, season.fall, 50)
|
||||
sandfish = create_fish("Sandfish", 164, desert, season.all_seasons, 65)
|
||||
sardine = create_fish("Sardine", 131, ocean, (season.spring, season.fall, season.winter), 30)
|
||||
scorpion_carp = create_fish("Scorpion Carp", 165, desert, season.all_seasons, 90)
|
||||
sea_cucumber = create_fish("Sea Cucumber", 154, ocean, (season.fall, season.winter), 40)
|
||||
shad = create_fish("Shad", 706, town_river + forest_river, season.not_winter, 45)
|
||||
slimejack = create_fish("Slimejack", 796, mutant_bug_lair, season.all_seasons, 55)
|
||||
smallmouth_bass = create_fish("Smallmouth Bass", 137, town_river + forest_river, (season.spring, season.fall), 28)
|
||||
squid = create_fish("Squid", 151, ocean, season.winter, 75)
|
||||
stingray = create_fish("Stingray", 836, pirate_cove, season.all_seasons, 80)
|
||||
stonefish = create_fish("Stonefish", 158, mines_floor_20, season.all_seasons, 65)
|
||||
sturgeon = create_fish("Sturgeon", 698, mountain_lake, (season.summer, season.winter), 78)
|
||||
sunfish = create_fish("Sunfish", 145, town_river + forest_river, (season.spring, season.summer), 30)
|
||||
super_cucumber = create_fish("Super Cucumber", 155, ocean + ginger_island_ocean, (season.summer, season.fall), 80)
|
||||
tiger_trout = create_fish("Tiger Trout", 699, town_river + forest_river, (season.fall, season.winter), 60)
|
||||
tilapia = create_fish("Tilapia", 701, ocean + ginger_island_ocean, (season.summer, season.fall), 50)
|
||||
octopus = create_fish("Octopus", ocean, season.summer, 95)
|
||||
perch = create_fish("Perch", town_river + forest_river + forest_pond + mountain_lake, season.winter, 35)
|
||||
pike = create_fish("Pike", town_river + forest_river + forest_pond, (season.summer, season.winter), 60)
|
||||
pufferfish = create_fish("Pufferfish", ocean + ginger_island_ocean, season.summer, 80)
|
||||
rainbow_trout = create_fish("Rainbow Trout", town_river + forest_river + mountain_lake, season.summer, 45)
|
||||
red_mullet = create_fish("Red Mullet", ocean, (season.summer, season.winter), 55)
|
||||
red_snapper = create_fish("Red Snapper", ocean, (season.summer, season.fall), 40)
|
||||
salmon = create_fish("Salmon", town_river + forest_river, season.fall, 50)
|
||||
sandfish = create_fish("Sandfish", desert, season.all_seasons, 65)
|
||||
sardine = create_fish("Sardine", ocean, (season.spring, season.fall, season.winter), 30)
|
||||
scorpion_carp = create_fish("Scorpion Carp", desert, season.all_seasons, 90)
|
||||
sea_cucumber = create_fish("Sea Cucumber", ocean, (season.fall, season.winter), 40)
|
||||
shad = create_fish("Shad", town_river + forest_river, season.not_winter, 45)
|
||||
slimejack = create_fish("Slimejack", mutant_bug_lair, season.all_seasons, 55)
|
||||
smallmouth_bass = create_fish("Smallmouth Bass", town_river + forest_river, (season.spring, season.fall), 28)
|
||||
squid = create_fish("Squid", ocean, season.winter, 75)
|
||||
stingray = create_fish("Stingray", pirate_cove, season.all_seasons, 80)
|
||||
stonefish = create_fish("Stonefish", mines_floor_20, season.all_seasons, 65)
|
||||
sturgeon = create_fish("Sturgeon", mountain_lake, (season.summer, season.winter), 78)
|
||||
sunfish = create_fish("Sunfish", town_river + forest_river, (season.spring, season.summer), 30)
|
||||
super_cucumber = create_fish("Super Cucumber", ocean + ginger_island_ocean, (season.summer, season.fall), 80)
|
||||
tiger_trout = create_fish("Tiger Trout", town_river + forest_river, (season.fall, season.winter), 60)
|
||||
tilapia = create_fish("Tilapia", ocean + ginger_island_ocean, (season.summer, season.fall), 50)
|
||||
# Tuna has different seasons on ginger island. Should be changed when the whole fish thing is refactored
|
||||
tuna = create_fish("Tuna", 130, ocean + ginger_island_ocean, (season.summer, season.winter), 70)
|
||||
void_salmon = create_fish("Void Salmon", 795, witch_swamp, season.all_seasons, 80)
|
||||
walleye = create_fish("Walleye", 140, town_river + forest_river + forest_pond + mountain_lake, season.fall, 45)
|
||||
woodskip = create_fish("Woodskip", 734, secret_woods, season.all_seasons, 50)
|
||||
tuna = create_fish("Tuna", ocean + ginger_island_ocean, (season.summer, season.winter), 70)
|
||||
void_salmon = create_fish("Void Salmon", witch_swamp, season.all_seasons, 80)
|
||||
walleye = create_fish("Walleye", town_river + forest_river + forest_pond + mountain_lake, season.fall, 45)
|
||||
woodskip = create_fish("Woodskip", secret_woods, season.all_seasons, 50)
|
||||
|
||||
blob_fish = create_fish("Blobfish", 800, night_market, season.winter, 75)
|
||||
midnight_squid = create_fish("Midnight Squid", 798, night_market, season.winter, 55)
|
||||
spook_fish = create_fish("Spook Fish", 799, night_market, season.winter, 60)
|
||||
blob_fish = create_fish("Blobfish", night_market, season.winter, 75)
|
||||
midnight_squid = create_fish("Midnight Squid", night_market, season.winter, 55)
|
||||
spook_fish = create_fish("Spook Fish", night_market, season.winter, 60)
|
||||
|
||||
angler = create_fish("Angler", 160, town_river, season.fall, 85)
|
||||
crimsonfish = create_fish("Crimsonfish", 159, ocean, season.summer, 95)
|
||||
glacierfish = create_fish("Glacierfish", 775, forest_river, season.winter, 100)
|
||||
legend = create_fish("Legend", 163, mountain_lake, season.spring, 110)
|
||||
mutant_carp = create_fish("Mutant Carp", 682, sewers, season.all_seasons, 80)
|
||||
angler = create_fish(Fish.angler, town_river, season.fall, 85, True, False)
|
||||
crimsonfish = create_fish(Fish.crimsonfish, ocean, season.summer, 95, True, False)
|
||||
glacierfish = create_fish(Fish.glacierfish, forest_river, season.winter, 100, True, False)
|
||||
legend = create_fish(Fish.legend, mountain_lake, season.spring, 110, True, False)
|
||||
mutant_carp = create_fish(Fish.mutant_carp, sewers, season.all_seasons, 80, True, False)
|
||||
|
||||
clam = create_fish("Clam", 372, ocean, season.all_seasons, -1)
|
||||
cockle = create_fish("Cockle", 718, ocean, season.all_seasons, -1)
|
||||
crab = create_fish("Crab", 717, ocean, season.all_seasons, -1)
|
||||
crayfish = create_fish("Crayfish", 716, fresh_water, season.all_seasons, -1)
|
||||
lobster = create_fish("Lobster", 715, ocean, season.all_seasons, -1)
|
||||
mussel = create_fish("Mussel", 719, ocean, season.all_seasons, -1)
|
||||
oyster = create_fish("Oyster", 723, ocean, season.all_seasons, -1)
|
||||
periwinkle = create_fish("Periwinkle", 722, fresh_water, season.all_seasons, -1)
|
||||
shrimp = create_fish("Shrimp", 720, ocean, season.all_seasons, -1)
|
||||
snail = create_fish("Snail", 721, fresh_water, season.all_seasons, -1)
|
||||
ms_angler = create_fish(Fish.ms_angler, town_river, season.fall, 85, True, True)
|
||||
son_of_crimsonfish = create_fish(Fish.son_of_crimsonfish, ocean, season.summer, 95, True, True)
|
||||
glacierfish_jr = create_fish(Fish.glacierfish_jr, forest_river, season.winter, 100, True, True)
|
||||
legend_ii = create_fish(Fish.legend_ii, mountain_lake, season.spring, 110, True, True)
|
||||
radioactive_carp = create_fish(Fish.radioactive_carp, sewers, season.all_seasons, 80, True, True)
|
||||
|
||||
legendary_fish = [crimsonfish, angler, legend, glacierfish, mutant_carp]
|
||||
baby_lunaloo = create_fish(SVEFish.baby_lunaloo, ginger_island_ocean, season.all_seasons, 15, mod_name=ModNames.sve)
|
||||
bonefish = create_fish(SVEFish.bonefish, crimson_badlands, season.all_seasons, 70, mod_name=ModNames.sve)
|
||||
bull_trout = create_fish(SVEFish.bull_trout, forest_river, season.not_spring, 45, mod_name=ModNames.sve)
|
||||
butterfish = create_fish(SVEFish.butterfish, shearwater, season.not_winter, 75, mod_name=ModNames.sve)
|
||||
clownfish = create_fish(SVEFish.clownfish, ginger_island_ocean, season.all_seasons, 45, mod_name=ModNames.sve)
|
||||
daggerfish = create_fish(SVEFish.daggerfish, highlands, season.all_seasons, 50, mod_name=ModNames.sve)
|
||||
frog = create_fish(SVEFish.frog, mountain_lake, (season.spring, season.summer), 70, mod_name=ModNames.sve)
|
||||
gemfish = create_fish(SVEFish.gemfish, highlands, season.all_seasons, 100, mod_name=ModNames.sve)
|
||||
goldenfish = create_fish(SVEFish.goldenfish, sprite_spring, season.all_seasons, 60, mod_name=ModNames.sve)
|
||||
grass_carp = create_fish(SVEFish.grass_carp, secret_woods, (season.spring, season.summer), 85, mod_name=ModNames.sve)
|
||||
king_salmon = create_fish(SVEFish.king_salmon, forest_river, (season.spring, season.summer), 80, mod_name=ModNames.sve)
|
||||
kittyfish = create_fish(SVEFish.kittyfish, shearwater, (season.fall, season.winter), 85, mod_name=ModNames.sve)
|
||||
lunaloo = create_fish(SVEFish.lunaloo, ginger_island_ocean, season.all_seasons, 70, mod_name=ModNames.sve)
|
||||
meteor_carp = create_fish(SVEFish.meteor_carp, sprite_spring, season.all_seasons, 80, mod_name=ModNames.sve)
|
||||
minnow = create_fish(SVEFish.minnow, town_river, season.all_seasons, 1, mod_name=ModNames.sve)
|
||||
puppyfish = create_fish(SVEFish.puppyfish, shearwater, season.not_winter, 85, mod_name=ModNames.sve)
|
||||
radioactive_bass = create_fish(SVEFish.radioactive_bass, sewers, season.all_seasons, 90, mod_name=ModNames.sve)
|
||||
seahorse = create_fish(SVEFish.seahorse, ginger_island_ocean, season.all_seasons, 25, mod_name=ModNames.sve)
|
||||
shiny_lunaloo = create_fish(SVEFish.shiny_lunaloo, ginger_island_ocean, season.all_seasons, 110, mod_name=ModNames.sve)
|
||||
snatcher_worm = create_fish(SVEFish.snatcher_worm, mutant_bug_lair, season.all_seasons, 75, mod_name=ModNames.sve)
|
||||
starfish = create_fish(SVEFish.starfish, ginger_island_ocean, season.all_seasons, 75, mod_name=ModNames.sve)
|
||||
torpedo_trout = create_fish(SVEFish.torpedo_trout, fable_reef, season.all_seasons, 70, mod_name=ModNames.sve)
|
||||
undeadfish = create_fish(SVEFish.undeadfish, crimson_badlands, season.all_seasons, 80, mod_name=ModNames.sve)
|
||||
void_eel = create_fish(SVEFish.void_eel, witch_swamp, season.all_seasons, 100, mod_name=ModNames.sve)
|
||||
water_grub = create_fish(SVEFish.water_grub, mutant_bug_lair, season.all_seasons, 60, mod_name=ModNames.sve)
|
||||
sea_sponge = create_fish(SVEFish.sea_sponge, ginger_island_ocean, season.all_seasons, 40, mod_name=ModNames.sve)
|
||||
dulse_seaweed = create_fish(SVEFish.dulse_seaweed, vineyard, season.all_seasons, 50, mod_name=ModNames.sve)
|
||||
|
||||
void_minnow = create_fish(DistantLandsFish.void_minnow, witch_swamp, season.all_seasons, 15, mod_name=ModNames.distant_lands)
|
||||
purple_algae = create_fish(DistantLandsFish.purple_algae, witch_swamp, season.all_seasons, 15, mod_name=ModNames.distant_lands)
|
||||
swamp_leech = create_fish(DistantLandsFish.swamp_leech, witch_swamp, season.all_seasons, 15, mod_name=ModNames.distant_lands)
|
||||
giant_horsehoe_crab = create_fish(DistantLandsFish.giant_horsehoe_crab, witch_swamp, season.all_seasons, 90, mod_name=ModNames.distant_lands)
|
||||
|
||||
|
||||
clam = create_fish("Clam", ocean, season.all_seasons, -1)
|
||||
cockle = create_fish("Cockle", ocean, season.all_seasons, -1)
|
||||
crab = create_fish("Crab", ocean, season.all_seasons, -1)
|
||||
crayfish = create_fish("Crayfish", fresh_water, season.all_seasons, -1)
|
||||
lobster = create_fish("Lobster", ocean, season.all_seasons, -1)
|
||||
mussel = create_fish("Mussel", ocean, season.all_seasons, -1)
|
||||
oyster = create_fish("Oyster", ocean, season.all_seasons, -1)
|
||||
periwinkle = create_fish("Periwinkle", fresh_water, season.all_seasons, -1)
|
||||
shrimp = create_fish("Shrimp", ocean, season.all_seasons, -1)
|
||||
snail = create_fish("Snail", fresh_water, season.all_seasons, -1)
|
||||
|
||||
legendary_fish = [angler, crimsonfish, glacierfish, legend, mutant_carp]
|
||||
extended_family = [ms_angler, son_of_crimsonfish, glacierfish_jr, legend_ii, radioactive_carp]
|
||||
special_fish = [*legendary_fish, blob_fish, lava_eel, octopus, scorpion_carp, ice_pip, super_cucumber, dorado]
|
||||
island_fish = [lionfish, blue_discus, stingray]
|
||||
island_fish = [lionfish, blue_discus, stingray, *extended_family]
|
||||
|
||||
all_fish_by_name = {fish.name: fish for fish in all_fish}
|
||||
|
||||
|
||||
def get_fish_for_mods(mods: Set[str]) -> List[FishItem]:
|
||||
fish_for_mods = []
|
||||
for fish in all_fish:
|
||||
if fish.mod_name and fish.mod_name not in mods:
|
||||
continue
|
||||
fish_for_mods.append(fish)
|
||||
return fish_for_mods
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class GameItem:
|
||||
name: str
|
||||
item_id: int
|
||||
|
||||
def __repr__(self):
|
||||
return f"{self.name} [{self.item_id}]"
|
||||
|
||||
def __lt__(self, other):
|
||||
return self.name < other.name
|
||||
@@ -7,48 +7,46 @@ id,name,classification,groups,mod_name
|
||||
19,Glittering Boulder Removed,progression,COMMUNITY_REWARD,
|
||||
20,Minecarts Repair,useful,COMMUNITY_REWARD,
|
||||
21,Bus Repair,progression,COMMUNITY_REWARD,
|
||||
22,Movie Theater,useful,,
|
||||
22,Progressive Movie Theater,progression,COMMUNITY_REWARD,
|
||||
23,Stardrop,progression,,
|
||||
24,Progressive Backpack,progression,,
|
||||
25,Rusty Sword,progression,WEAPON,
|
||||
26,Leather Boots,progression,"FOOTWEAR,MINES_FLOOR_10",
|
||||
27,Work Boots,useful,"FOOTWEAR,MINES_FLOOR_10",
|
||||
28,Wooden Blade,progression,"MINES_FLOOR_10,WEAPON",
|
||||
29,Iron Dirk,progression,"MINES_FLOOR_10,WEAPON",
|
||||
30,Wind Spire,progression,"MINES_FLOOR_10,WEAPON",
|
||||
31,Femur,progression,"MINES_FLOOR_10,WEAPON",
|
||||
32,Steel Smallsword,progression,"MINES_FLOOR_20,WEAPON",
|
||||
33,Wood Club,progression,"MINES_FLOOR_20,WEAPON",
|
||||
34,Elf Blade,progression,"MINES_FLOOR_20,WEAPON",
|
||||
35,Glow Ring,useful,"MINES_FLOOR_20,RING",
|
||||
36,Magnet Ring,useful,"MINES_FLOOR_20,RING",
|
||||
37,Slingshot,progression,WEAPON,
|
||||
38,Tundra Boots,useful,"FOOTWEAR,MINES_FLOOR_50",
|
||||
39,Thermal Boots,useful,"FOOTWEAR,MINES_FLOOR_50",
|
||||
40,Combat Boots,useful,"FOOTWEAR,MINES_FLOOR_50",
|
||||
41,Silver Saber,progression,"MINES_FLOOR_50,WEAPON",
|
||||
42,Pirate's Sword,progression,"MINES_FLOOR_50,WEAPON",
|
||||
43,Crystal Dagger,progression,"MINES_FLOOR_60,WEAPON",
|
||||
44,Cutlass,progression,"MINES_FLOOR_60,WEAPON",
|
||||
45,Iron Edge,progression,"MINES_FLOOR_60,WEAPON",
|
||||
46,Burglar's Shank,progression,"MINES_FLOOR_60,WEAPON",
|
||||
47,Wood Mallet,progression,"MINES_FLOOR_60,WEAPON",
|
||||
48,Master Slingshot,progression,WEAPON,
|
||||
49,Firewalker Boots,useful,"FOOTWEAR,MINES_FLOOR_80",
|
||||
50,Dark Boots,useful,"FOOTWEAR,MINES_FLOOR_80",
|
||||
51,Claymore,progression,"MINES_FLOOR_80,WEAPON",
|
||||
52,Templar's Blade,progression,"MINES_FLOOR_80,WEAPON",
|
||||
53,Kudgel,progression,"MINES_FLOOR_80,WEAPON",
|
||||
54,Shadow Dagger,progression,"MINES_FLOOR_80,WEAPON",
|
||||
55,Obsidian Edge,progression,"MINES_FLOOR_90,WEAPON",
|
||||
56,Tempered Broadsword,progression,"MINES_FLOOR_90,WEAPON",
|
||||
57,Wicked Kris,progression,"MINES_FLOOR_90,WEAPON",
|
||||
58,Bone Sword,progression,"MINES_FLOOR_90,WEAPON",
|
||||
59,Ossified Blade,progression,"MINES_FLOOR_90,WEAPON",
|
||||
60,Space Boots,useful,"FOOTWEAR,MINES_FLOOR_110",
|
||||
61,Crystal Shoes,useful,"FOOTWEAR,MINES_FLOOR_110",
|
||||
62,Steel Falchion,progression,"MINES_FLOOR_110,WEAPON",
|
||||
63,The Slammer,progression,"MINES_FLOOR_110,WEAPON",
|
||||
25,Rusty Sword,filler,"WEAPON,DEPRECATED",
|
||||
26,Leather Boots,filler,"FOOTWEAR,DEPRECATED",
|
||||
27,Work Boots,filler,"FOOTWEAR,DEPRECATED",
|
||||
28,Wooden Blade,filler,"WEAPON,DEPRECATED",
|
||||
29,Iron Dirk,filler,"WEAPON,DEPRECATED",
|
||||
30,Wind Spire,filler,"WEAPON,DEPRECATED",
|
||||
31,Femur,filler,"WEAPON,DEPRECATED",
|
||||
32,Steel Smallsword,filler,"WEAPON,DEPRECATED",
|
||||
33,Wood Club,filler,"WEAPON,DEPRECATED",
|
||||
34,Elf Blade,filler,"WEAPON,DEPRECATED",
|
||||
37,Slingshot,filler,"WEAPON,DEPRECATED",
|
||||
38,Tundra Boots,filler,"FOOTWEAR,DEPRECATED",
|
||||
39,Thermal Boots,filler,"FOOTWEAR,DEPRECATED",
|
||||
40,Combat Boots,filler,"FOOTWEAR,DEPRECATED",
|
||||
41,Silver Saber,filler,"WEAPON,DEPRECATED",
|
||||
42,Pirate's Sword,filler,"WEAPON,DEPRECATED",
|
||||
43,Crystal Dagger,filler,"WEAPON,DEPRECATED",
|
||||
44,Cutlass,filler,"WEAPON,DEPRECATED",
|
||||
45,Iron Edge,filler,"WEAPON,DEPRECATED",
|
||||
46,Burglar's Shank,filler,"WEAPON,DEPRECATED",
|
||||
47,Wood Mallet,filler,"WEAPON,DEPRECATED",
|
||||
48,Master Slingshot,filler,"WEAPON,DEPRECATED",
|
||||
49,Firewalker Boots,filler,"FOOTWEAR,DEPRECATED",
|
||||
50,Dark Boots,filler,"FOOTWEAR,DEPRECATED",
|
||||
51,Claymore,filler,"WEAPON,DEPRECATED",
|
||||
52,Templar's Blade,filler,"WEAPON,DEPRECATED",
|
||||
53,Kudgel,filler,"WEAPON,DEPRECATED",
|
||||
54,Shadow Dagger,filler,"WEAPON,DEPRECATED",
|
||||
55,Obsidian Edge,filler,"WEAPON,DEPRECATED",
|
||||
56,Tempered Broadsword,filler,"WEAPON,DEPRECATED",
|
||||
57,Wicked Kris,filler,"WEAPON,DEPRECATED",
|
||||
58,Bone Sword,filler,"WEAPON,DEPRECATED",
|
||||
59,Ossified Blade,filler,"WEAPON,DEPRECATED",
|
||||
60,Space Boots,filler,"FOOTWEAR,DEPRECATED",
|
||||
61,Crystal Shoes,filler,"FOOTWEAR,DEPRECATED",
|
||||
62,Steel Falchion,filler,"WEAPON,DEPRECATED",
|
||||
63,The Slammer,filler,"WEAPON,DEPRECATED",
|
||||
64,Skull Key,progression,,
|
||||
65,Progressive Hoe,progression,PROGRESSIVE_TOOLS,
|
||||
66,Progressive Pickaxe,progression,PROGRESSIVE_TOOLS,
|
||||
@@ -63,40 +61,40 @@ id,name,classification,groups,mod_name
|
||||
75,Foraging Level,progression,SKILL_LEVEL_UP,
|
||||
76,Mining Level,progression,SKILL_LEVEL_UP,
|
||||
77,Combat Level,progression,SKILL_LEVEL_UP,
|
||||
78,Earth Obelisk,progression,,
|
||||
79,Water Obelisk,progression,,
|
||||
80,Desert Obelisk,progression,,
|
||||
81,Island Obelisk,progression,GINGER_ISLAND,
|
||||
82,Junimo Hut,useful,,
|
||||
83,Gold Clock,progression,,
|
||||
84,Progressive Coop,progression,,
|
||||
85,Progressive Barn,progression,,
|
||||
86,Well,useful,,
|
||||
87,Silo,progression,,
|
||||
88,Mill,progression,,
|
||||
89,Progressive Shed,progression,,
|
||||
90,Fish Pond,progression,,
|
||||
91,Stable,useful,,
|
||||
92,Slime Hutch,useful,,
|
||||
93,Shipping Bin,progression,,
|
||||
78,Earth Obelisk,progression,WIZARD_BUILDING,
|
||||
79,Water Obelisk,progression,WIZARD_BUILDING,
|
||||
80,Desert Obelisk,progression,WIZARD_BUILDING,
|
||||
81,Island Obelisk,progression,"WIZARD_BUILDING,GINGER_ISLAND",
|
||||
82,Junimo Hut,useful,WIZARD_BUILDING,
|
||||
83,Gold Clock,progression,WIZARD_BUILDING,
|
||||
84,Progressive Coop,progression,BUILDING,
|
||||
85,Progressive Barn,progression,BUILDING,
|
||||
86,Well,useful,BUILDING,
|
||||
87,Silo,progression,BUILDING,
|
||||
88,Mill,progression,BUILDING,
|
||||
89,Progressive Shed,progression,BUILDING,
|
||||
90,Fish Pond,progression,BUILDING,
|
||||
91,Stable,useful,BUILDING,
|
||||
92,Slime Hutch,progression,BUILDING,
|
||||
93,Shipping Bin,progression,BUILDING,
|
||||
94,Beach Bridge,progression,,
|
||||
95,Adventurer's Guild,progression,,
|
||||
95,Adventurer's Guild,progression,DEPRECATED,
|
||||
96,Club Card,progression,,
|
||||
97,Magnifying Glass,progression,,
|
||||
98,Bear's Knowledge,progression,,
|
||||
99,Iridium Snake Milk,progression,,
|
||||
99,Iridium Snake Milk,useful,,
|
||||
100,JotPK: Progressive Boots,progression,ARCADE_MACHINE_BUFFS,
|
||||
101,JotPK: Progressive Gun,progression,ARCADE_MACHINE_BUFFS,
|
||||
102,JotPK: Progressive Ammo,progression,ARCADE_MACHINE_BUFFS,
|
||||
103,JotPK: Extra Life,progression,ARCADE_MACHINE_BUFFS,
|
||||
104,JotPK: Increased Drop Rate,progression,ARCADE_MACHINE_BUFFS,
|
||||
105,Junimo Kart: Extra Life,progression,ARCADE_MACHINE_BUFFS,
|
||||
106,Galaxy Sword,progression,"GALAXY_WEAPONS,WEAPON",
|
||||
107,Galaxy Dagger,progression,"GALAXY_WEAPONS,WEAPON",
|
||||
108,Galaxy Hammer,progression,"GALAXY_WEAPONS,WEAPON",
|
||||
106,Galaxy Sword,filler,"WEAPON,DEPRECATED",
|
||||
107,Galaxy Dagger,filler,"WEAPON,DEPRECATED",
|
||||
108,Galaxy Hammer,filler,"WEAPON,DEPRECATED",
|
||||
109,Movement Speed Bonus,progression,,
|
||||
110,Luck Bonus,progression,,
|
||||
111,Lava Katana,progression,"MINES_FLOOR_110,WEAPON",
|
||||
111,Lava Katana,filler,"WEAPON,DEPRECATED",
|
||||
112,Progressive House,progression,,
|
||||
113,Traveling Merchant: Sunday,progression,TRAVELING_MERCHANT_DAY,
|
||||
114,Traveling Merchant: Monday,progression,TRAVELING_MERCHANT_DAY,
|
||||
@@ -105,8 +103,8 @@ id,name,classification,groups,mod_name
|
||||
117,Traveling Merchant: Thursday,progression,TRAVELING_MERCHANT_DAY,
|
||||
118,Traveling Merchant: Friday,progression,TRAVELING_MERCHANT_DAY,
|
||||
119,Traveling Merchant: Saturday,progression,TRAVELING_MERCHANT_DAY,
|
||||
120,Traveling Merchant Stock Size,progression,,
|
||||
121,Traveling Merchant Discount,progression,,
|
||||
120,Traveling Merchant Stock Size,useful,,
|
||||
121,Traveling Merchant Discount,useful,,
|
||||
122,Return Scepter,useful,,
|
||||
123,Progressive Season,progression,,
|
||||
124,Spring,progression,SEASON,
|
||||
@@ -223,7 +221,7 @@ id,name,classification,groups,mod_name
|
||||
235,Quality Bobber Recipe,progression,SPECIAL_ORDER_BOARD,
|
||||
236,Mini-Obelisk Recipe,progression,SPECIAL_ORDER_BOARD,
|
||||
237,Monster Musk Recipe,progression,SPECIAL_ORDER_BOARD,
|
||||
239,Sewing Machine,progression,"RESOURCE_PACK_USEFUL,SPECIAL_ORDER_BOARD",
|
||||
239,Sewing Machine,useful,"RESOURCE_PACK_USEFUL,SPECIAL_ORDER_BOARD",
|
||||
240,Coffee Maker,progression,"RESOURCE_PACK_USEFUL,SPECIAL_ORDER_BOARD",
|
||||
241,Mini-Fridge,useful,"RESOURCE_PACK_USEFUL,SPECIAL_ORDER_BOARD",
|
||||
242,Mini-Shipping Bin,progression,"RESOURCE_PACK_USEFUL,SPECIAL_ORDER_BOARD",
|
||||
@@ -245,7 +243,7 @@ id,name,classification,groups,mod_name
|
||||
258,Banana Sapling,progression,"GINGER_ISLAND,RESOURCE_PACK,RESOURCE_PACK_USEFUL,CROPSANITY",
|
||||
259,Mango Sapling,progression,"GINGER_ISLAND,RESOURCE_PACK,RESOURCE_PACK_USEFUL,CROPSANITY",
|
||||
260,Boat Repair,progression,GINGER_ISLAND,
|
||||
261,Open Professor Snail Cave,progression,"GINGER_ISLAND",
|
||||
261,Open Professor Snail Cave,progression,GINGER_ISLAND,
|
||||
262,Island North Turtle,progression,"GINGER_ISLAND,WALNUT_PURCHASE",
|
||||
263,Island West Turtle,progression,"GINGER_ISLAND,WALNUT_PURCHASE",
|
||||
264,Island Farmhouse,progression,"GINGER_ISLAND,WALNUT_PURCHASE",
|
||||
@@ -254,42 +252,218 @@ id,name,classification,groups,mod_name
|
||||
267,Dig Site Bridge,progression,"GINGER_ISLAND,WALNUT_PURCHASE",
|
||||
268,Island Trader,progression,"GINGER_ISLAND,WALNUT_PURCHASE",
|
||||
269,Volcano Bridge,progression,"GINGER_ISLAND,WALNUT_PURCHASE",
|
||||
270,Volcano Exit Shortcut,progression,"GINGER_ISLAND,WALNUT_PURCHASE",
|
||||
270,Volcano Exit Shortcut,useful,"GINGER_ISLAND,WALNUT_PURCHASE",
|
||||
271,Island Resort,progression,"GINGER_ISLAND,WALNUT_PURCHASE",
|
||||
272,Parrot Express,progression,"GINGER_ISLAND,WALNUT_PURCHASE",
|
||||
273,Qi Walnut Room,progression,"GINGER_ISLAND,WALNUT_PURCHASE",
|
||||
274,Pineapple Seeds,progression,"GINGER_ISLAND,CROPSANITY",
|
||||
275,Taro Tuber,progression,"GINGER_ISLAND,CROPSANITY",
|
||||
276,Weather Report,useful,"TV_CHANNEL",
|
||||
277,Fortune Teller,useful,"TV_CHANNEL",
|
||||
278,Livin' Off The Land,useful,"TV_CHANNEL",
|
||||
279,The Queen of Sauce,progression,"TV_CHANNEL",
|
||||
280,Fishing Information Broadcasting Service,useful,"TV_CHANNEL",
|
||||
281,Sinister Signal,useful,"TV_CHANNEL",
|
||||
276,Weather Report,useful,TV_CHANNEL,
|
||||
277,Fortune Teller,useful,TV_CHANNEL,
|
||||
278,Livin' Off The Land,useful,TV_CHANNEL,
|
||||
279,The Queen of Sauce,progression,TV_CHANNEL,
|
||||
280,Fishing Information Broadcasting Service,useful,TV_CHANNEL,
|
||||
281,Sinister Signal,filler,TV_CHANNEL,
|
||||
282,Dark Talisman,progression,,
|
||||
283,Ostrich Incubator Recipe,progression,"GINGER_ISLAND",
|
||||
284,Cute Baby,progression,"BABY",
|
||||
285,Ugly Baby,progression,"BABY",
|
||||
286,Deluxe Scarecrow Recipe,progression,"FESTIVAL,RARECROW",
|
||||
287,Treehouse,progression,"GINGER_ISLAND",
|
||||
283,Ostrich Incubator Recipe,progression,GINGER_ISLAND,
|
||||
284,Cute Baby,progression,BABY,
|
||||
285,Ugly Baby,progression,BABY,
|
||||
286,Deluxe Scarecrow Recipe,progression,RARECROW,
|
||||
287,Treehouse,progression,GINGER_ISLAND,
|
||||
288,Coffee Bean,progression,CROPSANITY,
|
||||
4001,Burnt,trap,TRAP,
|
||||
4002,Darkness,trap,TRAP,
|
||||
4003,Frozen,trap,TRAP,
|
||||
4004,Jinxed,trap,TRAP,
|
||||
4005,Nauseated,trap,TRAP,
|
||||
4006,Slimed,trap,TRAP,
|
||||
4007,Weakness,trap,TRAP,
|
||||
4008,Taxes,trap,TRAP,
|
||||
4009,Random Teleport,trap,TRAP,
|
||||
4010,The Crows,trap,TRAP,
|
||||
4011,Monsters,trap,TRAP,
|
||||
4012,Entrance Reshuffle,trap,"TRAP,DEPRECATED",
|
||||
4013,Debris,trap,TRAP,
|
||||
4014,Shuffle,trap,TRAP,
|
||||
4015,Temporary Winter,trap,"TRAP,DEPRECATED",
|
||||
4016,Pariah,trap,TRAP,
|
||||
4017,Drought,trap,TRAP,
|
||||
289,Progressive Weapon,progression,"WEAPON,WEAPON_GENERIC",
|
||||
290,Progressive Sword,progression,"WEAPON,WEAPON_SWORD",
|
||||
291,Progressive Club,progression,"WEAPON,WEAPON_CLUB",
|
||||
292,Progressive Dagger,progression,"WEAPON,WEAPON_DAGGER",
|
||||
293,Progressive Slingshot,progression,"WEAPON,WEAPON_SLINGSHOT",
|
||||
294,Progressive Footwear,useful,FOOTWEAR,
|
||||
295,Small Glow Ring,filler,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
296,Glow Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
297,Small Magnet Ring,filler,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
298,Magnet Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
299,Slime Charmer Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
300,Warrior Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
301,Vampire Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
302,Savage Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
303,Ring of Yoba,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
304,Sturdy Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
305,Burglar's Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
306,Iridium Band,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
307,Jukebox Ring,filler,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
308,Amethyst Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
309,Topaz Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
310,Aquamarine Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
311,Jade Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
312,Emerald Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
313,Ruby Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
314,Wedding Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
315,Crabshell Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
316,Napalm Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
317,Thorns Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
318,Lucky Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
319,Hot Java Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
320,Protection Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
321,Soul Sapper Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
322,Phoenix Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
323,Immunity Band,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
324,Glowstone Ring,useful,"RING,RESOURCE_PACK,MAXIMUM_ONE",
|
||||
325,Fairy Dust Recipe,progression,,
|
||||
326,Heavy Tapper Recipe,progression,"QI_CRAFTING_RECIPE,GINGER_ISLAND",
|
||||
327,Hyper Speed-Gro Recipe,progression,"QI_CRAFTING_RECIPE,GINGER_ISLAND",
|
||||
328,Deluxe Fertilizer Recipe,progression,QI_CRAFTING_RECIPE,
|
||||
329,Hopper Recipe,progression,"QI_CRAFTING_RECIPE,GINGER_ISLAND",
|
||||
330,Magic Bait Recipe,progression,"QI_CRAFTING_RECIPE,GINGER_ISLAND",
|
||||
331,Jack-O-Lantern Recipe,progression,FESTIVAL,
|
||||
333,Tub o' Flowers Recipe,progression,FESTIVAL,
|
||||
335,Moonlight Jellies Banner,filler,FESTIVAL,
|
||||
336,Starport Decal,filler,FESTIVAL,
|
||||
337,Golden Egg,progression,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
340,Algae Soup Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
341,Artichoke Dip Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
342,Autumn's Bounty Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
343,Baked Fish Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
344,Banana Pudding Recipe,progression,"CHEFSANITY,GINGER_ISLAND,CHEFSANITY_PURCHASE",
|
||||
345,Bean Hotpot Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
346,Blackberry Cobbler Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
347,Blueberry Tart Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
348,Bread Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS,CHEFSANITY_FRIENDSHIP,CHEFSANITY_PURCHASE",
|
||||
349,Bruschetta Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
350,Carp Surprise Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
351,Cheese Cauliflower Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
352,Chocolate Cake Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
353,Chowder Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
354,Coleslaw Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
355,Complete Breakfast Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
356,Cookies Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
357,Crab Cakes Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
358,Cranberry Candy Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
359,Cranberry Sauce Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
360,Crispy Bass Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
361,Dish O' The Sea Recipe,progression,"CHEFSANITY,CHEFSANITY_SKILL",
|
||||
362,Eggplant Parmesan Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
363,Escargot Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
364,Farmer's Lunch Recipe,progression,"CHEFSANITY,CHEFSANITY_SKILL",
|
||||
365,Fiddlehead Risotto Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
366,Fish Stew Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
367,Fish Taco Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
368,Fried Calamari Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
369,Fried Eel Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
370,Fried Egg Recipe,progression,CHEFSANITY_STARTER,
|
||||
371,Fried Mushroom Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
372,Fruit Salad Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
373,Ginger Ale Recipe,progression,"CHEFSANITY,GINGER_ISLAND,CHEFSANITY_PURCHASE",
|
||||
374,Glazed Yams Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
375,Hashbrowns Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS,CHEFSANITY_PURCHASE",
|
||||
376,Ice Cream Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
377,Lobster Bisque Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS,CHEFSANITY_FRIENDSHIP",
|
||||
378,Lucky Lunch Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
379,Maki Roll Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS,CHEFSANITY_PURCHASE",
|
||||
380,Mango Sticky Rice Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP,GINGER_ISLAND",
|
||||
381,Maple Bar Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
382,Miner's Treat Recipe,progression,"CHEFSANITY,CHEFSANITY_SKILL",
|
||||
383,Omelet Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS,CHEFSANITY_PURCHASE",
|
||||
384,Pale Broth Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
385,Pancakes Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS,CHEFSANITY_PURCHASE",
|
||||
386,Parsnip Soup Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
387,Pepper Poppers Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
388,Pink Cake Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
389,Pizza Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS,CHEFSANITY_PURCHASE",
|
||||
390,Plum Pudding Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
391,Poi Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP,GINGER_ISLAND",
|
||||
392,Poppyseed Muffin Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
393,Pumpkin Pie Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
394,Pumpkin Soup Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
395,Radish Salad Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
396,Red Plate Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
397,Rhubarb Pie Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
398,Rice Pudding Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
399,Roasted Hazelnuts Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
400,Roots Platter Recipe,progression,"CHEFSANITY,CHEFSANITY_SKILL",
|
||||
401,Salad Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
402,Salmon Dinner Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
403,Sashimi Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
404,Seafoam Pudding Recipe,progression,"CHEFSANITY,CHEFSANITY_SKILL",
|
||||
405,Shrimp Cocktail Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
406,Spaghetti Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
407,Spicy Eel Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
408,Squid Ink Ravioli Recipe,progression,"CHEFSANITY,CHEFSANITY_SKILL",
|
||||
409,Stir Fry Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
410,Strange Bun Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
411,Stuffing Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
412,Super Meal Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
413,Survival Burger Recipe,progression,"CHEFSANITY,CHEFSANITY_SKILL",
|
||||
414,Tom Kha Soup Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
415,Tortilla Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS,CHEFSANITY_PURCHASE",
|
||||
416,Triple Shot Espresso Recipe,progression,"CHEFSANITY,CHEFSANITY_PURCHASE",
|
||||
417,Tropical Curry Recipe,progression,"CHEFSANITY,GINGER_ISLAND,CHEFSANITY_PURCHASE",
|
||||
418,Trout Soup Recipe,progression,"CHEFSANITY,CHEFSANITY_QOS",
|
||||
419,Vegetable Medley Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",
|
||||
425,Gate Recipe,progression,CRAFTSANITY,
|
||||
426,Wood Fence Recipe,progression,CRAFTSANITY,
|
||||
427,Deluxe Retaining Soil Recipe,progression,"CRAFTSANITY,GINGER_ISLAND",
|
||||
428,Grass Starter Recipe,progression,CRAFTSANITY,
|
||||
429,Wood Floor Recipe,progression,CRAFTSANITY,
|
||||
430,Rustic Plank Floor Recipe,progression,CRAFTSANITY,
|
||||
431,Straw Floor Recipe,progression,CRAFTSANITY,
|
||||
432,Weathered Floor Recipe,progression,CRAFTSANITY,
|
||||
433,Crystal Floor Recipe,progression,CRAFTSANITY,
|
||||
434,Stone Floor Recipe,progression,CRAFTSANITY,
|
||||
435,Stone Walkway Floor Recipe,progression,CRAFTSANITY,
|
||||
436,Brick Floor Recipe,progression,CRAFTSANITY,
|
||||
437,Wood Path Recipe,progression,CRAFTSANITY,
|
||||
438,Gravel Path Recipe,progression,CRAFTSANITY,
|
||||
439,Cobblestone Path Recipe,progression,CRAFTSANITY,
|
||||
440,Stepping Stone Path Recipe,progression,CRAFTSANITY,
|
||||
441,Crystal Path Recipe,progression,CRAFTSANITY,
|
||||
442,Wedding Ring Recipe,progression,CRAFTSANITY,
|
||||
443,Warp Totem: Desert Recipe,progression,CRAFTSANITY,
|
||||
444,Warp Totem: Island Recipe,progression,"CRAFTSANITY,GINGER_ISLAND",
|
||||
445,Torch Recipe,progression,CRAFTSANITY,
|
||||
446,Campfire Recipe,progression,CRAFTSANITY,
|
||||
447,Wooden Brazier Recipe,progression,CRAFTSANITY,
|
||||
448,Stone Brazier Recipe,progression,CRAFTSANITY,
|
||||
449,Gold Brazier Recipe,progression,CRAFTSANITY,
|
||||
450,Carved Brazier Recipe,progression,CRAFTSANITY,
|
||||
451,Stump Brazier Recipe,progression,CRAFTSANITY,
|
||||
452,Barrel Brazier Recipe,progression,CRAFTSANITY,
|
||||
453,Skull Brazier Recipe,progression,CRAFTSANITY,
|
||||
454,Marble Brazier Recipe,progression,CRAFTSANITY,
|
||||
455,Wood Lamp-post Recipe,progression,CRAFTSANITY,
|
||||
456,Iron Lamp-post Recipe,progression,CRAFTSANITY,
|
||||
457,Furnace Recipe,progression,CRAFTSANITY,
|
||||
458,Wicked Statue Recipe,progression,CRAFTSANITY,
|
||||
459,Chest Recipe,progression,CRAFTSANITY,
|
||||
460,Wood Sign Recipe,progression,CRAFTSANITY,
|
||||
461,Stone Sign Recipe,progression,CRAFTSANITY,
|
||||
469,Railroad Boulder Removed,progression,,
|
||||
470,Fruit Bats,progression,,
|
||||
471,Mushroom Boxes,progression,,
|
||||
475,The Gateway Gazette,progression,TV_CHANNEL,
|
||||
4001,Burnt Trap,trap,TRAP,
|
||||
4002,Darkness Trap,trap,TRAP,
|
||||
4003,Frozen Trap,trap,TRAP,
|
||||
4004,Jinxed Trap,trap,TRAP,
|
||||
4005,Nauseated Trap,trap,TRAP,
|
||||
4006,Slimed Trap,trap,TRAP,
|
||||
4007,Weakness Trap,trap,TRAP,
|
||||
4008,Taxes Trap,trap,TRAP,
|
||||
4009,Random Teleport Trap,trap,TRAP,
|
||||
4010,The Crows Trap,trap,TRAP,
|
||||
4011,Monsters Trap,trap,TRAP,
|
||||
4012,Entrance Reshuffle Trap,trap,"TRAP,DEPRECATED",
|
||||
4013,Debris Trap,trap,TRAP,
|
||||
4014,Shuffle Trap,trap,TRAP,
|
||||
4015,Temporary Winter Trap,trap,"TRAP,DEPRECATED",
|
||||
4016,Pariah Trap,trap,TRAP,
|
||||
4017,Drought Trap,trap,TRAP,
|
||||
4018,Time Flies Trap,trap,TRAP,
|
||||
4019,Babies Trap,trap,TRAP,
|
||||
4020,Meow Trap,trap,TRAP,
|
||||
4021,Bark Trap,trap,TRAP,
|
||||
4022,Depression Trap,trap,"TRAP,DEPRECATED",
|
||||
4023,Benjamin Budton Trap,trap,TRAP,
|
||||
4024,Inflation Trap,trap,TRAP,
|
||||
4025,Bomb Trap,trap,TRAP,
|
||||
5000,Resource Pack: 500 Money,useful,"BASE_RESOURCE,RESOURCE_PACK",
|
||||
5001,Resource Pack: 1000 Money,useful,"BASE_RESOURCE,RESOURCE_PACK",
|
||||
5002,Resource Pack: 1500 Money,useful,"BASE_RESOURCE,RESOURCE_PACK",
|
||||
@@ -336,12 +510,12 @@ id,name,classification,groups,mod_name
|
||||
5043,Resource Pack: 7 Warp Totem: Farm,filler,"DEPRECATED,RESOURCE_PACK,WARP_TOTEM",
|
||||
5044,Resource Pack: 9 Warp Totem: Farm,filler,"DEPRECATED,RESOURCE_PACK,WARP_TOTEM",
|
||||
5045,Resource Pack: 10 Warp Totem: Farm,filler,"DEPRECATED,RESOURCE_PACK,WARP_TOTEM",
|
||||
5046,Resource Pack: 1 Warp Totem: Island,filler,"DEPRECATED,RESOURCE_PACK,WARP_TOTEM",
|
||||
5047,Resource Pack: 3 Warp Totem: Island,filler,"DEPRECATED,RESOURCE_PACK,WARP_TOTEM",
|
||||
5048,Resource Pack: 5 Warp Totem: Island,filler,"RESOURCE_PACK,WARP_TOTEM",
|
||||
5049,Resource Pack: 7 Warp Totem: Island,filler,"DEPRECATED,RESOURCE_PACK,WARP_TOTEM",
|
||||
5050,Resource Pack: 9 Warp Totem: Island,filler,"DEPRECATED,RESOURCE_PACK,WARP_TOTEM",
|
||||
5051,Resource Pack: 10 Warp Totem: Island,filler,"DEPRECATED,RESOURCE_PACK,WARP_TOTEM",
|
||||
5046,Resource Pack: 1 Warp Totem: Island,filler,"DEPRECATED,RESOURCE_PACK,WARP_TOTEM,GINGER_ISLAND",
|
||||
5047,Resource Pack: 3 Warp Totem: Island,filler,"DEPRECATED,RESOURCE_PACK,WARP_TOTEM,GINGER_ISLAND",
|
||||
5048,Resource Pack: 5 Warp Totem: Island,filler,"RESOURCE_PACK,WARP_TOTEM,GINGER_ISLAND",
|
||||
5049,Resource Pack: 7 Warp Totem: Island,filler,"DEPRECATED,RESOURCE_PACK,WARP_TOTEM,GINGER_ISLAND",
|
||||
5050,Resource Pack: 9 Warp Totem: Island,filler,"DEPRECATED,RESOURCE_PACK,WARP_TOTEM,GINGER_ISLAND",
|
||||
5051,Resource Pack: 10 Warp Totem: Island,filler,"DEPRECATED,RESOURCE_PACK,WARP_TOTEM,GINGER_ISLAND",
|
||||
5052,Resource Pack: 1 Warp Totem: Mountains,filler,"DEPRECATED,RESOURCE_PACK,WARP_TOTEM",
|
||||
5053,Resource Pack: 3 Warp Totem: Mountains,filler,"DEPRECATED,RESOURCE_PACK,WARP_TOTEM",
|
||||
5054,Resource Pack: 5 Warp Totem: Mountains,filler,"RESOURCE_PACK,WARP_TOTEM",
|
||||
@@ -492,7 +666,7 @@ id,name,classification,groups,mod_name
|
||||
5199,Friendship Bonus (2 <3),useful,"FRIENDSHIP_PACK,COMMUNITY_REWARD",
|
||||
5200,Friendship Bonus (3 <3),useful,"DEPRECATED,FRIENDSHIP_PACK,RESOURCE_PACK",
|
||||
5201,Friendship Bonus (4 <3),useful,"DEPRECATED,FRIENDSHIP_PACK,RESOURCE_PACK",
|
||||
5202,30 Qi Gems,useful,"GINGER_ISLAND,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5202,15 Qi Gems,progression,"GINGER_ISLAND,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5203,Solar Panel,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5204,Geode Crusher,filler,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5205,Farm Computer,filler,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
@@ -507,36 +681,29 @@ id,name,classification,groups,mod_name
|
||||
5214,Quality Sprinkler,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5215,Iridium Sprinkler,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5216,Scarecrow,filler,RESOURCE_PACK,
|
||||
5217,Deluxe Scarecrow,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5217,Deluxe Scarecrow,useful,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5218,Furnace,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5219,Charcoal Kiln,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5220,Lightning Rod,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5221,Resource Pack: 5000 Money,useful,"BASE_RESOURCE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5222,Resource Pack: 10000 Money,useful,"BASE_RESOURCE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5223,Junimo Chest,filler,"EXACTLY_TWO,RESOURCE_PACK",
|
||||
5224,Horse Flute,filler,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5225,Pierre's Missing Stocklist,filler,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5224,Horse Flute,useful,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5225,Pierre's Missing Stocklist,useful,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5226,Hopper,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5227,Enricher,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5228,Pressure Nozzle,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5229,Deconstructor,filler,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5230,Key To The Town,filler,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5230,Key To The Town,useful,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5231,Galaxy Soul,filler,"GINGER_ISLAND,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5232,Mushroom Tree Seed,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5233,Resource Pack: 20 Magic Bait,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5234,Resource Pack: 10 Qi Seasoning,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5235,Mr. Qi's Hat,filler,"MAXIMUM_ONE,RESOURCE_PACK",
|
||||
5236,Aquatic Sanctuary,filler,RESOURCE_PACK,
|
||||
5237,Heavy Tapper Recipe,filler,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5238,Hyper Speed-Gro Recipe,filler,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5239,Deluxe Fertilizer Recipe,filler,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5240,Hopper Recipe,filler,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5241,Magic Bait Recipe,filler,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5242,Exotic Double Bed,filler,RESOURCE_PACK,
|
||||
5243,Resource Pack: 2 Qi Gem,filler,"GINGER_ISLAND,RESOURCE_PACK",
|
||||
5244,Golden Egg,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5243,Resource Pack: 2 Qi Gem,filler,"GINGER_ISLAND,RESOURCE_PACK,DEPRECATED",
|
||||
5245,Golden Walnut,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL,GINGER_ISLAND",
|
||||
5246,Fairy Dust Recipe,useful,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5247,Fairy Dust,useful,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5248,Seed Maker,useful,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5249,Keg,useful,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
@@ -552,10 +719,13 @@ id,name,classification,groups,mod_name
|
||||
5259,Worm Bin,useful,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5260,Tapper,useful,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5261,Heavy Tapper,useful,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5262,Slime Incubator,useful,"RESOURCE_PACK",
|
||||
5263,Slime Egg-Press,useful,"RESOURCE_PACK",
|
||||
5262,Slime Incubator,useful,RESOURCE_PACK,
|
||||
5263,Slime Egg-Press,useful,RESOURCE_PACK,
|
||||
5264,Crystalarium,useful,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5265,Ostrich Incubator,useful,"MAXIMUM_ONE,RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5266,Resource Pack: 5 Staircase,filler,"RESOURCE_PACK",
|
||||
5267,Auto-Petter,useful,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
5268,Auto-Grabber,useful,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",
|
||||
10001,Luck Level,progression,SKILL_LEVEL_UP,Luck Skill
|
||||
10002,Magic Level,progression,SKILL_LEVEL_UP,Magic
|
||||
10003,Socializing Level,progression,SKILL_LEVEL_UP,Socializing Skill
|
||||
@@ -569,14 +739,14 @@ id,name,classification,groups,mod_name
|
||||
10011,Spell: Water,progression,MAGIC_SPELL,Magic
|
||||
10012,Spell: Blink,progression,MAGIC_SPELL,Magic
|
||||
10013,Spell: Evac,useful,MAGIC_SPELL,Magic
|
||||
10014,Spell: Haste,filler,MAGIC_SPELL,Magic
|
||||
10014,Spell: Haste,useful,MAGIC_SPELL,Magic
|
||||
10015,Spell: Heal,progression,MAGIC_SPELL,Magic
|
||||
10016,Spell: Buff,useful,MAGIC_SPELL,Magic
|
||||
10017,Spell: Shockwave,progression,MAGIC_SPELL,Magic
|
||||
10018,Spell: Fireball,progression,MAGIC_SPELL,Magic
|
||||
10019,Spell: Frostbite,progression,MAGIC_SPELL,Magic
|
||||
10019,Spell: Frostbolt,progression,MAGIC_SPELL,Magic
|
||||
10020,Spell: Teleport,progression,MAGIC_SPELL,Magic
|
||||
10021,Spell: Lantern,filler,MAGIC_SPELL,Magic
|
||||
10021,Spell: Lantern,useful,MAGIC_SPELL,Magic
|
||||
10022,Spell: Tendrils,progression,MAGIC_SPELL,Magic
|
||||
10023,Spell: Photosynthesis,useful,MAGIC_SPELL,Magic
|
||||
10024,Spell: Descend,progression,MAGIC_SPELL,Magic
|
||||
@@ -585,6 +755,9 @@ id,name,classification,groups,mod_name
|
||||
10027,Spell: Lucksteal,useful,MAGIC_SPELL,Magic
|
||||
10028,Spell: Spirit,progression,MAGIC_SPELL,Magic
|
||||
10029,Spell: Rewind,useful,MAGIC_SPELL,Magic
|
||||
10030,Pendant of Community,progression,,DeepWoods
|
||||
10031,Pendant of Elders,progression,,DeepWoods
|
||||
10032,Pendant of Depths,progression,,DeepWoods
|
||||
10101,Juna <3,progression,FRIENDSANITY,Juna - Roommate NPC
|
||||
10102,Jasper <3,progression,FRIENDSANITY,Professor Jasper Thomas
|
||||
10103,Alec <3,progression,FRIENDSANITY,Alec Revisited
|
||||
@@ -596,5 +769,91 @@ id,name,classification,groups,mod_name
|
||||
10109,Delores <3,progression,FRIENDSANITY,Delores - Custom NPC
|
||||
10110,Ayeisha <3,progression,FRIENDSANITY,Ayeisha - The Postal Worker (Custom NPC)
|
||||
10111,Riley <3,progression,FRIENDSANITY,Custom NPC - Riley
|
||||
10112,Claire <3,progression,FRIENDSANITY,Stardew Valley Expanded
|
||||
10113,Lance <3,progression,"FRIENDSANITY,GINGER_ISLAND",Stardew Valley Expanded
|
||||
10114,Olivia <3,progression,FRIENDSANITY,Stardew Valley Expanded
|
||||
10115,Sophia <3,progression,FRIENDSANITY,Stardew Valley Expanded
|
||||
10116,Victor <3,progression,FRIENDSANITY,Stardew Valley Expanded
|
||||
10117,Andy <3,progression,FRIENDSANITY,Stardew Valley Expanded
|
||||
10118,Apples <3,progression,FRIENDSANITY,Stardew Valley Expanded
|
||||
10119,Gunther <3,progression,FRIENDSANITY,Stardew Valley Expanded
|
||||
10120,Martin <3,progression,FRIENDSANITY,Stardew Valley Expanded
|
||||
10121,Marlon <3,progression,FRIENDSANITY,Stardew Valley Expanded
|
||||
10122,Morgan <3,progression,FRIENDSANITY,Stardew Valley Expanded
|
||||
10123,Scarlett <3,progression,FRIENDSANITY,Stardew Valley Expanded
|
||||
10124,Susan <3,progression,FRIENDSANITY,Stardew Valley Expanded
|
||||
10125,Morris <3,progression,FRIENDSANITY,Stardew Valley Expanded
|
||||
10126,Alecto <3,progression,FRIENDSANITY,Alecto the Witch
|
||||
10127,Zic <3,progression,FRIENDSANITY,Distant Lands - Witch Swamp Overhaul
|
||||
10128,Lacey <3,progression,FRIENDSANITY,Hat Mouse Lacey
|
||||
10129,Gregory <3,progression,FRIENDSANITY,Boarding House and Bus Stop Extension
|
||||
10130,Sheila <3,progression,FRIENDSANITY,Boarding House and Bus Stop Extension
|
||||
10131,Joel <3,progression,FRIENDSANITY,Boarding House and Bus Stop Extension
|
||||
10301,Progressive Woods Obelisk Sigils,progression,,DeepWoods
|
||||
10302,Progressive Skull Cavern Elevator,progression,,Skull Cavern Elevator
|
||||
10401,Baked Berry Oatmeal Recipe,progression,"CHEFSANITY,CHEFSANITY_PURCHASE",Stardew Valley Expanded
|
||||
10402,Big Bark Burger Recipe,progression,"CHEFSANITY,CHEFSANITY_PURCHASE",Stardew Valley Expanded
|
||||
10403,Flower Cookie Recipe,progression,"CHEFSANITY,CHEFSANITY_PURCHASE",Stardew Valley Expanded
|
||||
10404,Frog Legs Recipe,progression,"CHEFSANITY,CHEFSANITY_PURCHASE",Stardew Valley Expanded
|
||||
10405,Glazed Butterfish Recipe,progression,"CHEFSANITY,CHEFSANITY_PURCHASE",Stardew Valley Expanded
|
||||
10406,Mixed Berry Pie Recipe,progression,"CHEFSANITY,CHEFSANITY_PURCHASE",Stardew Valley Expanded
|
||||
10407,Mushroom Berry Rice Recipe,progression,"CHEFSANITY,CHEFSANITY_PURCHASE",Stardew Valley Expanded
|
||||
10408,Seaweed Salad Recipe,progression,"CHEFSANITY,CHEFSANITY_PURCHASE",Stardew Valley Expanded
|
||||
10409,Void Delight Recipe,progression,"CHEFSANITY,CHEFSANITY_PURCHASE",Stardew Valley Expanded
|
||||
10410,Void Salmon Sushi Recipe,progression,"CHEFSANITY,CHEFSANITY_PURCHASE",Stardew Valley Expanded
|
||||
10411,Mushroom Kebab Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",Distant Lands - Witch Swamp Overhaul
|
||||
10412,Crayfish Soup Recipe,progression,,Distant Lands - Witch Swamp Overhaul
|
||||
10413,Pemmican Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",Distant Lands - Witch Swamp Overhaul
|
||||
10414,Void Mint Tea Recipe,progression,"CHEFSANITY,CHEFSANITY_FRIENDSHIP",Distant Lands - Witch Swamp Overhaul
|
||||
10415,Ginger Tincture Recipe,progression,GINGER_ISLAND,Distant Lands - Witch Swamp Overhaul
|
||||
10416,Special Pumpkin Soup Recipe,progression,,Boarding House and Bus Stop Extension
|
||||
10450,Void Mint Seeds,progression,DEPRECATED,Distant Lands - Witch Swamp Overhaul
|
||||
10451,Vile Ancient Fruit Seeds,progression,DEPRECATED,Distant Lands - Witch Swamp Overhaul
|
||||
10501,Marlon's Boat Paddle,progression,GINGER_ISLAND,Stardew Valley Expanded
|
||||
10502,Diamond Wand,filler,"WEAPON,DEPRECATED",Stardew Valley Expanded
|
||||
10503,Iridium Bomb,progression,,Stardew Valley Expanded
|
||||
10504,Void Spirit Peace Agreement,useful,GINGER_ISLAND,Stardew Valley Expanded
|
||||
10505,Kittyfish Spell,progression,,Stardew Valley Expanded
|
||||
10506,Nexus: Adventurer's Guild Runes,progression,MOD_WARP,Stardew Valley Expanded
|
||||
10507,Nexus: Junimo Woods Runes,progression,MOD_WARP,Stardew Valley Expanded
|
||||
10508,Nexus: Aurora Vineyard Runes,progression,MOD_WARP,Stardew Valley Expanded
|
||||
10509,Nexus: Sprite Spring Runes,progression,MOD_WARP,Stardew Valley Expanded
|
||||
10510,Nexus: Outpost Runes,progression,MOD_WARP,Stardew Valley Expanded
|
||||
10511,Nexus: Farm Runes,progression,MOD_WARP,Stardew Valley Expanded
|
||||
10512,Nexus: Wizard Runes,progression,MOD_WARP,Stardew Valley Expanded
|
||||
10513,Fable Reef Portal,progression,GINGER_ISLAND,Stardew Valley Expanded
|
||||
10514,Tempered Galaxy Sword,filler,"WEAPON,DEPRECATED",Stardew Valley Expanded
|
||||
10515,Tempered Galaxy Dagger,filler,"WEAPON,DEPRECATED",Stardew Valley Expanded
|
||||
10516,Tempered Galaxy Hammer,filler,"WEAPON,DEPRECATED",Stardew Valley Expanded
|
||||
10517,Grandpa's Shed,progression,,Stardew Valley Expanded
|
||||
10518,Aurora Vineyard Tablet,progression,,Stardew Valley Expanded
|
||||
10519,Scarlett's Job Offer,progression,,Stardew Valley Expanded
|
||||
10520,Morgan's Schooling,progression,,Stardew Valley Expanded
|
||||
10601,Magic Elixir Recipe,progression,"CHEFSANITY,CHEFSANITY_PURCHASE",Magic
|
||||
10602,Travel Core Recipe,progression,CRAFTSANITY,Magic
|
||||
10603,Haste Elixir Recipe,progression,CRAFTSANITY,Stardew Valley Expanded
|
||||
10604,Hero Elixir Recipe,progression,CRAFTSANITY,Stardew Valley Expanded
|
||||
10605,Armor Elixir Recipe,progression,CRAFTSANITY,Stardew Valley Expanded
|
||||
10606,Neanderthal Skeleton Recipe,progression,CRAFTSANITY,Boarding House and Bus Stop Extension
|
||||
10607,Pterodactyl Skeleton L Recipe,progression,CRAFTSANITY,Boarding House and Bus Stop Extension
|
||||
10608,Pterodactyl Skeleton M Recipe,progression,CRAFTSANITY,Boarding House and Bus Stop Extension
|
||||
10609,Pterodactyl Skeleton R Recipe,progression,CRAFTSANITY,Boarding House and Bus Stop Extension
|
||||
10610,T-Rex Skeleton L Recipe,progression,CRAFTSANITY,Boarding House and Bus Stop Extension
|
||||
10611,T-Rex Skeleton M Recipe,progression,CRAFTSANITY,Boarding House and Bus Stop Extension
|
||||
10612,T-Rex Skeleton R Recipe,progression,CRAFTSANITY,Boarding House and Bus Stop Extension
|
||||
10701,Resource Pack: 3 Magic Elixir,filler,RESOURCE_PACK,Magic
|
||||
10702,Resource Pack: 3 Travel Core,filler,RESOURCE_PACK,Magic
|
||||
10703,Preservation Chamber,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",Archaeology
|
||||
10704,Hardwood Preservation Chamber,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",Archaeology
|
||||
10705,Resource Pack: 3 Water Shifter,filler,RESOURCE_PACK,Archaeology
|
||||
10706,Resource Pack: 5 Hardwood Display,filler,RESOURCE_PACK,Archaeology
|
||||
10707,Resource Pack: 5 Wooden Display,filler,RESOURCE_PACK,Archaeology
|
||||
10708,Grinder,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",Archaeology
|
||||
10709,Ancient Battery Production Station,filler,"RESOURCE_PACK,RESOURCE_PACK_USEFUL",Archaeology
|
||||
10710,Hero Elixir,filler,RESOURCE_PACK,Starde Valley Expanded
|
||||
10711,Aegis Elixir,filler,RESOURCE_PACK,Stardew Valley Expanded
|
||||
10712,Haste Elixir,filler,RESOURCE_PACK,Stardew Valley Expanded
|
||||
10713,Lightning Elixir,filler,RESOURCE_PACK,Stardew Valley Expanded
|
||||
10714,Armor Elixir,filler,RESOURCE_PACK,Stardew Valley Expanded
|
||||
10715,Gravity Elixir,filler,RESOURCE_PACK,Stardew Valley Expanded
|
||||
10716,Barbarian Elixir,filler,RESOURCE_PACK,Stardew Valley Expanded
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,173 @@
|
||||
class Monster:
|
||||
duggy = "Duggy"
|
||||
blue_slime = "Blue Slime"
|
||||
pepper_rex = "Pepper Rex"
|
||||
stone_golem = "Stone Golem"
|
||||
from dataclasses import dataclass
|
||||
from typing import List, Tuple, Dict, Set, Callable
|
||||
|
||||
from ..mods.mod_data import ModNames
|
||||
from ..mods.mod_monster_locations import modded_monsters_locations
|
||||
from ..strings.monster_names import Monster, MonsterCategory
|
||||
from ..strings.performance_names import Performance
|
||||
from ..strings.region_names import Region
|
||||
|
||||
|
||||
frozen_monsters = (Monster.blue_slime,)
|
||||
@dataclass(frozen=True)
|
||||
class StardewMonster:
|
||||
name: str
|
||||
category: str
|
||||
locations: Tuple[str]
|
||||
difficulty: str
|
||||
|
||||
def __repr__(self):
|
||||
return f"{self.name} [{self.category}] (Locations: {self.locations} |" \
|
||||
f" Difficulty: {self.difficulty}) |"
|
||||
|
||||
|
||||
slime_hutch = (Region.slime_hutch,)
|
||||
mines_floor_20 = (Region.mines_floor_20,)
|
||||
mines_floor_60 = (Region.mines_floor_60,)
|
||||
mines_floor_100 = (Region.mines_floor_100,)
|
||||
dangerous_mines_20 = (Region.dangerous_mines_20,)
|
||||
dangerous_mines_60 = (Region.dangerous_mines_60,)
|
||||
dangerous_mines_100 = (Region.dangerous_mines_100,)
|
||||
quarry_mine = (Region.quarry_mine,)
|
||||
mutant_bug_lair = (Region.mutant_bug_lair,)
|
||||
skull_cavern = (Region.skull_cavern_25,)
|
||||
skull_cavern_high = (Region.skull_cavern_75,)
|
||||
skull_cavern_dangerous = (Region.dangerous_skull_cavern,)
|
||||
tiger_slime_grove = (Region.island_west,)
|
||||
volcano = (Region.volcano_floor_5,)
|
||||
volcano_high = (Region.volcano_floor_10,)
|
||||
|
||||
all_monsters: List[StardewMonster] = []
|
||||
monster_modifications_by_mod: Dict[str, Dict[str, Callable[[str, StardewMonster], StardewMonster]]] = {}
|
||||
|
||||
|
||||
def create_monster(name: str, category: str, locations: Tuple[str, ...], difficulty: str) -> StardewMonster:
|
||||
monster = StardewMonster(name, category, locations, difficulty)
|
||||
all_monsters.append(monster)
|
||||
return monster
|
||||
|
||||
|
||||
def update_monster_locations(mod_name: str, monster: StardewMonster):
|
||||
new_locations = modded_monsters_locations[mod_name][monster.name]
|
||||
total_locations = tuple(sorted(set(monster.locations + new_locations)))
|
||||
return StardewMonster(monster.name, monster.category, total_locations, monster.difficulty)
|
||||
|
||||
|
||||
def register_monster_modification(mod_name: str, monster: StardewMonster, modification_function):
|
||||
if mod_name not in monster_modifications_by_mod:
|
||||
monster_modifications_by_mod[mod_name] = {}
|
||||
monster_modifications_by_mod[mod_name][monster.name] = modification_function
|
||||
|
||||
|
||||
green_slime = create_monster(Monster.green_slime, MonsterCategory.slime, mines_floor_20, Performance.basic)
|
||||
blue_slime = create_monster(Monster.blue_slime, MonsterCategory.slime, mines_floor_60, Performance.decent)
|
||||
red_slime = create_monster(Monster.red_slime, MonsterCategory.slime, mines_floor_100, Performance.good)
|
||||
purple_slime = create_monster(Monster.purple_slime, MonsterCategory.slime, skull_cavern, Performance.great)
|
||||
yellow_slime = create_monster(Monster.yellow_slime, MonsterCategory.slime, skull_cavern_high, Performance.galaxy)
|
||||
black_slime = create_monster(Monster.black_slime, MonsterCategory.slime, slime_hutch, Performance.decent)
|
||||
copper_slime = create_monster(Monster.copper_slime, MonsterCategory.slime, quarry_mine, Performance.decent)
|
||||
iron_slime = create_monster(Monster.iron_slime, MonsterCategory.slime, quarry_mine, Performance.good)
|
||||
tiger_slime = create_monster(Monster.tiger_slime, MonsterCategory.slime, tiger_slime_grove, Performance.galaxy)
|
||||
|
||||
shadow_shaman = create_monster(Monster.shadow_shaman, MonsterCategory.void_spirits, mines_floor_100, Performance.good)
|
||||
shadow_shaman_dangerous = create_monster(Monster.shadow_shaman_dangerous, MonsterCategory.void_spirits, dangerous_mines_100, Performance.galaxy)
|
||||
shadow_brute = create_monster(Monster.shadow_brute, MonsterCategory.void_spirits, mines_floor_100, Performance.good)
|
||||
shadow_brute_dangerous = create_monster(Monster.shadow_brute_dangerous, MonsterCategory.void_spirits, dangerous_mines_100, Performance.galaxy)
|
||||
shadow_sniper = create_monster(Monster.shadow_sniper, MonsterCategory.void_spirits, dangerous_mines_100, Performance.galaxy)
|
||||
|
||||
bat = create_monster(Monster.bat, MonsterCategory.bats, mines_floor_20, Performance.basic)
|
||||
bat_dangerous = create_monster(Monster.bat_dangerous, MonsterCategory.bats, dangerous_mines_20, Performance.galaxy)
|
||||
frost_bat = create_monster(Monster.frost_bat, MonsterCategory.bats, mines_floor_60, Performance.decent)
|
||||
frost_bat_dangerous = create_monster(Monster.frost_bat_dangerous, MonsterCategory.bats, dangerous_mines_60, Performance.galaxy)
|
||||
lava_bat = create_monster(Monster.lava_bat, MonsterCategory.bats, mines_floor_100, Performance.good)
|
||||
iridium_bat = create_monster(Monster.iridium_bat, MonsterCategory.bats, skull_cavern_high, Performance.great)
|
||||
|
||||
skeleton = create_monster(Monster.skeleton, MonsterCategory.skeletons, mines_floor_100, Performance.good)
|
||||
skeleton_dangerous = create_monster(Monster.skeleton_dangerous, MonsterCategory.skeletons, dangerous_mines_100, Performance.galaxy)
|
||||
skeleton_mage = create_monster(Monster.skeleton_mage, MonsterCategory.skeletons, dangerous_mines_100, Performance.galaxy)
|
||||
|
||||
bug = create_monster(Monster.bug, MonsterCategory.cave_insects, mines_floor_20, Performance.basic)
|
||||
bug_dangerous = create_monster(Monster.bug_dangerous, MonsterCategory.cave_insects, dangerous_mines_20, Performance.galaxy)
|
||||
cave_fly = create_monster(Monster.cave_fly, MonsterCategory.cave_insects, mines_floor_20, Performance.basic)
|
||||
cave_fly_dangerous = create_monster(Monster.cave_fly_dangerous, MonsterCategory.cave_insects, dangerous_mines_60, Performance.galaxy)
|
||||
grub = create_monster(Monster.grub, MonsterCategory.cave_insects, mines_floor_20, Performance.basic)
|
||||
grub_dangerous = create_monster(Monster.grub_dangerous, MonsterCategory.cave_insects, dangerous_mines_60, Performance.galaxy)
|
||||
mutant_fly = create_monster(Monster.mutant_fly, MonsterCategory.cave_insects, mutant_bug_lair, Performance.good)
|
||||
mutant_grub = create_monster(Monster.mutant_grub, MonsterCategory.cave_insects, mutant_bug_lair, Performance.good)
|
||||
armored_bug = create_monster(Monster.armored_bug, MonsterCategory.cave_insects, skull_cavern, Performance.basic) # Requires 'Bug Killer' enchantment
|
||||
armored_bug_dangerous = create_monster(Monster.armored_bug_dangerous, MonsterCategory.cave_insects, skull_cavern,
|
||||
Performance.good) # Requires 'Bug Killer' enchantment
|
||||
|
||||
duggy = create_monster(Monster.duggy, MonsterCategory.duggies, mines_floor_20, Performance.basic)
|
||||
duggy_dangerous = create_monster(Monster.duggy_dangerous, MonsterCategory.duggies, dangerous_mines_20, Performance.great)
|
||||
magma_duggy = create_monster(Monster.magma_duggy, MonsterCategory.duggies, volcano, Performance.galaxy)
|
||||
|
||||
dust_sprite = create_monster(Monster.dust_sprite, MonsterCategory.dust_sprites, mines_floor_60, Performance.basic)
|
||||
dust_sprite_dangerous = create_monster(Monster.dust_sprite_dangerous, MonsterCategory.dust_sprites, dangerous_mines_60, Performance.great)
|
||||
|
||||
rock_crab = create_monster(Monster.rock_crab, MonsterCategory.rock_crabs, mines_floor_20, Performance.basic)
|
||||
rock_crab_dangerous = create_monster(Monster.rock_crab_dangerous, MonsterCategory.rock_crabs, dangerous_mines_20, Performance.great)
|
||||
lava_crab = create_monster(Monster.lava_crab, MonsterCategory.rock_crabs, mines_floor_100, Performance.good)
|
||||
lava_crab_dangerous = create_monster(Monster.lava_crab_dangerous, MonsterCategory.rock_crabs, dangerous_mines_100, Performance.galaxy)
|
||||
iridium_crab = create_monster(Monster.iridium_crab, MonsterCategory.rock_crabs, skull_cavern, Performance.great)
|
||||
|
||||
mummy = create_monster(Monster.mummy, MonsterCategory.mummies, skull_cavern, Performance.great) # Requires bombs or "Crusader" enchantment
|
||||
mummy_dangerous = create_monster(Monster.mummy_dangerous, MonsterCategory.mummies, skull_cavern_dangerous,
|
||||
Performance.maximum) # Requires bombs or "Crusader" enchantment
|
||||
|
||||
pepper_rex = create_monster(Monster.pepper_rex, MonsterCategory.pepper_rex, skull_cavern, Performance.great)
|
||||
|
||||
serpent = create_monster(Monster.serpent, MonsterCategory.serpents, skull_cavern, Performance.galaxy)
|
||||
royal_serpent = create_monster(Monster.royal_serpent, MonsterCategory.serpents, skull_cavern_dangerous, Performance.maximum)
|
||||
|
||||
magma_sprite = create_monster(Monster.magma_sprite, MonsterCategory.magma_sprites, volcano, Performance.galaxy)
|
||||
magma_sparker = create_monster(Monster.magma_sparker, MonsterCategory.magma_sprites, volcano_high, Performance.galaxy)
|
||||
|
||||
register_monster_modification(ModNames.sve, shadow_brute_dangerous, update_monster_locations)
|
||||
register_monster_modification(ModNames.sve, shadow_sniper, update_monster_locations)
|
||||
register_monster_modification(ModNames.sve, shadow_shaman_dangerous, update_monster_locations)
|
||||
register_monster_modification(ModNames.sve, mummy_dangerous, update_monster_locations)
|
||||
register_monster_modification(ModNames.sve, royal_serpent, update_monster_locations)
|
||||
register_monster_modification(ModNames.sve, skeleton_dangerous, update_monster_locations)
|
||||
register_monster_modification(ModNames.sve, skeleton_mage, update_monster_locations)
|
||||
register_monster_modification(ModNames.sve, dust_sprite_dangerous, update_monster_locations)
|
||||
|
||||
register_monster_modification(ModNames.deepwoods, shadow_brute, update_monster_locations)
|
||||
register_monster_modification(ModNames.deepwoods, cave_fly, update_monster_locations)
|
||||
register_monster_modification(ModNames.deepwoods, green_slime, update_monster_locations)
|
||||
|
||||
register_monster_modification(ModNames.boarding_house, pepper_rex, update_monster_locations)
|
||||
register_monster_modification(ModNames.boarding_house, shadow_brute, update_monster_locations)
|
||||
register_monster_modification(ModNames.boarding_house, iridium_bat, update_monster_locations)
|
||||
register_monster_modification(ModNames.boarding_house, frost_bat, update_monster_locations)
|
||||
register_monster_modification(ModNames.boarding_house, cave_fly, update_monster_locations)
|
||||
register_monster_modification(ModNames.boarding_house, bat, update_monster_locations)
|
||||
register_monster_modification(ModNames.boarding_house, grub, update_monster_locations)
|
||||
register_monster_modification(ModNames.boarding_house, bug, update_monster_locations)
|
||||
|
||||
|
||||
def all_monsters_by_name_given_mods(mods: Set[str]) -> Dict[str, StardewMonster]:
|
||||
monsters_by_name = {}
|
||||
for monster in all_monsters:
|
||||
current_monster = monster
|
||||
for mod in monster_modifications_by_mod:
|
||||
if mod not in mods or monster.name not in monster_modifications_by_mod[mod]:
|
||||
continue
|
||||
modification_function = monster_modifications_by_mod[mod][monster.name]
|
||||
current_monster = modification_function(mod, current_monster)
|
||||
monsters_by_name[monster.name] = current_monster
|
||||
return monsters_by_name
|
||||
|
||||
|
||||
def all_monsters_by_category_given_mods(mods: Set[str]) -> Dict[str, Tuple[StardewMonster, ...]]:
|
||||
monsters_by_category = {}
|
||||
for monster in all_monsters:
|
||||
current_monster = monster
|
||||
for mod in monster_modifications_by_mod:
|
||||
if mod not in mods or monster.name not in monster_modifications_by_mod[mod]:
|
||||
continue
|
||||
modification_function = monster_modifications_by_mod[mod][monster.name]
|
||||
current_monster = modification_function(mod, current_monster)
|
||||
if current_monster.category not in monsters_by_category:
|
||||
monsters_by_category[monster.category] = ()
|
||||
monsters_by_category[current_monster.category] = monsters_by_category[current_monster.category] + (current_monster,)
|
||||
return monsters_by_category
|
||||
|
||||
@@ -3,23 +3,24 @@ from __future__ import annotations
|
||||
from dataclasses import dataclass
|
||||
from typing import List, Tuple, Union, Optional
|
||||
|
||||
from . import common_data as common
|
||||
from .game_item import GameItem
|
||||
from .monster_data import Monster
|
||||
from ..strings.monster_names import Monster
|
||||
from ..strings.fish_names import WaterChest
|
||||
from ..strings.forageable_names import Forageable
|
||||
from ..strings.metal_names import Mineral, Artifact, Fossil
|
||||
from ..strings.region_names import Region
|
||||
from ..strings.geode_names import Geode
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class MuseumItem(GameItem):
|
||||
class MuseumItem:
|
||||
item_name: str
|
||||
locations: Tuple[str, ...]
|
||||
geodes: Tuple[str, ...]
|
||||
monsters: Tuple[str, ...]
|
||||
difficulty: float
|
||||
|
||||
@staticmethod
|
||||
def of(name: str,
|
||||
item_id: int,
|
||||
def of(item_name: str,
|
||||
difficulty: float,
|
||||
locations: Union[str, Tuple[str, ...]],
|
||||
geodes: Union[str, Tuple[str, ...]],
|
||||
@@ -33,10 +34,10 @@ class MuseumItem(GameItem):
|
||||
if isinstance(monsters, str):
|
||||
monsters = (monsters,)
|
||||
|
||||
return MuseumItem(name, item_id, locations, geodes, monsters, difficulty)
|
||||
return MuseumItem(item_name, locations, geodes, monsters, difficulty)
|
||||
|
||||
def __repr__(self):
|
||||
return f"{self.name} [{self.item_id}] (Locations: {self.locations} |" \
|
||||
return f"{self.item_name} (Locations: {self.locations} |" \
|
||||
f" Geodes: {self.geodes} |" \
|
||||
f" Monsters: {self.monsters}) "
|
||||
|
||||
@@ -50,20 +51,18 @@ all_museum_items: List[MuseumItem] = []
|
||||
|
||||
|
||||
def create_artifact(name: str,
|
||||
item_id: int,
|
||||
difficulty: float,
|
||||
locations: Union[str, Tuple[str, ...]] = (),
|
||||
geodes: Union[str, Tuple[str, ...]] = (),
|
||||
monsters: Union[str, Tuple[str, ...]] = ()) -> MuseumItem:
|
||||
artifact_item = MuseumItem.of(name, item_id, difficulty, locations, geodes, monsters)
|
||||
artifact_item = MuseumItem.of(name, difficulty, locations, geodes, monsters)
|
||||
all_museum_artifacts.append(artifact_item)
|
||||
all_museum_items.append(artifact_item)
|
||||
return artifact_item
|
||||
|
||||
|
||||
def create_mineral(name: str,
|
||||
item_id: int,
|
||||
locations: Union[str, Tuple[str, ...]],
|
||||
locations: Union[str, Tuple[str, ...]] = (),
|
||||
geodes: Union[str, Tuple[str, ...]] = (),
|
||||
monsters: Union[str, Tuple[str, ...]] = (),
|
||||
difficulty: Optional[float] = None) -> MuseumItem:
|
||||
@@ -78,212 +77,207 @@ def create_mineral(name: str,
|
||||
if "Omni Geode" in geodes:
|
||||
difficulty += 31.0 / 2750.0 * 100
|
||||
|
||||
mineral_item = MuseumItem.of(name, item_id, difficulty, locations, geodes, monsters)
|
||||
mineral_item = MuseumItem.of(name, difficulty, locations, geodes, monsters)
|
||||
all_museum_minerals.append(mineral_item)
|
||||
all_museum_items.append(mineral_item)
|
||||
return mineral_item
|
||||
|
||||
|
||||
class Artifact:
|
||||
dwarf_scroll_i = create_artifact("Dwarf Scroll I", 96, 5.6, Region.mines_floor_20,
|
||||
dwarf_scroll_i = create_artifact("Dwarf Scroll I", 5.6, Region.mines_floor_20,
|
||||
monsters=unlikely)
|
||||
dwarf_scroll_ii = create_artifact("Dwarf Scroll II", 97, 3, Region.mines_floor_20,
|
||||
dwarf_scroll_ii = create_artifact("Dwarf Scroll II", 3, Region.mines_floor_20,
|
||||
monsters=unlikely)
|
||||
dwarf_scroll_iii = create_artifact("Dwarf Scroll III", 98, 7.5, Region.mines_floor_60,
|
||||
dwarf_scroll_iii = create_artifact("Dwarf Scroll III", 7.5, Region.mines_floor_60,
|
||||
monsters=Monster.blue_slime)
|
||||
dwarf_scroll_iv = create_artifact("Dwarf Scroll IV", 99, 4, Region.mines_floor_100)
|
||||
chipped_amphora = create_artifact("Chipped Amphora", 100, 6.7, Region.town,
|
||||
dwarf_scroll_iv = create_artifact("Dwarf Scroll IV", 4, Region.mines_floor_100)
|
||||
chipped_amphora = create_artifact("Chipped Amphora", 6.7, Region.town,
|
||||
geodes=Geode.artifact_trove)
|
||||
arrowhead = create_artifact("Arrowhead", 101, 8.5, (Region.mountain, Region.forest, Region.bus_stop),
|
||||
arrowhead = create_artifact("Arrowhead", 8.5, (Region.mountain, Region.forest, Region.bus_stop),
|
||||
geodes=Geode.artifact_trove)
|
||||
ancient_doll = create_artifact("Ancient Doll", 103, 13.1, (Region.mountain, Region.forest, Region.bus_stop),
|
||||
geodes=(Geode.artifact_trove, common.fishing_chest))
|
||||
elvish_jewelry = create_artifact("Elvish Jewelry", 104, 5.3, Region.forest,
|
||||
geodes=(Geode.artifact_trove, common.fishing_chest))
|
||||
chewing_stick = create_artifact("Chewing Stick", 105, 10.3, (Region.mountain, Region.forest, Region.town),
|
||||
geodes=(Geode.artifact_trove, common.fishing_chest))
|
||||
ornamental_fan = create_artifact("Ornamental Fan", 106, 7.4, (Region.beach, Region.forest, Region.town),
|
||||
geodes=(Geode.artifact_trove, common.fishing_chest))
|
||||
dinosaur_egg = create_artifact("Dinosaur Egg", 107, 11.4, (Region.mountain, Region.skull_cavern),
|
||||
geodes=common.fishing_chest,
|
||||
ancient_doll = create_artifact("Ancient Doll", 13.1, (Region.mountain, Region.forest, Region.bus_stop),
|
||||
geodes=(Geode.artifact_trove, WaterChest.fishing_chest))
|
||||
elvish_jewelry = create_artifact("Elvish Jewelry", 5.3, Region.forest,
|
||||
geodes=(Geode.artifact_trove, WaterChest.fishing_chest))
|
||||
chewing_stick = create_artifact("Chewing Stick", 10.3, (Region.mountain, Region.forest, Region.town),
|
||||
geodes=(Geode.artifact_trove, WaterChest.fishing_chest))
|
||||
ornamental_fan = create_artifact("Ornamental Fan", 7.4, (Region.beach, Region.forest, Region.town),
|
||||
geodes=(Geode.artifact_trove, WaterChest.fishing_chest))
|
||||
dinosaur_egg = create_artifact("Dinosaur Egg", 11.4, (Region.mountain, Region.skull_cavern),
|
||||
geodes=WaterChest.fishing_chest,
|
||||
monsters=Monster.pepper_rex)
|
||||
rare_disc = create_artifact("Rare Disc", 108, 5.6, Region.stardew_valley,
|
||||
geodes=(Geode.artifact_trove, common.fishing_chest),
|
||||
rare_disc = create_artifact("Rare Disc", 5.6, Region.stardew_valley,
|
||||
geodes=(Geode.artifact_trove, WaterChest.fishing_chest),
|
||||
monsters=unlikely)
|
||||
ancient_sword = create_artifact("Ancient Sword", 109, 5.8, (Region.forest, Region.mountain),
|
||||
geodes=(Geode.artifact_trove, common.fishing_chest))
|
||||
rusty_spoon = create_artifact("Rusty Spoon", 110, 9.6, Region.town,
|
||||
geodes=(Geode.artifact_trove, common.fishing_chest))
|
||||
rusty_spur = create_artifact("Rusty Spur", 111, 15.6, Region.farm,
|
||||
geodes=(Geode.artifact_trove, common.fishing_chest))
|
||||
rusty_cog = create_artifact("Rusty Cog", 112, 9.6, Region.mountain,
|
||||
geodes=(Geode.artifact_trove, common.fishing_chest))
|
||||
chicken_statue = create_artifact("Chicken Statue", 113, 13.5, Region.farm,
|
||||
geodes=(Geode.artifact_trove, common.fishing_chest))
|
||||
ancient_seed = create_artifact("Ancient Seed", 114, 8.4, (Region.forest, Region.mountain),
|
||||
geodes=(Geode.artifact_trove, common.fishing_chest),
|
||||
ancient_sword = create_artifact("Ancient Sword", 5.8, (Region.forest, Region.mountain),
|
||||
geodes=(Geode.artifact_trove, WaterChest.fishing_chest))
|
||||
rusty_spoon = create_artifact("Rusty Spoon", 9.6, Region.town,
|
||||
geodes=(Geode.artifact_trove, WaterChest.fishing_chest))
|
||||
rusty_spur = create_artifact("Rusty Spur", 15.6, Region.farm,
|
||||
geodes=(Geode.artifact_trove, WaterChest.fishing_chest))
|
||||
rusty_cog = create_artifact("Rusty Cog", 9.6, Region.mountain,
|
||||
geodes=(Geode.artifact_trove, WaterChest.fishing_chest))
|
||||
chicken_statue = create_artifact("Chicken Statue", 13.5, Region.farm,
|
||||
geodes=(Geode.artifact_trove, WaterChest.fishing_chest))
|
||||
ancient_seed = create_artifact("Ancient Seed", 8.4, (Region.forest, Region.mountain),
|
||||
geodes=(Geode.artifact_trove, WaterChest.fishing_chest),
|
||||
monsters=unlikely)
|
||||
prehistoric_tool = create_artifact("Prehistoric Tool", 115, 11.1, (Region.mountain, Region.forest, Region.bus_stop),
|
||||
geodes=(Geode.artifact_trove, common.fishing_chest))
|
||||
dried_starfish = create_artifact("Dried Starfish", 116, 12.5, Region.beach,
|
||||
geodes=(Geode.artifact_trove, common.fishing_chest))
|
||||
anchor = create_artifact("Anchor", 117, 8.5, Region.beach, geodes=(Geode.artifact_trove, common.fishing_chest))
|
||||
glass_shards = create_artifact("Glass Shards", 118, 11.5, Region.beach,
|
||||
geodes=(Geode.artifact_trove, common.fishing_chest))
|
||||
bone_flute = create_artifact("Bone Flute", 119, 6.3, (Region.mountain, Region.forest, Region.town),
|
||||
geodes=(Geode.artifact_trove, common.fishing_chest))
|
||||
prehistoric_handaxe = create_artifact("Prehistoric Handaxe", 120, 13.7,
|
||||
prehistoric_tool = create_artifact("Prehistoric Tool", 11.1, (Region.mountain, Region.forest, Region.bus_stop),
|
||||
geodes=(Geode.artifact_trove, WaterChest.fishing_chest))
|
||||
dried_starfish = create_artifact("Dried Starfish", 12.5, Region.beach,
|
||||
geodes=(Geode.artifact_trove, WaterChest.fishing_chest))
|
||||
anchor = create_artifact("Anchor", 8.5, Region.beach, geodes=(Geode.artifact_trove, WaterChest.fishing_chest))
|
||||
glass_shards = create_artifact("Glass Shards", 11.5, Region.beach,
|
||||
geodes=(Geode.artifact_trove, WaterChest.fishing_chest))
|
||||
bone_flute = create_artifact("Bone Flute", 6.3, (Region.mountain, Region.forest, Region.town),
|
||||
geodes=(Geode.artifact_trove, WaterChest.fishing_chest))
|
||||
prehistoric_handaxe = create_artifact(Artifact.prehistoric_handaxe, 13.7,
|
||||
(Region.mountain, Region.forest, Region.bus_stop),
|
||||
geodes=Geode.artifact_trove)
|
||||
dwarvish_helm = create_artifact("Dwarvish Helm", 121, 8.7, Region.mines_floor_20,
|
||||
dwarvish_helm = create_artifact("Dwarvish Helm", 8.7, Region.mines_floor_20,
|
||||
geodes=(Geode.geode, Geode.omni, Geode.artifact_trove))
|
||||
dwarf_gadget = create_artifact("Dwarf Gadget", 122, 9.7, Region.mines_floor_60,
|
||||
dwarf_gadget = create_artifact("Dwarf Gadget", 9.7, Region.mines_floor_60,
|
||||
geodes=(Geode.magma, Geode.omni, Geode.artifact_trove))
|
||||
ancient_drum = create_artifact("Ancient Drum", 123, 9.5, (Region.bus_stop, Region.forest, Region.town),
|
||||
ancient_drum = create_artifact("Ancient Drum", 9.5, (Region.bus_stop, Region.forest, Region.town),
|
||||
geodes=(Geode.frozen, Geode.omni, Geode.artifact_trove))
|
||||
golden_mask = create_artifact("Golden Mask", 124, 6.7, Region.desert,
|
||||
golden_mask = create_artifact("Golden Mask", 6.7, Region.desert,
|
||||
geodes=Geode.artifact_trove)
|
||||
golden_relic = create_artifact("Golden Relic", 125, 9.7, Region.desert,
|
||||
golden_relic = create_artifact("Golden Relic", 9.7, Region.desert,
|
||||
geodes=Geode.artifact_trove)
|
||||
strange_doll_green = create_artifact("Strange Doll (Green)", 126, 10, Region.town,
|
||||
geodes=common.secret_note)
|
||||
strange_doll = create_artifact("Strange Doll", 127, 10, Region.desert,
|
||||
geodes=common.secret_note)
|
||||
prehistoric_scapula = create_artifact("Prehistoric Scapula", 579, 6.2,
|
||||
strange_doll_green = create_artifact("Strange Doll (Green)", 10, Region.town,
|
||||
geodes=Forageable.secret_note)
|
||||
strange_doll = create_artifact("Strange Doll", 10, Region.desert,
|
||||
geodes=Forageable.secret_note)
|
||||
prehistoric_scapula = create_artifact("Prehistoric Scapula", 6.2,
|
||||
(Region.dig_site, Region.forest, Region.town))
|
||||
prehistoric_tibia = create_artifact("Prehistoric Tibia", 580, 16.6,
|
||||
prehistoric_tibia = create_artifact("Prehistoric Tibia", 16.6,
|
||||
(Region.dig_site, Region.forest, Region.railroad))
|
||||
prehistoric_skull = create_artifact("Prehistoric Skull", 581, 3.9, (Region.dig_site, Region.mountain))
|
||||
skeletal_hand = create_artifact("Skeletal Hand", 582, 7.9, (Region.dig_site, Region.backwoods, Region.beach))
|
||||
prehistoric_rib = create_artifact("Prehistoric Rib", 583, 15, (Region.dig_site, Region.farm, Region.town),
|
||||
prehistoric_skull = create_artifact("Prehistoric Skull", 3.9, (Region.dig_site, Region.mountain))
|
||||
skeletal_hand = create_artifact(Fossil.skeletal_hand, 7.9, (Region.dig_site, Region.backwoods, Region.beach))
|
||||
prehistoric_rib = create_artifact("Prehistoric Rib", 15, (Region.dig_site, Region.farm, Region.town),
|
||||
monsters=Monster.pepper_rex)
|
||||
prehistoric_vertebra = create_artifact("Prehistoric Vertebra", 584, 12.7, (Region.dig_site, Region.bus_stop),
|
||||
prehistoric_vertebra = create_artifact("Prehistoric Vertebra", 12.7, (Region.dig_site, Region.bus_stop),
|
||||
monsters=Monster.pepper_rex)
|
||||
skeletal_tail = create_artifact("Skeletal Tail", 585, 5.1, (Region.dig_site, Region.mines_floor_20),
|
||||
geodes=common.fishing_chest)
|
||||
nautilus_fossil = create_artifact("Nautilus Fossil", 586, 6.9, (Region.dig_site, Region.beach),
|
||||
geodes=common.fishing_chest)
|
||||
amphibian_fossil = create_artifact("Amphibian Fossil", 587, 6.3, (Region.dig_site, Region.forest, Region.mountain),
|
||||
geodes=common.fishing_chest)
|
||||
palm_fossil = create_artifact("Palm Fossil", 588, 10.2,
|
||||
skeletal_tail = create_artifact("Skeletal Tail", 5.1, (Region.dig_site, Region.mines_floor_20),
|
||||
geodes=WaterChest.fishing_chest)
|
||||
nautilus_fossil = create_artifact("Nautilus Fossil", 6.9, (Region.dig_site, Region.beach),
|
||||
geodes=WaterChest.fishing_chest)
|
||||
amphibian_fossil = create_artifact("Amphibian Fossil", 6.3, (Region.dig_site, Region.forest, Region.mountain),
|
||||
geodes=WaterChest.fishing_chest)
|
||||
palm_fossil = create_artifact("Palm Fossil", 10.2,
|
||||
(Region.dig_site, Region.desert, Region.forest, Region.beach))
|
||||
trilobite = create_artifact("Trilobite", 589, 7.4, (Region.dig_site, Region.desert, Region.forest, Region.beach))
|
||||
trilobite = create_artifact("Trilobite", 7.4, (Region.dig_site, Region.desert, Region.forest, Region.beach))
|
||||
|
||||
|
||||
class Mineral:
|
||||
quartz = create_mineral("Quartz", 80, Region.mines_floor_20,
|
||||
monsters=Monster.stone_golem)
|
||||
fire_quartz = create_mineral("Fire Quartz", 82, Region.mines_floor_100,
|
||||
geodes=(Geode.magma, Geode.omni, common.fishing_chest),
|
||||
quartz = create_mineral(Mineral.quartz, Region.mines_floor_20)
|
||||
fire_quartz = create_mineral("Fire Quartz", Region.mines_floor_100,
|
||||
geodes=(Geode.magma, Geode.omni, WaterChest.fishing_chest),
|
||||
difficulty=1.0 / 12.0)
|
||||
frozen_tear = create_mineral("Frozen Tear", 84, Region.mines_floor_60,
|
||||
geodes=(Geode.frozen, Geode.omni, common.fishing_chest),
|
||||
frozen_tear = create_mineral("Frozen Tear", Region.mines_floor_60,
|
||||
geodes=(Geode.frozen, Geode.omni, WaterChest.fishing_chest),
|
||||
monsters=unlikely,
|
||||
difficulty=1.0 / 12.0)
|
||||
earth_crystal = create_mineral("Earth Crystal", 86, Region.mines_floor_20,
|
||||
geodes=(Geode.geode, Geode.omni, common.fishing_chest),
|
||||
earth_crystal = create_mineral("Earth Crystal", Region.mines_floor_20,
|
||||
geodes=(Geode.geode, Geode.omni, WaterChest.fishing_chest),
|
||||
monsters=Monster.duggy,
|
||||
difficulty=1.0 / 12.0)
|
||||
emerald = create_mineral("Emerald", 60, Region.mines_floor_100,
|
||||
geodes=common.fishing_chest)
|
||||
aquamarine = create_mineral("Aquamarine", 62, Region.mines_floor_60,
|
||||
geodes=common.fishing_chest)
|
||||
ruby = create_mineral("Ruby", 64, Region.mines_floor_100,
|
||||
geodes=common.fishing_chest)
|
||||
amethyst = create_mineral("Amethyst", 66, Region.mines_floor_20,
|
||||
geodes=common.fishing_chest)
|
||||
topaz = create_mineral("Topaz", 68, Region.mines_floor_20,
|
||||
geodes=common.fishing_chest)
|
||||
jade = create_mineral("Jade", 70, Region.mines_floor_60,
|
||||
geodes=common.fishing_chest)
|
||||
diamond = create_mineral("Diamond", 72, Region.mines_floor_60,
|
||||
geodes=common.fishing_chest)
|
||||
prismatic_shard = create_mineral("Prismatic Shard", 74, Region.skull_cavern_100,
|
||||
emerald = create_mineral("Emerald", Region.mines_floor_100,
|
||||
geodes=WaterChest.fishing_chest)
|
||||
aquamarine = create_mineral("Aquamarine", Region.mines_floor_60,
|
||||
geodes=WaterChest.fishing_chest)
|
||||
ruby = create_mineral("Ruby", Region.mines_floor_100,
|
||||
geodes=WaterChest.fishing_chest)
|
||||
amethyst = create_mineral("Amethyst", Region.mines_floor_20,
|
||||
geodes=WaterChest.fishing_chest)
|
||||
topaz = create_mineral("Topaz", Region.mines_floor_20,
|
||||
geodes=WaterChest.fishing_chest)
|
||||
jade = create_mineral("Jade", Region.mines_floor_60,
|
||||
geodes=WaterChest.fishing_chest)
|
||||
diamond = create_mineral("Diamond", Region.mines_floor_60,
|
||||
geodes=WaterChest.fishing_chest)
|
||||
prismatic_shard = create_mineral("Prismatic Shard", Region.skull_cavern_100,
|
||||
geodes=unlikely,
|
||||
monsters=unlikely)
|
||||
alamite = create_mineral("Alamite", 538, Region.town,
|
||||
alamite = create_mineral("Alamite",
|
||||
geodes=(Geode.geode, Geode.omni))
|
||||
bixite = create_mineral("Bixite", 539, Region.town,
|
||||
bixite = create_mineral("Bixite",
|
||||
geodes=(Geode.magma, Geode.omni),
|
||||
monsters=unlikely)
|
||||
baryte = create_mineral("Baryte", 540, Region.town,
|
||||
baryte = create_mineral("Baryte",
|
||||
geodes=(Geode.magma, Geode.omni))
|
||||
aerinite = create_mineral("Aerinite", 541, Region.town,
|
||||
aerinite = create_mineral("Aerinite",
|
||||
geodes=(Geode.frozen, Geode.omni))
|
||||
calcite = create_mineral("Calcite", 542, Region.town,
|
||||
calcite = create_mineral("Calcite",
|
||||
geodes=(Geode.geode, Geode.omni))
|
||||
dolomite = create_mineral("Dolomite", 543, Region.town,
|
||||
dolomite = create_mineral("Dolomite",
|
||||
geodes=(Geode.magma, Geode.omni))
|
||||
esperite = create_mineral("Esperite", 544, Region.town,
|
||||
esperite = create_mineral("Esperite",
|
||||
geodes=(Geode.frozen, Geode.omni))
|
||||
fluorapatite = create_mineral("Fluorapatite", 545, Region.town,
|
||||
fluorapatite = create_mineral("Fluorapatite",
|
||||
geodes=(Geode.frozen, Geode.omni))
|
||||
geminite = create_mineral("Geminite", 546, Region.town,
|
||||
geminite = create_mineral("Geminite",
|
||||
geodes=(Geode.frozen, Geode.omni))
|
||||
helvite = create_mineral("Helvite", 547, Region.town,
|
||||
helvite = create_mineral("Helvite",
|
||||
geodes=(Geode.magma, Geode.omni))
|
||||
jamborite = create_mineral("Jamborite", 548, Region.town,
|
||||
jamborite = create_mineral("Jamborite",
|
||||
geodes=(Geode.geode, Geode.omni))
|
||||
jagoite = create_mineral("Jagoite", 549, Region.town,
|
||||
jagoite = create_mineral("Jagoite",
|
||||
geodes=(Geode.geode, Geode.omni))
|
||||
kyanite = create_mineral("Kyanite", 550, Region.town,
|
||||
kyanite = create_mineral("Kyanite",
|
||||
geodes=(Geode.frozen, Geode.omni))
|
||||
lunarite = create_mineral("Lunarite", 551, Region.town,
|
||||
lunarite = create_mineral("Lunarite",
|
||||
geodes=(Geode.frozen, Geode.omni))
|
||||
malachite = create_mineral("Malachite", 552, Region.town,
|
||||
malachite = create_mineral("Malachite",
|
||||
geodes=(Geode.geode, Geode.omni))
|
||||
neptunite = create_mineral("Neptunite", 553, Region.town,
|
||||
neptunite = create_mineral("Neptunite",
|
||||
geodes=(Geode.magma, Geode.omni))
|
||||
lemon_stone = create_mineral("Lemon Stone", 554, Region.town,
|
||||
lemon_stone = create_mineral("Lemon Stone",
|
||||
geodes=(Geode.magma, Geode.omni))
|
||||
nekoite = create_mineral("Nekoite", 555, Region.town,
|
||||
nekoite = create_mineral("Nekoite",
|
||||
geodes=(Geode.geode, Geode.omni))
|
||||
orpiment = create_mineral("Orpiment", 556, Region.town,
|
||||
orpiment = create_mineral("Orpiment",
|
||||
geodes=(Geode.geode, Geode.omni))
|
||||
petrified_slime = create_mineral("Petrified Slime", 557, Region.town,
|
||||
geodes=(Geode.geode, Geode.omni))
|
||||
thunder_egg = create_mineral("Thunder Egg", 558, Region.town,
|
||||
petrified_slime = create_mineral(Mineral.petrified_slime, Region.slime_hutch)
|
||||
thunder_egg = create_mineral("Thunder Egg",
|
||||
geodes=(Geode.geode, Geode.omni))
|
||||
pyrite = create_mineral("Pyrite", 559, Region.town,
|
||||
pyrite = create_mineral("Pyrite",
|
||||
geodes=(Geode.frozen, Geode.omni))
|
||||
ocean_stone = create_mineral("Ocean Stone", 560, Region.town,
|
||||
ocean_stone = create_mineral("Ocean Stone",
|
||||
geodes=(Geode.frozen, Geode.omni))
|
||||
ghost_crystal = create_mineral("Ghost Crystal", 561, Region.town,
|
||||
ghost_crystal = create_mineral("Ghost Crystal",
|
||||
geodes=(Geode.frozen, Geode.omni))
|
||||
tigerseye = create_mineral("Tigerseye", 562, Region.town,
|
||||
tigerseye = create_mineral("Tigerseye",
|
||||
geodes=(Geode.magma, Geode.omni))
|
||||
jasper = create_mineral("Jasper", 563, Region.town,
|
||||
jasper = create_mineral("Jasper",
|
||||
geodes=(Geode.magma, Geode.omni))
|
||||
opal = create_mineral("Opal", 564, Region.town,
|
||||
opal = create_mineral("Opal",
|
||||
geodes=(Geode.frozen, Geode.omni))
|
||||
fire_opal = create_mineral("Fire Opal", 565, Region.town,
|
||||
fire_opal = create_mineral("Fire Opal",
|
||||
geodes=(Geode.magma, Geode.omni))
|
||||
celestine = create_mineral("Celestine", 566, Region.town,
|
||||
celestine = create_mineral("Celestine",
|
||||
geodes=(Geode.geode, Geode.omni))
|
||||
marble = create_mineral("Marble", 567, Region.town,
|
||||
marble = create_mineral("Marble",
|
||||
geodes=(Geode.frozen, Geode.omni))
|
||||
sandstone = create_mineral("Sandstone", 568, Region.town,
|
||||
sandstone = create_mineral("Sandstone",
|
||||
geodes=(Geode.geode, Geode.omni))
|
||||
granite = create_mineral("Granite", 569, Region.town,
|
||||
granite = create_mineral("Granite",
|
||||
geodes=(Geode.geode, Geode.omni))
|
||||
basalt = create_mineral("Basalt", 570, Region.town,
|
||||
basalt = create_mineral("Basalt",
|
||||
geodes=(Geode.magma, Geode.omni))
|
||||
limestone = create_mineral("Limestone", 571, Region.town,
|
||||
limestone = create_mineral("Limestone",
|
||||
geodes=(Geode.geode, Geode.omni))
|
||||
soapstone = create_mineral("Soapstone", 572, Region.town,
|
||||
soapstone = create_mineral("Soapstone",
|
||||
geodes=(Geode.frozen, Geode.omni))
|
||||
hematite = create_mineral("Hematite", 573, Region.town,
|
||||
hematite = create_mineral("Hematite",
|
||||
geodes=(Geode.frozen, Geode.omni))
|
||||
mudstone = create_mineral("Mudstone", 574, Region.town,
|
||||
mudstone = create_mineral("Mudstone",
|
||||
geodes=(Geode.geode, Geode.omni))
|
||||
obsidian = create_mineral("Obsidian", 575, Region.town,
|
||||
obsidian = create_mineral("Obsidian",
|
||||
geodes=(Geode.magma, Geode.omni))
|
||||
slate = create_mineral("Slate", 576, Region.town,
|
||||
geodes=(Geode.geode, Geode.omni))
|
||||
fairy_stone = create_mineral("Fairy Stone", 577, Region.town,
|
||||
geodes=(Geode.frozen, Geode.omni))
|
||||
star_shards = create_mineral("Star Shards", 578, Region.town,
|
||||
geodes=(Geode.magma, Geode.omni))
|
||||
slate = create_mineral("Slate", geodes=(Geode.geode, Geode.omni))
|
||||
fairy_stone = create_mineral("Fairy Stone", geodes=(Geode.frozen, Geode.omni))
|
||||
star_shards = create_mineral("Star Shards", geodes=(Geode.magma, Geode.omni))
|
||||
|
||||
|
||||
dwarf_scrolls = (Artifact.dwarf_scroll_i, Artifact.dwarf_scroll_ii, Artifact.dwarf_scroll_iii, Artifact.dwarf_scroll_iv)
|
||||
@@ -291,4 +285,4 @@ skeleton_front = (Artifact.prehistoric_skull, Artifact.skeletal_hand, Artifact.p
|
||||
skeleton_middle = (Artifact.prehistoric_rib, Artifact.prehistoric_vertebra)
|
||||
skeleton_back = (Artifact.prehistoric_tibia, Artifact.skeletal_tail)
|
||||
|
||||
all_museum_items_by_name = {item.name: item for item in all_museum_items}
|
||||
all_museum_items_by_name = {item.item_name: item for item in all_museum_items}
|
||||
|
||||
@@ -1,78 +1,35 @@
|
||||
from typing import Dict, List
|
||||
|
||||
from typing import Dict, List, Optional
|
||||
from ..mods.mod_data import ModNames
|
||||
from .recipe_source import RecipeSource, FriendshipSource, SkillSource, QueenOfSauceSource, ShopSource, StarterSource, ShopTradeSource, ShopFriendshipSource
|
||||
from ..strings.animal_product_names import AnimalProduct
|
||||
from ..strings.artisan_good_names import ArtisanGood
|
||||
from ..strings.crop_names import Fruit, Vegetable
|
||||
from ..strings.fish_names import Fish, WaterItem
|
||||
from ..strings.craftable_names import ModEdible, Edible
|
||||
from ..strings.crop_names import Fruit, Vegetable, SVEFruit, DistantLandsCrop
|
||||
from ..strings.fish_names import Fish, SVEFish, WaterItem, DistantLandsFish
|
||||
from ..strings.flower_names import Flower
|
||||
from ..strings.forageable_names import Forageable
|
||||
from ..strings.forageable_names import Forageable, SVEForage, DistantLandsForageable
|
||||
from ..strings.ingredient_names import Ingredient
|
||||
from ..strings.food_names import Meal, Beverage
|
||||
from ..strings.region_names import Region
|
||||
from ..strings.food_names import Meal, SVEMeal, Beverage, DistantLandsMeal, BoardingHouseMeal
|
||||
from ..strings.material_names import Material
|
||||
from ..strings.metal_names import Fossil
|
||||
from ..strings.monster_drop_names import Loot
|
||||
from ..strings.region_names import Region, SVERegion
|
||||
from ..strings.season_names import Season
|
||||
from ..strings.skill_names import Skill
|
||||
from ..strings.villager_names import NPC
|
||||
|
||||
|
||||
class RecipeSource:
|
||||
pass
|
||||
|
||||
|
||||
class StarterSource(RecipeSource):
|
||||
pass
|
||||
|
||||
|
||||
class QueenOfSauceSource(RecipeSource):
|
||||
year: int
|
||||
season: str
|
||||
day: int
|
||||
|
||||
def __init__(self, year: int, season: str, day: int):
|
||||
self.year = year
|
||||
self.season = season
|
||||
self.day = day
|
||||
|
||||
|
||||
class FriendshipSource(RecipeSource):
|
||||
friend: str
|
||||
hearts: int
|
||||
|
||||
def __init__(self, friend: str, hearts: int):
|
||||
self.friend = friend
|
||||
self.hearts = hearts
|
||||
|
||||
|
||||
class SkillSource(RecipeSource):
|
||||
skill: str
|
||||
level: int
|
||||
|
||||
def __init__(self, skill: str, level: int):
|
||||
self.skill = skill
|
||||
self.level = level
|
||||
|
||||
|
||||
class ShopSource(RecipeSource):
|
||||
region: str
|
||||
price: int
|
||||
|
||||
def __init__(self, region: str, price: int):
|
||||
self.region = region
|
||||
self.price = price
|
||||
|
||||
|
||||
class ShopTradeSource(ShopSource):
|
||||
currency: str
|
||||
from ..strings.villager_names import NPC, ModNPC
|
||||
|
||||
|
||||
class CookingRecipe:
|
||||
meal: str
|
||||
ingredients: Dict[str, int]
|
||||
source: RecipeSource
|
||||
mod_name: Optional[str] = None
|
||||
|
||||
def __init__(self, meal: str, ingredients: Dict[str, int], source: RecipeSource):
|
||||
def __init__(self, meal: str, ingredients: Dict[str, int], source: RecipeSource, mod_name: Optional[str] = None):
|
||||
self.meal = meal
|
||||
self.ingredients = ingredients
|
||||
self.source = source
|
||||
self.mod_name = mod_name
|
||||
|
||||
def __repr__(self):
|
||||
return f"{self.meal} (Source: {self.source} |" \
|
||||
@@ -82,9 +39,14 @@ class CookingRecipe:
|
||||
all_cooking_recipes: List[CookingRecipe] = []
|
||||
|
||||
|
||||
def friendship_recipe(name: str, friend: str, hearts: int, ingredients: Dict[str, int]) -> CookingRecipe:
|
||||
def friendship_recipe(name: str, friend: str, hearts: int, ingredients: Dict[str, int], mod_name: Optional[str] = None) -> CookingRecipe:
|
||||
source = FriendshipSource(friend, hearts)
|
||||
return create_recipe(name, ingredients, source)
|
||||
return create_recipe(name, ingredients, source, mod_name)
|
||||
|
||||
|
||||
def friendship_and_shop_recipe(name: str, friend: str, hearts: int, region: str, price: int, ingredients: Dict[str, int], mod_name: Optional[str] = None) -> CookingRecipe:
|
||||
source = ShopFriendshipSource(friend, hearts, region, price)
|
||||
return create_recipe(name, ingredients, source, mod_name)
|
||||
|
||||
|
||||
def skill_recipe(name: str, skill: str, level: int, ingredients: Dict[str, int]) -> CookingRecipe:
|
||||
@@ -92,8 +54,13 @@ def skill_recipe(name: str, skill: str, level: int, ingredients: Dict[str, int])
|
||||
return create_recipe(name, ingredients, source)
|
||||
|
||||
|
||||
def shop_recipe(name: str, region: str, price: int, ingredients: Dict[str, int]) -> CookingRecipe:
|
||||
def shop_recipe(name: str, region: str, price: int, ingredients: Dict[str, int], mod_name: Optional[str] = None) -> CookingRecipe:
|
||||
source = ShopSource(region, price)
|
||||
return create_recipe(name, ingredients, source, mod_name)
|
||||
|
||||
|
||||
def shop_trade_recipe(name: str, region: str, currency: str, price: int, ingredients: Dict[str, int]) -> CookingRecipe:
|
||||
source = ShopTradeSource(region, currency, price)
|
||||
return create_recipe(name, ingredients, source)
|
||||
|
||||
|
||||
@@ -107,34 +74,44 @@ def starter_recipe(name: str, ingredients: Dict[str, int]) -> CookingRecipe:
|
||||
return create_recipe(name, ingredients, source)
|
||||
|
||||
|
||||
def create_recipe(name: str, ingredients: Dict[str, int], source: RecipeSource) -> CookingRecipe:
|
||||
recipe = CookingRecipe(name, ingredients, source)
|
||||
def create_recipe(name: str, ingredients: Dict[str, int], source: RecipeSource, mod_name: Optional[str] = None) -> CookingRecipe:
|
||||
recipe = CookingRecipe(name, ingredients, source, mod_name)
|
||||
all_cooking_recipes.append(recipe)
|
||||
return recipe
|
||||
|
||||
|
||||
algae_soup = friendship_recipe(Meal.algae_soup, NPC.clint, 3, {WaterItem.green_algae: 4})
|
||||
artichoke_dip = queen_of_sauce_recipe(Meal.artichoke_dip, 1, Season.fall, 28, {Vegetable.artichoke: 1, AnimalProduct.cow_milk: 1})
|
||||
autumn_bounty = friendship_recipe(Meal.autumn_bounty, NPC.demetrius, 7, {Vegetable.yam: 1, Vegetable.pumpkin: 1})
|
||||
baked_fish = queen_of_sauce_recipe(Meal.baked_fish, 1, Season.summer, 7, {Fish.sunfish: 1, Fish.bream: 1, Ingredient.wheat_flour: 1})
|
||||
banana_pudding = shop_trade_recipe(Meal.banana_pudding, Region.island_trader, Fossil.bone_fragment, 30, {Fruit.banana: 1, AnimalProduct.cow_milk: 1, Ingredient.sugar: 1})
|
||||
bean_hotpot = friendship_recipe(Meal.bean_hotpot, NPC.clint, 7, {Vegetable.green_bean: 2})
|
||||
blackberry_cobbler_ingredients = {Forageable.blackberry: 2, Ingredient.sugar: 1, Ingredient.wheat_flour: 1}
|
||||
blackberry_cobbler_qos = queen_of_sauce_recipe(Meal.blackberry_cobbler, 2, Season.fall, 14, blackberry_cobbler_ingredients)
|
||||
blueberry_tart = friendship_recipe(Meal.blueberry_tart, NPC.pierre, 3, {Fruit.blueberry: 1, Ingredient.wheat_flour: 1, Ingredient.sugar: 1, AnimalProduct.any_egg: 1})
|
||||
blueberry_tart_ingredients = {Fruit.blueberry: 1, Ingredient.wheat_flour: 1, Ingredient.sugar: 1, AnimalProduct.any_egg: 1}
|
||||
blueberry_tart = friendship_recipe(Meal.blueberry_tart, NPC.pierre, 3, blueberry_tart_ingredients)
|
||||
bread = queen_of_sauce_recipe(Meal.bread, 1, Season.summer, 28, {Ingredient.wheat_flour: 1})
|
||||
bruschetta = queen_of_sauce_recipe(Meal.bruschetta, 2, Season.winter, 21, {Meal.bread: 1, Ingredient.oil: 1, Vegetable.tomato: 1})
|
||||
carp_surprise = queen_of_sauce_recipe(Meal.carp_surprise, 2, Season.summer, 7, {Fish.carp: 4})
|
||||
cheese_cauliflower = friendship_recipe(Meal.cheese_cauliflower, NPC.pam, 3, {Vegetable.cauliflower: 1, ArtisanGood.cheese: 1})
|
||||
chocolate_cake_ingredients = {Ingredient.wheat_flour: 1, Ingredient.sugar: 1, AnimalProduct.chicken_egg: 1}
|
||||
chocolate_cake_qos = queen_of_sauce_recipe(Meal.chocolate_cake, 1, Season.winter, 14, chocolate_cake_ingredients)
|
||||
chowder = friendship_recipe(Meal.chowder, NPC.willy, 3, {WaterItem.clam: 1, AnimalProduct.cow_milk: 1})
|
||||
complete_breakfast = queen_of_sauce_recipe(Meal.complete_breakfast, 2, Season.spring, 21, {Meal.fried_egg: 1, AnimalProduct.milk: 1, Meal.hashbrowns: 1, Meal.pancakes: 1})
|
||||
chowder = friendship_recipe(Meal.chowder, NPC.willy, 3, {Fish.clam: 1, AnimalProduct.cow_milk: 1})
|
||||
coleslaw = queen_of_sauce_recipe(Meal.coleslaw, 14, Season.spring, 14, {Vegetable.red_cabbage: 1, Ingredient.vinegar: 1, ArtisanGood.mayonnaise: 1})
|
||||
complete_breakfast_ingredients = {Meal.fried_egg: 1, AnimalProduct.milk: 1, Meal.hashbrowns: 1, Meal.pancakes: 1}
|
||||
complete_breakfast = queen_of_sauce_recipe(Meal.complete_breakfast, 2, Season.spring, 21, complete_breakfast_ingredients)
|
||||
cookie = friendship_recipe(Meal.cookie, NPC.evelyn, 4, {Ingredient.wheat_flour: 1, Ingredient.sugar: 1, AnimalProduct.chicken_egg: 1})
|
||||
crab_cakes_ingredients = {Fish.crab: 1, Ingredient.wheat_flour: 1, AnimalProduct.chicken_egg: 1, Ingredient.oil: 1}
|
||||
crab_cakes_qos = queen_of_sauce_recipe(Meal.crab_cakes, 2, Season.fall, 21, crab_cakes_ingredients)
|
||||
cranberry_candy = queen_of_sauce_recipe(Meal.cranberry_candy, 1, Season.winter, 28, {Fruit.cranberries: 1, Fruit.apple: 1, Ingredient.sugar: 1})
|
||||
cranberry_sauce = friendship_recipe(Meal.cranberry_sauce, NPC.gus, 7, {Fruit.cranberries: 1, Ingredient.sugar: 1})
|
||||
crispy_bass = friendship_recipe(Meal.crispy_bass, NPC.kent, 3, {Fish.largemouth_bass: 1, Ingredient.wheat_flour: 1, Ingredient.oil: 1})
|
||||
dish_o_the_sea = skill_recipe(Meal.dish_o_the_sea, Skill.fishing, 3, {Fish.sardine: 2, Meal.hashbrowns: 1})
|
||||
eggplant_parmesan = friendship_recipe(Meal.eggplant_parmesan, NPC.lewis, 7, {Vegetable.eggplant: 1, Vegetable.tomato: 1})
|
||||
escargot = friendship_recipe(Meal.escargot, NPC.willy, 5, {Fish.snail: 1, Vegetable.garlic: 1})
|
||||
farmer_lunch = skill_recipe(Meal.farmer_lunch, Skill.farming, 3, {Meal.omelet: 2, Vegetable.parsnip: 1})
|
||||
fiddlehead_risotto = queen_of_sauce_recipe(Meal.fiddlehead_risotto, 2, Season.fall, 28, {Ingredient.oil: 1, Forageable.fiddlehead_fern: 1, Vegetable.garlic: 1})
|
||||
fish_stew = friendship_recipe(Meal.fish_stew, NPC.willy, 7, {Fish.crayfish: 1, Fish.mussel: 1, Fish.periwinkle: 1, Vegetable.tomato: 1})
|
||||
fish_taco = friendship_recipe(Meal.fish_taco, NPC.linus, 7, {Fish.tuna: 1, Meal.tortilla: 1, Vegetable.red_cabbage: 1, ArtisanGood.mayonnaise: 1})
|
||||
fried_calamari = friendship_recipe(Meal.fried_calamari, NPC.jodi, 3, {Fish.squid: 1, Ingredient.wheat_flour: 1, Ingredient.oil: 1})
|
||||
fried_eel = friendship_recipe(Meal.fried_eel, NPC.george, 3, {Fish.eel: 1, Ingredient.oil: 1})
|
||||
@@ -145,7 +122,12 @@ ginger_ale = shop_recipe(Beverage.ginger_ale, Region.volcano_dwarf_shop, 1000, {
|
||||
glazed_yams = queen_of_sauce_recipe(Meal.glazed_yams, 1, Season.fall, 21, {Vegetable.yam: 1, Ingredient.sugar: 1})
|
||||
hashbrowns = queen_of_sauce_recipe(Meal.hashbrowns, 2, Season.spring, 14, {Vegetable.potato: 1, Ingredient.oil: 1})
|
||||
ice_cream = friendship_recipe(Meal.ice_cream, NPC.jodi, 7, {AnimalProduct.cow_milk: 1, Ingredient.sugar: 1})
|
||||
lobster_bisque_ingredients = {Fish.lobster: 1, AnimalProduct.cow_milk: 1}
|
||||
lobster_bisque_friend = friendship_recipe(Meal.lobster_bisque, NPC.willy, 9, lobster_bisque_ingredients)
|
||||
lobster_bisque_qos = queen_of_sauce_recipe(Meal.lobster_bisque, 2, Season.winter, 14, lobster_bisque_ingredients)
|
||||
lucky_lunch = queen_of_sauce_recipe(Meal.lucky_lunch, 2, Season.spring, 28, {Fish.sea_cucumber: 1, Meal.tortilla: 1, Flower.blue_jazz: 1})
|
||||
maki_roll = queen_of_sauce_recipe(Meal.maki_roll, 1, Season.summer, 21, {Fish.any: 1, WaterItem.seaweed: 1, Ingredient.rice: 1})
|
||||
mango_sticky_rice = friendship_recipe(Meal.mango_sticky_rice, NPC.leo, 7, {Fruit.mango: 1, Forageable.coconut: 1, Ingredient.rice: 1})
|
||||
maple_bar = queen_of_sauce_recipe(Meal.maple_bar, 2, Season.summer, 14, {ArtisanGood.maple_syrup: 1, Ingredient.sugar: 1, Ingredient.wheat_flour: 1})
|
||||
miners_treat = skill_recipe(Meal.miners_treat, Skill.mining, 3, {Forageable.cave_carrot: 2, Ingredient.sugar: 1, AnimalProduct.cow_milk: 1})
|
||||
omelet = queen_of_sauce_recipe(Meal.omelet, 1, Season.spring, 28, {AnimalProduct.chicken_egg: 1, AnimalProduct.cow_milk: 1})
|
||||
@@ -159,9 +141,12 @@ pizza_ingredients = {Ingredient.wheat_flour: 1, Vegetable.tomato: 1, ArtisanGood
|
||||
pizza_qos = queen_of_sauce_recipe(Meal.pizza, 2, Season.spring, 7, pizza_ingredients)
|
||||
pizza_saloon = shop_recipe(Meal.pizza, Region.saloon, 150, pizza_ingredients)
|
||||
plum_pudding = queen_of_sauce_recipe(Meal.plum_pudding, 1, Season.winter, 7, {Forageable.wild_plum: 2, Ingredient.wheat_flour: 1, Ingredient.sugar: 1})
|
||||
poi = friendship_recipe(Meal.poi, NPC.leo, 3, {Vegetable.taro_root: 4})
|
||||
poppyseed_muffin = queen_of_sauce_recipe(Meal.poppyseed_muffin, 2, Season.winter, 7, {Flower.poppy: 1, Ingredient.wheat_flour: 1, Ingredient.sugar: 1})
|
||||
pumpkin_pie_ingredients = {Vegetable.pumpkin: 1, Ingredient.wheat_flour: 1, Ingredient.sugar: 1, AnimalProduct.cow_milk: 1}
|
||||
pumpkin_pie_qos = queen_of_sauce_recipe(Meal.pumpkin_pie, 1, Season.winter, 21, pumpkin_pie_ingredients)
|
||||
pumpkin_soup = friendship_recipe(Meal.pumpkin_soup, NPC.robin, 7, {Vegetable.pumpkin: 1, AnimalProduct.cow_milk: 1})
|
||||
radish_salad = queen_of_sauce_recipe(Meal.radish_salad, 1, Season.spring, 21, {Ingredient.oil: 1, Ingredient.vinegar: 1, Vegetable.radish: 1})
|
||||
red_plate = friendship_recipe(Meal.red_plate, NPC.emily, 7, {Vegetable.red_cabbage: 1, Vegetable.radish: 1})
|
||||
rhubarb_pie = friendship_recipe(Meal.rhubarb_pie, NPC.marnie, 7, {Fruit.rhubarb: 1, Ingredient.wheat_flour: 1, Ingredient.sugar: 1})
|
||||
rice_pudding = friendship_recipe(Meal.rice_pudding, NPC.evelyn, 7, {AnimalProduct.milk: 1, Ingredient.sugar: 1, Ingredient.rice: 1})
|
||||
@@ -170,21 +155,59 @@ roots_platter = skill_recipe(Meal.roots_platter, Skill.combat, 3, {Forageable.ca
|
||||
salad = friendship_recipe(Meal.salad, NPC.emily, 3, {Forageable.leek: 1, Forageable.dandelion: 1, Ingredient.vinegar: 1})
|
||||
salmon_dinner = friendship_recipe(Meal.salmon_dinner, NPC.gus, 3, {Fish.salmon: 1, Vegetable.amaranth: 1, Vegetable.kale: 1})
|
||||
sashimi = friendship_recipe(Meal.sashimi, NPC.linus, 3, {Fish.any: 1})
|
||||
seafoam_pudding = skill_recipe(Meal.seafoam_pudding, Skill.fishing, 9, {Fish.flounder: 1, Fish.midnight_carp: 1, AnimalProduct.squid_ink: 1})
|
||||
shrimp_cocktail = queen_of_sauce_recipe(Meal.shrimp_cocktail, 2, Season.winter, 28, {Vegetable.tomato: 1, Fish.shrimp: 1, Forageable.wild_horseradish: 1})
|
||||
spaghetti = friendship_recipe(Meal.spaghetti, NPC.lewis, 3, {Vegetable.tomato: 1, Ingredient.wheat_flour: 1})
|
||||
spicy_eel = friendship_recipe(Meal.spicy_eel, NPC.george, 7, {Fish.eel: 1, Fruit.hot_pepper: 1})
|
||||
squid_ink_ravioli = skill_recipe(Meal.squid_ink_ravioli, Skill.combat, 9, {AnimalProduct.squid_ink: 1, Ingredient.wheat_flour: 1, Vegetable.tomato: 1})
|
||||
stir_fry_ingredients = {Forageable.cave_carrot: 1, Forageable.common_mushroom: 1, Vegetable.kale: 1, Ingredient.sugar: 1}
|
||||
stir_fry_qos = queen_of_sauce_recipe(Meal.stir_fry, 1, Season.spring, 7, stir_fry_ingredients)
|
||||
strange_bun = friendship_recipe(Meal.strange_bun, NPC.shane, 7, {Ingredient.wheat_flour: 1, Fish.periwinkle: 1, ArtisanGood.void_mayonnaise: 1})
|
||||
stuffing = friendship_recipe(Meal.stuffing, NPC.pam, 7, {Meal.bread: 1, Fruit.cranberries: 1, Forageable.hazelnut: 1})
|
||||
super_meal = friendship_recipe(Meal.super_meal, NPC.kent, 7, {Vegetable.bok_choy: 1, Fruit.cranberries: 1, Vegetable.artichoke: 1})
|
||||
survival_burger = skill_recipe(Meal.survival_burger, Skill.foraging, 2, {Meal.bread: 1, Forageable.cave_carrot: 1, Vegetable.eggplant: 1})
|
||||
tom_kha_soup = friendship_recipe(Meal.tom_kha_soup, NPC.sandy, 7, {Forageable.coconut: 1, Fish.shrimp: 1, Forageable.common_mushroom: 1})
|
||||
tortilla_ingredients = {Vegetable.corn: 1}
|
||||
tortilla_qos = queen_of_sauce_recipe(Meal.tortilla, 1, Season.fall, 7, tortilla_ingredients)
|
||||
tortilla_saloon = shop_recipe(Meal.tortilla, Region.saloon, 100, tortilla_ingredients)
|
||||
triple_shot_espresso = shop_recipe(Beverage.triple_shot_espresso, Region.saloon, 5000, {Beverage.coffee: 3})
|
||||
tropical_curry = shop_recipe(Meal.tropical_curry, Region.island_resort, 2000, {Forageable.coconut: 1, Fruit.pineapple: 1, Fruit.hot_pepper: 1})
|
||||
trout_soup = queen_of_sauce_recipe(Meal.trout_soup, 1, Season.fall, 14, {Fish.rainbow_trout: 1, WaterItem.green_algae: 1})
|
||||
vegetable_medley = friendship_recipe(Meal.vegetable_medley, NPC.caroline, 7, {Vegetable.tomato: 1, Vegetable.beet: 1})
|
||||
|
||||
magic_elixir = shop_recipe(ModEdible.magic_elixir, Region.adventurer_guild, 3000, {Edible.life_elixir: 1, Forageable.purple_mushroom: 1}, ModNames.magic)
|
||||
|
||||
baked_berry_oatmeal = shop_recipe(SVEMeal.baked_berry_oatmeal, SVERegion.bear_shop, 0, {Forageable.salmonberry: 15, Forageable.blackberry: 15,
|
||||
Ingredient.sugar: 1, Ingredient.wheat_flour: 2}, ModNames.sve)
|
||||
big_bark_burger = friendship_and_shop_recipe(SVEMeal.big_bark_burger, NPC.gus, 5, Region.saloon, 5500,
|
||||
{SVEFish.puppyfish: 1, Meal.bread: 1, Ingredient.oil: 1}, ModNames.sve)
|
||||
flower_cookie = shop_recipe(SVEMeal.flower_cookie, SVERegion.bear_shop, 0, {SVEForage.ferngill_primrose: 1, SVEForage.goldenrod: 1,
|
||||
SVEForage.winter_star_rose: 1, Ingredient.wheat_flour: 1, Ingredient.sugar: 1,
|
||||
AnimalProduct.large_egg: 1}, ModNames.sve)
|
||||
frog_legs = shop_recipe(SVEMeal.frog_legs, Region.adventurer_guild, 2000, {SVEFish.frog: 1, Ingredient.oil: 1, Ingredient.wheat_flour: 1}, ModNames.sve)
|
||||
glazed_butterfish = friendship_and_shop_recipe(SVEMeal.glazed_butterfish, NPC.gus, 10, Region.saloon, 4000,
|
||||
{SVEFish.butterfish: 1, Ingredient.wheat_flour: 1, Ingredient.oil: 1}, ModNames.sve)
|
||||
mixed_berry_pie = shop_recipe(SVEMeal.mixed_berry_pie, Region.saloon, 3500, {Fruit.strawberry: 6, SVEFruit.salal_berry: 6, Forageable.blackberry: 6,
|
||||
SVEForage.bearberrys: 6, Ingredient.sugar: 1, Ingredient.wheat_flour: 1},
|
||||
ModNames.sve)
|
||||
mushroom_berry_rice = friendship_and_shop_recipe(SVEMeal.mushroom_berry_rice, ModNPC.marlon, 6, Region.adventurer_guild, 1500, {SVEForage.poison_mushroom: 3, SVEForage.red_baneberry: 10,
|
||||
Ingredient.rice: 1, Ingredient.sugar: 2}, ModNames.sve)
|
||||
seaweed_salad = shop_recipe(SVEMeal.seaweed_salad, Region.fish_shop, 1250, {SVEFish.dulse_seaweed: 2, WaterItem.seaweed: 2, Ingredient.oil: 1}, ModNames.sve)
|
||||
void_delight = friendship_and_shop_recipe(SVEMeal.void_delight, NPC.krobus, 10, Region.sewer, 5000,
|
||||
{SVEFish.void_eel: 1, Loot.void_essence: 50, Loot.solar_essence: 20}, ModNames.sve)
|
||||
void_salmon_sushi = friendship_and_shop_recipe(SVEMeal.void_salmon_sushi, NPC.krobus, 10, Region.sewer, 5000,
|
||||
{Fish.void_salmon: 1, ArtisanGood.void_mayonnaise: 1, WaterItem.seaweed: 3}, ModNames.sve)
|
||||
|
||||
mushroom_kebab = friendship_recipe(DistantLandsMeal.mushroom_kebab, ModNPC.goblin, 2, {Forageable.chanterelle: 1, Forageable.common_mushroom: 1,
|
||||
Forageable.red_mushroom: 1, Material.wood: 1}, ModNames.distant_lands)
|
||||
void_mint_tea = friendship_recipe(DistantLandsMeal.void_mint_tea, ModNPC.goblin, 4, {DistantLandsCrop.void_mint: 1}, ModNames.distant_lands)
|
||||
crayfish_soup = friendship_recipe(DistantLandsMeal.crayfish_soup, ModNPC.goblin, 6, {Forageable.cave_carrot: 1, Fish.crayfish: 1,
|
||||
DistantLandsFish.purple_algae: 1, WaterItem.white_algae: 1}, ModNames.distant_lands)
|
||||
pemmican = friendship_recipe(DistantLandsMeal.pemmican, ModNPC.goblin, 8, {Loot.bug_meat: 1, Fish.any: 1, Forageable.salmonberry: 3,
|
||||
Material.stone: 2}, ModNames.distant_lands)
|
||||
|
||||
special_pumpkin_soup = friendship_recipe(BoardingHouseMeal.special_pumpkin_soup, ModNPC.joel, 6, {Vegetable.pumpkin: 2, AnimalProduct.large_goat_milk: 1,
|
||||
Vegetable.garlic: 1}, ModNames.boarding_house)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
all_cooking_recipes_by_name = {recipe.meal: recipe for recipe in all_cooking_recipes}
|
||||
149
worlds/stardew_valley/data/recipe_source.py
Normal file
149
worlds/stardew_valley/data/recipe_source.py
Normal file
@@ -0,0 +1,149 @@
|
||||
from typing import Union, List, Tuple
|
||||
|
||||
|
||||
class RecipeSource:
|
||||
|
||||
def __repr__(self):
|
||||
return f"RecipeSource"
|
||||
|
||||
|
||||
class StarterSource(RecipeSource):
|
||||
|
||||
def __repr__(self):
|
||||
return f"StarterSource"
|
||||
|
||||
|
||||
class ArchipelagoSource(RecipeSource):
|
||||
ap_item: Tuple[str]
|
||||
|
||||
def __init__(self, ap_item: Union[str, List[str]]):
|
||||
if isinstance(ap_item, str):
|
||||
ap_item = [ap_item]
|
||||
self.ap_item = tuple(ap_item)
|
||||
|
||||
def __repr__(self):
|
||||
return f"ArchipelagoSource {self.ap_item}"
|
||||
|
||||
|
||||
class LogicSource(RecipeSource):
|
||||
logic_rule: str
|
||||
|
||||
def __init__(self, logic_rule: str):
|
||||
self.logic_rule = logic_rule
|
||||
|
||||
def __repr__(self):
|
||||
return f"LogicSource {self.logic_rule}"
|
||||
|
||||
|
||||
class QueenOfSauceSource(RecipeSource):
|
||||
year: int
|
||||
season: str
|
||||
day: int
|
||||
|
||||
def __init__(self, year: int, season: str, day: int):
|
||||
self.year = year
|
||||
self.season = season
|
||||
self.day = day
|
||||
|
||||
def __repr__(self):
|
||||
return f"QueenOfSauceSource at year {self.year} {self.season} {self.day}"
|
||||
|
||||
|
||||
class QuestSource(RecipeSource):
|
||||
quest: str
|
||||
|
||||
def __init__(self, quest: str):
|
||||
self.quest = quest
|
||||
|
||||
def __repr__(self):
|
||||
return f"QuestSource at quest {self.quest}"
|
||||
|
||||
|
||||
class FriendshipSource(RecipeSource):
|
||||
friend: str
|
||||
hearts: int
|
||||
|
||||
def __init__(self, friend: str, hearts: int):
|
||||
self.friend = friend
|
||||
self.hearts = hearts
|
||||
|
||||
def __repr__(self):
|
||||
return f"FriendshipSource at {self.friend} {self.hearts} <3"
|
||||
|
||||
|
||||
class CutsceneSource(FriendshipSource):
|
||||
region: str
|
||||
|
||||
def __init__(self, region: str, friend: str, hearts: int):
|
||||
super().__init__(friend, hearts)
|
||||
self.region = region
|
||||
|
||||
def __repr__(self):
|
||||
return f"CutsceneSource at {self.region}"
|
||||
|
||||
|
||||
class SkillSource(RecipeSource):
|
||||
skill: str
|
||||
level: int
|
||||
|
||||
def __init__(self, skill: str, level: int):
|
||||
self.skill = skill
|
||||
self.level = level
|
||||
|
||||
def __repr__(self):
|
||||
return f"SkillSource at level {self.level} {self.skill}"
|
||||
|
||||
|
||||
class ShopSource(RecipeSource):
|
||||
region: str
|
||||
price: int
|
||||
|
||||
def __init__(self, region: str, price: int):
|
||||
self.region = region
|
||||
self.price = price
|
||||
|
||||
def __repr__(self):
|
||||
return f"ShopSource at {self.region} costing {self.price}g"
|
||||
|
||||
|
||||
class ShopFriendshipSource(RecipeSource):
|
||||
friend: str
|
||||
hearts: int
|
||||
region: str
|
||||
price: int
|
||||
|
||||
def __init__(self, friend: str, hearts: int, region: str, price: int):
|
||||
self.friend = friend
|
||||
self.hearts = hearts
|
||||
self.region = region
|
||||
self.price = price
|
||||
|
||||
def __repr__(self):
|
||||
return f"ShopFriendshipSource at {self.region} costing {self.price}g when {self.friend} has {self.hearts} hearts"
|
||||
|
||||
|
||||
class FestivalShopSource(ShopSource):
|
||||
|
||||
def __init__(self, region: str, price: int):
|
||||
super().__init__(region, price)
|
||||
|
||||
|
||||
class ShopTradeSource(ShopSource):
|
||||
currency: str
|
||||
|
||||
def __init__(self, region: str, currency: str, price: int):
|
||||
super().__init__(region, price)
|
||||
self.currency = currency
|
||||
|
||||
def __repr__(self):
|
||||
return f"ShopTradeSource at {self.region} costing {self.price} {self.currency}"
|
||||
|
||||
|
||||
class SpecialOrderSource(RecipeSource):
|
||||
special_order: str
|
||||
|
||||
def __init__(self, special_order: str):
|
||||
self.special_order = special_order
|
||||
|
||||
def __repr__(self):
|
||||
return f"SpecialOrderSource from {self.special_order}"
|
||||
@@ -1,7 +1,10 @@
|
||||
from dataclasses import dataclass
|
||||
from typing import List, Tuple, Optional, Dict
|
||||
from ..strings.region_names import Region
|
||||
from typing import List, Tuple, Optional, Dict, Callable, Set
|
||||
|
||||
from ..mods.mod_data import ModNames
|
||||
from ..strings.food_names import Beverage
|
||||
from ..strings.generic_names import Generic
|
||||
from ..strings.region_names import Region, SVERegion, AlectoRegion, BoardingHouseRegion, LaceyRegion
|
||||
from ..strings.season_names import Season
|
||||
from ..strings.villager_names import NPC, ModNPC
|
||||
|
||||
@@ -14,7 +17,7 @@ class Villager:
|
||||
birthday: str
|
||||
gifts: Tuple[str]
|
||||
available: bool
|
||||
mod_name: Optional[str]
|
||||
mod_name: str
|
||||
|
||||
def __repr__(self):
|
||||
return f"{self.name} [Bachelor: {self.bachelor}] [Available from start: {self.available}]" \
|
||||
@@ -41,6 +44,23 @@ island = (Region.island_east,)
|
||||
secret_woods = (Region.secret_woods,)
|
||||
wizard_tower = (Region.wizard_tower,)
|
||||
|
||||
# Stardew Valley Expanded Locations
|
||||
adventurer = (Region.adventurer_guild,)
|
||||
highlands = (SVERegion.highlands_outside,)
|
||||
bluemoon = (SVERegion.blue_moon_vineyard,)
|
||||
aurora = (SVERegion.aurora_vineyard,)
|
||||
museum = (Region.museum,)
|
||||
jojamart = (Region.jojamart,)
|
||||
railroad = (Region.railroad,)
|
||||
junimo = (SVERegion.junimo_woods,)
|
||||
|
||||
# Stray Locations
|
||||
witch_swamp = (Region.witch_swamp,)
|
||||
witch_attic = (AlectoRegion.witch_attic,)
|
||||
hat_house = (LaceyRegion.hat_house,)
|
||||
the_lost_valley = (BoardingHouseRegion.the_lost_valley,)
|
||||
boarding_house = (BoardingHouseRegion.boarding_house_first,)
|
||||
|
||||
golden_pumpkin = ("Golden Pumpkin",)
|
||||
# magic_rock_candy = ("Magic Rock Candy",)
|
||||
pearl = ("Pearl",)
|
||||
@@ -183,7 +203,7 @@ mead = ("Mead",)
|
||||
pale_ale = ("Pale Ale",)
|
||||
parsnip = ("Parsnip",)
|
||||
# parsnip_soup = ("Parsnip Soup",)
|
||||
pina_colada = ("Piña Colada",)
|
||||
pina_colada = (Beverage.pina_colada,)
|
||||
pam_loves = beer + cactus_fruit + glazed_yams + mead + pale_ale + parsnip + pina_colada # | parsnip_soup
|
||||
# fried_calamari = ("Fried Calamari",)
|
||||
pierre_loves = () # fried_calamari
|
||||
@@ -209,7 +229,7 @@ super_cucumber = ("Super Cucumber",)
|
||||
void_essence = ("Void Essence",)
|
||||
wizard_loves = purple_mushroom + solar_essence + super_cucumber + void_essence
|
||||
|
||||
#Custom NPC Items and Loves
|
||||
# Custom NPC Items and Loves
|
||||
|
||||
blueberry = ("Blueberry",)
|
||||
chanterelle = ("Chanterelle",)
|
||||
@@ -271,8 +291,72 @@ jasper_loves = apple + blueberry + diamond + dwarf_gadget + dwarvish_helm + fire
|
||||
juna_loves = ancient_doll + elvish_jewelry + dinosaur_egg + strange_doll + joja_cola + hashbrowns + pancakes + \
|
||||
pink_cake + jelly + ghost_crystal + prehistoric_scapula + cherry
|
||||
|
||||
glazed_butterfish = ("Glazed Butterfish",)
|
||||
aged_blue_moon_wine = ("Aged Blue Moon Wine",)
|
||||
blue_moon_wine = ("Blue Moon Wine",)
|
||||
daggerfish = ("Daggerfish",)
|
||||
gemfish = ("Gemfish",)
|
||||
green_mushroom = ("Green Mushroom",)
|
||||
monster_mushroom = ("Monster Mushroom",)
|
||||
swirl_stone = ("Swirl Stone",)
|
||||
torpedo_trout = ("Torpedo Trout",)
|
||||
void_shard = ("Void Shard",)
|
||||
ornate_treasure_chest = ("Ornate Treasure Chest",)
|
||||
frog_legs = ("Frog Legs",)
|
||||
void_delight = ("Void Delight",)
|
||||
void_pebble = ("Void Pebble",)
|
||||
void_salmon_sushi = ("Void Salmon Sushi",)
|
||||
puppyfish = ("Puppyfish",)
|
||||
butterfish = ("Butterfish",)
|
||||
king_salmon = ("King Salmon",)
|
||||
frog = ("Frog",)
|
||||
kittyfish = ("Kittyfish",)
|
||||
big_bark_burger = ("Big Bark Burger",)
|
||||
starfruit = ("Starfruit",)
|
||||
bruschetta = ("Brushetta",)
|
||||
apricot = ("Apricot",)
|
||||
ocean_stone = ("Ocean Stone",)
|
||||
fairy_stone = ("Fairy Stone",)
|
||||
lunarite = ("Lunarite",)
|
||||
bean_hotpot = ("Bean Hotpot",)
|
||||
petrified_slime = ("Petrified Slime",)
|
||||
ornamental_fan = ("Ornamental Fan",)
|
||||
ancient_sword = ("Ancient Sword",)
|
||||
star_shards = ("Star Shards",)
|
||||
life_elixir = ("Life Elixir",)
|
||||
juice = ("Juice",)
|
||||
lobster_bisque = ("Lobster Bisque",)
|
||||
chowder = ("Chowder",)
|
||||
goat_milk = ("Goat Milk",)
|
||||
maple_syrup = ("Maple Syrup",)
|
||||
cookie = ("Cookie",)
|
||||
blueberry_tart = ("Blueberry Tart",)
|
||||
|
||||
claire_loves = green_tea + sunflower + energy_tonic + bruschetta + apricot + ocean_stone + glazed_butterfish
|
||||
lance_loves = aged_blue_moon_wine + daggerfish + gemfish + golden_pumpkin + \
|
||||
green_mushroom + monster_mushroom + swirl_stone + torpedo_trout + tropical_curry + void_shard + \
|
||||
ornate_treasure_chest
|
||||
olivia_loves = wine + chocolate_cake + pink_cake + golden_mask + golden_relic + \
|
||||
blue_moon_wine + aged_blue_moon_wine
|
||||
sophia_loves = fairy_rose + fairy_stone + puppyfish
|
||||
victor_loves = spaghetti + battery_pack + duck_feather + lunarite + \
|
||||
aged_blue_moon_wine + blue_moon_wine + butterfish
|
||||
andy_loves = pearl + beer + mead + pale_ale + farmers_lunch + glazed_butterfish + butterfish + \
|
||||
king_salmon + blackberry_cobbler
|
||||
gunther_loves = bean_hotpot + petrified_slime + salmon_dinner + elvish_jewelry + ornamental_fan + \
|
||||
dinosaur_egg + rare_disc + ancient_sword + dwarvish_helm + dwarf_gadget + golden_mask + golden_relic + \
|
||||
star_shards
|
||||
marlon_loves = roots_platter + life_elixir + aged_blue_moon_wine + void_delight
|
||||
martin_loves = juice + ice_cream + big_bark_burger
|
||||
morgan_loves = iridium_bar + void_egg + void_mayonnaise + frog + kittyfish
|
||||
morris_loves = lobster_bisque + chowder + truffle_oil + star_shards + aged_blue_moon_wine
|
||||
scarlett_loves = goat_cheese + duck_feather + goat_milk + cherry + maple_syrup + honey + \
|
||||
chocolate_cake + pink_cake + jade + glazed_yams # actually large milk but meh
|
||||
susan_loves = pancakes + chocolate_cake + pink_cake + ice_cream + cookie + pumpkin_pie + rhubarb_pie + \
|
||||
blueberry_tart + blackberry_cobbler + cranberry_candy + red_plate
|
||||
|
||||
all_villagers: List[Villager] = []
|
||||
villager_modifications_by_mod: Dict[str, Dict[str, Callable[[str, Villager], Villager]]] = {}
|
||||
|
||||
|
||||
def villager(name: str, bachelor: bool, locations: Tuple[str, ...], birthday: str, gifts: Tuple[str, ...],
|
||||
@@ -282,6 +366,18 @@ def villager(name: str, bachelor: bool, locations: Tuple[str, ...], birthday: st
|
||||
return npc
|
||||
|
||||
|
||||
def make_bachelor(mod_name: str, npc: Villager):
|
||||
if npc.mod_name:
|
||||
mod_name = npc.mod_name
|
||||
return Villager(npc.name, True, npc.locations, npc.birthday, npc.gifts, npc.available, mod_name)
|
||||
|
||||
|
||||
def register_villager_modification(mod_name: str, npc: Villager, modification_function):
|
||||
if mod_name not in villager_modifications_by_mod:
|
||||
villager_modifications_by_mod[mod_name] = {}
|
||||
villager_modifications_by_mod[mod_name][npc.name] = modification_function
|
||||
|
||||
|
||||
josh = villager(NPC.alex, True, town + alex_house, Season.summer, universal_loves + complete_breakfast + salmon_dinner, True)
|
||||
elliott = villager(NPC.elliott, True, town + beach + elliott_house, Season.fall, universal_loves + elliott_loves, True)
|
||||
harvey = villager(NPC.harvey, True, town + hospital, Season.winter, universal_loves + harvey_loves, True)
|
||||
@@ -326,13 +422,42 @@ jasper = villager(ModNPC.jasper, True, town, Season.fall, universal_loves + jasp
|
||||
juna = villager(ModNPC.juna, False, forest, Season.summer, universal_loves + juna_loves, True, ModNames.juna)
|
||||
kitty = villager(ModNPC.mr_ginger, False, forest, Season.summer, universal_loves + mister_ginger_loves, True, ModNames.ginger)
|
||||
shiko = villager(ModNPC.shiko, True, town, Season.winter, universal_loves + shiko_loves, True, ModNames.shiko)
|
||||
wellwick = villager(ModNPC.wellwick, True, forest, Season.winter, universal_loves + wellwick_loves, True, ModNames.shiko)
|
||||
wellwick = villager(ModNPC.wellwick, True, forest, Season.winter, universal_loves + wellwick_loves, True, ModNames.wellwick)
|
||||
yoba = villager(ModNPC.yoba, False, secret_woods, Season.spring, universal_loves + yoba_loves, False, ModNames.yoba)
|
||||
riley = villager(ModNPC.riley, True, town, Season.spring, universal_loves, True, ModNames.riley)
|
||||
zic = villager(ModNPC.goblin, False, witch_swamp, Season.fall, void_mayonnaise, False, ModNames.distant_lands)
|
||||
alecto = villager(ModNPC.alecto, False, witch_attic, Generic.any, universal_loves, False, ModNames.alecto)
|
||||
lacey = villager(ModNPC.lacey, True, forest, Season.spring, universal_loves, True, ModNames.lacey)
|
||||
|
||||
# Boarding House Villagers
|
||||
gregory = villager(ModNPC.gregory, True, the_lost_valley, Season.fall, universal_loves, False, ModNames.boarding_house)
|
||||
sheila = villager(ModNPC.sheila, True, boarding_house, Season.spring, universal_loves, True, ModNames.boarding_house)
|
||||
joel = villager(ModNPC.joel, False, boarding_house, Season.winter, universal_loves, True, ModNames.boarding_house)
|
||||
|
||||
# SVE Villagers
|
||||
claire = villager(ModNPC.claire, True, town + jojamart, Season.fall, universal_loves + claire_loves, True, ModNames.sve)
|
||||
lance = villager(ModNPC.lance, True, adventurer + highlands + island, Season.spring, lance_loves, False, ModNames.sve)
|
||||
mommy = villager(ModNPC.olivia, True, town, Season.spring, universal_loves_no_rabbit_foot + olivia_loves, True, ModNames.sve)
|
||||
sophia = villager(ModNPC.sophia, True, bluemoon, Season.winter, universal_loves_no_rabbit_foot + sophia_loves, True, ModNames.sve)
|
||||
victor = villager(ModNPC.victor, True, town, Season.summer, universal_loves + victor_loves, True, ModNames.sve)
|
||||
andy = villager(ModNPC.andy, False, forest, Season.spring, universal_loves + andy_loves, True, ModNames.sve)
|
||||
apples = villager(ModNPC.apples, False, aurora + junimo, Generic.any, starfruit, False, ModNames.sve)
|
||||
gunther = villager(ModNPC.gunther, False, museum, Season.winter, universal_loves + gunther_loves, True, ModNames.jasper_sve)
|
||||
martin = villager(ModNPC.martin, False, town + jojamart, Season.summer, universal_loves + martin_loves, True, ModNames.sve)
|
||||
marlon = villager(ModNPC.marlon, False, adventurer, Season.winter, universal_loves + marlon_loves, False, ModNames.jasper_sve)
|
||||
morgan = villager(ModNPC.morgan, False, forest, Season.fall, universal_loves_no_rabbit_foot + morgan_loves, False, ModNames.sve)
|
||||
scarlett = villager(ModNPC.scarlett, False, bluemoon, Season.summer, universal_loves + scarlett_loves, False, ModNames.sve)
|
||||
susan = villager(ModNPC.susan, False, railroad, Season.fall, universal_loves + susan_loves, False, ModNames.sve)
|
||||
morris = villager(ModNPC.morris, False, jojamart, Season.spring, universal_loves + morris_loves, True, ModNames.sve)
|
||||
|
||||
# Modified villagers; not included in all villagers
|
||||
|
||||
register_villager_modification(ModNames.sve, wizard, make_bachelor)
|
||||
|
||||
all_villagers_by_name: Dict[str, Villager] = {villager.name: villager for villager in all_villagers}
|
||||
all_villagers_by_mod: Dict[str, List[Villager]] = {}
|
||||
all_villagers_by_mod_by_name: Dict[str, Dict[str, Villager]] = {}
|
||||
|
||||
for npc in all_villagers:
|
||||
mod = npc.mod_name
|
||||
name = npc.name
|
||||
@@ -344,3 +469,27 @@ for npc in all_villagers:
|
||||
all_villagers_by_mod_by_name[mod] = {}
|
||||
all_villagers_by_mod_by_name[mod][name] = npc
|
||||
|
||||
|
||||
def villager_included_for_any_mod(npc: Villager, mods: Set[str]):
|
||||
if not npc.mod_name:
|
||||
return True
|
||||
for mod in npc.mod_name.split(","):
|
||||
if mod in mods:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def get_villagers_for_mods(mods: Set[str]) -> List[Villager]:
|
||||
villagers_for_current_mods = []
|
||||
for npc in all_villagers:
|
||||
if not villager_included_for_any_mod(npc, mods):
|
||||
continue
|
||||
modified_npc = npc
|
||||
for active_mod in mods:
|
||||
if (active_mod not in villager_modifications_by_mod or
|
||||
npc.name not in villager_modifications_by_mod[active_mod]):
|
||||
continue
|
||||
modification = villager_modifications_by_mod[active_mod][npc.name]
|
||||
modified_npc = modification(active_mod, modified_npc)
|
||||
villagers_for_current_mods.append(modified_npc)
|
||||
return villagers_for_current_mods
|
||||
|
||||
Reference in New Issue
Block a user