技アニメの解説/表示画像の変更編

基本編様々な02処理編を見た方を対象にして書いています

基本編でも書いていますが、基本的な動作の説明等は
改造ポケモン制作資料 Wiki さんの 技アニメーションスクリプト のページに載っています
資料Wikiのページを見つつ、この解説も見て頂くと理解しやすくなるかもしれません
また、画像を扱うので資料Wikiの 画像アドレス のページも見た方が良いです

表示画像の変更編 画像を変更してみよう

いくら02処理と03処理を理解していても、やはり表示される画像の変更ができないと既存画像のみでは表現に納得できないこともあります
という訳で、表示する画像の変更方法について色々書きます
02~処理の深堀り編とも言えるかも?

ではまずは基本編でも見た たいあたり(位置 1AB44E~) の中身をもう一度見てみましょう

00 9727
0A01 0C0C08
02 5CD33908 0202 0400 0400
0406
02 4CF13A08 0204 0000 0000 0100 0200
03 01840908 0205 0100 0300 0000 0600 0100
19 8400 3F
05
0B 01 0D
08

画像の表示は 02 4CF13A08~ で行っているので、今回注目するのはこの処理になります

「02 4CF13A08 0204 0000 0000 0100 0200」
3AF14C を読み込んで、画像ID2797を表示しています
基本編や02処理編までは解説の為に読み込み位置を書きつつもスルーしていましたが、この 3AF14C の位置にある処理が画像の変更に関わってきます
まずは 3AF14C の位置にある数値を見てみましょう

9727 9727 880B3708 E4111F08 00000000 3CF13A08 21B80B08

この24バイトの数値が今回の 3AF14C の中身となります
最初に 9727 という数値が2つ並んでいます。これは画像ID2797をリトルエンディアンで指定しています
この処理の中で語るのはこの画像IDの指定のみです
…解説と謳っておきながら申し訳ないのですが、実は最初の画像ID以外の処理は全然分かりません…
資料Wikiによると
3番目の 880B3708 は使用する画像の制御
4番目の E4111F08 はアニメーションの動きに対する画像の指定と表示時間とループ設定
00の羅列は飛ばして6番目の 3CF13A08 はアニメーションの動きの一部を管理
7番目の 21B80B08 はプログラム領域だそうです
正直どの指定先を見ても私はよく分からないので説明できません。いじってみたい方は自力で頑張ってください
ちなみに使用ポケモンが移動する 02 5CD33908~ の 39D35C の中の画像指定は 0000 0000 です。恐らく画像IDが付けられている画像を使う訳ではなく既に表示されているポケモンを使うからだと思います
例に挙げた処理の表示画像を変更する場合はここの処理を丸ごとコピーして空いた場所に貼り付け、02 4CF13A08 ~ の 4CF13A 部分にリトルエンディアンで貼り付けた場所を指定して使用しましょう
当然ですが 3AF14C の中を直接変更してしまうと、たいあたり以外で同じ処理が使用されている技の画像まで変わってしまいます(そして大抵の場合は対象の画像を読み込んでいないのでバグった黒い画像っぽいものが表示されます)

改めまして 9727 9727 の部分、これは表示する画像とパレットを指定しています
FRに導入されている画像はほぼ全てが画像とパレットに分けることができます。bmp形式ってやつです
ポケモンには通常の色と色違いが存在しますが、この通常の色と色違いの色はポケモン画像をそのままにパレット情報を変えることで表現しています。そんな感じで同じ画像でも別のパレットを使って色を変えて別のものっぽく見せることができる形式です
大抵の場合は画像のデータよりパレットのデータの方が何倍も軽いので、色を変えるだけならパレットを変更すれば容量の負担が少ないです
最初の 9727 が画像の指定、次の 9727 がパレットの指定です
画像ID2797の画像とパレットのデータを指定しています
画像とパレットはセットのようなものなので、基本は同じ数値を入れることになると思います
ここを変更することで表示する画像を変えることができます

試しにたいあたりの画像2797を画像280Cに変えてみます
流石にお試しであろうと読み込み先を変更し画像を変更するのですから、既存のたいあたり処理を直接変えるようなことはせずたいあたりの中をコピーして空いた場所に貼り付けて試してください
忘れがちですが変更する画像の読み込みも必要になるので、たいあたり処理の最初にある 00 9727 を 00 0C28 に変える、または00 0C28 を付け加えましょう
たいあたりの画像の変更だけするとなるとこんな感じでしょうか

