papermario/tools/old/asset_rework.py
Ethan Roseman 6da232df36
Image asset rework (#1141)
* poc

* A bit

* 19 files to go

* ique fixed this took me hours omg

* 4 more

* dead vines

* fixules

* drop .bin from needed macro
2024-01-08 01:36:59 +09:00

64 lines
2.2 KiB
Python

import os
import re
import sys
IMG_C_RE = re.compile(r"#include \".*png\.inc\.c\"")
PAL_C_RE = re.compile(r"#include \".*pal\.inc\.c\"")
def img_replacer(match):
s = match.group(0)
png_inc_c_path = s.split('"')[1]
png_inc_c_content = None
for version in ["us", "pal", "ique", "jp"]:
try:
with open(f"ver/{version}/build/include/" + png_inc_c_path, "r") as f:
png_inc_c_content = f.read()
break
except FileNotFoundError:
pass
if png_inc_c_content is None:
print(f"Could not find {png_inc_c_path} in any version")
return s
symbol_name = png_inc_c_content.split()[2][:-2]
path_bin = png_inc_c_path.replace(".inc.c", ".bin")
inc_type = "INCLUDE_IMG" if ".png" in png_inc_c_path else "INCLUDE_PAL"
return f'{inc_type}("{path_bin}", {symbol_name});'
for dirs, subdirs, files in os.walk("src"):
for file in files:
if file.endswith(".c"):
with open(os.path.join(dirs, file), "r") as f:
source_lines = f.readlines()
if any(IMG_C_RE.match(l) or PAL_C_RE.match(l) for l in source_lines):
# Find first empty line in file and put the include there
first_line_idx = 0
if "effects/gfx" in dirs:
source_lines.insert(0, '#include "include_asset.h"\n')
source_lines.insert(1, "\n")
else:
try:
first_line_idx = source_lines.index("\n")
if first_line_idx > 11:
print("File {} has more than 11 lines before first empty line".format(file))
continue
except ValueError:
first_line_idx = 0
source_lines.insert(first_line_idx, '#include "include_asset.h"\n')
for i in range(len(source_lines)):
source_lines[i] = re.sub(IMG_C_RE, img_replacer, source_lines[i])
source_lines[i] = re.sub(PAL_C_RE, img_replacer, source_lines[i])
with open(os.path.join(dirs, file), "w") as f:
f.writelines(source_lines)