diff --git a/Generate.py b/Generate.py index 1af56a97..04ba3ad3 100644 --- a/Generate.py +++ b/Generate.py @@ -90,7 +90,8 @@ def main(args=None, callback=ERmain): except Exception as e: raise ValueError(f"File {args.meta_file_path} is destroyed. Please fix your yaml.") from e meta_weights = weights_cache[args.meta_file_path] - print(f"Meta: {args.meta_file_path} >> {get_choice('meta_description', meta_weights, 'No description specified')}") + print(f"Meta: {args.meta_file_path} >> {get_choice('meta_description', meta_weights)}") + del(meta_weights["meta_description"]) if args.samesettings: raise Exception("Cannot mix --samesettings with --meta") else: @@ -139,17 +140,17 @@ def main(args=None, callback=ERmain): player_path_cache[player] = player_files.get(player, args.weights_file_path) if meta_weights: - for player, path in player_path_cache.items(): - weights_cache[path].setdefault("meta_ignore", []) - for key in meta_weights: - option = get_choice(key, meta_weights) - if option is not None: - for player, path in player_path_cache.items(): - players_meta = weights_cache[path].get("meta_ignore", []) - if key not in players_meta: - weights_cache[path][key] = option - elif type(players_meta) == dict and players_meta[key] and option not in players_meta[key]: - weights_cache[path][key] = option + for category_name, category_dict in meta_weights.items(): + for key in category_dict: + option = get_choice(key, category_dict) + if option is not None: + for player, path in player_path_cache.items(): + if category_name is None: + weights_cache[path][key] = option + elif category_name not in weights_cache[path]: + raise Exception(f"Meta: Category {category_name} is not present in {path}.") + else: + weights_cache[path][category_name][key] = option name_counter = Counter() erargs.player_settings = {} diff --git a/meta.yaml b/meta.yaml index 84159c5e..fabb57ef 100644 --- a/meta.yaml +++ b/meta.yaml @@ -4,12 +4,6 @@ # For example, if a meta.yaml fast_ganon result is rolled, every player will have that fast_ganon goal # There is the special case of null, which ignores that part of the meta.yaml, # allowing for a chance for that meta to not take effect -# Players can also have a meta_ignore option to ignore specific options -# Example of ignore that would be in a player's file: -# meta_ignore: -# mode: -# inverted -# This means, if mode is meta-rolled and the result happens to be inverted, then defer to the player's yaml instead. meta_description: Meta-Mystery file with the intention of having similar-length completion times for a hopefully better experience null: progression_balancing: # Progression balancing tries to make sure that the player has *something* towards any players goal in each "sphere" @@ -33,26 +27,6 @@ A Link to the Past: open: 60 inverted: 10 null: 10 # Maintain individual world states - tower_open: - '0': 8 - '1': 7 - '2': 6 - '3': 5 - '4': 4 - '5': 3 - '6': 2 - '7': 1 - random: 10 # A different GT open time should not usually result in a vastly different completion time, unless ganon goal and tower_open > ganon_open - ganon_open: - '0': 3 - '1': 4 - '2': 5 - '3': 6 - '4': 7 - '5': 8 - '6': 9 - '7': 10 - random: 5 # This will mean differing completion times. But leaving it for that surprise effect triforce_pieces_mode: #Determine how to calculate the extra available triforce pieces. extra: 0 # available = triforce_pieces_extra + triforce_pieces_required percentage: 0 # available = (triforce_pieces_percentage /100) * triforce_pieces_required