Skip to content

Commit 5d37d64

Browse files
agilbert1412kl3cks7r
authored and
kl3cks7r
committed
Stardew Valley: Fixed Help wanted rules, added missing coffee bean to cropsanity (ArchipelagoMW#2089)
* - Added missing coffee bean to cropsanity * - Fix an issue with the seed having the same name as the crop * - Fix a recently discovered bug with help wanted rules when using a number not divisible by 7
1 parent 4d3f888 commit 5d37d64

File tree

5 files changed

+49
-19
lines changed

5 files changed

+49
-19
lines changed

worlds/stardew_valley/data/crops.csv

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Blueberry,Summer,Blueberry Seeds,Summer,"Pierre's General Store,JojaMart"
77
Bok Choy,Fall,Bok Choy Seeds,Fall,"Pierre's General Store,JojaMart"
88
Cactus Fruit,,Cactus Seeds,,Oasis
99
Cauliflower,Spring,Cauliflower Seeds,Spring,"Pierre's General Store,JojaMart"
10+
Coffee Bean,"Spring,Summer",Coffee Bean,"Summer,Fall","Traveling Cart"
1011
Corn,"Summer,Fall",Corn Seeds,"Summer,Fall","Pierre's General Store,JojaMart"
1112
Cranberries,Fall,Cranberry Seeds,Fall,"Pierre's General Store,JojaMart"
1213
Eggplant,Fall,Eggplant Seeds,Fall,"Pierre's General Store,JojaMart"

worlds/stardew_valley/data/items.csv

+1
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ id,name,classification,groups,mod_name
272272
285,Ugly Baby,progression,"BABY",
273273
286,Deluxe Scarecrow Recipe,progression,"FESTIVAL,RARECROW",
274274
287,Treehouse,progression,"GINGER_ISLAND",
275+
288,Coffee Bean,progression,CROPSANITY,
275276
4001,Burnt,trap,TRAP,
276277
4002,Darkness,trap,TRAP,
277278
4003,Frozen,trap,TRAP,

worlds/stardew_valley/data/locations.csv

+1
Original file line numberDiff line numberDiff line change
@@ -1036,6 +1036,7 @@ id,region,name,tags,mod_name
10361036
2344,Farm,Harvest Peach,"CROPSANITY",
10371037
2345,Farm,Harvest Banana,"CROPSANITY,GINGER_ISLAND",
10381038
2346,Farm,Harvest Mango,"CROPSANITY,GINGER_ISLAND",
1039+
2347,Farm,Harvest Coffee Bean,"CROPSANITY",
10391040
5001,Stardew Valley,Level 1 Luck,"LUCK_LEVEL,SKILL_LEVEL",Luck Skill
10401041
5002,Stardew Valley,Level 2 Luck,"LUCK_LEVEL,SKILL_LEVEL",Luck Skill
10411042
5003,Stardew Valley,Level 3 Luck,"LUCK_LEVEL,SKILL_LEVEL",Luck Skill

worlds/stardew_valley/logic.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from . import options
88
from .data import all_fish, FishItem, all_purchasable_seeds, SeedItem, all_crops, CropItem
99
from .data.bundle_data import BundleItem
10+
from .data.crops_data import crops_by_name
1011
from .data.fish_data import island_fish
1112
from .data.museum_data import all_museum_items, MuseumItem, all_artifact_items, dwarf_scrolls
1213
from .data.recipe_data import all_cooking_recipes, CookingRecipe, RecipeSource, FriendshipSource, QueenOfSauceSource, \
@@ -139,7 +140,7 @@ def __post_init__(self):
139140
self.crop_rules.update({crop.name: self.can_grow_crop(crop) for crop in all_crops})
140141
self.crop_rules.update({
141142
Seed.coffee: (self.has_season(Season.spring) | self.has_season(
142-
Season.summer)) & self.has_traveling_merchant(),
143+
Season.summer)) & self.can_buy_seed(crops_by_name[Seed.coffee].seed),
143144
Fruit.ancient_fruit: (self.received("Ancient Seeds") | self.received("Ancient Seeds Recipe")) &
144145
self.can_reach_region(Region.greenhouse) & self.has(Machine.seed_maker),
145146
})

worlds/stardew_valley/rules.py

