イベント作成

続きました。

イベントを理解する

さてイベントと言っても最初はさっぱりでしょう。ここで、とあるイベントのバイナリデータを見てみましょう。これです。

赤枠の内側がひとつのイベントです。赤枠の上は他のイベントですし、赤枠の右下[21 17 10 00]も他のイベントの先頭です。見ての通り、すし詰めです。余分なスペースはありません。GBAFEは全てのデータがこんな状態で詰まっています。

この状態でオリジナルイベントを作るとなる際に取れる手は、2つです。

  • 元のイベント量以下のイベントで済ます
  • 何も無いスペースに飛ばして利用する

ちょっと窮屈で不便に感じますね。まあそれはハックロムの宿命と思って受け入れてください。

イベント命令について

イベント命令について知るには、元のイベントを見るのが一番です。それにはProjects FE GBAを使うのが現状では一番だと思います。これで読み込みます。


左上の枠内に見たいイベントがあるアドレスを入力して読み込みます。するとPFEが解釈して翻訳してくれます。

イベント作りの最初のステップとしては、PFEを起動しながらエミュでゲームを起動し、どんな命令がどんな動きをするのかを知るのがいいのではないかと思います。イベントにしろ、そもそもの知識がないと使えませんから。

なんとなくわかったら、元のものにちょっぴり手を加えてイベントを改変する事で独自のイベントを作ってみるのもいいでしょう。このちょっぴりな改変はイベント制作するうえで非常に楽です。最初はそういう作り方が楽でしょう。
 ただし先ほど見せたとおり、イベントには余分な部分がありません。容量には気を遣う必要があるのに、PFEだと残り容量はよく分かりません(元より大きいものの書き込み時に警告します)。私はバイナリエディタでどれくらいの余裕があるのかをチェックしながら使うのが安全じゃないかと思いますが、人それぞれです。

PFEとEA

さて、イベントの作成にはもうひとつのツールがあります。Event Assmeblerです。これは玄人向けです。なぜならば、EAを使いこなす為には、イベントにはどういう種類がありどんな使い方ができ、どんな設定があるかを知っている必要がある、というハードルがあるからです。

具体的には、前回のイベント概説の内容を理解できている必要があります。分かってないと自覚している場合は、学ぶ意味ではPFEが優れています。見る分には最良なので、理解しやすいです。PFEの特徴はとにかく分かりやすい事です。見る分に最良なPFEに対して、作る分に最良なのがEAです。分かりやすさ以外はEAの方が優れています。特に大きな改造をしだすレベルになるとPFEは不向きです。EAに乗り換える事が賢明です。
 完全にオリジナルのイベントにしか興味ない人は、最初からEvent Assemblerを使うのも良いでしょう。

Event Assemblerを導入する

さて、ここではEAを取り上げます。今まで散々難しい難しいと言ってきましたが・・・

EAはイベントを1から作る場合の定番ツールです。分かりやすくない上に1から作る事になるから難しいのです。でも、例え1からといっても、極限まで単純なイベント制作にさえしておけば、PFEで複雑な元イベントを参考にするより簡単ですから安心して下さい。
 今回はオリジナルイベントを作るというよりも、実際に何もない状態から作ってみる事で具体的なイベントの流れや章の構成というものを実感をしてもらうのが主な目的です。それがオリジナルイベントを作る助けになります。


もうすでにEAをダウンロードしている前提で話をします。分からない人は立ち返ってください。すでに導入済みの人も、イベントの編集の為に更新する部分を増やしたので、再確認してください。

マップ作成用フォルダ

マップ挿入の時に既に組み込んでいるなら飛ばしても構いません。まだならばコチラをダウンロードしてください。落としたら、あなたのEAフォルダに、Mapsフォルダを追加します。追加出来たら、組み込みましょう。

“#include”が並んでいる一番下に”Master Map Installer.txt”を付け加えて下さい。

#ifdef _FE8_

	#define Free_Space 0x1000000
	ORG Free_Space

MESSAGE starts at CURRENTOFFSET

	#include "Extensions\Hack Installation.txt"
	#include "Music and Sound\_Music Installer.txt"
	#include "Animations\_Master Animation Installer.txt"
	#include "Engine Hacks\_MasterHackInstaller.txt"
	#include "Maps\Master Map Installer.txt"

MESSAGE ends at CURRENTOFFSET

#else
    ERROR You are not assembling FE8 events!
#endif

ここからは前と同じではありません。設定を進めましょう。

“Maps\Chapter Event”フォルダを開いて下さい。その中にある”template.event”をまず改名しましょう。序章を変える予定なので”Ch0.event”とでも変えます。変えたなら次は”_Chapter Events Installer.txt”を開きます。何も書いてありませんが、以下を書き込んで保存して下さい。

