プレーンHTML | Wikiマークアップ
guide:村訪問と村破壊

FEといえば、特徴的な要素として村訪問イベントがあります。
村を盗賊より早く訪問しなければならないため、プレイヤーを急がせてミスを誘えます。
また、空が飛べるユニットで先回りしたり、村を守るため兵力分散を強いたりと、新しい遊び方を追加してくれます。
村があるかないか、盗賊の初期位置がどうかという要素だけで、マップの難易度がかわることはよくあることです。

ただ、村訪問イベントを作るのは、とても困難です。
いろいろなものを設定しないと作ることが出来ません。初心者の挫折ポイントの一つだと思います。
ここではできるだけわかり易く解説します。

i.imgur.com_k6cpe61.jpg
i.imgur.com_x1ogn2x.jpg

用意するもの

マップエディタ(FEMapCreator とか)
MAR array inserter.exe
mar_conv_Changes2.exe
ProjectFEGBA

サンプル
http://ux.getuploader.com/FE4/download/247/fe8_town_sample.7z


マップを作ろう

こんなマップを作ってみました。
15×10のマップです。
(15×10といえば狭いようですが、ゲームでプレイしてみるとそれほどでもないです。)
(a_map.marとして保存しました)
i.imgur.com_frcengq.jpg

せっかくなので、閉じ村と、廃村も作りましょう。
(b_tojimura.marとして保存しました)
i.imgur.com_iobovdw.jpg

(c_haison.marとして保存しました)
i.imgur.com_injkf8l.jpg

フィールドマップならば、閉じ村:8A9B25C 廃村:8A9B03C として、データはあるので作らなくてもいいのですが、せっかくなので説明用に作成します。

メインマップを追加する

メインマップを追加します。
今回は、序章を改造します。

step_b01

MAR array inserter.exe でメインマップ a_map.mar を追加します。
アドレスは 0x1000000 としました。
i.imgur.com_axiajng.jpg

追加したら、追加したアドレスをメモっておきましょう。

メモ 名前アドレス
テストマップ0x1000000

step_b02

マップの部分変更を作るときは、MAR array inserter.exeではなく、mar_conv_Changes2.exe を使います。
mar_conv_Changes2.exeに、部分変化する部分 *.mar をドラッグします。

まずは、閉じ村の b_tojimura.mar からやってみます。
mar_conv_Changes2.exeに、b_tojimura.mar をドラッグします。
そうすると、一瞬、dos窓が表示された後で Change_MAP.gba というファイルができます。
Change_MAP.gbaには、マップ変化させる情報がはいっています。
Change_MAP.gbaをバイナリエディタで開き、中身を ROM の適当な場所にコピーします。
今回は、末尾に入れてみます。

b_tojimura.mar を、mar_conv_Changes2.exeで変換してできたファイル。
i.imgur.com_jyxn8t4.jpg


これを ROMの末尾に入れます。
i.imgur.com_gljadck.jpg

メモ 名前アドレス
テストマップ0x1000000
部分変化 閉じ村0x1000044

step_b03

続いて、c_haison も、同じように mar_conv_Changes2.exe で変換して、ROMの末尾に追記します。

c_haison.mar を、mar_conv_Changes2.exeで変換してできたファイル。
i.imgur.com_bgh2g6y.jpg


これを ROMの末尾に入れます。
i.imgur.com_awzdy9w.jpg

メモ 名前アドレス
テストマップ0x1000000
部分変化 閉じ村0x1000044
部分変化 廃村0x1000046

step_b04

とりあえず、うごかしてみる。
もちろん、まだ何も変わりません。
データを入れたけど、そのデータがどこにあるかということを、プログラムに教えてあげていないためです。
i.imgur.com_21xu2sc.jpg

step_b05

ProjectFEGBAを立ち上げて、ROMを読込み、
マップポインタの項目を開きます。
i.imgur.com_4xoxc8r.jpg

step_b06

マップをクリックします。
i.imgur.com_llaqqqy.jpg

step_b07

序章を変更するので、「04 《マップ》序章 ルネス陥落」を選択します。
i.imgur.com_yqlrzbp.jpg

step_b08

序章のマップポインタが出てきました。
このマップポインタを新規に追加したところに変えます。
i.imgur.com_jtmcedk.jpg

step_b09

メモを取り出してください。こう書いてありますよね。

メモ 名前アドレス
テストマップ0x1000000
部分変化 閉じ村0x1000044
部分変化 廃村0x1000046

