eraで何かを開発したい人たち向けの覚え書きです。なお対象はeramakerおよびEmueraを想定しています。eramaker2およびなでしこに関しては各自研究するなりしてください。
 また、以降においては、WINDOWSXP/Vista/7での開発を想定しています。WINDOWS95/98/98SE/Me/NT/2000やMacや携帯OSなどでの開発に関しては各自研究するなりしてください。



拡張子を表示させられるようにする。

 WINDOWSのファイルには必ず、拡張子と呼ばれるファイル属性をあらわす部分が存在しますが、OSのデフォルト設定でそれが表示されないようになっています。そのままではeramakerで開発することはできないと断言できますので表示されるように設定しましょう。詳しくは各OSの説明をみるかネットで検索してください。以下では代表的なOSについて説明します。

WINDOWS XPの場合

  • 「スタート」ボタンから「マイ コンピュータ」を開きます。
  • 「メニューバー」の「ツール」から「フォルダオプション」を選択します。
  • 「フォルダオプション」画面が表示されるので「表示」タブを選択します。
  • 「詳細設定」の「登録されているファイルの拡張子は表示しない」のチェックを外します。
  • 「ファイルとフォルダの表示」で「すべてのファイルとフォルダを表示する」を選択します。
  • 「OK」ボタンをクリックすれば設定変更が完了です、これで全てのファイルの拡張子が表示されます。

WINDOWS Vistaの場合

  • 適当なフォルダから、整理、フォルダと検索のオプションをクリックします。
  • 表示タブから、登録されている拡張子は表示しない、のチェックを外します。
  • 適用をクリックし、ウィンドウを閉じます。

WINDOWS 7の場合

  • [スタート]→[コントロールパネル]の順にクリックします。
  • コントロールパネルの表示方法:[小さいアイコン]をクリックします。
  • [フォルダオプション]をクリックします。
  • フォルダオプションウィンドウが開かれたら、[表示]タブを選択します。
  • 『登録されている拡張子は表示しない(下から3つ目)』のレ点を外す。
  • [適用]ボタンをクリックします。



CSVフォルダ内のファイル

 eramakerとEmueraが正常に動くにはそれらの実行ファイル(eramakerならばeramaker.exe、EmueraならばEmueraXXX.exe XXXにはEmueraのバージョンが入っています)と同じフォルダにCSVフォルダとERBフォルダが必要になります。
 ここでは、そのうちCSVフォルダ内のファイルについての基礎を説明します。
 なお、CSVフォルダ内のファイルに関しては、規則にしたがったファイル名前のファイルのみ読み込まれます。また、そのファイルの中身はテキストファイルでなければなりません。

.configファイル

 Emuera専用に、_default.configと_fixed.configという2つのファイルが存在しています。これらはEmuera自体の設定のためのファイルでEmuera起動時に最初に読み込まれて設定されるものです。なお、上の2つ以外の.configファイルが存在したとしてもそれらは無視されます。また、当然ですが、eramakerはこれらのファイルを読み込みません。

.CSVファイル

 拡張子がCSVとなっていますが、一般的な「表計算」ファイルではなくて単なるテキストファイルです。ですが、拡張子がTXTとかERBとかになっていたら読み込まれませんので注意してください。また、内部での記述ルールはERBファイルとは異なります。
eramakerでもEmueraでも使われるCSVファイル
 eramakerでもEmueraでも読み込まれるCSVファイルは以下の通りです。
CHARA**.CSV
ABL.CSV
TALENT.CSV
EXP.CSV
MARK.CSV
PALAM.CSV
ITEM.CSV
STR.CSV
TRAIN.CSV
GAMEBASE.CSV
Emuera専用のCSVファイル
 Emueraでのみ読み込まれるCSVファイルは以下の通りです。
BASE.CSV
SOURCE.CSV
EX.CSV
EQUIP.CSV
TEQUIP.CSV
FLAG.CSV
TFLAG.CSV
CFLAG.CSV
TCVAR.CSV
CSTR.CSV
STAIN.CSV
CDFLAG1.CSV
CDFLAG2.CSV
_REPLACE.CSV
_RENAME.CSV
VARIABLESIZE.CSV
(ここより以下はEmuera ver.1804より)
STRNAME.CSV
TSTR.CSV
SAVESTR.CSV
GLOBAL.CSV
GLOBALS.CSV
 上にあるCSV以外の名前のCSVファイルがあっても読み込まれません。
