blog/2009-01-09


Total: 5019 / Today: 1 / Yesterday: 1

NaoTimerの改造

現在のNaoTimerは2006年3月が最終更新日とかなり古い。で、そこの表記を修正しようにもdll側でハードコーディングされているようでよくわからない。とりあえず、Deflate(gzip)でコードを圧縮しているように見えるが、C言語やバイナリ改造さっぱりな自分にとっては完全にお手上げである・・・が、中国系のサイトで勝手にローカライズしているのをみて不思議に思った。つまり、これは表記を変更することができるのではないかと。

とりあえず、中国語版NaoTimerの中身を適当にテキストエディタで開いてみると、EUCで

佛豚晩 羨敢(Imbolic) 
‐撰麗/[慌]噸半、署奉半 
‐晩豚丼惚/ 
 羽似楕、Lucky finish古楕 戻互 
 處怙、徴隈咄赤、徴隈咄赤儕捲講麗 撹孔楕戻互 
 
佛豚匯 敢蛍(Eiler) 
‐撰麗/[慌]頼畠、酔碕、酔清、酔仔 
‐晩豚丼惚/ 
 伏恢室嬬議撹孔楕、伏恢麗瞳扮議麗瞳嵎楚 戻互 
 伏試狼室嬬幅雫扮議襲潜 奐紗 
 
佛豚屈 秘歪(Baltane) 
‐撰麗/[慌]怏谷、垓冷匂 [繁]垓捲廾[娼]垓咏氏[賞]垓咢佩 
‐晩豚丼惚/ 
 仇和廓麗瞳渠竃古楕、媾況狼室嬬幅雫扮議襲潜 戻互 
 飯序揖劔祇醤伏撹議仇和廓匆音・揖

と曜日効果らしきものを発見した。つまり、中国人のハッカーは、暗号化を解読してローカライズに成功しているようである。日本のクライアントはShift_Jisで描画しているので、中国語版NaoTimerを入れると「ミヌニレカ。。ネ・ト(Baltane)」とEUCのテキストをShift_JISで開いたとき特有の半カナ文字による文字化けが発生している。このことから、この部分をShift_JISで書き直せばNaoTimerの曜日効果の改良はかのうである。

で、さっそくテキストエディタでこう書き換えてみた

クリティカルヒットの発生率が高くなります。
ラッキーフィニッシュの発生率が高くなります。
演奏成功率が増加します。
魔法音楽の成功率が増加します。
魔法音楽の発生率が増加します。
アドバンスドプレイサービス(以下から一つ選択)
・染色アンプル
・金属染色アンプル
 
アルバンエイレル(Alban Eiler)
生産スキルの成功率が高くなります。
生活スキルのランクアップボーナスが増加します。
生産品の品質が向上します。
※アドバンスドプレイサービス(以下から一つ選択)
・完全回復ポーション
・生命力のエリクサー
・マナのエリクサー
・スタミナのエリクサー
 
ベルテン(Beltane)
同じアイテムを落とした場合でもダンジョンの形が変わるようになります。
ダンジョンでアイテムが出る確率が高くなります。
戦闘スキルのランクアップボーナスが増加します。
※アドバンスドプレイサービス(以下から一つ選択)
・パーティー用フェニックスの羽根×2
・遠隔武器屋利用チケット×2
・遠隔衣類修理チケット×2(人間)
・遠隔官庁利用チケット×2(エルフ)
・銀行チケット×2(ジャイアント)

が、どうやらDLLが壊れたらしい。マウスオーバーでバージョン表記がでなくなった。やっぱりテキストエディタで編集しようなんて考え方が間違ってる。Hexをのぞいてみると明らかにデーターが化けていた。アドレスは、00048060付近だ。

00 01 02 03  04 05 06 07  08 09 0a 0b  0c 0d 0e 0f
00048060 ae 45 05 00  00 00 00 00  d0 c7 c6 da  c8 d5 al al  ョE......ミヌニレネユ。。
00048070 cl a2 b4 ba  28 49 6d 62  6f 6c 69 63  29 20 0a al  チ「エコ(Imbolic) .。

この、ミヌニレネユ。。チ「エコ(Imbolic)をEUCで開くと「佛豚晩 羨敢(Imbolic)」である。おそらく、中国ではエンコードにEUC系が使われているのだろう。しかし、翻訳すると全然違った意味になっていた。アドレス空間が同じで、違う意味で文字が使用されているためだと思われる。では、身近な中国語表記ができるアプリケーションで該当部分を確認してみよう。

なんのことはない。拡張子をテキストに変更してIEで開いてエンコードを簡体字中国語にするだけである。

星期日 立春(Imbolic) 
【礼物】[共]普染、金属染 
【日期效果】 
 暴击率、Lucky finish概率 提高 
 演奏、魔法音乐、魔法音乐驯服怪物 成功率提高 
 
星期一 春分(Eiler) 
【礼物】[共]完全、快红、快蓝、快黄 
【日期效果】 
 生产技能的成功率、生产物品时的物品质量 提高 
 生活系技能升级时的奖励 增加 
 
星期二 入夏(Baltane) 
【礼物】[共]组毛、远武器 [人]远服装[精]远议会[巨]远银行 
【日期效果】 
 地下城物品掉出概率、战斗系技能升级时的奖励 提高 
 扔进同样道具生成的地下城也不相同

おおむね読めるようになった。ここからおもしろいことがわかる。中国ではマビノギの曜日を立春とか、季節として翻訳している点である。中国では、日曜日以外は一、二と漢数字で曜日を示しているため、星期一というのは、月曜日を意味している。

もうすこし解析してみよう。改行はどうやっているのか?まず、Inboricの後ろの) から【までの間に入っているHEXコードは、20 0Aである。ただし、)の後ろには半角スペースが挿入されているので、実際は0Aということになる。では、曜日の区切りはどうなっているだろうか?星期という文字の前には、やはり0Aが挿入されている。ただし、上のテキストを見ればわかるが、1行空白がある。ここには何が存在するのだろうか?中国語でみると文字化けが多くてわからないので、ここはあえてShift_JISで読み込むと20 0Aと出てきた。従って、単純にスペースと0Aでデーターの区切りをしているだけのようだ。って、0AってLF改行じゃ?

そういえば、昔Mac使っていた頃、よくResEditでアプリをいじってたなぁ。

というわけで、片っ端から日本語のテキストを流し込んでいったが、どういうわけか流し込んだ後、DLLが起動するどころか、完全にリソースが化けてしまっている。バイナリエディタを台湾版と中国語版で比較してみてみると、どうやらアドレスを呼んでいるらしい。また、ファイルサイズが大きくなるような改造はできないみたいだ。

結論から言うとかなり拡張性は低い。まぁ、コンパイルしたものだから、使える文字数とかが決められていても何ら不思議はない。具体的に言うと、曜日効果の説明文は、改行コード合わせて1226文字。でもって、空白は00で埋める。あまり改行の回数が多いとはみ出る。というわけで、結構苦労した。

Altキーを押すと表示される曜日効果の短縮文に至っては、曜日によって使える文字数が異なる。特に土曜日が厳しすぎる。59文字しか使えない。でも、金曜日は91文字まで使える。不思議だ。

そんなこんなで、改造NaoTimerがなんとか完成。なぜか、オリジナルでは動かなかった天気予報もちゃんと表示できている。090109.jpg

時期MabiAssistで配布しますか。


Last Modified: 2009-01-09 21:02:40