WonderSwanのキャラクタ定義数は最大 512個で色は4色なので、表示したいモノが大きければ大きいほど、同じコマ(例えば白一色とか黒一色)は使い回した方が効率が良くなります。しかし、WonderWitch付属のツールでは bmpファイルをベタに PCG定義へ変換してしまうので、よろしくありません。いけませんな。いけませんな。
そこで、自動的に使い回しを考慮して header fileを生成するツールを作れないモノかと VBで書き始めたまではいいものの、1pixcelの定義の仕方がどうもよくわからない。webもぐるぐるしてみたものの、知りたい記述にぶちあたることもなく、マニュアルも何度か読みかえすがさっぱり(←単に頭が悪いとも言う)。
試しに左図の様なパターンを描いて、コンバートされたファイルのデータを眺めていると……謎はすべて解けた!ニヤ。
仮に白、白っぽいグレー、濃いグレー、黒をそれぞれ0,1,2,3とします。
左図の場合だと、0の色は白なので色番号「0」、1の色は薄いグレーなので「1」、2の色は濃いグレーなので「2」、3の色は黒なので「3」、4の色は白なので「0」……と7まで置き直します。この場合だと「01230000」となります。次に数値を1桁ずつ2桁の二進数に置き直します(0→「00」、1→「01」、2→「10」、3→「11」)。サンプルでいくと「00 01 10 11 00 00 00 00」と置き換えられます。
ここまできたらあと一息。それぞれの上位ビット(2進数に置き換えた左側の数値)を8pixcel分羅列します。同様に下位ビット(2進数の右側の数値)を羅列します
上位ビット「0 0 1 1 0 0 0 0」、下位ビット「0 1 0 1 0 0 0 0」といった形になります。
あとは上位・下位ビットを1バイト(8ビット分)として4ビット毎に区切り 16進数になおします。結果、上位ビットが「00110000」なので「0011」→「3」、「0000」→「0」から「0x30」、下位も同様に変換すると「0x50」となり、この2バイトを1つにまとめて「0x3050」と表記すれば、Bmpcnv16.exeの出力と同じ値が出たと思います。あとはこれを8ライン分繰り返してやることで、1キャラクタの完成です。
左図を例に取ると「0x3050, 0x0C0A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000」といったものが1キャラクタとなります。
たったこれだけのことが判るのに、それなりの時間を費やしてしまいました(←バカ(笑))。
でも、データ効率は少ないビットで表現できて最高にいいですね。うまく考えてあるなぁ……
■当ページに掲載しているプログラムは、作者が好き勝手に作っているもので、各メーカー・プロジェクトとは何の関係もありません。各プログラムに関する問い合わせを、各メーカー・プロジェクトへ行うことはしないでください。
■配布・転載(Web, 商用 BBSを除く)は自由にしていただいて結構ですが、無償である場合に限ります。また、再配布時にアーカイブの内容を変更しないで下さい。個人での配布・転載時の連絡は、いただけると大変うれしいですが強制はしません。
(フレーム表示を除く)リンクは、自由にしていただいて結構ですが直接バイナリへのリンクはしないで下さい。万一、発見した場合はそれなりの処置(該当ページ・プロバイダーからの参照拒否など)を講じます。
■当ページのプログラムに関し、(無いとは思いますが)雑誌などへの紹介・掲載・CD-ROMへの収録などしていただける場合は、必ずご連絡ください。
#掲載されると嬉しいので、基本的に拒否することはありません :-)
■当ページ上にあるプログラムについて、作者は最大限の注意を計り、動作確認をしているつもりですが、本プログラムを使用した上で生じた損害について、作者は一切の責任を負いませんので、ご了承ください。