前回は、ダレス登場シーンのメモリ管理について書きましたが、オープニング本編について書く前に、「グラフィックの省メモリ化」について書いておこうかと思います。
グラフィックを表示する際、私がP6で作るもの全てで必ず使っているのが、自作のPCGエンジンです。
画面上のすべてのグラフィックは、8x8(SCREEEN3は4x8)ドットのセルで管理され、すべてセル単位での描画・消去などを行っています。
00H~FFHまでの最大256パターンのキャラクターデータを定義して、あとはLOCATEとPRINTでその番号を指定して表示するイメージです(実際はもうちょっと複雑ですが)。
元々は「グラフィックを消したり、書き換えたり、位置を合わせたりする場合に、セル単位のほうが管理がしやすい」という理由で使っていたPCG方式なのですが(ドット単位での書き換えなんて考えたくない…)、メモリ的には「同一のセルがあればデータを減らせる」というメリットもあります。
今回の場合は、とにかく1バイトでもメモリを削減したかったので、このメリットを最大限に利用しました。
具体例として、リリアのグラフィックをどう作ったかについて書いてみます。
まず、今回のP6版ですが、基本的には、
MSX2版の移植
だということはお気づきの方も多いと思います。
リリアについても、MSX2版のリリアを元にしました。
これがMSX2版のリリアです。

MSX2のSCREEN5の場合、512色から16色を選べるだけあって、とてもキレイな色使いになっています。
これを4色に減色します。
減色の際、私は手作業でパレットを変更することが多いです。
例えば、水色などは、シーンによって緑で表現したほうが良い場合もあれば、青で表現したほうが良い場合もあるので、ツールに任せて減色するよりも確実だからです。
減色すると、こんな感じになります。

いいですねー。
ただ、大抵、ここまではうまくいく ことが多いです。
これを横の解像度を半分にします。
勝負の分かれ目です。

思っていたより全然イケそうです。
このデータを自作ツールに突っ込み、セルに分割してみると、こうなります。

ここで、ピンクの枠のセルに注目です。
セル化するメリットとして、同一データが多ければ多いほどメモリ効率が良くなるわけですが、ピンクの枠のセルについては、ほぼベタなパターンにも関わらず、たった数ドットのために独自のデータを持たなければならず、もったいない感じです。
また、黒塗りの部分が「瞬き」のアニメーションに関わる部分なのですが、白枠のセルは、たった1ドットの青のためにアニメーションデータを持たせなければなりません。これももったいないです。
もちろん、修正してしまえば良いのですが、目の1ドットは顔の印象にも関わりますし、アニメーションする部分を修正すると、すべてのパターンのデータを合わせて修正しなければならないので、できる限り触りたくありません。
そんなわけで、思い切って全体を1ドット上にずらしてしまいました。

これで、ピンクの枠のセルはすべてベタ塗りのセルになり、他のセルと共通化することができました。
白枠のセルはアニメーションには関係なくなり、瞬きに必要なセルの数も減りました。
さらに、水色の枠のセルなども気になるので、引き続き修正します。
そんな感じで、細かいドットの修正を繰り返してセルを削減し、元絵を見ながら手を加えたのが、完成版です。

気になるところは若干ありますが、ここまでできれば上出来ではないでしょうか。
横19バイト×縦128ラインなので、データをそのまま持つと2432バイトですが、セル化することにより、キャラクターグラフィック(CG)データが223パターン×8バイト=1784バイト、パターンネーム(PN)データが横19×縦16=304バイト、合計2088バイトになりました。
最終的に、雲や服にタイリングで陰を付けたりして、あまり効率が良くない絵になってしまいましたが、それでもベタで持つよりはかなり少なくなりました。
あとは、アニメーション部分だけを切り出し、減色・解像度変換します。

口が4パターン、目が6パターン。
セル単位での管理は、アニメーションをさせる際にも便利です。
というわけで、すべてのグラフィックデータは、こんな感じで作りました。