目次



知識0から始める口上の書き方


口上製作関数についてのページも併せて読んでおくと、より理解が深まる。



ここでは口上の書き方を流れにそって説明していきます。
説明ではピクシーの口上をサクラエディタとVer2.2のテンプレートを使用して追加していきます。
実際には自分の追加したいキャラに変換して作業を行ってください。
※「最新の口上テンプレートはVer3.3だし、ピクシー口上も既にあるよ」だって?
 旧wikiの記事をリスペクトして書いているから……


1.口上を書きたいキャラの口上ファイルを探そう

1-1.キャラの番号を確認する
各キャラの番号はCSVファイルの名前で確認できます。
各キャラのCSVファイルは以下のフォルダに格納されています。

人間キャラ CSV¥人間
悪魔キャラ CSV¥悪魔¥種族番号_種族名
例) ピクシーの場合: CSV¥悪魔¥05_妖精

CSVファイル名は「Charaキャラクタ番号_キャラクタ名.csv」となっています。
| 例)ピクシーの場合: Chara501_ピクシー.csv | “501”がピクシーのキャラクタ番号になります。
1-2.口上フォルダに書きたいキャラの口上があるか確認する
口上ファイルは「ERB¥口上」フォルダ配下の以下のフォルダに格納されています。
| 人間キャラ | 人間口上 | | 悪魔キャラ | 悪魔個人口上 | 口上ファイルのファイル名は「EVENT_KXXXX_キャラクタ名_ALL.ERB」となっており、XXXXがキャラクタ番号になります。
| 例)ピクシーの場合:EVENT_K501_ピクシー_ALL.ERB | 口上を書きたいキャラの口上ファイルが存在する場合、「4.口上を書こう」に進んでください。
存在しない場合は「2.口上ファイルを作ろう」に進んでください。
—- ===== 2.口上ファイルを作ろう ===== 2-1.口上テンプレートファイルをコピーする
口上テンプレートファイルはVer毎に以下のフォルダ配下に格納されています。
Verによる違いは口上テンプレを参照してください。
| 口上Ver | 格納フォルダ | 各種テンプレート | | 2.1 | 口上テンプレ Ver2.1 | EVENT_KX1_ALL VER.2.1.ERB | | ^ | ^ | EVENT_KX1_ALL VER.2.1(淫乱優先).ERB | | 2.2 | 口上(Ver2.2共通追加) | EVENT_KX1_ALL VER.2.2.ERB | | ^ | ^ | EVENT_KX1_ALL VER.2.2(淫乱優先).ERB | | 3.0 | 口上VER3.0 | EVENT_KX1_ALL VER.3.0 (ほぼ無記入).ERB | | ^ | ^ | EVENT_KX1_ALL VER.3.0 (よく使う口上コマンドのみ).ERB | | ^ | ^ | EVENT_KX1_ALL VER.3.0 (全ての口上コマンド記入).ERB | | 3.1 | 口上VER3.1 | EVENT_KX1_ALL VER.3.1.ERB | | ^ | ^ | EVENT_KX1_ALL VER.3.1(初心者向け).ERB | | ^ | ^ | EVENT_KX1_ALL VER.3.1(書く項目少なく).ERB | | 3.2 | 口上VER3.2 | EVENT_KX1_ALL VER.3.2.ERB | | ^ | ^ | EVENT_KX1_ALL VER.3.2(初心者向け).ERB | | 3.3 | 口上VER3.3 | EVENT_KX1_ALL VER.3.3.ERB | | ^ | ^ | EVENT_KX1_ALL VER.3.3(初心者向け).ERB | | ^ | ^ | EVENT_KX1_ALL VER.3.3 TYPE.B.ERB | | ^ | ^ | EVENT_KX1_ALL VER.3.3 TYPE.B(初心者向け).ERB | 口上テンプレートファイルを適当なフォルダにコピーしてください。
2-2.コピーしたファイルの名前を変更する
ファイル名は何でも口上は動作するのですが、他人が見たときに何のファイルはわかるように、
コピーしたファイルの名前を
「EVENT_KXXXX_キャラクタ名_ALL.ERB」に変更してください。
(XXXXはキャラクタ番号)
—- ===== 3.関数の名前を変更しよう ===== 3-1.ファイルをサクラディタで開く
ファイルをサクラエディタで開いてください。
3-2.どのキャラの口上ファイルなのかを書いておく
ファイルを開くと2行目に「;○○口上」と書いてあるので“○○”をキャラの名前に書き換えてください。
(本来は書き換える必要はないのですが、2-2と同じで視認性を上げるためです)
行の先頭の“;”を消してしまわないように注意してください。消すとエラーが出ます
3-3.KX1を変換する
* メニューの「検索」から「置換」を選んでください。(Ctrl+RでもOK) * 出てきたダイアログの置換前に「KX1」を、置換後に「キャラクタ番号にKを付けたもの(ピクシーならK501)」を入力してください。 * 入力したら、「すべて置換」ボタンを押してください。テキスト内の「KX1」がすべて「K(キャラクタ番号)」に書き換えられます。 —- ===== 4.口上を書こう ===== 4-1.口上を表示させたい箇所へ移動する
* メニューの「検索」から「検索」を選んでください。(Ctrl+FでもOK) * 条件に口上を書きたい「調教コマンド名」を入れてください。(この説明では「キスする」でいきます。) * 下検索ボタンを押してください。目的の箇所まで移動するはずです。1回で目的の場所まで移動しない場合は下検索ボタン、上検索ボタンを押して目的の箇所まで移動してください。 4-2.口上を書く
検索で移動した箇所の下にある「CASE 数字」(キスするの場合、「CASE 20」)の次の行からが
キスするを選択した時に実行される処理です。
ここにPRINT命令を使用して口上を記述してください。
PRINT命令の後に半角スペースを入れその後に記述した文字列が表示されます。
例)
=|BOX|
> ;————————————————- > ;20,キスする > ;————————————————- > CASE 20 > ↓この行を追加 > PRINTW Hellow World > CALL TRAIN_MESSAGE > ;初めて > IF CFLAG:312 == 0 > PRINTFORMW > CFLAG:312 = 1 > ;二回目以降 > ELSE > ;陥落済み > IF (TALENT:3 || TALENT:4 || (中略) || FLAG:7 == 2) > ;恋慕、親愛 > IF TALENT:3 || TALENT:6 > PRINTFORMW > ;淫乱、娼婦 > ELSEIF TALENT:4 || TALENT:7 > PRINTFORMW > ;服従、隷属 > ELSEIF TALENT:5 || TALENT:8 > PRINTFORMW > ENDIF > CFLAG:312 = 4 > ;従順Lv3以上 > ELSEIF ABL:0 >= 3 && (CFLAG:312 < 3 || FLAG:7 == 2) > PRINTFORMW > CFLAG:312 = 3 > ;それ以外 > ELSEIF CFLAG:312 < 2 || FLAG:7 == 2 > PRINTFORMW > CFLAG:312 = 2 > ENDIF > ENDIF | | = | 文書を表示するにはPRINTという命令を使います。
以下の6種類がありますが、下3種類は上3種類のほぼ上位互換なので、上3種類は使わなくても問題ありません。
ただし処理量が増えてやや動作が重くなってしまいます。1)
| 命令(Ver3以前) | (Ver3以降) | 特徴 | | PRINT | | 文字をそのまま表示する | | PRINTL | | 文字をそのまま表示し、改行する | | PRINTW | | 文字をそのまま表示し、改行した後入力を待つ | | PRINTFORM | NSTR:(K) ) | 文字列変数があった場合は変換してから表示、改行する | | PRINTFORMW | WSTR:(K) )でもよいのですが、
長文になる場合はPRINTFORMLとPRINTFORMWを混ぜたり、「PRINTFORML 」という空白行を入れて可読性を上げてください。
長い文章をPRINTW/PRINTFORMW/WSTR:(K)ばかりで書くと、一行毎にキー入力が必要になりテンポが悪くなってしまいます。\\ 右クリックでキー入力をスキップ可能ですが、大量に表示されたテキストに空白が無いので読むのが大変になります。\\ 逆にPRINT/PRINTL/KSTR:(K++)ばかりにすると、さっと流れたメッセージを後から読む形になるのでこれもテンポが悪くなってしまいます。\\ この辺のさじ加減は、既存の口上を参照したり、実際に自分で書いた口上を動かしてみて調整して下さい。\\ **<fc #ff0000>※Ver3以降のテンプレートで口上を書く際の注意</fc>**\\ ・PRINTFORMとSTR(K++)は混ぜて使ってはいけません。\\  位置に関係なしにPRINTFORM系が先に表示されます。\\ = ) = あさ > KSTR:(K) = ひる > PRINTFORMW ゆうがた > KSTR:(K++) = よる )で空白行を表示したい場合に、半角空白だけを入れた場合、その行以降のセリフを喋らなくなります。
「STR:(K)が半角空白 → テンプレのまま変更していないと判断 → 変更していないなら以降の行を処理しないでいいや」というロジックな為です(多分)\\ = ) =
| | = | の後に「全角のスペース」か「\n」と入れて下さい。
※「¥n」は改行コードです
—- ===== 5.書いた口上をゲームで表示しよう ===== 5-1.作成した口上ファイルを口上フォルダに置く
4-2.で作成した口上ファイルを口上フォルダに格納します。
口上ファイルを格納するフォルダについては
「1-2.口上フォルダに書きたいキャラの口上があるか確認する」を参照してください。
ピクシーの場合格納場所は「ERB¥口上¥悪魔個人口上」配下になります。
5-2.eraMegatenを起動する
eraMegatenを起動してください。起動時にエラーが出なければとりあえずは成功です。
もし、ここでエラーが出た場合はエラーメッセージからエラー原因を特定して修正してください。
5-3.口上を書いたキャラを調教する
口上を追加したキャラを調教対象として選択し、調教を開始してください。
5-4.口上を書いた箇所が表示される調教内容を選択する
口上を追加した調教コマンド(ここでは「キスする」)を選択してください。
5-5.書いた口上が表示されることを確認する
表示例)
=|BOX|
> キスする > 従順LV1(4) + 好奇心(5) + 忠誠度-10 * 相性良好(1.5) > = 31 > 実行値15 > Hellow World      ←4.2で書いた文章 > ピクシー:MAG +36 > あなた:MAG -36 > 忠誠度 +3 > <依存度増加> > 情愛(51)性行動(6)露出(39)屈従(10)不潔(5)逸脱(4)反発(49) > <相性1.5倍> > 体力-0 気力-20 > 恭順 0+25=25 > 屈服 0+12=12 > 習得 0+1=1 > 恥情 0+39=39 > 反感 0+42=42 > 不快 0+4=4 | | = | ここで口上が表示されない場合
・起動したemueraのフォルダ配下に口上ファイルがない
・口上ファイルの拡張子が「erb」でない
・「3-3.KX1を変換する」を行っていない
が考えられます
—- ===== 6.調教相手に自分の呼び名を呼んでもらおう ===== 6-1.文章の中に変数を組み込む
文章の中に特に決まっていない文字(あなたの名前など)を表示する場合、文字列変数を使用します。
最低限これさえあれば口上は書ける、という文字列変数は以下の4つです。
| 変数名 | 表示される内容 | ピクシーの場合 | | CALLNAME | 調教対象の名前 | ピクシー | | CALLNAME:MASTER | あなたの名前 | あなた | | CSTR:一人称 | 調教対象の一人称 | 私 | | CSTR:二人称 | 調教対象のあなたの呼び名 | サマナー | 文字列を格納した変数を表示する場合は変数を“%“で囲んでください。
=|BOX|
> 例)PRINTW %CSTR:一人称%は%CALLNAME%だよ。%CSTR:二人称%よろしくね。 | | = | 6-2.変数の含まれる文章はPRINTFORMで表示する
変数が含まれる文章はPRINT/PRINTL/PRINTW命令では正常に表示することができません。
6-1.の例文をPRINT命令で表示しようとした場合には次のように表示されてしまいます。
=|BOX|
> %CSTR:一人称%は%CALLNAME%だよ。%CSTR:二人称%よろしくね。 | | = | 変数を含む文章を表示する場合はPRINTFORM/PRINTFORML/PRINTFORMW命令を使用してください。
それぞれの命令の違いはPRINT/PRINTL/PRINTWと同じです。
6-3.変数の内容が表示されることを確認する
6-1.の例文のPRINTWをPRINTFORMWで表示した場合、以下のように表示されます。
=|BOX|
> 私はピクシーだよ。サマナーよろしくね。 | | = | —- ===== 7.表示させる口上を状況で分岐させよう ===== 7-1.IF文で分岐条件を決める
状況によってメッセージを表示したり、しなかったり、表示する内容を変えたい場合、IF文を使用します。
IF文の構文は次のようになっています。
<IF文の構文>
> IF 条件
> 条件を満たす場合に表示する口上メッセージ
> ENDIF
IFとENDIFはセットです。ENDIFを書き忘れるとエラーの原因になるので
IFを書いたらとりあえずENDIFを書いておくと安心です。
また「Tab」キーを使ってIF-ENDIFブロックごとにTABキーでインデント(字下げ機能)をつけておきましょう。
対応関係がわかりやすくなるのでエラーの発生を防ぎやすく、発生しても修正しやすくなります。
<例文>
=|BOX|
> IF TALENT:恋慕 == 1 > PRINTFORML %CSTR:二人称%大好きだよ♪ > ENDIF > PRINTFORMW 今日もよろしくね | | = | この場合、「TALENT:恋慕 == 1」が条件となります。
TALENT:恋慕は調教対象のキャラの素質「恋慕」の有無を表していて
値が「0」の場合素質「恋慕」持っておらず
値が「1」の場合素質「恋慕」を持っています。
今回の条件ではTALENT:恋慕の値が「1」の場合に条件を満たすので
調教対象が素質「恋慕」を持っている場合にIF文の中の口上メッセージ「サマナー大好きだよ♪」が表示されます。
「今日もよろしくね」はIF文の外にあるので素質「恋慕」の有無関係なく表示されます。
比較条件では”=“は二個必要です。一個だとエラーになるので注意してください。
7-2.IF文の条件に当てはまらない場合の処理ELSE
条件を満たす場合にメッセージを表示する方法を説明しましたが、
ここでは条件を満たさなかった場合に表示したいメッセージがある場合以下のようにELSEを使用します。
<IF〜ELSE構文>
> IF 条件
> 条件を満たす場合に表示する口上メッセージ
> ELSE
> 条件を満たさない場合に表示する口上メッセージ
> ENDIF
> 条件と関係なく表示する口上メッセージ <例文>
=|BOX|
> IF TALENT:恋慕 == 1 > PRINTFORML %CSTR:二人称%大好きだよ♪ > ELSE > PRINTFORML なんだ、%CALLNAME:MASTER%か > ENDIF > PRINTFORMW 今日もよろしくね | | = | 条件は7-1.と同じ素質「恋慕」を持っていることなので、
調教対象が素質「恋慕」を持っている場合は、「サマナー大好きだよ♪」と表示され、
持っていない場合は、「なんだ、あなたか」と表示されます。
「今日もよろしくね」は7-1.と同様素質「恋慕」を持っていても持っていなくても表示されます。
7-3.IF文の条件に当てはまらなかった場合のさらなる条件ELSEIF
一つ目の条件を満たさない場合に二つ目の条件を満たすかどうか確認する場合にはELSEIFを使用します。
ELSEIFを使用する場合の構文は次の通りです。
<IF〜ELSEIF構文>
> IF 条件1
> 条件1を満たす場合に表示する口上メッセージ
> ELSEIF 条件2
> 条件1を満たさないが条件2を満たす場合に表示する口上メッセージ
> ENDIF
> 条件と関係なく表示する口上メッセージ
<例文>
=|BOX|
> IF TALENT:恋慕 == 1 > PRINTFORML %CSTR:二人称%大好きだよ♪ > ELSEIF TALENT:マゾ == 1 > PRINTL いっぱいいぢめてほしぃのぉ > ENDIF > PRINTFORMW 今日もよろしくね | | = | 最初の条件は7-1.と同じで素質「恋慕」を持っているかどうか、持っている場合は「サマナー大好きだよ♪」が表示されます。
素質「恋慕」を持っていない場合はELSEIFへ飛び、今度は素質「マゾ」を持っているかを確認します。
素質「マゾ」を持っている場合「いっぱいいぢめてほしぃのぉ」が表示されます。
素質「マゾ」を持っていない場合、両方とも表示されず「今日もよろしくね」だけが表示されます。
注意しなければならないのは条件1を満たした場合、条件2はチェックされません。
例文の場合、素質「恋慕」を持っていると素質「マゾ」を持っていても「いっぱいいぢめてほしぃのぉ」は表示されません。
恋慕を持っている場合にもマゾを持っている場合のメッセージを表示したい場合は
=|BOX|
> IF TALENT:恋慕 == 1 > PRINTFORML %CSTR:二人称%大好きだよ♪ > ENDIF > IF TALENT:マゾ == 1 > PRINTL いっぱいいぢめてほしぃのぉ > ENDIF > PRINTFORMW 今日もよろしくね | | = | といったふうにIF文を分けてください。
7-4.処理が1行だけのIF文SIF
IF文ではIF〜ENDIFまでの間の処理が実行されますが以下の条件に合致する場合SIFという特殊なIF文が使用できます。
<SIF使用可能条件>
・IF文の条件に合致する場合に実行する処理が1行だけ
・ELSE、ELSEIFを使用しない
上記の条件に合致する、7-1.の例文をSIFで書くと次のようになります。
<例文>
=|BOX|
> SIF TALENT:恋慕 == 1 > PRINTFORML %CSTR:二人称%大好きだよ♪ > PRINTFORMW 今日もよろしくね | | = | 7-1.との違いはIFがSIFになってる事と、ENDIFがなくなっている事です。
SIFでは条件合致時に実行する処理を1行だけに限定することでENDIFを省略することができます。
これで、1行しか処理しない場合にENDIFを省略してちょっとだけ見た目をスッキリさせることができます。
—- ===== 8.コメントを残そう ===== 8-1.コメントを書く
口上ファイルの行の先頭にセミコロン(;)を置くことで、コメントを残すことが出来ます。
コメントはeramegaten上では処理されないので、
・このフラグは何の分岐だっけ?
・口上をいじりたい人向けに資料を残しておこう
・このIF文はこの条件で真になる
という風にコメントを残しておくことで作業効率や伝達精度を高めることが出来ます。
=|BOX|
> ;記述日2011/02/14 > ;加筆日2020/11/07 > ;ピクシーちゃんが挨拶するように修正 > PRINTFORMW 「おはよ、%CSTR:二人称%♪」 | | = | —- ===== 9.条件いろいろ ===== 7.のIF文説明では「フラグ == 1」の形しか紹介しませんでしたが条件の指定の仕方はいろいろあります。
9-1.値の比較
一番よく使うと思われるタイプ、左辺と右辺の値を比較して判断します。
| == | 左辺と右辺の値が等しい | | > | 左辺の値が右辺の値より大きい(等しい場合含まない) | | < | 左辺の値が右辺の値未満(等しい場合含まない) | | >= | 左辺の値が右辺の値以上(等しい場合含む) | | ⇐ | 左辺の値が右辺の値以下(等しい場合含む) | | != | 左辺と右辺の値が等しくない | 9-2.値の参照
変数/フラグのみを条件文として指定することも可能です。
その場合、『IF (条件) != 0』の省略形として扱われるので、変数/フラグの値が0だと偽(条件を満たさない)、0以外だと真(条件を満たす)になります。
<例文>
=|BOX|
> IF TALENT:恋慕 > 素質[恋慕]持ちの時の処理 > ELSE > 素質[恋慕]なしの時の処理 > ENDIF | | = | また変数の前に「!」をつけると上とは逆に0の時に真、0以外の時に偽となります。
<例文>
=|BOX|
> IF !TALENT:恋慕 > 素質[恋慕]なしの時の処理 > ELSE > 素質[恋慕]持ちの時の処理 > ENDIF | | = | 9-3.ランダム分岐
素質だとか能力だとかまったく関係なしに完全にランダムで分岐させたい場合
RAND:Xを使用します。Xには数値を指定し、0〜(X-1)の範囲の値が入ります。(例 RAND:10なら0〜9)
<例文>
=|BOX|
> IF RAND:2 == 0 > メッセージ1 > ELSE > メッセージ2 > ENDIF | | = | 上記では「RAND:2」の値は「0」か「1」になるので、半々の確率でメッセージ1とメッセージ2が表示されます。
この変数では3択以上の分岐も行えますが、注意しないといけないのは
RAND:Xに入る値はRANDという文字を使うたびに算出され直すということです。
<誤った使用例>
=|BOX|
> IF RAND:3 == 0 > メッセージ1 > ELSEIF RAND:3 == 1 > メッセージ2 > ELSE > メッセージ3 > ENDIF | | = | 上記のような場合、それぞれのメッセージが表示される確率は1/3ではありません。
メッセージ1は1/3
メッセージ2は「メッセージ1ではない確率(2/3)」のうちの1/3なので、(2/3)*(1/3)で2/9
メッセージ3は残りの確率なので、1-(1/3)-(2/9)で4/9
の確率になります。
3択以上に分岐を等確率で表示させたい場合は次のような手法をとってください。
<正しい使用例>
1.RANDの数を1ずつ減らしていく方法
=|BOX|
> IF RAND:3 == 0   (←1/3) > PRINTFORMW 「メッセージ1」 > ELSEIF RAND:2 == 0 (←(1 - 1/3 = 2/3) x 1/2 =1/3) > PRINTFORMW 「メッセージ2」 > ELSE        (←1 - (1/3 + 1/3) = 1/3) > PRINTFORMW 「メッセージ3」 > ENDIF
| | = | 2.別の変数にRANDの結果を代入して参照する方法
=|BOX|
> LOCAL = RAND:3      (←「LOCAL」という名前の変数に「RAND:3」の値、0〜2を入れる) > IF LOCAL == 0       (←変数「LOCAL」の値が0の場合) > PRINTFORMW 「メッセージ1」 > ELSEIF LOCAL == 1     (←変数「LOCAL」の値が1の場合) > PRINTFORMW 「メッセージ2」 > ELSE            (←変数「LOCAL」の値が0でも1でもない場合) > PRINTFORMW 「メッセージ3」 > ENDIF | | = | 3.SELECTCASEを使う方法
=|BOX|
> SELECTCASE RAND:3      (←0から2までの数値をランダムに) > CASE 0           (←0の場合) > PRINTFORMW 「メッセージ1」 > CASE 1           (←1の場合) > PRINTFORMW 「メッセージ2」 > CASEELSE          (←それ以外の場合) > PRINTFORMW 「メッセージ3」 > ENDSELECT | | = | 4.PRINTDATAを使う方法
=|BOX|
> PRINTDATAW > DATAFORM 「メッセージ1」 > DATAFORM 「メッセージ2」 > DATAFORM 「メッセージ3」 > ENDDATA | | = | 等確率ではなく、あえて確率を偏らせたい場合、RAND:100を使用してパーセント単位に分割するなどの手を利用するといいでしょう。
<例>
=|BOX|
> LOCAL = RAND:100     (←「LOCAL」という名前の変数に0〜99の値を入れる) > IF LOCAL < 10      (←変数「LOCAL」の値が10未満の場合) > ;10%の確率で実行 > メッセージ1 > ELSEIF LOCAL < 30    (←30未満の場合。値が10未満の場合は一つ上のIF文で真になるのでここには来ない) > ;30 - 10 = 20%の確率で実行 > メッセージ2 > ELSEIF LOCAL < 60    (←60未満の場合。値が30未満の場合は上のIF文かELSEIF文で真になるのでここには来ない) > ;60 - 20 - 10 = 30%の確率で実行 > メッセージ3 > ELSE           (←変数「LOCAL」の値が上のIF文かELSEIF文で真にならない場合) > ;100 - 30 - 20 - 10 = 40%の確率で実行 > メッセージ4 > ENDIF | | = | メッセージ1から4までそれぞれ「10%」「20%」「30%」「40%」の確率で表示します。
9-4.複数の条件
複数の条件に合致するときだけ処理を実行させたい場合、条件の間に「&&」もしくは「||」をはさんでください。
「&&」はAND条件、「||」はOR条件になります。
> 条件1 && 条件2 ;条件1と条件2の両方を満たす場合にのみ真(条件を満たす)となる。
> 条件1 || 条件2 ;条件1と条件2のどちらか片方を満たす場合に真(条件を満たす)となる。 &&(||)は何回も使用することができ、条件は何個でも(?)増やせます。
=|BOX|
> 条件1 &&(||) 条件2 &&(||) 条件3 &&(||) 条件4 &&(||) ・・・ | | = | また1つのIF文内で&&と||を組み合わせることもできます。
=|BOX|
> 条件1 && 条件2 || 条件3 | | = | ただし、&&と||を混在させる場合、どの条件がセットなのかわからないのでセットの条件を()で囲むようにしてください。
()で囲まなかった場合、前方の条件から順に判定されます。
たとえば上の組み合わせでも()の付け方で条件が変わります。
=|BOX|
> (条件1 && 条件2) || 条件3 | | = | 条件1と条件2がともに真、もしくは条件3が真
(条件3が真なら条件1、2は偽でもIF文の判定は真となる)
=|BOX|
> 条件1 && (条件2 || 条件3) | | = | 条件1が真で条件2と条件3のどちらかが真の場合真
(条件1は真であることが必須、その上で条件2と条件3の片方または両方が真)
—- ===== 10.変数を使おう ===== 10-1.変数って何?
6-1の例文で使ったCSTR:一人称CSTR:二人称といった数値や文字列を覚えたり、覚えさせたりする箱を変数と言います。
eramegatenで例に挙げると
「あなたのレベル」「仲魔が覚えている魔法」「組織に納金した金額」「ナイト・テイルの進行具合」等を覚えているのが変数になります。
口上内でよく使われる変数
| 表現 | 説明 | | %NAME:MASTER% | 主人(あなた)の名前 | | %CALLNAME:MASTER% | 主人(あなた)の呼び名 | | %NAME:PLAYER% | 調教者の名前。助手と交代した場合、助手の名前が入る | | %CALLNAME:PLAYER% | 調教者の呼び名。助手と交代した場合、助手の名前が入る | | %NAME:TARGET% | 調教対象の名前 | | %CALLNAME:TARGET% | 調教対象の呼び名 | | %CALLNAME% | CALLNAME:TARGETと同じ | | CALLNAM:ARG | 戦闘メッセージでキャラクターの呼び名を表示する場合。
戦闘中はARGで対象を指定する必要があります | | %CSTR:一人称% | 調教対象の自身の呼び方 | | CSTR:ARG:一人称 | 戦闘メッセージでキャラクター自身の呼び方を表示する場合。
戦闘中はARGで対象を指定する必要があります | | %CSTR:二人称% | 調教対象の主人(あなた)の呼び方 | | ABL:*(数値) | (従順や欲望といった)対象の能力を確認 | | TEQUIP:*(数値) | 対象の衣装や調教道具を付けているかを確認 | | TALENT:*(数値) | (処女や乳サイズといった)対象の素質を確認(Talent.csvを参照)
素質を持っている場合は「1」が入ります |
10-2.変数っていつ使うの?
例えば以下のような場合に使います
例1)
ピクシーの一人称を「ワタシ」で口上を書いていたが、一人称を「ボク」にしている人と戦争になってしまうのを避けたい
例2)
ピクシーが巨乳だと横乳が見えるような文章を書きたい
例3)
ピクシーに質問されても即答できるように、出会ってから今までしたキスの回数を覚えておきたい
例4)
今回の調教でピクシーたんは何回お漏らしをしたかを知りたい
といった様な時に使います。
10-3.変数ってどう使うの?
10-2の例を変数を使って実際に書くと
例1の場合
一人称を覚えている
CSTR:一人称の中を表示するようにします
=|BOX|
> PRINTFORMW %CSTR:一人称%はピクシー。ヨロシクね♪ | | = |
変数内の値を表示したい場合は変数名を”%“で囲んでください。”%“で囲わないと
=|BOX|
> CSTR:一人称はピクシー。ヨロシクね♪ | | = | と表示されます。萎えます。
例2の場合
IF/SIF文で素質
TALENT:巨乳が1の場合にメッセージを表示するようにします
=|BOX|
> SIF TALENT:巨乳 == 1 > PRINTFORMW レオタードに収まりきらない豊満な乳があふれている | | = | 実はこのSIF文ですと、ピクシーの胸が巨乳より大きい爆乳の場合にはメッセージが表示されない、というバグがあります。
調教対象の身体や胸のサイズを判断する時には気を付けてください。
SIF文の後に、||を使って 
TALENT:爆乳 == 1
 を追加して「巨乳の場合か爆乳の場合」にしましょう。
