NESのゲーム用の特殊効果デバイス。 パート2

この記事では、NESでのゲームの特殊効果のデバイスの説明の続きを見つけます(最初の部分はこちらです )。 今回は、理論が少なくなり、写真例が増えます。









ビデオプロセッサのスクロール位置を切り替えることによって作成されるエフェクトのグループと、ビデオプロセッサの状態を切り替えることによって取得されるいくつかのエフェクトを検討します。



スクロール位置を変更することによるアニメーション



インターフレーム



スクロール位置を変更することで作成される最も基本的で明白な「効果」は、ゲームカメラ作成することです。 それは明白なものとして認識されていますが、1回のエラーなしで初めてスクロールを正しく実装することができないという事実に、ビットコイン全体を賭けるでしょう。



さまざまなゲームでいくつかのスクロールオプションを検討してください。 これはそれほど印象的ではありませんが、ビデオプロセッサの機能を理解し、次の効果を理解するのに役立ちます。



最初の記事で述べたように、NESビデオプロセッサのアドレススペースには、表示する文字を含む4つの画面があります。 また、ビデオプロセッサには特定のスクロール位置(画面上にタイルを描画し始める座標)があります。



ただし、ほとんどの場合、ページのコンテンツはミラーリングされます(ミラーリングの主なタイプのより詳細な説明です)。 詳細に触れない場合、ほとんどの場合、ゲームには4ページではなく、2ページ(そして場合によっては1ページ)しかありません。



このスクリーンショットは、ゲーム「 つがみがとる」のページの水平ミラーリングを使用したスクロールの例を示しています。









水平スクロール



この場合、左の2ページは右の2ページを反映しています。 また、スクリーンショットでは、スクロールの位置に注意し、エミュレーター自体が現在画面に表示されているウィンドウを選択します。



ビデオプロセッサの速度が遅いため、ゲームはすべてのページのコンテンツを事前にレンダリングすることができず、このアクティブウィンドウの更新のみに制限されています。また、ウィンドウの近くにある最初の非表示行のみを更新し、プレイヤーが直接アクセスするまでにそれらを構築する時間を確保します。



そのため、一部のゲームでは戻って両方向のカメラの動きを整理することができません。これは開発者にとって簡単な作業ではなくなりました。



カメラが移動すると、ゲームごとに列/行の更新がわずかに異なります-ほとんどの場合、これはゲームのROMファイル(異なるサイズのブロック、または圧縮タイルマップ)にレベルデータが格納される方法が原因です。



縦スクロール



ミラーリングのタイプは、カートリッジのマッパーによってハードコーディングするか、ゲームによってプログラムで切り替えることができます。 上記の例のように、2つの画面の高さは垂直スクロールの錯覚を作り出すのに十分かもしれませんが、2画面以上の高さと幅のレベルを作成するには、開発者はトリックを思い付く必要がありました。



一部のゲームは、2つの画面「ドア」( Megamanシリーズのエンジン)以上の高さのレベルで作成され、画面に入るとゲームが一時停止して画面ページのコンテンツを更新します。



他の人は、この効果をプログラムで考案し、コーディングします:









ジャングルブックハドソンのアドベンチャーアイランドなどのゲームでは、スクロール主なタイプは水平ですが、ゲームではカメラを上下に移動し、その場で一番上の行を一番下に再構築し、カメラの「斜め」の動きのサポートを整理することもできます。



任意の方向にスクロールを編成する複雑さを強調するために、開発者のエラーの例を挙げることができます。 たとえば、 リトルマーメイドゲームでは、垂直方向にスクロールすると、ゲームは毎回ブロックの半分を「食べ」ます。これはゲームエディターに表示されます。つまり、 設計者は、このエラーを考慮せずにレベルを作成しました。









NESのほとんどのゲームは、画面サイズの倍数ではないブロックサイズでレベル記述するためにブロックシステムを使用しているため、垂直スクロール中に最後のブロックの下部がスローされます。 この効果はゲームTiny Toon Adventuresで見ることができます。開発者は意図的に非表示ブロックにゴミを残しました:









ここで、赤い線はゲームエンジンによってスローされる線に下線を引きます(このようなマークは、複数の画面の高さを持つ各レベルに存在します)。



シングルスクリーンゲームでのスクロール



一部のマッパーには、4回ミラーリングされる1つの画面ページしか含まれていません。 このようなゲームでスクロールを整理するために、開発者は画面の右側が左側を上書きするために発生するアーティファクトをマスクする方法を探すことを余儀なくされました。









Battletoadsでは、ゲームは単に出力行の先頭でビデオプロセッサのビームを「消し」、最初の列が右にスクロールした後に表示される列を複製するという事実を隠します。









Felix The CatTom&Jerryのゲームでは、線の右側が黒いスプライトでマスクされています。これは、記事の最初の部分で説明したスプライトの数表示するスクリプトで見ることができます。



スクロールアニメーション



スクロール位置の急激な変化により、興味深いアニメーション効果も可能です。

そのようなアニメーションの例は、 ミツメガトオルの2番目のボスです。









