Wikiマークアップ

目次

FE定番の増援イベントの作り方について説明します。

とりあえず序章に毎ターン増援を出したいと思います。



ユニット設定を増やす

step_a01

マップに登場させたいキャラは、ユニット設定に書かないといけません。
増援も同様に定義する必要があります。
i.imgur.com_xzcplvw.jpg

ですが、序章のユニット設定は枠が詰まっていて空きがありません。
よって、ここにデータを入れることはできません。
i.imgur.com_ts7fkmz.jpg



なお、最後の空白は、データはここで終わりですよという区切りマークです。
ここが空いているからと言って、データを入れてしまうと、区切りがなくなってしまいおかしなことになります。
部屋の壁が邪魔だからと言って穴をあけると、隣の部屋につながってしまって、大変なことになるのと同じです。
そういうことはやってはいけません。


step_a02

ROM末尾に空き領域を追加して、ユニットをおけるスペースを確保します。

バイナリエディタでROMを開き、末尾に移動してください。
スクロールバーを下まで下げるか、 Ctrl + Endで一番下に下げます。
i.imgur.com_9gcvcjp.jpg

step_a03

00をひたすらおすなり、コピペするなりして、
空き領域を確保してください。

今回は他のものも置きたいので、かなり多めに確保しますが、
きっちりに確保していくと、あとあとにやってやっぱり増やし痛いという時に泣くことになるので、ゆとりを持って増やすことをおすすめします。
とりあえず必要な量の2倍ぐらいを確保することをおすすめします。2倍といっても数十バイトから数百バイトの世界ですので、それが500バイトが倍の1000バイトになったからといって大した影響はないです。(空き領域は最大16MB(16,000,000バイト)利用できます。)


step_a04

とりあえず、0x400バイト(1024バイト)ほど確保しました。
保存してバイナリエディタを終了させます。
i.imgur.com_3dsymj1.jpg

step_a05

ProjectFEGBAのユニット設置に入ります。
i.imgur.com_lv0prlb.jpg

step_a06

増やした領域を先頭アドレスの項目に入れて、
数を読込ユニット数に入れて、検索ボタンを押します。
今回は 0x1000000から置いて行きたいので、先頭アドレスには 1000000 と入れます。
敵キャラの増援を2体ずつ出したいので、3 と入れます。 (2体+終端コードで合計3です)
i.imgur.com_wodj3tv.jpg

step_a07

追加した領域のデータが表示されました。
i.imgur.com_ajv2uq3.jpg


配置する場所は忘れないように、メモしておきましょう。
敵1体20バイト必要なので、20*3=60バイト(0x3Cバイト)利用します。

名前アドレス
増援配置0x1000000 - 0x100003C

step_a08

とりあえず、座標0,3 と 座標1,3に山賊を出したいと思います。
FEの世界では(PCの世界では)、左上を原点として、0からスタートします。

完成予想図

step_a09

上の00を選択して山賊のデータを作ります。
i.imgur.com_mjchwet.jpg

注意:(入力)という紫のボタンがあるところは、その左側の値を入れ終わったら、紫の入力ボタンを押して値を生成しないといけません。

入力終わったら、書込ボタンを押してください。

step_a10

真ん中の00を選択して、同様に山賊のデータを作ります。
データは基本同じですが、座標が 座標0,3ではなく座標1,3になっています。
同じように、データを作ったら書込ボタンを押してください。
i.imgur.com_qcqgrv1.jpg

step_a11

入力終わり、書込ボタンを押した後で、
検索ボタンを押すと画面が再描画され、データがちゃんと入っていることがわかります。
i.imgur.com_r0yv0l9.jpg

step_a12

ここでいったん保存してゲームを実行してみます。


もちろん、まだ何も変わっていません。
敵キャラを追加しましたがそれを呼ぶ命令を追加していないためです。
次は増援をする命令を追加していきましょう。

イベント条件を増やす

step_b01

増援イベントを作るには、イベント条件で増援イベントを呼び出してもらう必要があります。
イベント条件を選択してください。
i.imgur.com_nmnc4po.jpg

step_b02

変更したいステージは、序章ですから、
「序章 ルネス陥落」を選択します。

そして、イベント種類のコンボボックスの
「ターン条件」を選択します。(最初からディフォルトでターン条件が選択されています。)
i.imgur.com_3ozrgwr.jpg

step_b03

ここでまたもや困ったことがあります。
ターンイベントに増援を追加する空きがありません。


既存に4つイベントが入っています。
これは序章でターン経過で起きるイベントが4つあるということを意味しています。
これらを消して、再利用すれば、できなくもないのですが、序章で発生するイベントがなくなってしまいます。
ここでは、新規に領域を割り当ててみたいと思います。

コップがいっぱいでこれ以上入れるとこぼれてしまうので、
もっと大きな容器に移し替えて作業するようなものです。

