mirror of
https://github.com/sonicdcer/sf64.git
synced 2024-11-26 22:40:42 +00:00
109 lines
3.4 KiB
Python
109 lines
3.4 KiB
Python
import argparse
|
|
|
|
char_code = [
|
|
"END","NWL","NP2","NP3","NP4","NP5","NP6","NP7","NP8","NP9","NPA","NPB","SPC","HSP","QSP","NPF",
|
|
"CLF","CUP","CRT","CDN","AUP","ALF","ADN","ART","_A","_B","_C","_D","_E","_F","_G","_H","_I","_J",
|
|
"_K","_L","_M","_N","_O","_P","_Q","_R","_S","_T","_U","_V","_W","_X","_Y","_Z","_a","_b","_c",
|
|
"_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v",
|
|
"_w","_x","_y","_z","EXM","QST","DSH","CMA","PRD","_0","_1","_2","_3","_4","_5","_6","_7","_8",
|
|
"_9","APS","LPR","RPR","CLN","PIP"]
|
|
|
|
def convert_line(line):
|
|
if 'x' in line or '{' in line or '}' in line:
|
|
return None
|
|
|
|
chars = line.split(',')
|
|
|
|
if len(chars) <= 1:
|
|
return None
|
|
|
|
newchars = [char_code[int(x)] for x in chars[0:-1]]
|
|
|
|
return ','.join(newchars) + ',\n'
|
|
|
|
|
|
def convert_file(filepath):
|
|
with open(filepath, 'r') as file:
|
|
file_lines = file.readlines()
|
|
for i, line in enumerate(file_lines):
|
|
newchars = convert_line(line)
|
|
if newchars:
|
|
file_lines[i] = newchars
|
|
|
|
with open(filepath, 'w') as file:
|
|
file.writelines(file_lines)
|
|
|
|
return
|
|
|
|
def convert_names(filepath):
|
|
with open(filepath, 'r') as file:
|
|
file_text = file.read()
|
|
startidx = file_text.find('gMsgLookup[780] = {\n') + len('gMsgLookup[780] = {\n')
|
|
names = file_text[startidx:-3].split(',')
|
|
names = [x.strip(' \n}{') for x in names]
|
|
namepairs = zip(names[::2], names[1::2])
|
|
|
|
for pair in namepairs:
|
|
tname = 'sMsg_ID_' + pair[0]
|
|
file_text = file_text.replace(pair[1], tname)
|
|
with open(filepath, 'w') as file:
|
|
file.write(file_text)
|
|
return
|
|
|
|
code_to_text = {
|
|
'CLF':'(C<)', 'CUP':'(C^)', 'CRT':'(C>)', 'CDN':'(Cv)', 'AUP':'^', 'ALF':'<', 'ADN':'v',
|
|
'ART':'>','EXM':'!', 'QST':'?', 'DSH':'-', 'CMA':',', 'PRD':'.', 'APS':"'", 'LPR':'(',
|
|
'RPR':')', 'CLN':':', 'PIP':'|'}
|
|
|
|
def parse_line(line):
|
|
codes = [x.strip() for x in line.split(',')]
|
|
text = ''
|
|
for i, code in enumerate(codes):
|
|
if code.startswith(('NP', 'PRI')) or code == '':
|
|
continue
|
|
elif 'SP' in code:
|
|
if(text and text[-1] != ' '):
|
|
text += ' '
|
|
elif 'NWL' in code:
|
|
if text:
|
|
text += '\n// '
|
|
elif code.startswith('_'):
|
|
text += code.strip('_')
|
|
else:
|
|
text += code_to_text[code]
|
|
return text
|
|
|
|
|
|
def add_comments(filepath):
|
|
with open(filepath, 'r') as file:
|
|
file_lines = file.readlines()
|
|
found_text = False
|
|
start_line = 0
|
|
for i, line in enumerate(file_lines):
|
|
if not found_text:
|
|
found_text = line.startswith('u16 gMsg_ID_')
|
|
out_text = '// '
|
|
start_line = i
|
|
elif 'END' in line:
|
|
if out_text.endswith('\n// '):
|
|
out_text = out_text[:-4]
|
|
file_lines[start_line] = out_text + '\n' + file_lines[start_line]
|
|
print(file_lines[start_line])
|
|
found_text = False
|
|
else:
|
|
out_text += parse_line(line)
|
|
with open(filepath, 'w') as file:
|
|
file.writelines(file_lines)
|
|
return
|
|
|
|
|
|
parser = argparse.ArgumentParser(description='Convert StarFox 64 dialog characters')
|
|
parser.add_argument('infile', help="SF64 text file to convert")
|
|
|
|
if __name__ == '__main__':
|
|
args = parser.parse_args()
|
|
|
|
# convert_file(args.infile)
|
|
# convert_names(args.infile)
|
|
add_comments(args.infile)
|