ボスの体はわずかにずれた2つの異なる画面に描画され、ゲームはスクロールを数フレームごとに別の画面に切り替え、ボスの体が脈動するようにします。



アニメーションは2つのフレームのみで構成されていますが、美しい効果を作成するにはこれで十分です。 ゲームは水平ミラーリングを使用します。これは、2つの異なるボス画像をハーフブロックオフセットで描画する必要があるためです(上記の垂直スクロールの例を参照)。これは、 CadEditorエディターでゲームを開くと表示されます









わかりやすくするために、「インジケータ」ブロックを変更して、画面ページを切り替えるときにゲームがどのように位置を変更するかを確認できます。





数フレームの背景アニメーションのより高度な例は、 Bucky O'Hareで見ることができます。 ゲームには回転する迷路があります





ゲームに実装するために、各フレームは、現在画面上にない画面の一部を更新します。 画面が完成するとすぐに、スクロールはすぐにディスプレイを「反転」させ、部屋を90度回転させる効果を生み出します。 その後、ゲームは別の画面ページに再び次のフレームを描画し始めます。









スクリーンショットは、非表示画面でのフレームの部分的なレンダリングを示しています。



背景に大きなオブジェクトを描く



ゲームは大きなオブジェクトを背景として描画し、スクロールの位置を変更することで、このオブジェクトの動きの効果を作成することがあります(ほとんどの場合、これらはボスです)。 必要に応じて、ボスには、ビデオメモリのバンクを変更して、スプライトまたはアニメーションを含むアニメーションパーツが追加されます。



その結果、たとえば、 My Pocket in My Pocketのように美しいビッグボスができます。









または、 Chip&Dale 2









ここでは、優れたデザインの決定を見ることができます-ボスの魔女はろうそくが消えたときにのみ表示され、開発者は背景を黒にする道徳的権利を持っています。



副作用は、そのようなボスの背景自体が存在しない必要があることです。そうでなければ、ボスとともに移動します。 理論的には、一方向の動きが反対方向のボスを補償するような方法で背景アニメーション効果が可能ですが、この効果が実現される単一のゲームやデモを見つけることができませんでした。



このようなボスの背景を作成する別の方法は、フレームの途中でスクロール位置を変更することです。ミッドフレームアニメーションのセクションでは、そのようなボスの例と、そのような実装の制限について説明します。



ミッドフレームアニメーション



フレームのレンダリング中にスクロールの位置を変更すると、異なる(ゼロを含む)速度で移動する複数の水平「バンド」に画面を分割することができます。 ただし、画面を揺らさずに行中にスクロール位置を直接変更する方法はないため、行の一部が異なる速度で移動していることがわかった場合、おそらく開発者はスプライトでアニメートするか、CHRバンクを変更することで視力を欺きます(記事の最初の部分の例)



さまざまな速度での画面の「ストライプ」の動きに基づいて、さまざまな効果を作成できます。 そのような効果を調査するために、 Mesenエミュレーター用のスクリプト作成しました(フレームの中央で効果を追跡できるのはそれだけです)。



開始後、ゲームがスクロール位置を変更し、画面を異なる速度で移動する別々のバンドに分割するラインが表示されます。 このセクションの効果のスクリーンショットは、このスクリプトを使用して作成されました。



GUIレンダリング



最も単純で理解しやすい効果は、ゲーム画面の下または上にユーザーインターフェイスをレンダリングすることです。 ここではすべてがシンプルです-プレイヤーが移動するレベルのレイヤーとは異なり、GUIは動きがありません。 ほとんどの場合、ゲームは他のエフェクトに加えてこれを使用するため、これ以上個別に言及しません。









最も単純な例はスーパーマリオブラザーズのゲームです-画面の上部は静止したままです。 スクロール位置を変更する必要がある正確な期間を決定するために使用されるトリックは非常に難しい場合がありますが、ほとんどの場合、よく知られているスプライトゼロヒットまたはマッパーの行番号を追跡する機能を使用します。



視差



視差効果により、観察者にとって、近くにあるオブジェクトよりも遠くにあるオブジェクトの移動が遅いという事実を表示できます。 次世代のコンソールでは、特にこの効果を実現するために、互いに独立したいくつかのレイヤーに描画することができますが、NESではそうではないため、開発者は画像の一部を水平方向にスクロールしてレイヤーをエミュレートしました。



このようなレイヤーの重要な制限は、レイヤーが互いに垂直に交差しないことです。これは、上記のスクリプトを使用して確認できます(レイヤーを区切る線がなければ、プレイヤーは互いに交差しないことが顕著になります)。



最も単純な例は、夕焼けの中を走るキャット・ニンデン・テヤンディー・ニンジャ・キャットです。









ここでは、マリオのように、1つの画面を可動部分と固定部分に分割するだけで十分です(ほとんどすべてのゲームにあるGUIゾーンでは個別に言及しません)。



より美しく複雑な例:









バッキーオヘアのレッドプラネット。 ここでは、空の雲と近い山の層が静的な空に追加されます。 線を分割しないと、山とプレイヤーのレイヤーの間に風景のレイヤーが残っているように見えます。これは、レイヤーが動いているかどうかを目で判断できないためです。



