eratohoまとめ

ERB開発Q&A

eramakerおよびEmueraにおいて開発に使うERA-BASICに関する雑多なネタをQ&A方式にて解説するページの予定だったが、変数と関数の基礎的な部分を解説するページになっている。


変数について


Q:配列変数とはなんですか?

A:家族だと思えばいいかと
eramakerにおいて、ほぼすべての変数は配列変数となっています。たとえば、一文字変数Aの中にはA:0とかA:1とかA:2とか複数の変数があります。これらはAという家族の中の一員だと思えば分かりやすいかと。
しかし、同じ名前とはいえ、家族ごとに違った個性がありますので、それを一括して指定することはできません。例えば…、
A = 2
上では、A:0(変数が単独で書かれている場合はたいてい後ろに:0が省略されていると思えばいいでしょう)に2が代入されますが、A:1とかA:2とかは中身が変化することはありません。
ここで、わざわざそうやって同じ名前にまとめる意味があるのか分からない人もいるでしょう。そこで、アイテムを実際に管理しているITEMという変数について考えてみましょう。
ITEM:1が1であるということはアイテム番号1を既に購入済みだということをあらわしています。これを配列にしないとするとたとえば、変数Iをアイテム1の購入フラグだとすれば、じゃあ、アイテム2は?アイテム3は?となると、どんどん新たな変数を使う必要があります。そして、実はERBにおいて一文字変数はアルファベット26文字分しかないので、アイテムは26個しか管理できなくなります。
それだけではありません。アイテムを購入した場合、アイテムフラグを1(以上)にする必要がありますが、そのときの処理としてITEM:BOUGHT = 1ということをしています。これがもしITEM管理を別個の変数でしていた場合、1というアイテムを購入したときは変数I、2を購入すれば変数J、3を購入すれば変数K…などと、購入するアイテムごとに違う変数を操作しなければなりませんし、そのための分岐処理などを余計につくる必要があります。
そういう煩わしさをなくして分かりやすいコードにするためにも配列変数は必要不可欠であるといえます。

Q:配列変数の要素って?

A:その配列の具体的な入れ物を示すものです
前項のとおり、配列変数には同じ名前の付いた入れ物が複数ありますが、それを区別するのが「要素」です。たとえば、「A:2」というのは、名前がAで要素が2の数値配列変数であるとします。
また、変数の中には要素を複数持つものがあります。たとえば、「CFLAG:4:2」というものがありますが、これは、CFLAGという名前の要素が4の2の変数です。このように要素がふたつあるのを二重配列といいます。A:2のようにひとつしかないのを一重配列といいます。なおeramakerでは三重配列などはありません(Emueraでは三重配列変数が導入されています)
前項で配列変数を「家族」のようなものだと言いましたが、二重配列に関してはむしろ、「団地」のようなものだと解釈したほうがいいかもしれません。同じ団地の住人ではあっても、実際に居住している階が違いますし、違う階なら同じ番号の部屋でも同じ部屋ではありませんから。

Q:RESULTとかPLAYERとかも配列変数なの?

A:彼らも世帯持ちです
eraの世界において、世帯を持たない変数はほとんどありません。まったくもって羨ましいわけですが、たとえば、COUNT、RESULT、DAY、TIME、MONEY、MASTER、TARGET、ASSI、PLAYER、ASSIPLAY、SELECTCOM、PREVCOM、LOSEBASE、UP、DOWN、PALAMLV、EXPLV、EJAC、FLAG、TFLAG、ITEM、ITEMSALES、BOUGHT、NOITEM、PBAND、RESULTS、STR、SAVESTR、NO、ISASSI、NAME、CALLNAME、BASE、MAXBASE、ABL、TALENT、EXP、MARK、RELATION、JUEL、CFLAG、EQUIP、TEQUIP、PALAM、STAIN、EX、SOURCE、NOWEX、GOTJUELはいずれも配列変数です。
なお、上の変数の中には特定のタイミングで初期化されたりするものがありますが、そのときにその配列変数の要素がすべて初期化されるのか、それとも特定の要素のみが初期化されるのかが違うものがあるので注意してください。たとえば、調教開始時にPREVCOM:0は-1に初期化されますが、PREVCOM:1やPREVCOM:2以降は初期化されません。

