NaoTimerの改造

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

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

PluginRenderer::executePluginBlock(): Plugin #code() is not implemented.

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

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

PluginRenderer::executePluginBlock(): Plugin #code() is not implemented.

が、どうやら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で開いてエンコードを簡体字中国語にするだけである。

PluginRenderer::executePluginBlock(): Plugin #code() is not implemented.

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

もうすこし解析してみよう。改行はどうやっているのか?まず、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で配布しますか。