import os from Utils import __version__ from jinja2 import Template import yaml import json from worlds.AutoWorld import AutoWorldRegister target_folder = os.path.join("WebHostLib", "static", "generated") def create(): for game_name, world in AutoWorldRegister.world_types.items(): res = Template(open(os.path.join("WebHostLib", "templates", "options.yaml")).read()).render( options=world.options, __version__=__version__, game=game_name, yaml_dump=yaml.dump ) with open(os.path.join(target_folder, game_name + ".yaml"), "w") as f: f.write(res) # Generate JSON files for player-settings pages player_settings = { "baseOptions": { "description": "Generated by https://archipelago.gg/", "name": "Player", }, } game_options = {} for option_name, option in world.options.items(): if option.options: this_option = { "type": "select", "friendlyName": option.friendly_name if hasattr(option, "friendly_name") else option_name, "description": option.__doc__ if option.__doc__ else "Please document me!", "defaultValue": None, "options": [] } for sub_option_name, sub_option_id in option.options.items(): this_option["options"].append({ "name": sub_option_name, "value": sub_option_name, }) if sub_option_id == option.default: this_option["defaultValue"] = sub_option_name game_options[option_name] = this_option elif hasattr(option, "range_start") and hasattr(option, "range_end"): game_options[option_name] = { "type": "range", "friendlyName": option.friendly_name if hasattr(option, "friendly_name") else option_name, "description": option.__doc__ if option.__doc__ else "Please document me!", "defaultValue": option.default if hasattr(option, "default") else option.range_start, "min": option.range_start, "max": option.range_end, } player_settings["gameOptions"] = game_options with open(os.path.join(target_folder, game_name + ".json"), "w") as f: f.write(json.dumps(player_settings, indent=2, separators=(',', ': ')))