それでは、1000000 と入れる・・・
わけではありません。
マップはポインタですので、+0x8000000しないといけません。
0x1000000 + 0x8000000 = 0x9000000 となり、
0x9000000 が、入れる値になります。
GBAでは実行時にROMの内容が 0x8000000以降に配置されるためです。そのため、実行時に参照するものは +0x8000000 を足さないといけません。

よって、入れる値は、0x9000000になります。
i.imgur.com_74udnqd.jpg

step_b10

値を変更したら、一時書き込みで書き込みます。
i.imgur.com_qfgekpi.jpg

step_b11

とりあえず、ゲームを読み込みなおしてみましょう。
今度は、改変したマップが表示されます。
i.imgur.com_aubv6zi.jpg

ですが、村はまだ設定していないので、動作しません。
村に入っても、訪問メニューがでません。
i.imgur.com_f72pwrq.jpg

村訪問を作ろう

step_c01

村訪問を作るには、イベント条件を選択します。
i.imgur.com_emhgfpo.jpg

step_c02

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

そして、イベント種類のコンボボックスから、
「制圧ポイント、宝箱、扉等のオブジェクト指定」を選択します。
i.imgur.com_eo2ohtd.jpg

step_c03

ここで一つ困ったことがあります。
序章には、「制圧ポイント、宝箱、扉等のオブジェクト」が一切ありません。
そのため、追加できる領域がありません。
i.imgur.com_qsdsd93.jpg


新規に領域を確保しなくてはいけません。

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

step_c04

一度セーブして、バイナリエディタに戻ります。
領域が足りないならば、新規に確保すればいいのです。
i.imgur.com_j85cn0d.jpg

ファイルの末尾から、ひたすら、0を押したりして、領域を追加しましょう。

step_c05

10003c0 まで 0x370バイト(880バイト)ほど確保しました。
i.imgur.com_pein2cv.jpg

step_c06

保存したら、ProjectFEGBAでもう一度先ほどの画面にアクセスします。
確保した領域を割り当てていきましょう。
とりあえず、今回はイベント条件を0x1000070から割り当てていきましょう。
i.imgur.com_l6wekrx.jpg

割当を決めたら、メモに書いておきましょう。

メモ 名前アドレス
テストマップ0x1000000
部分変化 閉じ村0x1000044
部分変化 廃村0x1000046
イベント条件0x1000070

割当は、0x1000070ですが、マップ同様にポインタですので、+8000000して、0x9000070 がイベントポインタに書くべき値になります。
値を書いたら、一時書き込みで保存してください。

step_c07

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

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

step_c08

何やら値が表示されました。
i.imgur.com_5kqda78.jpg

これ一つ一つが、「制圧ポイント、宝箱、扉等」のイベントになります。
例えば、宝箱を10個だしたければ、10個のイベントを消費します。
村訪問もその1つです。
村訪問は例外的に、イベントを2つ消費して作ります。
訪問するイベントと、盗賊が村を襲うときに利用する村の中心イベントの2つからなります。

まずは、先頭の 01000070を選択してください。

step_c09

以下のように入力してください。

発生タイプ6(訪問村)
フラグ9
イベント9000100
種類10(民家)
X10
Y3


設定が終わったら、「ポインタ先内容一時書込」ボタンを押して書き込んでください。
i.imgur.com_xjphrpz.jpg

発生タイプ

設定値:6(訪問村)
村訪問の場合は、必ず6(訪問村)にしてください。5の王座、民家ではダメです。

フラグ

