83 lines
3.2 KiB
Python
83 lines
3.2 KiB
Python
import os
|
|
from Utils import __version__
|
|
from jinja2 import Template
|
|
import yaml
|
|
import json
|
|
|
|
from worlds.AutoWorld import AutoWorldRegister
|
|
import Options
|
|
|
|
target_folder = os.path.join("WebHostLib", "static", "generated")
|
|
|
|
|
|
def create():
|
|
def dictify_range(option):
|
|
data = {option.range_start: 0, option.range_end: 0, "random": 0, "random-low": 0, "random-high": 0,
|
|
option.default: 50}
|
|
notes = {
|
|
option.range_start: "minimum value",
|
|
option.range_end: "maximum value"
|
|
}
|
|
return data, notes
|
|
|
|
def default_converter(default_value):
|
|
if isinstance(default_value, (set, frozenset)):
|
|
return list(default_value)
|
|
return default_value
|
|
|
|
for game_name, world in AutoWorldRegister.world_types.items():
|
|
res = Template(open(os.path.join("WebHostLib", "templates", "options.yaml")).read()).render(
|
|
options={**world.options, **Options.per_game_common_options},
|
|
__version__=__version__, game=game_name, yaml_dump=yaml.dump,
|
|
dictify_range=dictify_range, default_converter=default_converter,
|
|
)
|
|
|
|
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/",
|
|
"game": game_name,
|
|
"name": "Player",
|
|
},
|
|
}
|
|
|
|
game_options = {}
|
|
for option_name, option in world.options.items():
|
|
if option.options:
|
|
this_option = {
|
|
"type": "select",
|
|
"displayName": option.displayname if hasattr(option, "displayname") else option_name,
|
|
"description": option.__doc__ if option.__doc__ else "Please document me!",
|
|
"defaultValue": None,
|
|
"options": []
|
|
}
|
|
|
|
for sub_option_id, sub_option_name in option.name_lookup.items():
|
|
this_option["options"].append({
|
|
"name": option.get_option_name(sub_option_id),
|
|
"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",
|
|
"displayName": option.displayname if hasattr(option, "displayname") 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=(',', ': ')))
|