Merge pull request #111 from Berserker66/tweaks_and_fixes
Tweaks and fixes
This commit is contained in:
commit
10f675a61e
|
@ -82,10 +82,10 @@ def parse_arguments(argv, no_defaults=False):
|
|||
20 of them to beat the game.
|
||||
''')
|
||||
parser.add_argument('--triforce_pieces_available', default=defval(30),
|
||||
type=lambda value: min(max(int(value), 1), 112),
|
||||
type=lambda value: min(max(int(value), 1), 90),
|
||||
help='''Set Triforce Pieces available in item pool.''')
|
||||
parser.add_argument('--triforce_pieces_required', default=defval(20),
|
||||
type=lambda value: min(max(int(value), 1), 112),
|
||||
type=lambda value: min(max(int(value), 1), 90),
|
||||
help='''Set Triforce Pieces required to win a Triforce Hunt''')
|
||||
parser.add_argument('--difficulty', default=defval('normal'), const='normal', nargs='?',
|
||||
choices=['normal', 'hard', 'expert'],
|
||||
|
|
|
@ -64,8 +64,8 @@ difficulties = {
|
|||
progressive_armor_limit = 2,
|
||||
progressive_bow_limit = 2,
|
||||
progressive_bottle_limit = 4,
|
||||
boss_heart_container_limit = 255,
|
||||
heart_piece_limit = 255,
|
||||
boss_heart_container_limit = 10,
|
||||
heart_piece_limit = 24,
|
||||
),
|
||||
'hard': Difficulty(
|
||||
baseitems = normalbaseitems,
|
||||
|
|
48
Mystery.py
48
Mystery.py
|
@ -63,14 +63,14 @@ def main():
|
|||
weights_cache[args.weights] = get_weights(args.weights)
|
||||
except Exception as e:
|
||||
raise ValueError(f"File {args.weights} is destroyed. Please fix your yaml.") from e
|
||||
print(f"Weights: {args.weights} >> {weights_cache[args.weights]['description']}")
|
||||
print(f"Weights: {args.weights} >> {get_choice('description', weights_cache[args.weights], 'No description specified')}")
|
||||
if args.meta:
|
||||
try:
|
||||
weights_cache[args.meta] = get_weights(args.meta)
|
||||
except Exception as e:
|
||||
raise ValueError(f"File {args.meta} is destroyed. Please fix your yaml.") from e
|
||||
meta_weights = weights_cache[args.meta]
|
||||
print(f"Meta: {args.meta} >> {meta_weights['meta_description']}")
|
||||
print(f"Meta: {args.meta} >> {get_choice('meta_description', meta_weights, 'No description specified')}")
|
||||
if args.samesettings:
|
||||
raise Exception("Cannot mix --samesettings with --meta")
|
||||
|
||||
|
@ -80,7 +80,7 @@ def main():
|
|||
try:
|
||||
if path not in weights_cache:
|
||||
weights_cache[path] = get_weights(path)
|
||||
print(f"P{player} Weights: {path} >> {weights_cache[path]['description']}")
|
||||
print(f"P{player} Weights: {path} >> {get_choice('description', weights_cache[path], 'No description specified')}")
|
||||
|
||||
except Exception as e:
|
||||
raise ValueError(f"File {path} is destroyed. Please fix your yaml.") from e
|
||||
|
@ -223,15 +223,17 @@ def convert_to_on_off(value):
|
|||
return {True: "on", False: "off"}.get(value, value)
|
||||
|
||||
|
||||
def get_choice(option, root) -> typing.Any:
|
||||
def get_choice(option, root, value=None) -> typing.Any:
|
||||
if option not in root:
|
||||
return None
|
||||
return value
|
||||
if type(root[option]) is not dict:
|
||||
return interpret_on_off(root[option])
|
||||
if not root[option]:
|
||||
return None
|
||||
return value
|
||||
if any(root[option].values()):
|
||||
return interpret_on_off(
|
||||
random.choices(list(root[option].keys()), weights=list(map(int, root[option].values())))[0])
|
||||
raise RuntimeError(f"All options specified in {option} are weighted as zero.")
|
||||
|
||||
|
||||
def handle_name(name: str):
|
||||
|
@ -257,8 +259,7 @@ def roll_settings(weights):
|
|||
ret.logic = {None: 'noglitches', 'none': 'noglitches', 'no_logic': 'nologic', 'overworld_glitches': 'owglitches',
|
||||
'minor_glitches' : 'minorglitches'}[
|
||||
glitches_required]
|
||||
ret.progression_balancing = get_choice('progression_balancing',
|
||||
weights) if 'progression_balancing' in weights else True
|
||||
ret.progression_balancing = get_choice('progression_balancing', weights, True)
|
||||
# item_placement = get_choice('item_placement')
|
||||
# not supported in ER
|
||||
|
||||
|
@ -270,10 +271,10 @@ def roll_settings(weights):
|
|||
elif not dungeon_items:
|
||||
dungeon_items = ""
|
||||
|
||||
ret.mapshuffle = get_choice('map_shuffle', weights) if 'map_shuffle' in weights else 'm' in dungeon_items
|
||||
ret.compassshuffle = get_choice('compass_shuffle', weights) if 'compass_shuffle' in weights else 'c' in dungeon_items
|
||||
ret.keyshuffle = get_choice('smallkey_shuffle', weights) if 'smallkey_shuffle' in weights else 's' in dungeon_items
|
||||
ret.bigkeyshuffle = get_choice('bigkey_shuffle', weights) if 'bigkey_shuffle' in weights else 'b' in dungeon_items
|
||||
ret.mapshuffle = get_choice('map_shuffle', weights, 'm' in dungeon_items)
|
||||
ret.compassshuffle = get_choice('compass_shuffle', weights, 'c' in dungeon_items)
|
||||
ret.keyshuffle = get_choice('smallkey_shuffle', weights, 's' in dungeon_items)
|
||||
ret.bigkeyshuffle = get_choice('bigkey_shuffle', weights, 'b' in dungeon_items)
|
||||
|
||||
ret.accessibility = get_choice('accessibility', weights)
|
||||
|
||||
|
@ -295,14 +296,11 @@ def roll_settings(weights):
|
|||
|
||||
ret.crystals_ganon = get_choice('ganon_open', weights)
|
||||
|
||||
ret.triforce_pieces_available = get_choice('triforce_pieces_available',
|
||||
weights) if "triforce_pieces_available" in weights else 30
|
||||
ret.triforce_pieces_available = get_choice('triforce_pieces_available', weights, 30)
|
||||
ret.triforce_pieces_available = min(max(1, int(ret.triforce_pieces_available)), 90)
|
||||
|
||||
ret.triforce_pieces_available = min(max(1, int(ret.triforce_pieces_available)), 112)
|
||||
|
||||
ret.triforce_pieces_required = get_choice('triforce_pieces_required',
|
||||
weights) if "triforce_pieces_required" in weights else 20
|
||||
ret.triforce_pieces_required = min(max(1, int(ret.triforce_pieces_required)), 112)
|
||||
ret.triforce_pieces_required = get_choice('triforce_pieces_required', weights, 20)
|
||||
ret.triforce_pieces_required = min(max(1, int(ret.triforce_pieces_required)), 90)
|
||||
|
||||
ret.mode = get_choice('world_state', weights)
|
||||
if ret.mode == 'retro':
|
||||
|
@ -341,7 +339,7 @@ def roll_settings(weights):
|
|||
|
||||
ret.shufflepots = get_choice('pot_shuffle', weights)
|
||||
|
||||
ret.beemizer = int(get_choice('beemizer', weights)) if 'beemizer' in weights else 0
|
||||
ret.beemizer = int(get_choice('beemizer', weights, 0))
|
||||
|
||||
ret.timer = {'none': False,
|
||||
None: False,
|
||||
|
@ -350,11 +348,11 @@ def roll_settings(weights):
|
|||
'timed_ohko': 'timed-ohko',
|
||||
'ohko': 'ohko',
|
||||
'timed_countdown': 'timed-countdown',
|
||||
'display': 'display'}[get_choice('timer', weights)] if 'timer' in weights.keys() else False
|
||||
'display': 'display'}[get_choice('timer', weights, False)]
|
||||
|
||||
ret.dungeon_counters = get_choice('dungeon_counters', weights) if 'dungeon_counters' in weights else 'default'
|
||||
ret.dungeon_counters = get_choice('dungeon_counters', weights, 'default')
|
||||
|
||||
ret.progressive = convert_to_on_off(get_choice('progressive', weights)) if "progressive" in weights else 'on'
|
||||
ret.progressive = convert_to_on_off(get_choice('progressive', weights, 'on'))
|
||||
inventoryweights = weights.get('startinventory', {})
|
||||
startitems = []
|
||||
for item in inventoryweights.keys():
|
||||
|
@ -368,9 +366,9 @@ def roll_settings(weights):
|
|||
startitems.append(item)
|
||||
ret.startinventory = ','.join(startitems)
|
||||
|
||||
ret.glitch_boots = get_choice('glitch_boots', weights) if 'glitch_boots' in weights else True
|
||||
ret.glitch_boots = get_choice('glitch_boots', weights, True)
|
||||
|
||||
ret.remote_items = get_choice('remote_items', weights) if 'remote_items' in weights else False
|
||||
ret.remote_items = get_choice('remote_items', weights, False)
|
||||
|
||||
if "l" in dungeon_items:
|
||||
ret.local_items = {"Small Keys", "Big Keys"}
|
||||
|
|
Loading…
Reference in New Issue