omake系列の仕様で、CNPCのfixLv.を"6"に指定した場合に使用できる。
会話の他、様々なイベントを起こすことが可能。MMA/TTなら変数も使用できます。

基本構造

タグ 意味
%txt_ucnpc_ev_b 開始タグ
%txtevstart,JP 最初の会話テキスト
%txt***,JP 分岐先のテキスト。***は半角英字で記述。
%bye,JP 分岐先にこれを指定すると会話を終了できる。会話本文を記述する必要は無し。
%txt_ucnpc_ev_e 終了タグ
%txtevif,JP 意味は%txtevstart,JPと同様でevstartより優先的に表示される。
※筆者はこれを使う必要性が分かっていません。

解説

選択肢を示す場合、「{c}○○%***{ev},,,,,」と記述する。
{c}で選択肢かどうかの判定。
○○で選択肢の文章。
***は分岐先タグ。
{ev}でイベントを起こす判定。
{ev}を記述した場合は後ろに「,」を付けなければならない。個数は不明。例に従って5個あれば確実。
注意すべき点は、「txt」の有無。分岐先のタグでは%txt***,JPと「txt」が必要だが、選択肢側では「txt」は必要ないので注意。

基本編

omake同梱の「解説ロミアス」より

%txt_ucnpc_ev_b
%txtevstart,JP
CNPCの選択肢会話機能についての説明を聞きたいのか?{c}聞きたい%yes{ev},,,,,{c}余計な世話だ%no{ev},,,,,
%txtyes,JP
具体的に何について聞きたいんだ?{c}作り方%hensyu1{ev},,,,,{c}可能なこと%kano{ev},,,,,{c}注意%chui{ev},,,,,
%txtno,JP
…本当に聞かないつもりか?{c}聞く%yes{ev},,,,,{c}聞かない%joudan{ev},,,,,
%txtjoudan,JP
おいおい、冗談だろう?{c}聞く%yes{ev},,,,,{c}聞かない%no{ev},,,,,
%txthensyu1,JP
通常のCNPCのテキストに追加して記述することで可能になる。{n}bitOn.の下あたりから記述するとよいだろう。{n}ちなみにfixLv.を6にしないとこの機能は使えないぞ。{c}(続く)%hensyu2{ev},,,,,
%txthensyu2,JP
記述の順番は「会話の内容、選択肢、イベントアクション」だ。{n}ここで説明するには長すぎるから割愛させてもらおう。{n}「会話の内容」では"you"や"me"や"n"などが使えるが、{n}選択肢では使用できないから気を付けるといい。{c}(続く)%hensyu3{ev},,,,,
%txthensyu3,JP
なにはともあれ、説明のテキストを読んで{n}実際に作ってみるのが一番理解しやすいだろう。{n}陰ながら応援しているよ(ニヤリ){c}他にも聞きたい%yes{ev},,,,,{c}さようなら%bye{ev},,,,,
%txtkano,JP
このような選択肢による会話分岐のほかに{n}会話後にキャラを敵対させたり消滅させたりすることが可能だ。{n}他にもエモーションアイコンや効果音を出したり{n}流れている音楽を変えることもできる。{n}ただ、アイテムやキャラクターの生成は{n}ゲームバランスを考えて不可能にしている。{n}何か試してみるか?{c}敵対%tekitai{ev},,,,,{c}消滅%evstart{ev}vanq,,,,,{c}エモーションアイコン%emo{ev}emolove,,,,,{c}効果音%koukaon{ev}curse3.wav,,,,,{c}(次へ)%kano2{ev},,,,,
%txttekitai,JP
…本当に試してしまったのか?{c}えー%bye{ev}gohos,,,,,
%txtemo,JP
エモーションアイコンを出したぞ。{c}見えない%emo2{ev},,,,,
%txtemo2,JP
おいおい、会話ウィンドウに隠れて見えないのは{n}少し考えれば分かることだろう。{n}これでエモーションアイコンを出すときは{n}会話を終了するときにするべきだというのが理解できたな。{n}(ロミアスはにやりと笑った){c}さようなら%bye{ev},,,,,
%txtkoukaon,JP
あなたのエーテル抗体のポーションは黒く輝いた。{c}(続く)%koukaon2{ev},,,,,
%txtkoukaon2,JP
…おっと、驚かせてしまったかな。{n}もちろん、本当に呪われたわけではないから安心するといい。{n}{n}さて、他に何か聞きたいことはあるか?{c}ある%yes{ev},,,,,{c}ない%bye{ev},,,,,
%txtongaku,JP
どうだ、少しは緊張感のある音楽になっただろう。{n}もっとも、他人と自分が同じBGMを使っているとは限らないから、{n}場合によっては大変間抜けなことになる可能性もあるがな。{n}{n}さて、他に何か聞きたいことはあるか?{c}ある%yes{ev},,,,,{c}ない%bye{ev},,,,,
%txtchui,JP
そうだな、まずテキストは間違いのないように記述することだ。{n}上手く動作しないという場合は必ずテキストを見なおすべきだ。{n}それと抜けられない無限ループを作るのはやめておいた方がいい。{n}Shiftで会話から抜けられるとはいえ、やはり印象は悪い。{n}あとは…そうだな。{n}無限ループを避けるために{n}選択肢は300回までしか使えないようになっている。{n}もっとも、そんなに大量の文章を書く変態はいないだろうがね。{n}(ロミアスはにやりと笑った){c}(続く)%chui2{ev},,,,,
%txtchui2,JP
さて、他に何か聞きたいことはあるか?{c}ある%yes{ev},,,,,{c}ない%bye{ev},,,,,
%txtbye,JP