このタイプの視差の例を含むゲームが多数あります-Joe&Mac-Caveman NinjaTotally RadMetal FighterVice-Project Doomなど。















ただし、1つの水平方向( バッキーオヘアの窓の後ろの背景部分の視差)または一般的な垂直方向の視差(レベル2 Battletoadsの井戸の壁、 Megaman 2起動画面)でレイヤーの交差の効果が見られる場合、これらの例はすべて最初に説明されていることを覚えておく価値があります記事、覚えておいてください-行の途中で水平スクロールを変更することは不可能です、これらのゲームは他の効果を使用します。



移動する遠い背景を持つ視差の別の興味深いケースは、移動するトランスポートのレベルです。いくつかの例を示します。









スパルタンx2







小さな漫画2







バットマン:ジョーカーの帰還



カメラが楕円形のオブジェクトまたは洞窟内にある場合も、視差は顕著です。 この場合、下部と上部は遠くの壁よりもカメラに近くなります。 最良の例は、 Battletoadsのターボトンネルです。









またはバットマン:ジョーカーの帰還









最新の視差の例は、表示された平面がカメラに対して非常に傾いている場合に関連します。この場合、平面の各部分の異なる速度がはっきりと見え、それを表示するには多くのレイヤーが必要です。



TMNT4:Tournament Fightersのフロアレイヤーの数を見てください。









または、 TMNT3の海上:Manhatten Project









Battletoads and Double Dragonのポール(限界ケース、各行の個別のスクロール):









シーンの一部の動きを表示する



このエフェクトは、シーンの大部分を表示するために使用されます。









タイニートゥーンアドベンチャーのボス















バッキーオヘアの



シーンの比較的小さな部分については、個々の線まで( スーパースパイハンターで曲がるときの道路セクション):









シーンの一部を美しく組み合わせるために( TMNT4:トーナメントファイターズのスクリーンと)









また、フルスクリーンパズルを表示する場合( スーパーマリオブラザーズ3のルーレット):









シーンのセクションは、最初は背景ではなくスプライトのように見える大きなオブジェクトでもかまいませんが、スプライトにはサイズ、合計数、1行の数に制限があるため、スプライトには大きすぎます。 たとえば、 Bucky O 'Hareの緑の惑星のボスのボール(はい、このゲームは通常、さまざまな効果が非常に豊富です)が背景に描かれていますが、床とは別に移動します。









デモエフェクト



多くの場合、シーンのレイヤーの個別の動きの効果は、テキストまたはスクリーンセーバーを効果的に表示するために使用されます。 ジュラシックパークの開始時の2つの効果:









Tmnt 3ミッキーマウス3Mitusme Ga Tooruの波の効果:











そして、そのような他の人。



スクロールの垂直位置を変更する



天井の落下の効果を作成するために最もよく使用されます。 ボスの場合と同様に、必要な条件は黒い背景であり、その上ではレイヤー全体の動きが目立たなくなります。 したがって、天井の低下は暗い洞窟で最もよく見られます。









みつめがとおる









バットマン:ジョーカーの帰還



プロセッサ状態アニメーション



主な種類のアニメーションに加えて、ビデオプロセッサの状態を変更することでグラフィック効果を作成できます。 切り替え可能なステータスフラグは、ドキュメントに記載されています(たとえば、 こちら )。 これには、プロセッサを白黒モード切り替える、明るさを 変更する、またはアクティブな画面ページのアドレスを変更することが含まれます



たとえば、ゲームBattletoadsでは 、ユーザーインターフェイスは別の画面ページに描画され、フレームの中央で別の画面に切り替わります。この画面では、レベル自体がインターフェイスなしで描画されます。



マッパーを使用して追加機能を追加することもできます。 たとえば、Namcot 163マッパーのMappy Kidsゲームを考えてみましょう。これは、画面ページを個別のコマンドとして切り替えることができます。これにより、ゲームは分割画面モードをサポートします。









これらはすべて、NESで使用される主な種類のアニメーション効果です。 当然、異なるグループのいくつかの個々の効果は見逃され、まれなマッパーへの効果はほとんど研究されていません。十分な量がある場合は、別の記事に専念できます。



次の記事では、 CadEditorを使用してグラフィックスとデータをROMファイルから引き出して、Cでこれを行う方法の例を示します。



使用済みツール



ユニバーサルCadEditorレベルエディター



一般に、この記事と以前の記事のゲーム全体の研究は、このプロジェクトの一部として行われましたが、これは部分的にローメーカーコミュニティのプロジェクトになりました-ゲームレベルのほとんどは、私ではなく他のユーザーによって追加されました。そのような研究が興味深い場合は、 Patreonプロジェクトページに言及してください。寄付。



Mesenエミュレーターのスクリプト:

logParallax-フレームレンダリング中にゲームがスクロール位置を変更する線を描画します。



makeScreenshots -Qを押すとスクリーンショットの撮影が開始され、もう一度押すと停止します。 画像を保存してからgif画像にステッチするのに便利です。



modifyScreen- 「シェーダー」を記述し、エミュレーターのポストエフェクトの作成で遊ぶことができる別のボーナススクリプト。










All Articles