開発着手した
コレの画面をどうやって作っているか、という話をする。もちろん、誰かの参考になることを願って、ではなく、こうして書いておかないと、いつも言っていることであるが他ならぬボク自身が何をやったか忘れるから、である。っつーか、ボク以外の人がこういう面倒臭いことを敢えてするとは思えない。
MSXに詳しい人であれば、本作がTMS9918のMULTI COLORモード、MSX BASICでいうところのSCREEN 3であることは一目瞭然だろう。このモードはデフォルトのVRAMの構成に難があってアクションゲームには使い難いが、ちょっと一工夫することで後述する制約がありつつも、
使えなくはないことは以前書いた。
かくして、1フレームにつき64÷2×48=1,536バイト、VRAM上のパターンジェネレータテーブルに然るべきデータを書き込めば、メモリ構造と画面表示の関係が90度捻られていることを除けば、普通のゲームプログラミングの手法で任意の図柄を表示することができる体制は整った。ここで“任意の図柄”と言っているのは、無印MSXのゲーム開発で常々問題になる「8ドット中2色」の制約がここにはない、ということである。文字通り“マルチカラー”なのである(なのだろうか?

<右端に何かいるが多分気のせい>
その代わり、色制約とは違う他の制約が、当然のことながらいろいろとある。
・言わずもがなだが、画面解像度が64×48ピクセルしかない。平たく言えば絵がめっちゃ粗くなる。
・バイト単位のコピーを前提とした場合、縦方向は1ピクセル単位の操作が可能だが、横方向は2ピクセル単位が基本になる(MSX2 GRAPHIC4におけるVDPコマンドHMMCに課せられた制約と本質的に同じ)。
・1フレーム1,536バイトは結構重い。
画面解像度は、つきつめればどう使うかのセンス次第であり、本作については自分では何とかなっている、と勝手に思っているのだが、これは人それぞれの好みにもよるだろうから深入りはしない。
横方向2ピクセル単位、はゲームプラットフォームとしてはなかなか深刻な問題なのだが、まぁ同じVDPでやることだから当たり前と言えば当たり前なのだが、よくよく考えてみれば、マルチカラーモードにおける2ピクセルは他モードの8ドット=1 PCGキャラクタなのであって、これはたとえば
Shoulder Bladeシリーズのボスキャラと同じになるが、キャラクタの動きが横方向に限ってそれになる、というだけの話ではあるのだ。まぁ、これも使い方のセンス次第だろう。
ちなみに、
前稿に示した動作デモ動画において、二重スクロールする奥側の背景は横方向に1ピクセル単位で動いているように見える。これは、圧縮状態でROMのページ0に収蔵してある背景データをRAMに展開する際、元絵の他に横方向へ4ビットシフトしたものをもう1枚生成しておいて、1フレーム毎に交互にこれをフレームバッファへコピーすることで実現している。
背景以外の図柄についても同じことをしてはならない法はないが、そんなことをしていたらメモリがいくらあっても足りないので、今のところはそこまでするつもりはない。同じ動画の手前側前景(登場人物をときどき隠している竹)は2ピクセル単位で動いているのだが、奥手がピクセル単位で動いているのとの速度差もあって、さほどその粗さは気にならないのではないか、と個人的には勝手に思っている。
<知らない人向け、源平討魔伝はこんなゲーム>
で、本稿本題は、全画面書き換えのコストとしては破格に少ない、とは言え、MSXのハードウェア性能からすれば十分に大きい1,536バイトのVRAM転送をどうしたか、という話になるのであるが。