{
#include "Ch0.event"
}

これで”Ch0.event”が組み込まれました。

アドレスの確認

まだ準備は終わりません。今回は序章のイベントを変更します。その序章のイベントのアドレスを指定しましょう。

“どこ”を書き換えるのかを指定します。チェックはPFEで行います。


序章のイベントはこのアドレスですね。

これで全ての指定が終わりました。

章開始イベントを作る

準備が出来たら、次はいよいよイベント制作です。
 一番最初に作るのは章開始イベントです。それでは”Ch0.event”を本格的に編集しましょう。

プレイヤーユニットを出現させる

まずは章開始イベントの内容を書く部分を探しましょう。”Ch0.event”内に「章開始イベント」と堂々と書いてあるはずです。そこに章開始イベント内容を入力していきます。

では作りましょう。まず章開始イベントに必須なものはなんでしょうか? 答えはユニットを出す事です。まずはそれを満たすだけの一番単純な章開始イベントを見せましょう。

BeginningScene: //////////章開始イベント
LOAD1 1 UNITS01; ENUN //ユニット読み込み1 特に特徴がないのが特徴
ENDA

自軍のユニットを出すだけです。極限まで単純な開始イベントです。

でも自軍ユニットって言っても、誰を呼び出すのかが書いてないと思いません? その通り、書いてません。じゃあ一体何が書いてあるかというと「UNITS01を呼び出す」とだけ書いてあるのです。

じゃあUNITS01ってなんだよ!!って思いますよね。このUNITS01は今から自分で作る必要があります。そのUNITS01の中身を作っていきましょう。

ユニットデータ指定
UNITS01:
UNIT $01 $02 $00 Level(1,0,0) [14,9] 0 0 0 0 [$01,$6C] NoAI
WORD 0 0 0 0 0

一番上に”UNIT01:”と書いてありますね。これはこの先がUNITS01の中身、という宣言です。よーく見ると右に”:”がくっついてますね。これがついてると「この先が中身だよ」という意味になります。そして中央の一番長い行が、実際のユニットデータです。(なお下の”WORD 0 0 0 0 0″はデータ終了を意味します。必須です。)

先に言っておくと、これはエイリークを示しています。”UNIT”の一列でエイリークを表しているのです。意味不明ですね。なので詳しく見てみましょう。

  1. UNIT
  2. $01
    出すユニットID(これはエイリーク)
  3. $02
    クラス指定(これはロード)
  4. $00
    指揮官ID
  5. Level(1,0,0)
    (レベル,所属,成長補正有無)
  6. [14,9]
    出現元座標
  7. 0 0 0 0
    重要だが今はスルーで
  8. [$01,$6C]
    初期アイテム4つまで
  9. NoAI
    AIです。動きを決めます。

あの一行にはこんな意味が込められていたのです。設定項目が非常に多いです。
 とはいえ、空欄すべてを埋める必要はありません。自軍を出す時に必要なのは「ユニットandクラスID。登場レベル。出現座標。初期アイテム」くらいです。まずはこれだけ優先して埋めればいいんです。

分かった所で合体させてみましょうか。

BeginningScene: //////////章開始イベント
LOAD1 1 UNITS01; ENUN //ユニット読み込み1 特に特徴がないのが特徴
ENDA

UNITS01:
UNIT $01 $02 $00 Level(1,0,0) [14,9] 0 0 0 0 [$01,$6C,$6C,$6C] NoAI
WORD 0 0 0 0 0

これで完成形です。実際にアセンブルすればもうゲームとして動きます。

寂しいですね。もう少しユニットを増やしましょうか

UNITS01:
UNIT $01 $02 $00 Level(1,0,0) [14,9] 0 0 0 0 [$01,$6C,$6C,$6C] NoAI
UNIT $0B $1B $00 Level(1,0,0) [14,8] 0 0 0 0 [$2D,$6C] NoAI
UNIT $23 $4F $00 Level(1,0,0) [13,9] 0 0 0 0 [$45,$6C] NoAI
WORD 0 0 0 0 0

このようにどんどん後ろに追加すれば、それで増やせます。3人もいれば少しは賑やかでしょう。

敵ユニットの設定

しかしまだ何かが足りない。そう、敵がいませんでしたね。敵データも作りましょう。味方のデータとは、別にしておいた方が分かりやすいので、別枠で作ります(一緒にしても問題はないけど)。

UNITS02:
UNIT $45 $01 $00 Level(5,2,1) [0,0] 0 0 0 0 [$14,$6C] [0,0,0,0]
WORD 0 0 0 0 0