Q:一文字変数ってなに?

A:アルファベット一文字の名前の数値型配列変数です。
つまり、A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Zの26種類の数値型の配列変数です。数値型ですので文字列代入などには使えませんが、数字を扱うのに基本となる変数のことです。
なお、口上呼び出しなどで口上側が処理をする場合、バリアント本体側で使用している変数を口上側で操作するのは危険なことがありますので注意すべきです。
たとえば、本体側でA:0に本来の調教対象のキャラ番号を入れたまま口上を呼び出した場合、口上側でA=RAND:2などのようにAを書き換えてしまいますと、本体側に処理が戻ったときに不具合が起こってしまいます。
通常ならば、イベント呼び出しタイミングにおいて、破壊してはならない変数(フラグ)が明確であるべきですが、バリアント側でその情報が十分に用意されていないこともあります。そのときは口上作者側がGrepやソースチェックなどで、破壊してはならない変数をしっかり把握すべきであるでしょう。また、Emueraバリアントにおいては、ローカル変数であるLOCALやLOCALSを活用すべきでしょう。

Q:eramakerは変数少なすぎだ!

A:待ってください、ちゃんと配列を活用できてますか?
変数の数に限りがあることは既にご承知のことでしょうが、それも工夫次第でどうにかなる場合もあります。特に一番陥りやすい間違いが、
ABCDEFGIJKMNPQRSTUVXYZっておいおい22も使ってやがる!
あと使えるのはHLOWの4つしかないだろ!
という間違いです。これはこれらの一文字変数が「配列変数」であることを失念しているからこうなるのです。
同じようなことをしているフラグは同名のものにまとめることを考慮するべきでしょう。たとえば、別のソースにそれぞれ代入しているAとBとCという変数があればそれを、AとA:1とA:2という風に変えればBとCの部分は別の変数として利用できますね。こうして、フラグを整理してしまえば、フラグ不足なんてそうそう起きませんよ。

Q:数値型変数と文字型変数の違いは?

A:中身に入るのがただの数字がそれとも文字列か?の違いです。
数値型変数とは中身に数値が入る変数のことです。そしてそれは、四則演算などで数学的に処理ができます。たとえば、
C = A:2 + B:1
という場合、C:0という数値変数にA:2という数値変数の中の数値とB:1という数値変数の中の数値を単純に加算したものが代入されます。
文字型変数とは中身に文字列が入る変数のことです。たとえばキャラクターの名前だとか、素質などの名前とかを入れたい場合に使われます。そしてそれは、数値型変数のような数学的処理はできません。ただし、文字列操作という形で加工することはできます。

Q:変数の名前に特別な意味はあるのですか?

A:ある場合もあります
変数の中には特別な意味を持つ名前が付けられているものもあります。たとえば、TARGETという変数は調教対象をあらわしていますし、PALAMという変数はパラメータをあらわしています。
元々のerakanonにおいてそう使うべく用意された変数ですので、それに見合った使い方をするのが一番分かりやすいと思われますが、開発の上ではそれに縛られることはありません。製作者のやりたいように変数を使えばいいのです。ただし、それぞれの変数には初期値が設定されていたり、特定のタイミングで初期化されたりしますので、その変数名を使った場合、どういう挙動をするかをよく分かった上で使いましょう。
以下に使用に注意すべき主な変数を記します。
COUNT:REPEATループにおけるカウントに使われている数値型変数です。変更しないほうがいいと思われます。また、前述のとおり、COUNTも配列変数ですが、実際にループカウント用として使われているのはCOUNT:0のみですので、REPEATループを入れ子にすることはeramakerではできません。Emuera拡張でFORやDOやWHILEなどを併用すれば可能ですが、そのときもカウントの数値変数を共用することはできません。
RESULT:何らかの結果が代入されている数値型変数です。CALLからRETURNで戻ったときのRETURNでの戻り値だとか、INPUTで代入された数値とかが入ったりします。
RESULTS:何らかの結果が代入されている文字型変数です。INPUTSで入力された文字列だとかが入ったりします。
SELECTCOM:この調教ターンに選択された調教コマンドの番号を示す数値型変数です。SELECTCOM:1以降はEmueraの拡張命令のCALLTRAINで使用しています。なお、SELECTCOMはeramakerの調教(BEGIN TRAINで始まる一連の処理)を使用しない場合には使われていないこともありえます(例:eratohoSB)
ITEMSALES:そのアイテムが販売されているかどうかを示す数値型変数です。
STAIN:汚れをあらわす数値型変数です。ビット管理されているので注意してください。ビット管理については別のページの説明や本家の説明を読むなどをして勉強する必要があります。
CHARANUM:現在の登録キャラ数を表す数値型変数です。どの要素にも同じ数値が入っています。代入しても数値が変わらないので意味はありません。なお、Emueraでは代入しようとするとエラーになります。
RAND:ランダムな数値を返す擬似配列の数値型変数です。代入しても意味はありません。なお、Emueraでは代入しようとするとエラーになります。

