Generate CSVs first and divide TIPS 99

This commit is contained in:
Dusk 2024-02-28 19:56:06 +01:00
parent 5dac9d1dfb
commit ac163fb05a
4 changed files with 141 additions and 65 deletions

2
run.sh
View File

@ -30,4 +30,4 @@ $pycmd -c "import pkg_resources; pkg_resources.require(open('requirements.txt',m
# --- Run the code ---
$pycmd src/main.py
$pycmd src/main.py "$@"

View File

@ -1,46 +1,92 @@
#!/usr/bin/env python3
onik = {
"gamestart" : [
'onik_000.txt',
'onik_001.txt',
'onik_002.txt',
'onik_003.txt',
'onik_004.txt',
'onik_005.txt',
'onik_009.txt',
'onik_009_02.txt',
'onik_010.txt',
'onik_011.txt',
'onik_012.txt',
'onik_013.txt',
'onik_014.txt',
'onik_014_02.txt',
'onik_015.txt',
'onik_015_02.txt',
# 'onik_015_03.txt',
],
"Opening" : [ 'onik_op.txt' ],
"Sub_Tips_001" : [ 'onik_tips_01.txt' ],
"Sub_Tips_002" : [ 'onik_tips_02.txt' ],
"Sub_Tips_003" : [ 'onik_tips_03.txt' ],
"Sub_Tips_004" : [ 'onik_tips_04.txt' ],
"Sub_Tips_005" : [ 'onik_tips_05.txt' ],
"Sub_Tips_006" : [ 'onik_tips_06.txt' ],
"Sub_Tips_006" : [ 'onik_tips_06.txt' ],
"Sub_Tips_007" : [ 'onik_tips_07.txt' ],
"Sub_Tips_008" : [ 'onik_tips_08.txt' ],
"Sub_Tips_009" : [ 'onik_tips_09.txt' ],
"Sub_Tips_010" : [ 'onik_tips_10.txt' ],
"Sub_Tips_011" : [ 'onik_tips_11.txt' ],
"Sub_Tips_012" : [ 'onik_tips_12.txt' ],
"Sub_Tips_013" : [ 'onik_tips_13.txt' ],
"Sub_Tips_014" : [ 'onik_tips_14.txt' ],
"Sub_Tips_015" : [ 'onik_tips_15.txt' ],
"Sub_Tips_016" : [ 'onik_tips_16.txt' ],
"Sub_Tips_016" : [ 'onik_tips_16.txt' ],
"Sub_Tips_017" : [ 'onik_tips_17.txt' ],
"Sub_Tips_018" : [ 'onik_tips_18.txt' ],
"Sub_Tips_019" : [ 'onik_tips_19.txt' ],
"Sub_Tips_020" : [ 'onik_tips_20.txt' ],
}
class CsvEntry():
def __init__(self, dest: str, orig: str, start: int, end: int):
self.dest = dest
self.orig = orig
self.start = start
self.end = end
onik = [
CsvEntry('gamestart/00.csv', 'onik_000.txt', 0, 48),
CsvEntry('gamestart/01.csv', 'onik_001.txt', 0, 663),
CsvEntry('gamestart/02.csv', 'onik_002.txt', 0, 520),
CsvEntry('gamestart/03.csv', 'onik_003.txt', 0, 647),
CsvEntry('gamestart/04.csv', 'onik_004.txt', 0, 611),
CsvEntry('gamestart/05.csv', 'onik_005.txt', 0, 677),
CsvEntry('gamestart/09_01.csv', 'onik_009.txt', 0, 913),
CsvEntry('gamestart/09_02.csv', 'onik_009_02.txt', 0, 414),
CsvEntry('gamestart/10.csv', 'onik_010.txt', 0, 655),
CsvEntry('gamestart/11.csv', 'onik_011.txt', 0, 747),
CsvEntry('gamestart/12.csv', 'onik_012.txt', 0, 792),
CsvEntry('gamestart/13.csv', 'onik_013.txt', 0, 684),
CsvEntry('gamestart/14_01.csv', 'onik_014.txt', 0, 629),
CsvEntry('gamestart/14_02.csv', 'onik_014_02.txt', 0, 1067),
CsvEntry('gamestart/15_01.csv', 'onik_015.txt', 0, 1027),
CsvEntry('gamestart/15_02.csv', 'onik_015_02.txt', 0, 688),
CsvEntry('gamestart/15_03.csv', 'onik_015_03.txt', 0, 206),
CsvEntry("Opening.csv", 'onik_op.txt', 0, 56),
CsvEntry("Sub_Tips_001.csv", 'onik_tips_01.txt', 0, 100),
CsvEntry("Sub_Tips_002.csv", 'onik_tips_02.txt', 0, 55),
CsvEntry("Sub_Tips_003.csv", 'onik_tips_03.txt', 0, 49),
CsvEntry("Sub_Tips_004.csv", 'onik_tips_04.txt', 0, 13),
CsvEntry("Sub_Tips_005.csv", 'onik_tips_05.txt', 0, 27),
CsvEntry("Sub_Tips_006.csv", 'onik_tips_06.txt', 0, 57),
CsvEntry("Sub_Tips_007.csv", 'onik_tips_07.txt', 0, 91),
CsvEntry("Sub_Tips_008.csv", 'onik_tips_08.txt', 0, 19),
CsvEntry("Sub_Tips_009.csv", 'onik_tips_09.txt', 0, 7),
CsvEntry("Sub_Tips_010.csv", 'onik_tips_10.txt', 0, 4),
CsvEntry("Sub_Tips_011.csv", 'onik_tips_11.txt', 0, 0),
CsvEntry("Sub_Tips_012.csv", 'onik_tips_12.txt', 0, 19),
CsvEntry("Sub_Tips_013.csv", 'onik_tips_13.txt', 0, 69),
CsvEntry("Sub_Tips_014.csv", 'onik_tips_14.txt', 0, 40),
CsvEntry("Sub_Tips_015.csv", 'onik_tips_15.txt', 0, 25),
CsvEntry("Sub_Tips_016.csv", 'onik_tips_16.txt', 0, 69),
CsvEntry("Sub_Tips_017.csv", 'onik_tips_17.txt', 0, 99),
CsvEntry("Sub_Tips_018.csv", 'onik_tips_18.txt', 0, 38),
CsvEntry("Sub_Tips_019.csv", 'onik_tips_19.txt', 0, 24),
CsvEntry("Sub_Tips_020.csv", 'onik_tips_20.txt', 0, 132),
CsvEntry("Sub_Tips_099.csv", 'onik_015_03.txt', 207, 284),
]
# "gamestart" : [
# 'onik_000.txt',
# 'onik_001.txt',
# 'onik_002.txt',
# 'onik_003.txt',
# 'onik_004.txt',
# 'onik_005.txt',
# 'onik_009.txt',
# 'onik_009_02.txt',
# 'onik_010.txt',
# 'onik_011.txt',
# 'onik_012.txt',
# 'onik_013.txt',
# 'onik_014.txt',
# 'onik_014_02.txt',
# 'onik_015.txt',
# 'onik_015_02.txt',
# 'onik_015_03.txt', 100,
# ],
# "Opening" : [ 'onik_op.txt' ],
# "Sub_Tips_001" : [ 'onik_tips_01.txt' ],
# "Sub_Tips_002" : [ 'onik_tips_02.txt' ],
# "Sub_Tips_003" : [ 'onik_tips_03.txt' ],
# "Sub_Tips_004" : [ 'onik_tips_04.txt' ],
# "Sub_Tips_005" : [ 'onik_tips_05.txt' ],
# "Sub_Tips_006" : [ 'onik_tips_06.txt' ],
# "Sub_Tips_007" : [ 'onik_tips_07.txt' ],
# "Sub_Tips_008" : [ 'onik_tips_08.txt' ],
# "Sub_Tips_009" : [ 'onik_tips_09.txt' ],
# "Sub_Tips_010" : [ 'onik_tips_10.txt' ],
# "Sub_Tips_011" : [ 'onik_tips_11.txt' ],
# "Sub_Tips_012" : [ 'onik_tips_12.txt' ],
# "Sub_Tips_013" : [ 'onik_tips_13.txt' ],
# "Sub_Tips_014" : [ 'onik_tips_14.txt' ],
# "Sub_Tips_015" : [ 'onik_tips_15.txt' ],
# "Sub_Tips_016" : [ 'onik_tips_16.txt' ],
# "Sub_Tips_017" : [ 'onik_tips_17.txt' ],
# "Sub_Tips_018" : [ 'onik_tips_18.txt' ],
# "Sub_Tips_019" : [ 'onik_tips_19.txt' ],
# "Sub_Tips_020" : [ 'onik_tips_20.txt' ],
# "Sub_Tips_099" : [ 'onik_tips_99.txt' ],
#}

