MSX の画面について

目次

表示色

キャラクタデータ

テキスト画面

PCGの書き換え

スクロール

スプライト

スプライトとテキストの使い分け

MSX風の絵を描くためのまとめ


テキスト画面

どの画面モードでも、表示画面は 256x192ドットでした。


GRAPHIC 2 モードでは、8x8ドットのキャラクターを、768種類定義することができます。


ただし、キャラクタコードは 8bitです。256 までしか使えません。

そこで、画面を上段、中段、下段に3分割します。192 を3で割り、それぞれの高さは 64dotとなります。


768種類定義できるキャラクターも3分割され、それぞれの段に 256種類づつ、となります。

段が違えば、同じキャラクタコードでも違う絵が表示されることになります。


画面の横幅は 256ドット ですから、8x8ドットのキャラクターは横に 32個並べられることになります。

キャラクターは 256種類ですから、縦に8キャラクター、64ドット並べられることになります。


つまり、それぞれの段は、完全に違うキャラクターで覆いつくせます。

そして、MSX では PCG を使用しているため、キャラクターを自由に変更可能です。


これは、「GRAPHIC 2 モードでは、画面上を1ドット単位で自由に描画できる」ことを意味しています。


MSX の PCG は、基本的にモノクロです。横8ドットを、1byte で表現します。

しかし、GRAPHIC 2 モードでは、画像データと同じサイズの別データが追加されます。これは色データで、4bit づつで「前景色」と「背景色」を指定します。


つまり、GRAPHIC 2 モードでは、横8ドットに対して2色を使用可能です。



基本技術の説明で、PC-8801 のグラフィック画面が 48Kbyte のメモリを必要とすることを書いた。
MSX は、16色なので1ドットに 4bit の情報が必要となるが、上に書いたように「横8ドットで2色」という制限を付けることで、1ドットを 2bit に抑えている。
解像度を下げて、256x192 にしていることも効いて、1画面の容量はわずか 12Kbyte となっている。
(PCG定義のみの容量。実際にはキャラクタを画面に並べるため、768byteが別に必要)


MSX版グラディウス・デモグラフィック実例を挙げましょう。左図は、MSX版グラディウスのデモで表示されるグラフィックです。

画面中に使われている色は15色です。(0番はスプライト用の透明色なので、グラフィックには使えない)

この絵は非常に上手に描かれていて…あまり制約を感じさせません。ちゃんと、「横8ドットに2色」の制約の中で描いているのですが。

(画像は原寸大ですが、クリックで2倍に拡大します)


MSX版グラディウス・デモグラフィック部分拡大画面中央、緑色の敵戦艦の左端を拡大してみましょう。

「横8ドット」の区切り位置に、わかりやすいように黄色の線を引いてみました。

ちゃんと、横8ドットに2色の制限は守られているでしょうか?

…戦艦の左端から右下に向かって伸びている、水色の線にご注目ください。この水色が含まれる場所では、「8ドットに3色」が使われています。


じつは、水色の斜め線はすべてスプライトです。「横8ドットに2色」の制限はテキスト画面のものなので、スプライトは制約外です。

実際のデモ画面では、水色の線は「敵の戦艦から撃たれたビーム」で、動いていました。


どうしても色を細かく塗りたい場合は、このようにスプライトを重ねることで実現できます。


PCGの書き換え

グラフィックとして画面を作っていると、画面を描き変えるたびにたくさんのデータの変更が必要になります。

ゲームを作る際には速度を重視しないといけないので、定義されたキャラクターを文字のように描くことで画面を作ります。

つまり、ゲーム画面では 8x8 ドット単位のキャラクターを置くことになります。


この場合も、先に書いた制限は変わりません。

つまり、上中下段にそれぞれ 256キャラクターで、1キャラクターの中では、横8ドットについて2色です。


このキャラクター制限は、PCG を使っているために、かなり緩いものです。

別記事として書いたファミコンの画面作成方法では「ゲーム全体を通して」256種類、と言うような厳しい制限でした。

MSXは PCG によってキャラクタを描き変えられるため、「画面上に同時に表示されるキャラクター数」が、画面の上中下段それぞれで256に制限されるだけです。


表示中のキャラクターの PCG を書き変えると、すぐに表示に反映されます。

複数のキャラクターが画面上に置かれていると、それらすべてが変化します。


PCGデータは、色情報も含め1キャラクターで 16byte になりますが、うまくやると少ない書き換えで大きな画面効果を得られます。


スクロール

MSX には、スクロール機能はありませんでした。

スクロールしたい場合は、ソフトウェアで画面全部のキャラクターを「1マス横にずらす」ことになります。

このため、8ドット単位でガクガクと動くスクロールでした。


しかし、先に書いた PCG の書き換えとうまく組み合わせると、MSX でもドット単位のスクロールが可能です。


たとえば、「グラディウス」では、スクロール自体は8ドット単位なのですが、背景の星だけはドット単位で滑らかにスクロールしています。

これは静止画像では実感できないので、YouTube で公開されていた MSX グラディウスの動画を引用しておきます。


画面上に星はたくさん表示されているのですが、実は2種類のキャラクターしか使っていません。

(2つ、と言うことで話を書くと煩雑になるので、以下1種類の星キャラクターについて書きます)


まず、PCG の書き換えで星が「1ドット左に」動くように見せます。

星は1ドットですから、PCG の1キャラ分全部を書き変える必要はありません。また、色も変わりませんから、色を定義する部分も変更はいりません。


結果として、1バイトを変更するだけ「滑らかな横方向の動き」が実現できます。

これで、画面上に星がいくつ表示されていようとも、画面上の星が全部1ドット動きます。


星が8ドット動き、左端に来たところで8ドット単位のスクロールをします。

同時に、星を右端に戻します。


すると、画面全体は8ドット動いたにもかかわらず、星としてはやはり1ドットしか動いていないように見えるのです。



同様の方法で、すべてのものを、上下左右の自由な方向に滑らかにスクロールさせたゲームとして「テセウス」があります。
後にブームを起こした「テグザー」にも影響を与えたゲームですが、余談になりすぎるので詳細は割愛します。


次ページ: スプライト


前ページ 1 2 3 次ページ

(ページ作成 2013-07-28)
(最終更新 2013-08-26)

前記事:80年代の画面表示技術     戻る     次記事:ファミコンの画面について
トップページへ

-- share --

16000

-- follow --




- Reverse Link -