以上の変数は自動的に説明通りの使い方がされます。一方、次からの変数はERBで設定しないとただの容れ物です。

MASTER:主人の登録番号を示す数値型変数です。なお、主人の登録番号が必ず「0」であるとは限らないこともあります。
TARGET:調教対象の登録番号を示す数値型変数です。「0」ならたいていは主人が調教対象であることをあらわし、「-1」ならたいていは調教対象が存在しないことをあらわします。
ASSI:助手の登録番号を示す数値型変数です。「-1」ならたいていは助手が存在しないことをあらわします。
ASSIPLAY:助手調教中であるかどうかを示す数値型変数です。たいていは「0」なら助手調教中ではなくて、「1」なら助手調教中であることを示します。どのキャラが助手であるか?とか助手がいるかどうかは示していませんので注意してください。
PREVCOM:ひとつ前の調教ターンに選択されていた調教コマンドの番号を示す数値型変数です。ちなみに調教に入ったそのときには「-1」が代入されています。なお、PREVCOM:1以降は何も仕組みを作らなければ代入されることはありません。またPREVCOMに前ターンのSELECTCOMを代入するということは実際にその処理がなければ起こらないことに注意してください。自動的にそうなるわけではありません。
LOSEBASE:調教ターンにおけるBASE値の減少値を示す数値型変数です。なおキャラクター変数ではない(=二重配列変数ではない)ため、アクセスはTARGETを利用する必要があります。
EJAC:射精ゲージに関係する数値型変数です。ただし、射精があったときに自動的に変化したりはしません。そういう仕組みは別途拵える必要があります。
ITEM:そのアイテムを所有しているかどうかおよび所有数を示す数値型変数です。
NOITEM:アイテムなし設定が有効か無効かを示す数値型変数です。「1」ならアイテムなし設定で「0」ならアイテムなし設定ではないということを示しますが、たいていのバリアントでは「0」であると思われます。また、0と1以外の数値を取る可能性もあります。
STR:文字型変数です。一文字変数は数値型であるから、文字型変数をeraで扱いたいならこちらを多用することになるかもしれません。初期値はstr.csvで定義されます。なお、セーブデータに保存はされません。保存されたい文字型変数が使いたいなら次のSAVESTRを使うべきでしょう。
SAVESTR:文字型変数です。こちらはセーブデータに保存されるため、より貴重な存在だといえるでしょう。ただし、makerでは数値変数で出来る仕事しか出来なかったりします。(INPUTSで入力した文字を保存したりはできない)
ISASSI:そのキャラが助手になったことがあるかどうかを示す数値型変数ですが、自動で設定はされないので助手化の処理で値を真に変える必要があります。
NAMECALLNAME:いずれもそのキャラの名前が入っている文字型変数ですが、NAMEの方が本名でCALLNAMEの方が呼ばれ方もしくはあだ名などのように使うことになるでしょう。もちろん、まったく同じにそろえるとか、フルネームと略称という風に使い分けてもいいでしょう。
CFLAG:キャラクターごとに保持できる数値型変数ですが、実はChara**.csvにて「フラグ,***,###」という形式で初期設定することができます。
EQUIP:本家では説明されていませんが、キャラクター変数としてeramakerで利用することが可能な数値型変数です。Emuera拡張変数ではありません。
LOCAL:Emueraでのみ使用可能なローカル数値型配列変数です。ローカル変数というのはeraの関数ごとにそれぞれ使うことができる変数のことで、同じLOCALという名前であっても、呼び出した関数によって違う値が入っています。
LOCALS:Emueraでのみ使用可能なローカル文字型配列変数です。上記LOCALの文字型版で、同様に使えます。