間違いやすいCSVファイル
  • JUEL.CSV
 これは読み込まれません。とりあえず、PALAM.CSVからチェックすることが想定されてはいるようですが、バリアントによってはそうでない場合もあるでしょう。
  • NOWEX.CSV
 これは読み込まれません。EX.CSVからチェックすることが想定されていると思われます。
必要がなければ使わなくていい
 CSVファイルのほとんどは必要でなければあえて作っておく必要はありません。たとえば、ABL.CSVがなくても基本的には問題なく動きます。しかしながらABL.CSVを設定しておくと以下のようなメリットがあります。
・ABLNAME文字列変数にABL.CSVの内容が代入される。
・ABLという数値変数がどういう意味なのかを呈示できる。
Emueraの場合はさらに
・ABL:{ABLNAMEの中身} という記述をERBコード内ですることができる。
 (ABL.CSVの中で 「0,従順」と指定されていた場合
 従来は ABL:0 などとすべきところを、 ABL:従順 とも記述できる)
 これらのメリットを考慮しても不必要だと思ったならABL.CSVは必要ありません。ですが、ABL.CSVがあるほうが結果的にわかりやすくなると思われます。
 以上のことは、TALENT.CSV・EXP.CSV・MARK.CSV・PALAM.CSV・ITEM.CSV・TRAIN.CSVにも当てはまります。
 またEmueraならばBASE.CSV・SOURCE.CSV・EX.CSV・EQUIP.CSV・TEQUIP.CSV・FLAG.CSV・TFLAG.CSV・CFLAG.CSV・TCVAR.CSV・CSTR.CSV・STAIN.CSV・CDFLAG1.CSV・CDFLAG2.CSVにも当てはまるでしょう。

 また、Emuera専用である_REPLACE.CSV・_RENAME.CSV・VARIABLESIZE.CSVについても以下の理由があれば必要はないでしょう。
・_REPLACE.CSV
 ハードコードされた処理の一部を入れ替える処理を行わない場合。
・_RENAME.CSV
 コードの一部について書き換え処理をしない場合。
・VARIABLESIZE.CSV
 各変数の配列要素の上限を特に設定しない場合。
 これらについて詳しくは、EmueraWikiおよびそのほかera関連の開発資料を各自調査してください。ここではこれ以上は説明しません。



ERBフォルダ内のファイル

 eramakerとEmueraが正常に動くにはそれらの実行ファイル(eramakerならばeramaker.exe、EmueraならばEmueraXXX.exe XXXにはEmueraのバージョンが入っています)と同じフォルダにCSVフォルダとERBフォルダが必要になります。
 ここでは、そのうちERBフォルダ内のファイルについての基礎を説明します。
 なお、ERBフォルダ内のファイルに関しては、ERBの拡張子のついたすべてのファイルを読み込みます。そして、それらはテキストファイルでなければなりません。

コードの実行に関して

 eramakerやEmueraが起動するとCSVフォルダ内のファイルによる初期設定およびエラーチェックをおこない、その後に特定の順序にしたがってひとつずつ順番にERBファイル内の記述を実行していきます。同時に複数のERBファイル内の記述を実行することはありません。



全角文字と半角文字の区別をつける。

 era開発において、全角文字と半角文字は別物です。

例1:A += 1

 A += 1
 A += 1
 ここで上の例のうち上段の構文は、A:0変数に1を加算するというものです。
 下段の構文においては、変数名であるA演算子である+=加算されるべき数字である1もいずれも全角文字では認識できずにエラーになってしまいます。
 これは、eramakerおよびEmueraにおいては命令や変数や演算子に関しては半角文字でしか認識しないために起こることです。

例2:PRINTL あいう

 PRINTL あいう
 PRINTL あいう
 ここで上の例のうち上段の構文は、「あいう」という言葉を表示して改行するというものです。
 下段の構文においては命令語であるPRINTLのRのみが全角文字になってしまっています。これも命令語として認識できないためエラーになってしまうのです。