%txtkano2,JP
このような選択肢による会話分岐のほかに{n}会話後にキャラを敵対させたり消滅させたりすることが可能だ。{n}他にもエモーションアイコンや効果音を出したり{n}流れている音楽を変えることもできる。{n}ただ、アイテムやキャラクターの生成は{n}ゲームバランスを考えて不可能にしている。{n}何か試してみるか?{c}BGM変更%ongaku{ev}mcLastBoss,,,,,{c}気持ちいいことしない?%kimoti{ev},,,,,{c}(戻る)%kano{ev},,,,,
%txtkimoti,JP
おいおい、照れるじゃないか。{c}いやん♪%bye{ev}iikoto,,,,,
%txt_ucnpc_ev_e
まず、最初に話しかけた場合は%txtevstart,JPが発言されるので「CNPCの〜」が発言される。
次に続く選択肢候補は「聞きたい」「余計なお世話だ」の二つ。「聞きたい」は%yesなので次の発言は「%txtyes,JP」に移る。
以下同様にこれが理解できれば基本は大丈夫です。行動イベントについては後述。

MMA/TTで変数を使用した場合

MMA/TT同梱の「解説ロミアス_MMA」より

%txt_ucnpc_ev_b
%txt[MMA]evstart,JP,mgdata82eqv1
エレアを殺して平気なのか?(ニヤリ){n}{n}このメッセージはショウルームかカスタムマップに保存しなければ見れないはずだ。{cgdata0add1}{mgdata82set0}{c}さようなら%bye{ev},,,,,
%txt[MMA]evstart,JP,cgdata0eqv19
これで20回だ。飽きないか?{cgdata0add1}{c}さようなら%bye{ev},,,,,
%txt[MMA]evstart,JP,cgdata0eqv14,kill3upv10
ところで君は今までに殺したプチの数を覚えているか?{cgdata0add1}{cgdata1rnd1000}{c}{cgdata1}匹%putitrnd{ev},,,,,{c}{kill3}匹%putit{ev},,,,,
%txt[MMA]evstart,JP,cgdata0eqv9
これで10回目だな。{cgdata0add1}{c}さようなら%bye{ev},,,,,
%txt[MMA]evstart,JP,cgdata0eqv4,cdata38euv30
君のレベルは{cdata38}か。なかなか頑張っているようじゃないか。{n}これも私の指導が良かったおかげだな(ニヤリ){cgdata0add1}{c}さようなら%bye{ev},,,,,
%txt[MMA]evstart,JP,cgdata0eqv4
君のレベルは{cdata38}か。まだまだ修行中といったところか。{cgdata0add1}{c}さようなら%bye{ev},,,,,
%txt[MMA]evstart,JP,cgdata0eqv1
私に話しかけたのは2回目だな?{cgdata0add1}{c}さようなら%bye{ev},,,,,
%txt[MMA]evstart,JP
今日は{gdata10}/{gdata11}/{gdata12}、ここはX:{tcdata1} Y:{tcdata2}だな。{n}君のHPは{cdata50}/{cdata51}、速度は{sdata18}。{n}私のHPは{tcdata50}/{tcdata51}、速度は{tsdata18}だ。{n}今までに私に話しかけたのは{cgdata0add1}{cgdata0}回目か。{n}{n}ざっくりなサンプルだが雰囲気を把握してくれ。{c}フラグを初期化する%flagclear{ev},,,,,{c}さようなら%bye{ev},,,,,
%txtevstart,JP
このヴァリアントはMMAの条件付きメッセージ処理に{n}対応していないようだな。{n}{n}そのような環境でも会話がおかしくならないように、{n}MMA用の%txt[MMA]evstartメッセージと{n}他のヴァリアント用の%txtevstartメッセージを{n}別々に設定しておくといいだろう。{c}さようなら%bye{ev},,,,,
%txtputit,JP
他に覚えるべきことがあるだろう。{c}さようなら%bye{ev},,,,,
%txtputitrnd,JP
適当に言ってるな?(ニヤリ){c}さようなら%bye{ev},,,,,
%txtflagclear,JP
これで君とは赤の他人だ。寂しいだろう?{cgdata0set0}{c}さようなら%bye{ev},,,,,
%txt_ucnpc_ev_e
一見複雑だが、一つ一つ見れば単純な作り。
まず%txt[MMA]〜を用いることでMMA用とそれ以外用とで開始位置が分かれている。MMA以外だと「このヴァリアントは〜」だけで終わります。
会話フラグの処理は上から行われるので、最初は「%txt[MMA]evstart,JP,mgdata82eqv1」が発言されるが、条件を満たしていない場合は一つ下に移る。
以下同様の処理が行われ、初会話の場合は全ての条件を満たせないので「%txt[MMA]evstart,JP」が発言される。
変数の意味については変数編を参照してもらうとして省略。
「%txt[MMA]evstart,JP」のテキスト内に「{cgdata0add1}」の記述があるので会話したタイミングでcgdata0の値が+1される。
すると「%txt[MMA]evstart,JP,cgdata0eqv1」の条件が満たされるので、次に話しかけると「私に話しかけたのは2回目だな?」と発言される。ここでも{cgdata0add1}があるのでcgdata0が+1される。
順当に来ると次はcgdata0eqv2だが、該当する条件文がないので再び%txt[MMA]evstart,JPが発言される。
繰り返してcgdata0が4になったとき、「%txt[MMA]evstart,JP,cgdata0eqv4」が発言され、加えてPCのレベルが30以上なら代わりに「%txt[MMA]evstart,JP,cgdata0eqv4,cdata38euv30」が発言される。
更に繰り返してcgdata0が9になると「%txt[MMA]evstart,JP,cgdata0eqv9」が発言される。
更に更に繰り返してcgdata0が14で且つプチを殺した回数が10回を上回る場合「ところで君は今までに殺したプチの数を覚えているか?」と発言される。
「%txt[MMA]evstart,JP,mgdata82eqv1」は条件に「mgdata82eqv1」があるが、例文の中にmgdata82を1にする記述が見当たらないのでまず発言されない。
発言させるにはショウルーム、カスタムマップで何らかの方法でmgdata82を操作する必要がある。これについては後述。
ちなみに、%txtflagclear,JPが発言されると{cgdata0set0}でcgdata0が0に戻るので、次に会話するときは「%txt[MMA]evstart,JP」が発言されます。

変数の操作

ショウルームとカスタムマップにいるときに限り、マップに初期配置されたCNPCは変数を操作できます。
上記の「解説ロミアス_MMA」で「%txt[MMA]evstart,JP,mgdata82eqv1」を発言させるにはmgdata82を1にする必要があり、これをするにはCNPCの会話ダイアログや死亡時のなどのメッセージ内に{mgdata82add1}や{mgdata82set}などを記述します。
基本的に加算(add)か代入(set)を使うのが最も単純なやり方ですが、他の計算方法でも当然OKです。
また、これらの要素はジャーナルの操作やシーン再生を使う際に必須の知識です。本格的なカスタムワールドを作りたいなら是非覚えましょう。

行動イベント

文章中に指定のタグを使用することで様々なアクションを起こせる。複数のイベントを同時に起こす場合は「,」で区切ってください。
タグ 意味
行動
gohos 敵対化。イベント指定後も会話自体は継続する。
turnAlly 味方化。ペット化ではなく、そのCNPCがPCに随行するようになる。一度マップを離れると元の状態に戻る。
iikoto 気持ちいいことを始める。イベントを指定した場合、会話を終了させる。
vanq 消滅する。以降、消滅したCNPCは基本的に表れない。イベントを指定した場合、会話を終了させる。
エモーションアイコン
emofire
emonote ♪(音符)
emolead …(三点リーダー)
emopoison
emobleed 出血
emoblind 盲目
emoconfuse 混乱
emodim 朦朧
emofear 恐怖
emosleep 睡眠
emoparalyze 麻痺
emoeat 食事
emolove ハート
emoanger 怒り
emobag
emoexclamation !(びっくり)
emoquestion ?(はてな)
emoperson
emomemo メモ
emomad 狂気
emostar
音楽関連
BGM 該当するBGMをmc***の形式で指定。
効果音 該当する効果音を***.wavの形式で指定。

複数のキャラで会話させる場合

MMAのスレにあったMMAのお兄ちゃんの解説文から抜粋。
(ロミアス用CNPC)
%txt[MMA]NewGame,JP
{mgdata1set1}{talkdialog}
%txt[MMA]evstart,JP,mgdata1eqv1
…意識が…もう戻ったのか? 驚いたな。君の回復を待つために、我々の急を要する旅がいつまで中断されるのか、気を揉んでいたのだが。(中略){mgdata1set2}{talkcnpc:Larnneire}
%txt[MMA]evstart,JP,mgdata1eqv3
…そうだな。私の悪い癖だ、わかってはいる。…さて、{player}といったな、

(ラーネイレ用CNPC)
%txt[MMA]evstart,JP,mgdata1eqv2
ロミアス、喋りすぎよ。たとえ意識の朦朧とした怪我人が相手だとしても。{mgdata1set3}{talkcnpc:Lomias}
基本的に{talkdialog}と{talkcnpc:*}を使用。
%txt[MMA]NewGame,JPでmgdata1が1になり、{talkdialog}で会話開始。
%txt[MMA]evstart,JP,mgdata1eqv1の条件を満たしているのでロミアスが発言。
{mgdata1set2}でmgdata1を2にした後で{talkcnpc:Larnneire}によりラーネイレに発言権が移る。
%txt[MMA]evstart,JP,mgdata1eqv2の条件を満たされているのでラーネイレが発言。
以下繰り返し。仕組みが分かれば比較的簡単なのでジャンジャン作っちゃってください。
ただし、%NewGame,JPはニューゲーム開始時のみ適用なので、そうでない大多数の場合は%txtMapChanged,JPを使用すること。

{}置換文

ここで説明する置換文はカスタムマップに初期生成されたCNPCでのみ有効です。通常のテキスト差し替えでは機能しません。

原則としてCNPCなどのカスタム系の名前を指定する場合、ファイル名(英語名)で指定してください。

