Improve performance of Yacht Dice

This commit is contained in:
NewSoupVi
2024-06-07 21:49:24 +02:00
parent 41cd899abf
commit 3e8d89f2e0
2 changed files with 34 additions and 8 deletions

View File

@@ -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

View File

@@ -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
return item
def collect(self, state, item: Item) -> bool:
change = super().collect(state, item)
if change and item.advancement:
state.prog_items[self.player]["state_is_fresh"] = 0
return change
def remove(self, state, item: Item) -> bool:
change = super().remove(state, item)
if change and item.advancement:
state.prog_items[self.player]["state_is_fresh"] = 0
return change