プチコン3号での日本語表示試案
以下の元記事は古い内容で、プチコンのVer3.2以降は標準で漢字表示できる(ただしJIS第一水準まで)。
漢字入力したい場合は次にリンクを参照。
漢字入力プログラム EDKANJIPNL
//////以下元記事//////
「クイズ1MINUTE SHOCK EXの構想」で日本語を使うことを書いたのだけど、3号公開前の想定だったので、UNICODEの全部の文字にコードが割り当てられている、という想定だった。
しかし、コンソールのフォントにはすべてのUNICODE文字が割り当てられていないことが判明。
かといってDIALOGでの表示もゲームで使うには不便すぎるものである。
そこで、以下を試案として考えてみた。
・16x16ドットフォントの選定
・プチコン3号に載せるフォントの選定
・日本語入力可能なIMEの検討
大方針としては、日本語表示に関わるデータ量は全体で1Mバイト以内とする。
(1)16x16ドットフォントの選定
美咲フォント等の8x8ドットフォントでは視認性が劣るため、実用上はつらいものがあった。
どうせ1から作らないといけないので、16x16ドットフォントにしたい。
もとになるフォントは以下のところから。
http://www12.ocn.ne.jp/~imamura/jisx0213.html
(先日まではアクセスできたのだが、今日アクセスしたらアクセス不能になっていた。フォントデータそのものは落としてあったのでどうにかなった。)
ここにあった、「jiskan16-2000-1.bdf」を使うことにする。
なお、著作権情報は「COPYRIGHT "Public Domain"」となっていて、パブリックドメインとのことなので遠慮なく使わせてもらうことにする。
このBDFファイルのフォーマットを調べていく。
ビットパターン本体は16ビット・ビッグエンディアンのようである。
左側がビット上位となるようである。
次にエンコーディングであるが、ヘッダ部分に、
CHARSET_REGISTRY "JISX0213.2000"
CHARSET_ENCODING "1"
と記載されていることから、JISコード(正確にはJIS X 0213)でエンコードされていることがわかる。
また、個々の文字のENCODINGには10進数でコードが記載されているようである。
さらに補足情報として、STARTCHARにはJISの区点番号が記載されているようである。
160〜182行目をみてみる。
STARTCHAR 01-01-06 ENCODING 8486 SWIDTH 1024 0 DWIDTH 16 0 BBX 16 16 0 -2 BITMAP 0000 0000 0000 0000 0000 0000 0000 0180 0180 0000 0000 0000 0000 0000 0000 0000 ENDCHAR
「STARTCHAR 01-01-06」は1面-1区-6点を表すと思われる。
「ENCODING 8486」はJISコードを表し、16進数に直すと0x2126。
これは「・」(中点)を表すと思われる。
次の「ENCODING 8487」を見ると「:」(コロン)で正しいっぽい。
これでBDFファイルのフォーマットは判明した。
(2)プチコン3号に載せるフォントの選定
上述(1)のフォントはJIS X 0213の漢字を収録しているようだが、プチコン3号をワープロとして使う用途は考えていないので、使用頻度の低い漢字は落としていきたい。
これは、現状ではパソコンから転送するにしても転送速度による限界があるのと、いくら3DSといえども現実的な処理速度を考えるとできるだけフォントのサイズは小さくしておいた方がよい(キャッシュ等の効率を考えて)からだ。
そこで、使う漢字はJIS第一水準漢字のみに絞ることにする。
JIS第一水準漢字は2965文字あり、16x16ドット(=32バイト)なので、2965*32=94880バイト≒100kバイトである。
これであれば許容範囲だろう。
「Unicode対応 文字コード表」というページに、JIS第一水準漢字とUNICODEとの対応表がある。
この表には、UNICODEと対応していないコードもある。
区点には存在するがJIS第一水準でない漢字か、あるいはUNICODEに字形が存在しない漢字だろう。
どちらにしても対応しないものは無視するしかない。
この表でUNICODEの欄が「------」になっているものは対応しないものとする。
この表を使って、「------」になっていないものだけを、JISコード欄のコードで先ほどのBDFファイルから抽出する。
(3)日本語入力可能なIMEの検討
ここまでくれば、データをプチコン3号に転送できさえすれば、漢字は表示できそうである。
であれば、できることならプチコン3号上から漢字の入力を行いたい。
単漢字変換だとないよりはまし、というレベルなので、プチコン3号上で漢字入力する意味合いはあまりないかもしれない。
一方、連文節変換を実装するのは手に余る。
そこで、実現可能なレベルで考えると、SKKが有力であろうと考える。
SKKにも辞書は必要だが、以下のMサイズ辞書であれば200kバイト程度なので現実的と思われる。
http://openlab.ring.gr.jp/skk/skk/dic/SKK-JISYO.M
SKKそのもののソースはまだ有力なものをみつけていないが、最も簡単な実装であれば、仕様から起こせば作れるかもしれない。
とりあえず、今日の検討はここまで。