Chapter.36 背景を変更
[Chapter36 制作物]

ゲームの爽快感を増加させるために地上物を設置しようと思います。
今回は、その準備として背景のスクロールルーチンを修正していきます。

■背景のスクロール
これまでは、背景に固定のグラフィックパーツを配置して、そのパーツのパターンジェネレータテーブルを
更新することで、ドット単位のスクロールを実現していました。
ドット単位のスクロールが実現できるメリットはありますが、あまり大きなパターンでスクロールさせると
更新しなければならない VRAM領域が大きくなって、遅くなってしまうデメリットもあります。

今回の修正は、画面全体が更新される(地上物が流れる)ため、パターンジェネレータテーブルは固定にして
パターンネームテーブルを更新することで、8ドット単位のスクロールに変更します。

スクロールが8ドット単位と荒くなってしまうデメリットはありますが、一方で、パターンネームテーブルの
更新(少ない更新)で、広い領域をスクロールできるというメリットがあります。

■背景メモリ
タイトル画面で sca_screen_buffer という 768*2 byte の領域を確保しました。
大きい割に、タイトル画面でしか使われないのはもったいないので、ここを流用することにします。

sca_screen_buffer を、576*2 byte の領域として見なします。
前半 576byte = 24*24byte を、表示画面(スコア表示部分を除く)とします。
ここで表示用のパターンネームテーブルを作ってから、一気に VRAM へ転送します。

VRAM に対して 1byte 単位でアドレス指定・バイトデータ転送を実施すると、手間のかかる「アドレス指定」が
頻発して、遅くなってしまいます。
"STAGE1" などの表示もありますから、いったんメモリ上にイメージを作成して、一気にブロック転送してしまう
方法をとります。

sca_screen_buffer の後半 576byte は、純粋に背景だけを示したメモリにします。
ここでスクロールなどの処理をしてから、一気に sca_screen_buffer の前半に転送します。
sca_screen_buffer の前半には、STAGE1 などの表示が含まれてますから、キャラクタ番号64未満の部分は上書き
しないように転送します。

背景パーツのグラフィックは、64番以降のキャラクタに割り当てています。






工事中






今回は、結構大がかりな修正でした。特にマップデータやグラフィックデータなど、データが多かったのが大変でした。
次回は、地上物(白いブロック)を破壊できるようにします。

[▲トップページへ]