====== クリア条件の作り方 ====== {{ https://i.imgur.com/bhdWOCr.jpg }} ====== クリア条件とは何か? ====== {{ https://i.imgur.com/Bvk40yk.jpg }} \\ GBAFEで、クリアとは、フラグ0x03フラグ(制圧フラグ)を立てて、終了イベントを呼び出すことです。\\ 逆に言えば、0x03フラグを立てて、終了イベントを呼びだしさえすれば、章をクリアできます。\\ そのため、さまざなま章クリア条件を作ることが出来ます。\\ また、複数のクリア条件を作ることも出来ます。\\ \\ 0x03フラグを立てないで、終了イベントを呼ぶこともできますが、クリアターン数が記録されないなどの問題があることがあります。\\ 必ず、フラグ0x03を立ててから、終了イベントを呼び出すことをお勧めします。\\ ====== 拠点を制圧でクリアできるようにするには? ====== ロードユニットが、制圧拠点に入ると、制圧メニューが出ます。\\ そして、制圧を選択すると、ステージクリアになります。\\ FE1から存在する古典的なクリア方法です。\\ \\ 制圧メニューを出させるには、イベント-マップオブジェクトで制圧拠点を設定する必要があります。\\ 制圧ポイントは城門などに設定されることが多いですが、どんなマップタイルにも設置することができます。\\ \\ だからといって、草原の真ん中においていたら、プレイヤーは気が付かないと思いますので、目立つマークがある場所に設定しましょう。\\ \\ ===== 実際に"制圧ポイント"を設置してみる ===== 序章の橋を渡った対岸に制圧ポイントを作ってみましょう。\\ {{ https://i.imgur.com/xZKflLR.jpg }} ===== StepA1 ===== "イベント"をクリックします。\\ {{ https://i.imgur.com/u8f268o.jpg }} ===== StepA2 ===== 最初は、ターン条件になっているので、上にあるコンボボックスからイベントを切り替えてください。\\ {{ https://i.imgur.com/WLQcJ2m.jpg }} ===== StepA3 ===== コンボボックスから、"マップオブジェクト"を選択します。\\ {{ https://i.imgur.com/wxCQAy1.jpg }} ===== StepA4 ===== 序章には、マップオブジェクトが一つもないので、リストの拡張で増やします。\\ {{ https://i.imgur.com/cSY1rBz.jpg }} ===== StepA5 ===== 1件だけ作るので、新規確保する数は1にしてください。\\ そしたら、移動処理を実効するボタンを押してください。\\ {{ https://i.imgur.com/Ix2wThZ.jpg }} ===== StepA6 ===== 領域が確保されました。\\ {{ https://i.imgur.com/vgoNeRO.jpg }} ===== StepA7 ===== 「発生タイプ」を 「05=制圧ポイントと民家」にしてください。\\ {{ https://i.imgur.com/olgVEtF.jpg }} ===== StepA8 ===== 達成フラグを 03(制圧フラグ)にします。\\ {{ https://i.imgur.com/ST2oKMy.jpg }} ===== StepA9 ===== イベントは 1を入れてください。\\ これは、何もしないダミーイベントです。\\ {{ https://i.imgur.com/tNJxeTo.jpg }} ===== StepA10 ===== 制圧ポイントの座標を指定します。\\ 橋を渡りきった対岸にします。\\ {{ https://i.imgur.com/bOu8r6f.jpg }} ===== StepA11 ===== 「種類」を「11=制圧」にしてください。\\ {{ https://i.imgur.com/bVYQLu7.jpg }} ===== StepA12 ===== これで設定は完了です。\\ 上から確認してみましょう。\\ 以下のように設定しました。\\ \\ |発生タイプ|05=制圧ポイントと民家| |達成フラグ|03|(制圧フラグ)| |イベント|1|ダミーイベント| |座標|1,0|橋を渡りきった対岸| |種類|11=制圧| {{ https://i.imgur.com/JjMTaOb.jpg }} ===== StepA13 ===== 設定ができたので、"書き込み"ボタンを押して、データを書き込みます。\\ {{ https://i.imgur.com/BQUTyFh.jpg }} ===== StepA14 ===== さっそく、F5キーを押して結果を確かめてみましょう。\\ {{ https://i.imgur.com/UQlKfRo.jpg }} ===== StepA15 ===== エイリークがポイントに行くと、制圧メニューが表示されます。\\ {{ https://i.imgur.com/xZKflLR.jpg }} ===== StepA16 ===== 制圧を行うとステージをクリアできます。\\ {{ https://i.imgur.com/Bnp4r9n.jpg }} \\ \\ ===== なぜこれでクリアできるのか?~ ===== なぜこれでクリアできるのでしょうか?\\ それは、フラグ0x03が有効な状態で、キャラクタが待機したためです。\\ フラグ0x03が有効な状態で、キャラクターを待機させると、ゲームシステムは、自動的に、終了イベントが呼び出されます。\\ \\ 制圧イベントでは、ダミーイベント 0x01 を指定しました。\\ そのため、制圧を選択肢ても、イベントは何も実行されません。\\ しかし、達成フラグ0x03を有効にするように設定しました。\\ 達成フラグは、イベントが達成したときにONになるフラグです。\\ そのため、制圧を選んだことで、このマップオブジェクトを動作させる条件が達成しました。\\ イベント条件が達成したため、達成フラグが評価されます。\\ 今、ステージをクリアしようとしているため、まだ0x03制圧フラグはまだ有効になっていません。\\ そのため、このイベントは動作します。\\ \\ 条件が達成され、イベントが動作するため、達成フラグ 0x03は有効になります。\\ そして、イベント0x01が動作しました。\\ イベント0x01は何もしないダミーイベントです。\\ 特に何もしません。\\ \\ そのため、結果的に、このイベントでは、フラグ0x03が有効になっただけです。\\ \\ さて、制圧を選んだことで、そのユニットは待機状態に移行しました。\\ これで、フラグ0x03が有効になって、ユニットが待機するという条件を満たしました。\\ そのため、ゲームシステムは、自動的に、終了イベントを呼び出します。\\ \\ 終了イベントには、次の章へ進むようにイベント命令が書かれているため、\\ この章をクリアして、次の章へ進むことが出来ました。\\ ====== 画面に表示される条件を調整する ====== これで制圧で、クリアできるようになりました。\\ しかし、画面の表示は、「ボス撃破」のままです。\\ この値を制圧に書き換えましょう。\\ ===== StepAA1 ===== 一番最初の画面に戻ります。\\ 「マップ設定」を選択してください。\\ {{ https://i.imgur.com/J01gbFX.jpg }} ===== StepAA2 ===== マップ上で、クリア条件を表示しているのは、この部分になります。\\ {{ https://i.imgur.com/I2wE4lM.jpg }} ===== StepAA3 ===== この部分は、条件を表示しているだけで、実際の条件とは何の関係もありません。 表示だけです。\\ 実際に、私たちは、制圧でクリアできるようにしましたが、ボス撃破のままになっているのが何よりの証拠です。\\ {{ https://i.imgur.com/mjwmy9K.jpg }} ===== StepAA4 ===== 値を変えてみましょう。\\ 「城門の制圧」という文字列があるので、それを利用します。\\ \\ 以下のように変更しました。\\ |クリア条件|12D|城門の制圧| |詳細クリア条件|127|目的:城門の制圧| |特殊表示|00|None(制圧)| \\ {{ https://i.imgur.com/rcPmlWM.jpg }} ===== StepAA5 ===== 「書き込み」ボタンを押して、データを書き込んで下さい。\\ {{ https://i.imgur.com/dZRx9YI.jpg }} ===== StepAA6 ===== F5キーで、エミュレータを起動して、結果を確認してみましょう。\\ 設定した値になっています。\\ {{ https://i.imgur.com/uhe0OBg.jpg }} {{ https://i.imgur.com/7Oq3K4x.jpg }} \\ \\ これで、制圧条件の作り方は完了です。\\ ====== 特定ターンが経過したら、クリアになるようにするには? ====== 特定ターン防衛するようなステージを考えてみましょう。\\ 前回説明した制圧ポイントの作り方を理解しているならば、作るのは簡単です。\\ ターン条件を利用して、特定ターンになったら フラグを0x03を有効にして、終了イベントを呼んであげればいいのです。\\ ====== 特定ターンが経過したら、クリアになるイベントを作ってみよう ====== ===== StepB1 ===== "イベント"をクリックします。\\ {{ https://i.imgur.com/4F3bMCF.jpg }} ===== StepB2 ===== ディフォルトは、ターン条件になっていると思います。\\ そのままで問題ないです。\\ ただ、一応確認してください。\\ {{ https://i.imgur.com/4ihHOoi.jpg }} ターン条件になっていることを確認したら、ここにイベントを書き込みます。\\ 既存のターン条件を潰してもいいです。\\ ただ、今回は、新規にデータを確保して作ってみましょう。\\ 「リストの拡張」ボタンを押してください。\\ ===== StepB3 ===== 確保するデータ件数を5件にします。\\ 既存のターンイベントが4つあり、そこに新たに1件確保するため、1+4=5になるためです。\\ \\ 件数を変更したら、「移動処理を実行する」ボタンを押してください。\\ {{ https://i.imgur.com/fj0n8LT.jpg }} ===== StepB4 ===== 新しくイベント領域を確保しました。\\ 確保した領域は、リストの末尾にあります。\\ ここに、クリアするという条件を書いてみましょう。\\ {{ https://i.imgur.com/eLlp30P.jpg }} ===== StepB5 ===== 前回の制圧条件で、詳細に説明したので、今回は、一気に説明します。\\ 以下の様に設定してみてください。\\ \\ |発生タイプ|2|2ターン条件| |達成フラグ|3|制圧フラグ| |ターン前指定|0|主人公ターン| \\ {{ https://i.imgur.com/X2DQwIj.jpg }} 今回は、3ターン目になったらクリアするようにします。\\ |開始ターン|3| |終了ターン|0| {{ https://i.imgur.com/YZZm4JZ.jpg }} 余談ですが、 ターン条件は、開始ターンから、終了ターンの間、ずっと実行されますが、 終了ターンを0にすると、開始ターンだけイベントを実行することが出来ます。 (達成フラグが設定されているため、どちらにせよ、開始ターンにしか動きません。) ===== StepB6 ===== 設定ができたので、「書き込み」ボタンを押して、結果を書き込みましょう。\\ {{ https://i.imgur.com/MeqC4Bh.jpg }} ===== StepB7 ===== そして、F5キーを押してゲームを開始してください。\\ \\ ===== StepB8 ===== これでターン経過したら、このイベントが呼ばれてクリアになる・・・・と思ったら間違いです。\\ 実際に動作させてみましょう。\\ \\ あれ・・・・?\\ 4ターン目になってしまいました。\\ {{ https://i.imgur.com/zdX14po.jpg }} \\ いつまで待ってもクリアイベントが動作しません。\\ 不思議です。\\ イベントが無視されたのでしょうか?\\ そうではありません。\\ イベントは実行され、フラグ0x03は有効になっています。\\ \\ \\ ユニットを待機させてみてください。\\ ステージクリアできます。\\ {{ https://i.imgur.com/eT4G1ON.jpg }} {{ https://i.imgur.com/btVhRg8.jpg }} \\ \\ なぜこうなってしまったのか?\\ それは、フラグ0x03が有効な状態で、キャラクタが待機すると、ゲームシステムが自動的に終了イベントを呼び出すという仕様のためです。\\ ユニットを待機させずに、ターン終了を選んだだけでは、ユニットは待機していません。\\ そのため、"フラグ0x03が有効な状態で、キャラクタが待機する"という条件を満たせません。\\ そのため、上手く動作しません。\\ \\ では、どうすればいいのか?\\ 終了イベントを自分で呼び出せばいいのです。\\ システムが呼び出してくれないなら、手動で呼び出せばいいのです。\\ ===== StepB9 ===== イベントをダミーイベントの0x01から、終了イベントにかかれているアドレスに変更します。\\ {{ https://i.imgur.com/FuG7xZh.jpg }} \\ 終了イベントは、右上のコンボボックスの一番下に、あります。\\ {{ https://i.imgur.com/Ns5gUrF.jpg }} \\ これが終了イベントが書かれている領域です。(画面はFE8Jです)\\ このアドレスをメモして、私達の終了イベントに記載すればいいのです。\\ \\ |FE8J|08A6129C|序章終了イベント| |FE8U|089EF164|序章終了イベント| {{ https://i.imgur.com/mm07rQm.jpg }} ===== StepB10 ===== ターンイベントに戻りましょう。\\ イベント:0x01 となっている部分を、先程メモした終了イベントのアドレスに書き換えます。\\ {{ https://i.imgur.com/FT4uz1g.jpg }} \\ {{ https://i.imgur.com/eEgZbkd.jpg }} ===== StepB11 ===== 設定ができたので、保存します。\\ {{ https://i.imgur.com/vQqTiFe.jpg }} \\ さて、F5キーでエミュレータを起動してください。\\ そして、序章を最初からやり直してみてください。\\ \\ 現在2ターン目です。\\ {{ https://i.imgur.com/BiI7q79.jpg }} \\ ここで待機すると・・・・\\ {{ https://i.imgur.com/h0rqejO.jpg }} \\ 今度は、3ターンになった瞬間に、終了イベントが表示されました。\\ 上手く動作しました。\\ {{ https://i.imgur.com/XGLoCQP.jpg }} ===== StepB12 ===== これで、特定ターンでクリアできるようになりました。\\ しかし、画面の装飾がまだ出来ていません。\\ {{ https://i.imgur.com/TWwbHqN.jpg }} \\ 通常、防衛マップの場合、ターン数が表示されるべきです。\\ {{ https://i.imgur.com/RcOJ3Ir.jpg }} \\ このメニューを設定してみましょう。\\ ===== StepB13 ===== 一番最初の画面に戻ります。\\ 「マップ設定」を選択してください。\\ {{ https://i.imgur.com/x45py1u.jpg }} ===== StepB14 ===== 制圧の時と基本的同じです。\\ マップ上で、クリア条件を表示しているのは、この部分になります。\\ \\ |クリア条件|13A|主人公の11ターン生存 ターン防衛という文字列がなかったので代替品として使う| |クリア条件|124|目的:特定生存| |特殊表示|2|ターン防衛| {{ https://i.imgur.com/cOhJi5t.jpg }} \\ \\ そしてもう一つ。\\ 「特殊表示」で、ターン防衛を選んだ場合、最終ターンを表示する部分の設定があります。\\ 「ターン表示用」の部分に3と入力してください。\\ これは、3ターン目でクリアするためです。\\ よって、3-1=2ターン目が、最終ターンとなります。\\ \\ |ターン表示用|3|3ターン目でクリア。2ターン目が最終ターンとなる。| {{ https://i.imgur.com/bWEEefz.jpg }} ===== StepB15 ===== 設定ができたので、書き込みボタンを押して、書き込みましょう。\\ {{ https://i.imgur.com/XDfuN8b.jpg }} 結局設定したのは、以下の内容です。\\ |クリア条件|13A|主人公の11ターン生存| |クリア条件|124|目的:特定生存| |特殊表示|2|ターン防衛| |ターン表示用|3|3ターン目でクリア。2ターン目が最終ターンとなる。| ===== StepB16 ===== F5キーでエミュレータを起動して、動かしてみましょう。\\ ターン数が正しく表示されています。\\ {{ https://i.imgur.com/rT3fdiM.jpg }} \\ 2ターン目になると、「最終ターン」と表示されました。\\ {{ https://i.imgur.com/bhdWOCr.jpg }} \\ 完璧です。\\ これで、防衛マップを作れるようになりました。\\ ====== ボスを撃破したら、クリアになるようにするには? ====== ボスを倒すと、ボスの"死亡セリフ"が流れます。\\ このとき、指定した達成フラグがONになります。\\ GBAFEでは、通常ボス撃破では、フラグ0x02をONにするのが慣例になっています。\\ \\ 例えば、序章のオニールやブレゲのセリフはこのように設定されています。\\ このフラグを、常時条件でフックして、フラグ0x03を立てて、終了イベントを呼ぶだけです。\\ {{ https://i.imgur.com/SUKS1n4.jpg }} 余談 死亡セリフは、敵だけではなく、味方や友軍でも有効です。 これを応用すると、特定の人物が死亡したらゲームオーバーにする防衛マップを作ることもできます。 ===== 実際に"ボス撃破"でクリアを設置してみる ===== {{ https://i.imgur.com/x2wbqSN.jpg }} \\ 序章はボスを撃破すると、話が終わってしまうので、1章で作成してみます。\\ ブレゲを撃破すると同時に、終了させてみましょう。\\ ===== StepC1 ===== 1章のマップを選択してください。\\ そして、イベントをクリックします。\\ {{ https://i.imgur.com/9CwabJC.jpg }} ===== StepC2 ===== 最初は、ターン条件になっているので、上にあるコンボボックスからイベントを切り替えてください。\\ {{ https://i.imgur.com/w4PIOXK.jpg }} ===== StepC3 ===== コンボボックスから、"常時条件"を選択します。\\ {{ https://i.imgur.com/i1zkfO3.jpg }} ===== StepC4 ===== 既存の条件を書き換えてもいいのですが、今回も、新規に確保します。\\ 「リストの拡張」を選択してください。\\ {{ https://i.imgur.com/MvbMYIP.jpg }} ===== StepC5 ===== 新規に確保する件数を4件にします。\\ これは、既存で3件登録されているためです。\\ 3+1=4だからです。\\ {{ https://i.imgur.com/1GA3r9W.jpg }} \\ 件数を変更したら、「移動処理を実効する」ボタンを押してください。\\ ===== StepC6 ===== 新規に追加ものはリストの一番下に表示されています。\\ {{ https://i.imgur.com/nVF7sgr.jpg }} ===== StepC7 ===== 今回も、終了イベントを呼ぶ必要があるため、\\ 先に1章の終了イベントをメモしてください。\\ \\ 1章の終了イベントは、以下のとおりです。(画面はFE8Jです。)\\ \\ |FE8J|08A61BFC|1章終了イベント| |FE8U|089EFAC4|1章終了イベント| {{ https://i.imgur.com/3JwOEB0.jpg }} {{ https://i.imgur.com/ZkICgla.jpg }} 余談 08A61BFCの 08はポインタを意味します。 GBAでは、ROMは 0x08000000以降に配置されるためです。 ROMのアドレス+0x08000000が実行時の値になります。 GBAでは、 0x08000000 - 0x0AFFFFFF までの領域を利用できます。 つまり、 08 の他に 09 で始まるポインタもあります。 なお、FEBuilderGBAは、ポインタが設定されるべき場所では、自動的にポインタに値を変換します。 そのため、08をつけても付けなくても、どちらでも構いません。 彼は空気を読んでくれます。何も気にしなくても大丈夫です。 ===== StepC8 ===== さて、常時条件に戻って、ボス撃破時に動作するイベントを作ります。\\ ボスが死亡すると、死亡セリフが表示されます。\\ この時、フラグ02が有効になります。\\ このフラグは自由に変更できます。\\ FEでは、ボス撃破では、02が使われることが習慣になっています。\\ {{ https://i.imgur.com/SUKS1n4.jpg }} \\ そのため、これを拾う設定を作ります。\\ 以下のように設定してください。\\ \\ |発生タイプ|01|常時条件| |達成フラグ|03|制圧フラグ| |イベント|08A61BFC|1章の終了イベント(FE8J)| |判定フラグ|02|ボス撃破| {{ https://i.imgur.com/aXBcz8H.jpg }} ===== StepC9 ===== 設定ができたので、書き込みボタンを押して結果を書き込みます。\\ {{ https://i.imgur.com/Rz6BOII.jpg }} ===== StepC10 ===== F5キーを押して、エミュレータを起動して、動作を確認します。\\ {{ https://i.imgur.com/cAwbref.jpg }} ===== StepC11 ===== ブレゲを倒しましょう。\\ {{ https://i.imgur.com/6B10d8Q.jpg }} ===== StepC12 ===== ブレゲを倒すと、死亡セリフが表示されます。\\ この時、死亡セリフの達成フラグとして設定されている、フラグ02がONになります。\\ {{ https://i.imgur.com/SUKS1n4.jpg }} \\ すると、私達が先程作ったイベントの動作条件が満たされ、イベントが実行されます。\\ 私達のイベントによって、達成フラグ03がONになり、2章の終了イベントが呼ばれます。\\ ===== StepC12 ===== 終了イベントが呼び出されてクリアになりました。\\ {{ https://i.imgur.com/6lvZ1KP.jpg }} \\ これで、ボス撃破でクリアできるようになりました。\\ ===== StepC13 ===== さて、いつものやっているマップの装飾を変更しましょう。\\ {{ https://i.imgur.com/ac6otUN.jpg }} \\ 1章の設定は以下のようになっています。\\ {{ https://i.imgur.com/oYLkfcI.jpg }} \\ これを以下のように変えましょう。\\ ボス撃破というものがなかったので、序章のもので代用します。\\ 内容が気に入らない方は、テキスト編集で変更してください。\\ \\ |クリア条件|12C|ボス、オニールの撃破| |詳細クリア条件|125|目的:ボス撃破| |特殊表示|3|None(ボスを倒す)| ===== StepC14 ===== 設定をしたら、書き込みます。\\ {{ https://i.imgur.com/kKLxi8K.jpg }} ===== StepC15 ===== 書き込んだから、F5キーをおして動作を確認してください。\\ {{ https://i.imgur.com/x2wbqSN.jpg }} \\ これで、ボス撃破マップも作れるようになりました。\\ ====== 敵全滅ステージを作る ====== 敵が全滅すると、フラグ0x06が自動的にONになります。\\ このフラグ0x06を常時条件で拾って、フラグ03を有効にして、終了イベントを呼び出します。\\ (FE7ではASMイベントで実装されています。)\\ \\ 先程作った、ボス撃破でクリアは、ボス撃破の死亡セリフで有効になるボス撃破フラグ02を見ていましたが、\\ これを敵全滅フラグ06に変更すればいいだけです。\\ ===== 実際に"敵全滅"でクリアを設置してみる ===== {{ https://i.imgur.com/ZEKF47q.jpg }} 序章はマップの構造上作りにくいので、先程同様に1章で作ります。\\ 敵をすべて倒すとクリアになるようにしてみましょう。\\ ===== StepD1 ===== 1章のマップを選択してください。\\ そして、イベントをクリックします。\\ {{ https://i.imgur.com/gMk9pfw.jpg }} ===== StepD2 ===== 最初は、ターン条件になっているので、上にあるコンボボックスからイベントを切り替えてください。\\ {{ https://i.imgur.com/HUEZ6l6.jpg }} ===== StepD3 ===== コンボボックスから、"常時条件"を選択します。\\ {{ https://i.imgur.com/VqP9hmX.jpg }} ===== StepD4 ===== 今回もリストの拡張で増やしましょう。\\ (前回のイベントがある場合は、それを変更してもいいです)\\ {{ https://i.imgur.com/zOgaLnU.jpg }} ===== StepD5 ===== 終了イベントのアドレスが必要なので、メモします。\\ \\ |FE8J|08A61BFC|1章終了イベント| |FE8U|089EFAC4|1章終了イベント| {{ https://i.imgur.com/Q756uV9.jpg }} ===== StepD6 ===== さて、常時条件に戻って、敵全滅の条件を作りましょう。\\ FE8では、敵を全滅させると、フラグ06が有効になります。\\ そのため、以下のようになります。\\ \\ |発生タイプ|01|常時条件| |達成フラグ|03|制圧フラグ| |イベント|08A61BFC|1章の終了イベント(FE8J)| |判定フラグ|06|敵全滅| {{ https://i.imgur.com/9raUYfN.jpg }} ===== StepD7 ===== 書き込みボタンで書き込みましょう。\\ {{ https://i.imgur.com/AnTqiJO.jpg }} ===== StepD8 ===== ここで動作を確認してもいいのですが、どうせマップの装飾を変更する必要があるので、\\ ついでにやってしまいましょう。\\ ===== StepD9 ===== 敵全滅の場合は、以下のように設定します。\\ 敵全滅がなかったので、魔物の全滅で代用しています。気になる方は、テキストを変更してください。\\ {{ https://i.imgur.com/AnTqiJO.jpg }} ===== StepD10 ===== 書き込みボタンで書き込んでください。\\ {{ https://i.imgur.com/uJveJp3.jpg }} ===== StepD11 ===== できました。\\ さっそく、F5キーを押して結果を確かめてみましょう。\\ ===== StepD12 ===== 残りの敵数も表示されています。\\ {{ https://i.imgur.com/Kj1HODj.jpg }} \\ 敵を全員倒しましょう。\\ {{ https://i.imgur.com/ZEKF47q.jpg }} ===== StepD13 ===== 敵を全員倒すと・・・・\\ 先程の設定に従い、終了イベントが呼び出されました。\\ {{ https://i.imgur.com/hgfhxko.jpg }} \\ \\ これで、敵全滅マップも作れるようになりました。\\ {{ https://i.imgur.com/cyIi93o.jpg }} ====== 会話したら終了するステージを作ってみる ====== エイリークがゼトと会話すると終了するという不思議な条件のマップを作ってみましょう。\\ 今度は、序章で作ってみます。\\ \\ FEのクリア条件は、フラグ0x03を有効にして、終了イベントを呼ぶことですから、\\ それさえ達成できれば、どんな条件でも問題ありません。\\ ====== 実際に会話したら終了するステージを作ってみる ====== 今回は、序章で作ってみます。\\ 序章のイベント画面を開いてください。\\ {{ https://i.imgur.com/gMk9pfw.jpg }} ===== StepE2 ===== 最初は、ターン条件になっているので、上にあるコンボボックスからイベントを切り替えてください。\\ {{ https://i.imgur.com/HUEZ6l6.jpg }} ===== StepE3 ===== コンボボックスから、"会話条件"を選択します。\\ {{ https://i.imgur.com/VqP9hmX.jpg }} ===== StepE4 ===== 序章には会話イベントがないので、リストの拡張で件数を増やします。 {{ https://i.imgur.com/zOgaLnU.jpg }} ===== StepE5 ===== 発生タイプを、03=話す条件にします。 {{ https://i.imgur.com/QhQXniC.jpg }} ===== StepE6 ===== 会話条件で、エイリークが、ゼトに話しかけると、フラグ03を有効にして、終了を呼んでみましょう。\\ {{ https://i.imgur.com/Yj9XcNF.jpg }} ===== StepE5 ===== 早速動作を確認します。\\ {{ https://i.imgur.com/tXG7zyg.jpg }} \\ \\ 終了イベントが呼ばれてクリアすることができました。\\ {{ https://i.imgur.com/OTnvGay.jpg }} \\ \\ これで、私達は、FE8には存在しない終了条件を作ることが出来ました。\\ ====== イベントで制御してみよう ====== {{ https://i.imgur.com/lrfZNyw.jpg }} 今までは、達成フラグでフラグ0x03(制圧フラグ)を有効にして、クリア条件を作ってきました。\\ これは、イベントが実行される時に達成フラグが有効になるという特性を利用してきたわけです。\\ しかし、フラグを立てることは、イベント命令でも可能です。\\ イベント命令で、フラグを立てることで、もっと柔軟なイベントが作れます。\\ \\ 今回は、エイリークがゼトと会話をすると、選択肢を表示して、選択肢で「はい」と答えた場合のみクリアになるようにしてみましょう。\\ ====== 選択肢で終了できるイベントを作ってみる ====== ゼトと話すと選択子が出てきて、「はい」を選ぶとクリアになるようにしてみましょう。\\ 「はい」を選択すると、 0x03フラグを立てて、終了イベントを呼びします。\\ ===== StepF1 ===== まずは、前回同様に会話イベントを作成します。\\ イベントをクリックします。\\ {{ https://i.imgur.com/ZY404bY.jpg }} ===== StepF2 ===== イベントの種類から、会話条件を選択します。\\ {{ https://i.imgur.com/wGRJ0T1.jpg }} ===== StepF3 ===== 会話条件が0件なので増やします。\\ {{ https://i.imgur.com/kH6J9Cd.jpg }} ===== StepF4 ===== 1件だけデータを確保します。\\ {{ https://i.imgur.com/KoGtlgb.jpg }} ===== StepF5 ===== 確保したデータに、会話条件の設定を書き込みます。\\ まず、発生タイプを、03=話す条件にします。\\ {{ https://i.imgur.com/QUQLFJG.jpg }} ===== StepF6 ===== 会話で、エイリークがゼトと会話するを設定するのは前回と同じです。\\ {{ https://i.imgur.com/UWCXESi.jpg }} ===== StepF7 ===== ここから前回と違うところです。\\ 達成フラグを0のままにします。\\ なぜなら、選択肢でいいえを選んだ場合、クリアにしてはいけないためです。\\ そして、その場合、再度会話できなくてはいけません。\\ 何度もイベントを発動させるためには、達成フラグが0である必要があります。\\ {{ https://i.imgur.com/Mt1F747.jpg }} ===== StepF8 ===== 会話した時にイベントを動作させるために、新規イベントボタンを押して、イベントの領域を確保します。\\ {{ https://i.imgur.com/ebVb19k.jpg }} ===== StepF9 ===== 「はい」を押して、領域を割り当てます。\\ {{ https://i.imgur.com/KUdQB2P.jpg }} ===== StepF10 ===== イベントを割り振りました。\\ イベントボタンを押すと、イベントスクリプトを書くことが出来ます。\\ {{ https://i.imgur.com/GeENscy.jpg }} ===== StepF11 ===== イベントエディタを起動しました。\\ イベントエディタを起動したら、余白の部分をダブルクリックします。\\ すると、コントロールパネルが登場します。\\ ===== StepF12 ===== 命令変更ボタンをクリックします。\\ {{ https://i.imgur.com/LDU9RyU.jpg }} ===== StepF13 ===== まずは、テキストを出したいので、「システムメッセージ表示イベント」を選択します。\\ {{ https://i.imgur.com/aqDqW5u.jpg }} ===== StepF14 ===== テキスト領域は、どこか空いている所を使います。\\ 今回は、辞書領域を勝手に使うことにしました。\\ {{ https://i.imgur.com/5OKL8FH.jpg }} ===== StepF15 ===== 以下のように書きます。@0018が選択肢です。\\ 次のステージに進みますか? @0018 {{ https://i.imgur.com/xH3Sk9O.jpg }} 変更します。\\ {{ https://i.imgur.com/hqFtCAk.jpg }} 変更した内容を書き込みます。\\ {{ https://i.imgur.com/upOH6eI.jpg }} ===== StepF16 ===== 左側のリストをダブルクリックすると、元の画面に戻れます。\\ ダブルクリックした、テキストIDが自動的に入力されます。\\ {{ https://i.imgur.com/ZYaW0fD.jpg }} ===== StepF17 ===== 変更ボタンを押します。\\ {{ https://i.imgur.com/UaFQM6G.jpg }} ===== StepF18 ===== システムメッセージが入りました。\\ {{ https://i.imgur.com/vrLChKw.jpg }} 注意 選択肢を出すと出すときは、システムメッセージか、背景なし会話を利用してください。 背景付きの会話イベントを利用すると、会話が終わり背景を消す時に選択肢で選ばれたデータが消えます。 どうしても、背景を出したい場合は、先に背景を変更した後で、背景なし会話イベントを利用してください。 ===== StepF19 ===== 選ばれた選択肢を見る条件を作ります。\\ \\ 前回同様に、余白をダブルクリックしてください。\\ コントロールパネルが表示されます。\\ 命令変更を選択肢ます。\\ {{ https://i.imgur.com/zG2pxcg.jpg }} ===== StepF20 ===== カテゴリの「VAL」を選択します。\\ {{ https://i.imgur.com/MKbqrWA.jpg }} ===== StepF21 ===== 「SVAL」を選択します。\\ {{ https://i.imgur.com/OHP5NDW.jpg }} ===== StepF22 ===== 以下のように設定します。\\ |MemorySlot|7| |Value_to_store|1| \\ メモリスロット7に1を代入します。\\ 比較対象のメモリスロットとして利用します。\\ {{ https://i.imgur.com/1baC2IH.jpg }} ===== StepF23 ===== 設定したら、新規挿入ボタンを押します。\\ 注意:更新ボタンではなく、新規挿入ボタンです。そうしないと、先程作った命令を上書きします。\\ {{ https://i.imgur.com/j4tbAcj.jpg }} ===== StepF24 ===== 比較用の命令を作ります。\\ \\ 同じく、余白をダブルクリックして、コントロールパネルを出します。\\ 命令変更ボタンを押してください。\\ {{ https://i.imgur.com/Hd7Erej.jpg }} ===== StepF25 ===== カテゴリから「分岐」を選択して、「BNE」を選択肢てください。\\ (直前の条件式の結果を参照する方でも構いません。0x0Cが最初から代入されているかどうかの違いです)\\ {{ https://i.imgur.com/8jPSeAt.jpg }} ===== StepF26 ===== 以下のように入力します。\\ |条件ID|0|BNEが成立したら飛ぶ条件ラベルです| |MemorySlot1|C|選択肢の結果が代入されます| |MemorySlot1|7|先程1を代入したものです| {{ https://i.imgur.com/3dKzszO.jpg }} ===== StepF27 ===== 「新規挿入」をクリックして追加してください。\\ {{ https://i.imgur.com/VLGZy1y.jpg }} ===== StepF28 ===== 次の命令を入れます。\\ 余白をダブルクリックして、命令変更を選択してください。\\ {{ https://i.imgur.com/9EhSuja.jpg }} ===== StepF29 ===== カテゴリの「フラグ」を選択して、「フラグON」を選択します。\\ {{ https://i.imgur.com/OS3oWfW.jpg }} ===== StepF30 ===== フラグ3をONにするようにします。\\ |Flag|3|制圧フラグ| {{ https://i.imgur.com/58jhutG.jpg }} ===== StepF31 ===== 「新規挿入」をクリックして追加してください。\\ {{ https://i.imgur.com/UPKS9HE.jpg }} ===== StepF32 ===== 同様に余白をクリックして、命令変更を押してください。\\ {{ https://i.imgur.com/QBMPs7e.jpg }} ===== StepF32 ===== カテゴリの「サブルーチン」を選択して、「イベントを呼び出す」を選択します。\\ {{ https://i.imgur.com/3nU4tfn.jpg }} ===== StepF33 ===== 序章の終了イベントを書きます。(画面はFE8Jのものです。)\\ |FE8J|08A6129C|序章終了イベント| |FE8U|089EF164|序章終了イベント| この値は、ポインタを設定するべき値ですが、FEBuilderGBAが自動的に解決するので、 08A6129Cでも、A6129Cでも、どちらでも問題ありません。 {{ https://i.imgur.com/b97QwUz.jpg }} ===== StepF34 ===== 「新規挿入」をクリックして追加してください。\\ {{ https://i.imgur.com/veKC3Fd.jpg }} ===== StepF35 ===== 同様に余白をクリックして、命令変更を押してください。\\ (これで最後です)\\ {{ https://i.imgur.com/zb3lTZK.jpg }} ===== StepF36 ===== カテゴリの「分岐」を選択して、「LABEL」を選択します。\\ {{ https://i.imgur.com/PjZN5Rw.jpg }} ===== StepF37 ===== 条件IDを0にしてください。\\ |条件ID|0| 値を設定したら、「新規挿入」をクリックして追加してください。\\ {{ https://i.imgur.com/ez145kx.jpg }} ===== StepF38 ===== これで完成です。\\ \\ {{ https://i.imgur.com/famyKti.jpg }} \\ 選択肢で選んだ内容がメモリスロットCに代入されます。\\ その値を、1を代入したメモリスロット7と比較します。\\ もし、選択肢の結果が、1だったら、フラグ03を有効にして、終了イベントを呼び出します。(章を終了させます。)\\ もし、選択肢の結果が、1ではなかったら、LABELにジャンプします。(フラグを立てる部分を飛び越します。)\\ ===== StepF39 ===== 「書き込み」ボタンを押して書き込んでください。\\ {{ https://i.imgur.com/hEyO84H.jpg }} ===== StepF40 ===== さっそくF5キーを押して、エミュレータを起動して、動作を確認してみます。\\ エイリークがゼトと、話すと・・・\\ {{ https://i.imgur.com/LeQITQr.jpg }} \\ \\ 「次のステージに進みますか?」という質問が表示されます。\\ {{ https://i.imgur.com/lrfZNyw.jpg }} \\ \\ 「はい」を選択すると、章クリアになります。\\ {{ https://i.imgur.com/RMI5WXv.jpg }} \\ \\ 「いいえ」を選択すると、そのまま章が続行します。\\ {{ https://i.imgur.com/Bvk40yk.jpg }} {{ https://i.imgur.com/WGSTYF1.jpg }} \\ \\ もちろん、次のターンにもう一度話すこともできます。\\ ===== StepF41 ===== イベントで、終了条件を作る方法を理解できましたか?\\ \\ イベントでフラグを立てる方法を理解したら、なんでも出来ます。\\ パッチでは、さまざなまものを条件として利用できる拡張が作られています。\\ \\ FE5のように離脱させる。\\ 特定金額をもっているか判定する。\\ 特定アイテムを所持しているか判定する。\\ 特定のタイル変化を起こすとフラグが有効になる。\\ \\ さまざまな条件が用意されています。\\ \\ GBAFEで、クリアとは、フラグ0x03フラグ(制圧フラグ)を立てて、終了イベントを呼び出すことです。\\ この条件さえ守ればいいので、いろいろな勝利条件を作ることができるでしょう。\\ また、複数の勝利条件を作ることも出来ます。\\ あとは、貴方の発想力次第です。\\ ====== ゲームオーバー条件 ====== {{ https://i.imgur.com/Cet7tvh.jpg }} \\ ゲームオーバーが呼び出される条件は、フラグ0x65(GameOver)を立てて、ゲームオーバーイベントを呼び出すことです。\\ \\ 例えば、メインユニットが死亡すると、フラグ0x65が有効になります。\\ そして、フラグ0x65が有効になると、ゲームオーバーイベントが発生します。\\ そのため、ゲームオーバーにさせるには、フラグ0x65を有効にする必要があります。\\ \\ ====== 特定ターンが過ぎたら、ゲームオーバーになるイベントを作ってみましょう。 ====== クリアフラグ同様に、ゲームオーバー条件もとても簡単です。\\ フラグ0x65を有効にして、ゲームオーバーイベントを呼び出すだけです。\\ そのため、さまざまなゲームオーバー条件を作ることが出来ます。\\ ===== StepG1 ===== "イベント"をクリックします。\\ {{ https://i.imgur.com/U53MCuC.jpg }} ===== StepG3 ===== ゲームオーバーイベントは、常時条件に定義されています。\\ 確認してみましょう。\\ {{ https://i.imgur.com/QQyNr0Q.jpg }} ===== StepG4 ===== これがゲームオーバーイベントです。 イベントのアドレスをメモしておきましょう。(画面はFE8Jのものです)\\ |FE8J|85B9EE8|ゲームオーバーイベント| |FE8U|8592104|ゲームオーバーイベント| {{ https://i.imgur.com/W4KpKPF.jpg }} ===== StepG5 ===== では、ターン条件に戻ります。\\ 特定ターンになったら、ゲームオーバーイベントを呼んで、ゲームオーバーになるようにしてみましょう。\\ {{ https://i.imgur.com/vRwkkRW.jpg }} ===== StepG6 ===== ゲームオーバーを実行するターン命令を記述する部分を増やすために、リストの拡張を行います。\\ {{ https://i.imgur.com/tWOd1f8.jpg }} ===== StepG7 ===== 確保するデータ件数を5件にします。\\ 既存のターンイベントが4つあり、そこに新たに1件確保するため、1+4=5になるためです。\\ \\ 件数を変更したら、「移動処理を実行する」ボタンを押してください。\\ {{ https://i.imgur.com/PpnC6X5.jpg }} ===== StepG8 ===== 新規に確保した命令は、一番下に追加されています。\\ 一番下にある、新規に確保した命令を選択します。\\ {{ https://i.imgur.com/N6mKePz.jpg }} ===== StepG9 ===== 以下のように設定します。\\ |発生タイプ|2|2ターン条件| |達成フラグ|65|GameOver| |ターン前指定|0|主人公ターン| 今回は、3ターン目になったらゲームオーバーになるようにしてみます。\\ |開始ターン|3| |終了ターン|3| {{ https://i.imgur.com/f5OcPM9.jpg }} \\ \\ そして、イベントに、先程メモしたゲームオーバーイベントのアドレスを書きます。\\ |FE8J|85B9EE8|ゲームオーバーイベント| |FE8U|8592104|ゲームオーバーイベント| {{ https://i.imgur.com/0civxn3.jpg }} ===== StepG10 ===== これでイベントは完成です。\\ 以下のように設定しました。\\ |発生タイプ|2|2ターン条件| |達成フラグ|65|GameOver| |イベント|85B9EE8|FE8Jのゲームオーバーイベント| |開始ターン|3|3ターン目に実行する| |終了ターン|3| |ターン前指定|0|主人公ターン| {{ https://i.imgur.com/LzTktyj.jpg }} ===== StepG11 ===== 書き込みボタンを押して結果を書き込みます。\\ {{ https://i.imgur.com/EenNaYJ.jpg }} \\ \\ これで動作するのですが、画面の装飾も定義してみます。\\ 最初の画面に戻って、「マップ設定」を選択してください。\\ {{ https://i.imgur.com/yfGJh9Y.jpg }} ===== StepG12 ===== 以下のように設定します。\\ |特殊表示|2=ターン防衛| |ターン数表示用|3|3-1=2ターン目が最終ターン| {{ https://i.imgur.com/zFvHajz.jpg }} ===== StepG13 ===== 書き込みボタンを押して、書き込んでください。\\ {{ https://i.imgur.com/mcEslPH.jpg }} ===== StepG14 ===== 設定が出来たので、F5キーを押して、エミュレータを起動してください。\\ {{ https://i.imgur.com/MFREiIq.jpg }} ===== StepG15 ===== オニールを倒さずに放置していると、最終ターンになり・・・・\\ {{ https://i.imgur.com/DgNEr1J.jpg }} ===== StepG16 ===== 3ターン目に、ゲームオーバーになりました。\\ {{ https://i.imgur.com/Cet7tvh.jpg }} ===== StepG17 ===== 動作はしましたが、ゲームオーバーがあまりに唐突です。\\ 「しまった。遅すぎた」などのセリフを出した後でゲームオーバーになるようにしてみましょう。\\ ===== StepG18 ===== 先程作ったターン条件で、イベントの部分に0を入れてください。\\ {{ https://i.imgur.com/ciy1tQY.jpg }} ===== StepG19 ===== すると、新規イベントというボタンが表示されます。\\ このボタンをクリックして、セリフを表示するイベントを作ります。\\ {{ https://i.imgur.com/vqOkr7z.jpg }} ===== StepG20 ===== 領域を割り当てます。\\ {{ https://i.imgur.com/oXxyJ28.jpg }} ===== StepG21 ===== イベントの部分をクリックすると、新規に確保した、イベント領域にジャンプできます。\\ {{ https://i.imgur.com/7vD3q6v.jpg }} ===== StepG22 ===== ここに、ゲームオーバー時の演出を書いていきます。\\ {{ https://i.imgur.com/zCSzX87.jpg }} ===== StepG23 ===== 余白をクリックすると、コントロールパネルが表示されます。\\ 命令変更ボタンをクリックしてください。\\ {{ https://i.imgur.com/gcH2q59.jpg }} ===== StepG24 ===== 「会話イベント」を選択します。\\ {{ https://i.imgur.com/q7sOtqv.jpg }} ===== StepG25 ===== 「しまった。遅すぎた」というセリフを作る文字列を指定します。\\ 今回は、辞書領域を潰してその上に作ります。\\ {{ https://i.imgur.com/edZoLhh.jpg }} ===== StepG26 ===== テキストのリンクかから、文字列に飛びます。\\ {{ https://i.imgur.com/SEa1HoU.jpg }} ===== StepG27 ===== 「簡易」を選択してください。 そして、セリフという項目をダブルクリックしてください。\\ {{ https://i.imgur.com/C8okBcc.jpg }} ===== StepG28 ===== 「キャラ登場」を選択してください。 今回は、エイリークを左中の位置に表示します。\\ 設定したら、「変更」ボタンを押してください。\\ {{ https://i.imgur.com/X51MnMd.jpg }} ===== StepG29 ===== 再度、余白をクリックして、今度は、左中に設置したエイリークがしゃべるセリフを書きます。\\ 「しまった。遅すぎた。@0003」\\ {{ https://i.imgur.com/KmB4HpB.jpg }} ===== StepG30 ===== 「新規追加」ボタンを押して追加してください。\\ {{ https://i.imgur.com/EtuJEyv.jpg }} ===== StepG31 ===== これで完成です。 書き込みボタンを押して、結果を書き込んでください。\\ {{ https://i.imgur.com/OeTal5E.jpg }} ===== StepG32 ===== ちなみに、簡易メニューを使って書いたスクリプトは以下のようなります。\\ 簡易メニューを利用しないで、手で書く場合は、この内容を書いてください。\\ {{ https://i.imgur.com/n5vkMdq.jpg }} ===== StepG33 ===== 現在編集している文字列IDをダブルクリックしてください。\\ そうすると、元のイベント編集に戻ります。\\ {{ https://i.imgur.com/J9lsDAD.jpg }} ===== StepG34 ===== 先程設定した会話の内容が入っています。\\ 変更ボタンを押して、命令をリストに追記してください。\\ {{ https://i.imgur.com/BS4zOcU.jpg }} ===== StepG35 ===== 次の命令を書きます。 同様に余白をクリックしてコントロールパネルを出してください。\\ コントロールパネルの命令変更をクリックしてください。\\ {{ https://i.imgur.com/Hlnf9sS.jpg }} ===== StepG36 ===== カテゴリの「フラグ」から、「フラグON」を選択します。\\ {{ https://i.imgur.com/IQte3iX.jpg }} ===== StepG37 ===== フラグ65 ゲームオーバーフラグを設定します。\\ \\ |Flag|65|ゲームオーバー| {{ https://i.imgur.com/PMxfVcd.jpg }} ===== StepG38 ===== 新規挿入ボタンをクリックして追加してください。\\ {{ https://i.imgur.com/qxJCUVO.jpg }} ===== StepG39 ===== 次の命令を定義します。 同様に余白を追加して、命令変更ボタンを押してください。\\ ===== StepG40 ===== カテゴリの「サブルーチン」から、「イベントを呼び出す」を選択してください。\\ {{ https://i.imgur.com/F2I4MNs.jpg }} ===== StepG41 ===== 呼び出すイベントにゲームオーバーイベントを設定します。\\ |FE8J|85B9EE8|ゲームオーバーイベント| |FE8U|8592104|ゲームオーバーイベント| {{ https://i.imgur.com/dMpcGnv.jpg }} ===== StepG42 ===== 新規挿入ボタンをクリックして追加してください。\\ {{ https://i.imgur.com/mFgGwxw.jpg }} ===== StepG43 ===== これで完成です。\\ {{ https://i.imgur.com/yh1MtZf.jpg }} ===== StepG44 ===== 「書き込み」ボタンを押して、内容を書き込んでください。\\ {{ https://i.imgur.com/2S3y7Kj.jpg }} ===== StepG45 ===== 設定が出来たので、F5キーを押して、エミュレータを起動してください。\\ 最終ターンを超えると・・・・ \\ {{ https://i.imgur.com/mF8a4n3.jpg }} \\ \\ \\ セリフが表示され、\\ {{ https://i.imgur.com/XvgdSbF.jpg }} \\ \\ GAMEOVERになりました。\\ {{ https://i.imgur.com/X1p5eus.jpg }} \\ \\ ====== 応用 ====== 以上で完了です。\\ 私たちは、ゲームオーバーイベントも作ることが出来ました。\\ これを応用すると、いろいろなステージを作ることが出来ます。\\ ===== ユニット防衛 ===== 特定のユニットを守らないといけないマップです。\\ そのキャラが死亡すると、ゲームオーバーにします。\\ \\ ユニットが死亡すると、死亡セリフが表示されます。\\ 死亡セリフが実行されると、指定したフラグが有効になります。\\ このフラグを常時条件で拾うことで、イベントを作れます。\\ (ボス撃破のクリア条件の応用です)\\ ===== 拠点防衛 ===== 玉座や村を守らないといけないイベントです。\\ 常時条件の範囲条件で作成することができます。\\ \\ 敵を拠点に引き寄せるには、AIの拠点へ移動させる命令を使う必要があります。\\ FE8では、ディフォルトで1つしか用意されていないので、複数作りたい場合は、"AI"メニューから増やす必要があります。\\ その他、特定の人物がその場所にいないと、ゲームオーバーにする。\\ 特定の人物がその場所にいると、ゲームオーバーにするなど、さまざまな応用が考えられます。\\ だからといって、何か間違うと即死するようなゲームを作ると、ゲームとして面白くないかもしれません。\\ 面白い方法を考えてみてください。\\ 後は、あなたの発想力しだいです。\\ ====== おしまい ====== 以上で、勝利条件、及び、敗北条件の設定方法の説明を終わります。\\ 簡単なものから、複雑なものまでいろいろなものがあります。\\ しかし、基本的に大切なのは、1つだけです。\\ 勝利条件を作りたい場合は、フラグ03を立てて、終了イベント呼ぶことです。\\ 敗北条件を作りたい場合は、フラグ65を立てて、ゲームオーバーイベントを呼ぶことです。\\ これだけ理解していれば、さまざなものを作ることができるでしょう。\\ \\ 頑張って面白いステージを作ってください。\\