(既存のイベント条件などの適当な領域を再利用するのは危険です。たいていのフリーズはイベント条件で変な値が立ってしまったことによっておきます。できるだけイベントの再利用はさけて、新規に領域を割り振ることをおすすめします。1つたったの12バイトです。そのために危険を犯すことはないでしょう?)

step_b04

step_a05で大目に確保したので、その領域を使いましょう。
とりあえず、今回はイベント条件を0x1000100から割り当てていきましょう。
i.imgur.com_42stzwh.jpg

イベントポインタを設定する前に、元のアドレスをメモしておきましよう。

名前アドレス
増援配置0x1000000 - 0x100003C
元のイベント条件0xA5A6B0から4つ 1つ12バイト


1つ12バイトであるというは、読込12バイトというところに書いてありますね。

イベント条件はあとあと増やしたくなるもので、多めに10個ぐらい確保しておきます。
こちらも同様に、終端が一つ必要なので、12バイト * (10個+1) = 132バイト(0x84バイト)確保します。


割当を決めたら、メモに追加しておきます。

名前アドレス
増援配置0x1000000 - 0x100003C
イベント条件0x1000100 - 0x1000184
元のイベント条件0xA5A6B0から4つ 1つ12バイト

step_b04

それではイベント条件を0x1000100から割り当ていきます。
割当は、0x1000100ですが、ポインタですので、+8000000して、0x9000100 がイベントポインタに書くべき値になります。

イベントポインタを 9000100 に変更して、一時書込で保存してください。
i.imgur.com_42stzwh.jpg ~

step_b05

イベントポインタを書き換えたら、次に、
00 00 00 00 まで検索するのチェックを外して、検索ボタンを押してください。
このポインタ先に書いてあるイベントが表示されます。
i.imgur.com_s0mwlyl.jpg


もし、このようなエラーがでたら無視してください。
ProjectFEGBAは、よくこのエラーを吐きますが、ガン無視してください。
i.imgur.com_hwjugyv.jpg

step_b06

新規に領域を割り当てましたのでイベント命令は真っ新になりました。
これで増援をかけるわけですが、
その前に一つやらないといけないことがあります。


この状態では、元のイベントが消えてしまっています。
新しいイベントポインタ領域を割り当てたので、元の領域は見られないためです。
元のイベントをすべて消していいならば、この状態でもいいのですが、元の状態を生かしつつ追加したい場合、元のイベントをコピーしてこないといけません。

メモを見ると、元のイベントは、0xA5A6B0だったと書いてありますね。
0xA5A6B0から、4つ*12バイト=48バイトをコピーして0x1000070に張り付ける必要があります。

名前アドレス
増援配置0x1000000 - 0x100003C
イベント条件0x1000100 - 0x1000184
元のイベント条件0xA5A6B0から4つ 1つ12バイト

step_b07

一度保存してから、バイナリエディタでROMを開いてください。
0xA5A6B0に移動し、
0xA5A6B0 から、4つ*12バイト=48バイトをコピーして0x1000100に張り付けてください。
i.imgur.com_1nd9phn.jpg

0x1000100にコピーするとこのようになります。
位置がずれていないか等をよく確認してください。
i.imgur.com_nqi8l81.jpg


コピペが済んだら、データを保存して、ProjectFEGBAへ再度戻ります。

step_b08

もう一度、00 00 00 00 まで検索するのチェックを外して、検索ボタンを押してください。
そして、 01000100 とかをクリックしてみてください。
もともとあったイベントが表示されます。
i.imgur.com_r6p7jlw.jpg



末尾に空き領域が確保できたので、この領域の末尾に増援イベントを設定します。

step_b09

01000130 を選択してください。
i.imgur.com_vrgbftc.jpg

step_b10

イベントの種類をターン条件にしてください。
i.imgur.com_omkixhx.jpg

step_b11

開始2ターンで終了4ターンとします。。
イベントは 9000200 としましょう。

このように入力してください。
入力が終わったら、ポインタ先内容一時書込ボタンを押してください。
i.imgur.com_jfmnb4y.jpg

step_b12

イベント命令を 9000200 におきました。これは、ポインタ化されているので、実際のアドレスは -0x8000000 した 0x1000200になります。
0x9000200 - 0x8000000 = 0x1000200

イベント命令の場所を新規に決めたので、メモに書いておきます。

名前アドレス
増援配置0x1000000 - 0x100003C
イベント条件0x1000100 - 0x1000184
元のイベント条件0xA5A6B0から4つ 1つ12バイト
イベント命令0x1000200

これで、ターン2からターン4の間にイベントを1000200に書いてあることを実行します。
とはいっても、1000200にはまだ何も書いていないので、これから増援を実行するイベントを書きます。

step_b13

一度イベント条件を抜けて、イベント命令を開きます。
i.imgur.com_y40oqfz.jpg

step_b14

イベント命令で 0x1000200 の領域にイベントを作ります。
先頭アドレスに 1000200 と入れて、検索ボタンを押してください。
i.imgur.com_tvvadyc.jpg


なにやらエラーが出ても無視してください。
i.imgur.com_hwjugyv.jpg

