summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorYunataSavior <58997725+YunataSavior@users.noreply.github.com>2025-10-03 01:10:14 -0700
committerGitHub <noreply@github.com>2025-10-03 01:10:14 -0700
commitdb219f067f1168f1b4d4748f21437c1917cdfa9b (patch)
tree0dc672b30dceebbbcb647bcd6d0d2ed254f431bd /tools
parent009f08f2f3537bb0032052b68adec79971beeff0 (diff)
NPC str cleanup and misc for 100% linkability (#2723)
* NPC str cleanup and misc for 100% linkability * d_msg_object equiv
Diffstat (limited to 'tools')
-rw-r--r--tools/utilities/beautify_anm_data.py81
1 files changed, 66 insertions, 15 deletions
diff --git a/tools/utilities/beautify_anm_data.py b/tools/utilities/beautify_anm_data.py
index 0074a229ce..b864bfffd3 100644
--- a/tools/utilities/beautify_anm_data.py
+++ b/tools/utilities/beautify_anm_data.py
@@ -37,13 +37,22 @@ PARAM_PATTERN = r'SECTION_RODATA u8 const (\w+_Param_c)::m\[\d+\] = {'
EVT_LIST_PATTERN = r'SECTION_DATA static void\* l_evtList\[\d+\] = {'
RES_NAME_PATTERN = r'SECTION_DATA static void\* l_resNameList\[\d+\] = {'
+RESNAMES_PATTERN = r'SECTION_DATA static void\* l_resNames\[\d+\] = {'
+EVT_NAMES_PATTERN = r'SECTION_DATA static void\* l_evtNames\[\d+\] = {'
+ARCNAMES_BR_PATTERN = r'SECTION_DATA static void\* l_arcNames\[\d+\] = {'
+MYNAME_BR_PATTERN = r'SECTION_DATA static void\* l_myName\[\d+\] = {'
CUT_NAME_PATTERN = r'SECTION_DATA void\* ([a-zA-Z_][a-zA-Z0-9_]*)::mCutNameList\[(\d+)\] = \{'
+EVTCUT_NAME_PATTERN = r'SECTION_DATA void\* ([a-zA-Z_][a-zA-Z0-9_]*)::mEvtCutNameList\[(\d+)\] = \{'
VOID_PTR_INT_PATTERN = r'\(void\*\)(NULL|0x[0-9A-Fa-f]+)'
STRING_BASE_PATTERN = r'^SECTION_DEAD static char const\* const stringBase_([0-9A-Fa-f]+)\s*=\s*(".*?");'
STR_NO_OFFSET_PATTERN = r'\(void\*\)&([a-zA-Z0-9_]+)__stringBase0'
STR_WITH_OFFSET_PATTERN = r'\(void\*\)\(\(\(char\*\)&([a-zA-Z0-9_]+)__stringBase0\) \+ 0x([0-9A-Fa-f]+)\)'
+ARCNAMES_NO_OFF_PATTERN = r'SECTION_DATA static void\* l_arcNames = \(void\*\)&([a-zA-Z0-9_]+)__stringBase0;'
+MY_NAME_NO_OFF_PATTERN = r'SECTION_DATA static void\* l_myName = \(void\*\)&([a-zA-Z0-9_]+)__stringBase0;'
+MY_NAME_W_OFF_PATTERN = r'SECTION_DATA static void\* l_myName = \(void\*\)\(\(\(char\*\)&([a-zA-Z0-9_]+)__stringBase0\) \+ 0x([0-9A-Fa-f]+)\);'
+
def unsigned_val(hexstr):
value = int(hexstr, 16)
@@ -388,27 +397,36 @@ def build_anm_struct(byte_collection, anm_type):
def handle_charptr_array(int_collection, charptr_collection, charptr_type, class_name):
res_str = ""
+ basic_str_list = {
+ "l_evtNames", "l_arcNames", "l_resNameList", "l_resNames", "l_myName"
+ }
+ evt_str_list = {
+ "mCutNameList", "mEvtCutNameList"
+ }
if charptr_type == "l_evtList":
assert len(charptr_collection) == len(int_collection)
res_str += f"static daNpcT_evtData_c l_evtList[{len(charptr_collection)}] = {{\n"
- elif charptr_type == "l_resNameList":
- res_str += f"static char* l_resNameList[{len(charptr_collection)}] = {{\n"
- elif charptr_type == "mCutNameList":
- res_str += f"char* {class_name}::mCutNameList[{len(charptr_collection)}] = {{\n"
+ elif charptr_type in basic_str_list:
+ res_str += f"static char* {charptr_type}[{len(charptr_collection)}] = {{\n"
+ elif charptr_type in evt_str_list:
+ res_str += f"char* {class_name}::{charptr_type}[{len(charptr_collection)}] = {{\n"
else:
raise Exception(f"Unknown charptr_type \"{charptr_type}\"")
for idx in range(len(charptr_collection)):
- if charptr_type == "l_evtList":
- res_str += f" {{{charptr_collection[idx]}, {int_collection[idx]}}},\n"
+ col_val = charptr_collection[idx]
+ if isinstance(col_val, int) and col_val == -1:
+ res_str += " NULL,\n"
+ elif charptr_type == "l_evtList":
+ res_str += f" {{{col_val}, {int_collection[idx]}}},\n"
else:
- res_str += f" {charptr_collection[idx]},\n"
+ res_str += f" {col_val},\n"
res_str += "};\n"
print(res_str)
-def run_beautify_anm_data(in_file, type=None, no_auto_float=False):
+def run_beautify_anm_data(in_file, type=None, no_auto_float=False, stronly=False):
# Check if the file exists
if not os.path.isfile(in_file):
print(f"Error: File '{in_file}' not found.")
@@ -475,11 +493,37 @@ def run_beautify_anm_data(in_file, type=None, no_auto_float=False):
elif re.search(RES_NAME_PATTERN, line):
in_charptr_array = True
charptr_type = "l_resNameList"
+ elif re.search(RESNAMES_PATTERN, line):
+ in_charptr_array = True
+ charptr_type = "l_resNames"
+ elif re.search(EVT_NAMES_PATTERN, line):
+ in_charptr_array = True
+ charptr_type = "l_evtNames"
+ elif re.search(ARCNAMES_BR_PATTERN, line):
+ in_charptr_array = True
+ charptr_type = "l_arcNames"
+ elif re.search(MYNAME_BR_PATTERN, line):
+ in_charptr_array = True
+ charptr_type = "l_myName"
+ elif re.search(ARCNAMES_NO_OFF_PATTERN, line):
+ the_name = strlit_map[0]
+ print(f"static char* l_arcNames[1] = {{{the_name}}};")
+ elif re.search(MY_NAME_NO_OFF_PATTERN, line):
+ the_name = strlit_map[0]
+ print(f"static char* l_myName = {the_name};")
+ elif match := re.search(MY_NAME_W_OFF_PATTERN, line):
+ offset = int(match.group(2), 16)
+ the_name = strlit_map[offset]
+ print(f"static char* l_myName = {the_name};")
elif match := re.search(CUT_NAME_PATTERN, line):
in_charptr_array = True
class_name = match.group(1)
# print(f"Class: {class_name}, Array Size: {match.group(2)}")
charptr_type = "mCutNameList"
+ elif match := re.search(EVTCUT_NAME_PATTERN, line):
+ in_charptr_array = True
+ class_name = match.group(1)
+ charptr_type = "mEvtCutNameList"
else:
match = re.search(PARAM_PATTERN, line)
if match:
@@ -489,6 +533,10 @@ def run_beautify_anm_data(in_file, type=None, no_auto_float=False):
else:
if words[0] == '};':
if in_byte_array:
+ if stronly:
+ in_byte_array = False
+ byte_collection.clear()
+ continue
if anm_type == PARAM_TYPE:
handle_npc_param(byte_collection, param_name, type, no_auto_float)
else:
@@ -519,14 +567,17 @@ def run_beautify_anm_data(in_file, type=None, no_auto_float=False):
# print(f"Symbol: {symbol}, Offset: {offset}")
charptr_collection.append(strlit_map[offset])
elif vip_match := re.search(VOID_PTR_INT_PATTERN, line):
- assert charptr_type == "l_evtList"
- value_str = vip_match.group(1)
- if value_str == 'NULL':
- value = 0
+ if charptr_type == "l_evtNames":
+ charptr_collection.append(-1)
else:
- value = int(value_str, 16)
- # print(f"Parsed Value: {value}")
- int_collection.append(value)
+ assert charptr_type == "l_evtList"
+ value_str = vip_match.group(1)
+ if value_str == 'NULL':
+ value = 0
+ else:
+ value = int(value_str, 16)
+ # print(f"Parsed Value: {value}")
+ int_collection.append(value)
else:
raise Exception(f"ptr parsing: unknown line type: \"{line}\"")