バトル背景 - Rickisthe1/CoilSnake-m2-basic GitHub Wiki
バトル背景
『MOTHER 2』は、同時期の他のRPGとは異なり、敵のスプライトが様々なサイケデリックで変化し、ねじれた背景の前に表示されることで特徴的です。これらはオリジナルの開発チームによって「ビデオドラッグ(Video Drugs)」または「ビデオリラクサント(Video Relaxants)」と呼ばれていました。『まきへびドライ』を使えば、これらの背景を驚くほど簡単にカスタマイズでき、フレームごとのアニメーションは必要ありません。
使用されるファイルの一覧:
BattleBGs/
bg_data_table.yml
bg_distortion_table.yml
bg_scrolling_table.yml
ベース画像
すべての画像は BattleBGs/
ディレクトリにPNGファイルとして抽出され、ファイル名は『まきへびドライ』で識別されるIDとして機能します。各画像は bg_data_table.yml
に定義されたバトル背景のベースとして使用されます(たとえば、1つの画像を複数の背景で参照することができます)。背景の設定に応じて、画像はほとんど変更されない場合もあれば、ほとんど認識できないほど変更されることもあります。
これらを編集するには、インデックス化されたパレットをサポートするプログラム(GraphicsGale、Aesprite、Photoshopのインデックスモードなど)を使用してください。
さらに、バトル背景には4色または16色のいずれかがあります。背景を2枚重ねる場合、両方の背景は4色である必要があります。
bg_data_table.ymlでの設定
各エントリーは、BattleBGs/
内で同じIDの画像に適用すべき効果を説明しています。適用可能な変更は基本的に3種類です:
- 色深度 - 色深度とパレットはカスタマイズできます。この番号は、ROM内で画像を表現するために使用される1ピクセルあたりのビット数を決定します。4は4ビット(16色)、2は2ビット(4色)を意味します。
- 歪み - 基本画像がどのように曲げられ、引き伸ばされるかを決定します。ゲームエンジンは、指定された各歪みをサイクルで適用します。数値は
bg_distortion_table.yml
と対応しています。 - パレットサイクル - パレットサイクルの開始と終了設定に基づき、パレットをサイクルします。パレット変更速度(「パレット変更速度」と呼ばれるのは少し誤解を招くかもしれませんが、これはゲームが各色を次の色にサイクルするまでのフレーム数を示します。したがって、数値が高いほど、パレットは遅くサイクルされ、最速の「速度」は値1です)。
3つの異なるモード(「なし」を含む4つ)が利用できます:
- **「1」**は、パレットサイクル1の開始と終了の値をそのまま使用します。
- **「1(逆)」**は「1」と同じ値を使用しますが、逆順でサイクルします。
- **「1 + 2」**は、パレットサイクル1と2を同時に使用します。(TODO: 両方のパレットサイクルは同じ長さ/色数でなければならないか?すべてのバニラのものはそうです。)
例えば、パレットサイクルが「1」に設定され、パレットサイクル1の開始が1、終了が4、パレット変更速度が「60」に設定されている場合、60フレーム後(1秒後、SNESは60fpsで画像を表示するため)背景画像の色1は色2に、色2は色3に、色3は色4に、色4は色1に変更されます。その後、60フレーム後に同じことが繰り返されます(元々色1だったものが今は色3に変わります!)。少し実験してみると、もっとわかりやすくなるかもしれません!
- スクロール運動 - ゲームが画像を縦横どちらの方向にスクロールするかを決定します。数値は
bg_scrolling_table.yml
と対応しています。
bg_distortion_table.ymlでの設定
『MOTHER 2』の歪み効果はHDMA(Horizontal Direct Memory Access)によって達成されます。簡単に言うと、これは古いブラウン管テレビ(CRT)が画像を表示する際に、各スキャンラインごとに背景の位置を更新する方法を利用しています。(詳細は[こちらの動画](https://www.youtube.com/watch?v=zjQik7uwLIQ&t=413s&pp=ygUdZWFydGhib3VuZCBiYXR0bGUgYmFja2dyb3VuZHM%3D)をご覧ください)。これを理解する必要はなく、ファイルで扱うには必要最低限のパラメーターが提供されています!
- リップル振幅 - 各ピクセルラインが開始位置からどれだけ移動するかの最大距離(「波」の強さ)。これは256分の1ピクセルで測定されるため、振幅が256の場合、各「波」は1ピクセルの高さ/幅になります。
- リップル振幅加速度 - 各フレームでリップル振幅に加える量。これらのフィールドは符号付き32ビット値を使用しており、$0000から$FFFF(または10進数で0から65535)までの範囲です。1から32767は正の値で増加し、65535から32768は負の値で減少します。加速度値が32767から32768に変わると、背景は「ジャンプ」して正の32767から負の32767に移行します。
- リップル周波数 - 画面上に表示される波の数。数値が高いほど、より多くの波が現れ(各波の長さが短くなります)。高すぎると、波が異なるものではなく、ノイズに見えるようになります。
- リップル周波数加速度 - 各フレームでリップル周波数に加える量。リップル振幅加速度と同様に符号付き32ビット値を使用します。周波数値を減少させたい場合、負の数(65535から32768の範囲)を使用します。
- 速度 - 波が画面上で移動する速度。数学的な仕組みは不明ですが、値が高いほど波が速く移動するように見えます。この値は0から255の範囲です。
- タイプ - 歪みには4種類(未知のタイプ0/nullを含めると5種類)があります:
- 水平方向、スムーズ - 背景が水平方向に波状に変形します。
- 水平方向、インターレース - 背景が波状に変形しますが、2行ごとに鏡像反転します。ヘリックスのように見えることがあります。
- 垂直方向、スムーズ - 背景が垂直方向に波状に変形します。実際には波のようには見えませんが、画像が屈折したり、時には分裂しているように見えます。
- 未知のタイプ4 - 水平方向、インターレースと似ていますが、圧縮および圧縮加速度値を使用して、画面上の下の行ほど左または右に大きく変形させる効果を生み出します。ゲーム内では使用されていないようです。
下の4つの値は「未知」とされていますが、実際にはその効果がわかっています:
- 未知A - 歪みパターンの持続時間。このフレーム数が経過すると、リップル振幅とリップル周波数がデフォルトの値にリセットされ(加速度が0以外に設定されている場合にのみ顕著)、パターンは再起動するか、次のbg_data_tableエントリーの歪みに進みます。
- 未知B - 歪みの「フェーズ」。0以外に設定すると、波の位置が変位します。
- 未知C - 「垂直、スムーズ」モードでは「圧縮」として知られており、背景の垂直方向のオフセットを線形に変更します。
- 未知D - 「垂直、スムーズ」および「未知タイプ4」モードでのみ効果があります。
bg_scrolling_table.ymlでの設定
これらの値は、bg_distortion_tableを理解していれば自己説明的です! 水平および垂直の動きは、水平および垂直スクロールの速度を制御します(1から32767の正の値で右/下方向、65535から32768の負の値で左/上方向にスクロール)。加速度はスクロール速度の増減を制御します。
背景ごとに4つの歪みパターンとスクロールパターンを持つことができます! これにより、スクロールパターンが徐々に加速してから0に戻り、その後逆方向にスクロールして再び0に戻るような面白い動きを作り出すことができます。実験して、電卓を手元に置いてみてください!
CAST SCREEN
-
『MOTHER 2』のエンディングでキャスト画面に接続されている黒い背景(バトル背景279)を変更すると、ゲームが黒い画面を表示し、音楽が再生されるだけでグラフィックが表示されず、その後進行しなくなることが確認されています。
-
ティーやコーヒーシーンで使用される背景も同様のエラーを引き起こす可能性が高いと思われます。