技アニメーションスクリプト

Last-modified: 2024-01-24 (水) 19:24:14

技アニメーション用のスクリプトコマンド一覧
実際の技アニメの作成については技アニメ解説(外部サイト)が参考になるかと思われます

目次

スクリプト

00:画像読み込み

00 nn nn

技アニメーションに使用する画像を呼び出す
これを入れてない状態で指定の画像を使用する処理を呼び出すと表示がおかしくなる

01:画像読み込み停止

01 nn nn

一部のパターンにおいて設定されている画像の表示をしなくなる
00を挿入していなくても使用することができる

02:技画像の表示と動作に関する指定

02 @@ @@ @@ 08 xx NN ~

参照されたアドレスの動作を呼び出す。アドレスは4の倍数指定でなければならない。
NNはモーションの個数で一つのモーションごとに2byte
xxは不確定ではあるが画像のZ軸を操作している

アドレスのジャンプ先では

SI SI SP SP @1 @1 @1 08 @2 @2 @2 08 00 00 00 00 @3 @3 @3 08 @4 @4 @4 08

というような24byteの構造になっており
SIはそのアニメーションで使う画像、SPはその画像にしようするパレットで互いに同じものをいれておかなければならない
@1のジャンプ先では使用する画像制御
@2のジャンプ先ではアニメーションの動きに対する画像の指定と表示時間
加えて画像のループ設定も行っている
モジュールの数を変更した時にバグが起きる可能性がある(要検証)
@3のジャンプ先ではアニメーションの動きの一部を管理している
@4のジャンプ先はプログラム領域となっている

基本画像の大きさが同じで別に用意した画像て同じ動きをさせたい場合はSIとSPを書き換えれば動作する

03:表示済みの画像の動作に関する指定

03 @@ @@ @@ 08 xx NN ~

NNはモーションの個数で一つのモーションごとに2byte
xxは不確定ではあるが画像のZ軸を操作している
アドレス指定は02とは異なり、プログラムのアドレスが直接指定されている。

04:待機時間

04 nn

次のスクリプトを読むまで指定したフレーム数の間動作を止めておく
待機時間の長さは7Fまでは正常に動いたのを確認
80以降を入力すると表示がおかしくなる事がある

05:前スクリプト終了まで待機

05

直前に書かれた動作が終了するまで処理を留めておく。

[未使用]06:ブランクコード

[未使用]07:ブランクコード

08:アニメーションスクリプトの終了

08

技アニメーションを終了するときに使用する
これがないと技アニメーションが終わらないので必ず終わりに入れる必要性がある

09:効果音の再生

09 fn fn

fnに鳴らしたいファンファーレIDを入力
左右振り分けは攻撃対象側に依存

[未検証]0A:可視化設定?

0A nn

nnは対象位置(0x00:自分 0x01:相手)
指定の有無により透過処理の効果が得られるかが変わる。
自分と相手の両方を設定することは不可。

[未検証]0B:可視化設定解除?

0B nn

nnは対象指定(0x00:自分 0x01:相手)
おそらく0Aの設定解除

[未検証]0C:透過度指定

0C n1 n2

nnの具体的な数値詳細は不明。
オブジェクトに対する透過度の指定を行う。
n1では画像自体の光度、n2は画像に適用される光度?
カウント値とアルファ値があり、カウント値は0x3F40で、アルファ値は指定の値でセットされる。

[未検証]0D:

0D

おそらく0Cで行った透過度指定の解除(カウント値とアルファ値に0をセットする)。

0E:ルーチンの呼び出し

0E @@ @@ @@ 08

指定した参照先のアドレスへジャンプし書かれた動作を実行する
これを使うことで同じ処理の繰り返しを行うとき複数同じものを書かなくても良いという利点がある
戻ってくるときは0Fのスクリプトで戻ってくる

0F:ルーチン先から戻る

0F

0Eで飛んだ先から戻るときに使用されるリターン処理

10:任意パラメータセット

10 in nn nn

02037e36+ 2*inのメモリアドレスに指定したnnを格納する。
数値が動作によって固定されている場合は上書きできない。

11:2ターン技のアニメーション指定