敵軍・友軍を出現させる時は、見なくてはいけない部分が自軍より多いです。

  • 指揮官ID
    一部のAIで使用しますが、知らないうちは零でいいです
  • 所属
    0なら自軍、1なら友軍、2なら敵軍です。
  • 成長補正有無
    0なら無し。1なら登場レベル分だけ強くなります(まずはその認識でいいです)
  • AI
    色々あるのでPFEなどで確認しましょう。よく使うAIは覚えたほうがいいです

    1. [0,0,0,0]突撃AI
    2. [0,3,0,0]待ち伏せAI
    3. [3,3,0,$20]防衛AI

設定が出来たら登場させます。

BeginningScene: //////////章開始イベント
LOAD1 1 UNITS01; ENUN //ユニット読み込み1 特に特徴がないのが特徴
LOAD1 1 UNITS02; ENUN //ユニット読み込み1 特に特徴がないのが特徴
ENDA

雰囲気が出てきました。

会話イベントをいれる

敵と味方を出現させました。賑やかにはなりましたが、味気ないですね。では味をつけるために、次は会話を挿入してみましょう!

BeginningScene: //////////章開始イベント
LOAD1 1 UNITS01; ENUN //ユニット読み込み1 特に特徴がないのが特徴
LOAD1 1 UNITS02; ENUN //ユニット読み込み1 特に特徴がないのが特徴
FADU $10 //[XX]の速さで暗転解除
Text($8D0) //[XXXX]会話実行
ENDA

会話を加えてみました。会話を出すときの一番単純な形が、”Text($ID) “です。これを後ろにくっつけてみました。
 それと、もうひとつ「暗転解除」の命令を加えました。今までは「ENDA」でイベントを終了し暗転解除を自動でやっていましたが、会話を実行するために「ENDA」の前に暗転を解除させたのです。

とりあえず最初としては、こんなものでいいんじゃないでしょうか。

終了イベントを作る

開始があれば、当然に終了イベントも必要です。
 こちらも詳しく解説したい所ですが、とりあえず完成の雰囲気を知って欲しいので、テンプレ的なイベントを用意しました。

EndingScene: ////////章終了イベント
MUSC 49 //通常のBGM変更
Text($8D8) //[XXXX]会話実行
FADI $10 //[XX]の速さで暗転
MNC2 $01 //ワールドマップ無次のマップ???
ENDA

非常にシンプルです。

完成はしました、完成しましたが・・・これだけではクリア出来なかったりします。何故なら、終了イベントは開始イベントと違って能動的に発生させないと開始しません。ですので、何かしらの発生条件を作る必要があるのです。

なので次は、イベントの発生条件というものをちょっと見ていきましょう。

敵全滅イベントを作る

イベントの条件は色々ありますね。前に言いましたがターン条件・会話条件・オブジェクト指定・常時条件です。
 ここでは一番簡単な、常時条件でクリアイベントを発生させましょう。

MiscBasedEvents:	//////////////範囲・常時条件
AFEV 0 $085B9EE8 $65 //ゲームオーバー

END_MAIN

ここだけ最初から何か入っています。これは主人公死亡でゲームオーバーの常時条件イベントです。詳しく言うと「$65フラグを感知してアドレスにあるイベントを発生させる」という意味です。

常時条件に最低限必要なデータは2つです。「何に反応させるか」・「何を発生させるか」です。先ほどの例で言えば、65フラグに反応して、ゲームオーバーを発生させる、ですね。$65フラグの意味は、主人公死亡です。
 この常時条件は”AFEV”で作ります。

では、クリアイベントを発生させる条件を作ります。今回は、敵全滅で章終了イベント発生という条件で作ります。

MiscBasedEvents:	//////////////範囲・常時条件
AFEV 0 $085B9EE8 $65 //ゲームオーバー
AFEV $3 EndingScene $6
END_MAIN

これで$6フラグを感知して($3フラグをオンにしつつ)EndingSceneイベントを発生させるという条件になります。$6フラグの意味が敵全滅です。
 このように、発生させるイベントは、名札的(EndingScene)に指定する事も出来ますし、アドレス直接指定($085B9EE8)でも大丈夫です。

これでクリアイベントを発生させる条件を設定出来ました。オリジナル章の完成です。

これで極力単純に徹した章を作る事が出来ました。イベントというものを具体的に掴むことができたでしょうか?

実感が湧いたら、PFEで元ロムの高度なイベントを参考にして学ぶと良いでしょう。そして、いずれはイベントを自分で考えて自分で組み立てる事が目標です。その為にはもっと多くを知らなくてはいけません。イベントは、知れば知るほどバリエーション豊かで複雑怪奇です。

それではがんばってください。

コメントを残す

メールアドレスが公開されることはありません。