Q:キャラクター変数とはなんですか?

A:登録キャラごとに配列が用意されている二重配列変数のことです
ほとんどすべての変数が配列変数なのですが、中には登録キャラごとに配列が用意されている一連の変数があります。それをキャラクター変数といいます。キャラクター変数でない変数は一重配列変数であるので、登録キャラごとに別途フラグは用意できません。
キャラクター変数SOURCEの場合
SOURCE:A:B A…登録番号A番のキャラ 
       B…SOURCE:Bを示す
非キャラクター変数UPの場合
UP:B B…PALAM:Bを示す
      対象は必ずTARGET:0(調教対象)
つまり、非キャラクター変数で各キャラクターを管理するには、TARGET:0を操作してやっていくしかありませんが、現状そうやって操作した場合、別のキャラを退避するフラグが足りなくなると思われるので、eramakerでは調教対象を複数同時に調教するようなバリアントを作る場合にはフラグ不足に対応した仕組みを作る必要があるでしょう。なお、Emueraではこの辺の事情は少し好転してはいますが、やはり一工夫必要となります。
なお、どの変数がキャラクター変数であって、どの変数が非キャラクター変数であるか?というのはこのwikiの他のページや本家の解説などを参照してください。

Q:キャラ番号と登録キャラ番号とはなんですか?

A:それぞれ意味合いが違う番号です
キャラ番号とは、Chara***.csvで設定される番号で、ゲーム中でADDCHARA (番号)で追加されるのに使われる番号です。eratohoのほとんどのバリアントでChara001.csvに博麗霊夢さんのキャラ設定がありますが、そのcsvファイルの中に
番号,1,
という行がありますが、それが霊夢さんのキャラ番号です。
一方、登録キャラ番号もしくはキャラ登録番号もしくは登録番号というのは、ゲーム中に主人もしくは奴隷として存在しているキャラクターたちに割り振られている番号です。こちらはキャラ番号とはまったく関係なく、通常はADDCHARAされていくたびに順番に、0,1,2,3…と追加されていくはずです。つまり、まだ登場していないキャラにかんしては登録番号なんてありません。あくまで、ゲームに登場しているキャラにのみ割り振られます。
数値変数のMASTER,ASSI,TARGETはそれぞれ中に入っている数値の登録番号のキャラがその役割であることを示します。キャラ番号のキャラがその役割であるというわけではないことに注意してください。
登録番号からそのキャラクターのキャラ番号を求めることはできます。それはNO:(登録番号)です。主人のキャラ番号が欲しいならNO:MASTER、調教対象のキャラ番号が欲しいならNO:TARGETでもNOでもOKです。
通常、キャラクター変数における第一要素は登録番号でアクセスします。キャラ番号ではありません。なお、RELATIONという関係を表すキャラクター変数の第二要素はキャラ番号でアクセスします。登録番号ではありません。つまり…
RELATION:A:B
A…登録番号 (MASTER,ASSI,TARGET)
B…キャラ番号 (NO:MASTER,NO:ASSI,NO:TARGET)
ということで、キャラ番号と登録番号を混同しないようにしてください。また、EmueraなどでSWAPCHARAやSORTCHARAなどを使う場合、登録番号が変わることに注意しましょう。
ちなみに、DELCHARA(番号)は、登録番号で指定します。キャラ番号ではありませんが、それは当然だと分りますね?

関数について


Q:関数とはなんですか?

