Add support for Subweights

This commit is contained in:
Catobat
2021-11-01 21:04:54 +01:00
parent 01e4c2bff7
commit 5bac1ba5cc
2 changed files with 69 additions and 1 deletions

View File

@@ -99,7 +99,8 @@ def get_weights(path):
raise Exception(f'Failed to read weights file: {e}')
def roll_settings(weights):
def get_choice(option, root=weights):
def get_choice(option, root=None):
root = weights if root is None else root
if option not in root:
return None
if type(root[option]) is not dict:
@@ -114,6 +115,16 @@ def roll_settings(weights):
return default
return choice
while True:
subweights = weights.get('subweights', {})
if len(subweights) == 0:
break
chances = ({k: int(v['chance']) for (k, v) in subweights.items()})
subweight_name = random.choices(list(chances.keys()), weights=list(chances.values()))[0]
subweights = weights.get('subweights', {}).get(subweight_name, {}).get('weights', {})
subweights['subweights'] = subweights.get('subweights', {})
weights = {**weights, **subweights}
ret = argparse.Namespace()
glitches_required = get_choice('glitches_required')

View File

@@ -0,0 +1,57 @@
description: Example for subweights
glitches_required: none
world_state: open
goals: ganon
weapons: randomized
entrance_shuffle: none
intensity: 3
subweights:
vanilla:
chance: 25
weights:
door_shuffle: vanilla
keydropshuffle:
on: 40
off: 60
basic:
chance: 25
weights:
door_shuffle: basic
keydropshuffle:
on: 70
off: 30
crossed:
chance: 25
weights:
door_shuffle: crossed
keydropshuffle:
on: 90
off: 10
chaos:
chance: 25
weights:
door_shuffle: crossed
entrance_shuffle:
none: 30
crossed: 70
keydropshuffle:
on: 90
off: 10
shopsanity:
on: 50
off: 50
bombbag:
on: 25
off: 75
subweights:
normal:
chance: 40
weights: {}
swordless:
chance: 20
weights:
weapons: swordless
keysanity:
chance: 40
weights:
dungeon_items: full