例3の場合
各キャラクターには自分専用のCFLAGという変数を持っているので、そこでキスの回数をカウントするようにします
手順1.CLAGで使う番号を決める
CFLAGは800〜998が口上用の領域なのでその範囲内の数値を指定します。特に理由がなければ800から使用します
既存の口上を修正する場合は、口上ファイルを開いて「CFLAG:xxx」で検索して、既に使われていないかを確認します
手順2.変数に値を入れる
今回の場合、キスするごと1回カウントするので、「CASE 20」の次の行に
=|BOX|
> CFLAG:xxx += 1 | | = | と1行入れます
手順3.変数の値を表示/参照する
キスした回数を表示したい所に
=|BOX|
> PRINTFORML 「ねぇ、今までに%CSTR:一人称%と何回キスしてか覚えている?」 > PRINTFORMW %CALLNAME:MASTER%は即座に『%CFLAG:xxx%回だよ』と答えた | | = | と入れればOKです
例4の場合
お漏らし回数を調教の間だけ覚えておく変数を作成し、お漏らしする度にカウントするようにします
(変数の作成方法)
手順1.まず口上ファイルの@EVENTTRAIN_Kxxx行の下に変数を作成し、変数名の後に「
' = (初期値)'」と付けて変数に初期値を設定します
=|BOX|
> ;おもらし回数カウント用変数定義 > omorasi = 0 | | = | 注意)
・変数を作成する場所を間違えて調教コマンドの下で作成してしまうと、コマンド実行毎に変数を作成してしまうので、カウント出来なくなります
・変数を作成したら初期値を与えておく。初期値を与えていない変数の値を見に行ってエラーが出る、というのはよくあるミスです
・変数のルールとして
 ・システム側で使うような変数名(例:RAND、CASE、ABL)はつけない→エラーの原因になります
 ・他人が見ても解るような変数名を付ける。