設定値:9
村に何度も入れるのはまずいので、フラグを立てます。
村に入ると、自動的に、フラグ9がたち、フラグ9が立っていれば、このイベントは発生しなくするという意味になります。
ステージ中では、おもに 7 ~ xx が使われます。
[http://ngmansion.webcrow.jp/wiki/hackfe/index.php?%E3%83%95%E3%83%A9%E3%82%B0|フラグ一覧]

イベント

設定値:9000100

村に入った時に、発生させるイベント命令を書きます。
今回は、0x1000100 から割り当てます。
いつもの通り、+0x08000000 した値を書いています。
0x1000100 + 0x08000000 = 0x9000100 です。

イベント命令の場所を決めたのでメモに書いておきましょう。

メモ 名前アドレス
テストマップ0x1000000
部分変化 閉じ村0x1000044
部分変化 廃村0x1000046
イベント条件0x1000070
イベント命令0x1000100

種類

設定値:10(民家)

街訪問の場合は、民家にしなくてはいけません。

座標

設定値: X=10 Y=3

街の入口の座標を書きます。
座標で言うと、この位置になります。
i.imgur.com_vl4pwno.jpg



設定が終わったら、「ポインタ先内容一時書込」ボタンを押して書き込んでください。
次に、100007Cに村の中心を設定します。

step_c10

100007Cを選択し、以下のように入力してください。

発生タイプ5(王座、民家)
フラグ9
イベント1
種類20(村の中心)
X10
Y2


設定が終わったら、「ポインタ先内容一時書込」ボタンを押して書き込んでください。
i.imgur.com_oymubb3.jpg

発生タイプ

設定値 5(王座、民家)

村の中心の場合、先ほどとは違い、5(王座、民家)とします。
間違っても、6(訪問村)にしてはいけません。

フラグ

設定値 9

フラグは、訪問村と同じフラグを入れます。
村が破壊されると入れなくならないといけませんので、フラグを同じにする必要があります。

イベント

設定値 1

村破壊にイベントはないのですが、習慣的に1を入れることになっています。

種類

設定値 20(村の中心)

座標

設定値: X=10 Y=2

村の中心を設定します。
村の入口Y - 1 を入れます。
i.imgur.com_reb1jrz.jpg



設定が終わったら、「ポインタ先内容一時書込」ボタンを押して書き込んでください。
次は、一度、イベント条件を抜けて、
9000100に設定したイベント命令の設定をします。

step_c11

イベント条件を抜けて、イベント命令を選択してください。
i.imgur.com_y3agfbm.jpg

step_c12

イベント命令では、イベントでどういう演出を行うかを定義していきます。
i.imgur.com_sk1yfxc.jpg

step_c13

先頭アドレスに、設定したいイベント命令のアドレスを入れます。
村訪問イベント 0x9000100 を設定したいわけですが、
ここでは、ファイル上での場所を定義するので、+0x8000000していてはいけません。
0x9000100 - 0x8000100 = 0x1000100 として、ファイル城の本来の位置を指定する必要があります。
(それくらい自動でやれよ!といいたいのはわかりますが、そういうものなので我慢してください。)
先頭アドレスに 1000100 と入れて、検索ボタンを押してください。
i.imgur.com_vvferee.jpg

step_c14

ROM上に 0 を連打しているので、ひたすら 0 が表示されます。
これを手で消してイベントを入れるべきなのですが、面倒なので、村イベントを用意してきました。

インポートボタンを押して、d_村event.txtを読み込んでください。
i.imgur.com_ancarra.jpg

d_村event.txtの中身は以下のとおりです。

20150000''BGM音量を小さく???
4005020002000000400503002B090000400A00004804A608''[02]の背景で[092B]の会話を表示
21150000''BGM音量を大きく???
400A0000249D5B08''アイテム入手前???
400503006D0000002037FFFF''[6D]とっこうやく入手
2802070020010000''章イベント終了

step_c15

イベントがインポートできました。
とりあえず、そのまま一時書込を押して保存してください。
i.imgur.com_5d9c8xn.jpg

step_c16

一度、保存してゲームを再度初めから開始してください。
今度は、村に入ると、訪問メニューが表示されました。
i.imgur.com_k6cpe61.jpg

訪問メニューを押してみましょう。
イベント命令に書いた命令が実行されて、イベントが開始されます。
i.imgur.com_ls32zcz.jpg

とっこうやくゲット。
i.imgur.com_lkuhxvv.jpg

あれ・・・?
i.imgur.com_5t5qf04.jpg


閉じ村にならない・・・。
閉じ村にするには、マップ変化というのを設定しないといけません。
今回は設定していないので、閉じ村にはなりません。

マップ変化

step_d01

マップ変化を設定するには前準備として、
マップポインタに入る必要があります。
i.imgur.com_4xvhpdz.jpg

step_d02

変化ボタンをクリックします。
i.imgur.com_3d3lm76.jpg

step_d03

「06 《マップ変化》序章 ルネス陥落 Map_changes」を選択してください。
i.imgur.com_srs5hfn.jpg

step_d04

残念ながら、序章には、マップ変化がないので、空へのポインタが割り当てられています。
(そのポインタ先は空です)
そのため、メモリを割り当ててあげなければいけません。
i.imgur.com_tkc4mud.jpg

今回は、0x1000200 から割り当てます。
いつもの通り、+0x08000000 した値を書いています。
0x1000200 + 0x08000000 = 0x9000200 です。

マップ変化の場所を決めたのでメモに書いておきましょう。

メモ 名前アドレス
テストマップ0x1000000
部分変化 閉じ村0x1000044
部分変化 廃村0x1000046
イベント条件0x1000070
イベント命令0x1000100
マップ変化0x1000200


ポインタを 0x9000200に書き換えたら、一時書込で保存します。
i.imgur.com_hajxcxs.jpg

step_d05

次に、「マップ変化」を選択します。
i.imgur.com_qq7ufso.jpg

step_d06

マップ変化に入りました。
i.imgur.com_gceowoy.jpg

step_d07

先頭アドレスを 1000200 として検索ボタンを押してください。
ここはポインタではなく、アドレスですので、 0x9000200 ではなく、 0x1000200 になります。
i.imgur.com_cdnqqkz.jpg

step_d08

00 を選択し、以下のように入力してください。
これは、村破壊時の廃村のデータです。

番号0
X9
Y1
サイズX3
サイズY3
マップ9000046

i.imgur.com_gn2snjb.jpg

番号

設定値 0

0からの連番で指定します。
同一ステージでは、ほかと被らないようにしてください。

座標

設定値 X=9 Y=1

村の左上を指定します。
座標で言うとここです。
i.imgur.com_oq3lk67.jpg

サイズ

設定値 サイズX=3 サイズY=3

廃村は3×3のデータなので、3×3と設定します。

マップ

設定値 9000046

step_b03で、廃村は、0x1000046に置きましたよね。
実行時に参照されるものなので、+0x08000000 する必要があります。
0x1000046 + 0x08000000 = 0x9000046 となります。

部分変化 廃村0x1000046


~設定したら、一時書込ボタンで書き込んでください。
次はひとつ下の項目を選択し、閉じ村を定義します。

step_d09

2番目の 00 を選択し、以下のように入力してください。
これは、村訪問した後の閉じ村のデータです。
村を定義するときは、村破壊データの次に閉じ村のマップ変化を作らないといけません。

番号1
X10
Y3
サイズX1
サイズY1
マップ9000044

i.imgur.com_9ekhrfj.jpg

番号

設定値 1

0からの連番で指定するので、今回は1になります。

座標

設定値 X=10 Y=3

村の入口を指定します。
座標で言うとここです。
i.imgur.com_vl4pwno.jpg

サイズ

設定値 サイズX=1 サイズY=1

閉じ村は1×1のデータなので、1×1と設定します。

マップ

設定値 9000044

step_b02で、閉じ村は、0x1000044に置きましたよね。
実行時に参照されるものなので、+0x08000000 する必要があります。
0x1000043 + 0x08000000 = 0x9000044 となります。

部分変化 閉じ村0x1000044


~設定したら、一時書込ボタンで書き込んでください。
最後にもう一つ下の項目を選択し、終端FFを定義します

step_d10

3番目の 00 を選択し、以下のように入力してください。
これは、マップ変化の終端コードです。

番号FF

i.imgur.com_pxhowg1.jpg

番号

設定値 FF

データはここで終わりですよという意味です。
必ず、FFを定義しないといけません。

step_d11

長い設定が終わりました。
早速ゲームをうごかしてみましょう。
i.imgur.com_8ysjtsy.jpg

i.imgur.com_8ulagxc.jpg

i.imgur.com_mwjjj1g.jpg

閉じ村になりました。
もし、うまくいかない場合は、マップ変化の座標の指定等を間違っていないか確認してください。
i.imgur.com_6q8fnma.jpg

盗賊を出そう

step_e01

村を破壊する盗賊を追加するには、ユニット設定を選択します。
i.imgur.com_pfetqlz.jpg

step_e02

序章を設定しているので、「序章 ルネス陥落」を選択します。
i.imgur.com_psfygj5.jpg

step_e03

ステージに登場する登場人物がでてきました。
今回は、一番下のグラド兵に盗賊を演じてもらおうと思います。
i.imgur.com_ignpmqh.jpg

step_e04

グラド兵を選択すると、彼の設定が出てきます。
i.imgur.com_ibanxfl.jpg

step_e05

一次AIを 06行動しない(AI2=移動のみ)
ニ次AIを 05村や宝を襲う。その後… となっているを選択してください。

選択が終わったら、入力ボタンを必ずクリックしてください。
ユニット設定では、入力ボタンを押さないと値が確定されないものが多々あります。
注意してください。
i.imgur.com_kt7wukb.jpg

step_e06

AIの設定が終わったら、書き込みボタンで保存してください。
i.imgur.com_warljjn.jpg

step_e07

早速ゲームを再度スタートしてみましょう。
グラド兵は設定に従い、村を襲います。
襲われた村は、マップ変化によって、廃村になります。
i.imgur.com_x1ogn2x.jpg

もし、動作しない場合は、AIの設定を変えた後で、入力ボタンを押したか確認してください。
また、聖魔の賊AIは近くに攻撃可能なキャラが居ると、攻撃のほうを優先するので、挙動を観察する場合は、近寄らずに離れましょう。
また、イベント条件で村の中心の設定を間違うと盗賊は移動しません。
そして、マップ変化の設定を間違うと、廃村になりません。
これらをひとつひとつ確認してください。

盗賊を離脱させよう

盗賊は村を襲ったりした後は、すみやかに離脱してほしいものです。
賊の離脱ポイントを作りましょう。
宝箱を獲得して逃げる賊もこれと同じ設定です。

step_f01

離脱ポイントを作るには、離脱ポイントを選択します。
i.imgur.com_eqwoz3t.jpg

step_f02

そのまま検索ボタンを押してください。
(余談ですが、友軍の離脱ポイントを設定したい場合は、 先頭アドレスを5D218Cに変えて検索を押す必要があります。)
i.imgur.com_rlqooki.jpg

step_f03

マップ一覧が表示されるので、「00 ルネス陥落」を選択します。
i.imgur.com_9f1hahx.jpg

step_f04

残念なことに、序章には、離脱ポイントがありません。
そのため、領域を割り当てて上げる必要があります。
今回は、 0x1000300 を割り当てることにしました。
離脱ポイントは、実行時に参照されるポインタなので、+0x08000000 する必要があります。
0x1000300 + 0x08000000 = 0x9000300 となります。
離脱ポイントに、9000300 と、入力し、一時書込ボタンで確定させてください。
i.imgur.com_wund9h0.jpg

離脱ポイントの場所を決めたのでメモに書いておきましょう。

メモ 名前アドレス
テストマップ0x1000000
部分変化 閉じ村0x1000044
部分変化 廃村0x1000046
イベント条件0x1000070
イベント命令0x1000100
マップ変化0x1000200
離脱ポイント0x1000300

step_f05

先頭アドレスに、先ほど決めた 1000300 を入力し、検索ボタンを押してください。
ややこしいですが、ここはアドレスですので、 0x1000300 になります。
i.imgur.com_l7r1bxs.jpg

step_f06

00 を選択し、以下のように入力してください。

X14
Y0
消滅指定1

設定したら、一時書き込みで保存してください。
i.imgur.com_xkeu0ul.jpg

座標

設定値 X=14 Y=0

これはマップで言う、右上の座標です。
ここに、敵の離脱ポイントを設定します。

i.imgur.com_lz6f8r0.jpg

step_f07

01 を選択し、終端コード FF を起きます。

X255
Y0

255 == 0xFF です。
座標なので、利便性のため10進数でいれることになっていますので、FFを入れるには、255と入力します。
ProjectFEGBAでは、10進数で入れるところはオレンジ色で表現されています。便利ですね。

i.imgur.com_p5hpzqr.jpg
設定したら、一時書き込みで保存してください。

step_f08

設定が終わったので、早速ゲームをスタートしてみましょう。

盗賊(グラド兵)が、村を襲った後、右上に向かって移動し、離脱するはずです。
i.imgur.com_iq0cv62.jpg

終わり

お疲れ様でした。
これで、村訪問と、盗賊による村破壊、盗賊の離脱の設定はおしまいです。
これだけ理解していれば、たいていのマップは作れるはずです。
いろいろ値を変えながら、面白いステージを作ってください。

  • fe8の既存の村の設定を見ると訪問時にもフラグを立てているので、合わせたいです。 – 7743 &new{2016-07-17 (日) 12:02:44};
  • 訪問村は閉じ村に変われば入れなくなるので、理由がなければフラグを設定しなくても問題ないですよ – &new{2016-07-17 (日) 10:32:47};
guide/村訪問と村破壊.txt · 最終更新: 2018/09/23 19:01 by 211.14.62.193