A:特定の処理を行うための一連のコードです
ERBを記していく上で、実行順番は上から下へ~~~です。ですが、ゲームスタートからずっと、上から下へ流していかなければならないというわけではありません。たとえば、SHOPコマンドで奴隷の購入をする場合と奴隷を調教する場合とゲームデータをセーブする場合とでは、それぞれそこからの処理が違うはずです。それをいちいちIF RESULT= ~ ELSE ~ ENDIFで順番に処理していくようにしたら、きっと大変見づらいコードになってしまうでしょう。
そういうときは、奴隷の購入を担当する処理部分を別に作り必要に応じてそれを呼び出すようにすればいいでしょう。そのときの別に作った処理部分のことをeraでは「関数」としています。
関数を呼び出す命令は、JUMPかCALLがあります。JUMPというのはその関数に処理が移動します。元々のところにはそのままでは戻りません。それに対してCALLはその関数の処理が終了したら元々のところのCALLの次の行からまた処理を再開します。なお、Emueraでは、CALLした関数からJUMPという動作が可能ですが、makerでは動作しないので注意が必要です。(っていうか、makerだとJUMPはどこで使えるんだろう)。
ERBにおいて関数は関数宣言行すなわち@関数名の行から開始されます。そして、そのERBファイルの末尾に到達するか、それとも次の関数の始まりの直前までがその関数です。つまり、次の関数宣言行があれば、そこから先は実行されず、処理は終了します。そのため、CALLで呼ばれているのならば元々の場所のCALLの次の行に戻りますし、JUMPで呼ばれているのならばそこでプログラムそのものが終了します。また、任意の場所で関数を終了させるためには命令RETURNを使用します。(実は関数の終わりに何もなくてもRETURN 0が実行されていたりする)

Q:おい待てよ?JUMPもCALLもないのに呼ばれてる関数あるぞ?

A:関数によっては、自動的に呼ばれる関数も存在します
ただ…、詳しくはもう少し下の設問をお読みください。

Q:RETURN 0とRETURN 1の違いは?

A:CALLから戻ってきたときに関係あります
関数によくRETURN 0とかRETURN 1とかあります。RETURNは前問の答えのとおり、CALLで呼ばれたその関数を終わらせて元々の処理に戻すためのものですが、そのときにRETURNの後ろに数値を付加することが可能です。そして、それは実はRESULT:0という変数に代入されるのです。
つまりCALL文の次の行以降に、IF RESULT == 0 ~ ELSEIF RESULT == 1などと処理をすれば、CALLで呼ばれた関数内の処理に応じて戻った後に分岐を掛けることが可能になるというものです。
なお、当然のことですが、そういう仕掛けがなければRETURNの後ろにどういう数字が入っていても動作の上では意味はありません。
RETURN Bのように数値変数が指定されている場合はその変数の中身がRESULTに入ります。ただし、RETURN RESULTとした場合は、Emueraでは正常に動作しますが、makerではRETURN 0と同等になります。また、EmueraではRETURN A+Bのように数値変数だけでなく式を使うことが出来ます。
なお、RETURN文でなく、関数が終了した場合もCALLで呼ばれている場合には元々の処理に戻りますがそのときはRETURN 0と同様にRESULTには0が入っています。(RETURN 0が自動で実行されていると見ることも出来ます)

Q:イベント関数とはなんですか?

A:特別な働きをするために設定された関数です
eraにおいては、通常、同じ名前の関数は複数存在できません。仮に同じ名前の関数を作ると特定の法則に基づきどの関数が呼ばれるかが決定され、その関数のみが実行され、呼ばれなかったほかの同名関数は無視されます。
ところがイベント関数に関しては例外で、同じ名前の関数が複数存在してもその全てが処理されます。実行順番はやはり特定の法則がありますがそれは一応制御することもできます。
以下に各イベント関数を説明と一緒に列挙します。なお、イベント関数の存在は必須であるわけではないので、バリアントによってはそのイベント関数が存在しないこともありえます。
  • EVENTFIRST
ゲームをはじめからはじめるときに呼ばれるイベント関数です。
  • EVENTSHOP
SHOPに入るときに呼ばれるイベント関数です。
  • EVENTBUY
SHOPで何かを購入したときに呼ばれるイベント関数です。
  • EVENTTRAIN
