Compare commits
No commits in common. "himatsubushi" and "master" have entirely different histories.
himatsubus
...
master
|
|
@ -0,0 +1,109 @@
|
||||||
|
# Exclude
|
||||||
|
-12432
|
||||||
|
-2415
|
||||||
|
# Misc
|
||||||
|
12:caption"Onikakushi-hen"
|
||||||
|
23:rmenu "Save",save,"Load",load,"Skip",skip,"Hide",windowerase,"Log",lookback,"Exit",reset
|
||||||
|
#TIPSを入手しました
|
||||||
|
23413: lsp NEWTIPSMSG,":s#FFFFFFNEW TIPS AVAILABLE",177,112
|
||||||
|
24017: mov $TIPS_001," うちって学年混在? "
|
||||||
|
24018: mov $TIPS_002," うちって制服自由? "
|
||||||
|
24019: mov $TIPS_003," 前原屋敷 "
|
||||||
|
24020: mov $TIPS_004," ダム現場のバラバラ殺人 "
|
||||||
|
24021: mov $TIPS_005," 雛見沢ダム計画 "
|
||||||
|
24022: mov $TIPS_006," 週刊誌の特集記事 "
|
||||||
|
24023: mov $TIPS_007," レナってどういう名前だよ? "
|
||||||
|
24024: mov $TIPS_008," 回覧板 "
|
||||||
|
24025: mov $TIPS_009," ダム推進派の夫婦の転落事故 "
|
||||||
|
24026: mov $TIPS_010," 古手神社の神主の病死 "
|
||||||
|
24027: mov $TIPS_011," 主婦殺人事件 "
|
||||||
|
24028: mov $TIPS_012," 無線記録 "
|
||||||
|
24029: mov $TIPS_013," 犯人は4人以上? "
|
||||||
|
24030: mov $TIPS_014," 捜査メモ "
|
||||||
|
24031: mov $TIPS_015," 本部長通達 "
|
||||||
|
24032: mov $TIPS_016," 自殺を誘発するクスリは? "
|
||||||
|
24033: mov $TIPS_017," 脅迫 "
|
||||||
|
24034: mov $TIPS_018," 元気ないね。 "
|
||||||
|
24035: mov $TIPS_019," 二重人格??? "
|
||||||
|
24036: mov $TIPS_020," セブンスマートにて "
|
||||||
|
# onik_000
|
||||||
|
1202:「ゴ・メ・ン・ナ・サ・イ!sd!w800って言ってみな。@言わないならぁ……!」@
|
||||||
|
1630:「…圭ちゃんは食らうの初めてだよね。@…今日のはまだ!s100…甘い方…。」!sd
|
||||||
|
1823:「け!w300……圭ちゃんがしてよ……!s300。おじさんは応援してる……。」!sd@
|
||||||
|
1991:「それで、今の人は入江診療所の看護婦のみよさん。@趣味は野鳥の観察と撮影だって。」@
|
||||||
|
2373:「…ぇ…え?@!s200……ぇぇと!sd………その!w1000………は、恥ずかしいな……教えなきゃだめ?………どうしても?」@
|
||||||
|
2404:
|
||||||
|
2406: どしゃぁあぁッ!!!@
|
||||||
|
2417: 奇声を発しながら次々とりんごを…俺の口に…!d200…!d200次々!d200…!d200…!d200りん!d200…!d200…!d200ご………!d200…¥
|
||||||
|
2474:「…え、……えぇえぇえぇぇぇえぇえッ?!?!@!sd 逆転負けぇえぇッ?!?!」@
|
||||||
|
2813:「きゃ…!d200…!d200きゃ…、花も恥らう乙女になんて口の聞き方〜ッ?!?!」@
|
||||||
|
2964:!s250……まさか!sd¥
|
||||||
|
2993:「くっくっく!@ 圭ちゃんの手札を右から言うぜ?@ 3、!d4004、!d4009、!d400J、!d400Q。」@
|
||||||
|
3013:!s200「お…鬼だ…!sdこいつらは鬼だ…!@ レナ…は…鬼じゃないよな…?」@
|
||||||
|
3030: 多分、クラス全員が無人島で自爆首輪付きで殺し合いなんて状況下では水を得た魚と化すだろうな。@
|
||||||
|
3316:!s200……俺の……!sd逆転勝利だッッ!!!!!!!/
|
||||||
|
3394:!s200……………!sdお、@
|
||||||
|
3410:「!s150や、や、やめろおぉおおぉおぉ……ぉ……ぉ…!!!」!sd@
|
||||||
|
4105:「え?@!s100……あ。」!sd¥
|
||||||
|
4288: っと!@!s200………お!sd、誰かが下に来るぞ。@
|
||||||
|
4989:「…うんうん……なんでもしまっちゃうよ☆@ はぅ……かぁいい…。」/
|
||||||
|
5090:「セ、センスねぇーッ!!@ なんだよそのネーミングは!!」@
|
||||||
|
5300:「9!@ いないですの?!!w400 8!!w300 7!@ あがりでございます!!」/
|
||||||
|
5426:「……撫でた。!w400……これで!w500……いい…?!」!sd@
|
||||||
|
# 5594: '!s100「あ、………!sdな、なんだ……あははは……は。」@
|
||||||
|
5792:……くっくっく!!sd うつけ者めッ!!!@
|
||||||
|
# 5966:「ぎゃぎゃ!s250………!s80ぎゃああぁあぁあぁあぁああッ!!!」!sd¥
|
||||||
|
6224: とりとめのないおしゃべり。@
|
||||||
|
# onik_009
|
||||||
|
6645:quakey 5,200
|
||||||
|
6646:………あれ?@ 圭一くんと梨花ちゃんは…なんでスタートしないんだろ? しないんだろ?」@
|
||||||
|
6647: 魅音と沙都子は猛ダッシュで会場に散ったが、俺と梨花ちゃんは焦る様子もなく、ただ立ったままだ。¥
|
||||||
|
7422:!s200……!sdだが……あと1発ではどう考えても!s250………!sd無理かッ!¥
|
||||||
|
8741:「説明書も英語ですけどね。@…ルールはそう難しくはありませんのよ!」@
|
||||||
|
9542:「凶器はロープで、犯行現場は!w300……う〜ん!w300………ラウンジ!!!」@
|
||||||
|
10107:「ごめん!@!s100………!sdよく知らないの。」@
|
||||||
|
10824: 看板には「入江診療所」とあり、割と綺麗に書かれていた。¥
|
||||||
|
11564: 大石さんが俺にしている話……!s200!sdそれは毎年起こるオヤシロさまの祟りは個々の事件でなく、@全て関連した事件であり、……!s200!sdしかもそれは複数犯で雛見沢に潜伏しているかもしれない……というものだ。@
|
||||||
|
11928: じゃあ……!俺がいつも通りに生活するなら……!s400!sd何も危害を加えない……!w800ということなのか…?@
|
||||||
|
12086: つまりレナは……!w400私たちの意思は伝わったかな?!w600……そう言いたいのだろうか…。¥
|
||||||
|
12091:!s100「…………………………!sd圭一くん?」@
|
||||||
|
12495: …俺を完全な方法で「消し去る」までの………!w1000時間稼ぎ。@
|
||||||
|
12840:“私、前原圭一は命を狙われています”¥
|
||||||
|
13121: 轢き逃げとかそういうのじゃなくて……!sd今の車、!w1000……俺をはねようとしてたんじゃないのか…?¥
|
||||||
|
14076:!s50「おおぉぉおおぉおおぉおッ!!!!!」¥
|
||||||
|
14097:!s50「うッおおぉおおおおぉおおぉおおおぉッッ!!!」¥
|
||||||
|
14636:!s100「……………………!sdなら、…仕方ないかな。」@
|
||||||
|
14673: 大根、にんじん、ごぼうにジャガイモ、パワフルな食感とボリューム……!sdあぁ…その味噌汁、最高だよ…。¥
|
||||||
|
14727: レナは…………!s500両親が不在であることを………!sd知っている?@
|
||||||
|
14893:「うぅん、…!s200*******。」!sd@
|
||||||
|
14949:「だから。@……レナが。@圭一君の。@後ろに。@ずっとくっついてたの。@!s250…うふふふ。」!sd@
|
||||||
|
15034:「帰れ帰れ!!!w500!s100帰れぇええぇえぇええッ!!」!sd@
|
||||||
|
15248:!s300「………………はい。」!sd@
|
||||||
|
15259:!s500「……………オヤシロさま、!w1000………ですよ。」!sd@
|
||||||
|
15261:「…………オヤシロさまの祟りって、!w500本当にあるのかな!s400……なんて、まぁ…はっはっは…!」!sd@
|
||||||
|
# 15696:!s200「け…圭ちゃん……!sdそんなのって……、」¥
|
||||||
|
# 15748:!s300「………ぅ………!sdひどいよ………圭ちゃん………、」@
|
||||||
|
15758: その背後に、ぼそりと。@…本当にぼそりと、その独り言が聞こえた。¥
|
||||||
|
16008:「信じないよね。@!s200あはははははははははははははははは。」!sd¥
|
||||||
|
16018:「……待ってよ圭一くん。@!s100あはははははははははははははははははははははは。」!sd@
|
||||||
|
16075:「お話しようよ圭一くん。@………お話!w800お話。……!s200あはははははははははははははは。」!sd@
|
||||||
|
16081:「嘘だッ!!!! !s200あははははははははははははは。」!sd¥
|
||||||
|
16131: もう人が“転校”するところは見たくないの。!s200あははははははははははははは。」!sd¥
|
||||||
|
16146:「悩みがなくなればきっと圭一くんも元通り。@みんなとも仲良しに戻れて、また楽しく部活ができるよ。@今度は一緒に組んで魅ぃちゃんをやっつけようね。!s200あはははははははははははははははは。」!sd@
|
||||||
|
16152: また一緒に宝探しに行きたいね。@今度はお弁当も作っていくよ。@何なら今から宝探しでもいいよ。@行こうよ一緒にダム現場。@見つけたばかりのかぁいいの、圭一くんにも見せてあげるね。@きっと圭一くんも気に入るよ。!s200あははははははははははははは。」!sd¥
|
||||||
|
16192:「何がこわいのかな…?@ 怯えるなんて圭一くんらしくないよ? !s200あははははははははははははははははははははは。」!sd@
|
||||||
|
16217:「言ったよ。@…悟史くんは“!w500転校”!sd!w800したの。」@
|
||||||
|
16280:!s200あはははははははははははははははははははははははは。!sd@
|
||||||
|
16641:!s200「……あははははははははははははははははははははは。」!sd@
|
||||||
|
# 16665:!s200「あはははははははははははははははははははははははははははははははははははははははははははははははははははははは……、」!sd¥
|
||||||
|
# 21545:!s150…………………………………!s50好きだった。!w3000
|
||||||
|
# onik_015_2
|
||||||
|
17172:「映画の監督とか。@工事現場の監督とか。!w800!s200あははははははははははははははははは。」!sd¥
|
||||||
|
17205:「あはははは。監督は監督さんだよ。!s200あははははははははははははははははは。」!sd@
|
||||||
|
# 17208:!s150「あはははははははははははははははははははははははははははははははは…」!sd¥
|
||||||
|
# 17213:!s150「あははははははははははははははははははははははは。」!sd¥
|
||||||
|
# 17235:!s200「あははははははははははははははははははははははははははは。」!sd¥
|
||||||
|
# onik_tips_14
|
||||||
|
22657:・歯型から都内歯科へ照合@ > 警視庁へ@
|
||||||
|
22658:・顔写真の送付@ > 警視庁へ@
|
||||||
|
22665:・入江診療所に勤務の看護婦@
|
||||||
|
|
@ -1,80 +0,0 @@
|
||||||
# Misc
|
|
||||||
15:caption "Higurashi When They Cry"
|
|
||||||
26:rmenu "Save",save,"Load",load,"Skip",skip,"Hide",windowerase,"Log",lookback,"Exit",reset
|
|
||||||
2217:「け!w300……圭ちゃんがしてよ……!s300。おじさんは応援してる……。」!sd
|
|
||||||
2761:「…ぇ…え?@!s200……ぇぇと!sd………その!w1000………は、恥ずかしいな……教えなきゃだめ?………どうしても?」@
|
|
||||||
2771:「な…なんでわかるな…?!@ …かな?…はぅ……レ、レナの手作り……、」@
|
|
||||||
2792:
|
|
||||||
2794: どしゃぁあぁッ!!!/>
|
|
||||||
2802:「はは、ははい、!d300ぁ、!d300あ〜んしてぇえぇ…けけけ圭一くん!w500!s100……けけけけけ…☆!sd@
|
|
||||||
2803:」@
|
|
||||||
2805: 奇声を発しながら次々とりんごを…俺の口に…!d200…!d200次々!d200…!d200…!d200りん!d200…!d200…!d200ご………!d200…!d200「ほ、ほうははほほ…、ほへたひの…はひは……(どうだ沙都子。俺たちの勝ちだ)」¥
|
|
||||||
2809:
|
|
||||||
2852: うさぎさんのお皿を押しつけられた梨花ちゃんは唖然とする紗都子の手をレフェリーのように振り上げると、!w1000ぼそりと言った。@
|
|
||||||
3150: 「レナはよくあそこ…工事現場のとこへ宝捜しに行くのか?」@
|
|
||||||
3189:「きゃ…!d200…!d200きゃ…、花も恥らう乙女になんて口の聞き方〜ッ?!?!」@
|
|
||||||
3340:!s250……まさか!sd¥
|
|
||||||
3786:「!s150や、や、やめろおぉおおぉおぉ……ぉ……ぉ…!!!」!sd@
|
|
||||||
4475:「え?@!s100……あ。」!sd¥
|
|
||||||
4658: っと!@!s200………お!sd、誰かが下に来るぞ。@
|
|
||||||
5445:「セ、センスねぇーッ!!@ なんだよそのネーミングは!!」@
|
|
||||||
5781:「……撫でた。!w400……これで!w500……いい…?!」!sd@
|
|
||||||
9890:「凶器はロープで、犯行現場は!w300……う〜ん!w300………ラウンジ!!!」@
|
|
||||||
10367: 「なら……、レナも久しぶりに宝捜しに行こうかなぁ…!」@
|
|
||||||
10454:「ごめん!@!s100………!sdよく知らないの。」@
|
|
||||||
10762: …俺は子機に持ち帰ると2階の自分の部屋へ駆け戻った。¥
|
|
||||||
10875: 「1年目はダムの作業員。@2年目は誘致派の男の妻。@3年目は神主の妻。@4年目は被害者宅の子供で、5年目は交際相手…かな。@……特につながりはなさろうだし。」@
|
|
||||||
11885: 大石さんが俺にしている話……!s200!sdそれは毎年起こるオヤシロさまの祟りは個々の事件でなく、@全て関連した事件であり、……!s200!sdしかもそれは複数犯で雛見沢に潜伏しているかもしれない……というものだ。@
|
|
||||||
12247: じゃあ……!俺がいつも通りに生活するなら……!s400!sd何も危害を加えない……!w800ということなのか…?@
|
|
||||||
12404: つまりレナは……!w400私たちの意思は伝わったかな?!w600……そう言いたいのだろうか…。¥
|
|
||||||
12750:!s500「!sd……@
|
|
||||||
12754:あぁ、………おはよ。」@「なんだなんだ、ずいぶんと覇気のない挨拶じゃ〜ん?@
|
|
||||||
12755: 差し入れのおはぎ、ちゃんと食べてくれなかったのー?」@ ちゃんと食べたからこの様子なんだよ…。¥
|
|
||||||
12756:言葉が喉のそこまで出掛かった。¥
|
|
||||||
12813: …俺を完全な方法で「消し去る」までの………!w1000時間稼ぎ。@
|
|
||||||
21534:「味なんかはどうでもいいんだ圭一!@な〜…!s200いいだろう〜☆」!sd ……そう。@
|
|
||||||
21536:;……そう。@
|
|
||||||
21674:「……!s400ほ〜〜〜!!sdそれはご苦労さんなことで。」@ 俺の中の緊張が瞬時に解けていく。@
|
|
||||||
21675:; 俺の中の緊張が瞬時に解けていく。@
|
|
||||||
22733:「考えろ前原圭一!!@ 考えるんだ前原圭一!!@ カレーを作る方法じゃない、勝負に勝つ方法をだ…ッ!!!@…………むむむ……!s300かぁああぁあぁあッ!!!!」!s0 一手思いつく。!sd/
|
|
||||||
22751:; 一手思いつく。@
|
|
||||||
22934:「とても簡単なことなんですよ。@…カレーもおにぎりも、!s0…お米をおいしく食べるための知恵なんですッ!!!!」!sd/
|
|
||||||
22938:;」\
|
|
||||||
23078:「カレーはこの世で一番尊くて神聖な素晴らしい料理です。@それとおにぎりを同一扱いするなんて断固許せません。@いいですか?@!s0カ!w100レ!w100ー!w100は!w100四!w100大!w100河!w100川!w100文!w100明!w100に!w100匹!w100敵!w100す!w100る!w100第!w100五!w100の!w100文!w100明!w100と!w100し!w100て!w100古!w100代!w100イ!w100ン!w100ド!w100に!w100生!w100ま!w100れ!w100、!w100ア!w100シ!w100ョ!w100カ!w100王!w100の!w100時!w100代!w100に!w100カ!w100ピ!w100ラ!w100城!w100で!w100シ!w100ャ!w100カ!w100の!w100生!w100誕!w100に!w100万!w100国!w100食!w100文!w100化!w100博!w100覧!w100会!w100が!w100絶!w100賛!w100し!w100て!w100ミ!w100シ!w100ュ!w100ラ!w100ン!w100ぐ!w100る!w100ぐ!w100る!w100エ!w100ッ!w100フ!w100ェ!w100ル!w100塔!w100す!w100ら!w100も!w100カ!w100レ!w100ー!w100漬!w100け!w100を!w100ぐ!w100つ!w100ぐ!w100つ!w100煮!w100込!w100ん!w100で!w100タ!w100ー!w100メ!w100リ!w100ッ!w100ク!w100が!w100寝!w100て!w100も!w100覚!w100め!w100て!w100も!w100カ!w100レ!w100ー!w100カ!w100レ!w100ー!w100カ!w100レ!w100ー!w100カ!w100レ!w100ー!w100……」!sd「…ちょっと圭一さん!¥
|
|
||||||
23087: 何をふらふらしてますのー!!@ 後片付けもお料理の一部ですのよー!!」@
|
|
||||||
25487: 腕を風車のように大きくゆっくりと回し…@
|
|
||||||
# This line sucks beacuse it uses single width characters like its nothing
|
|
||||||
25803: 「園崎さ〜ん、7番テーブルにDXパフェを5つお願いします〜!」@
|
|
||||||
-25803
|
|
||||||
39425: 自分の名前が突然出て…、びっくりたのは俺だけのようだった…。¥
|
|
||||||
40913:!s100「げげげげげげげげげげげげげげげげげげげげげげげげげげげげげ!!!sd 出来た、全部出来た!@ 私が殺したいヤツは…これで全員…!!!@げげげげげげげげげげげげげげげげげげげげげげげげげげげげげげげげげげげ!!」@ …あの日、魅音が俺に残した最後の言葉が…蘇る!s100「……今日を境に魅音が戻ってくることはもうない。」!sd 今日以降、もし私の姿があったとしても、¥
|
|
||||||
-40913
|
|
||||||
40918:;
|
|
||||||
40923:;
|
|
||||||
40925:それは姿だけ。!w800 …私の姿をした鬼だから。@
|
|
||||||
40926:;
|
|
||||||
13431: 轢き逃げとかそういうのじゃなくて……!s100今の車、!sd……俺をはねようとしてたんじゃないのか…?!w1000 思い出してみると…少し前から俺の後ろをずっと車が、徐行でついてきていたような気がする。¥
|
|
||||||
13434:;
|
|
||||||
-14111
|
|
||||||
-14615
|
|
||||||
-14663
|
|
||||||
-14969
|
|
||||||
14975: 大根、にんじん、ごぼうにジャガイモ、パワフルな食感とボリューム……!s500あぁ…その味噌汁、最高だよ…。!sd「ご飯も持ってきてあげたから、レンジで暖めればすぐ食べられるし☆」¥
|
|
||||||
14977:;
|
|
||||||
15029: レナは…………!s500両親が不在であることを………!sd知っている?!s500 だが…はったりの可能性だってある。!sd …両親が居るよう、部屋の明かり等でいろいろ偽装したのだ。@
|
|
||||||
15031:;
|
|
||||||
15032:;
|
|
||||||
15336:「帰れ帰れ!!!w500帰れぇええぇえぇええッ!!」!s100 レナが帰りたくても帰れないのは、俺がレナの指を挟んでいるからなのに…。!sd@
|
|
||||||
15337:;
|
|
||||||
15550:!s300「………………はい。」!sd「大石さんはその内容を知っているからこそ、レナたちを疑っているんですね?」@
|
|
||||||
15551:;
|
|
||||||
15561:「……………オヤシロさま、!sd………ですよ。」!w1000「え?」@
|
|
||||||
15562:;
|
|
||||||
15563:「…………オヤシロさまの祟りって、!w500本当にあるのかな!s400……なんて、まぁ…はっはっは…!」!sd 大石さんの笑いは乾いていて、とてもつられて笑い出せるようなものではなかった。@
|
|
||||||
15565:;
|
|
||||||
-16340
|
|
||||||
16509:「言ったよ。@…悟史くんは“!w500転校”!sdしたの。」!w800「その“転校”ってのをやめろよッ!!!!」@
|
|
||||||
16510:;
|
|
||||||
16929:「……あははははははははははははははははははははは。」!s200 これほど爽やかでない笑い声は聞いたことがなかった。!sd@
|
|
||||||
16931:;
|
|
||||||
-18241
|
|
||||||
42
src/fix.py
42
src/fix.py
|
|
@ -4,9 +4,6 @@
|
||||||
import scripter
|
import scripter
|
||||||
import config
|
import config
|
||||||
import hashlib
|
import hashlib
|
||||||
import replacements
|
|
||||||
|
|
||||||
excludes = ['zamyo gorrino']
|
|
||||||
|
|
||||||
def open_onikakushi() -> str:
|
def open_onikakushi() -> str:
|
||||||
|
|
||||||
|
|
@ -21,22 +18,51 @@ def open_onikakushi() -> str:
|
||||||
print(f"Could not open original script path {config.get('original_path')}")
|
print(f"Could not open original script path {config.get('original_path')}")
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
|
replacementsfile = None
|
||||||
|
try:
|
||||||
|
replacementsfile = open('replacements/' + md5hash)
|
||||||
|
except:
|
||||||
|
print(f"The original script file with hash {md5hash} does not have a matching replacement file, no replacements will be executed")
|
||||||
|
|
||||||
outpath = 'tmp/onikakushi.txt'
|
outpath = 'tmp/onikakushi.txt'
|
||||||
outfile = open(outpath, 'w', encoding='shift_jisx0213')
|
outfile = open(outpath, 'w', encoding='shift_jisx0213')
|
||||||
|
|
||||||
repls = replacements.get_replacements(md5hash)
|
replacements = {}
|
||||||
global excludes
|
exclude = []
|
||||||
excludes = replacements.get_excludes(md5hash)
|
|
||||||
|
# Parse replacements file
|
||||||
|
# Syntax:
|
||||||
|
# - '-<number>' -> exclude this line
|
||||||
|
# - Begins with '#' -> comment
|
||||||
|
# - '<number>:<string>' -> replace the line in original script with this string
|
||||||
|
if replacementsfile != None:
|
||||||
|
try:
|
||||||
|
for line in replacementsfile:
|
||||||
|
if line.startswith('#'):
|
||||||
|
continue
|
||||||
|
if line.startswith('-'):
|
||||||
|
exclude.append(int(line[1:]))
|
||||||
|
continue
|
||||||
|
split_line = line.split(':', 1)
|
||||||
|
offset_number = int(split_line[0])
|
||||||
|
replace_string = split_line[1]
|
||||||
|
replacements[offset_number] = replace_string
|
||||||
|
except:
|
||||||
|
print(f"Malformed replacement file on {md5hash}, line: {line}")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
for i, line in enumerate(origfile):
|
for i, line in enumerate(origfile):
|
||||||
if i+1 not in repls:
|
if i not in exclude and i not in replacements:
|
||||||
outfile.write(fix_common_displaced_commands(line)+'\n')
|
outfile.write(fix_common_displaced_commands(line)+'\n')
|
||||||
else:
|
else:
|
||||||
outfile.write(repls[i+1])
|
outfile.write(replacements.get(i, line[:-1])+'\n')
|
||||||
|
|
||||||
outfile.close()
|
outfile.close()
|
||||||
origfile.close()
|
origfile.close()
|
||||||
|
|
||||||
|
if replacementsfile != None:
|
||||||
|
replacementsfile.close()
|
||||||
|
|
||||||
return outpath
|
return outpath
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
102
src/flow.py
102
src/flow.py
|
|
@ -7,68 +7,46 @@ class CsvEntry():
|
||||||
self.start = start
|
self.start = start
|
||||||
self.end = end
|
self.end = end
|
||||||
|
|
||||||
# Name of section in Nscripter, name of Unity script file, dialogue line start, dialogue line end (OutputLine())
|
onik = [
|
||||||
script_flow = [
|
CsvEntry('gamestart/00.csv', 'onik_000.txt', 0, 48),
|
||||||
CsvEntry('Onikakusi.csv', '1/onik_000.txt', 0, 48),
|
CsvEntry('gamestart/01.csv', 'onik_001.txt', 0, 663),
|
||||||
CsvEntry('day1.csv', '1/onik_001.txt', 0, 663),
|
CsvEntry('gamestart/02.csv', 'onik_002.txt', 0, 520),
|
||||||
CsvEntry('day2.csv', '1/onik_002.txt', 0, 520),
|
CsvEntry('gamestart/03.csv', 'onik_003.txt', 0, 647),
|
||||||
CsvEntry('day3.csv', '1/onik_003.txt', 0, 647),
|
CsvEntry('gamestart/04.csv', 'onik_004.txt', 0, 611),
|
||||||
CsvEntry('day4.csv', '1/onik_004.txt', 0, 611),
|
CsvEntry('gamestart/05.csv', 'onik_005.txt', 0, 677),
|
||||||
CsvEntry('day5.csv', '1/onik_005.txt', 0, 677),
|
CsvEntry('gamestart/09_01.csv', 'onik_009.txt', 0, 913),
|
||||||
CsvEntry('Onikakusi_day09_01.csv', '1/onik_009.txt', 0, 913),
|
CsvEntry('gamestart/09_02.csv', 'onik_009_02.txt', 0, 414),
|
||||||
CsvEntry('Onikakusi_day09_02.csv', '1/onik_009_02.txt', 0, 414),
|
CsvEntry('gamestart/10.csv', 'onik_010.txt', 0, 655),
|
||||||
CsvEntry('Onikakusi_day10.csv', '1/onik_010.txt', 0, 655),
|
CsvEntry('gamestart/11.csv', 'onik_011.txt', 0, 747),
|
||||||
CsvEntry('Onikakusi_day11.csv', '1/onik_011.txt', 0, 747),
|
CsvEntry('gamestart/12.csv', 'onik_012.txt', 0, 792),
|
||||||
CsvEntry('Onikakusi_day12.csv', '1/onik_012.txt', 0, 792),
|
CsvEntry('gamestart/13.csv', 'onik_013.txt', 0, 684),
|
||||||
CsvEntry('Onikakusi_day13.csv', '1/onik_013.txt', 0, 684),
|
CsvEntry('gamestart/14_01.csv', 'onik_014.txt', 0, 629),
|
||||||
CsvEntry('Onikakusi_day14.csv', '1/onik_014.txt', 0, 629),
|
CsvEntry('gamestart/14_02.csv', 'onik_014_02.txt', 0, 1067),
|
||||||
CsvEntry('Onikakusi_day14_2.csv', '1/onik_014_02.txt', 0, 1067),
|
CsvEntry('gamestart/15_01.csv', 'onik_015.txt', 0, 1027),
|
||||||
CsvEntry('Onikakusi_day15.csv', '1/onik_015.txt', 0, 1027),
|
CsvEntry('gamestart/15_02.csv', 'onik_015_02.txt', 0, 688),
|
||||||
CsvEntry('Onikakusi_day15_2.csv', '1/onik_015_02.txt', 0, 688),
|
CsvEntry('gamestart/15_03.csv', 'onik_015_03.txt', 0, 206),
|
||||||
CsvEntry('Keiiti_Last.csv', '1/onik_015_03.txt', 0, 206),
|
CsvEntry("Opening.csv", 'onik_op.txt', 0, 56),
|
||||||
CsvEntry("Opening.csv", '1/onik_op.txt', 0, 56),
|
CsvEntry("Sub_Tips_001.csv", 'onik_tips_01.txt', 0, 100),
|
||||||
CsvEntry("Sub_Tips_001.csv", '1/onik_tips_01.txt', 0, 100),
|
CsvEntry("Sub_Tips_002.csv", 'onik_tips_02.txt', 0, 55),
|
||||||
CsvEntry("Sub_Tips_002.csv", '1/onik_tips_02.txt', 0, 55),
|
CsvEntry("Sub_Tips_003.csv", 'onik_tips_03.txt', 0, 49),
|
||||||
CsvEntry("Sub_Tips_003.csv", '1/onik_tips_03.txt', 0, 49),
|
CsvEntry("Sub_Tips_004.csv", 'onik_tips_04.txt', 0, 13),
|
||||||
CsvEntry("Sub_Tips_004.csv", '1/onik_tips_04.txt', 0, 13),
|
CsvEntry("Sub_Tips_005.csv", 'onik_tips_05.txt', 0, 27),
|
||||||
CsvEntry("Sub_Tips_005.csv", '1/onik_tips_05.txt', 0, 27),
|
CsvEntry("Sub_Tips_006.csv", 'onik_tips_06.txt', 0, 57),
|
||||||
CsvEntry("Sub_Tips_006.csv", '1/onik_tips_06.txt', 0, 57),
|
CsvEntry("Sub_Tips_007.csv", 'onik_tips_07.txt', 0, 91),
|
||||||
CsvEntry("Sub_Tips_007.csv", '1/onik_tips_07.txt', 0, 91),
|
CsvEntry("Sub_Tips_008.csv", 'onik_tips_08.txt', 0, 19),
|
||||||
CsvEntry("Sub_Tips_008.csv", '1/onik_tips_08.txt', 0, 19),
|
CsvEntry("Sub_Tips_009.csv", 'onik_tips_09.txt', 0, 7),
|
||||||
CsvEntry("Sub_Tips_009.csv", '1/onik_tips_09.txt', 0, 7),
|
CsvEntry("Sub_Tips_010.csv", 'onik_tips_10.txt', 0, 4),
|
||||||
CsvEntry("Sub_Tips_010.csv", '1/onik_tips_10.txt', 0, 4),
|
CsvEntry("Sub_Tips_011.csv", 'onik_tips_11.txt', 0, 0),
|
||||||
CsvEntry("Sub_Tips_011.csv", '1/onik_tips_11.txt', 0, 0),
|
CsvEntry("Sub_Tips_012.csv", 'onik_tips_12.txt', 0, 19),
|
||||||
CsvEntry("Sub_Tips_012.csv", '1/onik_tips_12.txt', 0, 19),
|
CsvEntry("Sub_Tips_013.csv", 'onik_tips_13.txt', 0, 69),
|
||||||
CsvEntry("Sub_Tips_013.csv", '1/onik_tips_13.txt', 0, 69),
|
CsvEntry("Sub_Tips_014.csv", 'onik_tips_14.txt', 0, 40),
|
||||||
CsvEntry("Sub_Tips_014.csv", '1/onik_tips_14.txt', 0, 40),
|
CsvEntry("Sub_Tips_015.csv", 'onik_tips_15.txt', 0, 25),
|
||||||
CsvEntry("Sub_Tips_015.csv", '1/onik_tips_15.txt', 0, 25),
|
CsvEntry("Sub_Tips_016.csv", 'onik_tips_16.txt', 0, 69),
|
||||||
CsvEntry("Sub_Tips_016.csv", '1/onik_tips_16.txt', 0, 69),
|
CsvEntry("Sub_Tips_017.csv", 'onik_tips_17.txt', 0, 99),
|
||||||
CsvEntry("Sub_Tips_017.csv", '1/onik_tips_17.txt', 0, 99),
|
CsvEntry("Sub_Tips_018.csv", 'onik_tips_18.txt', 0, 38),
|
||||||
CsvEntry("Sub_Tips_018.csv", '1/onik_tips_18.txt', 0, 38),
|
CsvEntry("Sub_Tips_019.csv", 'onik_tips_19.txt', 0, 24),
|
||||||
CsvEntry("Sub_Tips_019.csv", '1/onik_tips_19.txt', 0, 24),
|
CsvEntry("Sub_Tips_020.csv", 'onik_tips_20.txt', 0, 132),
|
||||||
CsvEntry("Sub_Tips_020.csv", '1/onik_tips_20.txt', 0, 132),
|
CsvEntry("Sub_Tips_099.csv", 'onik_015_03.txt', 207, 284),
|
||||||
CsvEntry("Sub_Tips_099.csv", '1/onik_015_03.txt', 207, 284),
|
|
||||||
CsvEntry("Watanagasi.csv", '2/wata_001.txt', 0, 963),
|
|
||||||
CsvEntry("Watanagasi_day2.csv", '2/wata_002.txt', 0, 919),
|
|
||||||
CsvEntry("Watanagasi_day3.csv", '2/wata_003.txt', 0, 1064),
|
|
||||||
CsvEntry("Watanagasi_day4.csv", '2/wata_004.txt', 0, 1035),
|
|
||||||
CsvEntry("Watanagasi_day5.csv", '2/wata_005.txt', 0, 1344),
|
|
||||||
CsvEntry("Watanagasi_day6.csv", '2/wata_006.txt', 0, 96),
|
|
||||||
CsvEntry("Watanagasi_day7.csv", '2/wata_007.txt', 0, 764),
|
|
||||||
CsvEntry("Watanagasi_day8.csv", '2/wata_008.txt', 0, 1529),
|
|
||||||
CsvEntry("Watanagasi_day9.csv", '2/wata_009.txt', 0, 719),
|
|
||||||
CsvEntry("Watanagasi_day9_2.csv", '2/wata_009_02.txt', 0, 376),
|
|
||||||
CsvEntry("Watanagasi_day10.csv", '2/wata_010.txt', 0, 604),
|
|
||||||
CsvEntry("Watanagasi_day10_2.csv", '2/wata_010_02.txt', 0, 463),
|
|
||||||
CsvEntry("Watanagasi_day10_3.csv", '2/wata_010_03.txt', 0, 638),
|
|
||||||
CsvEntry("Watanagasi_day10_4.csv", '2/wata_010_04.txt', 0, 490),
|
|
||||||
CsvEntry("Watanagasi_day11.csv", '2/wata_011.txt', 0, 395),
|
|
||||||
CsvEntry("Watanagasi_day11_2.csv", '2/wata_011_02.txt', 0, 972),
|
|
||||||
CsvEntry("Watanagasi_day12.csv", '2/wata_012.txt', 0, 363),
|
|
||||||
CsvEntry("Watanagasi_day12_2.csv", '2/wata_012_02.txt', 0, 949),
|
|
||||||
CsvEntry("Watanagasi_day12_3.csv", '2/wata_012_03.txt', 0, 701),
|
|
||||||
CsvEntry("Watanagasi_Ep1.csv", '2/wata_ep_01.txt', 0, 329),
|
|
||||||
CsvEntry("Watanagasi_Ep2.csv", '2/wata_ep_02.txt', 0, 453),
|
|
||||||
]
|
]
|
||||||
# "gamestart" : [
|
# "gamestart" : [
|
||||||
# 'onik_000.txt',
|
# 'onik_000.txt',
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import parser
|
||||||
import flow
|
import flow
|
||||||
import fix
|
import fix
|
||||||
|
|
||||||
debug_current_line = 0
|
debug_current_line = -1
|
||||||
|
|
||||||
def process_sections():
|
def process_sections():
|
||||||
output_path = config.get('output_path')
|
output_path = config.get('output_path')
|
||||||
|
|
@ -93,15 +93,14 @@ def write_translated(outfile, origfile, translation_file_paths):
|
||||||
print(f'- reading "{transfilepath}"')
|
print(f'- reading "{transfilepath}"')
|
||||||
structure = parser.parse_to_structure(transfilepath)
|
structure = parser.parse_to_structure(transfilepath)
|
||||||
|
|
||||||
|
|
||||||
for line in origfile:
|
for line in origfile:
|
||||||
|
tokens = scripter.parse_line(line)
|
||||||
|
|
||||||
# --- Debug ---
|
# --- Debug ---
|
||||||
global debug_current_line
|
global debug_current_line
|
||||||
debug_current_line += 1
|
debug_current_line += 1
|
||||||
# -------------
|
# -------------
|
||||||
|
|
||||||
tokens = scripter.parse_line(line)
|
|
||||||
|
|
||||||
# Replace the text tokens with the translated ones
|
# Replace the text tokens with the translated ones
|
||||||
line_en, line_jp, lines_written = swap_line_text(tokens, structure)
|
line_en, line_jp, lines_written = swap_line_text(tokens, structure)
|
||||||
# Remove the lines that have been written
|
# Remove the lines that have been written
|
||||||
|
|
@ -122,7 +121,7 @@ def write_translated(outfile, origfile, translation_file_paths):
|
||||||
# -------------
|
# -------------
|
||||||
|
|
||||||
# TODO: Bad code
|
# TODO: Bad code
|
||||||
if line_jp+'\n' != line and not transfilepath.endswith("Opening.csv") and not transfilepath.endswith("Sub_Tips_099.csv") and debug_current_line not in fix.excludes:
|
if line_jp+'\n' != line and not transfilepath.endswith("Opening.csv") and not transfilepath.endswith("Sub_Tips_099.csv"):
|
||||||
print()
|
print()
|
||||||
print(" ------------------------------------------------------")
|
print(" ------------------------------------------------------")
|
||||||
print(" ! NO THAT'S WRONG! !")
|
print(" ! NO THAT'S WRONG! !")
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ def get_functions_from_file(filepath: str) -> list[str]:
|
||||||
return tokens
|
return tokens
|
||||||
|
|
||||||
def parse_to_csv():
|
def parse_to_csv():
|
||||||
for csv_entry in flow.script_flow:
|
for csv_entry in flow.onik:
|
||||||
out_path = config.get('output_path')
|
out_path = config.get('output_path')
|
||||||
scripts_path = config.get('scripts_path')
|
scripts_path = config.get('scripts_path')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,59 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
def get_replacements(md5hash: str) -> dict:
|
|
||||||
replacementsfile = None
|
|
||||||
try:
|
|
||||||
replacementsfile = open('replacements/' + md5hash)
|
|
||||||
except:
|
|
||||||
print(f"The original script file with hash {md5hash} does not have a matching replacement file, no replacements will be executed")
|
|
||||||
|
|
||||||
replacements = {}
|
|
||||||
|
|
||||||
# Parse replacements file
|
|
||||||
# Syntax:
|
|
||||||
# - '-<number>' -> exclude this line
|
|
||||||
# - Begins with '#' -> comment
|
|
||||||
# - '<number>:<string>' -> replace the line in original script with this string
|
|
||||||
if replacementsfile != None:
|
|
||||||
try:
|
|
||||||
for line in replacementsfile:
|
|
||||||
if line.startswith('#'):
|
|
||||||
continue
|
|
||||||
if line.startswith('-'):
|
|
||||||
continue
|
|
||||||
split_line = line.split(':', 1)
|
|
||||||
offset_number = int(split_line[0])
|
|
||||||
replace_string = split_line[1]
|
|
||||||
replacements[offset_number] = replace_string
|
|
||||||
except:
|
|
||||||
print(f"Malformed replacement file on {md5hash}, line: {line}")
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
replacementsfile.close()
|
|
||||||
|
|
||||||
return replacements
|
|
||||||
|
|
||||||
def get_excludes(md5hash: str) -> list:
|
|
||||||
replacementsfile = None
|
|
||||||
try:
|
|
||||||
replacementsfile = open('replacements/' + md5hash)
|
|
||||||
except:
|
|
||||||
print(f"The original script file with hash {md5hash} does not have a matching replacement file, no replacements will be executed")
|
|
||||||
|
|
||||||
exclude = []
|
|
||||||
|
|
||||||
# Parse replacements file
|
|
||||||
# Syntax:
|
|
||||||
# - '-<number>' -> exclude this line
|
|
||||||
# - Begins with '#' -> comment
|
|
||||||
# - '<number>:<string>' -> replace the line in original script with this string
|
|
||||||
if replacementsfile != None:
|
|
||||||
for line in replacementsfile:
|
|
||||||
if not line.startswith('-'):
|
|
||||||
continue
|
|
||||||
exclude.append(int(line[1:]))
|
|
||||||
|
|
||||||
|
|
||||||
replacementsfile.close()
|
|
||||||
|
|
||||||
return exclude
|
|
||||||
|
|
@ -89,11 +89,12 @@ def is_double_width(char: str) -> bool:
|
||||||
(0x201c, 0x201d), # The characters “ ”
|
(0x201c, 0x201d), # The characters “ ”
|
||||||
(0x2026, 0x2026), # The character …
|
(0x2026, 0x2026), # The character …
|
||||||
(9734, 9734), # ☆ (Nscripter treats it like a dw character)
|
(9734, 9734), # ☆ (Nscripter treats it like a dw character)
|
||||||
(215, 215), # × (treated as a command when it shouldnt)
|
|
||||||
]
|
]
|
||||||
|
|
||||||
for start, end in japanese_ranges:
|
for start, end in japanese_ranges:
|
||||||
if 0xFF < ord(char[0]) or start <= ord(char[0]) <= end:
|
#if start <= ord(char[0]) <= end:
|
||||||
|
if 0xFF < ord(char[0]):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue