渦巻き - Rickisthe1/CoilSnake-m2-basic GitHub Wiki
スワール(Swirls)について
スワールは、戦闘開始時に見られる回転するアニメーションです。それ以外にも、戦闘中のエフェクト(ギーグの「理解不能な攻撃」や「ビームを発射した!」など)としても使用されます。
これらのスワールは、**HDMA(Horizontal Direct Memory Access)**というSNESの特殊機能を利用して描画されており、一般的なタイルやパレットとは異なる仕組みで動作します。以下、その仕組みや制限、カスタマイズ方法について解説します。
スワールの仕組み
HDMAの「ウィンドウ機能」を利用することで、画面を線でクロップするように描画します。この線の長さや位置を毎フレームごとに変更することで、複雑な形状を実現しています。ただし、この技術には以下の制限があります:
- 1スキャンラインあたり最大2本の線しか描けない。
- 各線の幅は最低2ピクセル以上でなければならない。
スワールのフォルダ構造
スワール関連のフォルダには6種類のアニメーションが含まれています。ただし、このうち実際に戦闘開始時に使用されるのは2種類だけで、残りの4種類は戦闘中のエフェクトとして使われます。
- 各スワールは以下の要素で構成されています:
- 白と黒の2色で描かれた一連の画像
swirls.yml
ファイルで定義されるフレーム数と速度
swirls.ymlの構造
swirls.yml
は非常にシンプルな構造を持っています。以下は例です:
1:
frames: 23
speed: 2
各パラメータの説明
-
frames:
アニメーションのフレーム数。対応するフォルダ内の画像の枚数と一致させる必要があります。例えば、画像が23枚ある場合は、frames: 23
と指定します。フレーム数が画像より少ない場合、アニメーションが途中で切れます。 -
speed:
各スワールフレームが持続するゲームフレーム数。SNESは60FPSで動作するため、speed: 2
の場合は30FPS(60 ÷ 2)、speed: 3
の場合は20FPS(60 ÷ 3)の速度になります。
制限事項
スワールをカスタマイズする際、以下の制限を考慮する必要があります:
制限1: 各線の幅は最低2ピクセル以上
例えば、以下のようなアニメーションを作成した場合:
CoilSnakeは次のエラーを出力します:
Encountered error while reading frame #0 of swirl #1
Caused by: InvalidArgumentError: Line at (128,111) must be at least 2 pixels wide
この場合、線の幅が1ピクセルしかない部分が原因です。
制限2: 1スキャンラインに2本以上の線を描けない
さらに修正して幅を2ピクセル以上にしたとしても、次のエラーが発生する可能性があります:
Encountered error while reading frame #14 of swirl #1
Caused by: InvalidArgumentError: There are more than two lines on the same row at y=92
この制限により、複雑な形状(例えば星型など)は描画できません。
高度なテクニック(準備中)
HDMAをさらに活用する方法として、以下のような技術があります:
- 反転(Inverting)
- 透過(Transparency)
- 色の利用(Colors)
これらについては、後日詳細を追加予定です。
まとめ
スワールは独自の仕組みで動作しており、SNESのハードウェア制限に従う必要があります。しかし、その制限内で工夫すれば独創的なアニメーションを作成することが可能です。HDMAを理解し、カスタマイズを楽しんでください!