11 @1 @1 @1 08 @2 @2 @2 08

1ターン目と2ターン目でアニメーションが異なる技のアニメーション指定
1ターン目の技アニメーションスクリプトが記述されているアドレスを@1に
2ターン目の技アニメーションスクリプトが記述されているアドレスを@2に指定する
経過ターン数の判定は02037e4aの内容を見て判断される

12:経過ターン数によりアニメーションが変化する技のアニメーション指定

12 nn @@ @@ @@ 08

nnは経過ターン数(00を起点とする)
経過ターン数(02037e4aの値)がnnと一致する場合、指定したアドレスへジャンプする。

13:別のオフセットへジャンプ

13 @@ @@ @@ 08

指定したアドレスへジャンプする。

14:背景画像指定

14 bg

bgは背景画像番号
メモリ領域に画像番号をセットする。反映は行われない。
セット済みフラグとして02037e4bに1をセットする。

15:背景画像指定解除

15

解除用の指定値をメモリ領域にセットする。反映は行われない。
セット済みフラグとして02037e4bに1をセットする。

16:背景画像表示反映1

16

02037e4bの値が2以外の場合は02037e14に1をセット
2の場合は02037e14に0をセット
02037e14に1がセットされていると技背景が表示反映されるものと思われる。

17:背景画像表示反映2

02037e4bの値が0以外の場合は02037e14に1をセット
0の場合は02037e14に0をセット
02037e14に1がセットされていると技背景が表示反映されるものと思われる。

18:背景画像表示

18 bg

bgは背景画像番号
14~17との違いは、このコマンドが処理された瞬間フェードイン処理などもなくいきなり画像が表示される点。

19:効果音の再生

19 fn fn NN

fnに鳴らしたいファンファーレIDを入力
NNには左右の振り分け
既存のスクリプトだと下のようになっている

00全体
3F相手側
C0味方側

1A:効果音の振り分け

1A NN

現在再生されている効果音の振り分けを再生中に変えることができる。

1B:効果音の再生(左右振り分け複数指定可)

1B fn fn N1 N2 nn nn

19・1Cと類似した処理を呼んでいるため、効果音関係の処理と思われる。
N1, N2は左右振り分け指定。1→2へと音が移動する。
nn nnはおそらく音の移動の仕方に関する挙動。本家では02 00の指定が多い

1C:効果音の再生(繰り返し再生)

1C fn fn NN in ti

fn, NNについては19と同様
inには繰り返し音が再生されるまでの間隔
tiには繰り返しの回数を指定する

1D:効果音の再生(ウェイト指定あり)

1D fn fn NN in

fn NNについては19と同様
inで音が再生までのウェイト時間が指定できる。

[未検証]1E:透過度(カウント値)の任意指定

1E cn cn

cnはカウント値の任意指定値
透過度指定で使用するカウント値を指定の値にセットする。

[未検証]1F:任意処理呼び出し

1F @@ @@ @@ 08  NN ~

02・03と同じように~任意処理を呼び出すもののよう。

20:効果音のウェイト

20

02037e17にセットされる値で処理分岐している。
現在再生されている効果音が鳴り終わるまで処理を留めておく。

21:条件判定ジャンプ

21 XX nn nn @@ @@ @@ 08

02037e36+ 2*XXのメモリ領域に格納されたアドレスとnnの値を比較し、一致する場合に指定アドレスへジャンプする。
本家ではバインド技番号チェック、行動対象チェックなどで仕様実績あり。

使用例一覧
バインド技番号チェック

  • XX:00(02037e36にセットされた値を参照)
  • nn:
    0x00まきつく・しめつける
    0x01ほのおのうず
    0x02うずしお
    0x03からではさむ
    0x04すなじごく

行動対象チェック

  • XX:07(02037e44にセットされた値を参照。[03 0D CC 0B 08 02 00]とセットで使用される)
  • nn:
    0x00自分
    0x01相手

[未検証]22:条件付き0A?パターン1

22 nn

nnは対象指定(0x00:自分 0x01:相手)
対象のポケモンのスプライトをBGに展開する。
0A/0Bと併用して自分と相手の両方のスプライトをBG展開することができる。
ただし22で展開したポケモンを動作させることはできない。