+44-18
Original file line numberDiff line numberDiff line change
@@ -357,25 +357,51 @@ def set_special_order_rules(all_location_names: List[str], logic: StardewLogic,
357357
MultiWorldRules.set_rule(multi_world.get_location(qi_order.name, player), order_rule.simplify())
358358

359359

360+
help_wanted_prefix = "Help Wanted:"
361+
item_delivery = "Item Delivery"
362+
gathering = "Gathering"
363+
fishing = "Fishing"
364+
slay_monsters = "Slay Monsters"
365+
366+
360367
def set_help_wanted_quests_rules(logic: StardewLogic, multi_world, player, world_options):
361-
desired_number_help_wanted: int = world_options[options.HelpWantedLocations] // 7
362-
for i in range(0, desired_number_help_wanted):
363-
prefix = "Help Wanted:"
364-
delivery = "Item Delivery"
365-
rule = logic.has_lived_months(i).simplify()
366-
fishing_rule = rule & logic.can_fish()
367-
slay_rule = rule & logic.can_do_combat_at_level("Basic")
368-
item_delivery_index = (i * 4) + 1
369-
for j in range(item_delivery_index, item_delivery_index + 4):
370-
location_name = f"{prefix} {delivery} {j}"
371-
MultiWorldRules.set_rule(multi_world.get_location(location_name, player), rule)
372-
373-
MultiWorldRules.set_rule(multi_world.get_location(f"{prefix} Gathering {i + 1}", player),
374-
rule)
375-
MultiWorldRules.set_rule(multi_world.get_location(f"{prefix} Fishing {i + 1}", player),
376-
fishing_rule.simplify())
377-
MultiWorldRules.set_rule(multi_world.get_location(f"{prefix} Slay Monsters {i + 1}", player),
378-
slay_rule.simplify())
368+
help_wanted_number = world_options[options.HelpWantedLocations]
369+
for i in range(0, help_wanted_number):
370+
set_number = i // 7
371+
month_rule = logic.has_lived_months(set_number).simplify()
372+
quest_number = set_number + 1
373+
quest_number_in_set = i % 7
374+
if quest_number_in_set < 4:
375+
quest_number = set_number * 4 + quest_number_in_set + 1
376+
set_help_wanted_delivery_rule(multi_world, player, month_rule, quest_number)
377+
elif quest_number_in_set == 4:
378+
set_help_wanted_fishing_rule(logic, multi_world, player, month_rule, quest_number)
379+
elif quest_number_in_set == 5:
380+
set_help_wanted_slay_monsters_rule(logic, multi_world, player, month_rule, quest_number)
381+
elif quest_number_in_set == 6:
382+
set_help_wanted_gathering_rule(multi_world, player, month_rule, quest_number)
383+
384+
385+
def set_help_wanted_delivery_rule(multi_world, player, month_rule, quest_number):
386+
location_name = f"{help_wanted_prefix} {item_delivery} {quest_number}"
387+
MultiWorldRules.set_rule(multi_world.get_location(location_name, player), month_rule)
388+
389+
390+
def set_help_wanted_gathering_rule(multi_world, player, month_rule, quest_number):
391+
location_name = f"{help_wanted_prefix} {gathering} {quest_number}"
392+
MultiWorldRules.set_rule(multi_world.get_location(location_name, player), month_rule)
393+
394+
395+
def set_help_wanted_fishing_rule(logic: StardewLogic, multi_world, player, month_rule, quest_number):
396+
location_name = f"{help_wanted_prefix} {fishing} {quest_number}"
397+
fishing_rule = month_rule & logic.can_fish()
398+
MultiWorldRules.set_rule(multi_world.get_location(location_name, player), fishing_rule.simplify())
399+
400+
401+
def set_help_wanted_slay_monsters_rule(logic: StardewLogic, multi_world, player, month_rule, quest_number):
402+
location_name = f"{help_wanted_prefix} {slay_monsters} {quest_number}"
403+
slay_rule = month_rule & logic.can_do_combat_at_level("Basic")
404+
MultiWorldRules.set_rule(multi_world.get_location(location_name, player), slay_rule.simplify())
379405

380406

381407
def set_fishsanity_rules(all_location_names: List[str], logic: StardewLogic, multi_world: MultiWorld, player: int):

0 commit comments

Comments
 (0)