空白文字について知る

eraにおいては命令語の直後に必要に応じて半角スペース1文字分の空白が必要となることがあります。

例1:PRINTFORM {COUNT}

 PRINTFORM {COUNT}
 PRINTFORM{COUNT}
 PRINTFORM {COUNT}
 ここで上の例のうちの最上段の構文は、COUNT変数の数値を表示するというものです。
 中の段の構文においては命令語であるPRINTFORMの直後に必要な半角スペースがありませんのでエラーになってしまいます。
 下の段の構文においては命令語であるPRINTFORMの直後に全角スペースが空いていますが、全角スペースは半角スペースの変わりとはなりえませんのでこれもエラーとなってしまいます。

例2:CALL HOGE

 CALL HOGE
 CALL                                                                           HOGE
 ここで上の例のうち上段の構文は、関数HOGEを呼び出すというものです。
 下の段の構文のように半角スペースを複数並べた場合についてはeramakerとEmueraとで動作が異なります。
・eramakerの場合
 エラーを出して、CALLは行わずに次の行に処理を移します。
 つまり、関数「@                                                                          HOGE」
が見つけられないのでこういう挙動になります。
・Emueraの場合
 エラーは出さずに、関数HOGEを呼び出します。つまり、関数名の前の半角スペースは一切無視されます。
詳しい説明
 この例からは以下のことが言えます。
・eramaker
 関数名の冒頭に「半角スペースによる空白」が存在している場合はそれを関数名の一部として扱う。
 >「HOGE」と「 HOGE」と「  HOGE」などはそれぞれ別の関数として扱われる。
・Emuera
 関数名の冒頭に「半角スペースによる空白」が存在してもそれを無視する。
 >「HOGE」と「 HOGE」と「  HOGE」はすべて同名関数として扱われる。



「真」と「偽」について

 era開発によって重要な概念として、「真」「偽」というものがあります。

「真」とは

 「真」とは以下の状態のいずれかであることを示します。
  • 0以外の数字
  • 計算の結果が成立する場合

「偽」とは

 「偽」とは以下の状態のいずれかであることを示します。
  • 数字の0
  • 計算の結果が成立しない場合
注意
 eramakerやEmueraにおいては直接文字列を評価できないため、空文字列や"0"という文字列が真偽であるかどうかというのは直接判定することはできません。つまり…
 SIF "0"
 SIF STR:0
 上の例の構文はいずれもエラーを出してしまいます。

「真」「偽」の判定の仕方

 IFおよびSIFにおける条件式において、eramakerやEmueraはその条件式が「真」であればその直後のコードを実行します。その際に「真」か「偽」かいずれかの結果が必ず判定されます。それ以外の「第三の値」はとりえません。
例1:数字そのものの場合
 SIF 0
 SIF 2
 ここで上の例のうち上段の構文においては、条件式は数字の0であるので「偽」となります。
 また、下段の構文においては、条件式は数字の0以外であるので「真」になります。
例2:数字型変数単独の場合
 SIF A
 ここで上の例の構文においては、条件式は数値型変数A:0の中身が0ならば「偽」、そうでなければ「真」となります。
例3:数式の場合
 SIF B <= 12
 ここで上の例の構文においては、条件式は数値型変数B:0の中身が12以下ならば成り立つので「真」、12より大きいならば成り立たないので「偽」となります。
例4:文字列比較式の場合
 この例はEmuera専用です。eramakerでは意図通り動作しません。
 SIF STR:0 == "HIGH"
 ここで上の例の構文においては、条件式は文字列変数STR:0の中身が「HIGH」ならば成り立つので「真」、そうでなければ「偽」となります。なお「"HIGH"」とか「HIGH」とかは成り立たないことに注意してください。
 また、この例がEmuera専用なのは、eramakerが文字列演算や文字列操作に不自由な仕様になっているからです。



ブロック構文

 eraには複数の種類のブロック構文が存在します。

ブロック構文とは?

 ブロック構文とは複数の命令の組み合わせによって形成される一群のコード群のことです。種類は以下の通りです。
