縦スクロールの怪

MSX2以降の機種に用意されている、ハードウェア縦スクロール機能によって画面をスクロールさせると、スプライトも一緒にスクロールします。 そこで、スプライトを(画面に対して)スクロールさせたくない場合は、スクロールした分だけ、スプライトのy座標を足し引きしなければなりません。

ところで、このように何も考えずにスクロールに逆らってスプライトのy座標をずらしていくと、スプライトが突然消えてしまう怪奇現象(?)が発生することがあります。 ユーザーやメーカーに捨てられたMSXのたたりでしょうか??

タネを明かすと、スプライトのy座標が216(SCREEN 3以下なら208)となったときに、その番号以降のスプライトが消えてしまうのです。
この座標は通常画面下の方に隠れていて、スプライト消去用に使われるものなのですが(スプライト(ゴミ)の消し方参照)、ハードウェアスクロールによって、本来スプライトが消えてしまう座標まで現れてしまいます。 で、運悪くその座標とスプライトの座標が一致すると、その番号以降のスプライトが神隠しに遭ってしまうわけです。 こわいですね。

実のところ、TAKERUで発売中の某市販のゲームでも、この神隠しが見られたりします(^^;)。 名前は伏せときますけど。

対策としては、スプライトのy座標が計算上216(SCREEN 3以下なら208)となる場合は、それに1足し引きしたものをy座標とするのが一般的のようです。 こうすると、スプライトのy座標が問題の値になったときに、一瞬1ドット上下にずれることになりますが、基本的にそれほど大きな問題ではないでしょう。 市販のゲームで、縦スクロール中にスプライトが微妙に上下にずれるものがありますが、このような対策を取っているためでしょう。
なかには、あらかじめ縦方向に1ドットずらしたスプライトパターンを用意しておき、上記の方法と組み合わせて、一瞬でもスプライトが(見かけ上)ずれるのを防いでいるものもあるそうです。

要は、ハードウェアによる縦スクロール中は原則として、スプライトのy座標が216(SCREEN 3以下なら208)にならないように注意、ということでしょうか。

なお、MSX2+ 以降のハードウェア「横」スクロールの場合は、画面上のスプライトの位置は変化しません。


MSXの適当手帳 MSX駅 西山駅