2019/12/25 | 投稿者: ghost

なんか担いで来た。サンタさん?(違ぅ

クリックすると元のサイズで表示します
<どっちかっつーとサタンさん(それも違ぅ>

前稿で、スプライト表示される飛翔物が、MSX仕様本来の表示優先順序からいえば下位にあたるグラフィック表示される前景(竹)に隠れる仕組みについて触れた。この時点で、察しのよい人であれば「じゃぁ橋の欄干はどうするの?」という疑問を抱いていて当然(無茶振り)なのであるが、本稿がその答え、ということになる。

改めて上掲スクリーンショットを見てもらうと、仏僧が物騒(ひつこい!!)なスプライトによる得物を担いでいるワケだが、橋の欄干に柄の一部が(やや漫画表現ながら)隠された体になっている。

で、早々と種明かしすると、実はここには普通に柄を表示する黄色のスプライトが配置されているのだが、TMS9918の“水平方向に4つを超えてスプライトがあると優先順位5番目以降は表示されない”という仕様によって非表示なっている。ただ、それだけである。

クリックすると元のサイズで表示します

上に概念図を示した。

まず、青の破線で示しているのが前稿で触れた、縦方向の構造物に対する隠蔽処理で、これは座標値の比較のみでやっている。つまり、それが飛翔物であれ得物であれ、表示位置が青破線内に被ると判断されると、当該のスプライトは縦座標が画面外に設定され、以て非表示=前景の後ろに隠蔽、される。

対して緑色で示しているのが本稿で触れる部分で、画面上には一切反映されていないが、実は優先順位が高く、かつ、スプライトローテータの対象外でその優先順位が固定されたスプライトが4つ、すなわち自分たちよりも優先順が低いスプライトに非表示を強いるに十分な数、橋の欄干と被る縦座標に配置されている。

加えて、これらは2つずつ、縦方向に少しずらして配置されており、欄干の上でのみ4つが重複するようになっている。これは、スプライトのサイズが32ドットであり、橋の欄干の幅(3ピクセル12ドット)よりも遥かに大きいことに対応してのことになる。これらを概念図では、マスク用優先順位上位スプライト、と呼んでいる。

するとどうなるか。

欄干の上により優先順位の低いスプライト(このケースでは得物の柄)を配置すると、マスク用優先順位上位スプライトに邪魔されて柄のスプライトは表示されない。以て、柄が欄干の向こうに隠れる効果が実現される、という具合である。

ちなみに、実際に隠れる幅が欄干よりもさらに大きくとられているのは、直接的にはこうしないと、上側の欄干の下にくるマスクスプライトと下側の欄干の上にくるマスクスプライト……あーややこし!!……も重なってしまい、欄干の隙間にも別のスプライト非表示域が生じてしまうから、である。が、この解像度の粗さだと、これくらい隙間を空けて「漫画的に」隠蔽した方が、視認性がよろしかろうという思いもあってこうしている。

クリックすると元のサイズで表示します
<さらに仏僧……もとい物騒な振り回しもテスト中>

年明けには弁慶の必殺技(?)を動画でご覧に入れられるようになるだろう、多分なっているだろう、っつーか、なってればいいなぁ。
タグ: MSX Z80




AutoPage最新お知らせ