IF〜ELSEIF〜ELSE〜ENDIFブロック
 条件分岐をおこなうためのブロック構文です。
 IF (条件A)
 ^   (条件A)が真ならば実行されるべきコード
 ELSEIF (条件B)
 ^   (条件A)が偽であり、なおかつ(条件B)が真ならば実行されるべきコード
 ELSE
 ^   (条件A)も(条件B)も偽であるならば実行されるべきコード
 ENDIF
 特定の条件を満たしているかどうかで処理を分けたいときに使われるものです。なお、ELSEIFやELSEについては不要ならば記述しなくても問題はありませんが、ENDIFはIFブロックの終点を表すので必ず記述しなければなりません。
REPEAT〜CONTINUE〜BREAK〜RENDブロック
 ループ(繰り返し)処理をおこなうためのブロック構文です。
 REPEAT (数値or数値型変数)
 ^   ループ中に実行されるべきコード
 ^   SIF (条件C)
 ^   ^   CONTINUE
 ^   SIF (条件D)
 ^   ^   BREAK
 REND
 REPEAT文の後ろの数字の回数だけREPEAT〜RENDの中を繰り返し実行したいときに使われるものです。なお、CONTINUEやBREAKについては不要ならば記述しなくても問題ありませんが、RENDはREPEATブロックの終点を表すので必ず記述しなければなりません。
 なお、REPEATループ中はCOUNT:0変数がループの最初に0にセットされ、ループするごとに+1されていきます。このCOUNT:0変数のことをカウンター変数と言うこともあります。
 SIFというのは、その直後の条件が真であるならばその次の一行を実行するが、偽ならばその次の一行は実行しないという分岐構文です。IF文の簡略系だと考えればいいです。
 CONTINUEとは、それ以降からRENDまでのコードを実行せずにループの最初であるREPEATに飛ばすというものです。
 BREAKとは、その時点でループを打ち切ってRENDの次の行に飛ばすというものです。
SELECTCASE〜CASE〜CASEELSE〜ENDSELECTブロック
 Emuera専用の条件分岐をおこなうためのブロック構文です。
 SELECTCASE (条件式)
 ^   CASE (条件式の評価E)
 ^   ^   (条件式の評価E)のときに実行されるべきコード
 ^   CASE (条件式の評価F)
 ^   ^   (条件式の評価E)でなくて、なおかつ(条件式の評価F)のときに実行されるべきコード
 ^   CASEELSE
 ^   ^   (条件式の評価E)でも(条件式の評価F)でもない場合において実行されるべきコード
 ENDSELECT
 IFブロックと違って、条件式は真偽ではなくて得られた値(数値の場合もあれば文字列の場合もある)そのものにより分岐させるために使われるものです。なお、CASEELSEについては不要ならば記述しなくても問題ありませんが、ENDSELECTはSELECTCASEブロックの終点を表すので必ず記述しなければなりません。
FOR〜CONTINUE〜BREAK〜NEXTブロック
 Emuera専用のループ(繰り返し)処理をおこなうためのブロック構文です。
 FOR (数値型変数),数式1,数式2,数式3
 ^   ループ中に実行されるべきコード
 ^   SIF (条件G)
 ^   ^   CONTINUE
 ^   SIF (条件H)
 ^   ^   BREAK
 NEXT
 REPEAT文の完全上位構文で、カウンター変数に数値変数ならばなんでも利用していいものとなっています。数式1はそのカウンター変数のループに入るときの初期値で、数式2はそのカウンター変数がその数値になった時点でループを抜け出すというもので、数式3はループを1回まわるごとにカウンター変数にどれだけ加算させるかというものです。数式3がマイナスならばカウンター変数は減少していきますし省略すれば1を加算していくことになります。
