最新の10件
ページ | 日付 |
---|---|
en:guid:febuildergba:work_support | 2023/06/08 20:25 |
guide:febuildergba:作品支援 | 2023/06/08 20:24 |
最新の10件
ページ | 日付 |
---|---|
en:guid:febuildergba:work_support | 2023/06/08 20:25 |
guide:febuildergba:作品支援 | 2023/06/08 20:24 |
FE定番の増援イベントの作り方について説明します。
とりあえず序章に毎ターン増援を出したいと思います。
マップに登場させたいキャラは、ユニット設定に書かないといけません。
増援も同様に定義する必要があります。
ですが、序章のユニット設定は枠が詰まっていて空きがありません。
よって、ここにデータを入れることはできません。
なお、最後の空白は、データはここで終わりですよという区切りマークです。
ここが空いているからと言って、データを入れてしまうと、区切りがなくなってしまいおかしなことになります。
部屋の壁が邪魔だからと言って穴をあけると、隣の部屋につながってしまって、大変なことになるのと同じです。
そういうことはやってはいけません。
ROM末尾に空き領域を追加して、ユニットをおけるスペースを確保します。
バイナリエディタでROMを開き、末尾に移動してください。
スクロールバーを下まで下げるか、 Ctrl + Endで一番下に下げます。
00をひたすらおすなり、コピペするなりして、
空き領域を確保してください。
今回は他のものも置きたいので、かなり多めに確保しますが、
きっちりに確保していくと、あとあとにやってやっぱり増やし痛いという時に泣くことになるので、ゆとりを持って増やすことをおすすめします。
とりあえず必要な量の2倍ぐらいを確保することをおすすめします。2倍といっても数十バイトから数百バイトの世界ですので、それが500バイトが倍の1000バイトになったからといって大した影響はないです。(空き領域は最大16MB(16,000,000バイト)利用できます。)
増やした領域を先頭アドレスの項目に入れて、
数を読込ユニット数に入れて、検索ボタンを押します。
今回は 0x1000000から置いて行きたいので、先頭アドレスには 1000000 と入れます。
敵キャラの増援を2体ずつ出したいので、3 と入れます。 (2体+終端コードで合計3です)
追加した領域のデータが表示されました。
配置する場所は忘れないように、メモしておきましょう。
敵1体20バイト必要なので、20*3=60バイト(0x3Cバイト)利用します。
名前 | アドレス |
増援配置 | 0x1000000 - 0x100003C |
上の00を選択して山賊のデータを作ります。
注意:(入力)という紫のボタンがあるところは、その左側の値を入れ終わったら、紫の入力ボタンを押して値を生成しないといけません。
入力終わったら、書込ボタンを押してください。
ここでまたもや困ったことがあります。
ターンイベントに増援を追加する空きがありません。
既存に4つイベントが入っています。
これは序章でターン経過で起きるイベントが4つあるということを意味しています。
これらを消して、再利用すれば、できなくもないのですが、序章で発生するイベントがなくなってしまいます。
ここでは、新規に領域を割り当ててみたいと思います。
コップがいっぱいでこれ以上入れるとこぼれてしまうので、
もっと大きな容器に移し替えて作業するようなものです。
(既存のイベント条件などの適当な領域を再利用するのは危険です。たいていのフリーズはイベント条件で変な値が立ってしまったことによっておきます。できるだけイベントの再利用はさけて、新規に領域を割り振ることをおすすめします。1つたったの12バイトです。そのために危険を犯すことはないでしょう?)
step_a05で大目に確保したので、その領域を使いましょう。
とりあえず、今回はイベント条件を0x1000100から割り当てていきましょう。
イベントポインタを設定する前に、元のアドレスをメモしておきましよう。
名前 | アドレス |
増援配置 | 0x1000000 - 0x100003C |
元のイベント条件 | 0xA5A6B0から4つ 1つ12バイト |
1つ12バイトであるというは、読込12バイトというところに書いてありますね。
イベント条件はあとあと増やしたくなるもので、多めに10個ぐらい確保しておきます。
こちらも同様に、終端が一つ必要なので、12バイト * (10個+1) = 132バイト(0x84バイト)確保します。
割当を決めたら、メモに追加しておきます。
名前 | アドレス |
増援配置 | 0x1000000 - 0x100003C |
イベント条件 | 0x1000100 - 0x1000184 |
元のイベント条件 | 0xA5A6B0から4つ 1つ12バイト |
それではイベント条件を0x1000100から割り当ていきます。
割当は、0x1000100ですが、ポインタですので、+8000000して、0x9000100 がイベントポインタに書くべき値になります。
イベントポインタを 9000100 に変更して、一時書込で保存してください。
~
イベントポインタを書き換えたら、次に、
00 00 00 00 まで検索するのチェックを外して、検索ボタンを押してください。
このポインタ先に書いてあるイベントが表示されます。
もし、このようなエラーがでたら無視してください。
ProjectFEGBAは、よくこのエラーを吐きますが、ガン無視してください。
新規に領域を割り当てましたのでイベント命令は真っ新になりました。
これで増援をかけるわけですが、
その前に一つやらないといけないことがあります。
この状態では、元のイベントが消えてしまっています。
新しいイベントポインタ領域を割り当てたので、元の領域は見られないためです。
元のイベントをすべて消していいならば、この状態でもいいのですが、元の状態を生かしつつ追加したい場合、元のイベントをコピーしてこないといけません。
メモを見ると、元のイベントは、0xA5A6B0だったと書いてありますね。
0xA5A6B0から、4つ*12バイト=48バイトをコピーして0x1000070に張り付ける必要があります。
名前 | アドレス |
増援配置 | 0x1000000 - 0x100003C |
イベント条件 | 0x1000100 - 0x1000184 |
元のイベント条件 | 0xA5A6B0から4つ 1つ12バイト |
一度保存してから、バイナリエディタでROMを開いてください。
0xA5A6B0に移動し、
0xA5A6B0 から、4つ*12バイト=48バイトをコピーして0x1000100に張り付けてください。
0x1000100にコピーするとこのようになります。
位置がずれていないか等をよく確認してください。
コピペが済んだら、データを保存して、ProjectFEGBAへ再度戻ります。
もう一度、00 00 00 00 まで検索するのチェックを外して、検索ボタンを押してください。
そして、 01000100 とかをクリックしてみてください。
もともとあったイベントが表示されます。
末尾に空き領域が確保できたので、この領域の末尾に増援イベントを設定します。
イベント命令を 9000200 におきました。これは、ポインタ化されているので、実際のアドレスは -0x8000000 した 0x1000200になります。
0x9000200 - 0x8000000 = 0x1000200
イベント命令の場所を新規に決めたので、メモに書いておきます。
名前 | アドレス |
増援配置 | 0x1000000 - 0x100003C |
イベント条件 | 0x1000100 - 0x1000184 |
元のイベント条件 | 0xA5A6B0から4つ 1つ12バイト |
イベント命令 | 0x1000200 |
これで、ターン2からターン4の間にイベントを1000200に書いてあることを実行します。
とはいっても、1000200にはまだ何も書いていないので、これから増援を実行するイベントを書きます。
何も入っていない空地なので 00000000不明 がたくさん出てきました。
[XXXXXXXX]ユニット情報を読込移動 主に増援 カメラ動作有り???
不明を置いていても仕方ないので、全削除ボタンを押してクリアします。
===== step_b16 =====
ここから増援イベントを作成します。
===== step_b17 =====
増援で使う命令は、これです。
<code>
0050200XXXXXXXX400A0000AC03A608
</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]ユニット情報を読込移動 主に増援 カメラ動作有り???
[09000000]ユニット情報を読込移動 主に増援 カメラ動作有り???
の、 XXXXXXXX には、 00000009を書きます。
つまり、こうなります。
4005020000000009400A0000AC03A608
わかりづらいですが、ここはとても重要なところです。
ポインタにするには、 +0x08000000 しなくてはいけない。
リトルエンディアンにするには、うしろから2つずつ書いていけなくてはいけない。
この2つのルールだけは覚える必要があります。
===== step_b18 =====
イベントコードに 4005020000000009400A0000AC03A608 と入力して、追加ボタンを押してください。
===== step_b19 =====
命令が追加されました。
<code>
現在入っている命令
4005020000000009400A0000AC03A608
</code>
余談ですが、FE8で利用するイベント命令は、 ProjectFEGBAの メモの中に書いてあります。
実はこれ以外にもイベントがあることがわかっています。
詳しいイベントはwiki等を参考にしてください。
敵を表示したあとは、20300000移動設定移動開始命令を呼ぶのが慣習になっているので、
移動設定移動開始命令?が追加され、以下のようになりました。
移動設定移動開始命令を追加してください。
イベントコードに 20300000 と、入れて、追加を押してください。
===== step_b21 =====
20300000
現在入っている命令 400502004000DF09400A0000AC03A608''[09DF0040]ユニット情報を読込移動 主に増援 カメラ動作有り??? 20300000''移動設定移動開始命令?
移動設定移動開始命令とは、ユニット設定で移動後座標で定義した座標へさせる命令です。
移動後座標以外にも、イベント命令で移動命令を出した命令の実行にもこれが必要です。
最後に、命令終了を意味する20010000リターンコードを入れます。
リターンが追加され、以下のようになりました。
イベントコードに 20010000 と、入れて、追加を押してください。
===== step_b23 =====
20010000
現在入っている命令 400502004000DF09400A0000AC03A608''[09DF0040]ユニット情報を読込移動 主に増援 カメラ動作有り??? 20300000''移動設定移動開始命令? 20010000''リターン
一時書込で保存したあとに、検索ボタンを押すと、再読み込みがかかり綺麗な表示になります。
ちゃんと追加した3つの命令が正しく追加されている確認してください。
はいっていないといけない命令 400502004000DF09400A0000AC03A608''[09DF0040]ユニット情報を読込移動 主に増援 カメラ動作有り??? 20300000''移動設定移動開始命令? 20010000''リターン