mirror of
https://github.com/zeldaret/oot.git
synced 2024-12-27 07:07:09 +00:00
90 lines
2.1 KiB
Python
90 lines
2.1 KiB
Python
#! /usr/bin/python3
|
|
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
script_dir = os.path.dirname(os.path.realpath(__file__))
|
|
root_dir = script_dir + "/../"
|
|
data_dir = root_dir + "data/"
|
|
|
|
|
|
def try_text(text_bytes):
|
|
bad_bytes = 0
|
|
for byte in text_bytes:
|
|
if byte < 32:
|
|
bad_bytes += 1
|
|
|
|
# Arbitrary string detection heuristic
|
|
if bad_bytes / len(text_bytes) >= 0.3:
|
|
return None
|
|
|
|
try:
|
|
text = text_bytes.decode("EUC-JP")
|
|
except UnicodeDecodeError:
|
|
return None
|
|
|
|
text = text.strip(" \0")
|
|
if len(text) > 0 and bool(re.search('[a-zA-Z]', text)):
|
|
text = text.replace("\\x00", "")
|
|
text = text.replace("\n", "\\n")
|
|
text = text.replace("\"", "\\\"")
|
|
ret = "\n .asciz \"" + text + "\"\n .balign 4\n"
|
|
return ret
|
|
|
|
|
|
def word_convert(byte_string):
|
|
try:
|
|
words = byte_string.split(",")
|
|
byte_array = b""
|
|
for word in words:
|
|
data = word.strip()[2:]
|
|
byte_array += bytearray.fromhex(data)
|
|
except ValueError:
|
|
return byte_string
|
|
|
|
if len(words) > 1:
|
|
res = try_text(byte_array)
|
|
if res is not None:
|
|
return res
|
|
|
|
return byte_string
|
|
|
|
|
|
def handle_match(match):
|
|
in_str = match.group()[6:]
|
|
ret = word_convert(in_str)
|
|
if ret == in_str:
|
|
return match.group()
|
|
return ret
|
|
|
|
|
|
def process_data_file(file_path):
|
|
with open(file_path) as f:
|
|
file_text = f.read()
|
|
|
|
new_file_text = re.sub(" \\.word 0x.*", handle_match, file_text)
|
|
|
|
if new_file_text != file_text:
|
|
with open(file_path, "w") as f:
|
|
f.write(new_file_text)
|
|
return True
|
|
return False
|
|
|
|
|
|
def main():
|
|
skip_list = ['z_en_kanban.rodata.s', 'z_demo_tre_lgt.rodata.s', 'z_en_light.rodata.s']
|
|
|
|
i = 0
|
|
for root, dirs, files in os.walk(data_dir):
|
|
for file in files:
|
|
if i == 10:
|
|
return
|
|
if file.endswith(".rodata.s") and file not in skip_list:
|
|
path = os.path.join(root, file)
|
|
if process_data_file(path):
|
|
print("Processed " + path)
|
|
i += 1
|
|
|
|
|
|
main()
|