mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
Stardew Valley: Refactor skill progression to use new feature system (#3662)
* create a first draft of the feature * use feature in items and locations * add content to more places * use feature in logic * replace option check by feature * remove unused code * remove weird white space * some import nitpicking * flip negative if
This commit is contained in:
@@ -21,7 +21,7 @@ from .logic.tool_logic import tool_upgrade_prices
|
||||
from .mods.mod_data import ModNames
|
||||
from .options import StardewValleyOptions, Walnutsanity
|
||||
from .options import ToolProgression, BuildingProgression, ExcludeGingerIsland, SpecialOrderLocations, Museumsanity, BackpackProgression, Shipsanity, \
|
||||
Monstersanity, Chefsanity, Craftsanity, ArcadeMachineLocations, Cooksanity, SkillProgression
|
||||
Monstersanity, Chefsanity, Craftsanity, ArcadeMachineLocations, Cooksanity
|
||||
from .stardew_rule import And, StardewRule, true_
|
||||
from .stardew_rule.indirect_connection import look_for_indirect_connection
|
||||
from .stardew_rule.rule_explain import explain
|
||||
@@ -47,7 +47,7 @@ from .strings.performance_names import Performance
|
||||
from .strings.quest_names import Quest
|
||||
from .strings.region_names import Region
|
||||
from .strings.season_names import Season
|
||||
from .strings.skill_names import ModSkill, Skill
|
||||
from .strings.skill_names import Skill
|
||||
from .strings.tool_names import Tool, ToolMaterial
|
||||
from .strings.tv_channel_names import Channel
|
||||
from .strings.villager_names import NPC, ModNPC
|
||||
@@ -70,7 +70,7 @@ def set_rules(world):
|
||||
set_ginger_island_rules(logic, multiworld, player, world_options)
|
||||
|
||||
set_tool_rules(logic, multiworld, player, world_options)
|
||||
set_skills_rules(logic, multiworld, player, world_options)
|
||||
set_skills_rules(logic, multiworld, player, world_content)
|
||||
set_bundle_rules(bundle_rooms, logic, multiworld, player, world_options)
|
||||
set_building_rules(logic, multiworld, player, world_options)
|
||||
set_cropsanity_rules(logic, multiworld, player, world_content)
|
||||
@@ -164,58 +164,21 @@ def set_bundle_rules(bundle_rooms: List[BundleRoom], logic: StardewLogic, multiw
|
||||
MultiWorldRules.add_rule(multiworld.get_location(room_location, player), And(*room_rules))
|
||||
|
||||
|
||||
def set_skills_rules(logic: StardewLogic, multiworld, player, world_options: StardewValleyOptions):
|
||||
mods = world_options.mods
|
||||
if world_options.skill_progression == SkillProgression.option_vanilla:
|
||||
def set_skills_rules(logic: StardewLogic, multiworld: MultiWorld, player: int, content: StardewContent):
|
||||
skill_progression = content.features.skill_progression
|
||||
if not skill_progression.is_progressive:
|
||||
return
|
||||
|
||||
for i in range(1, 11):
|
||||
set_vanilla_skill_rule_for_level(logic, multiworld, player, i)
|
||||
set_modded_skill_rule_for_level(logic, multiworld, player, mods, i)
|
||||
for skill in content.skills.values():
|
||||
for level, level_name in skill_progression.get_randomized_level_names_by_level(skill):
|
||||
rule = logic.skill.can_earn_level(skill.name, level)
|
||||
location = multiworld.get_location(level_name, player)
|
||||
MultiWorldRules.set_rule(location, rule)
|
||||
|
||||
if world_options.skill_progression == SkillProgression.option_progressive:
|
||||
return
|
||||
|
||||
for skill in [Skill.farming, Skill.fishing, Skill.foraging, Skill.mining, Skill.combat]:
|
||||
MultiWorldRules.set_rule(multiworld.get_location(f"{skill} Mastery", player), logic.skill.can_earn_mastery(skill))
|
||||
|
||||
|
||||
def set_vanilla_skill_rule_for_level(logic: StardewLogic, multiworld, player, level: int):
|
||||
set_vanilla_skill_rule(logic, multiworld, player, Skill.farming, level)
|
||||
set_vanilla_skill_rule(logic, multiworld, player, Skill.fishing, level)
|
||||
set_vanilla_skill_rule(logic, multiworld, player, Skill.foraging, level)
|
||||
set_vanilla_skill_rule(logic, multiworld, player, Skill.mining, level)
|
||||
set_vanilla_skill_rule(logic, multiworld, player, Skill.combat, level)
|
||||
|
||||
|
||||
def set_modded_skill_rule_for_level(logic: StardewLogic, multiworld, player, mods, level: int):
|
||||
if ModNames.luck_skill in mods:
|
||||
set_modded_skill_rule(logic, multiworld, player, ModSkill.luck, level)
|
||||
if ModNames.magic in mods:
|
||||
set_modded_skill_rule(logic, multiworld, player, ModSkill.magic, level)
|
||||
if ModNames.binning_skill in mods:
|
||||
set_modded_skill_rule(logic, multiworld, player, ModSkill.binning, level)
|
||||
if ModNames.cooking_skill in mods:
|
||||
set_modded_skill_rule(logic, multiworld, player, ModSkill.cooking, level)
|
||||
if ModNames.socializing_skill in mods:
|
||||
set_modded_skill_rule(logic, multiworld, player, ModSkill.socializing, level)
|
||||
if ModNames.archaeology in mods:
|
||||
set_modded_skill_rule(logic, multiworld, player, ModSkill.archaeology, level)
|
||||
|
||||
|
||||
def get_skill_level_location(multiworld, player, skill: str, level: int):
|
||||
location_name = f"Level {level} {skill}"
|
||||
return multiworld.get_location(location_name, player)
|
||||
|
||||
|
||||
def set_vanilla_skill_rule(logic: StardewLogic, multiworld, player, skill: str, level: int):
|
||||
rule = logic.skill.can_earn_level(skill, level)
|
||||
MultiWorldRules.set_rule(get_skill_level_location(multiworld, player, skill, level), rule)
|
||||
|
||||
|
||||
def set_modded_skill_rule(logic: StardewLogic, multiworld, player, skill: str, level: int):
|
||||
rule = logic.skill.can_earn_level(skill, level)
|
||||
MultiWorldRules.set_rule(get_skill_level_location(multiworld, player, skill, level), rule)
|
||||
if skill_progression.is_mastery_randomized(skill):
|
||||
rule = logic.skill.can_earn_mastery(skill.name)
|
||||
location = multiworld.get_location(skill.mastery_name, player)
|
||||
MultiWorldRules.set_rule(location, rule)
|
||||
|
||||
|
||||
def set_entrance_rules(logic: StardewLogic, multiworld, player, world_options: StardewValleyOptions):
|
||||
|
||||
Reference in New Issue
Block a user