2019/8/31 | 投稿者: ghost

いつにも増して本稿は自分のためだけの備忘である。

近作Shoulder Blade OUTERSPACEには、ブート時にMSXのバージョンを調べ、MSX2以降であった場合はV993/58のパレット機能にアクセスして無印MSX近似のカラーパレットが設定される機能が実装されている、ことについては以前書いた

これが出来るのであれば、同じくMSX2以降であった場合に限り、スプライトモード2を使ってスプライトのチラつきを緩和することは出来ないだろうか、と思って、実は開発中にそういう派生版を作った。結論を先に示せば、これは、少なくとも今回の実装においては動作が安定しないので最終版では採用を見送ったのだが、やり方によってはモノになる可能性もあるので、失念防止のために書き留めておくことにする。

具体的に何をしたのか。


<再掲:Shoulder Blade OUTERSPACEダイジェスト>

まずはブート直後、初期化時の画面モードである。本作を含む無印MSX用の拙作は基本的にGRAPHIC 2(BASICでいうところのSCREEN 2)を使っているが、MSX2以降の場合はGRAPHIC 3(同SCREEN 4)を設定する。後述するスプライト回りを除けば、GRAPHIC 2と3はVRAMの使い方がまったく同じなので、以降のゲーム中のコードは、スプライト表示に関する部分を除きまったく共通で何の問題もない。

これでスプライトモード2になったので、ゲームのコード中のスプライト表示に関する部分を、都度自身が実行されている環境……無印MSXかMSX2以降か……に応じて二通りに分岐するようにしてやる。

スプライトモード1ではスプライト表示色はアトリビュートテーブル上の各スプライト面に対応する先頭アドレス+3の1バイトにカラーコードを収めるだけでよかったが、スプライトモード2ではスプライトカラーテーブルの各スプライト面に対応する先頭アドレスから16バイトに1ライン毎のカラーコードを収めてやらねばならない。一見面倒臭い課題だが、拙作ではVSYNC毎にスプライトローテータが動作しており、これは結局のところアトリビュートテーブルを舐めるので、このついでに処理することができる。

具体的には、RAM上のアトリビュートテーブルをローテーションに応じて並べ替えるに際し、4バイト毎の末尾の値、すなわち当該スプライトのカラーコードを、カラーテーブルに16バイトずつコピーしてやればいい。これでその順序もローテーションしたアトリビュートテーブルと綺麗に同期する。

問題は、これをVRAMに流し込む段である。
続きを読む
タグ: MSX Z80




AutoPage最新お知らせ