00 0C28
0A01 0C0C08
02 5CD33908 0202 0400 0400
0406
02 (処理を貼り付けた場所)08 0204 0000 0000 0100 0200
03 01840908 0205 0100 0300 0000 0600 0100
19 8400 3F
05
0B 01 0D
08

02で読み込む処理
0C28 0C28 880B3708 E4111F08 00000000 3CF13A08 21B80B08

これを実際に行うと
変更した画像280C 変更した画像280Cの大きさ00
デフォルトの大きさ(左)だと分かりにくいので、02処理内の大きさ設定で大きく設定した(右)
ちゃんと画像ID280C、ねこのて で使われる画像になっていますね
0A~の通過設定もあるのでこれらを除くと更に分かりやすくなるかな
変更した画像280Cの大きさ00透け無し透けなくしたやつ
各画像には16×16、32×32といった大きさ(サイズ)があり、大きさが違う画像は上手く表示されない可能性があります
たいあたりの画像2797とねこのての画像280Cは同じ32×32の大きさだったので綺麗に映ったのでした
各画像の大きさを調べたい時は、GBAGC等の画像ツールで検索して抽出して調べてみてください
GBCGC使用例
GBAGCの場合はロムを読み込んで上に画像の位置、下にパレットの位置を入力してLZ77(圧縮画像であること)にチェックを入れると表示されます
SizeのWidthやHeightを調整して良い感じに表示したら、上にあるDumpを押す→Save as Image で保存しましょう
あとは保存された画像のサイズを確認して終了です。まぁFR内で使用されている画像のサイズはある程度決まっているので、保存しなくても見た目で何となくサイズが分かったりもしますが
ついでに保存した画像は画像自作する時の参考にしたりもできますね

画像変更を応用するとFR内に存在はするけど使われていない技アニメの没画像を表示することもできます
せっかくですしひっかくやいあいぎりのように、画像にアニメーションが設定されていて動いている没画像を引っ張ってきてみます
りゅうのいかり内で使われている画像ID2733を、没画像のID273Aに変えてみます
変更する画像の大きさは元の画像と合わせるのが基本なので、アニメーションが設定されている画像も同じアニメーション数のものを設定した方が良いです
例の画像2733だとアニメーション数は5枚なので、同じように5枚の没画像を選びました
アニメーションの数で幅広く使われているのは5枚(サイズ32×160)、次点で4枚(サイズ32×128)な印象です
りゅうのいかり(位置 1B2024~)の中身を全て載せると長くなるので抜粋したものが以下の通りです

00 2D27 00 3327
…(省略)…
02 1CED3A08 C203 0100 0500 0000
0401
02 1CED3A08 C203 0100 F6FF F1FF
0401
02 1CED3A08 8203 0100 0000 1900
0401
02 1CED3A08 C203 0100 0F00 0500
0401
02 1CED3A08 C203 0100 E7FF 0000
0401
02 1CED3A08 8203 0100 1E00 1E00
0401
02 1CED3A08 8203 0100 E5FF 1900
0401
02 1CED3A08 C203 0100 0000 0800
05
…(省略)…
08

ここから変更するのは00~の画像読み込みと、8個ある02 1CED3A08~ の指定読み込み部分です
3AED1C にある24バイトの数値をコピーして空いた場所に貼っておきます
そして以下のように変えます

00 2D27 00 3A27
…(省略)…
02 (処理を貼り付けた場所)08 C203 0100 0500 0000
0401
02 (処理を貼り付けた場所)08 C203 0100 F6FF F1FF
0401
02 (処理を貼り付けた場所)08 8203 0100 0000 1900
0401
02 (処理を貼り付けた場所)08 C203 0100 0F00 0500
0401
02 (処理を貼り付けた場所)08 C203 0100 E7FF 0000
0401
02 (処理を貼り付けた場所)08 8203 0100 1E00 1E00
0401
02 (処理を貼り付けた場所)08 8203 0100 E5FF 1900
0401
02 (処理を貼り付けた場所)08 C203 0100 0000 0800
05
…(省略)…
08