TRAIN(調教)に入ったときに呼ばれるイベント関数です。
  • EVENTCOM
調教においてプレイヤーがコマンドを選択したあとに呼ばれるイベント関数です。
  • EVENTCOMEND
調教において、調教ターンの終了時に呼ばれるイベント関数です。
  • EVENTEND
調教終了処理の開始時に呼ばれるイベント関数です。
  • EVENTTURNEND
ターン終了時に呼ばれるイベント関数です。
  • EVENTLOAD
データをロードした直後に呼ばれるイベント関数です。Emuera専用です。

Q:イベント関数に付与する性質とは?

A:イベント関数の処理について決定できる仕組みです
前項のとおり、イベント関数は同名関数が複数あることがありますが、そのときにどんな順番で実行したらいいかを制御するために、その関数宣言行の次に性質をあらわすものを付与できます。
  • #PRI
これが付与された関数は他の同名関数よりも先に実行されます。ただ、これが付与された関数が複数ある場合にその中での優先度を決めることはそのままではできません。
  • #LATER
これが付与された関数は他の同名関数よりも後に実行されます。ただ、これが付与された関数が複数ある場合にその中での優先度を決めることはそのままではできません。
  • #SINGLE
これが付与された関数はこれを実行後にRETURN 1で終了した場合には他の同名関数があっても実行しません。RETURN 0で終了した場合には、他の同名関数を実行します。若干使い所が難しいので覚えなくても良いでしょう。

Q:特別な働きをする関数はありますか?

A:決まったタイミングで呼ばれる関数はあります
前々項でイベント関数のことに触れましたが、eramakerではそれ以外の関数の中にも呼ばれるタイミングが決まっている関数が存在します。それらは想定された処理をするとうまく動作するようになっています。もちろん、それを無視するコードの書き方も可能ではありますが。ともかく、以下にそういう関数を列記して説明します。なお当然のことながらバリアントによっては、これらの関数がないこともありえます。
以下の説明において、~であることを想定していますとなっている場合、そうでない使われ方をされている場合はありますがそれは実際のコードで確認してください。
  • SHOW_SHOP EVENTSHOPの後(もしくはそれがない場合にはBEGIN SHOP直後)に呼ばれる関数です。販売可能な商品の陳列とSHOPコマンド入力をさせることを想定しています。 
  • USER_SHOP SHOPで0~99以外の数字が選ばれた場合に呼ばれる関数です。SHOPでアイテムの購入以外のコマンド(調教開始や休憩やステータスチェックやセーブやロードなど)を実行するための処理に移行させる処理を想定しています。終了後はBEGINなどがなければSHOW_SHOPに戻ります。
  • SHOW_STATUS EVENTTRAINの後(もしくはそれがない場合にはBEGIN TRAIN直後)に呼ばれる関数です。調教に必要なステータスなどを表示することを想定しています。
  • COM_ABLExx SHOW_STATUSの後に、すべての調教コマンドについて呼び出される関数です。調教コマンドxxの実行可能か不可能かの決定を想定しており、返り値が0でなければ実行可能であり調教コマンドとして表示されます。0のときは実行不可能でありそのコマンドは表示されません。
  • SHOW_USERCOM COM_ABLExxの後に呼び出される関数です。COM_ABLExxの結果を踏まえて調教コマンドを表示したあとに、プレイヤーにコマンド入力をさせることを想定しています。
  • COMxx EVENTCOMの後(もしくはそれがない場合にはプレイヤーが調教コマンドを選んだ直後)に呼ばれる関数で、選んだ調教コマンドに対応したCOMxxのみが呼び出されます。対応するCOMxxがない場合にはこの下のUSERCOMが呼ばれるのでこちらは呼ばれません。選ばれた調教コマンドの実行処理を想定しています。
  • USERCOM 上の項目の通り、対応するCOMxxがない調教コマンドが入力された後に呼ばれる関数です。調教ターン中の実際の調教以外のステータス表示やヘルプや調教そのものの終了やプレイヤー交代などのコマンド処理を想定しています。
  • SOURCE_CHECK COMxxからの戻り値(RESULT:0)が0でないとき(すなわち調教コマンドが実行されたとき)にその直後に呼び出される関数です。調教コマンド実行後のSOURCE変化やパラメータへの反映などを想定しています。終了後はEVENTCOMENDがあればそれを呼び出します。そして、それが終わるかEVENTCOMENDがなければ…他にBEGIN命令などない場合NEXTCOM:0をチェックします。NEXTCOMが0以上ならばNEXTCOMの内容の調教コマンドを実行します。そうでなければSHOW_STATUSに戻ります。
  • SHOW_JUEL BEGIN ABLUP直後に呼び出される関数です。能力UPのために必要な対象の所有珠を表示させるというのを想定しています。
  • SHOW_ABLUP_SELECT SHOW_JUELの後に呼び出される関数です。プレイヤーに対象のどの能力をUPさせるかを選ばせるというのを想定しています。
  • ABLUPxx SHOW_ABLUP_SELECTにおいて、プレイヤーにより入力された数が0~99でなおかつ対応するABLUPxxがある場合に呼び出される関数です。対応するABLUPxxがなければ再入力を要求されるでしょう。また、入力した数が0~99の範囲外ならばこの下のUSERABLUPが呼ばれます。xxに対応した能力をUPさせる処理を想定しています。終了後はBEGINなどがなければSHOW_JUELに戻ります。
  • USERABLUP SHOW_ABLUP_SELECTにおいて、プレイヤーにより入力された数が0~99の範囲外である場合に呼び出される関数です。通常のABLUPによる能力UPではうまくいかない能力変化をさせる処理を想定しています。終了後はBEGINなどがなければSHOW_JUELに戻ります。
  • SAVE_INFO セーブデータに概要をつけるための関数です。この働きがあるのはこの関数のみです。呼び出されるタイミングはゲームデータがセーブされる直前です。

Q:BEGIN命令って何ですか?

A:さまざまなシステム命令を呼び出す命令です
以上の設問より、特別なタイミングで関数が存在することは分ったと思います。そして、その特別なタイミングをERBで制御するための命令がBEGIN命令です。これを使うことにより、SHOPを呼び出したり調教を開始したり調教を終了したりターンを終了したりすることができます。もちろん、この仕掛けを無視して当該処理関数を直接CALLすることによりゲームを進行させる仕組みにすることもできますが、その場合は、必要となる各種フラグの初期化などをすべてコードとして記述する必要があります。それが分らないうちは既存の構造を利用しましょう。冒険するのは理解してからでも遅くはありません。
BEGIN命令が実行された場合、すぐに当該処理が行われるわけではなく、イベント関数やCALLで呼ばれた関数など実行すべきコードを全て実行し終えてから処理が行われます。また、BEGIN命令ができないタイミングも存在し、そのタイミングでBEGIN命令がされた場合にエラーにより挙動がおかしくなることがあるので注意してください。
  • BEGIN SHOP SHOPを呼び出すBEGIN命令です。EVENTSHOPがあれば呼び出し、なければSHOW_SHOPに直行します。
  • BEGIN TRAIN 調教を開始するためのBEGIN命令です。調教関連の一部のフラグを初期化した後、EVENTTRAINがあれば呼び出し、なければSHOW_STATUSに直行します。
  • BEGIN AFTERTRAIN 調教を終了するためのBEGIN命令です。EVENTENDに直行します。
  • BEGIN ABLUP 能力アップ画面を呼び出すためのBEGIN命令です。SHOW_JUELに直行します。
  • BEGIN TURNEND ターン(調教ターンのことではない)を終了するためのBEGIN命令です。EVENTTURNENDに直行します。
  • BEGIN FIRST ゲームを最初からはじめるところを呼び出すためのBEGIN命令で、Emueraで拡張されたものですのでeramakerでは使えません。なお変数の初期化は行われないのでRESETDATA命令を使うべきでしょう。
  • BEGIN TITLE タイトル画面を呼び出すBEGIN命令で、Emueraで拡張されたものですのでeramakerでは使えません。なお変数の初期化は行われないのでRESETDATA命令を使うべきでしょう。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2010年07月20日 18:49