mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-04-22 18:13:34 -07:00
Comments to docstrings
This commit is contained in:
@@ -21,14 +21,20 @@ all_locations = {}
|
|||||||
starting_index = 16871244500 # 500 more than the starting index for items
|
starting_index = 16871244500 # 500 more than the starting index for items
|
||||||
|
|
||||||
|
|
||||||
# Function that is called when this file is loaded, which loads in ALL possible locations, score 1 to 1000
|
|
||||||
def all_locations_fun(max_score):
|
def all_locations_fun(max_score):
|
||||||
|
"""
|
||||||
|
Function that is called when this file is loaded, which loads in ALL possible locations, score 1 to 1000
|
||||||
|
"""
|
||||||
return {f"{i} score": LocData(starting_index + i, "Board", i) for i in range(max_score + 1)}
|
return {f"{i} score": LocData(starting_index + i, "Board", i) for i in range(max_score + 1)}
|
||||||
|
|
||||||
|
|
||||||
# function that loads in all locations necessary for the game, so based on options.
|
|
||||||
# will make sure that goal_score and max_score are included locations
|
|
||||||
def ini_locations(goal_score, max_score, num_locs, dif):
|
def ini_locations(goal_score, max_score, num_locs, dif):
|
||||||
|
"""
|
||||||
|
function that loads in all locations necessary for the game, so based on options.
|
||||||
|
will make sure that goal_score and max_score are included locations
|
||||||
|
"""
|
||||||
scaling = 2 # parameter that determines how many low-score location there are.
|
scaling = 2 # parameter that determines how many low-score location there are.
|
||||||
# need more low-score locations or lower difficulties:
|
# need more low-score locations or lower difficulties:
|
||||||
if dif == 1:
|
if dif == 1:
|
||||||
|
|||||||
@@ -8,6 +8,15 @@ from worlds.generic.Rules import set_rule
|
|||||||
|
|
||||||
from .YachtWeights import yacht_weights
|
from .YachtWeights import yacht_weights
|
||||||
|
|
||||||
|
|
||||||
|
# This module adds logic to the apworld.
|
||||||
|
# In short, we ran a simulation for every possible combination of dice and rolls you can have, per category.
|
||||||
|
# This simulation has a good strategy for locking dice.
|
||||||
|
# This gives rise to an approximate discrete distribution per category.
|
||||||
|
# We calculate the distribution of the total score.
|
||||||
|
# We then pick a correct percentile to reflect the correct score that should be in logic.
|
||||||
|
# The score is logic is *much* lower than the actual maximum reachable score.
|
||||||
|
|
||||||
# List of categories, and the name of the logic class associated with it
|
# List of categories, and the name of the logic class associated with it
|
||||||
category_mappings = {
|
category_mappings = {
|
||||||
"Category Ones": "Ones",
|
"Category Ones": "Ones",
|
||||||
@@ -44,14 +53,6 @@ category_mappings = {
|
|||||||
"Category 4&5 Full House": "FourAndFiveFullHouse",
|
"Category 4&5 Full House": "FourAndFiveFullHouse",
|
||||||
}
|
}
|
||||||
|
|
||||||
# This class adds logic to the apworld.
|
|
||||||
# In short, we ran a simulation for every possible combination of dice and rolls you can have, per category.
|
|
||||||
# This simulation has a good strategy for locking dice.
|
|
||||||
# This gives rise to an approximate discrete distribution per category.
|
|
||||||
# We calculate the distribution of the total score.
|
|
||||||
# We then pick a correct percentile to reflect the correct score that should be in logic.
|
|
||||||
# The score is logic is *much* lower than the actual maximum reachable score.
|
|
||||||
|
|
||||||
|
|
||||||
class Category:
|
class Category:
|
||||||
def __init__(self, name, quantity=1):
|
def __init__(self, name, quantity=1):
|
||||||
@@ -77,9 +78,11 @@ class ListState:
|
|||||||
|
|
||||||
|
|
||||||
def extract_progression(state, player, options):
|
def extract_progression(state, player, options):
|
||||||
# method to obtain a list of what items the player has.
|
"""
|
||||||
# this includes categories, dice, rolls and score multiplier etc.
|
method to obtain a list of what items the player has.
|
||||||
# First, we convert the state if it's a list, so we can use state.count(item, player)
|
this includes categories, dice, rolls and score multiplier etc.
|
||||||
|
First, we convert the state if it's a list, so we can use state.count(item, player)
|
||||||
|
"""
|
||||||
if isinstance(state, list):
|
if isinstance(state, list):
|
||||||
state = ListState(state=state)
|
state = ListState(state=state)
|
||||||
|
|
||||||
@@ -117,8 +120,10 @@ def extract_progression(state, player, options):
|
|||||||
yachtdice_cache = {}
|
yachtdice_cache = {}
|
||||||
|
|
||||||
|
|
||||||
# Function that returns the feasible score in logic based on items obtained.
|
|
||||||
def dice_simulation_strings(categories, num_dice, num_rolls, fixed_mult, step_mult, diff):
|
def dice_simulation_strings(categories, num_dice, num_rolls, fixed_mult, step_mult, diff):
|
||||||
|
"""
|
||||||
|
Function that returns the feasible score in logic based on items obtained.
|
||||||
|
"""
|
||||||
tup = tuple(
|
tup = tuple(
|
||||||
[
|
[
|
||||||
tuple(sorted([c.name + str(c.quantity) for c in categories])),
|
tuple(sorted([c.name + str(c.quantity) for c in categories])),
|
||||||
@@ -213,8 +218,11 @@ def dice_simulation_strings(categories, num_dice, num_rolls, fixed_mult, step_mu
|
|||||||
return yachtdice_cache[tup]
|
return yachtdice_cache[tup]
|
||||||
|
|
||||||
|
|
||||||
# Returns the feasible score that one can reach with the current state, options and difficulty.
|
|
||||||
def dice_simulation(state, player, options):
|
def dice_simulation(state, player, options):
|
||||||
|
"""
|
||||||
|
Returns the feasible score that one can reach with the current state, options and difficulty.
|
||||||
|
"""
|
||||||
# if the player is called "state_is_a_list", we are filling the itempool and want to calculate anyways.
|
# if the player is called "state_is_a_list", we are filling the itempool and want to calculate anyways.
|
||||||
if player == "state_is_a_list":
|
if player == "state_is_a_list":
|
||||||
categories, num_dice, num_rolls, fixed_mult, step_mult, expoints = extract_progression(state, player, options)
|
categories, num_dice, num_rolls, fixed_mult, step_mult, expoints = extract_progression(state, player, options)
|
||||||
@@ -238,8 +246,12 @@ def dice_simulation(state, player, options):
|
|||||||
return state.prog_items[player]["maximum_achievable_score"]
|
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):
|
def set_yacht_rules(world: MultiWorld, player: int, options):
|
||||||
|
"""
|
||||||
|
Sets rules on entrances and advancements that are always applied
|
||||||
|
"""
|
||||||
|
|
||||||
for location in world.get_locations(player):
|
for location in world.get_locations(player):
|
||||||
set_rule(
|
set_rule(
|
||||||
location,
|
location,
|
||||||
@@ -248,6 +260,8 @@ def set_yacht_rules(world: MultiWorld, player: int, options):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# Sets rules on completion condition
|
|
||||||
def set_yacht_completion_rules(world: MultiWorld, player: int):
|
def set_yacht_completion_rules(world: MultiWorld, player: int):
|
||||||
|
"""
|
||||||
|
Sets rules on completion condition
|
||||||
|
"""
|
||||||
world.completion_condition[player] = lambda state: state.has("Victory", player)
|
world.completion_condition[player] = lambda state: state.has("Victory", player)
|
||||||
|
|||||||
@@ -57,8 +57,10 @@ class YachtDiceWorld(World):
|
|||||||
"race": self.multiworld.is_race,
|
"race": self.multiworld.is_race,
|
||||||
}
|
}
|
||||||
|
|
||||||
# In generate early, we fill the item-pool, then determine the number of locations, and add filler items.
|
|
||||||
def generate_early(self):
|
def generate_early(self):
|
||||||
|
"""
|
||||||
|
In generate early, we fill the item-pool, then determine the number of locations, and add filler items.
|
||||||
|
"""
|
||||||
self.itempool = []
|
self.itempool = []
|
||||||
self.precollected = []
|
self.precollected = []
|
||||||
|
|
||||||
@@ -397,12 +399,16 @@ class YachtDiceWorld(World):
|
|||||||
self.multiworld.regions += [menu, board]
|
self.multiworld.regions += [menu, board]
|
||||||
|
|
||||||
def set_rules(self):
|
def set_rules(self):
|
||||||
# set rules per location, and add the rule for beating the game
|
"""
|
||||||
|
set rules per location, and add the rule for beating the game
|
||||||
|
"""
|
||||||
set_yacht_rules(self.multiworld, self.player, self.options)
|
set_yacht_rules(self.multiworld, self.player, self.options)
|
||||||
set_yacht_completion_rules(self.multiworld, self.player)
|
set_yacht_completion_rules(self.multiworld, self.player)
|
||||||
|
|
||||||
def fill_slot_data(self):
|
def fill_slot_data(self):
|
||||||
# make slot data, which consists of yachtdice_data, options, and some other variables.
|
"""
|
||||||
|
make slot data, which consists of yachtdice_data, options, and some other variables.
|
||||||
|
"""
|
||||||
yacht_dice_data = self._get_yachtdice_data()
|
yacht_dice_data = self._get_yachtdice_data()
|
||||||
yacht_dice_options = self.options.as_dict(
|
yacht_dice_options = self.options.as_dict(
|
||||||
"game_difficulty",
|
"game_difficulty",
|
||||||
|
|||||||
Reference in New Issue
Block a user