step_b15

何も入っていない空地なので 00000000不明 がたくさん出てきました。
不明を置いていても仕方ないので、全削除ボタンを押してクリアします。
i.imgur.com_baqzlgt.jpg

===== step_b16 =====
ここから増援イベントを作成します。
i.imgur.com_p47qxte.jpg

===== step_b17 =====
増援で使う命令は、これです。
<code>
0050200XXXXXXXX400A0000AC03A608
[XXXXXXXX]ユニット情報を読込移動 主に増援 カメラ動作有り???
</code>

XXXXXXXXのところに登場させたい敵のユニット指定IDの先頭のポインタをリトルエンディアンで書きます。

メモを見てください。
増援配置のスタートは0x1000000でした。

名前アドレス
増援配置0x1000000 - 0x100003C
イベント条件0x1000100 - 0x1000184
元のイベント条件0xA5A6B0から4つ 1つ12バイト
イベント命令0x1000200


ここでは、0x1000000ではなく、ポインタのリトルエンディアン表記ですので、 00000009 と書きます。

なんで?と思った方のために 0x1000000 を 0x00000009 へ変換する過程を説明します。

まず、0x1000000は、アドレスですので、ポインタにするために + 0x08000000 します。
0x1000000 + 0x08000000 = 0x09000000 になります。

次に、
0x09000000をリトルエンディアンに変換するには、後ろから2つずつ書いていきます。

09000000
↓
09 00 00 00
↓
00
↓
00 00
↓
00 00 00
↓
00 00 00 09
↓
00000009


よって、0x1000000 の、ポインタのリトルエンディアン表記は 0x00000009 になります。


40050200XXXXXXXX400A0000AC03A608[XXXXXXXX]ユニット情報を読込移動 主に増援 カメラ動作有り???
の、 XXXXXXXX には、 00000009を書きます。


つまり、こうなります。
4005020000000009400A0000AC03A608

わかりづらいですが、ここはとても重要なところです。
ポインタにするには、 +0x08000000 しなくてはいけない。
リトルエンディアンにするには、うしろから2つずつ書いていけなくてはいけない。
この2つのルールだけは覚える必要があります。


===== step_b18 =====
イベントコードに 4005020000000009400A0000AC03A608 と入力して、追加ボタンを押してください。
i.imgur.com_ipxvaea.jpg

===== step_b19 =====
命令が追加されました。

<code>
現在入っている命令
4005020000000009400A0000AC03A608
[09000000]ユニット情報を読込移動 主に増援 カメラ動作有り???
</code>

i.imgur.com_3fnp603.jpg

余談ですが、FE8で利用するイベント命令は、 ProjectFEGBAの メモの中に書いてあります。
実はこれ以外にもイベントがあることがわかっています。
詳しいイベントはwiki等を参考にしてください。

step_b20

敵を表示したあとは、20300000移動設定移動開始命令を呼ぶのが慣習になっているので、
移動設定移動開始命令を追加してください。

イベントコードに 20300000 と、入れて、追加を押してください。
i.imgur.com_wpkqdh4.jpg

===== step_b21 =====

20300000
移動設定移動開始命令?が追加され、以下のようになりました。

現在入っている命令
400502004000DF09400A0000AC03A608''[09DF0040]ユニット情報を読込移動 主に増援 カメラ動作有り???
20300000''移動設定移動開始命令?

i.imgur.com_1hur3xz.jpg

移動設定移動開始命令とは、ユニット設定で移動後座標で定義した座標へさせる命令です。
移動後座標以外にも、イベント命令で移動命令を出した命令の実行にもこれが必要です。

step_b22

最後に、命令終了を意味する20010000リターンコードを入れます。
イベントコードに 20010000 と、入れて、追加を押してください。
i.imgur.com_2vbqouq.jpg


===== step_b23 =====
20010000
リターンが追加され、以下のようになりました。

現在入っている命令
400502004000DF09400A0000AC03A608''[09DF0040]ユニット情報を読込移動 主に増援 カメラ動作有り???
20300000''移動設定移動開始命令?
20010000''リターン

i.imgur.com_csjtgfi.jpg

リターンコードとは、私の指示はこれで終了だから、あなたは自分の仕事に戻りなさいという命令です。

step_b24

完成したので、一時書込で保存します。
i.imgur.com_0qaykge.jpg

step_b25

一時書込で保存したあとに、検索ボタンを押すと、再読み込みがかかり綺麗な表示になります。

ちゃんと追加した3つの命令が正しく追加されている確認してください。

はいっていないといけない命令
400502004000DF09400A0000AC03A608''[09DF0040]ユニット情報を読込移動 主に増援 カメラ動作有り???
20300000''移動設定移動開始命令?
20010000''リターン

i.imgur.com_wxhdl1w.jpg

問題ないようであれば、イベント命令を閉じましょう。

step_b26

これで長い設定がようやく終わりました。
さっそくゲームを動作させて、みましょう。

2ターン目~4ターン目に山賊の増援が現れますか?