「口上の書き方」(2015/11/02 (月) 02:08:53) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*口上の書き方
----
&bold(){[[口上製作]]、[[関数について]]のページも併せて読んでおくと、より理解が深まる。}
----
#contents
----
ここでは口上の書き方を流れにそって説明していきます。
説明ではピクシーの口上をサクラエディタを使用して追加していきます。
実際には自分の追加したいキャラに変換して作業を行ってください。
----
**1.口上を書きたいキャラの口上ファイルを探そう
&bold(){&size(17){1-1.キャラの番号を確認する}}
各キャラの番号はCSVファイルの名前で確認できます。
各キャラのCSVファイルは以下のフォルダに格納されています。
|人間キャラ|CSV¥人間|
|悪魔キャラ|CSV¥悪魔¥種族番号_種族|
例) ピクシーの場合: CSV¥悪魔¥05_妖精
CSVファイル名はCharaキャラクタ番号_キャラクタ名.csvとなっています。
例)ピクシーの場合: Chara501_ピクシー.csv
"501"がピクシーのキャラクタ番号になります。
&bold(){&size(17){1-2.口上フォルダに書きたいキャラの口上があるか確認する}}
口上ファイルは「ERB¥口上」フォルダ配下の以下のフォルダに格納されています。
|人間キャラ|人間口上|
|悪魔キャラ|悪魔個人口上|
口上ファイルのファイル名は「EVENT_K&color(red){XXXX}_キャラクタ名_ALL.ERB」となっており、&br()&color(red){XXXX}がキャラクタ番号になります。
例)ピクシーの場合:EVENT_K501_ピクシー_ALL.ERB
口上を書きたいキャラの口上ファイルが存在する場合、「4.口上を書こう」に進んでください。
存在しない場合は「2.口上ファイルを作ろう」に進んでください。
----
**2.口上ファイルを作ろう
&bold(){&size(17){2-1.口上テンプレートファイルをコピーする}}
口上テンプレートファイルは以下のフォルダ配下に格納されています。
|格納フォルダ|各種テンプレート|
|各種テンプレート|EVENT_KX1_ALL.ERB|
口上テンプレートファイルを適当なフォルダにコピーしてください。
&bold(){&size(17){2-2.コピーしたファイルの名前を変更する}}
コピーしたファイルの名前を「EVENT_K&color(red){XXXX}_キャラクタ名_ALL.ERB」に変更してください。
(&color(red){XXXX}はキャラクタ番号)
----
**3.関数の名前を変更しよう
&bold(){&size(17){3-1.ファイルをサクラディタで開く}}
ファイルをサクラエディタで開いてください。
&bold(){&size(17){3-2.どのキャラの口上ファイルなのかを書いておく}}
ファイルを開くと2行目に「;○○口上」と書いてあるので"○○"をキャラの名前に書き換えてください。
行の先頭の";"を消してしまわないように注意してください。
&bold(){&size(17){3-3.KX1を変換する}}
-メニューの「検索」から「置換」を選んでください。(Ctrl+RでもOK)
-出てきたダイアログの置換前に「KX1」を、置換後に「キャラクタ番号にKを付けたもの(ピクシーならK501)」を入力してください。
-入力したら、「すべて置換」ボタンを押してください。テキスト内のKX1がすべてKキャラクタ番号に書き換えられます。
----
**4.口上を書こう
&bold(){&size(17){4-1.口上を表示させたい箇所へ移動する}}
-メニューの「検索」から「検索」を選んでください。(Ctrl+FでもOK)
-条件に口上を書きたい「調教コマンド名」を入れてください。&br()(この説明では「キスする」でいきます。)
-下検索ボタンを押してください。目的の箇所まで移動するはずです。1回で目的の場所まで移動しない場合は&br()下検索ボタン、上検索ボタンを押して目的の箇所まで移動してください。
&bold(){&size(17){4-2.口上を書く}}
検索で移動した箇所の下にある「CASE 数字」(キスするの場合、「CASE 20」)の次の行からが
キスするを選択した時に実行される処理です。
ここにPRINT命令を使用して口上を記述してください。
PRINT命令の後に半角スペースを入れその後に記述した文字列が表示されます。
例)
;-------------------------------------------------
;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種類があります。
|CENTER:SIZE(15):命令|CENTER:SIZE(15):特徴|
|PRINT|文字をそのまま表示する|
|PRINTL|文字をそのまま表示し、改行する|
|PRINTW|文字をそのまま表示し、改行した後入力を待つ|
|PRINTFORM|文字列変数があった場合は変換してから表示する|
|PRINTFORML|文字列変数があった場合は変換してから表示、改行する|
|PRINTFORMW|文字列変数があった場合は変換してから表示、改行した後入力を待つ|
PRINT/PRINTLばかりだとメッセージがさっと流れてしまうので適度にPRINTWを使用してください。
PRINTFORMはPRINTの上位互換と考えて構いません。
ただし処理量が増えてやや動作が重くなってしまいます。
Emueraの場合右クリックで文字表示をスキップ可能なので、使い分けがよくわからなければ全てPRINTFORMWにしてしまっても問題はないでしょう。
----
**5.書いた口上をゲームで表示しよう
&bold(){&size(17){5-1.作成した口上ファイルを口上フォルダに置く}}
4.までで作成した口上ファイルを口上フォルダに格納します。
口上ファイルを格納するフォルダについては
「1-2.口上フォルダに書きたいキャラの口上があるか確認する」を参照してください。
ピクシーの場合格納場所は「ERB¥口上¥悪魔個人口上」配下になります。
&bold(){&size(17){5-2.eraMegatenを起動する}}
eraMegatenを起動してください。
&bold(){&size(17){5-3.口上を書いたキャラを調教する}}
口上を追加したキャラを調教対象として選択し、調教を開始してください。
&bold(){&size(17){5-4.口上を書いた箇所が表示される調教内容を選択する}}
口上を追加した調教コマンド(ここでは「キスする」)を選択してください。
&bold(){&size(17){5-5.書いた口上が表示されることを確認する}}
表示例)
キスする
従順LV1(4) + 好奇心(5) + 忠誠度-10 * 相性良好(1.5)
= 31 > 実行値15
Hellow World
ピクシー: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
----
**6.調教相手に自分の呼び名を呼んでもらおう
&bold(){&size(17){6-1.文章の中に変数を組み込む}}
文章の中に特に決まっていない文字(あなたの名前など)を表示する場合文字列変数を使用します。
口上で主に使用すると思われる文字列変数は以下の4つだと思われます。
|CENTER:SIZE(15):変数名|CENTER:SIZE(15):表示される内容|CENTER:SIZE(15):ピクシーの場合|
|CALLNAME|調教対象の名前|ピクシー|
|CALLNAME:MASTER|あなたの名前|あなた|
|CSTR:一人称|調教対象の一人称|私|
|CSTR:二人称|調教対象のあなたの呼び名|サマナー|
&bold(){(注意)} 一人称、二人称は元々口上のために用意したものではありません。
大半のキャラが一人称、二人称を未設定な上、
変数を使用すると二人称「ご主人様」を「ごひゅじんたまぁ」などと
言い回しの変更ができないというデメリットもあるのであまりとらわれないようにしましょう。
ただ、口上ファイル内ではある程度呼び方を統一されていることが好ましいです。
他の人が口上を追加する場合などのために
口上ファイル内で使用している一人称、二人称をファイルの頭のほうにコメントで書いておくといいでしょう。
文字列を格納した変数を表示する場合は変数を"%"で囲んでください。
例)PRINTW %CSTR:一人称%は%CALLNAME%だよ。%CSTR:二人称%よろしくね。
&bold(){&size(17){6-2.変数の含まれる文章はPRINTFORMで表示する}}
変数が含まれる文章はPRINT/PRINTL/PRINTW命令では正常に表示することができません。
6-1.の例文をPRINT命令で表示しようとした場合には次のように表示されてしまいます。
表示内容) %CSTR:一人称%は%CALLNAME%だよ。%CSTR:二人称%よろしくね。
変数を含む文章を表示する場合はPRINTFORM/PRINTFORML/PRINTFORMW命令を使用してください。
それぞれの命令の違いはPRINT/PRINTL/PRINTWと同じです。
&bold(){&size(17){6-3.変数の内容が表示されることを確認する}}
6-1.の例文のPRINTWをPRINTFORMWで表示した場合、以下のように表示されます。
表示内容) 私はピクシーだよ。サマナーよろしくね。
----
**7.表示させる口上を状況で分岐させよう
&bold(){&size(17){7-1.IF文で分岐条件を決める}}
状況によってメッセージを表示したり、しなかったりしたい場合、IF文を使用します。
IF文の構文は次のようになっています。
<IF構文>
IF 条件
条件を満たす場合に表示する口上メッセージ
ENDIF
条件と関係なく表示する口上メッセージ
IFとENDIFはセットです。ENDIFを書き忘れるとエラーの原因になるので
IFを書いたらとりあえずENDIFを書いておくと安心です。
またTabを使ってIF-ENDIFブロックごとにインデント(字下げ機能)をつけておきましょう。
対応関係がわかりやすくなるのでエラーの発生を防ぎやすく、発生しても修正しやすくなります。
<例文>
IF TALENT:恋慕 == 1
PRINTFORML %CSTR:二人称%大好きだよ♪
ENDIF
PRINTFORMW 今日もよろしくね
「TALENT:恋慕 == 1」が条件となります。
TALENT:恋慕は調教対象のキャラの素質「恋慕」の有無を表していて
値が「0」の場合素質「恋慕」持っておらず
値が「1」の場合素質「恋慕」を持っています。
今回の条件ではTALENT:恋慕の値が「1」の場合に条件を満たすので
調教対象が素質「恋慕」を持っている場合にIF文の中の口上メッセージ「サマナー大好きだよ♪」が表示されます。
「今日もよろしくね」はIF文の外にあるので素質「恋慕」の有無関係なく表示されます。
条件では"="は二個必要です。一個だとエラーになるので注意してください。
&bold(){&size(17){7-2.IF文の条件に当てはまらない場合の処理ELSE}}
条件を満たす場合にメッセージを表示する方法を説明しましたが、ここでは条件を満たさなかった場合に表示したいメッセージがある場合以下のようにELSEを使用します。
<IF~ELSE構文>
IF 条件
条件を満たす場合に表示する口上メッセージ
ELSE
条件を満たさない場合に表示する口上メッセージ
ENDIF
条件と関係なく表示する口上メッセージ
<例文>
IF TALENT:恋慕 == 1
PRINTFORML %CSTR:二人称%大好きだよ♪
ELSE
PRINTFORML なんだ、%CALLNAME:MASTER%か
ENDIF
PRINTFORMW 今日もよろしくね
条件は7-1.と同じ素質「恋慕」を持っていることなので、調教対象が素質「恋慕」を持っている場合、「サマナー大好きだよ♪」が表示され、持っていない場合「なんだ、あなたか」が表示されます。
「今日もよろしくね」は7-1.と同様素質「恋慕」を持っていても持っていなくても表示されます。
&bold(){&size(17){7-3.IF文の条件に当てはまらなかった場合のさらなる条件ELSEIF}}
一つ目の条件を満たさない場合に二つ目の条件を満たすかどうか確認する場合にはELSEIFを使用します。
ELSEIFを使用する場合の構文は次の通りです。
<IF~ELSEIF構文>
IF 条件1
条件1を満たす場合に表示する口上メッセージ
ELSEIF 条件2
条件1を満たさないが条件2を満たす場合に表示する口上メッセージ
ENDIF
条件と関係なく表示する口上メッセージ
<例文>
IF TALENT:恋慕 == 1
PRINTFORML %CSTR:二人称%大好きだよ♪
ELSEIF TALENT:マゾ == 1
PRINTL いっぱいいぢめてほしぃのぉ
ENDIF
PRINTFORMW 今日もよろしくね
最初の条件は7-1.と同じで素質「恋慕」を持っているかどうか、持っている場合は「サマナー大好きだよ♪」が表示されます。
素質「恋慕」を持っていない場合はELSEIFへとび今度は素質「マゾ」を持っているかを確認します。
素質「マゾ」を持っている場合「いっぱいいぢめてほしぃのぉ」が表示されます。
素質「マゾ」を持っていない場合、両方とも表示されず「今日もよろしくね」だけが表示されます。
注意しなければならないのは条件1を満たした場合、条件2はチェックされません。
例文の場合、素質「恋慕」を持っていると素質「マゾ」を持っていても「いっぱいいぢめてほしぃのぉ」は表示されません。
恋慕を持っている場合にもマゾを持っている場合のメッセージを表示したい場合は
IF TALENT:恋慕 == 1
PRINTFORML %CSTR:二人称%大好きだよ♪
ENDIF
IF TALENT:マゾ == 1
PRINTL いっぱいいぢめてほしぃのぉ
ENDIF
PRINTFORMW 今日もよろしくね
といったふうにIF文を分けてください。
&bold(){&size(17){7-4.処理が1行だけのIF文SIF}}
IF文ではIF~ENDIFまでの間の処理が実行されますが以下の条件に合致する場合SIFという特殊なIF文が使用できます。
<SIF使用可能条件>
・IF文の条件に合致する場合に実行する処理が1行だけ
・ELSE、ELSEIFを使用しない
上記の条件に合致する、7-1.の例文をSIFで書くと次のようになります。
<例文>
SIF TALENT:恋慕 == 1
PRINTFORML %CSTR:二人称%大好きだよ♪
PRINTFORMW 今日もよろしくね
7-1.との違いはIFがSIFになってること、ENDIFがなくなっていることですね。
SIFでは条件合致時に実行する処理を1行だけに限定することでENDIFを省略することができます。
これで、1行しか処理しない場合にENDIFを省略してちょっとだけ見た目をスッキリさせることができます。
----
**8.コメントを残そう
&bold(){&size(17){8-1.コメントを書く}}
口上ファイルの行の先頭にセミコロン(;)を置くことで、コメントを残すことが出来ます。
「このフラグは何の分岐だっけ?」「口上をいじりたい人向けに資料を残しておこう」という風に、
コメントを残しておくことで作業効率や伝達精度を高めることが出来ます。
;記述日2011/02/14
----
**9.条件いろいろ
7.のIF文説明では「フラグ == 1」の形しか紹介しませんでしたが条件の指定の仕方はいろいろあります。
&bold(){&size(17){9-1.値の比較}}
一番よく使うと思われるタイプ、左辺と右辺の値を比較して判断します。
|==|左辺と右辺の値が等しい|
|&color(){>}|左辺の値が右辺の値より大きい(等しい場合含まない)|
|<|左辺の値が右辺の値未満(等しい場合含まない)|
|>=|左辺の値が右辺の値以上(等しい場合含む)|
|<=|左辺の値が右辺の値以下(等しい場合含む)|
|!=|左辺と右辺の値が等しくない|
&bold(){&size(17){9-2.値の参照}}
変数/フラグのみを条件文として指定することも可能です。
その場合、『IF (条件) != 0』の省略形として扱われるので、変数/フラグの値が0だと偽(条件を満たさない)、0以外だと真(条件を満たす)になります。
<例文>
IF TALENT:恋慕
素質[恋慕]持ちの時の処理
ELSE
素質[恋慕]なしの時の処理
ENDIF
また変数の前に「!」をつけると上とは逆に0の時に真、0以外の時に偽となります。
<例文>
IF !TALENT:恋慕
素質[恋慕]なしの時の処理
ELSE
素質[恋慕]持ちの時の処理
ENDIF
&bold(){&size(17){9-3.ランダム分岐}}
素質だとか能力だとかまったく関係なしに完全にランダムで分岐させたい場合
RAND:Xを使用します。Xには数値を指定し、0~X-1(RAND:10なら0~9)の範囲の値が入ります。
<例文>
IF RAND:2 == 0
メッセージ1
ELSE
メッセージ2
ENDIF
上記では半々の確率でメッセージ1とメッセージ2が表示されます。
この変数では3択以上の分岐も行えますが注意しないといけないのは
RAND:Xに入る値はRANDという文字を使うたびに算出され直すということです。
&color(red){<誤った使用例>}
IF RAND:3 == 0
メッセージ1
ELSEIF RAND:3 == 1
メッセージ2
ELSE
メッセージ3
ENDIF
上記のような場合、それぞれのメッセージが表示される確率は1/3ではありません。
メッセージ1が1/3の確率、メッセージ2が1-1/3=2/3のさらに1/3で2/9となり、
メッセージ3が1-(1/3+2/9)で4/9の確率になります。
3択以上に分岐を等確率で表示させたい場合は次のような手法をとってください。
&color(red){<正しい使用例>}
1.RANDの数を1ずつ減らしていく方法
IF RAND:3 == 0 (←1/3)
PRINTFORMW 「メッセージ1」
ELSEIF RAND:2 == 0 (←(1-1/3)x1/2=1/3)
PRINTFORMW 「メッセージ2」
ELSE (←1-(1/3+1/3)=1/3)
PRINTFORMW 「メッセージ3」
ENDIF
2.別の変数に代入する方法
LOCAL = RAND:3
IF LOCAL == 0
PRINTFORMW 「メッセージ1」
ELSEIF LOCAL == 1
PRINTFORMW 「メッセージ2」
ELSE
PRINTFORMW 「メッセージ3」
ENDIF
3.SELECTCASEを使う方法
SELECTCASE RAND:3
CASE 0
PRINTFORMW 「メッセージ1」
CASE 1
PRINTFORMW 「メッセージ2」
CASEELSE
PRINTFORMW 「メッセージ3」
ENDSELECT
4.PRINTDATAを使う方法
PRINTDATAW
DATAFORM 「メッセージ1」
DATAFORM 「メッセージ2」
DATAFORM 「メッセージ3」
ENDDATA
なおあえて確率を偏らせたい場合、RAND:100を使用してパーセント単位に分割するなどの手を利用するといいでしょう。
LOCAL = RAND:100
IF LOCAL < 10
;10%の確率で実行
メッセージ1
ELSEIF LOCAL < 30
;30 - 10 = 20%の確率で実行
メッセージ2
ELSEIF LOCAL < 60
;60 - 20 - 10 = 30%の確率で実行
メッセージ3
ELSE
;100 - 30 - 20 - 10 = 40%の確率で実行
メッセージ3
ENDIF
&bold(){&size(17){9-4.複数の条件}}
複数の条件に合致するときだけ処理を実行させたい場合、条件の間に「&&」もしくは「||」をはさんでください。
「&&」はAND条件、「||」はOR条件になります。
条件1 && 条件2 ;条件1と条件2の両方を満たす場合にのみ真(条件を満たす)となる。
条件1 || 条件2 ;条件1と条件2のどちらか片方を満たす場合に真(条件を満たす)となる。
&&(||)は何回も使用することができ、条件は何個でも(?)増やせます。
条件1 &&(||) 条件2 &&(||) 条件3 &&(||) 条件4 &&(||) ・・・
また1つのIF文内で&&と||を組み合わせることもできます。
条件1 && 条件2 || 条件3
ただし&&と||を混在させる場合、どの条件がセットなのかわからないのでセットの条件を()で囲むようにしてください。
()で囲まなかった場合、前方の条件から順に判定されます。
たとえば上のような組み合わせでも()の付け方で条件が変わります。
(条件1 && 条件2) || 条件3
条件1と条件2がともに真、もしくは条件3が真&br()(条件3が真なら条件1、2は偽でもIF文の判定は真となる)
条件1 && (条件2 || 条件3)
条件1が真で条件2と条件3のどちらかが真の場合真&br()(条件1は真であることが必須、その上で条件2と条件3の片方または両方が真)
----
**10.SELECTCASE
//----
//**11.ライセンス
----
*口上でよく使われる構文・関数について
**口上内でよく使われる変数/フラグ/記号
|表現|説明|
|%NAME:MASTER%|主人(あなた)の名前|
|%CALLNAME:MASTER%|主人(あなた)の呼び名|
|%NAME:TARGET%|調教対象の名前|
|%CALLNAME:TARGET%|調教対象の呼び名|
|%CALLNAME%|CALLNAME:TARGETと同じ|
|%CSTR:一人称%|調教対象の自身の呼び方|
|%CSTR:二人称%|調教対象の主人(あなた)の呼び方|
|PREVCOM|前回実行した調教コマンドのチェック&br()IF分岐としてコマンド番号(Train.csvを参照)を入力すれば、&br()&bold(){「前回選んだコマンドによって分岐」}という表現が可能。&br()&bold(){「(PREV)IOUS」「(COM)MAND」の略}と覚えると理解しやすい。|
|TEQUIP:***(数値)|調教対象の衣装を確認|
|%UNICODE(0x2661)%|ハートマーク|
----
*口上対応コマンドの増やし方
**追加したいコマンドの番号を調べる
-eramegatenフォルダ内のERBフォルダ→COMor追加COMフォルダを開く
-追加したいコマンドのファイル名COMF番号をチェック
----
**キャラ.ERB内に口上として増やしたいコマンドを付け足す
-口上対応させたいコマンドのCOMF番号を見て、&br()&bold(){キャラ.ERB内でその番号に最も近いスペースに、口上テンプレートからコマンドテンプレをコピペする。}
--例:口上に秘貝開帳見せつけ(COMF128)を追加したい場合、&bold(){&u(){自慰見せつけ(COMF127)の直後に置く}}
-コピペしたら&bold(){&u(){CFLAG番号を一つ前のCFLAG番号に+1して修正}}。&br()(CFLAG番号が重複すると誤作動の原因に)
--例:口上に秘貝開帳見せつけ(COMF128)を置いたら、&u(){CFLAGを433に変更する。}&br()(COMF127自慰見せつけが使用しているCFLAG番号が432なので、&br()COMF128秘貝開帳見せつけが使うCFLAG番号は433となる)
----
*コメント
#comment_num2(,vsize=10)
*口上の書き方
----
&bold(){[[口上製作]]、[[関数について]]のページも併せて読んでおくと、より理解が深まる。}
----
#contents
----
ここでは口上の書き方を流れにそって説明していきます。
説明ではピクシーの口上をサクラエディタを使用して追加していきます。
実際には自分の追加したいキャラに変換して作業を行ってください。
----
**1.口上を書きたいキャラの口上ファイルを探そう
&bold(){&size(17){1-1.キャラの番号を確認する}}
各キャラの番号はCSVファイルの名前で確認できます。
各キャラのCSVファイルは以下のフォルダに格納されています。
|人間キャラ|CSV¥人間|
|悪魔キャラ|CSV¥悪魔¥種族番号_種族|
例) ピクシーの場合: CSV¥悪魔¥05_妖精
CSVファイル名はCharaキャラクタ番号_キャラクタ名.csvとなっています。
例)ピクシーの場合: Chara501_ピクシー.csv
"501"がピクシーのキャラクタ番号になります。
&bold(){&size(17){1-2.口上フォルダに書きたいキャラの口上があるか確認する}}
口上ファイルは「ERB¥口上」フォルダ配下の以下のフォルダに格納されています。
|人間キャラ|人間口上|
|悪魔キャラ|悪魔個人口上|
口上ファイルのファイル名は「EVENT_K&color(red){XXXX}_キャラクタ名_ALL.ERB」となっており、&br()&color(red){XXXX}がキャラクタ番号になります。
例)ピクシーの場合:EVENT_K501_ピクシー_ALL.ERB
口上を書きたいキャラの口上ファイルが存在する場合、「4.口上を書こう」に進んでください。
存在しない場合は「2.口上ファイルを作ろう」に進んでください。
----
**2.口上ファイルを作ろう
&bold(){&size(17){2-1.口上テンプレートファイルをコピーする}}
口上テンプレートファイルは以下のフォルダ配下に格納されています。
|格納フォルダ|各種テンプレート|
|各種テンプレート|EVENT_KX1_ALL.ERB|
口上テンプレートファイルを適当なフォルダにコピーしてください。
&bold(){&size(17){2-2.コピーしたファイルの名前を変更する}}
コピーしたファイルの名前を「EVENT_K&color(red){XXXX}_キャラクタ名_ALL.ERB」に変更してください。
(&color(red){XXXX}はキャラクタ番号)
----
**3.関数の名前を変更しよう
&bold(){&size(17){3-1.ファイルをサクラディタで開く}}
ファイルをサクラエディタで開いてください。
&bold(){&size(17){3-2.どのキャラの口上ファイルなのかを書いておく}}
ファイルを開くと2行目に「;○○口上」と書いてあるので"○○"をキャラの名前に書き換えてください。
行の先頭の";"を消してしまわないように注意してください。
&bold(){&size(17){3-3.KX1を変換する}}
-メニューの「検索」から「置換」を選んでください。(Ctrl+RでもOK)
-出てきたダイアログの置換前に「KX1」を、置換後に「キャラクタ番号にKを付けたもの(ピクシーならK501)」を入力してください。
-入力したら、「すべて置換」ボタンを押してください。テキスト内のKX1がすべてKキャラクタ番号に書き換えられます。
----
**4.口上を書こう
&bold(){&size(17){4-1.口上を表示させたい箇所へ移動する}}
-メニューの「検索」から「検索」を選んでください。(Ctrl+FでもOK)
-条件に口上を書きたい「調教コマンド名」を入れてください。&br()(この説明では「キスする」でいきます。)
-下検索ボタンを押してください。目的の箇所まで移動するはずです。1回で目的の場所まで移動しない場合は&br()下検索ボタン、上検索ボタンを押して目的の箇所まで移動してください。
&bold(){&size(17){4-2.口上を書く}}
検索で移動した箇所の下にある「CASE 数字」(キスするの場合、「CASE 20」)の次の行からが
キスするを選択した時に実行される処理です。
ここにPRINT命令を使用して口上を記述してください。
PRINT命令の後に半角スペースを入れその後に記述した文字列が表示されます。
例)
;-------------------------------------------------
;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種類があります。
|CENTER:SIZE(15):命令|CENTER:SIZE(15):特徴|
|PRINT|文字をそのまま表示する|
|PRINTL|文字をそのまま表示し、改行する|
|PRINTW|文字をそのまま表示し、改行した後入力を待つ|
|PRINTFORM|文字列変数があった場合は変換してから表示する|
|PRINTFORML|文字列変数があった場合は変換してから表示、改行する|
|PRINTFORMW|文字列変数があった場合は変換してから表示、改行した後入力を待つ|
PRINT/PRINTLばかりだとメッセージがさっと流れてしまうので適度にPRINTWを使用してください。
PRINTFORMはPRINTの上位互換と考えて構いません。
ただし処理量が増えてやや動作が重くなってしまいます。
Emueraの場合右クリックで文字表示をスキップ可能なので、使い分けがよくわからなければ全てPRINTFORMWにしてしまっても問題はないでしょう。
----
**5.書いた口上をゲームで表示しよう
&bold(){&size(17){5-1.作成した口上ファイルを口上フォルダに置く}}
4.までで作成した口上ファイルを口上フォルダに格納します。
口上ファイルを格納するフォルダについては
「1-2.口上フォルダに書きたいキャラの口上があるか確認する」を参照してください。
ピクシーの場合格納場所は「ERB¥口上¥悪魔個人口上」配下になります。
&bold(){&size(17){5-2.eraMegatenを起動する}}
eraMegatenを起動してください。
&bold(){&size(17){5-3.口上を書いたキャラを調教する}}
口上を追加したキャラを調教対象として選択し、調教を開始してください。
&bold(){&size(17){5-4.口上を書いた箇所が表示される調教内容を選択する}}
口上を追加した調教コマンド(ここでは「キスする」)を選択してください。
&bold(){&size(17){5-5.書いた口上が表示されることを確認する}}
表示例)
キスする
従順LV1(4) + 好奇心(5) + 忠誠度-10 * 相性良好(1.5)
= 31 > 実行値15
Hellow World
ピクシー: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
----
**6.調教相手に自分の呼び名を呼んでもらおう
&bold(){&size(17){6-1.文章の中に変数を組み込む}}
文章の中に特に決まっていない文字(あなたの名前など)を表示する場合文字列変数を使用します。
口上で主に使用すると思われる文字列変数は以下の4つだと思われます。
|CENTER:SIZE(15):変数名|CENTER:SIZE(15):表示される内容|CENTER:SIZE(15):ピクシーの場合|
|CALLNAME|調教対象の名前|ピクシー|
|CALLNAME:MASTER|あなたの名前|あなた|
|CSTR:一人称|調教対象の一人称|私|
|CSTR:二人称|調教対象のあなたの呼び名|サマナー|
&bold(){(注意)} 一人称、二人称は元々口上のために用意したものではありません。
大半のキャラが一人称、二人称を未設定な上、
変数を使用すると二人称「ご主人様」を「ごひゅじんたまぁ」などと
言い回しの変更ができないというデメリットもあるのであまりとらわれないようにしましょう。
ただ、口上ファイル内ではある程度呼び方を統一されていることが好ましいです。
他の人が口上を追加する場合などのために
口上ファイル内で使用している一人称、二人称をファイルの頭のほうにコメントで書いておくといいでしょう。
文字列を格納した変数を表示する場合は変数を"%"で囲んでください。
例)PRINTW %CSTR:一人称%は%CALLNAME%だよ。%CSTR:二人称%よろしくね。
&bold(){&size(17){6-2.変数の含まれる文章はPRINTFORMで表示する}}
変数が含まれる文章はPRINT/PRINTL/PRINTW命令では正常に表示することができません。
6-1.の例文をPRINT命令で表示しようとした場合には次のように表示されてしまいます。
表示内容) %CSTR:一人称%は%CALLNAME%だよ。%CSTR:二人称%よろしくね。
変数を含む文章を表示する場合はPRINTFORM/PRINTFORML/PRINTFORMW命令を使用してください。
それぞれの命令の違いはPRINT/PRINTL/PRINTWと同じです。
&bold(){&size(17){6-3.変数の内容が表示されることを確認する}}
6-1.の例文のPRINTWをPRINTFORMWで表示した場合、以下のように表示されます。
表示内容) 私はピクシーだよ。サマナーよろしくね。
----
**7.表示させる口上を状況で分岐させよう
&bold(){&size(17){7-1.IF文で分岐条件を決める}}
状況によってメッセージを表示したり、しなかったりしたい場合、IF文を使用します。
IF文の構文は次のようになっています。
<IF構文>
IF 条件
条件を満たす場合に表示する口上メッセージ
ENDIF
条件と関係なく表示する口上メッセージ
IFとENDIFはセットです。ENDIFを書き忘れるとエラーの原因になるので
IFを書いたらとりあえずENDIFを書いておくと安心です。
またTabを使ってIF-ENDIFブロックごとにインデント(字下げ機能)をつけておきましょう。
対応関係がわかりやすくなるのでエラーの発生を防ぎやすく、発生しても修正しやすくなります。
<例文>
IF TALENT:恋慕 == 1
PRINTFORML %CSTR:二人称%大好きだよ♪
ENDIF
PRINTFORMW 今日もよろしくね
「TALENT:恋慕 == 1」が条件となります。
TALENT:恋慕は調教対象のキャラの素質「恋慕」の有無を表していて
値が「0」の場合素質「恋慕」持っておらず
値が「1」の場合素質「恋慕」を持っています。
今回の条件ではTALENT:恋慕の値が「1」の場合に条件を満たすので
調教対象が素質「恋慕」を持っている場合にIF文の中の口上メッセージ「サマナー大好きだよ♪」が表示されます。
「今日もよろしくね」はIF文の外にあるので素質「恋慕」の有無関係なく表示されます。
条件では"="は二個必要です。一個だとエラーになるので注意してください。
&bold(){&size(17){7-2.IF文の条件に当てはまらない場合の処理ELSE}}
条件を満たす場合にメッセージを表示する方法を説明しましたが、ここでは条件を満たさなかった場合に表示したいメッセージがある場合以下のようにELSEを使用します。
<IF~ELSE構文>
IF 条件
条件を満たす場合に表示する口上メッセージ
ELSE
条件を満たさない場合に表示する口上メッセージ
ENDIF
条件と関係なく表示する口上メッセージ
<例文>
IF TALENT:恋慕 == 1
PRINTFORML %CSTR:二人称%大好きだよ♪
ELSE
PRINTFORML なんだ、%CALLNAME:MASTER%か
ENDIF
PRINTFORMW 今日もよろしくね
条件は7-1.と同じ素質「恋慕」を持っていることなので、調教対象が素質「恋慕」を持っている場合、「サマナー大好きだよ♪」が表示され、持っていない場合「なんだ、あなたか」が表示されます。
「今日もよろしくね」は7-1.と同様素質「恋慕」を持っていても持っていなくても表示されます。
&bold(){&size(17){7-3.IF文の条件に当てはまらなかった場合のさらなる条件ELSEIF}}
一つ目の条件を満たさない場合に二つ目の条件を満たすかどうか確認する場合にはELSEIFを使用します。
ELSEIFを使用する場合の構文は次の通りです。
<IF~ELSEIF構文>
IF 条件1
条件1を満たす場合に表示する口上メッセージ
ELSEIF 条件2
条件1を満たさないが条件2を満たす場合に表示する口上メッセージ
ENDIF
条件と関係なく表示する口上メッセージ
<例文>
IF TALENT:恋慕 == 1
PRINTFORML %CSTR:二人称%大好きだよ♪
ELSEIF TALENT:マゾ == 1
PRINTL いっぱいいぢめてほしぃのぉ
ENDIF
PRINTFORMW 今日もよろしくね
最初の条件は7-1.と同じで素質「恋慕」を持っているかどうか、持っている場合は「サマナー大好きだよ♪」が表示されます。
素質「恋慕」を持っていない場合はELSEIFへとび今度は素質「マゾ」を持っているかを確認します。
素質「マゾ」を持っている場合「いっぱいいぢめてほしぃのぉ」が表示されます。
素質「マゾ」を持っていない場合、両方とも表示されず「今日もよろしくね」だけが表示されます。
注意しなければならないのは条件1を満たした場合、条件2はチェックされません。
例文の場合、素質「恋慕」を持っていると素質「マゾ」を持っていても「いっぱいいぢめてほしぃのぉ」は表示されません。
恋慕を持っている場合にもマゾを持っている場合のメッセージを表示したい場合は
IF TALENT:恋慕 == 1
PRINTFORML %CSTR:二人称%大好きだよ♪
ENDIF
IF TALENT:マゾ == 1
PRINTL いっぱいいぢめてほしぃのぉ
ENDIF
PRINTFORMW 今日もよろしくね
といったふうにIF文を分けてください。
&bold(){&size(17){7-4.処理が1行だけのIF文SIF}}
IF文ではIF~ENDIFまでの間の処理が実行されますが以下の条件に合致する場合SIFという特殊なIF文が使用できます。
<SIF使用可能条件>
・IF文の条件に合致する場合に実行する処理が1行だけ
・ELSE、ELSEIFを使用しない
上記の条件に合致する、7-1.の例文をSIFで書くと次のようになります。
<例文>
SIF TALENT:恋慕 == 1
PRINTFORML %CSTR:二人称%大好きだよ♪
PRINTFORMW 今日もよろしくね
7-1.との違いはIFがSIFになってること、ENDIFがなくなっていることですね。
SIFでは条件合致時に実行する処理を1行だけに限定することでENDIFを省略することができます。
これで、1行しか処理しない場合にENDIFを省略してちょっとだけ見た目をスッキリさせることができます。
----
**8.コメントを残そう
&bold(){&size(17){8-1.コメントを書く}}
口上ファイルの行の先頭にセミコロン(;)を置くことで、コメントを残すことが出来ます。
「このフラグは何の分岐だっけ?」「口上をいじりたい人向けに資料を残しておこう」という風に、
コメントを残しておくことで作業効率や伝達精度を高めることが出来ます。
;記述日2011/02/14
----
**9.条件いろいろ
7.のIF文説明では「フラグ == 1」の形しか紹介しませんでしたが条件の指定の仕方はいろいろあります。
&bold(){&size(17){9-1.値の比較}}
一番よく使うと思われるタイプ、左辺と右辺の値を比較して判断します。
|==|左辺と右辺の値が等しい|
|&color(){>}|左辺の値が右辺の値より大きい(等しい場合含まない)|
|<|左辺の値が右辺の値未満(等しい場合含まない)|
|>=|左辺の値が右辺の値以上(等しい場合含む)|
|<=|左辺の値が右辺の値以下(等しい場合含む)|
|!=|左辺と右辺の値が等しくない|
&bold(){&size(17){9-2.値の参照}}
変数/フラグのみを条件文として指定することも可能です。
その場合、『IF (条件) != 0』の省略形として扱われるので、変数/フラグの値が0だと偽(条件を満たさない)、0以外だと真(条件を満たす)になります。
<例文>
IF TALENT:恋慕
素質[恋慕]持ちの時の処理
ELSE
素質[恋慕]なしの時の処理
ENDIF
また変数の前に「!」をつけると上とは逆に0の時に真、0以外の時に偽となります。
<例文>
IF !TALENT:恋慕
素質[恋慕]なしの時の処理
ELSE
素質[恋慕]持ちの時の処理
ENDIF
&bold(){&size(17){9-3.ランダム分岐}}
素質だとか能力だとかまったく関係なしに完全にランダムで分岐させたい場合
RAND:Xを使用します。Xには数値を指定し、0~X-1(RAND:10なら0~9)の範囲の値が入ります。
<例文>
IF RAND:2 == 0
メッセージ1
ELSE
メッセージ2
ENDIF
上記では半々の確率でメッセージ1とメッセージ2が表示されます。
この変数では3択以上の分岐も行えますが注意しないといけないのは
RAND:Xに入る値はRANDという文字を使うたびに算出され直すということです。
&color(red){<誤った使用例>}
IF RAND:3 == 0
メッセージ1
ELSEIF RAND:3 == 1
メッセージ2
ELSE
メッセージ3
ENDIF
上記のような場合、それぞれのメッセージが表示される確率は1/3ではありません。
メッセージ1が1/3の確率、メッセージ2が1-1/3=2/3のさらに1/3で2/9となり、
メッセージ3が1-(1/3+2/9)で4/9の確率になります。
3択以上に分岐を等確率で表示させたい場合は次のような手法をとってください。
&color(red){<正しい使用例>}
1.RANDの数を1ずつ減らしていく方法
IF RAND:3 == 0 (←1/3)
PRINTFORMW 「メッセージ1」
ELSEIF RAND:2 == 0 (←(1-1/3)x1/2=1/3)
PRINTFORMW 「メッセージ2」
ELSE (←1-(1/3+1/3)=1/3)
PRINTFORMW 「メッセージ3」
ENDIF
2.別の変数に代入する方法
LOCAL = RAND:3
IF LOCAL == 0
PRINTFORMW 「メッセージ1」
ELSEIF LOCAL == 1
PRINTFORMW 「メッセージ2」
ELSE
PRINTFORMW 「メッセージ3」
ENDIF
3.SELECTCASEを使う方法
SELECTCASE RAND:3
CASE 0
PRINTFORMW 「メッセージ1」
CASE 1
PRINTFORMW 「メッセージ2」
CASEELSE
PRINTFORMW 「メッセージ3」
ENDSELECT
4.PRINTDATAを使う方法
PRINTDATAW
DATAFORM 「メッセージ1」
DATAFORM 「メッセージ2」
DATAFORM 「メッセージ3」
ENDDATA
なおあえて確率を偏らせたい場合、RAND:100を使用してパーセント単位に分割するなどの手を利用するといいでしょう。
LOCAL = RAND:100
IF LOCAL < 10
;10%の確率で実行
メッセージ1
ELSEIF LOCAL < 30
;30 - 10 = 20%の確率で実行
メッセージ2
ELSEIF LOCAL < 60
;60 - 20 - 10 = 30%の確率で実行
メッセージ3
ELSE
;100 - 30 - 20 - 10 = 40%の確率で実行
メッセージ3
ENDIF
&bold(){&size(17){9-4.複数の条件}}
複数の条件に合致するときだけ処理を実行させたい場合、条件の間に「&&」もしくは「||」をはさんでください。
「&&」はAND条件、「||」はOR条件になります。
条件1 && 条件2 ;条件1と条件2の両方を満たす場合にのみ真(条件を満たす)となる。
条件1 || 条件2 ;条件1と条件2のどちらか片方を満たす場合に真(条件を満たす)となる。
&&(||)は何回も使用することができ、条件は何個でも(?)増やせます。
条件1 &&(||) 条件2 &&(||) 条件3 &&(||) 条件4 &&(||) ・・・
また1つのIF文内で&&と||を組み合わせることもできます。
条件1 && 条件2 || 条件3
ただし&&と||を混在させる場合、どの条件がセットなのかわからないのでセットの条件を()で囲むようにしてください。
()で囲まなかった場合、前方の条件から順に判定されます。
たとえば上のような組み合わせでも()の付け方で条件が変わります。
(条件1 && 条件2) || 条件3
条件1と条件2がともに真、もしくは条件3が真&br()(条件3が真なら条件1、2は偽でもIF文の判定は真となる)
条件1 && (条件2 || 条件3)
条件1が真で条件2と条件3のどちらかが真の場合真&br()(条件1は真であることが必須、その上で条件2と条件3の片方または両方が真)
----
**10.SELECTCASE
//----
//**11.ライセンス
----
*口上でよく使われる構文・関数について
**口上内でよく使われる変数/フラグ/記号
|表現|説明|
|%NAME:MASTER%|主人(あなた)の名前|
|%CALLNAME:MASTER%|主人(あなた)の呼び名|
|%NAME:TARGET%|調教対象の名前|
|%CALLNAME:TARGET%|調教対象の呼び名|
|%CALLNAME%|CALLNAME:TARGETと同じ|
|%CSTR:一人称%|調教対象の自身の呼び方|
|%CSTR:二人称%|調教対象の主人(あなた)の呼び方|
|PREVCOM|前回実行した調教コマンドのチェック&br()IF分岐としてコマンド番号(Train.csvを参照)を入力すれば、&br()&bold(){「前回選んだコマンドによって分岐」}という表現が可能。&br()&bold(){「(PREV)IOUS」「(COM)MAND」の略}と覚えると理解しやすい。|
|TEQUIP:***(数値)|対象の衣装を確認|
|TALENT:***(数値)|対象の素質を確認(Talent.csvを参照)&br()素質を持っている場合は「1」が入ります|
|%UNICODE(0x2661)%|ハートマーク|
----
*口上対応コマンドの増やし方
**追加したいコマンドの番号を調べる
-eramegatenフォルダ内のERBフォルダ→COMor追加COMフォルダを開く
-追加したいコマンドのファイル名COMF番号をチェック
----
**キャラ.ERB内に口上として増やしたいコマンドを付け足す
-口上対応させたいコマンドのCOMF番号を見て、&br()&bold(){キャラ.ERB内でその番号に最も近いスペースに、口上テンプレートからコマンドテンプレをコピペする。}
--例:口上に秘貝開帳見せつけ(COMF128)を追加したい場合、&bold(){&u(){自慰見せつけ(COMF127)の直後に置く}}
-コピペしたら&bold(){&u(){CFLAG番号を一つ前のCFLAG番号に+1して修正}}。&br()(CFLAG番号が重複すると誤作動の原因に)
--例:口上に秘貝開帳見せつけ(COMF128)を置いたら、&u(){CFLAGを433に変更する。}&br()(COMF127自慰見せつけが使用しているCFLAG番号が432なので、&br()COMF128秘貝開帳見せつけが使うCFLAG番号は433となる)
----
*コメント
#comment_num2(,vsize=10)
表示オプション
横に並べて表示:
変化行の前後のみ表示: