技アニメの解説/ルーチン設定0E編

基本編を見た方を対象にして書いています
まだ基本編を読んでいない方はまず基本編をお読みください
あとできれば02処理と03処理について軽くでも知っていると理解しやすいです

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

ルーチン設定0E編 ほのおのうずの中身を見てみよう

知らなくても自作は可能なものの、知っているとかなり便利なのが0E処理です
突然ですがタイトル通り ほのおのうず(位置 1AC7F2~) の中身を見てみましょう

00 2D27
19 8F00 3F
03 01840908 0505 0100 0000 0200 2F00 0100
0E 1BC81A08
0E 1BC81A08
0E 1BC81A08
05
08

ほのおのうずは炎の画像(ID272D)がたくさん出てくる演出ですが、あれだけたくさん出しているのに処理だけ見ると短いですね
それどころか画像を表示する02処理すら見当たりません
03処理も相手を動かすだけなので画像は関係ない処理内容です
ではあの炎の動きは一体どこでやっているのかというと、0E処理です
まぁ見るからに怪しいですよね

ということで技アニメの処理の中には時々 0E xxxxxx08 と書かれたものがあります
これが今回説明するルーチン設定です
ルーチンとは
プログラミング言語では、ある目的を持つ処理の集まりのことを指す。
(↑適当に検索して出てきた説明の流用)
この言葉の通り、0E処理は特定の決まった処理を呼び出しています
今回の場合は 1AC81B にある処理を呼び出しているようです
ではこの 1AC81B の中を見てみましょう

02 7CE93A08 8207 0000 1C00 1002 1E00 0D00 3200 0100
0402
02 7CE93A08 8207 0000 2000 E001 1400 1000 D2FF 0100
0402
02 7CE93A08 8207 0000 2100 4002 1400 0800 2A00 0100
0402
02 7CE93A08 8207 0000 1F00 9001 1900 0B00 D6FF 0100
0402
02 7CE93A08 8207 0000 1C00 0002 1900 1000 2E00 0100
0402
02 7CE93A08 8207 0000 2100 D001 1E00 0F00 CEFF 0100
0402
0F

02処理が出てきました。これが炎の画像272Dを表示しています
0E処理で読み込む場所は処理の最後を 08 ではなく 0F で終了しています
0F を読み込んだ後は 0E~08 の後に続いている処理を読みます。ほのおのうずでは3つめの0E処理の後に 05 08 で終了しています
0F ではなく 08 で終了してしまうと、08を読み込んだ時点で終了してしまいます。不具合の原因になるのでやらないようにしましょう

何故炎の画像を表示する02処理がルーチン設定の中にあるのかというと、容量の節約になるのと管理も楽だからだと思われます
0E処理を繰り返すと、0E処理で読み込む処理を手軽に何度も繰り返せます
何度も繰り返す必要がある動き、または汎用性が高くて様々な技アニメで使う動きを0E処理にすることによって技アニメの中身が余計に長くなるのを防いでいます
例に挙げたほのおのうずはたくさん炎の画像が出てきます。もしこの演出を0E処理無しでやるとしたらこうなります

00 2D27
19 8F00 3F
03 01840908 0505 0100 0000 0200 2F00 0100
02 7CE93A08 8207 0000 1C00 1002 1E00 0D00 3200 0100
0402
02 7CE93A08 8207 0000 2000 E001 1400 1000 D2FF 0100
0402
02 7CE93A08 8207 0000 2100 4002 1400 0800 2A00 0100
0402
02 7CE93A08 8207 0000 1F00 9001 1900 0B00 D6FF 0100
0402
02 7CE93A08 8207 0000 1C00 0002 1900 1000 2E00 0100
0402
02 7CE93A08 8207 0000 2100 D001 1E00 0F00 CEFF 0100
0402
02 7CE93A08 8207 0000 1C00 1002 1E00 0D00 3200 0100
0402
02 7CE93A08 8207 0000 2000 E001 1400 1000 D2FF 0100
0402
02 7CE93A08 8207 0000 2100 4002 1400 0800 2A00 0100
0402
02 7CE93A08 8207 0000 1F00 9001 1900 0B00 D6FF 0100
0402
02 7CE93A08 8207 0000 1C00 0002 1900 1000 2E00 0100
0402
02 7CE93A08 8207 0000 2100 D001 1E00 0F00 CEFF 0100
0402
02 7CE93A08 8207 0000 1C00 1002 1E00 0D00 3200 0100
0402
02 7CE93A08 8207 0000 2000 E001 1400 1000 D2FF 0100
0402
02 7CE93A08 8207 0000 2100 4002 1400 0800 2A00 0100
0402
02 7CE93A08 8207 0000 1F00 9001 1900 0B00 D6FF 0100
0402
02 7CE93A08 8207 0000 1C00 0002 1900 1000 2E00 0100
0402
02 7CE93A08 8207 0000 2100 D001 1E00 0F00 CEFF 0100
0402
05
08

