#!/usr/bin/env python3 import argparse import io import json from pathlib import Path import pyjson5 REPO_DIR = Path(__file__).parent.parent BIN_DIR = REPO_DIR / "bin" SRC_DIR = REPO_DIR / "src" CONFIG_DIR = BIN_DIR / "cfg" GAMEFLOW_PATH = CONFIG_DIR / "Tomb1Main_gameflow.json5" BODY_PREFIX = """ #include "game/gameflow.h" #include "global/types.h" #include const char *g_T1MVersion = "{version}"; GAMEFLOW_DEFAULT_STRING g_GameFlowDefaultStrings[] = {{""" BODY_SUFFIX = """ { 0, NULL }, }; """ def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser() parser.add_argument("--version-file", type=Path) parser.add_argument('-o', "--output", type=Path) return parser.parse_args() def get_init_c(version: str) -> str: gameflow = pyjson5.loads(GAMEFLOW_PATH.read_text(encoding="utf-8")) with io.StringIO() as handle: print(BODY_PREFIX.format(version=version).lstrip(), file=handle) for key, value in gameflow["strings"].items(): print(f" {{ GS_{key}, {json.dumps(value)} }},", file=handle) print(BODY_SUFFIX.rstrip(), file=handle) return handle.getvalue() def update_init_c(output_path: Path, version: str) -> None: new_text = get_init_c(version=version) if not output_path.exists() or output_path.read_text() != new_text: output_path.write_text(new_text) def main() -> None: args = parse_args() if args.version_file and args.version_file.exists(): version = args.version_file.read_text().strip() else: version = "" update_init_c(output_path=args.output, version=version) if __name__ == "__main__": main()