diff --git a/worlds/yachtdice/Rules.py b/worlds/yachtdice/Rules.py index a81e17bb56..e5e8e768b6 100644 --- a/worlds/yachtdice/Rules.py +++ b/worlds/yachtdice/Rules.py @@ -205,17 +205,29 @@ def dice_simulation_strings(categories, num_dice, num_rolls, fixed_mult, step_mu # Returns the feasible score that one can reach with the current state, options and difficulty. def dice_simulation(state, player, options): - categories, num_dice, num_rolls, fixed_mult, step_mult, expoints = extract_progression(state, player, options) - return dice_simulation_strings(categories, num_dice, num_rolls, fixed_mult, step_mult, - options.game_difficulty.value) + expoints + if player == "state_is_a_list": + categories, num_dice, num_rolls, fixed_mult, step_mult, expoints = extract_progression(state, player, options) + return dice_simulation_strings( + categories, num_dice, num_rolls, fixed_mult, step_mult, options.game_difficulty.value + ) + expoints + if state.prog_items[player]["state_is_fresh"] == 0: + state.prog_items[player]["state_is_fresh"] = 1 + categories, num_dice, num_rolls, fixed_mult, step_mult, expoints = extract_progression(state, player, options) + state.prog_items[player]["maximum_achievable_score"] = dice_simulation_strings( + categories, num_dice, num_rolls, fixed_mult, step_mult, options.game_difficulty.value + ) + expoints + + return state.prog_items[player]["maximum_achievable_score"] + + # Sets rules on entrances and advancements that are always applied def set_yacht_rules(world: MultiWorld, player: int, options): for l in world.get_locations(player): - set_rule(l, - lambda state, - curscore=l.yacht_dice_score, - player=player: + set_rule(l, + lambda state, + curscore=l.yacht_dice_score, + player=player: dice_simulation(state, player, options) >= curscore) # Sets rules on completion condition diff --git a/worlds/yachtdice/__init__.py b/worlds/yachtdice/__init__.py index 162b8e0832..9bcabd9dcf 100644 --- a/worlds/yachtdice/__init__.py +++ b/worlds/yachtdice/__init__.py @@ -1,7 +1,7 @@ import math import logging -from BaseClasses import Region, Entrance, Item, Tutorial +from BaseClasses import Region, Entrance, Item, Tutorial, CollectionState from .Items import YachtDiceItem, item_table, item_groups from .Locations import YachtDiceLocation, all_locations, ini_locations from .Options import YachtDiceOptions @@ -395,4 +395,18 @@ class YachtDiceWorld(World): def create_item(self, name: str) -> Item: item_data = item_table[name] item = YachtDiceItem(name, item_data.classification, item_data.code, self.player) - return item \ No newline at end of file + return item + + def collect(self, state: CollectionState, item: Item) -> bool: + change = super().collect(state, item) + if change: + state.prog_items[self.player]["state_is_fresh"] = 0 + + return change + + def remove(self, state: CollectionState, item: Item) -> bool: + change = super().remove(state, item) + if change: + state.prog_items[self.player]["state_is_fresh"] = 0 + + return change