驚くほど長いですね
元々0E処理なので当然ですが同じ処理が延々と並んでいるのも気が遠くなりそうです
しかもこの状態でもし最初と他2つにある 02 7CE93A08 8207 0000 1C00 1002 1E00 0D00 3200 0100 の一部の数値を変更したくなったとしたら?
合計3つ同じ処理の数値を見つけて変更する手間が発生します
02処理それぞれ全て違う数値にして全ての炎の動きをバラバラにしたい!とこだわる方なら全ての02処理を並べて数値を調整するのかもしれませんが、そんな演出の為にこれだけ容量を取られるのは私は嫌ですね…
これが0E処理のルーチン設定であれば、ルーチン設定で読み込む処理の一部を1つ変更するだけで済みます

とはいえどれもこれも0E処理を使えば良いという訳ではないです
繰り返したいけど短い処理であれば0E処理を入れないで作った方が短く済む可能性もある上に、他の処理を交えて表示する場合は表示タイミング等の調整がしやすいです
また、どうあがいてもルーチン設定である以上は同じ動きになってしまうので画像の動きをバラバラにしたい時には向いていません
長い処理を繰り返し使いたい時に設定するのが良いです

0E処理の説明だけならここまでになります
これだけだとなんか物足りないので、使用例として他の0E処理を3つほど見ておきましょう
どくばり(位置 1AB9E9~) の中身は以下の通りです

00 B127 00 9727 00 A627
0A01 2801 0C0C08
19 9900 C0
02 38E83A08 8205 1400 0000 F8FF 0000 1400
05
02 4CF13A08 0304 0000 0000 0100 0200
03 25850908 0205 0100 0200 0000 0500 0100
19 9F00 3F
05
0E 17971B08
05
0B 01 0D
08

0E 17971B08 は紫の泡のようなものが出てくる毒っぽい演出です
この 0E 17971B08 でロム内を検索すると6件ほど当たると思います。どくばりだけではなく他の技アニメにも使われているのが分かります
つまり汎用的な毒の演出としていくつかの毒技に使われているということですね
読み込んでいる 1B9717 の中身は以下の通りです

02 FCDF3A08 8203 0A00 0A00 0000
19 8D00 3F
0406
02 FCDF3A08 8203 1400 ECFF 0000
19 8D00 3F
0406
02 FCDF3A08 8203 ECFF 0F00 0000
19 8D00 3F
0406
02 FCDF3A08 8203 0000 0000 0000
19 8D00 3F
0406
02 FCDF3A08 8203 ECFF ECFF 0000
19 8D00 3F
0406
02 FCDF3A08 8203 1000 F8FF 0000
19 8D00 3F
0F

もし0E処理が無かったらこの処理群を6個も入れることになる…と考えると、容量の節約面で貢献しているのが分かるでしょうか
最後の0Fを含めて113バイトくらいなので…×6で678バイト、0E処理でも1個分は作らないといけないので-113バイトして約565バイトの削減ってことになる計算…で良いんですよね?(算数よわよわ人間)
勿論0E処理を使って容量の節約になっているのはこれだけではないので、他の技アニメにも使われていることを考えたらかなりのデータ量を0E処理で節約できているのでないかと。推測ですけども

