mirror of
https://github.com/pmret/papermario.git
synced 2024-11-08 20:12:30 +01:00
060486c85e
* root-level configure script * fix configure on macos? * fix macos again maybe * fix messages, add asset stack * generate map headers from xml maps * fix sprite_dir asset * git subrepo pull (merge) --force tools/splat subrepo: subdir: "tools/splat" merged: "5e36c45558" upstream: origin: "https://github.com/ethteck/splat.git" branch: "master" commit: "5e36c45558" git-subrepo: version: "0.4.3" origin: "???" commit: "???"
98 lines
2.7 KiB
Python
98 lines
2.7 KiB
Python
#! /usr/bin/python3
|
|
|
|
from sys import argv, stderr
|
|
from os import path
|
|
from xml.dom.minidom import parse
|
|
|
|
def eprint(*args, **kwargs):
|
|
print(*args, file=stderr, **kwargs)
|
|
|
|
if __name__ == "__main__":
|
|
_, xml_path = argv
|
|
xml = parse(xml_path)
|
|
|
|
map_name = path.basename(xml_path)[:-4]
|
|
|
|
print("#include \"common.h\"")
|
|
print("#include \"map.h\"")
|
|
print("")
|
|
print("#ifndef NAMESPACE")
|
|
print(f"#define NAMESPACE {map_name}")
|
|
print("")
|
|
|
|
seen_names = set()
|
|
entrys = []
|
|
npc_id = 0
|
|
|
|
for marker in xml.getElementsByTagName("Marker"):
|
|
marker_type = marker.getAttribute("type")
|
|
if marker_type == "Root" or marker_type == "Group":
|
|
continue
|
|
|
|
map_object = marker.getElementsByTagName("MapObject")[0]
|
|
name = marker_type + "_" + map_object.getAttribute("name")
|
|
|
|
if name in seen_names:
|
|
continue
|
|
seen_names.add(name)
|
|
|
|
x, y, z = [p for p in marker.getAttribute("pos").split(",")]
|
|
yaw = marker.getAttribute("yaw") + "f"
|
|
|
|
if marker_type == "NPC":
|
|
npc_id += 1
|
|
print(f"#define {name} {npc_id}")
|
|
|
|
if marker_type == "Entry":
|
|
entrys.append(name)
|
|
|
|
print(f"#define {name}_x {x}")
|
|
print(f"#define {name}_y {y}")
|
|
print(f"#define {name}_z {z}")
|
|
print(f"#define {name}_vec3d {x}, {y}, {z}")
|
|
print(f"#define {name}_vec4d {x}, {y}, {z}, (((s32){yaw}))")
|
|
print(f"#define {name}_vec3f {x}.0f, {y}.0f, {z}.0f")
|
|
print(f"#define {name}_vec4f {x}.0f, {y}.0f, {z}.0f, {yaw}")
|
|
print(f"#define {name}_yaw {yaw}")
|
|
print("")
|
|
|
|
for i, entry in enumerate(entrys):
|
|
print(f"#define {entry} {i}")
|
|
print(f"EntryList {map_name}_entryList = {{")
|
|
for entry in entrys:
|
|
print(" " + entry + "_vec4f,")
|
|
print("};")
|
|
|
|
print("")
|
|
|
|
for collider in xml.getElementsByTagName("Collider"):
|
|
map_object = collider.getElementsByTagName("MapObject")[0]
|
|
name = map_object.getAttribute("name")
|
|
idx = "0x" + map_object.getAttribute("id")
|
|
|
|
if name in seen_names or " " in name:
|
|
continue
|
|
seen_names.add(name)
|
|
|
|
print(f"#define Collider_{name} {idx}")
|
|
|
|
print("")
|
|
|
|
for model in xml.getElementsByTagName("Model"):
|
|
map_object = model.getElementsByTagName("MapObject")[0]
|
|
name = map_object.getAttribute("name")
|
|
idx = "0x" + map_object.getAttribute("id")
|
|
|
|
if name in seen_names or " " in name:
|
|
continue
|
|
seen_names.add(name)
|
|
|
|
print(f"#define Model_{name} {idx}")
|
|
|
|
print("")
|
|
print("#endif")
|
|
print("")
|
|
|
|
for i, entry in enumerate(entrys):
|
|
print(f"#define {map_name}_{entry[len('Entry_'):]} {i}")
|