[未検証]23:条件付き0B?パターン2

23 nn

nnは対象指定(0x00:自分 0x01:相手)
22の設定解除?

24:技使用者が敵側である場合ジャンプ

24 @@ @@ @@ @@

技使用者が敵側である場合指定されたアドレスにジャンプする。

25:使用者位置によって表示する画像が異なる背景画像指定

25 b1 b2 b3

b1はプレイヤー側が攻撃する際の背景画像番号
b2は敵側が攻撃する際の背景画像番号
b3はコンテストにおいて技が使用された際の背景画像番号。
EMでは1B以降を指定すると画面が崩壊してフリーズするので注意。

[未検証]26:曲に関する指定?パターン1

26 mu mu NA NB nn nn

muはミュージックナンバー。
後半2バイトは不明値。
曲関係の処理らしいが詳細不明。

[未検証]27:曲に関する指定?パターン2

27 mu mu NA NB nn nn

muはミュージックナンバー。
後半4バイトは不明値。
曲関係の処理らしいが詳細不明。

[未検証]28:LCD bg operations for each side something

28 nn

ポケコミュ原文ママ。詳細不明。nnは対象指定。

[未検証]29:LCD bg operations above, except unconditional

29

ポケコミュ原文ママ。詳細不明。

[未検証]2A:28の類似処理。

2A nn

28の詳細が不明なため、こちらも詳細不明。nnは対象指定。

2B:指定対象の画像非表示

2B nn

nnは対象指定。
指定した対象の画像を非表示にする。フェードアウトなどはなくいきなり消える。

2C:指定対象の画像表示

2C nn

nnは対象指定。
指定した対象の画像を表示する。既に表示済みの場合は何も変化がない。フェードインなどはなくいきなり表示される。

2D:指定対象の表示処理

2D nn

指定した対象を表示する。ダブルバトルでしか効果はなく、攻撃対象が自分自身を指定する技でなければ意味が無い。

[未検証]2E:指定対象に対する画像処理?

2E nn

指定した対象になんらかの画像処理をしている? 詳細不明。
2D同様ダブルバトルかつ攻撃対象が自分自身を指定する技でなければ意味が無い。

2F:効果音の停止

2F

これを読み込むと現在流れている効果音が強制的に終了する

アセンブリ指定

コード
000x371F8C0x07200D
010x371F900x072075
020x371F940x0720C1
030x371F980x0721B5
040x371F9C0x072231
050x371FA00x072271
060x371FA40x0722A5
070x371FA80x0722A9
080x371FAC0x0722AD
090x371FB00x0723AD
0A0x371FB40x0723D5
0B0x371FB80x0729F1
0C0x371FBC0x072D85
0D0x371FC00x072DE5
0E0x371FC40x072E09
0F0x371FC80x072E3D
100x371FCC0x072E51
110x371FD00x072E85
120x371FD40x072EC5
130x371FD80x072F09
140x371FDC0x072F45
150x371FE00x07311D
160x371FE40x073161
170x371FE80x073195
180x371FEC0x0731C9
190x371FF00x07336D
1A0x371FF40x0733A5
1B0x371FF80x0733D1
1C0x371FFC0x073675
1D0x3720000x073759
1E0x3720040x072DBD
1F0x3720080x073811
200x37200C0x073885
210x3720100x073909
220x3720140x072B41
230x3720180x072C29
240x37201C0x07395D
250x3720200x072F89
260x3720240x073521
270x3720280x0735B5
280x37202C0x07396D
290x3720300x0739B9
2A0x3720340x0739E1
2B0x3720380x073A49
2C0x37203C0x073A85
2D0x3720400x073AC5
2E0x3720440x073B6D
2F0x3720480x073BFD

コード拡張について

・上記アセンブリ指定のテーブルを任意の位置に移動
・テーブル参照先アドレス0x071FFCにあるテーブルアドレス指定を移動先のアドレスに置換
・移動したテーブルの末尾に追加したアセンブリ処理のアドレス+1を追記していく
上限指定などはないのでこれで30以降のコードも使用可能となるはず。