Emuera/eramaerb
eramaker ERBファイル書式(暫定版)
このファイルの説明を見るだけではイメージが沸きづらいと思います。まずサンプルゲームをプレイし、その後でサンプルゲームのERBファイルをながめながら見ていくとわかりやすいです。
基本情報
ERBファイルについて
- eramaker.exeの直下に、ERBという名前のフォルダをおき、そのなかにERBファイルを入れます。
- 拡張子が.ERBとなっていればどんなファイル名でもかまいません。
- メモ帳などのテキストエディタで編集してください。
ERBファイルの書き方
コメントとスペース
すべてのERBファイルにおいて、
- 1文字目が半角の;(セミコロン)だった場合、その行は無視されます。また、空行も無視されます。
- 行の終わりにセミコロンをつけたり、そのあとにコメントを書いたりしないでください。
- 行頭にある半角スペースやタブは何個つづいても無視されます。
; CORRECT ;お金の設定 MONEY = 500 時刻の設定 DAY = 10 TIME = 1 ;ゲーム開始 PRINT どうする? ; MISTAKE MONEY = 500; TIME = 5;(5日目からスタート)
半角での入力
数値、命令、変数名、関数名などを入力するときは半角にしてください。
; CORRECT MONEY = 500 PRINT ゲームをはじめます。 ; MISTAKE MONEY = 500 PRINT ゲームをはじめます。
文字列の入力
文字列を""でくくるとCORRECT常に動作しません。
; CORRECT PRINT 一日が終わった* * * ; MISTAKE PRINT "一日が終わった* * * "
1行で完結
長い命令を書くときも、2行以上に分けないでください。
; CORRECT PRINT 名雪の身体は敏感だったし経験も豊富だったから、多少乱暴にしても悦ぶ。口では否定していても、名雪はどんどん乱れていく。だが、眠っているという特殊な状況が俺に大胆な動きをためらわせた。 ; MISTAKE PRINT 名雪の身体は敏感だったし経験も豊富だったから、多少乱暴にしても悦ぶ。口では否定していても、名雪はどんどん乱れていく。だが、眠っているという特殊な状況が俺に大胆な動きをためらわせた。
変数と命令
変数について
調教SLGではパラメータの変化が命です。そのため、データを記憶し、足したり掛けたりといった計算ができる「変数」の使い方を覚えなくてはなりません。
変数に数値を入れる
=(イコール)を使います。半角で入力してください。=の前後は半角スペースかタブで区切ります。
eramakerで使える数値は基本的に整数です。小数を入力しないでください。
; CORRECT MONEY = 500 ; MISTAKE MONEY = 500 MONEY=500 MONEY = 3.14
変数に計算した数値を入れる
同じく=を使います。*が掛け算、/が割り算、%があまりを求めるということに注意してください。
計算結果が小数になるときは端数切捨てです。
; CORRECT ;MONEYを74にする MONEY = 15+34+25 ;MONEYを650にする MONEY = 150+(100-50)*10 ;MONEYを3にする MONEY = 10/3 ;MONEYをTIMEの10倍にする MONEY = TIME*10 ;DAYが0,1,2...となるとMONEYが0,10,20...となって7を超えると0に戻る MONEY = DAY%7*10 ; MISTAKE MONEY = 500×10÷4
変数に数を足したり掛けたりする
+=,-=,*=,/=,%=を使います。
; EXAMPLE MONEY = 100 TIME = 12 ;MONEYを150にする MONEY += 50 ;MONEYを750にする MONEY *= 7-2 ;MONEYを80にする MONEY -= 670 ;MONEYを8にする MONEY %= TIME ;MONEYを1にする MONEY /= TIME-4
配列について
- 変数は「配列」としてアクセスすることができます。「配列」は同じ名前の変数で複数のデータを管理するためのものです。
- 配列へのアクセスは:(コロン)を使います。半角で入力してください。間にスペースを入れないでください。
- 配列の後に入れられる数字は最低で0です。最大値は変数によって決まっています。詳しくはリストを参照してください。
- 配列の後に数字ではなく変数を入れることもできます。ただし、配列の後に配列を持ってくることはできません。
; CORRECT A = 35 ;FLAGに値を設定にする FLAG:0 = 0 FLAG:2 = 10 FLAG:35 = 440 ;FLAGで計算する FLAG:A += 100/FLAG:2 FLAG:2 *= FLAG:A ; MISTAKE FLAG:0 = 10 FLAG : 52 = 1000 FLAG:FLAG:20 = 10000 FLAG:91881816 = 1
二重配列について
- 例外的にコロンを2つ使ってアクセスできる変数もあります。キャラのデータに絡む変数です。
- (変数名):(所持キャラ番号):(変数番号)という形でアクセスします。
; EXAMPLE A = 2 ;5番目のキャラの0番目の能力をLV3にする ABL:5:0 = 3 ;A番目(2番目)のキャラの1番目の経験を+1する EXP:A:1 += 2
変数を画面に表示する
- もっとも簡単なのはPRINTVとPRINTVLという命令を使うことです。命令については後で詳しく述べます。
; EXAMPLE A = 2 PRINTV A A = 30 PRINTVL A B = 400 PRINTVL B ; RESULTS 230 400
文字列変数について
- 普通の変数は整数しか扱えませんが、文字列を扱える文字列変数もあります。ただし機能は限定的です。
- 文字列変数を画面に表示するにはPRINTSかPRINTSLという命令を使います。
; CORRECT STR:0 = あいうえお PRINTSL STR:0 ; MISTAKE ;+=で付け加えたりはできない STR:0 += うえお
変数リスト
- こちらを参照してください。
命令について(基本)
命令を使うことで、画面に文字を表示したり、条件判断をしたりすることができます。
命令の書き方
- (命令名) (命令内容)という書き方が基本です。(命令名)と(命令内容)は半角スペースかタブで区切ってください。
- (命令内容)がない命令の場合、そのまま改行してください。
; CORRECT PRINT これはテストです。 SIF 3 == 1+2 PRINT 当たり前です。 WAIT ; MISTAKE PRINTこれはテストです。 ;入力待ち WAIT 0
文字を表示する
- PRINTは文字を表示する命令です。PRINTLは文字を表示し、改行します。PRINTWは文字を表示し、入力待ちにします。
- PRINTVは変数の内容を表示する命令です。PRINTVLは変数の内容を表示し、改行します。PRINTVWは変数の内容を表示し、入力待ちにします。
- PRINTSは文字列変数の内容を表示する命令です。PRINTSLは文字列変数の内容を表示し、改行します。PRINTSWは文字列変数の内容を表示し、入力待ちにします。
- PRINTFORMは文字、変数、文字列変数などが組み合わさったものを表示できます。PRINTFORMLは同様にした上で改行し、PRINTFORMWは同様にした上で入力待ちにします。
- PRINTFORMSはPRINTFORMと同じように文字列変数の内容を変換して表示をします。PRINTFORMSLは同様にした上で改行し、PRINTFORMSWは同様にした上で入力待ちにします。
(末尾にWがつく命令で入力待ちのときは、Enterを押すことで次に進むので、結局改行されます)
; EXAMPLE
MONEY = 500
NAME:0 = 佐藤
PRINT お金は
PRINTV MONEY
PRINTL 円です。
PRINT 名前は
PRINTS NAME:0
PRINTL です。
PRINTFORML 繰り返すと、名前は%NAME:0%で、お金は{MONEY}円です。
PRINTFORMW 1000円もらって600円払うと、残りは{MONEY+1000-600}円です。
STR:0 = そのお金を5倍にすると、{(MONEY+1000-600)*5}円です。
PRINTFORMSW STR:0
; RESULTS
お金は500円です。
名前は佐藤です。
繰り返すと、名前は佐藤で、お金は500円です。
1000円もらって600円払うと、残りは900円です。
そのお金を5倍にすると、4500円です。
条件判断する
- 条件判断は; EXAMPLEを見ながら理解するのが早
- SIFは条件式が0でなければ(成立した場合)次の行を実行します。0の場合(成立しない場合)、次の行をスキップします。
- IFは条件式が0でなければ(成立した場合)、次の行からELSE、ELSEIF、ENDIFを迎えるまで実行していきます。0である場合(成立しない場合)、ELSE、ELSEIF、ENDIFを迎えるまでスキップします。(ELSEならその次の行からENDIFを迎えるまで実行します。ELSEIFで条件式が成立している場合、その次の行からELSEかELSEIFかENDIFを迎えるまで実行します。成立していなければELSEかELSEIFかENDIFを迎えるまでスキップし、同じことを繰り返します)
; EXAMPLE
A = 1
B = 2
C = 4
SIF A == 1
PRINTL テスト1
SIF B != 1
PRINTL テスト2
SIF C < 5
PRINTL テスト3
IF A+B > 2
IF C >= 6
PRINTL テスト4
ELSE
PRINTL テスト5
ENDIF
IF A == 1 && B == 3
PRINTL テスト6
ELSEIF A == 1 || B == 3
PRINTL テスト7
ELSEIF A > 1 || (B > 2 && C > 2)
PRINTL テスト8
ENDIF
ELSEIF A+B == 2
PRINTL テスト9
ELSE
PRINTL テスト10
ENDIF
; RESULTS
テスト1
テスト2
テスト3
テスト5
テスト7
- 「等しい」には==を、「等しくない」には!=を、「左が大きい」には>を、「左が右以上」には>=を、「右が大きい」には<を、「右が左以上」には<=を使います。すべて半角で入力してください。
- 「かつ」には&&を、「または」には||を使います。すべて半角で入力してください。
- カッコを使い、複雑な条件を記述することもできます。
入力と入力待ち
- 文章を表示するなどして、入力を待つときにはWAITを使います。
(※普段はPRINTWなどを使うと、少ない行数で表現できるため見やすいです)
- 整数をプレイヤーに入力させたいときはINPUTを使います。入力された結果はRESULTに格納されます。
- 文字列をプレイヤーに入力させたいときはINPUTSを使います。入力された結果はRESULTSに格納されます。
; EXAMPLE
PRINT データ入力開始。
WAIT
PRINTL 年齢を入力してください。
INPUT
PRINTL 名前を入力してください。
INPUTS
PRINTFORML %RESULTS%さんは{RESULT}歳ですね。
繰り返しとGOTO
- 同じ命令を繰り返したいときはREPEATを使います。RENDがあるまで繰り返されます。繰り返した回数はCOUNTに格納されます。
- REPEATの中にREPEATは作れませんので注意してください。
- REPEATからRENDまでの途中でCONTINUEを使うと、REPEATのあるところまで戻ります。BREAKを使うと、繰り返しをやめてRENDの次の行までスキップします。
- 別のところに一気に移動したいときはGOTOを使います。GOTOを使うときは、$を使って「ラベル」を登録しておく必要があります。
; Example 1
REPEAT 10
PRINT あいう
REND
;0文字をPRINTLで書くことで改行
PRINTL
REPEAT 5
PRINTFORML 点数:{COUNT*5}
REND
; Results Of Example 1
あいうあいうあいうあいうあいうあいうあいうあいうあいうあいう
点数:0
点数:5
点数:10
点数:15
点数:20
; Example 2
MONEY = 300
REPEAT 5
SIF MONEY <= COUNT*100
BREAK
PRINTFORML {COUNT*100}円よりは金が多い。
REND
REPEAT 5
SIF MONEY == COUNT*100
CONTINUE
PRINTFORML 所持金は{COUNT*100}円ではない。
REND
; Results Of Example 2
0円よりは金が多い。
100円よりは金が多い。
200円よりは金が多い。
所持金は0円ではない。
所持金は100円ではない。
所持金は200円ではない。
所持金は400円ではない。
; Example 3
$INPUT_LOOP
PRINTL 0から9までの数字を入力してください。
INPUT
SIF RESULT < 0 || RESULT > 9
GOTO INPUT_LOOP
PRINTFORML {RESULT}が入力されました。
関数について
- プログラムを最初から最後まで続けて書くとわかりづらいものです。
- 部分部分に切り分けてわかりやすくするためには、「関数」を使います。
- 関数は@を使って登録します。@の後に、アルファベットと_(アンダーバー)を使って関数名を書いてください。関数名は半角で入力してください。
- ゲームの最初に呼ばれる関数は「EVENTFIRST」という名前にします(これについては後に詳述)。
- 他の関数に移動するには、JUMPを使います。
- 他の関数に移動し、その関数が終わったら再び元の位置から再開したいときはCALLを使います。
- CALLで呼ばれた関数の中でRETURNを使うと、その関数を途中で終えることができます。そのとき、RESULTにRETURNで指定した数値が格納されます。RETURNを使わずに関数が終了した場合、RESULTには0が格納されます。
- RESTARTを使うと、その関数の最初からやり直します。
; EXAMPLE
@EVENTFIRST
PRINTW ゲームスタート。
CALL OPENING
PRINTFORMW オープニングの結果は{RESULT}でした。
CALL GAME_MAIN
PRINTFORMW ゲームの結果は{RESULT}でした。
JUMP ENDING
PRINTL JUMPしたのでこの部分は表示されない。
@OPENING
PRINTW オープニングです。
RETURN 25
@GAME_MAIN
PRINTW ゲーム中です。
PRINTL RETURNなしで終わります。
@ENDING
PRINTW エンディングです。
RESTART
; RESULTS
ゲームスタート。
オープニングです。
オープニングの結果は25でした。
ゲーム中です。
RETURNなしで終わります。
ゲームの結果は0でした。
エンディングです。
エンディングです。
エンディングです。
エンディングです。
エンディングです。
.......(以下無限)
その他、基本的な命令
- QUITを使うとゲームを終了します。
- DRAWLINEを使うと画面の左端から右端まで----と線を引きます。
- TIMESを使うと、小数を使った掛け算ができます。eramakerでは基本的に数値を整数で扱うので、小数を絡めたいときはこの命令を使ってください。TIMES (変数) , (小数値)という形で使います。
- BARを使うと、[*****....]のようにグラフが表示できます。BARLの場合は改行されます。BAR (変数) , (最大値), (長さ)という形で使います。
; EXAMPLE
MONEY = 500
DRAWLINE
BARL MONEY , 1000 , 20
PRINTFORMW {MONEY}円持っていました。
DRAWLINE
TIMES MONEY , 1.25
BARL MONEY , 1000 , 20
PRINTFORMW {MONEY}円になりました。ゲームを終了します。
QUIT
; RESULTS
---------------------------------------------------------------------
[**********..........]
500円持っていました。
---------------------------------------------------------------------
[************........]
625円になりました。ゲームを終了します。
命令について(調教用)
- eramakerには、調教のために使う特殊な命令がいくつかあります。
調教用データの表示
- PRINT_ABLはキャラの能力を表示します。
- PRINT_TALENTはキャラの素質を表示します。
- PRINT_MARKはキャラの刻印を表示します。
- PRINT_EXPはキャラの経験を表示します。
- PRINT_PALAMはキャラの調教中パラメータを表示します。
- 以上の命令を使うときには、どのキャラのデータを表示したいのかを指定してください。たとえばPRINT_ABL 0なら、大体の場合は主人公の能力を表示することになります。
- PRINT_ITEMは所持しているアイテムを表示します。
- PRINT_SHOPITEMはショップで売っているアイテムを表示します。
- UPCHECKは調教コマンドによる調教中パラメータの変化を表示します。
キャラの管理
- ADDCHARAはキャラを追加します。キャラ番号3のキャラを追加したいならADDCHARA 3のようにします。
- ADDSPCHARAはSPキャラを追加します。キャラ番号3のSPキャラを追加したいならADDSPCHARA 3のようにします。
(SPキャラとは、キャラフラグの0番が1であるキャラのことを指します)
- DELCHARAはADDCHARAなどで追加したキャラを削除します。
; EXAMPLE
;キャラ番号0のキャラの名前が浩之で主人公。
;キャラ番号3のキャラの名前が智子、5のキャラの名前がレミィ、6のキャラの名前が琴音だとする
PRINTFORML 今いるキャラは{CHARANUM}人です。
ADDCHARA 3
ADDCHARA 5
ADDCHARA 6
PRINTFORML 今いるキャラは{CHARANUM}人です。
REPEAT CHARANUM
PRINTFORML {COUNT}番目に%NAME:COUNT%。
REND
DELCHARA 2
PRINTFORML 今いるキャラは{CHARANUM}人です。
REPEAT CHARANUM
PRINTFORML {COUNT}番目に%NAME:COUNT%。
REND
; RESULTS
今いるキャラは1人です。
今いるキャラは4人です。
0番目に浩之。
1番目に智子。
2番目にレミィ。
3番目に琴音。
今いるキャラは3人です。
0番目に浩之。
1番目に智子。
2番目に琴音。
セーブ関係
- SAVEGAMEはセーブ画面を、LOADGAMEはロード画面を呼びます。いずれもSHOPでないと呼び出せません。
- PUTFORMは@SAVEINFOという特殊な関数でのみ使えます。PRINTFORMと同様の書式で書くことにより、セーブデータに概要をつけることができます。何日目か、キャラの能力はどれくらいか、どのキャラを調教しているかなどのデータを書き込むとよいでしょう。
BEGIN
- BEGINはさまざまなシステム命令を呼び出すことにより、ゲームを進行させます。
- BEGINを呼んだ時点で実行中の関数は終了します。CALLでどこからか呼ばれてきたとしても、元の関数に戻ることはありません。
- BEGIN TRAINは調教を開始します。
- BEGIN AFTERTRAINは調教を終了します。
- BEGIN ABLUPは能力アップ画面を呼び出します。
- BEGIN TURNENDはそのターンを終了します。
- BEGIN SHOPはSHOPを呼び出します。
更新履歴
- 06/05/05 暫定版公開。