なお、CONTINUEやBREAKについては不要ならば記述しなくても問題ありませんが、NEXTはFORブロックの終点を表すので必ず記述しなければなりません。CONTINUEやBREAKの働きはREPEAT文のときと同じです。
WHILE〜CONTINUE〜BREAK〜WENDブロック
 Emuera専用のループ(繰り返し)処理をおこなうためのブロック構文です。
 WHILE (数式)
 ^   ループ中に実行されるべきコード
 ^   SIF (条件G)
 ^   ^   CONTINUE
 ^   SIF (条件H)
 ^   ^   BREAK
 WEND
 WHILEの後ろの数式が真である(0以外である)限りはループし続けるという構文です。当然、ループ内でその数式が真になるコードを記述しなければ無限ループに陥るでしょう。なお、CONTINUEやBREAKについては不要ならば記述しなくても問題ありませんが、WENDはWHILEブロックの終点を表すので必ず記述しなければなりません。CONTINUEやBREAKの働きはREPEAT文のときと同じです。
 DOループと違うのはこちらはループ内を実行しないことがありえるということです。
DO〜CONTINUE〜BREAK〜LOOPブロック
 Emuera専用のループ(繰り返し)処理をおこなうためのブロック構文です。
 DO
 ^   ループ中に実行されるべきコード
 ^   SIF (条件G)
 ^   ^   CONTINUE
 ^   SIF (条件H)
 ^   ^   BREAK
 LOOP (数式)
 LOOPの後ろの数式が真である(0以外である)限りはループし続けるという構文です。当然、ループ内でその数式が真になるコードを記述しなければ無限ループに陥るでしょう。なお、CONTINUEやBREAKについては不要ならば記述しなくても問題ありませんが、DOはDOブロックの始点を表すので必ず記述しなければなりません。CONTINUEやBREAKの働きはREPEAT文のときと同じです。
 WHILEブロックと違うのはこちらは必ずループ内部を一回は実行するということです。
PRINTDATA系〜DATA〜DATALIST〜ENDLIST〜ENDDATAブロック
 Emuera専用の表示に特化した分岐ブロック構文です。
 PRINTDATA (数値変数)
 ^   DATA (表示されるべき文字)
 ^   DATAFORM (表示されるべきFORM文字列)
 ^   DATALIST
 ^   ^   DATA (表示されるべき文字)
 ^   ^   DATAFORM (表示されるべきFORM文字列)
 ^   ENDLIST
 ENDDATA
 ブロックの中の DATALIST〜ENDLIST部分の部分およびそのLISTの中にないDATAおよびDATAFORMの後ろにある文字を確率均一でランダムに選別して表示するという構文です。DATAとDATAFORMの違いはFORM文字列を使えないか使えるかの違いです。また、DATAやDATAFORMは通常では一行分しか表示できませんが、DATALIST〜ENDLISTで囲むことによりその中で何行でも記述することができます。
 並んでいるどのDATAが表示されたのか?については、PRINTDATAの後ろの数値変数に数値として代入されますので、その後のコードで参照することができます。ちなみに、一番上のDATAなら1、その次なら2…というふうに代入されています。
 あくまで表示に特化しており演算や関数呼び出しなど他の用途には利用できません。
 PRINTDATAには以下の亜種が存在します。
PRINTDATA   FORCEKANAの指定を無視し、SETCOLORによる色指定の影響を受けて表示します。
PRINTDATAK  FORCEKANAによる指定の影響を受けて表示します。
PRINTDATAD  SETCOLORによる色指定を無視してCONFIG指定の色で表示します。
PRINTDATAL  表示した後に改行します。
PRINTDATAW  表示した後に改行して、WAITします。
PRINTDATAKL PRINTDATAKとPRINTDATALのそれぞれを合わせて適用します。
PRINTDATADL PRINTDATADとPRINTDATALのそれぞれを合わせて適用します。
PRINTDATAKW PRINTDATAKとPRINTDATAWのそれぞれを合わせて適用します。
PRINTDATADW PRINTDATADとPRINTDATAWのそれぞれを合わせて適用します。
TRYCCALL系〜CATCH〜ENDCATCHブロック
 Emuera専用の関数呼び出しに特化した分岐構文です。
 TRYCCALL (関数1) (, 引数1, ……)
 ^   (関数1)が存在し、(関数1)の処理が終わったあとに実行されるべきコード。
 CATCH
 ^   (関数1)が存在しなかったときに実行されるべきコード。
 ENDCATCH
 ただのTRYCALLの場合ならば、関数がなかった場合の専用処理を記述することができませんが、このTRYCCALLならば可能です。なお、TRYCCALLとCATCHの間のコードについては不要ならばなくてもエラーにはなりません。
 また、この構文にはFORM構文を利用できる派生が存在します。
 TRYCCALLFORM (FORM構文で記述された関数) (, 引数1, ……)
 ^   (関数)が存在し、(関数)の処理が終わったあとに実行されるべきコード。
 CATCH
 ^   (関数)が存在しなかったときに実行されるべきコード。
 ENDCATCH