02で読み込む処理
3A27 3A27 080A3708 18ED3A08 00000000 F0111F08 6D860B08

そして結果がこうなります
通常のりゅうのいかり 没画像のりゅうのいかり
左が通常のりゅうのいかり、右が没画像を使ったもの
没画像ID273Aの泡が弾ける動きがちゃんと反映されました
こういった形で没画像を持ってきて表示させることができます
勿論元の処理で使う画像と同じ大きさの画像を使わないと上手くいかない可能性があるので、元々の画像と没画像の大きさ両方を知らないと設定も難しいのですが…
事前に資料Wikiの画像アドレスページで未使用(没)の技アニメIDの画像とパレットの位置を見て実際にGBAGC等で確認し、気になる没画像があれば画像保存してIDも記録しておくと自作の時に使えそうです


使用される画像を変更するには、対象の02処理の指定先をコピーして読み込む画像IDを変更して02処理に読み込ませると可能なことが分かりました
そしてこれは自作の画像を導入する時も同じです
自作の画像を導入する際に気を付けるのは、画像のサイズを元々の処理で表示される既存画像と同じにすることくらいです
あとはほぼ全ての画像に言えますが使用パレットの色数を16色以下(透明色も入れるので使えるのは実質15色)にするのも忘れずに
画像が大きかったり情報量が多いほど導入する時に容量を取られる傾向にあります
パレットは設定された色が多いほど容量を取ってきますが通常の画像に比べたら軽いです。最大でも40バイト(16進数で28)くらい?

自作した画像を導入する例も挙げていきます
例ではミルクのみ(位置 1AF3CA~)で画像ID2773(サイズ32×32)を使用する02処理を、32×32の画像を作って差し替えてみることにします。以下は抜粋です

00 7327 00 DB27 00 2F27
0A01
02 F8A83A08 0200
0428
…(省略)…
0B01
0E CE961B08
05
08

見慣れない処理が見える方もいそうですが、今回は関係ないので説明は省略します
変更するのは 02 F8A83A08 0200 です。これがミルクのみの瓶を表示して使用ポケモンへと溶けていくような動きをしています
ちなみに読み込み先指定の次が 0200 で後に続く処理が存在しないので数値による演出の調整はできないですね

画像の変更方法は既に説明しているので、新たな画像の導入方法から説明します
まずはポケモン画像等と同じように導入したい画像をGBAGC等を使って空いた場所に入れます
画像導入前
上の欄に画像を入れたい場所、下の欄にパレットを入れたい場所を入力します
FFFF~…が並んでいる空きでLZ77チェックを入れると真っ白な画像?が出てくると思います
次にImportを押して導入したい画像を選択します
この画像はこれくらいのデータサイズですけど良いですか?的なのと、このパレットはこれくらいのデータサイズですけど良いですか?的なことを聞かれるので問題無ければはいを押します
画像導入後
無事に書き込まれて表示されたらSaveで保存します
なおこの画像は本家SVのモーモーミルクを雑に描いたものです。例として出すだけだし雑でも良いよね…
アイテム画像にはサイズ的に使えないのでミルクのみ専用じみたものになってます。技アニメ関係ないですが念のため

画像の準備ができたら次は技アニメ画像IDを付けます
いくら画像があってもIDが無ければ技アニメで使用する画像として指定できません
技アニメ画像IDは未使用(没)の枠が結構あるので、そこを変更する形で設定します
変にこだわってどんな技アニメにも新規画像を入れるような方でもない限り未使用枠には余裕があります(資料Wikiの画像アドレスページ参照)
使わなさそうな没画像のID枠を使い、導入した画像を使用できるように設定します

技アニメ画像IDの設定はロム内の
370C38 ~ 37153F が画像の設定テーブル
371540 ~ 371E47 がパレットの設定テーブル
なので、この中にある変更したいID枠を探します

画像テーブルの見方は一番最初(370C38)にある 2025C008 0002 1027 で例えると
2025C008 が使用する画像の位置、0002 が画像サイズ?の設定、1027 が画像IDです

