Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion assets
78 changes: 68 additions & 10 deletions py-src/apply_init_translation.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,19 @@ def main():

if args.game == "r11":
#tip_amount = 110
tip_pages_amount = 10
seg_text = (0xba68, 0x2c11a)
# seg_table = [0x1140, 0xac98]
#seg_table_tips = [0x7610, 0x7f7c]
elif args.game == "n7":
#tip_amount = 112
tip_pages_amount = 9
seg_text = (0xaf80, 0x2254f)
# seg_table = [0x1ba8, 0x9904]
#seg_table_tips = [0x7fbc, 0x880c]
elif args.game == "e17":
#tip_amount = 119
tip_pages_amount = 9
seg_text = (0x89b0, 0x1f709)
# seg_table = [0xeb8, 0x7df8]
#seg_table_tips = [0x65c4, 0x6ee8]
Expand Down Expand Up @@ -64,6 +67,9 @@ def main():
seg_table_tip_ptrs = (head_int_view[0x64//4], head_int_view[0x68//4]-8)
tip_amount = (seg_table_tip_ptrs[1]-seg_table_tip_ptrs[0])//12
seg_table_tips = (head_int_view[seg_table_tip_ptrs[0]//4], head_int_view[seg_table_tip_ptrs[1]//4-2]+4)

seg_table_tip_page_ptrs = (head_int_view[0x68//4], head_int_view[0x68//4]+tip_pages_amount*8)
seg_table_tip_pages = (head_int_view[seg_table_tip_page_ptrs[0]//4+1], seg_table_tips[0])

seg_table_chrono = (head_int_view[0x88//4], head_int_view[0x8c//4])

Expand All @@ -79,14 +85,19 @@ def main():
tips_txt = args.tips
if tips_txt:
tips = r11.tipsparser.parse_tip_file(tips_txt)
#if len(tips) != tip_amount:
# raise Exception(tip_amount, "tips expected, got", len(tips))
new_tip_amount = sum(1 for tip in tips if getattr(tip.title, args.lang) or getattr(tip.title, "jp"))
page_amount = sum(len(getattr(tip.pages, args.lang) or tip.pages.jp) for tip in tips)
tip_offset = page_amount*4+len(tips)*12+seg_table_tips[0]-seg_table_tips[1]
tip_ptr_offset = (len(tips)-tip_amount)*12
tip_offset = page_amount*4+new_tip_amount*12+seg_table_tips[0]-seg_table_tips[1]
tip_ptr_offset = (new_tip_amount-tip_amount)*12
new_tip_pages_amount = tip_pages_amount+1 if new_tip_amount != tip_amount and tip_pages_amount != 10 else tip_pages_amount
tip_page_offset = seg_table_tip_pages[0]-seg_table_tip_pages[1]+((new_tip_amount+new_tip_pages_amount)*2+3)&~3
tip_page_ptrs_offset = (new_tip_pages_amount-tip_pages_amount)*8
else:
tip_offset = 0
tip_ptr_offset = 0
tip_page_offset = 0
tip_page_ptrs_offset = 0
new_tip_pages_amount = tip_pages_amount

chrono_txt = args.chronology
if chrono_txt:
Expand All @@ -99,7 +110,7 @@ def main():

pos = seg_text[0]

offset = lyric_offset+tip_ptr_offset+tip_offset+chrono_offset
offset = lyric_offset+tip_ptr_offset+tip_offset+chrono_offset+tip_page_offset+tip_page_ptrs_offset
if offset:
pos += offset
for i in range(head_int_view[0x8c//4]//4, head_int_view[head_int_view[0x8c//4]//4]//4-1, 1):
Expand All @@ -120,10 +131,12 @@ def main():
head_int_view[0x68//4] += lyric_offset+tip_ptr_offset
if lyric_offset or tip_offset or tip_ptr_offset:
for i in (0x7c, 0x6c, 0x80, 0x84, 0x88):
head_int_view[i//4] += lyric_offset+tip_ptr_offset+tip_offset
head_int_view[i//4] += lyric_offset+tip_ptr_offset+tip_offset+tip_page_offset+tip_page_ptrs_offset
seg_table_tip_ptrs = tuple(x+lyric_offset for x in seg_table_tip_ptrs)
seg_table_tips = tuple(x+lyric_offset+tip_ptr_offset for x in seg_table_tips)
seg_table_chrono = tuple(x+lyric_offset+tip_offset+tip_ptr_offset for x in seg_table_chrono)
seg_table_tip_page_ptrs = tuple(x+lyric_offset+tip_ptr_offset for x in seg_table_tip_page_ptrs)
seg_table_tip_pages = tuple(x+lyric_offset+tip_ptr_offset+tip_page_ptrs_offset for x in seg_table_tip_pages)
seg_table_chrono = tuple(x+lyric_offset+tip_offset+tip_ptr_offset+tip_page_offset+tip_page_ptrs_offset for x in seg_table_chrono)

if songs:
lyric_ptrs = bytearray()
Expand All @@ -148,15 +161,16 @@ def main():

if tips_txt:
#tip_i = seg_table_tip_ptrs[0]//4
tip_ptr_off = seg_table_tips[0]
tip_ptr_off = seg_table_tips[0]+tip_page_ptrs_offset+tip_page_offset
tip_text_ptrs = bytearray()
tip_ptrs = bytearray()
for tip in tips:
tl_title = getattr(tip.title, args.lang)
tl_pages = getattr(tip.pages, args.lang)
title = tl_title or tip.title.jp
pages = tl_pages or tip.pages.jp
title = r11.clean_translation_line(tl_title or tip.title.jp, args.lang, args.game)
title_bytes = r11.str_to_r11_bytes(title, lang=args.lang)+b'\0'
if not title: continue
title_bytes = r11.str_to_r11_bytes(r11.clean_translation_line(title, args.lang, args.game), lang=args.lang)+b'\0'
#head_int_view[tip_i] = tip_ptr_off
tip_ptrs += struct.pack("<I", tip_ptr_off)
tip_text_ptrs += struct.pack("<I", pos)
Expand All @@ -180,6 +194,42 @@ def main():
head[seg_table_tips[0]:seg_table_tips[1]] = tip_text_ptrs
mv = memoryview(head)
head_int_view=mv.cast("I")
if new_tip_amount != tip_amount:
head_short_view=mv.cast("H")
tip_pages = []
for i in range(tip_pages_amount):
tip_page_ptr = head_int_view[seg_table_tip_page_ptrs[0]//4+i*2+1]//2
tip_page = []
while head_short_view[tip_page_ptr] != 0xffff:
tip_page.append(head_short_view[tip_page_ptr])
tip_page_ptr += 1
tip_pages.append(tip_page)
if new_tip_pages_amount != tip_pages_amount:
tip_pages.append([])
for i in range(tip_amount, new_tip_amount):
tip_pages[-1].append(i)
tip_page_bytes = bytearray()
tip_page_ptrs_bytes = bytearray()
page_symbols = ["ア", "カ", "サ", "タ", "ナ", "ハ", "マ", "ヤ", "ラ", "ワ"] # idk why preserve them, but why not
for i in range(len(tip_pages)):
tip_page_ptrs_bytes += struct.pack("<2I", pos, seg_table_tip_pages[0]+len(tip_page_bytes))
page_symbol = r11.str_to_r11_bytes(page_symbols[i], "en")+b'\0'
body += page_symbol
pos += len(page_symbol)
for j in tip_pages[i]:
tip_page_bytes += struct.pack("<H", j)
tip_page_bytes += b"\xff\xff"
for i in range(len(tip_pages), 10):
tip_page_bytes += b"\xff\xff"
if len(tip_page_bytes)%4:
tip_page_bytes += b"\x90\x90"
head_int_view.release()
head_short_view.release()
mv.release()
head[seg_table_tip_page_ptrs[0]:seg_table_tip_page_ptrs[1]] = tip_page_ptrs_bytes
head[seg_table_tip_pages[0]:seg_table_tip_pages[1]] = tip_page_bytes
mv = memoryview(head)
head_int_view=mv.cast("I")

if chrono_txt:
chrono = bytearray()
Expand Down Expand Up @@ -219,6 +269,10 @@ def main():
table_offset += lyric_offset
if table_offset > seg_table_tip_ptrs[0]:
table_offset += tip_ptr_offset
if table_offset > seg_table_tip_page_ptrs[0]:
table_offset += tip_page_ptrs_offset
if table_offset > seg_table_tip_pages[0]:
table_offset += tip_page_offset
if table_offset > seg_table_tips[0]:
table_offset += tip_offset
if table_offset > seg_table_chrono[0]:
Expand All @@ -232,6 +286,10 @@ def main():
dupe_ref += lyric_offset
if dupe_ref > seg_table_tip_ptrs[0]:
dupe_ref += tip_ptr_offset
if dupe_ref > seg_table_tip_page_ptrs[0]:
dupe_ref += tip_page_ptrs_offset
if dupe_ref > seg_table_tip_pages[0]:
dupe_ref += tip_page_offset
if dupe_ref > seg_table_tips[0]:
dupe_ref += tip_offset
if dupe_ref > seg_table_chrono[0]:
Expand Down
16 changes: 8 additions & 8 deletions text/chapters-psp-e17/S_1B_1.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2210,7 +2210,7 @@ CN PLACEHOLDER
少年「『智也』がいい」%K%P
'%TS119Tomoya%TE' sounds good.
CN PLACEHOLDER
;Мальчик«Мне нравится „Томоя“.»%K%P
;Мальчик«Мне нравится „%TS119Томоя%TE“.»%K%P

みんな「智也ぁ〜!?」%K%P
Tomoya!?
Expand All @@ -2220,7 +2220,7 @@ CN PLACEHOLDER
少年「『誠』がいい」%K%P
'%TS119Makoto%TE' is good.
CN PLACEHOLDER
;Мальчик«„Макото“ звучит неплохо.»%K%P
;Мальчик«„%TS119Макото%TE“ звучит неплохо.»%K%P

みんな「誠ぉ〜!?」%K%P
Makoto!?
Expand All @@ -2230,7 +2230,7 @@ CN PLACEHOLDER
少年「『直人』がいい」%K%P
'%TS119Naoto%TE' has a nice ring to it.
CN PLACEHOLDER
;Мальчик«По мне, „Наото“ звучит неплохо.»%K%P
;Мальчик«По мне, „%TS119Наото%TE“ звучит неплохо.»%K%P

みんな「直人ぉ〜!?」%K%P
Naoto!?
Expand All @@ -2240,7 +2240,7 @@ CN PLACEHOLDER
少年「『椎名』がいい」%K%P
'%TS119Shiina%TE' works.
CN PLACEHOLDER
;Мальчик«А „Сиина“ ничё.»%K%P
;Мальчик«А „%TS119Сиина%TE“ ничё.»%K%P

みんな「椎名ぁ〜!?」%K%P
Shiina!?
Expand All @@ -2250,7 +2250,7 @@ CN PLACEHOLDER
少年「『元樹』がいい」%K%P
'%TS119Motoki%TE' sounds nice.
CN PLACEHOLDER
;Мальчик«„Мотоки“ звучит неплохо.»%K%P
;Мальчик«„%TS119Мотоки%TE“ звучит неплохо.»%K%P

みんな「元樹ぃ〜!?」%K%P
Motoki!?
Expand All @@ -2260,7 +2260,7 @@ CN PLACEHOLDER
少年「『イナケン』がいい」%K%P
'%TS119Inaken%TE' is good.
CN PLACEHOLDER
;Мальчик«„Кид“ мне по душе.»%K%P
;Мальчик«„%TS121Кид%TE“ мне по душе.»%K%P

みんな「イナケン〜!?」%K%P
Inaken!?
Expand All @@ -2270,7 +2270,7 @@ CN PLACEHOLDER
少年「『恭介』がいい」%K%P
I like '%TS119Kyousuke%TE'.
CN PLACEHOLDER
;Мальчик«Мне нравится „Кёске“.»%K%P
;Мальчик«Мне нравится „%TS119Кёске%TE“.»%K%P

みんな「恭介ぇ〜!?」%K%P
Kyousuke!?
Expand All @@ -2280,7 +2280,7 @@ CN PLACEHOLDER
少年「『王子様』がいい」%K%P
I like '%TS119Prince%TE'.
CN PLACEHOLDER
;Мальчик«Зовите меня „Принц“.»%K%P
;Мальчик«Зовите меня „%TS119Принц%TE“.»%K%P

みんな「王子様ぁ〜!?」%K%P
Prince!?
Expand Down
2 changes: 1 addition & 1 deletion text/chapters-psp-e17/S_2B_3.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ CN PLACEHOLDER
沙羅「高校2年生、16歳、1月21日生まれ、水がめ座」%K%P
I'm a junior. I'm sixteen, and I was born January 21st. Oh, and I'm an Aquarius.
CN PLACEHOLDER
Я учусь во втором классе старшей школы. Мне 16, и я родилась 21 января. Э-э, а по гороскопу я Водолей.
Я учусь во втором классе %TS122старшей школы%TE. Мне 16, и я родилась 21 января. Э-э, а по гороскопу я Водолей.

すらすらと、まるで歌うように口ずさむ沙羅。%K%P
Sara recited it so smoothly that it was like she was singing a song.
Expand Down
2 changes: 1 addition & 1 deletion text/chapters-psp-e17/S_3B_1.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3288,7 +3288,7 @@ CN PLACEHOLDER
当然と言うべきか、いずれのフレーズもCレベルには侵入することができなかった。%K%P
Of course, none of those phrases got her access to the C Level information.
CN PLACEHOLDER
Конечно, ни одна из этих фраз не дала ей доступа к информации уровня С.
Конечно, ни одна из этих %TS123фраз%TE не дала ей доступа к информации уровня С.

っていうか、なぜ声に出す必要があるのだろうか?%K%P
I didn't see why she had to shout all of them out either.
Expand Down
2 changes: 1 addition & 1 deletion text/chapters-psp-e17/T_1B_1.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2486,7 +2486,7 @@ CN PLACEHOLDER
ココ「中3!」%K%P
I'm in ninth grade!
CN PLACEHOLDER
Средняя школа, третий год!
%TS122Средняя школа%TE, третий год!

武「な、なぬぃっ!?」%K%P
Wh-What?!
Expand Down
4 changes: 2 additions & 2 deletions text/chapters-psp-e17/T_1C_2.txt
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ CN PLACEHOLDER
優「ねぇ、倉成は50mの長さに敷いたふとんの上、何秒くらいで走れる?」%K%P
Hey, Kuranari. How fast do you think you could run 50 meters on mattresses?
CN PLACEHOLDER
Слушай, Куранари. Как быстро ты сможешь пробежать 50 метров по футонам?
Слушай, Куранари. Как быстро ты сможешь пробежать 50 метров по %TS128футонам%TE?

優がいきなり尋ねた。%K%P
You suddenly shot me the question.
Expand Down Expand Up @@ -681,7 +681,7 @@ CN PLACEHOLDER
武「適当だけど、名無しの権兵衛」%K%P
It'd be fitting to call him John Doe.
CN PLACEHOLDER
Думаю, очень даже уместно будет его звать Джоном Доу (так называют человека, чьё настоящее имя неизвестно).
Думаю, очень даже уместно будет его звать %TS120Джоном Доу%TE.

空「適当だから『権兵衛』だ、というのは全国の権兵衛さんに申し訳ないのではないですか?」%K%P
But wouldn't calling him that just because it's fitting be rude to all of the people named John Doe?
Expand Down
5 changes: 1 addition & 4 deletions text/chapters-psp-e17/T_4A_2.txt
Original file line number Diff line number Diff line change
Expand Up @@ -842,7 +842,6 @@ CN PLACEHOLDER
You'd better not be preparing a punch line about fish...
CN PLACEHOLDER
Ответ „по-японски они звучат одинаково“ – не в счёт...
//Надо будет сделать заметку на слове "карп", а там дать описание типа "В японском языке слово "любовь" (иероглиф) и "карп" (иероглиф) произносятся одинаково – 'koi'.

武「なにっ! 先手を打たれたぞ!」%K%P
What!? Am I that transparent!?
Expand Down Expand Up @@ -878,7 +877,6 @@ CN PLACEHOLDER
I thought I said 'no jokes'...
CN PLACEHOLDER
Сравнивать любовь с чем-то густым – тоже нельзя...
//Заметка на слове "густым", а там дать описание типа "В японском языке слово "любовь" (иероглиф) и "густой" (иероглиф) произносятся одинаково – 'koi'.

武「なにっ! 一度ならず二度までも!!」%K%P
What!? You got me the second time too!?
Expand Down Expand Up @@ -924,7 +922,6 @@ CN PLACEHOLDER
'Intent' as in actively pursuing it, correct?
CN PLACEHOLDER
Или, может, „любовь не предшествует действию“?
//Надо будет сделать заметку на кавычках, а там дать описание типа... ну, ты уже понял принцип.

武「…………」%K%P
.........
Expand All @@ -939,7 +936,7 @@ CN PLACEHOLDER
空「データベースにあったから、私はそう答えただけです」%K%P
I do not have anything more than that in my database.
CN PLACEHOLDER
Просто эти сведения имеются в моей базе данных.
Просто эти %TS124сведения%TE имеются в моей базе данных.

空「倉成さん、そろそろ本題に」%K%P
Kuranari-san, can you please answer my original question?
Expand Down
3 changes: 1 addition & 2 deletions text/chapters-psp-e17/T_4B_1.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1741,9 +1741,8 @@ CN PLACEHOLDER
優「寿司桶に入ってるバランがビニール製だからと言って、その寿司が安物だと言い切ることはできないはずなのよっ!」%K%P
Just because the sushi in the display case is made of plastic doesn't mean the sushi inside is cheap!
CN PLACEHOLDER
Нельзя говорить, что набор суши должен стоить дешевле лишь потому, что внутри используется пластиковый разделитель, а не из бамбука!
Нельзя говорить, что набор суши должен стоить дешевле лишь потому, что внутри используется пластиковый %TS125разделитель%TE, а не из бамбука!
// dsp2003: Иначе говоря, если блюдо на витрине сделано из папье-маше и ваты, это вовсе не значит, что настоящее стоит дёшево!
//не забыть создать тут заметку

少年「おおーっ……!」%K%P
Whoa!?
Expand Down
3 changes: 1 addition & 2 deletions text/chapters-psp-e17/T_4B_4.txt
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ CN PLACEHOLDER
武「これ、シロガネーゼの鉄則」%K%P
That's the key, marrying into moolah.
CN PLACEHOLDER
Таков путь гламурезе.
Таков путь %TS126гламурезе%TE.

空「しろがねーぜ?」%K%P
Moolah?
Expand All @@ -382,7 +382,6 @@ CN PLACEHOLDER
Does that have to do with cows?
CN PLACEHOLDER
Это какой-то фермент?
//вариант адаптации, предложенный жптшкой. Видимо, сюда тоже надо будет вставить свою заметку про исходную игру слов シロガネーゼ и 酵素 (こうそ)

武「いや、そうではなく……」%K%P
No, no...
Expand Down
3 changes: 1 addition & 2 deletions text/chapters-psp-e17/T_4C_2.txt
Original file line number Diff line number Diff line change
Expand Up @@ -926,8 +926,7 @@ CN PLACEHOLDER
武「あのひょっとこハム吾郎を、だ」%K%P
That funny-looking hamster.
CN PLACEHOLDER
Пойду вызволять твоего Хомячелло.
//Очередная кастомная заметка про маску "Хёттоко" и про игру слов 'hamster' - 'ハムスタ' (hamusuta)+'吾郎 ' (Goro, старомодное японское имя)
Пойду вызволять твоего %TS127Хомячелло%TE.

つぐみ「無理よ!」%K%P
There's no way you'll make it!
Expand Down
2 changes: 1 addition & 1 deletion text/chapters-psp-e17/T_4C_3.txt
Original file line number Diff line number Diff line change
Expand Up @@ -771,7 +771,7 @@ CN PLACEHOLDER
武「もっとギャルっぽいメイクをしなくちゃならん!」%K%P
Your makeup has to be more... feminine.
CN PLACEHOLDER
Нужно сделать макияж более вызывающим, в стиле гяру!
Нужно сделать макияж более вызывающим, в стиле %TS129гяру%TE!

空「先生……」%K%P
Professor...
Expand Down
4 changes: 2 additions & 2 deletions text/charset-tables/r11-ru-font-table.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1133,15 +1133,15 @@
1132: 0x8744 ⑤
1133: 0x8745 ⑥
1134: 0x8746 ⑦
1135: 0x8747
1135: 0x8747 ō # ⑧
1136: 0x8748 ⑨ # R11/E17:Rendered as a blank space (full width?)
1137: 0x8749 ⑩ # ä in e17 in r11, but blank space in n7
1138: 0x874A ö # ⑪
1139: 0x874B ü # ⑫
1140: 0x874C é # ⑬
1141: 0x874D à # ⑭
1142: 0x874E ä # ⑮
1143: 0x874F
1143: 0x874F ū # ⑯
1144: 0x8750 Ö # ⑰
1145: 0x8751 ™ # ⑱ in SJIS
1146: 0x8752 ⑲
Expand Down
Binary file added text/font/glyphs-ru/1135.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added text/font/glyphs-ru/1143.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions text/font/glyphs-ru/glyph_data.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1137,15 +1137,15 @@ blockSize: 256
1132: 0:15
1133: 0:15
1134: 0:15
1135: 0:15
1135: 2:6
1136: 0:16
1137: 0:16
1138: 2:6
1139: 1:6
1140: 2:6
1141: 1:5
1142: 1:5
1143: 0:15
1143: 1:6
1144: 0:7
1145: 1:9
1146: 2:13
Expand Down
Loading