タグ 意味 補足
{unpccounts:*} マップ上にいる*という名前のCNPCの数
{unpccountp:*} マップ上にいる*という名前のCNPCの数をバッファ変数の0に代入する
{uitemcounts:*} PCが所持している*という名前のカスタムアイテムの個数
{cuitemcounts:*} 発言者が所持している*という名前のカスタムアイテムの個数
{tuitemcounts:*} 会話相手が所持している*という名前のカスタムアイテムの個数
{fuitemcounts:*} フロアに存在する*という名前のカスタムアイテムの個数
{uitemcountp:*} PCが所持している*という名前のカスタムアイテムの個数をバッファ変数の0に代入
{cuitemcountp:*} 発言者が所持している*という名前のカスタムアイテムの個数をバッファ変数の0に代入
{tuitemcountp:*} 会話相手が所持している*という名前のカスタムアイテムの個数をバッファ変数の0に代入
{fuitemcountp:*} フロアに存在する*という名前のカスタムアイテムの個数をバッファ変数の0に代入
{createuitem:*} PCの足元に*というカスタムアイテムを出現させる
{removeuitem:*} 発言者が所持する*というカスタムアイテムを消去する(所持アイテムの欄から消す)
{createchar*} 発言者の周辺に識別子*番のキャラを出現させる
{ecreatechar*} 発言者の周辺に識別子*番のキャラを一時敵対状態で出現させる(マップを移動すると通常の敵対関係に戻る)
{createunpc:*} 発言者の周辺に*という名前のCNPCを出現させる
{createtunpc:*} 発言者の周辺に*という名前のCNPCを出現させる(マップを移動すると消滅する)
{ecreateunpc:*} 発言者の周辺に*という名前のCNPCを一時敵対状態で出現させる(マップを移動すると通常の敵対関係に戻る)
{ecreatetunpc:*} 発言者の周辺に*という名前のCNPCを一時敵対状態で出現させる(マップを移動すると消滅する)
{vanqtnpc} {createtunpc:*}{ecreatetunpc:*}で生成したマップ内の一時NPCを全て消去する
{vanquish} 発言者を消滅させる(自然に復活はしない) 死亡する訳ではないので会話は継続可能(ただし、CNPCとしての権限は失う)
{completequest} 「クエストを達成した!」のログを表示 ログが表示されるだけで変数の操作とは無関係
{throwitem} 「何かが足下に転がってきた。」のログを表示 ログが表示されるだけで変数の操作とは無関係
{moretogo} 「[殲滅依頼]残り*体」のログを表示 ログが表示されるだけで変数の操作とは無関係
*はバッファ番号の0番の値(事前に設定する必要があります)
{updatejournal} 「ジャーナルが更新された。」のログを表示 ログが表示されるだけで変数の操作とは無関係
{sceneplay} シーン再生判定 条件が満たされている場合、次のターンでシーンが再生される
条件が満たされていない場合は何も起きない
{setupstairs} マップ内に昇り階段が存在しない場合、PCの足元に出現させる
{setdownstairs} マップ内に降り階段が存在しない場合、PCの足元に出現させる
{tsetupstairs} マップ内に昇り階段が存在しない場合、発言者の足元に出現させる
{tsetdownstairs} マップ内に降り階段が存在しない場合、発言者の足元に出現させる
{lockdownstairs} マップ上にある降り階段を封印状態にする
{unlockdownstairs} マップ上にある封印状態の降り階段の封印を解除する 同マップ内に降り階段が複数ある場合、一つだけ解除される
{umapgdatap:*} 全てのマップ変数の値をバッファ変数に一括コピーする *はマップ名(もしくはワールド名)
{unpcgdatap:*} 全てのCNPC変数の値をバッファ変数に一括コピーする *はCNPC名
{levelmove*} 会話終了後、同マップの*階に移動する *は移動先の階層
{mapmove*} 会話終了後、指定マップの1階(1階が存在しない場合は最上階)に移動する *は移動先のマップ識別子
カスタムマップではなく通常(ノースティリスなど)のマップに移動する場合です
{umapmove:*} 会話終了後、指定カスタムマップの1階(1階が存在しない場合は最上階)に移動する *は移動先のマップ名
{cmapface*} ダイアログメッセージ内のポートレートを一時的に変更する *はuser/cmapフォルダの「(マップ名)_cmapface*.bmp」に対応
{talkdialog} 発言者のトークダイアログを表示 対象が死亡していても%txtDead,JP内にこのタグがあれば会話可能
{talknpc*} 識別子*番のキャラのトークダイアログを表示 対象はマップ上にいるPC、ペット、冒険者、自宅警備員以外の生存中または死亡中のNPC
{talkcnpc:*} *という名前のCNPCのトークダイアログを表示 対象はマップ上にいるPC、ペット、冒険者、自宅警備員以外の生存中または死亡中のNPC