一文字の変数名はダメ
 ・変数を定義したら後で誰が見てもわかるようにコメントを残しておく
 があります
手順2.カウントを増やす処理を入れる
今回の場合、放尿するごとに1回カウントなので、 
';放尿している IF TFLAG:29 > 0 && (TEQUIP:27 || TALENT:57)' の下の行に
=|BOX|
> omorasi += 1 | | = | と1行入れます
変数の中を書き換える時の記述例
| 記述 | 処理 | | (変数名) = x | 変数の値をxにする。文字列を入れたい場合は文字列を
で囲んでください | | (変数名) += x | 変数の値を+xする | | (変数名) = (変数名) + x | ^ | | (変数名) -= x | 変数の値を-xする | | (変数名) = (変数名) - x | ^ | 手順3.変数の値を表示/参照する
お漏らしの回数を表示したい所に
=|BOX|
> PRINTFORMW 今回、ピクシーはomorasi回お漏らしした | | = | の1行を入れます
—- ===== 11.どこまで書けばいいの? ===== 「全部の調教コマンドと戦闘中も色々喋るようにしたい!」となる気持ちも判りますが、大容量で有名な口上も
いきなりはそんなに喋った訳ではないですし、市販のゲームと違い完成版でないと世に出してはダメ、という訳ではありません。
だからと言って調教開始時に……
ほら、ヤりたいんだろ。好きにしろよ
……としか喋らない口上は、ちょっとさみしいよね。
「どこまで書くか」は自由ではありまするが、
ならば「どこから書けばいいのか?」「どこを埋めるとカッコがつくのか?」というあたりを以下に記載します。
* 効果が高いトコロ * キャラクターのコンセプト
口上とは少し違う部分だが、コメントアウト部分に記載しておくとよい。
例えば、「この口上は服従だけどらぶらぶになっちゃう口上です」、といった一文章だけでもよい。
将来だれかが加筆するときに役立つだけでなく、自分自身にとっても役立つ。人間、けっこう物忘れ激しいからね。
ついでに、「口上セレクト」部分に1、2行でまとめて書いておくとプレイヤーにも安心。 * 初調教開始
キャラクターの挨拶じみた部分で、「このキャラはこういう感じです」とプレイヤーに提示する部分。
「初めての調教時」にいろんな構文を仕込んでるものも多いぞ。TSとか。
ここだけはホントマジで埋めたほうがいい。 * 調教開始
「初調教の開始時」でない部分。
調教開始時の口上は、昔から「屈服刻印や陥落に変化があれば1回だけ出る口上」が出るかをチェックし、
それが出ないなら「屈服刻印や段階ごとの、何回でも出る口上」を表示させるようなつくりになっている。
以下のどの部分にも言えるのだが、プレイヤーは陥落後口上を一番見ることになるので、RANDを仕込むとコスパが高い。
特にここは「毎回の調教で必ず見る」部分なので、なおのこと。 * 調教終了
調教開始時とは違い、あまりパターンが豊富な口上はない。
だが、こちらは言うなれば「またね」って挨拶なので、ここが充実しているとわりといい感じに見える。 * 絶頂時
絶頂は調教とは切っても切り離せない。
また、「いろいろなコマンドで表示される」ものなので、ここを書いておくと「絶頂がありえるコマンドなら無言ではなくなる」。
労力のわりに見栄えがよくなり、実用性も増すので、書くのをオススメ。 * 主人の射精時
こちらも絶頂時口上と同じく。
セックス系やフェラ、手淫などで反応してくれるようになるため、コスパが非常に高い。 * 性癖ポイント
きさまの せいへきを ぶちまけろ
キャラクターコンセプトに書くだけというのも寂しいからねぇ。
「こうしたい!」よりはやっぱり「こうです!!!」のほうがつよい。 * 効果が高めな部分 * 愛撫系コマンド
調教でよく使うコマンドの一群。
よく使うのは、「愛撫」「クンニ」「胸揉み」「胸愛撫」「アナル愛撫」「キス」など。
よく使うので、当然よく見る。ただし、道具系コマンドのほうが基本的に強いので、レベルが高めなキャラの口上なら優先度は落ちる。
(既に道具を持っているだろうから)
依存度稼ぎにキスを使うことは多いので、そこは埋めておくとコスパ高いかしら。 * 道具系コマンド
よく使うのは、「ローター」「バイブ」「アナルバイブ」「乳首ローター」など。
ある程度ゲームが進むと道具が揃ってくるので、愛撫系よりもこっちを優先したほうがいい……というのは上述。
「浣腸」などの「強力だけど表示される状況が限られそう」なものよりは、わりとすぐ実行できるものを埋めたほうが効果は高い。 * セックス系コマンド
「正常位」「後背位」「アナル正常位」「アナル後背位」などのセックス系。
なおこれについてはちょっとしたコツがあり、「体位を考慮せずに、V/Aセックス系で同じ口上を使いまわす」のが楽。
(アナルセックス系コマンドなら「えっ、そっちでえっちするの?」という感じの口上を表示させる)
増やすのは後でもできる。喋ったほうが楽しいし、見栄えは良くなるぞ。 * 奉仕系コマンド
「手淫」「フェラチオ」「パイズリ」など。
恋慕ルートにもっていくために必要な奉仕快楽経験稼ぎでよく見る。
恋慕ルートを書くならここも埋めておくと顧客満足度上昇ですわね。 * ここも埋めるとキャラが立つ * 調教開始:細分化
屈服刻印や陥落状況などで変化する部分について、「調教によって心境や対応が変化した」タイミングになる。
「このキャラクターがどうなっていくのか」を示す部分になるので、ここを埋めるとよい感じになりますわ。 * 妻/夫、淫魔、玩具取得
一世一代のイベントですので一回しか発生しませんが、ここで喋る事でキャラや股間が立ちます。
愛の告白に「よろこんで……!」ってそのキャラらしく喋ってくれたら嬉しいよなァ? * 戦闘口上
コスパはあんまり高くないのですが、嫁はやっぱり連れまわしたいもの。
他に比べると優先度は下がりますが、ここで『そのキャラらしく』喋るとキャラが立ちます。
ここもセックス系と同様に「相性ごとに共通の」口上を表示させると、労力のわりに賑やかになるかも。 * エンディング
キャラクターとの個別エンドです。
気に入ってくれた人への感謝の気持ちとキャラへの愛をこめて書くとよいかもです。 * 売却口上
キャラクターとの『別れ』です。そうそう、性癖を突っ込むってこういうことよ。(※筆者の性癖だよ) * SM系コマンド
服従ルートに必要……ですが、体力などの関係から、服従に向いているキャラはわりと限られます。
ただしここが充実している口上は少ないので、これを重点すると一部の人がとても喜びます。
通常の調教でも「イッパツ尻を叩いて苦痛刻印を付けて楽にする」ことはあるので、ちょっと埋めておくと喜ばれるかも。 * コツ
上述しましたが、「陥落後のほうに力を入れたほうがいい」でしょう。
売却価格を上げるにも、戦力とするにも、「陥落させてから従順などのステータスを上げる」必要があるためです。
それが嫁となったプレイヤーにとってはなおのコト、「陥落後によくしゃべるようになったほうが嬉しい」のです。
また、筆者は「喋らない」よりは「他コマンド/他段階と同じでも喋る」方がよいと思います。
そのためには、「共通で同じ文言を呼び出す」または「共通する文言を配置する」べし。
もちろん、「手淫でフェラと同じ文言が表示されて違和感!」「恋慕なのに罵倒してきて違和感!」とかは気を付けるべきですけどね。
(「恋慕だとよくしゃべるけど服従にしたら全然喋らない」問題が多いのはこのあたりが問題になっていると思われます)
『事前に決めた軸』……キャラクターのコンセプトをベースに、『そのキャラらしく』を意識するとよいでしょう。
難しいですが、なるべくキャラ軸がぶれない様に口上を書きましょう。(陥落して軸が変わる、というのはアリです)
『脳内にキャラクターを飼う』のが、極意かつ基本かも。ふつう、どんな風にセックスするかなんて、原作にないですからね。
「このキャラクターはいきなりちんちんくわえさせられたらどんな言動をするのか?」
「信頼していた人に裏切られた時には?」
「あまあまらぶらぶちゅっちゅするのか? それとも搾り取ってくるタイプなのか?」
……そういうのを想像して、誰かに提供する。
「あなたの思う“カワイイ”を、“萌え”を、見せつける」のが口上です。
性癖に正直になろう。筆者は売却にRANDを仕込みました。 —- ====== 口上でよく使われる構文・関数について ====== ===== 口上内でよく使われる変数/フラグ/記号 ===== | 表現 | 説明 | | %NAME:MASTER% | 主人(あなた)の名前 | | %NAME:TARGET% | 調教対象の名前 | | %NAME:PLAYER% | 調教者の名前。助手と交代した場合、助手の名前が入る | | %CALLNAME:MASTER% | 主人(あなた)の呼び名 | | %CALLNAME:TARGET% | 調教対象の呼び名 | | %CALLNAME% | CALLNAME:TARGETと同じ | | %CALLNAME:ASSI% | 助手の呼び名 | | %CALLNAME:PLAYER% | 調教者の呼び名。助手と交代した場合、助手の名前が入る | | %CSTR:一人称% | 調教対象の自身の呼び方 | | %CSTR:二人称% | 調教対象の主人(あなた)の呼び方 | | SELECTCOM | 現在実行した調教コマンドのチェック
IF分岐としてコマンド番号(Train.csvを参照)を入力すれば、
「バイブを使った瞬間に絶頂した口上」という表現も可能。 | | PREVCOM | 前回実行した調教コマンドのチェック
IF分岐としてコマンド番号(Train.csvを参照)を入力すれば、
「前回選んだコマンドによって分岐」という表現が可能。
PREV}IOUS &size(18){COMMAND」の略、と覚えると理解しやすい。 | | NOWEX:x:n | 絶頂判定。判定する対象と部位を指定します。値が1以上ならその部位で絶頂した事を示します
x:PLAYERと入れば調教者、未入力の場合は調教対象者の絶頂を示します
n:部位を示します。「0」はC、「1」はV、「2」はA、「3」はBです
変数の値:絶頂していない場合は「0」、絶頂は「1」、強絶頂は「2」、超強絶頂は「3」、最強絶頂は「4」、究極絶頂は「5」になります
同時絶頂した場合、TFLAG:29の値は全て加算して計算される | | ABL:
*(数値) | 対象の能力を確認 |

MARK:*(数値) | 対象の刻印LVを確認(Mark.csvを参照) | | TEQUIP:*(数値) 対象の調教アイテムの装備状況と衣装を確認
TALENT:*(数値) | 対象の素質を確認(Talent.csvを参照)
素質を持っている場合は「1」が入ります | | TIME | 現在の時間。朝なら「0」、昼なら「1」、夕方なら「2」、夜なら「3」が入ります | | %UNICODE(0x2661)% | ハートマーク | | %ハート()% | ハートマーク。カッコ内に数値を入れた場合は数値分だけハートマークを表示します | | SETCOLOR Red , Green, Blue | 文字の色を変える
左から赤、緑、青のカラーの割合を数値で指定します(最大255) | | SETCOLOR x0RedGreenBlue | 文字の色を変える
左から赤、緑、青のカラーの割合を
十六進数で指定します(最大FF) | | SETCOLOR COLOR(“'カラー'”) | 文字の色を変える。指定できるカラーは
\ERB\関数\汎用組み込み関数\メッセージ\COLOR.ERB** を参照
> > 色の見本を見たい場合。色生成ツールや、
eramegateで オプション − 戦闘 − 相性のカラー設定 から色生成を確認できます
RESETCOLOR 文字の色を標準カラーに変える
SETCOLORで文字色を変えた後に使う命令

—-

コマンドに対応した口上の増やし方

「既存の口上に追加コマンドの調教口上を追加したい」
「初期の口上なので追加されたコマンドを実行すると地の文すら出ない」
「新しく調教コマンドが追加されたから口上も追加したい」
そんな場合の方法です。(口上テンプレートは全コマンド対応済みです)

ここでは「玉キック」コマンドの口上を追加する場合の説明をします。
実際には自分の追加したいコマンドで同様の作業を行ってください。

1.追加したいコマンドの番号を調べる

下のリストを参照するか、
eramegatenフォルダ内のERBフォルダ→調教関連→追加COMフォルダ を開き、調教コマンドの名前を付いたファイルを探します
ファイルを検索してみると

COMF155_玉キック.ERB

というファイルがあるので、「玉キック」コマンドは「155」と分かりました

初期の口上には無かったコマンド

コマンド名 COM番号 CFALG
妖精オナホ 154 467
玉キック 155 468
飲尿 156 469
妖精バイブ 157 暫定:482
カテーテル 158 暫定:483
尿道プラグ 159 暫定:484
媚薬使う 196 437
パンツ扱き 197 438
遠隔調教 203 477
飲精 204 478
鬼頭攻め 210 480
鬼頭攻め(受) 211 479
アナル騎乗乳房自慰 512 419
口とヴァギナを犯す 513 439
口とアナルを犯す 514 440
アナル乱れ牡丹 515 441
基礎訓練 600 481
試召喚 601
影抜き 602
覚醒援助 603
ウィルス照射 604
霊媒実験 605
改造手術 606

2.口上コマンドの領域を作る

口上ファイル内の「0,愛撫」の上にある
=|BOX|

SELECTCASE SELECTCOM

| | = | の行から
=|BOX|

;コマンド口上ここまで

| | = | の範囲内に以下のフォーマットをコピペするか他のコマンドからコピペします。
範囲内でしたらどこでも良いのですが、視認性を上げる為に、最後に追加するか、調教カテゴリー内の最後にコピペするのが良いでしょう。

Ver2.2の場合
=|BOX|

;————————————————-
;xxx,追加コマンド〇〇〇
;————————————————-
CASE xxx
CALL TRAIN_MESSAGE

    ;初めて
    IF CFLAG:YYY == 0
      PRINTFORMW
      CFLAG:YYY = 1
    ELSE
      IF (TALENT:3 || TALENT:4 || TALENT:5 || TALENT:6 || TALENT:7 || TALENT:8) && (CFLAG:YYY < 3 || FLAG:7 == 2)
        ;恋慕、親愛
        IF (TALENT:3 || TALENT:6)
          PRINTFORMW
        ;淫乱、娼婦
        ELSEIF (TALENT:4 || TALENT:7)
          PRINTFORMW
        ;服従、隷属
        ELSEIF (TALENT:5 || TALENT:8)
          PRINTFORMW
        ENDIF
        CFLAG:YYY = 4
      ENDIF
      ;屈服刻印Lv3
      IF MARK:2 == 3 && (CFLAG:YYY < 2 || FLAG:7 == 2)
        PRINTFORMW
        CFLAG:YYY = 3
      ENDIF
      ;それ以外
      IF (CFLAG:YYY || FLAG:7 == 2)
        PRINTFORMW
        CFLAG:YYY = 2
      ENDIF
    ENDIF

=

Ver3.3の場合
=|BOX|

;————————————————-
;xxx,追加コマンド〇〇〇
;————————————————-
CASE 155
K_CALL:K = TRAIN_MESSAGE
;初めて
IF CFLAG:YYY == 0
KSTR:(K) = > CFLAG:YYY = 1 > ELSE > IF (TALENT:3 ) =
;淫乱、娼婦
ELSEIF (TALENT:4 || TALENT:7)
KSTR:(K) = > ;服従、隷属 > ELSEIF (TALENT:5 ) =
ENDIF
;陥落済み共通
IF !口上有無確認(0)
KSTR:(K) = > ENDIF > CFLAG:YYY = 4 > ENDIF > ;屈服刻印Lv3 > IF MARK:2 == 3 && (CFLAG:YYY < 2 ) =
CFLAG:YYY = 3
ENDIF
;それ以外
IF (CFLAG:YYY || FLAG:7 == 2) && !口上有無確認(0)
KSTR:(K++) =
CFLAG:YYY = 2
ENDIF
ENDIF

| | = |

3.コピペしたものを修正する

口上を書く前に以下の部分を修正します。
・視認性を上げるためにコマンドのタイトル行を書き換える

before ;xxx,追加コマンド〇〇〇
after ;155,玉キック

・CASE行のxxxをコマンド番号に書き換える

before CASE xxx
after CASE155

・CFLAGの番号を書き換える

before CFLAG:YYY
after CFLAG:468

4.口上を書く

今まで学んだ事、あなたの溢れるパトスをぶつけよう!

「口上思いつかないし、地の文だけでも出ればいいや」という場合は
=|BOX|

;————————————————-
;xxx,追加コマンド〇〇〇
;————————————————-
CASE xxx
CALL TRAIN_MESSAGE

| | = | を追加すればOKです。


関連リンク

旧まとめ 口上の書き方(このページの元の文章)
https://w.atwiki.jp/eramegaten/pages/302.html
サクラエディタ
https://sakura-editor.github.io/

1)
era板で検証した人曰く「大して変わらない」そうです