Add support for Subweights
This commit is contained in:
13
Mystery.py
13
Mystery.py
@@ -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')
|
||||
|
||||
57
mystery_example_subweights.yml
Normal file
57
mystery_example_subweights.yml
Normal 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
|
||||
Reference in New Issue
Block a user