パレットテーブルの見方は一番最初(371540)にある B428C008 1027 0000 で例えると
B428C008 が使用するパレットの位置、1027 が画像ID、0000 は空きなのか見やすくする為なのか分かりませんが例外なく全て0000なので変更しない方が良いです
これらの設定がテーブル内でID順にずらーっと並んでいます
今回は未使用の画像ID枠2718に導入した画像を入れてみます

画像ID2718の画像設定は 370C78 、パレット設定は 371580 にあります
画像設定の中身は 502BC008 2000 1827 です
パレット設定の中身は 702BC008 1827 0000 です
この2つを変えるとこうなります
(画像を置いた場所)08 2000 1827
(パレットを置いた場所)08 1827 0000
上に載せていた画像では 900000 に画像、900500 にパレットを置いたので
画像が 00009008 2000 1827 でパレットが 00059008 1827 0000 になります


これで完了…ではなく、画像設定にもう1つ注意する点があります
(画像が置いてある場所)08 2000 1827 …の 2000 部分です
ここは画像サイズの指定?みたいな数値で、ここを間違えると他の設定が正しくても画像が上手く表示されません
ではどうやって正しい数値にするのかというと、変更する前の元の画像IDを見ると良いです
今回の場合はミルクのみの画像ID2773ですね
画像設定テーブル内にある画像ID2773の設定を見てみます。テーブル内は画像IDが綺麗に並んでいるので検索せず目視でも見つけやすいです
検索する場合は元の画像の位置を調べて、その位置をリトルエンディアンで検索すれば見つかります
資料WIkiの画像アドレスページを参照…ってもう分かりますよね
画像2773表示例
今回は C27EC0 にあるので C07EC208 で検索です
370F50 ~ 370F57 が画像ID2773の設定です
C07EC208 0002 7327 と書かれています。真ん中の数値は 0002 ですね
恐らく 0002 が32×32サイズの画像であることを示す設定なんだと思います(推測なので本気で受け止めないでください)
画像ID2718は 2000 なのでここを変更します
上で例に挙げたものだと 00009008 0002 1827 といった感じに変更です
これでやっと画像IDの設定が完了しました

あとは実際に設定して見てみるだけです。設定するとこんな感じです
00 1827 00 DB27 00 2F27
0A01
02 (処理を貼り付けた場所)08 0200
0428
…(省略)…
0B01
0E CE961B08
05
08

02で読み込む処理
1827 1827 880B3708 E4111F08 00000000 F0A83A08 8D5D0A08

今回02で読み込む処理の位置は 3AA8F8 にある数値です。コピーして空いた場所に貼って画像ID2718を表示するよう変更しています。00 7327 を 00 1827 に変更するのも忘れずに
早速使ってみましょう
自作画像導入1 自作画像導入2
ちゃんと導入した新しいミルクを出して飲んでくれました
(※HP満タンだと技アニメが出ないので技効果を変えてあります)
実際に見てみた上で画像を調整したいと感じることも多々あると思いますので、画像を入れる空き容量は導入する画像よりも少し大きい程度の余裕をもっておきましょう
空きに余裕があれば調整前より調整後の容量が大きくなっても、調整前の画像に調整後の画像を上書きするだけで変更できます
もし調整後の画像が調整前より大きくなって空きも無くて他の情報に干渉してしまう場合、導入する位置を変更して読み込み先の設定も変えなくてはいけなくなります。単純に手間です

上手く表示されなかった場合は…

