GBAFEで、クリアとは、フラグ0x03フラグ(制圧フラグ)を立てて、終了イベントを呼び出すことです。
逆に言えば、0x03フラグを立てて、終了イベントを呼びだしさえすれば、章をクリアできます。
そのため、さまざなま章クリア条件を作ることが出来ます。
また、複数のクリア条件を作ることも出来ます。
0x03フラグを立てないで、終了イベントを呼ぶこともできますが、クリアターン数が記録されないなどの問題があることがあります。
必ず、フラグ0x03を立ててから、終了イベントを呼び出すことをお勧めします。
ロードユニットが、制圧拠点に入ると、制圧メニューが出ます。
そして、制圧を選択すると、ステージクリアになります。
FE1から存在する古典的なクリア方法です。
制圧メニューを出させるには、イベント-マップオブジェクトで制圧拠点を設定する必要があります。
制圧ポイントは城門などに設定されることが多いですが、どんなマップタイルにも設置することができます。
だからといって、草原の真ん中においていたら、プレイヤーは気が付かないと思いますので、目立つマークがある場所に設定しましょう。
これで設定は完了です。
上から確認してみましょう。
以下のように設定しました。
発生タイプ | 05=制圧ポイントと民家 | |
達成フラグ | 03 | (制圧フラグ) |
イベント | 1 | ダミーイベント |
座標 | 1,0 | 橋を渡りきった対岸 |
種類 | 11=制圧 |
なぜこれでクリアできるのでしょうか?
それは、フラグ0x03が有効な状態で、キャラクタが待機したためです。
フラグ0x03が有効な状態で、キャラクターを待機させると、ゲームシステムは、自動的に、終了イベントが呼び出されます。
制圧イベントでは、ダミーイベント 0x01 を指定しました。
そのため、制圧を選択肢ても、イベントは何も実行されません。
しかし、達成フラグ0x03を有効にするように設定しました。
達成フラグは、イベントが達成したときにONになるフラグです。
そのため、制圧を選んだことで、このマップオブジェクトを動作させる条件が達成しました。
イベント条件が達成したため、達成フラグが評価されます。
今、ステージをクリアしようとしているため、まだ0x03制圧フラグはまだ有効になっていません。
そのため、このイベントは動作します。
条件が達成され、イベントが動作するため、達成フラグ 0x03は有効になります。
そして、イベント0x01が動作しました。
イベント0x01は何もしないダミーイベントです。
特に何もしません。
そのため、結果的に、このイベントでは、フラグ0x03が有効になっただけです。
さて、制圧を選んだことで、そのユニットは待機状態に移行しました。
これで、フラグ0x03が有効になって、ユニットが待機するという条件を満たしました。
そのため、ゲームシステムは、自動的に、終了イベントを呼び出します。
終了イベントには、次の章へ進むようにイベント命令が書かれているため、
この章をクリアして、次の章へ進むことが出来ました。
これで制圧で、クリアできるようになりました。
しかし、画面の表示は、「ボス撃破」のままです。
この値を制圧に書き換えましょう。
値を変えてみましょう。
「城門の制圧」という文字列があるので、それを利用します。
以下のように変更しました。
クリア条件 | 12D | 城門の制圧 |
詳細クリア条件 | 127 | 目的:城門の制圧 |
特殊表示 | 00 | None(制圧) |
特定ターン防衛するようなステージを考えてみましょう。
前回説明した制圧ポイントの作り方を理解しているならば、作るのは簡単です。
ターン条件を利用して、特定ターンになったら フラグを0x03を有効にして、終了イベントを呼んであげればいいのです。
ディフォルトは、ターン条件になっていると思います。
そのままで問題ないです。
ただ、一応確認してください。
ターン条件になっていることを確認したら、ここにイベントを書き込みます。
既存のターン条件を潰してもいいです。
ただ、今回は、新規にデータを確保して作ってみましょう。
「リストの拡張」ボタンを押してください。
前回の制圧条件で、詳細に説明したので、今回は、一気に説明します。
以下の様に設定してみてください。
発生タイプ | 2 | 2ターン条件 |
達成フラグ | 3 | 制圧フラグ |
ターン前指定 | 0 | 主人公ターン |
開始ターン | 3 |
終了ターン | 0 |
余談ですが、 ターン条件は、開始ターンから、終了ターンの間、ずっと実行されますが、 終了ターンを0にすると、開始ターンだけイベントを実行することが出来ます。 (達成フラグが設定されているため、どちらにせよ、開始ターンにしか動きません。)
そして、F5キーを押してゲームを開始してください。
これでターン経過したら、このイベントが呼ばれてクリアになる・・・・と思ったら間違いです。
実際に動作させてみましょう。
あれ・・・・?
4ターン目になってしまいました。
いつまで待ってもクリアイベントが動作しません。
不思議です。
イベントが無視されたのでしょうか?
そうではありません。
イベントは実行され、フラグ0x03は有効になっています。
ユニットを待機させてみてください。
ステージクリアできます。
なぜこうなってしまったのか?
それは、フラグ0x03が有効な状態で、キャラクタが待機すると、ゲームシステムが自動的に終了イベントを呼び出すという仕様のためです。
ユニットを待機させずに、ターン終了を選んだだけでは、ユニットは待機していません。
そのため、“フラグ0x03が有効な状態で、キャラクタが待機する”という条件を満たせません。
そのため、上手く動作しません。
では、どうすればいいのか?
終了イベントを自分で呼び出せばいいのです。
システムが呼び出してくれないなら、手動で呼び出せばいいのです。
イベントをダミーイベントの0x01から、終了イベントにかかれているアドレスに変更します。
終了イベントは、右上のコンボボックスの一番下に、あります。
これが終了イベントが書かれている領域です。(画面はFE8Jです)
このアドレスをメモして、私達の終了イベントに記載すればいいのです。
FE8J | 08A6129C | 序章終了イベント |
FE8U | 089EF164 | 序章終了イベント |
設定ができたので、保存します。
さて、F5キーでエミュレータを起動してください。
そして、序章を最初からやり直してみてください。
現在2ターン目です。
ここで待機すると・・・・
今度は、3ターンになった瞬間に、終了イベントが表示されました。
上手く動作しました。
制圧の時と基本的同じです。
マップ上で、クリア条件を表示しているのは、この部分になります。
クリア条件 | 13A | 主人公の11ターン生存 ターン防衛という文字列がなかったので代替品として使う |
クリア条件 | 124 | 目的:特定生存 |
特殊表示 | 2 | ターン防衛 |
そしてもう一つ。
「特殊表示」で、ターン防衛を選んだ場合、最終ターンを表示する部分の設定があります。
「ターン表示用」の部分に3と入力してください。
これは、3ターン目でクリアするためです。
よって、3-1=2ターン目が、最終ターンとなります。
ターン表示用 | 3 | 3ターン目でクリア。2ターン目が最終ターンとなる。 |
設定ができたので、書き込みボタンを押して、書き込みましょう。
結局設定したのは、以下の内容です。
クリア条件 | 13A | 主人公の11ターン生存 |
クリア条件 | 124 | 目的:特定生存 |
特殊表示 | 2 | ターン防衛 |
ターン表示用 | 3 | 3ターン目でクリア。2ターン目が最終ターンとなる。 |
F5キーでエミュレータを起動して、動かしてみましょう。
ターン数が正しく表示されています。
2ターン目になると、「最終ターン」と表示されました。
完璧です。
これで、防衛マップを作れるようになりました。
ボスを倒すと、ボスの“死亡セリフ”が流れます。
このとき、指定した達成フラグがONになります。
GBAFEでは、通常ボス撃破では、フラグ0x02をONにするのが慣例になっています。
例えば、序章のオニールやブレゲのセリフはこのように設定されています。
このフラグを、常時条件でフックして、フラグ0x03を立てて、終了イベントを呼ぶだけです。
余談 死亡セリフは、敵だけではなく、味方や友軍でも有効です。 これを応用すると、特定の人物が死亡したらゲームオーバーにする防衛マップを作ることもできます。
今回も、終了イベントを呼ぶ必要があるため、
先に1章の終了イベントをメモしてください。
1章の終了イベントは、以下のとおりです。(画面はFE8Jです。)
FE8J | 08A61BFC | 1章終了イベント |
FE8U | 089EFAC4 | 1章終了イベント |
余談 08A61BFCの 08はポインタを意味します。 GBAでは、ROMは 0x08000000以降に配置されるためです。 ROMのアドレス+0x08000000が実行時の値になります。 GBAでは、 0x08000000 - 0x0AFFFFFF までの領域を利用できます。 つまり、 08 の他に 09 で始まるポインタもあります。 なお、FEBuilderGBAは、ポインタが設定されるべき場所では、自動的にポインタに値を変換します。 そのため、08をつけても付けなくても、どちらでも構いません。 彼は空気を読んでくれます。何も気にしなくても大丈夫です。
さて、常時条件に戻って、ボス撃破時に動作するイベントを作ります。
ボスが死亡すると、死亡セリフが表示されます。
この時、フラグ02が有効になります。
このフラグは自由に変更できます。
FEでは、ボス撃破では、02が使われることが習慣になっています。
そのため、これを拾う設定を作ります。
以下のように設定してください。
発生タイプ | 01 | 常時条件 |
達成フラグ | 03 | 制圧フラグ |
イベント | 08A61BFC | 1章の終了イベント(FE8J) |
判定フラグ | 02 | ボス撃破 |
ブレゲを倒すと、死亡セリフが表示されます。
この時、死亡セリフの達成フラグとして設定されている、フラグ02がONになります。
すると、私達が先程作ったイベントの動作条件が満たされ、イベントが実行されます。
私達のイベントによって、達成フラグ03がONになり、2章の終了イベントが呼ばれます。
さて、いつものやっているマップの装飾を変更しましょう。
1章の設定は以下のようになっています。
これを以下のように変えましょう。
ボス撃破というものがなかったので、序章のもので代用します。
内容が気に入らない方は、テキスト編集で変更してください。
クリア条件 | 12C | ボス、オニールの撃破 |
詳細クリア条件 | 125 | 目的:ボス撃破 |
特殊表示 | 3 | None(ボスを倒す) |
敵が全滅すると、フラグ0x06が自動的にONになります。
このフラグ0x06を常時条件で拾って、フラグ03を有効にして、終了イベントを呼び出します。
(FE7ではASMイベントで実装されています。)
先程作った、ボス撃破でクリアは、ボス撃破の死亡セリフで有効になるボス撃破フラグ02を見ていましたが、
これを敵全滅フラグ06に変更すればいいだけです。
さて、常時条件に戻って、敵全滅の条件を作りましょう。
FE8では、敵を全滅させると、フラグ06が有効になります。
そのため、以下のようになります。
発生タイプ | 01 | 常時条件 |
達成フラグ | 03 | 制圧フラグ |
イベント | 08A61BFC | 1章の終了イベント(FE8J) |
判定フラグ | 06 | 敵全滅 |
ここで動作を確認してもいいのですが、どうせマップの装飾を変更する必要があるので、
ついでにやってしまいましょう。
できました。
さっそく、F5キーを押して結果を確かめてみましょう。
エイリークがゼトと会話すると終了するという不思議な条件のマップを作ってみましょう。
今度は、序章で作ってみます。
FEのクリア条件は、フラグ0x03を有効にして、終了イベントを呼ぶことですから、
それさえ達成できれば、どんな条件でも問題ありません。
今までは、達成フラグでフラグ0x03(制圧フラグ)を有効にして、クリア条件を作ってきました。
これは、イベントが実行される時に達成フラグが有効になるという特性を利用してきたわけです。
しかし、フラグを立てることは、イベント命令でも可能です。
イベント命令で、フラグを立てることで、もっと柔軟なイベントが作れます。
今回は、エイリークがゼトと会話をすると、選択肢を表示して、選択肢で「はい」と答えた場合のみクリアになるようにしてみましょう。
ゼトと話すと選択子が出てきて、「はい」を選ぶとクリアになるようにしてみましょう。
「はい」を選択すると、 0x03フラグを立てて、終了イベントを呼びします。
ここから前回と違うところです。
達成フラグを0のままにします。
なぜなら、選択肢でいいえを選んだ場合、クリアにしてはいけないためです。
そして、その場合、再度会話できなくてはいけません。
何度もイベントを発動させるためには、達成フラグが0である必要があります。
イベントエディタを起動しました。
イベントエディタを起動したら、余白の部分をダブルクリックします。
すると、コントロールパネルが登場します。
注意 選択肢を出すと出すときは、システムメッセージか、背景なし会話を利用してください。 背景付きの会話イベントを利用すると、会話が終わり背景を消す時に選択肢で選ばれたデータが消えます。 どうしても、背景を出したい場合は、先に背景を変更した後で、背景なし会話イベントを利用してください。
序章の終了イベントを書きます。(画面はFE8Jのものです。)
FE8J | 08A6129C | 序章終了イベント |
FE8U | 089EF164 | 序章終了イベント |
この値は、ポインタを設定するべき値ですが、FEBuilderGBAが自動的に解決するので、 08A6129Cでも、A6129Cでも、どちらでも問題ありません。
これで完成です。
選択肢で選んだ内容がメモリスロットCに代入されます。
その値を、1を代入したメモリスロット7と比較します。
もし、選択肢の結果が、1だったら、フラグ03を有効にして、終了イベントを呼び出します。(章を終了させます。)
もし、選択肢の結果が、1ではなかったら、LABELにジャンプします。(フラグを立てる部分を飛び越します。)
さっそくF5キーを押して、エミュレータを起動して、動作を確認してみます。
エイリークがゼトと、話すと・・・
「次のステージに進みますか?」という質問が表示されます。
「はい」を選択すると、章クリアになります。
「いいえ」を選択すると、そのまま章が続行します。
もちろん、次のターンにもう一度話すこともできます。
イベントで、終了条件を作る方法を理解できましたか?
イベントでフラグを立てる方法を理解したら、なんでも出来ます。
パッチでは、さまざなまものを条件として利用できる拡張が作られています。
FE5のように離脱させる。
特定金額をもっているか判定する。
特定アイテムを所持しているか判定する。
特定のタイル変化を起こすとフラグが有効になる。
さまざまな条件が用意されています。
GBAFEで、クリアとは、フラグ0x03フラグ(制圧フラグ)を立てて、終了イベントを呼び出すことです。
この条件さえ守ればいいので、いろいろな勝利条件を作ることができるでしょう。
また、複数の勝利条件を作ることも出来ます。
あとは、貴方の発想力次第です。
ゲームオーバーが呼び出される条件は、フラグ0x65(GameOver)を立てて、ゲームオーバーイベントを呼び出すことです。
例えば、メインユニットが死亡すると、フラグ0x65が有効になります。
そして、フラグ0x65が有効になると、ゲームオーバーイベントが発生します。
そのため、ゲームオーバーにさせるには、フラグ0x65を有効にする必要があります。
クリアフラグ同様に、ゲームオーバー条件もとても簡単です。
フラグ0x65を有効にして、ゲームオーバーイベントを呼び出すだけです。
そのため、さまざまなゲームオーバー条件を作ることが出来ます。
以下のように設定します。
発生タイプ | 2 | 2ターン条件 |
達成フラグ | 65 | GameOver |
ターン前指定 | 0 | 主人公ターン |
今回は、3ターン目になったらゲームオーバーになるようにしてみます。
開始ターン | 3 |
終了ターン | 3 |
そして、イベントに、先程メモしたゲームオーバーイベントのアドレスを書きます。
FE8J | 85B9EE8 | ゲームオーバーイベント |
FE8U | 8592104 | ゲームオーバーイベント |
これでイベントは完成です。
以下のように設定しました。
発生タイプ | 2 | 2ターン条件 |
達成フラグ | 65 | GameOver |
イベント | 85B9EE8 | FE8Jのゲームオーバーイベント |
開始ターン | 3 | 3ターン目に実行する |
終了ターン | 3 | |
ターン前指定 | 0 | 主人公ターン |
動作はしましたが、ゲームオーバーがあまりに唐突です。
「しまった。遅すぎた」などのセリフを出した後でゲームオーバーになるようにしてみましょう。
次の命令を定義します。
同様に余白を追加して、命令変更ボタンを押してください。
以上で完了です。
私たちは、ゲームオーバーイベントも作ることが出来ました。
これを応用すると、いろいろなステージを作ることが出来ます。
特定のユニットを守らないといけないマップです。
そのキャラが死亡すると、ゲームオーバーにします。
ユニットが死亡すると、死亡セリフが表示されます。
死亡セリフが実行されると、指定したフラグが有効になります。
このフラグを常時条件で拾うことで、イベントを作れます。
(ボス撃破のクリア条件の応用です)
玉座や村を守らないといけないイベントです。
常時条件の範囲条件で作成することができます。
敵を拠点に引き寄せるには、AIの拠点へ移動させる命令を使う必要があります。
FE8では、ディフォルトで1つしか用意されていないので、複数作りたい場合は、“AI”メニューから増やす必要があります。
その他、特定の人物がその場所にいないと、ゲームオーバーにする。
特定の人物がその場所にいると、ゲームオーバーにするなど、さまざまな応用が考えられます。
だからといって、何か間違うと即死するようなゲームを作ると、ゲームとして面白くないかもしれません。
面白い方法を考えてみてください。
後は、あなたの発想力しだいです。
以上で、勝利条件、及び、敗北条件の設定方法の説明を終わります。
簡単なものから、複雑なものまでいろいろなものがあります。
しかし、基本的に大切なのは、1つだけです。
勝利条件を作りたい場合は、フラグ03を立てて、終了イベント呼ぶことです。
敗北条件を作りたい場合は、フラグ65を立てて、ゲームオーバーイベントを呼ぶことです。
これだけ理解していれば、さまざなものを作ることができるでしょう。
頑張って面白いステージを作ってください。