#!/usr/bin/env python3 import os import shutil import urllib.request GEO_URL = "https://raw.githubusercontent.com/n64decomp/sm64/06ec56df7f951f88da05f468cdcacecba496145a/actors/mario/geo.inc.c" MODEL_URL = "https://raw.githubusercontent.com/n64decomp/sm64/06ec56df7f951f88da05f468cdcacecba496145a/actors/mario/model.inc.c" geo_inc_c_header = """ #include "../include/sm64.h" #include "../include/types.h" #include "../include/geo_commands.h" #include "../game/rendering_graph_node.h" #include "../shim.h" #include "../game/object_stuff.h" #include "../game/behavior_actions.h" #include "model.inc.h" #define SHADOW_CIRCLE_PLAYER 99 """ geo_inc_c_footer = """ const GeoLayout mario_geo_libsm64[] = { GEO_SHADOW(SHADOW_CIRCLE_PLAYER, 0xB4, 100), GEO_OPEN_NODE(), GEO_ZBUFFER(1), GEO_OPEN_NODE(), GEO_SCALE(0x00, 16384), GEO_OPEN_NODE(), GEO_ASM(0, geo_mirror_mario_backface_culling), GEO_ASM(0, geo_mirror_mario_set_alpha), GEO_BRANCH(1, mario_geo_load_body), GEO_ASM(1, geo_mirror_mario_backface_culling), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_END(), }; void *mario_geo_ptr = (void*)mario_geo_libsm64; """ geo_inc_h = """ #pragma once extern void *mario_geo_ptr; """ model_inc_h = """ #pragma once #include "../include/types.h" #include "../include/PR/gbi.h" """ def main(): global model_inc_h shutil.rmtree("src/decomp/mario", ignore_errors=True) os.makedirs("src/decomp/mario", exist_ok=True) print("Downloading " + GEO_URL) geo_inc_c = urllib.request.urlopen(GEO_URL).read().decode('utf8') print("Downloading " + MODEL_URL) model_inc_c = urllib.request.urlopen(MODEL_URL).read().decode('utf8') lines = model_inc_c.splitlines() skip = 0 for i in range(len(lines)): if skip > 0: skip = skip - 1 lines[i] = "//" + lines[i] elif lines[i].startswith("ALIGNED8 static const u8 mario_"): skip = 2 lines[i] = "//" + lines[i] elif lines[i].startswith("const "): model_inc_h += "\nextern " + lines[i].replace(" = {", ";") lines.insert(0, "#include \"../../gfx_macros.h\"") lines.insert(0, "#include \"../../load_tex_data.h\"") model_inc_c = "\n".join(lines) with open("src/decomp/mario/geo.inc.c", "w") as file: file.write(geo_inc_c_header + geo_inc_c + geo_inc_c_footer) with open("src/decomp/mario/model.inc.c", "w") as file: file.write(model_inc_c) with open("src/decomp/mario/model.inc.h", "w") as file: file.write(model_inc_h) with open("src/decomp/mario/geo.inc.h", "w") as file: file.write(geo_inc_h) if __name__ == "__main__": main()