eraの実行の流れ
eramakerおよびEmueraにおけるスクリプト実行の流れを簡単に記述してみる。eramaker2は対象外とする。
以下で、★マークがついている項目はEmuera専用であり、eramakerでは行われない。
なお図で見たい人は、別Wikiだが、EmueraWikiのフロー図を参考にしてほしい。
eramakerおよびEmueraにおけるスクリプト実行の流れを簡単に記述してみる。eramaker2は対象外とする。
以下で、★マークがついている項目はEmuera専用であり、eramakerでは行われない。
なお図で見たい人は、別Wikiだが、EmueraWikiのフロー図を参考にしてほしい。
基本的に
eramakerもしくはEmueraの中には、明示的にコーディングしなくても、勝手に実行されたりフラグが初期化されたりするケースがあり初心者にとっては難解である。
そのうちフラグの初期化については、変数関連の解説ページなどに記述があるが、実行関連についてまとめたものはこのWikiではなかったようなので作成した。
そのうちフラグの初期化については、変数関連の解説ページなどに記述があるが、実行関連についてまとめたものはこのWikiではなかったようなので作成した。
起動直後
eramaker.exeもしくはEmueraXXX.exeを実行した直後である。
- ★configファイルの読み込みと反映。
- CSVの読み込みとエラーチェックを行う。CSVフォルダの直下のみ。★なお、EmueraのChara**.csvについてはEmueraの設定において「サブディレクトリを検索する:YES」の設定がconfigによりなされておれば、CSVフォルダの下のサブフォルダのも読む。
- ERBの読み込みとエラーチェックを行う。ERBフォルダの直下のみ。★なお、EmueraについてはEmueraの設定において「サブディレクトリを検索する:YES」の設定がconfigによりなされておれば、ERBフォルダの下のサブフォルダのも読む。
タイトル表示
★Emueraにおいては、BEGIN TITLE実行時にもここに飛んでくる。eramakerには該当するBEGIN命令は存在しない。
- ★@SYSTEM_TITLEが定義されておれば、その中を実行する。これは、独自のタイトル処理をしたい場合に設置する。なおここでBEGIN命令もしくはLOADDATA命令の記述がなくRETURNされると実行する命令がなくなりEmueraは実行を終了する。また、@SYSTEM_TITLEを実行する場合、これ以降の処理はそういうコーディングをしなければ行われない。
- タイトル画面の表示をおこなう。何を表示するか?は、Gamebase.csvで設定する。
- キー入力の要求をおこなう。[0]最初からはじめるか[1]データをロードするかをプレイヤーに選択させる処理を行う。
最初からはじめる場合
このセクションの内容は明示的にERBに記述せずとも自動実行される。
- データの初期化を実施する。
- ADDCHARA 0を実行する。ただし、キャラ番号0のキャラが定義されていないならこの処理は行われない。
- Gamebase.csvに最初からいるキャラの有効な記述があり、その項目に併記されているキャラ番号のキャラが定義されているのなら、そのキャラを一人だけADDCHARAする。
- BEGIN FIRSTが実行され、@EVENTFIRST関数に処理が移行する。
データをロードする場合
このセクションの内容は明示的にERBに記述せずとも自動実行される。
- ★@TITLE_LOADGAME関数が定義されておれば、@TITLE_LOADGAME関数を実行する。これは、独自のロード処理をしたいばあいに定義する。
- セーブデータを表示し、どのデータをロードするかを選択させる。
- ロードしない場合は、キー入力の項目まで戻る。
- ロードする場合は、ロードデータ処理に移行する。
ロードデータ処理
- ロードデータする。それ以前のフラグや状態などはすべて破棄される。
- ★@EVENTLOAD関数が定義されていれば@EVENTLOAD関数を実行する。この中でBEGIN命令があれば、それを実行する。
- BEGIN SHOPが実行されるが、@EVENTSHOP関数へいくのではなく@SHOW_SHOP関数に移行する。なお、★Emueraにおいては、これより前の@EVENTLOAD関数でBEGINが実行されておれば、そちらが優先される。
EVENTFIRST関数
ほとんどの場合、ここからERBの記述どおりに実行されると考えてよい。それ以前の処理は特にeramakerの場合はハードコーディングされた処理を行っている。なお、★Emueraにおいては、BEGIN FIRST実行後もここに飛んでくるが、eramakerには該当するBEGIN命令は存在しない。
- @EVENTFIRST関数を実行する。
@EVENTFIRST内でBEGIN命令が行われなかった場合、次に実行する処理がなくなりエラー終了する。
EVENTSHOP関数
BEGIN SHOP実行後もここに飛んでくる。通常、最初からはじめる場合には、@EVENTFIRST内からBEGIN SHOPされてくることが多いはず。
- @EVENTSHOP関数を実行する。
- ★Emueraの.Configで設定されておれば、ここでAutosaveの処理を行う。詳しくは別項で。
- LOADDATAされた直後に、SHOPに来た場合にはここから後の処理を実行する。つまり、@EVENTSHOP関数と★Autosaveの処理は実行されないことになる。
- @SHOW_SHOP関数を実行する。
ここで、SHOP画面を表示させてプレイヤーにSHOPコマンドを入力させる。この入力において0~99(★Emueraはこの範囲を変更可能)が入力されるとアイテム購入処理、それ以外の数値を入力されると@USERSHOPの処理に移行する。
アイテム購入処理
- 入力されたアイテムに対応するITEMSALESが0以外であるかそして、MONEY:0がITEMPRICEより大きいかどうかを判定する。eramakerの場合、この判定に失敗したら@SHOW_SHOPに処理を戻す。★Emueraの場合、この判定に失敗したら再入力を要求する。
- 購入判定に成功したら、BOUGHT:0変数にITEM番号を代入し、ITEM:BOUGHTを1増やし、MONEY:0をITEMPRICE:BOUGHTだけ減らす。そして、@EVENTBUY関数を実行したあとに@SHOW_SHOP関数へ処理を戻す。
USERSHOP処理
- @USERSHOP関数を実行する。
- @SHOW_SHOP関数へ処理を戻す。
注:以上のEVENTSHOP処理のどこかでBEGIN命令を実行するまではEVENTSHOP処理から抜け出せないことに注意すること。
EVENTTRAIN関数
BEGIN TRAIN実行でここに飛んでくる。調教シーンを想定しているが、もちろん「調教」でなくてもこの仕組みを使っているケースもあれば、この仕組みを一切使わない「調教」というのも存在する。
- 一部の変数を初期化する。
- @EVENTTRAIN関数があれば、それを実行する。なお、★Emueraにおいては、この関数内で直接BEGINすることは許されない。
- NEXTCOM:0変数が0以上の場合には、Train.csvの対応するコマンドの実行を試みる。これに関してはこれ以降記述しないので興味があるなら各自試行してみてほしい。
- @SHOW_STATUS関数を実行する。
- Train.csvの0から定義されている部分について、@COM_ABLE{選ばれたコマンドのTrain.csvの数値}関数を実行しようとする。@COM_ABLE{選ばれたコマンドのTrain.csvの数値}関数が未定義もしくは実行の結果0以外を返した場合は実行できるものと判断し、そのTrain.csvの名前(★EmueraならばTRAINNAME)をPRINTする。そうでなければ実行できないと判断する。この判断はここで記憶しておいている。
- @SHOW_USERCOM関数を実行する。
- UP,DOWN,LOSEBASE,★CUP,CDOWN,DOWNBASEを初期化する。
- 実行すべき調教コマンドをプレイヤーに入力させる。
- その調教コマンドが実行不可能であるならば、@USERCOM関数を呼び出し、その後@SHOW_STATUS関数の処理に戻る。
- その調教コマンドが実行可能ならコマンド処理を行う。
調教コマンド処理
- 全てのキャラのNOWEXの全ての要素を0にする。
- @EVENTCOM関数を実行する。
- 入力された調教コマンドに対応する@COM{選ばれたコマンドのTrain.csvの数値}関数を呼び出す。
ここで@COM{選ばれたコマンドのTrain.csvの数値}関数が返す値により分岐する。
@COM{選ばれたコマンドのTrain.csvの数値}関数が0を返した場合
- @SHOW_STATUS関数に処理を戻す。
@COM{選ばれたコマンドのTrain.csvの数値}関数が0以外を返した場合
- @SOURCE_CHECK関数を実行する。
- 全てのキャラのSOURCEの全ての要素を0にする。
- @EVENTCOMEND関数を呼び出す。
- @SHOW_STATUS関数に処理を戻す。
注:以上のEVENTTRAIN処理のどこかでBEGIN命令を実行するまではEVENTTRAIN処理から抜け出せないことに注意すること。
ABLUP関数
BEGIN ABLUPでここに飛んでくる。
調教後に宝珠を消費させて能力を上昇させるということを想定している。
調教後に宝珠を消費させて能力を上昇させるということを想定している。
- @SHOW_JUEL関数を実行する。
- @SHOW_ABLUP_SELECT関数を実行する。
- プレイヤーに入力を要求する。
入力が0~99の範囲内である場合
- 入力された数値に対応する@ABLUP関数を探す。
定義されていない場合
- eramakerの場合は、@SHOW_JUEL関数に処理を戻す。
- ★Emueraの場合は再度入力を要求する。
定義されている場合
- @ABLUP関数を実行する。
- @SHOW_JUEL関数に処理を戻す。
入力が0~99の範囲外である場合
- @USERABLUP関数を実行する。
- @SHOW_JUEL関数に処理を戻す。
注:以上のABLUP処理のどこかでBEGIN命令を実行するまではABLUP処理から抜け出せないことに注意すること。
AFTERTRAIN関数
BEGIN AFTERTRAINでここに飛んでくる。なお、AFTERTRAIN処理中にBEGIN命令が行われなかった場合は、次に実行する処理がなくなってしまうためエラー終了してしまう。
調教後の後始末やイベントなどを処理することを想定している。
調教後の後始末やイベントなどを処理することを想定している。
- @EVENTEND関数を実行する。
EVENTTURNEND関数
BEGIN TURNENDでここに飛んでくる。なお、EVENTTURNEND処理中にBEGIN命令が行われなかった場合は、次に実行する処理がなくなってしまうためエラー終了してしまう。
そのターンの終了処理を行うことを想定している。
そのターンの終了処理を行うことを想定している。
- @EVENTTURNEND関数を実行する。
SAVEGAME命令
SAVEGAME命令が実行されたとき。
- セーブデータを表示する。
- どのスロットにデータセーブするかをプレイヤーに入力させる。ここでセーブの実行を取りやめた場合は元の処理に戻る。
- 入力した番号のスロットにデータがあれば上書きしていいかどうかをプレイヤーに聞く。ここで、それを行わない場合は再度どのスロットにデータセーブするかの入力に戻る。
- セーブ実行する場合、@SAVEINFO関数があればそれを実行する。
- セーブを行う。
- RETURNする。
LOADGAME命令
LOADGAME命令が実行されたとき。
- セーブデータを表示する。
- どのスロットのセーブデータをロードするかをプレイヤーに入力させる。
- ロードの実行を取りやめる場合は元の処理に戻る。そうでない場合のみ、以下の処理を実行する。
- ロードを行うのであれば、今までの状態などを初期化してデータロードを行う。
- ロードデータ処理に移行する。
★Autosave処理
EmueraにおいてのAutosave処理についてである。この項目は全て★である。
- ★Emueraの.configにおいてAutosave処理をしない場合は何もしないで、元の処理に戻る。そうでない場合のみ、以下の処理を実行する。
- ★@SYSTEM_AUTOSAVE関数がある場合はその処理を行ったあと、@SHOW_SHOP関数に処理が移行する。
- ★@SAVEINFO関数がある場合は、実行する。
- ★セーブスロット99番にデータをセーブする。
- ★@SHOW_SHOP関数に処理が移行する。