今度は おだてる(位置 1B6AA5~) の中身…は長いので一部を抜粋して見てみます

00 F327 00 0028
…(省略)…
03 C5E30D08 0502 DE00 C0FF
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0E 8E6B1B08
0405
…(省略)…
03 61FE0D08 0200
08

物凄い0E処理の数です。19個あります
こんなに使うとは一体どんな処理なのでしょうか。1B6B8E の中を見てみましょう

02 1C523C08 2801 0000
02 1C523C08 2801 0100
0F

なんとこれだけです
0E処理の数に対して中身が貧弱すぎますね…
この02処理はおだてるを使用した時に左右から出てくる紙吹雪を表示するものです
0000 が左から出る紙吹雪で 0100 が右から出る紙吹雪です
紙吹雪が飛び出す角度はランダムです。ランダムであればルーチン設定で繰り返しても紙吹雪が飛ぶ角度がバラつくので同じ処理を繰り返すことによる演出の違和感が無く、ルーチン設定向けとも言えます
ただ私、思ったんです。これは0E処理を異様に並べるんじゃなくて0E処理の中にある02処理を左右の紙吹雪1回分増やして0E処理の並びを減らした方が良かったんじゃないかって…
制作中に紙吹雪の量を細かく調整する為なのか、それとも各技アニメのデータを隙間なく敷き詰める為に0Eや02の数調整などしていられなかったのか…真相は開発も分からなさそう
0E処理の数と読み込む処理のバランスは程良く取りましょう

最後に サイコキネシス(位置 1B1428~) の中身です

0A03
0E 77991B08
0C0808
03 25850908 0205 0000 0100 0000 0A00 0100
03 9DAE0B08 0206 0200 0000 0200 0000 0800 FF02
05
1C B100 3F 0A03
03 01840908 0205 0100 0500 0000 0F00 0100
03 B9920908 0505 FAFF FAFF 0F00 0100 0100
05
0B03 0D
0401
0E 83991B08
08

最初と最後に内容が異なる0E処理があります
この 1B9977 と 1B9983 の中はどうなっているのかというと

1B9977 の中
1403 16
03 D9F60D08 0500
17
0F

1B9983 の中
15 16
10 07 FFFF
17
0F

様々な02処理編で触れた背景処理14~ が出てきました
背景の表示と背景の解除を0E~で処理しているんですね
単純な動かない背景であれば14~17を入れるだけで良いのですが、エスパー技で使われているような動く背景は14~以外の処理も入れないと背景が動かないので、それらをまとめて0Eルーチン設定に入れることで楽に動く背景を呼び出しています
背景の解除に入っている10~の処理は背景の動きを止めるというか元に戻す?もので、これが無いと背景がバグります
この設定のおかげで自作技アニメでエスパー系の背景を出したい!って時は背景表示を開始したい時に 0E 77991B08 を入れて、解除したい時に 0E 83991B08 を入れてしまえば簡単にエスパー背景が使えます
エスパー背景以外の動く背景や、使用ポケモンが味方側か相手側かで変わる背景も0E処理で呼び出しているものがあります


0E処理の解説は以上です
ついでにサイコキネシスの中にあった 1C~処理についてちょっと触れておきます

「1C B100 3F 0A03」
数ある効果音の設定の中の1つです
通常は19~で効果音を再生しますが、1C~を使うと効果音を一定の回数繰り返し再生できます
あと効果音を繰り返し鳴らす間隔も設定できます
例では 0A が繰り返し鳴らす間隔時間、03 が鳴らす効果音の回数です
最後の 0A 03 以外の数値は19処理と同じ設定内容です
何回も同じ効果音を鳴らしたい時は19処理を回数分並べるより、1C処理を1つ設定しておくと簡潔ですし容量を節約できます
ただ鳴らす間隔は全て同じになってしまうので、同じ音でも鳴らしたいタイミングが等間隔ではない場合1C処理は向いていません
敢えて繰り返し鳴らす間隔を短くして聞き慣れない効果音を生み出すこともできる…かも?



これで本当にこのページは以上です
繰り返し同じ処理をしたい機会は意外と出てくるので、覚えておくと便利です