跳转至

eramakerのERB書式

当ページはeramakerの情報について記載しています。現行のEmueraとは仕様が違う部分があります

基本情報

ERBファイルについて

  • eramaker.exeの直下に、ERBという名前のフォルダをおき、そのなかにERBファイルを入れます。
  • 拡張子が.ERBとなっていればどんなファイル名でもかまいません。
  • メモ帳などのテキストエディタで編集してください。

ERBファイルの書き方

  • コメントとスペース すべてのERBファイルにおいて、

    • 1文字目が半角の;(セミコロン)だった場合、その行は無視されます。また、空行も無視されます。
    • 行の終わりにセミコロンをつけたり、そのあとにコメントを書いたりしないでください。
    • 行頭にある半角スペースやタブは何個つづいても無視されます。

    ;お金の設定
    MONEY = 500
    時刻の設定
    DAY = 10
    TIME = 1
    ;ゲーム開始
    PRINT どうする?
    

    MONEY = 500;
    TIME = 5;(5日目からスタート)
    
  • 半角での入力 数値、命令、変数名、関数名などを入力するときは半角にしてください。

    MONEY = 500
    PRINT ゲームをはじめます。
    

    MONEY = 500
    PRINT ゲームをはじめます。
    
  • 文字列の入力 文字列を""でくくると正常に動作しません。

    PRINT 一日が終わった・・・
    

    PRINT "一日が終わった・・・"
    
  • 1行で完結 長い命令を書くときも、2行以上に分けないでください。

    PRINT 名雪の身体は敏感だったし経験も豊富だったから、多少乱暴にしても悦ぶ。口では否定していても、名雪はどんどん乱れていく。だが、眠っているという特殊な状況が俺に大胆な動きをためらわせた。
    

    PRINT
    名雪の身体は敏感だったし経験も豊富だったから、多少乱暴にしても悦ぶ。口では否定していても、名雪はどんどん乱れていく。だが、眠っているという特殊な状況が俺に大胆な動きをためらわせた。
    

変数と命令

変数について

調教SLGではパラメータの変化が命です。そのため、データを記憶し、足したり掛けたりといった計算ができる「変数」の使い方を覚えなくてはなりません。

  • 変数に数値を入れる

    • =(イコール)を使います。半角で入力してください。=の前後は半角スペースかタブで区切ります。
    • eramakerで使える数値は基本的に整数です。小数を入力しないでください。

    MONEY = 500
    

    MONEY = 500
    MONEY=500
    MONEY = 3.14
    
  • 変数に計算した数値を入れる

    • 同じく=を使います。*が掛け算、/が割り算、%があまりを求めるということに注意してください。
    • 計算結果が小数になるときは端数切捨てです。

    ;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
    

    MONEY = 500×10÷4
    変数に数を足したり掛けたりする
    +=,-=,*=,/=,%=を使います。
    例
    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です。最大値は変数によって決まっています。詳しくはリストを参照してください。
    • 配列の後に数字ではなく変数を入れることもできます。ただし、配列の後に配列を持ってくることはできません。

    A = 35
    ;FLAGに値を設定にする
    FLAG:0 = 0
    FLAG:2 = 10
    FLAG:35 = 440
    ;FLAGで計算する
    FLAG:A += 100/FLAG:2
    FLAG:2 *= FLAG:A
    FLAG:(FLAG:20) = 10000
    

    FLAG:0 = 10
    FLAG : 52 = 1000
    FLAG:FLAG:20 = 10000
    
  • 二重配列について

    • 例外的にコロンを2つ使ってアクセスできる変数もあります。キャラのデータに絡む変数です。
    • (変数名):(所持キャラ番号):(変数番号)という形でアクセスします。

    A = 2 ;5番目のキャラの0番目の能力をLV3にする
    ABL:5:0 = 3
    ;A番目(2番目)のキャラの1番目の経験を+1する
    EXP:A:1 += 2
    
  • 変数を画面に表示する

    • もっとも簡単なのはPRINTVとPRINTVLという命令を使うことです。命令については後で詳しく述べます。

    A = 2
    PRINTV A
    A = 30
    PRINTVL A
    B = 400
    PRINTVL B
    

    出力結果

    230
    400
    
  • 文字列変数について

    • 普通の変数は整数しか扱えませんが、文字列を扱える文字列変数もあります。ただし機能は限定的です。
    • 文字列変数を画面に表示するにはPRINTSかPRINTSLという命令を使います。

    STR:0 = あいうえお
    PRINTSL STR:0
    

    ;+=で付け加えたりはできない
    STR:0 += うえお
    
    • 変数リスト

命令について(基本)

