sm64coopdx/autogen/extract_display_lists.py
Isaac0-dev 56577a4a20
Some checks are pending
Build coop / build-ubuntu (push) Waiting to run
Build coop / build-windows (push) Waiting to run
Build coop / build-macos-arm (push) Waiting to run
Build coop / build-macos-intel (push) Waiting to run
fix some read only display lists missing from display_lists.inl
2025-04-08 12:54:08 +10:00

122 lines
3.7 KiB
Python

import os
import re
import sys
DIRECTORIES = [
"actors",
"bin",
"levels",
]
FILE_EXTENSIONS = [
".c",
".h",
]
CUSTOM_DEFINED = [
"dl_billboard_num3_0",
"dl_billboard_num3_1",
"dl_billboard_num3_2",
"dl_billboard_num3_3",
"dl_billboard_num3_4",
"dl_billboard_num3_5",
"dl_billboard_num3_6",
"dl_billboard_num3_7",
"dl_billboard_num3_8",
"dl_billboard_num3_9",
"dl_billboard_num3_0x",
"dl_billboard_num3_1x",
"dl_billboard_num3_2x",
"dl_billboard_num3_3x",
"dl_billboard_num3_4x",
"dl_billboard_num3_5x",
"dl_billboard_num3_6x",
"dl_billboard_num3_7x",
"dl_billboard_num3_8x",
"dl_billboard_num3_9x",
"dl_billboard_num3_x0",
"dl_billboard_num3_x1",
"dl_billboard_num3_x2",
"dl_billboard_num3_x3",
"dl_billboard_num3_x4",
"dl_billboard_num3_x5",
"dl_billboard_num3_x6",
"dl_billboard_num3_x7",
"dl_billboard_num3_x8",
"dl_billboard_num3_x9",
"dl_billboard_num3_0xx",
"dl_billboard_num3_1xx",
"dl_billboard_num3_2xx",
"dl_billboard_num3_3xx",
"dl_billboard_num3_4xx",
"dl_billboard_num3_5xx",
"dl_billboard_num3_6xx",
"dl_billboard_num3_7xx",
"dl_billboard_num3_8xx",
"dl_billboard_num3_9xx",
"dl_billboard_num3_x0x",
"dl_billboard_num3_x1x",
"dl_billboard_num3_x2x",
"dl_billboard_num3_x3x",
"dl_billboard_num3_x4x",
"dl_billboard_num3_x5x",
"dl_billboard_num3_x6x",
"dl_billboard_num3_x7x",
"dl_billboard_num3_x8x",
"dl_billboard_num3_x9x",
"dl_billboard_num3_xx0",
"dl_billboard_num3_xx1",
"dl_billboard_num3_xx2",
"dl_billboard_num3_xx3",
"dl_billboard_num3_xx4",
"dl_billboard_num3_xx5",
"dl_billboard_num3_xx6",
"dl_billboard_num3_xx7",
"dl_billboard_num3_xx8",
"dl_billboard_num3_xx9",
]
def main():
verbose = len(sys.argv) > 1 and (sys.argv[1] == "-v" or sys.argv[1] == "--verbose")
pattern = re.compile(r"[\W]+")
display_lists = []
for dir in DIRECTORIES:
for root, _, filenames in os.walk(dir):
for filename in filenames:
if filename[filename.rfind("."):] in FILE_EXTENSIONS:
display_lists_in_file = []
filepath = os.path.join(root, filename)
lines = open(filepath, "r").readlines()
ignore = False
for line in lines:
if ("#ifdef VERSION_EU" in line or
"#ifdef VERSION_SH" in line or
"#ifdef VERSION_JP" in line):
ignore = True
if "#endif" in line:
ignore = False
if not ignore and "Gfx" in line and "static " not in line and "extern" not in line and "#" not in line:
identifiers = pattern.sub(" ", line).split()
index_gfx = identifiers.index("Gfx")
name = identifiers[index_gfx + 1]
if name not in display_lists:
display_lists.append(name)
if verbose:
display_lists_in_file.append(name)
if verbose and display_lists_in_file:
print("%s\n %s" % (filepath, "\n ".join(display_lists_in_file)))
# Add these manually because they are defined by a macro
display_lists += CUSTOM_DEFINED
with open("include/display_lists.inl", "w") as f:
for name in display_lists:
f.write("DISPLAY_LIST(%s)\n" % (name))
print("Total display lists: %d" % (len(display_lists)))
if __name__ == "__main__":
main()