FE定番の増援イベントの作り方について説明します。\\ \\ とりあえず序章に毎ターン増援を出したいと思います。\\ {{ https://i.imgur.com/62NZEwe.png }} \\ \\ \\ ====== ユニット設定を増やす ====== ===== step_a01 ===== マップに登場させたいキャラは、ユニット設定に書かないといけません。\\ 増援も同様に定義する必要があります。\\ {{ https://i.imgur.com/XzcplVW.jpg }} \\ \\ ですが、序章のユニット設定は枠が詰まっていて空きがありません。\\ よって、ここにデータを入れることはできません。\\ {{ https://i.imgur.com/TS7FKMz.jpg }} \\ \\ \\ なお、最後の空白は、データはここで終わりですよという区切りマークです。\\ ここが空いているからと言って、データを入れてしまうと、区切りがなくなってしまいおかしなことになります。\\ 部屋の壁が邪魔だからと言って穴をあけると、隣の部屋につながってしまって、大変なことになるのと同じです。\\ そういうことはやってはいけません。\\ {{ https://i.imgur.com/zYeAPFQ.png }}\\ \\ ===== step_a02 ===== ROM末尾に空き領域を追加して、ユニットをおけるスペースを確保します。\\ \\ バイナリエディタでROMを開き、末尾に移動してください。\\ スクロールバーを下まで下げるか、 Ctrl + Endで一番下に下げます。\\ {{ https://i.imgur.com/9GcVcjP.jpg }} \\ ===== step_a03 ===== 00をひたすらおすなり、コピペするなりして、\\ 空き領域を確保してください。\\ 今回は他のものも置きたいので、かなり多めに確保しますが、\\ きっちりに確保していくと、あとあとにやってやっぱり増やし痛いという時に泣くことになるので、ゆとりを持って増やすことをおすすめします。\\ とりあえず必要な量の2倍ぐらいを確保することをおすすめします。2倍といっても数十バイトから数百バイトの世界ですので、それが500バイトが倍の1000バイトになったからといって大した影響はないです。(空き領域は最大16MB(16,000,000バイト)利用できます。)\\ \\ \\ ===== step_a04 ===== とりあえず、0x400バイト(1024バイト)ほど確保しました。\\ 保存してバイナリエディタを終了させます。\\ {{ https://i.imgur.com/3DSyMJ1.jpg }} \\ ===== step_a05 ===== ProjectFEGBAのユニット設置に入ります。\\ {{ https://i.imgur.com/lV0pRLb.jpg }} \\ \\ ===== step_a06 ===== 増やした領域を先頭アドレスの項目に入れて、\\ 数を読込ユニット数に入れて、検索ボタンを押します。\\ 今回は 0x1000000から置いて行きたいので、先頭アドレスには 1000000 と入れます。\\ 敵キャラの増援を2体ずつ出したいので、3 と入れます。 (2体+終端コードで合計3です)\\ {{ https://i.imgur.com/wodj3tV.jpg }} \\ \\ ===== step_a07 ===== 追加した領域のデータが表示されました。\\ {{ https://i.imgur.com/Ajv2Uq3.jpg }} \\ \\ \\ 配置する場所は忘れないように、メモしておきましょう。\\ 敵1体20バイト必要なので、20*3=60バイト(0x3Cバイト)利用します。\\ |名前|アドレス| |増援配置|0x1000000 - 0x100003C| ===== step_a08 ===== とりあえず、座標0,3 と 座標1,3に山賊を出したいと思います。\\ FEの世界では(PCの世界では)、左上を原点として、0からスタートします。\\ \\ 完成予想図\\ {{ https://i.imgur.com/62NZEwe.png }} \\ ===== step_a09 ===== 上の00を選択して山賊のデータを作ります。\\ {{ https://i.imgur.com/mjChweT.jpg }} \\ 注意:(入力)という紫のボタンがあるところは、その左側の値を入れ終わったら、紫の入力ボタンを押して値を生成しないといけません。\\ \\ 入力終わったら、書込ボタンを押してください。\\ ===== step_a10 ===== 真ん中の00を選択して、同様に山賊のデータを作ります。\\ データは基本同じですが、座標が 座標0,3ではなく座標1,3になっています。\\ 同じように、データを作ったら書込ボタンを押してください。\\ {{ https://i.imgur.com/qcqgRv1.jpg }} ===== step_a11 ===== 入力終わり、書込ボタンを押した後で、\\ 検索ボタンを押すと画面が再描画され、データがちゃんと入っていることがわかります。\\ {{ https://i.imgur.com/R0yv0l9.jpg }} ===== step_a12 ===== ここでいったん保存してゲームを実行してみます。\\ {{ https://i.imgur.com/Pxi8AvA.png }} \\ \\ もちろん、まだ何も変わっていません。\\ 敵キャラを追加しましたがそれを呼ぶ命令を追加していないためです。\\ 次は増援をする命令を追加していきましょう。\\ ====== イベント条件を増やす ====== ===== step_b01 ===== 増援イベントを作るには、イベント条件で増援イベントを呼び出してもらう必要があります。\\ イベント条件を選択してください。\\ {{ https://i.imgur.com/Nmnc4po.jpg }} \\ ===== step_b02 ===== 変更したいステージは、序章ですから、\\ 「序章 ルネス陥落」を選択します。\\ \\ そして、イベント種類のコンボボックスの\\ 「ターン条件」を選択します。(最初からディフォルトでターン条件が選択されています。)\\ {{ https://i.imgur.com/3OZRgWR.jpg }} \\ ===== step_b03 ===== ここでまたもや困ったことがあります。\\ ターンイベントに増援を追加する空きがありません。\\ {{ https://i.imgur.com/1Krsj5r.png }} \\ 既存に4つイベントが入っています。 これは序章でターン経過で起きるイベントが4つあるということを意味しています。\\ これらを消して、再利用すれば、できなくもないのですが、序章で発生するイベントがなくなってしまいます。\\ ここでは、新規に領域を割り当ててみたいと思います。\\ \\ コップがいっぱいでこれ以上入れるとこぼれてしまうので、\\ もっと大きな容器に移し替えて作業するようなものです。\\ \\ (既存のイベント条件などの適当な領域を再利用するのは危険です。たいていのフリーズはイベント条件で変な値が立ってしまったことによっておきます。できるだけイベントの再利用はさけて、新規に領域を割り振ることをおすすめします。1つたったの12バイトです。そのために危険を犯すことはないでしょう?)\\ \\ ===== step_b04 ===== step_a05で大目に確保したので、その領域を使いましょう。\\ とりあえず、今回はイベント条件を0x1000100から割り当てていきましょう。\\ {{ https://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 に変更して、一時書込で保存してください。\\ {{ https://i.imgur.com/42sTZWH.jpg }} ~ ===== step_b05 ===== イベントポインタを書き換えたら、次に、\\ 00 00 00 00 まで検索するのチェックを外して、検索ボタンを押してください。\\ このポインタ先に書いてあるイベントが表示されます。\\ {{ https://i.imgur.com/S0mWlyL.jpg }} \\ \\ \\ もし、このようなエラーがでたら無視してください。\\ ProjectFEGBAは、よくこのエラーを吐きますが、ガン無視してください。\\ {{ https://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に張り付けてください。\\ {{ https://i.imgur.com/1ND9PHn.jpg }} \\ \\ 0x1000100にコピーするとこのようになります。\\ 位置がずれていないか等をよく確認してください。\\ {{ https://i.imgur.com/NQi8l81.jpg }} \\ \\ \\ コピペが済んだら、データを保存して、ProjectFEGBAへ再度戻ります。\\ ===== step_b08 ===== もう一度、00 00 00 00 まで検索するのチェックを外して、検索ボタンを押してください。\\ そして、 01000100 とかをクリックしてみてください。\\ もともとあったイベントが表示されます。\\ {{ https://i.imgur.com/R6p7JLW.jpg }} \\ \\ \\ \\ 末尾に空き領域が確保できたので、この領域の末尾に増援イベントを設定します。\\ ===== step_b09 ===== 01000130 を選択してください。\\ {{ https://i.imgur.com/vrGbftc.jpg }} \\ ===== step_b10 ===== イベントの種類をターン条件にしてください。\\ {{ https://i.imgur.com/omkIXHX.jpg }} \\ ===== step_b11 ===== 開始2ターンで終了4ターンとします。。\\ イベントは 9000200 としましょう。\\ \\ このように入力してください。\\ 入力が終わったら、ポインタ先内容一時書込ボタンを押してください。\\ {{ https://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 ===== 一度イベント条件を抜けて、イベント命令を開きます。\\ {{ https://i.imgur.com/Y40oQfz.jpg }} \\ ===== step_b14 ===== イベント命令で 0x1000200 の領域にイベントを作ります。\\ 先頭アドレスに 1000200 と入れて、検索ボタンを押してください。\\ {{ https://i.imgur.com/tvvaDYC.jpg }} \\ \\ \\ なにやらエラーが出ても無視してください。\\ {{ https://i.imgur.com/HWjUgYV.jpg }} \\ ===== step_b15 ===== 何も入っていない空地なので 00000000''不明 がたくさん出てきました。\\ 不明を置いていても仕方ないので、全削除ボタンを押してクリアします。\\ {{ https://i.imgur.com/bAqZLgT.jpg }} \\ ===== step_b16 ===== ここから増援イベントを作成します。\\ {{ https://i.imgur.com/p47QxTE.jpg }} \\ ===== step_b17 ===== 増援で使う命令は、これです。\\ 0050200XXXXXXXX400A0000AC03A608''[XXXXXXXX]ユニット情報を読込移動 主に増援 カメラ動作有り??? \\ 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 と入力して、追加ボタンを押してください。\\ {{ https://i.imgur.com/IpxvAeA.jpg }} \\ ===== step_b19 ===== 命令が追加されました。\\ 現在入っている命令 4005020000000009400A0000AC03A608''[09000000]ユニット情報を読込移動 主に増援 カメラ動作有り??? {{ https://i.imgur.com/3fnp603.jpg }} \\ 余談ですが、FE8で利用するイベント命令は、 ProjectFEGBAの メモの中に書いてあります。\\ 実はこれ以外にもイベントがあることがわかっています。\\ 詳しいイベントはwiki等を参考にしてください。\\ ===== step_b20 ===== 敵を表示したあとは、20300000''移動設定移動開始命令を呼ぶのが慣習になっているので、\\ 移動設定移動開始命令を追加してください。\\ \\ イベントコードに 20300000 と、入れて、追加を押してください。\\ {{ https://i.imgur.com/wPkqdH4.jpg }} \\ ===== step_b21 ===== 20300000''移動設定移動開始命令?が追加され、以下のようになりました。\\ \\ 現在入っている命令 400502004000DF09400A0000AC03A608''[09DF0040]ユニット情報を読込移動 主に増援 カメラ動作有り??? 20300000''移動設定移動開始命令? {{ https://i.imgur.com/1hUR3xz.jpg }} \\ 移動設定移動開始命令とは、ユニット設定で移動後座標で定義した座標へさせる命令です。\\ 移動後座標以外にも、イベント命令で移動命令を出した命令の実行にもこれが必要です。\\ ===== step_b22 ===== 最後に、命令終了を意味する20010000''リターンコードを入れます。\\ イベントコードに 20010000 と、入れて、追加を押してください。\\ {{ https://i.imgur.com/2vbqOuQ.jpg }} \\ ===== step_b23 ===== 20010000''リターンが追加され、以下のようになりました。\\ 現在入っている命令 400502004000DF09400A0000AC03A608''[09DF0040]ユニット情報を読込移動 主に増援 カメラ動作有り??? 20300000''移動設定移動開始命令? 20010000''リターン {{ https://i.imgur.com/cSJtGFI.jpg }} \\ リターンコードとは、私の指示はこれで終了だから、あなたは自分の仕事に戻りなさいという命令です。\\ ===== step_b24 ===== 完成したので、一時書込で保存します。\\ {{ https://i.imgur.com/0QAYkgE.jpg }} \\ ===== step_b25 ===== 一時書込で保存したあとに、検索ボタンを押すと、再読み込みがかかり綺麗な表示になります。\\ \\ ちゃんと追加した3つの命令が正しく追加されている確認してください。\\ はいっていないといけない命令 400502004000DF09400A0000AC03A608''[09DF0040]ユニット情報を読込移動 主に増援 カメラ動作有り??? 20300000''移動設定移動開始命令? 20010000''リターン {{ https://i.imgur.com/WXHDL1w.jpg }}\\ 問題ないようであれば、イベント命令を閉じましょう。\\ ===== step_b26 ===== これで長い設定がようやく終わりました。\\ さっそくゲームを動作させて、みましょう。\\ \\ 2ターン目~4ターン目に山賊の増援が現れますか?\\ {{ https://i.imgur.com/62NZEwe.png }} \\