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}')
|
raise Exception(f'Failed to read weights file: {e}')
|
||||||
|
|
||||||
def roll_settings(weights):
|
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:
|
if option not in root:
|
||||||
return None
|
return None
|
||||||
if type(root[option]) is not dict:
|
if type(root[option]) is not dict:
|
||||||
@@ -114,6 +115,16 @@ def roll_settings(weights):
|
|||||||
return default
|
return default
|
||||||
return choice
|
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()
|
ret = argparse.Namespace()
|
||||||
|
|
||||||
glitches_required = get_choice('glitches_required')
|
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