命令を使うことで、画面に文字を表示したり、条件判断をしたりすることができます。

  • 命令の書き方

    • (命令名) (命令内容)という書き方が基本です。(命令名)と(命令内容)は半角スペースかタブで区切ってください。
    • (命令内容)がない命令の場合、そのまま改行してください。

    PRINT これはテストです。
    SIF 3 == 1+2
    PRINT 当たり前です。
    WAIT
    

    PRINTこれはテストです。
    ;入力待ち
    WAIT 0
    
  • 文字を表示する

    • PRINTは文字を表示する命令です。PRINTLは文字を表示し、改行します。PRINTWは文字を表示し、入力待ちにします。
    • PRINTVは変数の内容を表示する命令です。PRINTVLは変数の内容を表示し、改行します。PRINTVWは変数の内容を表示し、入力待ちにします。
    • PRINTSは文字列変数の内容を表示する命令です。PRINTSLは文字列変数の内容を表示し、改行します。PRINTSWは文字列変数の内容を表示し、入力待ちにします。
    • PRINTFORMは文字、変数、文字列変数などが組み合わさったものを表示できます。PRINTFORMLは同様にした上で改行し、PRINTFORMWは同様にした上で入力待ちにします。
    • PRINTFORMSはPRINTFORMと同じように文字列変数の内容を変換して表示をします。PRINTFORMSLは同様にした上で改行し、PRINTFORMSWは同様にした上で入力待ちにします。
    • (末尾にWがつく命令で入力待ちのときは、Enterを押すことで次に進むので、結局改行されます)

    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
    

    出力結果

    お金は500円です。
    名前は佐藤です。
    繰り返すと、名前は佐藤で、お金は500円です。
    1000円もらって600円払うと、残りは900円です。
    そのお金を5倍にすると、4500円です。
    
  • 条件判断する

    • 条件判断は例を見ながら理解するのが早いです。
    • SIFは条件式が0でなければ(成立した場合)次の行を実行します。0の場合(成立しない場合)、次の行をスキップします。
    • IFは条件式が0でなければ(成立した場合)、次の行からELSE、ELSEIF、ENDIFを迎えるまで実行していきます。0である場合(成立しない場合)、ELSE、ELSEIF、ENDIFを迎えるまでスキップします。(ELSEならその次の行からENDIFを迎えるまで実行します。ELSEIFで条件式が成立している場合、その次の行からELSEかELSEIFかENDIFを迎えるまで実行します。成立していなければELSEかELSEIFかENDIFを迎えるまでスキップし、同じことを繰り返します)

    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
    

    出力結果

    テスト1
    テスト2
    テスト3
    テスト5
    テスト7
    
    • 「等しい」には==を、「等しくない」には!=を、「左が大きい」には>を、「左が右以上」には>=を、「右が大きい」には<を、「右が左以上」には<=を使います。すべて半角で入力してください。
    • 「かつ」には&&を、「または」には||を使います。すべて半角で入力してください。
    • カッコを使い、複雑な条件を記述することもできます。
  • 入力と入力待ち

    • 文章を表示するなどして、入力を待つときにはWAITを使います。 (※普段はPRINTWなどを使うと、少ない行数で表現できるため見やすいです)
    • 整数をプレイヤーに入力させたいときはINPUTを使います。入力された結果はRESULTに格納されます。
    • 文字列をプレイヤーに入力させたいときはINPUTSを使います。入力された結果はRESULTSに格納されます。

    PRINT データ入力開始。
    WAIT
    PRINTL 年齢を入力してください。
    INPUT
    PRINTL 名前を入力してください。
    INPUTS
    PRINTFORML %RESULTS%さんは{RESULT}歳ですね。
    
  • 繰り返しとGOTO

    • 同じ命令を繰り返したいときはREPEATを使います。RENDがあるまで繰り返されます。繰り返した回数はCOUNTに格納されます。
    • REPEATの中にREPEATは作れませんので注意してください。
    • REPEATからRENDまでの途中でCONTINUEを使うと、REPEATのあるところまで戻ります。BREAKを使うと、繰り返しをやめてRENDの次の行までスキップします。
    • 別のところに一気に移動したいときはGOTOを使います。GOTOを使うときは、$を使って「ラベル」を登録しておく必要があります。

    例1

    REPEAT 10
    PRINT あいう
    REND
    ;0文字をPRINTLで書くことで改行
    PRINTL
    REPEAT 5
    PRINTFORML 点数:{COUNT*5}
    REND
    

    例1の出力結果

    あいうあいうあいうあいうあいうあいうあいうあいうあいうあいう
    点数:0
    点数:5
    点数:10
    点数:15
    点数:20
    

    例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
    

    例2の出力結果

    0円よりは金が多い。
    100円よりは金が多い。
    200円よりは金が多い。
    所持金は0円ではない。
    所持金は100円ではない。
    所持金は200円ではない。
    所持金は400円ではない。
    

    例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を使うと、その関数の最初からやり直します。

    @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
    

    出力結果

    ゲームスタート。
    オープニングです。
    オープニングの結果は25でした。
    ゲーム中です。
    RETURNなしで終わります。
    ゲームの結果は0でした。
    エンディングです。
    エンディングです。
    エンディングです。
    エンディングです。
    エンディングです。
    .......(以下無限)
    
  • その他、基本的な命令

    • QUITを使うとゲームを終了します。
    • DRAWLINEを使うと画面の左端から右端まで----と線を引きます。
    • TIMESを使うと、小数を使った掛け算ができます。eramakerでは基本的に数値を整数で扱うので、小数を絡めたいときはこの命令を使ってください。TIMES (変数) , (小数値)という形で使います。
    • BARを使うと、[*****....]のようにグラフが表示できます。BARLの場合は改行されます。BAR (変数) , (最大値), (長さ)という形で使います。

    MONEY = 500
    DRAWLINE
    BARL MONEY , 1000 , 20
    PRINTFORMW {MONEY}円持っていました。
    DRAWLINE
    TIMES MONEY , 1.25
    BARL MONEY , 1000 , 20
    PRINTFORMW {MONEY}円になりました。ゲームを終了します。
    QUIT
    

    出力結果

    ---------------------------------------------------------------------
    [**********..........]
    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などで追加したキャラを削除します。

    ;キャラ番号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
    

    出力結果

    今いるキャラは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を呼び出します。