View File

@ -1,10 +1,20 @@
#!/usr/bin/env python3
import sys
import orig
import parser
def main():
orig.process_sections()
if len(sys.argv) < 2:
print('Operation not specified.')
sys.exit(1)
if sys.argv[1] == 'generate':
parser.parse_to_csv()
elif sys.argv[1] == 'translate':
orig.process_sections()
if __name__ == "__main__":

View File

@ -2,7 +2,9 @@
import csv
import os
import config
import flow
class OutputLine():
def __init__(self, text_jp: str, text_en: str):
@ -90,37 +92,55 @@ def get_functions_from_file(filepath: str) -> list[str]:
return tokens
def parse_to_csv(filename: str):
out_path = config.get('output_path')
scripts_path = config.get('scripts_path')
def parse_to_csv():
for csv_entry in flow.onik:
out_path = config.get('output_path')
scripts_path = config.get('scripts_path')
csvname = os.path.join(out_path, filename + ".csv")
escapechar = config.get('csv_escapechar')
delchar = config.get('csv_delchar')
with open(csvname, 'w') as csvfile:
csv_writer = csv.writer(
csvfile,
delimiter=delchar,
quoting=csv.QUOTE_MINIMAL,
quotechar=escapechar,
)
escapechar = config.get('csv_escapechar')
delchar = config.get('csv_delchar')
tokens = get_functions_from_file(
os.path.join(scripts_path, filename)
os.path.join(scripts_path, csv_entry.orig)
)
for token in tokens:
function_name = token[0]
csv_path = os.path.join(out_path, 'trans', csv_entry.dest)
os.makedirs(os.path.dirname(csv_path), exist_ok = True)
#print(f'Generating {csv_entry.dest}...')
with open(csv_path, 'w') as csv_file:
csv_writer = csv.writer(
csv_file,
delimiter=delchar,
quoting=csv.QUOTE_MINIMAL,
quotechar=escapechar,
)
i = 0
for token in tokens:
if token[0] != 'OutputLine':
continue
# Only include the range specified by the csv_entry
if i < csv_entry.start:
i += 1
continue
elif i > csv_entry.end:
break
if function_name == "OutputLine":
# NOTE: [1:-1] Removes quotes
# NOTE: replace(' ', '') Is needed for some unity script dialogue
text_jp = token[2][1:-1].replace('\\', '').replace('\n', '').replace(' ', '')
text_en = token[4][1:-1].replace('\\', '').replace('\n', '')
csv_writer.writerow([text_jp, text_en])
i += 1
if i-1 != csv_entry.end:
print(f'WARNING: File "{csv_entry.dest}": written {i-1} of {csv_entry.end} lines')
def parse_to_structure(filename: str) -> list[OutputLine]:
out_path = config.get('output_path')