動きは正常だが黒くて変にうごめく謎の物体が出てくる→指定された画像が読み込めていません。読み込み先の確認や画像指定等の画像が関係する設定を確認してください。または画像IDの画像指定先の隣にあるサイズ設定らしき数値が間違っている可能性があります
散々サイズ合わせろと書いたのに導入した画像のサイズ自体が間違っていたとか無いですよね…?
画面全体が変な色に染まってフリーズする→画像の読み込みID指定(00 xxxx のxxxx部分)がありえない数値になっていませんか?特に画像の読み込みを追加しようとして 00 FFFF のまま他の作業したら忘れて放置とかやりがちです。私が(
思ってたのと違う画像が出てくる、違う画像がおかしい状態で出てくる→新しく画像を導入したのに画像IDの設定等を忘れていませんか? 変更対象の02処理の指定先(02 xxxxxx08 のxxxxxx部分)を変更しましたか?指定先24バイト処理の最初にあるID指定2つを変更しましたか?
思ってたのと色合いが違う→PCの画像表示で見るのと実際のエミュレータで見るのとは色合いが微妙に変わりがちなので、実際にエミュレータで見た色の方を基準に調整すると良いかもしれません
思ってたのと色合いが明らかにおかしい→パレットの設定が上手くいっていません。対象画像IDの使用パレット指定先を確認してください
変更した技アニメの再生部分になった瞬間リセットされる→変更した各処理の読み込み先がありえない数値になっていませんか?特に xxxxxx08 の 08 部分で00とか07とか09等の入力間違いだったり、後で入力しようとして忘れた状態の FFFFFF08 だったりしませんか?

そもそも画像を上手く作れません→まぁ…その…作る回数こなすしかないかな…


画像変更について分かってきた方向けに、応用みたいなやり方も書いておきます
02処理の中身についてです
02処理で読み込むのは最初が画像の指定で次がパレットの指定を画像IDで行う
そして基本は同じ数値を入れることになる、というのは上に書いていましたが…
画像の指定とパレットの指定を別々のIDにして、同じ画像でも色を変えることができます
この方法でたいあたりの画像ID2797の色を変えてみます
たいあたりの画像を表示する02処理の中はこんな感じでしたね
9727 9727 880B3708 E4111F08 00000000 3CF13A08 21B80B08
最初の 9727 はそのままにして、次の 9727 を変えます
GBAGCでロムを開いてたいあたり画像の位置を入れたら、あとはどんな色になるか気になる技アニメ画像のパレット位置を入れてどんな色になるか試します
今回は画像ID27F1のさわぐの音符パレット(位置 C27ABC)を組み合わせてみたら良い感じの赤色になったので、これを使います
画像2797のパレット27F1
設定します
まずは(たいあたりのデータをコピーして空いた場所に置いた)たいあたりデータのなるべく先頭に 00 F127 を入れます
00 F127 00 9727 …(省略)… 05 08 みたいな感じです
画像表示処理02の読み込み先は
9727 F127 880B3708 E4111F08 00000000 3CF13A08 21B80B08
です。読み込む画像IDはそのままに読み込むパレットIDは F127 にしています
画像はID2797を読み込んで、パレットはID27F1を読み込むよう設定している状態です
これで表示してみると
画像2797パレット27F1味方 画像2797パレット27F1相手
このように赤いエフェクトになりました
画像はデフォルトの大きさだと分かりにくいので、02処理内の大きさ設定で大きく設定しています
表示する画像だけでなくパレットに使う画像も00~で読み込んでおくのが重要です
これは一時的にパレットを借りているような状態です
表示する画像の色が変わりますが、この処理で画像IDで本来指定されているパレットの色が変わることはありません。9727 9727 を指定すれば通常の色になります

このやり方の利点は既存画像の色を変える為だけに画像IDを新しく設定する必要が無いことです
欠点は画像の色変えに丁度いいパレットを見つけるのが場合によっては難しいことです
そもそも別の画像に使用されているパレットを使う訳なので、別の画像のパレット情報(配色)がたまたま使おうとしている画像と噛み合っているのを祈るしかないんですよね
今回はシンプルでパレット情報も素直な画像2797だから上手くできていますが、みずでっぽう等で使われる画像27ABはパレット情報が独特なのでピッタリ合う他の既存パレットは少ないです
自作した画像のパレット情報を工夫して、既存画像の色変えにも使えるようにするなんてこともできます。自作なので画像もパレット情報も変更し放題です
例えば私が配布した技アニメの中には既存技アニメに使われている爆発(ID27D6)の画像に合わせてパレットを調整した自作画像がいくつかあります。てっていこうせんとかソーラーブレードとか
あくまでも応用方法なので02処理の設定や画像の扱いに慣れてきたら挑戦してみてください



画像変更に関する解説は以上です
これらを覚えておけば画像の変更やパレットによる色変更もできる…と思いたいです
基本も02処理も03処理もある程度理解して画像変更もできるようになったら、いよいよ自在に技アニメが作れるようになるのではないでしょうか
あんな技やこんな技もオリジナルな技だって良い感じの雰囲気で作れちゃいますね