TRYCJUMP系〜CATCH〜ENDCATCHブロック
 Emuera専用の関数移動に特化した分岐構文です。
 TRYCJUMP (関数2) (, 引数1, ……)
 CATCH
 ^   (関数2)が存在しなかったときに実行されるべきコード。
 ENDCATCH
 ただのTRYJUMPの場合ならば、関数がなかった場合の専用処理を記述することができませんが、このTRYCJUMPならば可能です。
 また、この構文にはFORM構文を利用できる派生が存在します。
 TRYCJUMPFORM (FORM構文で記述された関数) (, 引数1, ……)
 CATCH
 ^   (関数)が存在しなかったときに実行されるべきコード。
 ENDCATCH
TRYCGOTO系〜CATCH〜ENDCATCHブロック
 Emuera専用の関数内移動に特化した分岐構文です。
 TRYCGOTO (ラベル1) 
 CATCH
 ^   (ラベル1)が存在しなかったときに実行されるべきコード。
 ENDCATCH
 ただのTRYGOTOの場合ならば、ラベル1がなかった場合の専用処理を記述することができませんが、このTRYCGOTOならば可能です。
 また、この構文にはFORM構文を利用できる派生が存在します。
 TRYCGOTOFORM (FORM構文で記述されたラベル) (, 引数1, ……)
 CATCH
 ^   (ラベル)が存在しなかったときに実行されるべきコード。
 ENDCATCH
TRYCALLLIST〜FUNC〜ENDFUNCブロック
 Emuera専用の関数呼び出しに特化した分岐構文です。
 TRYCALLLIST 
 ^   FUNC (関数3) (, 引数1, 引数2……)
 ^   FUNC (関数4) (, 引数1, 引数2……)
 ENDFUNC
 複数の関数を上から順に存在を調べ、最初に見つかった関数のみを呼び出す(CALLする)というもので、戻ってきたらENDFUNCの次に飛びます。なお、ENDFUNCはTRYCALLLISTブロックの終点を表すので必ず記述しなければなりません。
TRYJUMPLIST〜FUNC〜ENDFUNCブロック
 Emuera専用の関数移動に特化した分岐構文です。
 TRYJUMPLIST 
 ^   FUNC (関数5) (, 引数1, 引数2……)
 ^   FUNC (関数6) (, 引数1, 引数2……)
 ENDFUNC
 複数の関数を上から順に存在を調べ、最初に見つかった関数へ移動する(JUMPする)というもので、どの関数も見つからなければENDFUNCの次に飛びます。なお、ENDFUNCはTRYJUMPLISTブロックの終点を表すので必ず記述しなければなりません。
TRYGOTOLIST〜FUNC〜ENDFUNCブロック
 Emuera専用の関数内移動に特化した分岐構文です。
 TRYGOTOLIST 
 ^   FUNC (ラベル2) 
 ^   FUNC (ラベル3) 
 ENDFUNC
 複数のラベルを上から順に存在を調べ、最初に見つかったラベルへ移動する(GOTOする)というもので、どのラベルも見つからなければENDFUNCの次に飛びます。なお、ENDFUNCはTRYGOTOLISTブロックの終点を表すので必ず記述しなければなりません。



Menu

メニュー

過去スレ


初めて遊ぶ時、
何か困った時や
わからない時は
まず下を読んでください


本体・パッチ関連






リンク

スレッド

各スレッドは、こちらを読んでから書き込むことをおすすめします。
eratohoスレ(era板 避難所)
【調教SLG】eratoho総合スレ【デート経験306】

避難所スレ(したらばのちゅっちゅ板)
eratoho避難所スレ

eraシリーズ総合スレ(2chのエロ同人板)
【調教SLG】eraシリーズを語るスレ24【サークル獏】


【スレッド編集】

どなたでも編集できます