ロックマン6では、スクロール処理はオブジェクトで行われています。$80のオブジェクトを配置し、そのY座標によって処理の内容が変わるという仕組みです。
このY座標ごとの定義のデータ構造については、rock5easily氏によってまとめられていますので、そちらを参照してください。また、スクロール定義の一覧をこちらに用意しています。rock5easily氏作成の「ROCKMAN 6 EDITOR」の「ScrollList.txt」に上書きすることで、ステージエディタ上からも参照できるようになります。(ご利用は自己責任でお願いします)
rock5easily氏のページを見れば分かるように、スクロール方向とスクロール時のパターンテーブル・パレットの更新情報と移動基準部屋番号を、方向ごとにデータ列として定義されています。また、生成時に1回実行される処理と毎フレーム実行される処理をそれぞれ定義できる仕様となっています。
本ページでは、生成時に1回実行される処理を「生成時処理」、毎フレーム実行される処理を「常時処理」という名前で呼ぶこととします。この生成時処理と常時処理が、どのような使われ方をしているのかを分類し、読み解いてみます。
生成時に1回実行される処理で、「ROCKMAN 6 EDITOR」では「PRG1」で表記されています。
スクロールオブジェクトが生成された時に実行され、この処理が終わるまでは常時処理およびデータ列定義によるスクロールは行われません。
ここからは原作で使われている生成時処理を見ていきます。
パレットアニメーションやVRAMアニメーションを行うスレッドを起動・終了させるために使われます。
どのようなアニメーション用スレッドがあるかについては、スレッド一覧を参照してください。なお、1つのスロットに1つのスレッドしか使えないため、アニメーション用のスレッドは同時に1つしか使えません。ステージで使われるアニメーションは全てスロット2のため、スロット2のスレッドを終了する処理は全てアニメーション停止処理に該当します。
なお、ナイトマンステージにおいて、パレットアニメーションとVRAMアニメーションが混在している箇所がありますが、これは一方をスクロールオブジェクトの常時処理で行っています。
背景の多重スクロールや吊り天井ギミックなど、ラスタスクロールを使用し始めるための設定に使われます。
なお、ラスタスクロール処理の終了については、特に明示的に行う必要はありません。
中間部屋(チェックポイント)を更新します。
現在の部屋番号をそのまま中間部屋とするパターンと、現在の部屋番号が特定の番号の場合にのみ更新するパターンがあります。後者の場合、無関係の部屋に置いても中間部屋は更新されません。
なお、生成時処理だけでなく、常時処理で行われる場合もあります。
中ボスを出現させ、中ボスが撃破されるまでスクロールを発生させません。
生成時処理で中ボスを出現させた後、生成時処理の中で中ボスの状態を監視し、撃破されると生成時処理を終了します。生成時処理が終了するまで常時処理とデータ列定義によるスクロールは実行されないため、中ボスが撃破されるまでスクロールは発生しません。
中ボスが撃破されて生成時処理が終了した後は、通常のスクロール処理となるため、スクロール方向の設定自体は通常のデータ定義で問題ありません。
ステージの最後に出現するボス(8ボスや大型ボス)を出現させます。また、ボスが出現する1つ前の部屋を中間部屋として更新します。
中ボス処理と同様、生成時処理の中でボスが撃破されているかを監視し、撃破されるとクリア処理を行います。
ボスラッシュでの8ボス戦に関しては、ボスが撃破されるとライフ回復アイテムを出現させ、これが無くなるとワープさせます。
後半ステージの大型ボスは、ボス前の部屋(シャッター内)でグラフィックの先読みが行われます。
シャッターをくぐってからグラフィックをロードしたのでは、転送が間に合わない可能性があるためと考えられます。
なお先読みの都合で、シャッター内に他のオブジェクトを配置しようとしても、グラフィックロード位置の重複によって、正常に表示されない場合があります。例えば、Mr.Xステージ3と4、Dr.ワイリーステージ1では、エディーを配置しても正しいグラフィックになりません。
破壊可能なブロック等の状態をリセットする用途で使われます。
具体的には、Mr.Xステージ2の落下する足場のリセットに使われています。
ステージ開始時にロックマンが出現する位置を変更します。
具体的には、Dr.ワイリーステージ4の最初です。通常は画面中央に出現しますが、出現位置がテレポーター内になるように調整されます。
横に長いスクリーンの途中でグラフィックの変更が必要な場合に使われます。例えば、プラントマンステージ最後のスクリーンでは、途中でパターンテーブルの更新が行われます。
なお、更新が行われた後は自身を削除するようになっており、常時処理まで到達しません。
スクロール前、あるいはスクロール後にパレットを更新する場合に用いられていると考えられます。
常時処理の方で後述しますが、スクロール前後どちらでパレット更新が行われるかについては、統一されておりません。通常のデータ列定義でのパレット更新では望みのタイミングとならない場合に、生成時処理でパレット更新を行っているものと思われます。
謎。
毎フレーム実行される処理で、「ROCKMAN 6 EDITOR」では「PRG2」で表記されています。生成時処理実行後、あるいは生成時処理が省略されている場合に、毎フレーム実行されるようになります。
データ列定義によるスクロール処理も、この常時処理と同じタイミングで行われます。データ列定義を用いずに常時処理として、同じ内容のスクロール処理を記述することも可能です。
補足事項として、スクロール処理におけるパターンテーブルとパレットの更新タイミングについて触れておきます。
パターンテーブルの更新は一律でスクロール前に行われます。しかし、パレットの更新についてはスクロール前か後かが、スクロール方向とパレット更新番号によって変わります。具体的には以下の表のようになっています。
スクロール方向 | パレット更新番号 | |
---|---|---|
$80未満 | $80以上 | |
上 | 前 | |
下 | 後 | 前 |
右 | 前 | 後 |
左 | 前 |
以上のようにややこしいですので、ステージ途中でパレットを更新する場合は注意してください。
ここからは原作で使われている常時処理を見ていきます。
ボス前の俗に言うシャッターの処理に用いられます。シャッター1とシャッター2に分かれており、1が1回目のシャッター(中間部屋に入るとき)、2が2回目のシャッター(ボスのいる部屋に入るとき)です。
シャッターが開いた時に現れる背景は、ステージごとに定義されている破壊後チップを参照します。以下のテーブルにステージ番号の順に最初のチップ番号が定義されています。このチップ番号を含めて4つの連番チップが表示されることになります。
シャッター1:バンク$39の$9A96~$9AA5(ヘッダ付きROMアドレス$73AA6~$73AB5)
シャッター2:バンク$39の$9AA6~$9AB5(ヘッダ付きROMアドレス$73AB6~$73AC5)
例えば、ステージ番号01のウインドマンステージについて見ると、$73AA7が$10、$73AB7が$14となっています。これより、シャッター1は$10,$11,$12,$13の16x16チップ番号の破壊後が参照されます。シャッター2は$14,$15,$16,$17の16x16チップ番号の破壊後が参照されます。
注意点として、ステージギミックとして破壊できるブロック等を使用する場合、シャッターで使用されるチップ番号とは同じにならないようにする必要があります。また、破壊後チップは複数のステージで共用するため、使い方によっては他のステージも巻き込んだ大惨事になります。
中間部屋(チェックポイント)を更新します。
生成時処理とは異なり、現在の部屋番号が特定の番号の場合にのみ更新するパターンだけが使われています。無関係の部屋に置いても中間部屋は更新されません。
ラスタスクロールの開始処理は基本的に生成時処理で行われますが、ブリザードマンステージの潜水艦に限り生成時処理で行われています。また、特定の部屋番号でのみ作動します。
生成時処理で書いたように、ラスタスクロール処理の終了は特に明示的に行う必要はありませんが、行われている箇所もあります。ブリザードマンステージの潜水艦とケンタウロスマンステージの上下する水が該当します。後者は演出的に必要というのもあると思われます。
アニメーションスレッドの起動は、基本的に生成時処理で行われますが、常時処理で行われるものもあります。
中ボス撃破後に起動するタイプと、特定の部屋番号に到達した場合に起動するタイプがあります。
また、特定の部屋番号に到達した場合にアニメーションを終了するものもあるようです。
アニメーションスレッドを使用せず、スクロールオブジェクトでアニメーションを行います。
生成時処理の方でも書いたように、ナイトマンステージでは2種類のアニメーションが使われている箇所があり、スレッドは1つしか使えないためスクロールオブジェクトでアニメーションさせるしかないのでしょう。
スクロールオブジェクトが消えるとアニメーションが止まってしまうため、横長のスクリーンでは使用できません。
Dr.ワイリーステージ3のボスラッシュの部屋およびこの部屋へ入る際のテレポーターの処理に使われます。
ロックマンがどのチップの上に立っているかを監視し、テレポーターの床に立っている場合にテレポートを行います。
中間部屋からの復帰時にロックマンが出現する位置を変更します。
具体的には、Mr.Xステージ2の中間部屋です。通常よりX座標が左にズレています。
スクロールにおける生成時処理と常時処理を分類し、それぞれどのようなものかを紹介しました。細かいところにまではあまり触れていないため、読み解くというほどではなかったかもしれませんが。
上手く活用すれば色々なことが出来る可能性のあるのが、ロックマン6のスクロールオブジェクトです。既存の処理を参考に、新しい処理を作ってみるのも面白いのではないかと思います。このページがその一助になれば幸いです。