
新年度になってもやることはいつもと同じです。というわけで本日はMSXプログラムネタ。ベーマガ85年5月号より「CAPTAIN AKAMARU」(キャプテンアカマル)です。

ご覧のとおりの当時の定番中の定番、階層状のフィールドを舞台とする「階段アクション」こと、プラットフォーマーアクションゲームです。主人公アカ丸を操り、敵となった双子の兄弟アオ丸率いるブルーリバーズ軍団をかわし、宝と旗を奪取しましょう。全ての宝を取ると旗が取れるようになります。さらに旗を取ると現れるドル袋を取ればラウンドクリアです。

階層間はハシゴで上下できます。攻撃手段はありません。敵にぶつかるとワンミスです。画面の左右はつながっていて、アカ丸は自由に往来できますが、敵はできません。この特性も活用してうまくひきつけ、隙を縫いましょう。また、動くと体力が減っていきます。これが0になってもミスなので、うろうろしすぎるのは禁物です。

ゲームとしては可もなく不可もなく(おい)。敵に隣接するだけでミスとか、タイムに全く意味がないとか、避けるだけで爽快感に欠ける等の作りの甘さは気になりますが、つまらないというわけでもなく、それなりに遊べる内容です。ただ、何度プレイしてもあまり得点に差が出ないところは、もっと考えていただきたかったです。

本作はグラフィック表示でけっこう変わったことをやっています。というのはスクリーン2でPCGのようなことをやっているのです。いわゆる「多色刷り・ニセスクリーン2」ではなく、全く異なる手法です。
通常、MSXでPCGを使うには、VRAMを操作します。パターンジェネレーターテーブル・カラーテーブルの対応する番地に任意のデータを書き込み、フォントを書き換えてBGにするという方法です。
ところが本作では、システムフォントを格納している場所を変えるという手法で、PCGを実現しているのです。
MSXでは、ワークエリアに細工することにより、画面に表示するフォントデータテーブルの番地を変えられます。むしろ反対に、自分で用意したフォントデータ一式を格納したメモリ上の先頭番地をワークエリアに与えてやることで、自作フォントを内蔵のシステムフォントとして扱えるというべきでしょうか。
本作ではROM内蔵のフォントデータをRAM上の適当な番地にコピーし、所定のワークエリアにコピー先の先頭番地を与えることで、コピー先のフォントをシステムのフォントとして使っています。この際任意の文字データを背景用キャラのグラフィックに描き換えることで、VRAMを介さず、一部の文字をBGに変えるという芸当をやってのけています*1。

この手法ではなんとSCモードを問わずフォントが書き換わる。
この方法はスクリーンモードを変えても同じPCGキャラが使えます。スクリーン2ですからPSET&PRINT#1で、ドット単位の表示位置設定も可能ですし、LINE&PAINT、CIRCLEといった描画命令も使えます。ここが飽くまでスクリーン1である「多色刷り」との大きな違いです。

その甲斐あってか、グラフィックはなかなか見映えがします。ただし変わったことをやっているおかげか、起動には一度RUNしてフォントを移し替えた後、さらにRUN100でメイン部分から実行するという手順を踏まねばならず、さらに本体のRAM容量によっては暴走します(汗)。暴走については後の号に修正方法が載ってますので紹介しときます。

これまでけっこうな数のMSXプログラムに触れてきたはずですが、ワークエリアを弄って自前のデータをシステムフォントにするという手法は見たことがありません。少なくともBASICで書かれたプログラムでは、これまで見ていません。よさそうな方法であるにもかかわらず、ほとんど使われていないのは、やはり機種や環境に応じた互換性の面で問題があるのかもしれません。
*1:具体的にはワークエリアCGPNT(ROM上の文字フォント格納アドレス・F91FH番地から3バイト分)の番地指定部分をE000Hに書き換え、フォントが格納されている1BBFH番地から2047バイト分のデータをRAMのE000H番地以降にコピーしておいてから、コピー先のBGにする文字部分にPOKE命令でグラフィックデータを書き込むことで、任意のBGを定義している。