こちらは完全に自分用の整理ノート的ページです。数年越しに這い上がって内部少し整理しました。
元々cmapについて調べるために作成したページではありますが、後半書き足した口調断片はペット・PCにそのまま流用できるものがほとんどです。
変数部分の模倣や修正、改変は大歓迎なので好きにしてください。メッセージ本文の用例は恥ずかしいので外部持ち出しNGでお願いします。
参照、引用元:Elonaテキスト改造まとめ Wiki、本家Wiki、valiant wiki解析情報、およびMMAのtxt、各種まとめtxt、Elona_omake付属txt、他。
黎明の迷宮の作者様による動画【elona】カスタムワールドの作り方【omake_MMA】→https://www.nicovideo.jp/watch/sm25432271
bluntsoundz 様による【Elonaカスタムまとめ】→http://www1.axfc.net/u/3251284?key=elona
MMAのカスタムメッセージ→https://wikiwiki.jp/omakemma/カスタムメッセージ
omake_MMAの拡張書式について→https://wikiwiki.jp/elonatxt/omake_MMAの拡張書式について
拡張書式の比較対照表→https://wikiwiki.jp/elonatxt/拡張書式の比較対照表
タグ・置換→https://wikiwiki.jp/elonatxt/拡張書式のタグ・%7B%7D置換文字列早見表
解析情報→https://www47.atwiki.jp/elona_valiant/pages/15.html
カスタムワールドwiki→https://elonacworld.wiki.fc2.com/
カスタム制作用エクセルツール+α→ヴァリアントwiki(https://wikiwiki.jp/elonaval/)のツール欄より
整理されまとまった情報が欲しい方は上で紹介した【Elonaカスタムまとめ】等を参考にされるのが良いと思います。
(こんな僻地まで訪問してくださるような方はご存じだと思いますが。)
・%txt[MMA]~と記述する場合%txt~より優先的に利用される。上が優先。
omake拡張タグの中には[MMA]をつけると反応しなくなるものもあるようなので注意。
・条件つきの書式は %txt~,JP,xxx*yy# の形式を基本とする。
・,xxx*yy#→xxx*の条件が#とyyな関係であるという条件を示す。
・条件式は{}で覆って台詞中に反映することができるものが多い。
・条件の追加は and (,)で無制限に行える。
覚え方を下に載せてみたのですがあくまでも独自見解なので本当の意味は理解していません。
適切な演算子がどれかは実際にしゃべらせながら確認してください。
**n系で操作可能:gdata,cdata,tcdata,sdata,tsdata,mgdata,wgdata,cgdata,pdata,item,citem,titem,fitem,char,dchar,enemy
**n系以外:mgdata,wgdata,cgdata,pdata
例1、確率条件。pdata0rnd100,pdata0elvXの形でよく使われる。
pdata0に1~57の乱数を発生させ代入し、値が17未満になったとき。
例2、比較。●●が○○を上回ったとき。
解説用:PCの速度が対話相手のLvを上回るとき。
※value-100sbnX=value100adnXです。負の値での計算例を試したためわかりにくくなっていますが素直に足して構いません。
実践用:括弧内は動作確認用なので正常に動いたら消してください。
・詠唱者の魔力値より100以上高いPV値を持つ敵対相手に脆弱の霧を使ったとき。
・PCより速度が50以上高い相手を討伐したときに30%の確率で発言。
メモ:readmeより。
・{mgdata*add#}、{wgdata*add#}、{cgdata*add#}(#は加算する数値)⇒値を表示せずに対象の変数を指定した値だけ加算
・{mgdata*sub#}、{wgdata*sub#}、{cgdata*sub#}(#は減算する数値)⇒値を表示せずに対象の変数を指定した値だけ減算
・{mgdata*set#}、{wgdata*set#}、{cgdata*set#}(#は設定する数値)⇒値を表示せずに対象の変数を指定した値に設定
・{mgdata*rnd#}、{wgdata*rnd#}、{cgdata*rnd#}(#は設定する乱数幅)⇒値を表示せずに対象の変数を1~指定した値の乱数に設定
アイテムの識別子→item_id キャラの識別子→chara_id
リストにないものはマップエディタで確認するか、MMAhであればデバッグ情報の表示設定をONにした状態でタゲからdbidを参照すると特定しやすい。
※続きはまたあとで
・各エリアと各CNPCに対応するイベント制御用のマップ変数、CNPC変数を追加
・各マップと各CNPCごとに100個ずつ使用可能
・野外、依頼マップ、ショウルームのマップ変数は出入りするたびに初期化される
・CNPC変数は同じ種類のCNPCの間で共用(マップ変数は他のCNPCとのバッティングの可能性があるのでなるべくCNPC変数を使うのが望ましい)
・ショウルームでは現在ワールドのマップ変数は操作できない
・マップ変数はショウルームまたはカスタムマップに初期生成されたキャラでなければ操作できない
※{umapgdatap:*}{unpcgdatap:*}
・NPCのメッセージ内{}文字列と条件文にイベントリ内にある特定アイテムの個数を表す変数item、citem、titemが使用できる。
・書式は{item*}{citem*}{titem*}(*はアイテム識別子)でパラメータはpshのみ使用可能。
・NPCのメッセージ内{}文字列と条件文に同マップ内にいるペット以外の特定キャラの数を表す変数charが使用できるように
・書式は{char*}(*はキャラ識別子でパラメータはpshのみ使用可能)
・NPCのメッセージ内にマップ上にいるCNPCの数を扱う{unpccounts:*}{unpccountp:*}(*はCNPC名)が使用できるように
・{unpccounts:*}はCNPC数を表示、{unpccountp:*}はCNPC数を表示しないで0番目のバッファ変数に代入する
・NPCのメッセージ条件文にキャラ情報の文字列データとの比較を行うcdatan*:、ccdatan*:、tcdatan*:が使用できるように
・*には2:種族、3:職業、5:CNPC名が使用できる
※コンソールコマンド→職業一覧:userrace、種族一覧:userclass、カスタムゴッド一覧:usergod
shortnameは%Elona Custom God設定ファイルに記載されているものを参照すればよい。
------
・NPCのメッセージ条件文にキャラ情報の宗派との比較を行うfaith:、cfaith:、tfaith:が使用できるように
・宗派文字列にはカスタムゴッドのshortnameを指定できる
・例: %txt[MMA]evstart,JP,cdatan3:warrior,faith:mani
マニ信者で戦士とは変わり者だな{c}さようなら%bye{ev},,,,,
天候 gdata17
性別 cdata8
装備状態 cdata32
アイテム重量 cdata45
魔術師ギルド所属フラグ gdata263(戦士264 盗賊265)
ここから下はサンプル用にeqvまたはeuvを付与させて表示します。
コピペして書き換えて使ってください。正しいかどうかの保証はできませんので要確認。
階層の数え方が難しかったので時間を空けても忘れないように思考&試行結果を自分用にメモ。
下で調べたのは階段を地上2Fから地下8Fまで行けるように置いた場合の例なのでcmap生成用に用意した物件の階が変われば結果は変わると思います。
※生成元の階層は階と層のどちらの意味でも使われている?階は絶対的、層は相対的
※生成元の階はゲーム内左下に表示されているのでわかりやすい。2階はL.2、地下x階はB.xなので1階をL.1とする
※cmapstartやcmapstartに指定する生成元の階層の値は直接的には見えない。最上層を0層、最下層を10層としていると判断
下の例では()内数値として表現。L.2=0 L.1=1 B.1=2 B.2=3 B.3=4 B.4=5 B.5=6 B.6=7 B.7=8 B.8=9 B.8=10
※cmapdownlockedに限り生成元(自宅)の0層=2Fを第1階層と解釈している?
※cmap生成後の階層は画面左下の表示に従って○層と表現する
例:
start0 end3 random0 → 1層L.2(0) 2層L.1(1) 3層B.1(2) 4層B.2(3)
ランダムフロアのない4層ネフィアテスト結果画像を別窓で表示
start0 end3 random2 → 1層L.2(0) 2層L.1(1) 5層B.1(2) 8
層B.2(3)
start1 end4 random2 → 1層L.1(1) 4層B.1(2) 7層B.2(3) 10層B.3(4)
※cmaplevelに関わらずネフィアの入り口の層(最上層)の表示は1層。昇っても降っても次の層は2層
cmaplevelの関係で入り口階層が最上層でない場合は最上層が1になるような形になる
cmaptype. "2"などのダンジョン以外のフロアでは第○層表記は消える。
※cmaplevel.は今のところ難易度や品質調整用の項目であり厳密に設定する必要はない?
出力されるフォルダ名を見るとわかりやすいがcmaplevel.はエリア設定定義ファイル(マップ名_*.txt)の*の値で引用する階層に関わる。
自宅の1階が含まれているとき1階にあたる階層はcmaplevelで定義されたエリア階層に一致した。
cmapstartlevelが0の場合たとえばcmaplevelが20でランダムならば第1層が19階相当、第2層が20階相当になる。
cmaprandomlevel. "20"←cmaplevel. "120"? cmaprandomlevel. "2"であるとき/"3"であるとき
cmapstartlevel. "0" cmapendlevel. "4"
119 120 123 126 129 /119 120 124 128 132
cmapstartlevel. "1" cmapendlevel. "4"
120 123 126 129 /120 124 128 132
cmapstartlevel. "2" cmapendlevel. "5"
122 125 128 131 /123 127 131 135
cmapstartlevel. "3" cmapendlevel. "5"
124 127 130 /126 130 134
cmapstartlevel. "4" cmapendlevel. "5"
126 129 /129 133
わかりにくいがエリア定義ファイルはあとから作ればいいので単純なマップだけ作りたい場合には法則を覚えなくても問題なさそう。
cmaplevel.が引用前の階層に設定されているときは単純にその階がスタート階層になる?
cmaplevel. "1" start. "1" end. "2"のとき1階入り口、地下1Fまでの2階建て
cmaplevel. "1" start. "0" end. "2"のとき1階入り口、2Fと地下1Fがある3階建て
cmaptype. "22"
cmapentrance. "1"
cmapfixbuild. "1"
cmaplevel. "1"
cmapstartlevel. "0"
cmapendlevel. "3"
cmaprandomlevel. "2"
自宅1階(2層)が入り口の階層。配置済みの登り階段で2階(1層)に移動可。
また、配置済みの下り階段でランダムダンジョン化された3層に移動可。
2層の外周から外に出ようとすると第1層に移動。
1層の外周からは外に出られず、1層に設置済みの登り階段をを登ろうとすると1層ループ。
脱出手段を確保のためにはフロア定義必須となるためcmaplevel1-9設定時は要注意。
以外は適当。%txt[MMA]evstart,JPのように専用書式にしたほうがいいけれど配布しないので省略。
(ショウルームまたはカスタムマップに初期生成されたキャラのみ。)
あちらもこちらも備忘録。条件書式テスト。実際に使っているものはもっとうるさいです。
・リアルベイベーの日 パーティー会場 ストラディバリウス持たせたヴァイオリニストのペット用(職業指定はしていません。)
・ctalk326_0.txtおよびctalk326_1.txtに適用して使うと吟遊詩人がストラディバリウス演奏したときに発話。
-----------
tsdata183euv41も付けると演奏スキル41以上という条件追加。ペットに吟遊詩人いる場合は頻度や場所絞ってみてください。
ベイベー会場だと流れすぎて読めないだろうけど{snpc}込みの状況描写添えた場合は持ち主特定しやすくなる。
「バリウス》の演奏を始めた」でEEx抽出してそっちに効果音付けるのはPCやペットが演奏したときにも表示されるのがちょっと、という場合には便利かも。
メロディー奏でたほうが雰囲気はでるけれど不協和音にしたくないなら短めの効果音を用意したほうがいいです。
オノマトペが思いつくなら楽器種ごとに全部変えてみても面白い。
-----------
・ピアニストのペットが歌唱しているとき。中断時や開始時のメッセージはこれでは変わらない。
※やりすぎるとチートになってしまうけれど汎用性があるものもたまには
・最後のはPC腹ペコ状態でマップ移動したときに警告を出す便利系。妹の館だと幻聴らしくなくなるので除外してます。
cdata(022,ユニットNo.) 満腹度
12000以上:食べ過ぎ。
10000~11999:満腹。
2000~4999:空腹。
1000~1999:飢餓。
1000未満:餓死中。
PC以外:拒食症でなければ6000未満になったとき6000に上書き。ペットは6000のときに食事。
gdata(083):雷雨と雪による足止め無効フラグ
自宅警備員させている老人女性の帰宅時メッセージ。PCの空腹度や料理スキルレベルで分岐。
Welcomeで使う場合{npc}も{snpc}も同じ対象を示すのでt~で今回は統一。
ctalk36_1.txtにして一括で老人女性に設定するために作ったから、tcdata27eqv36,tcdata8eqv1の条件式は省略。
変数使いこなせる人なら、相対的に遺伝子学が得意なキャラ用に怪しげなメッセージを設定したりすれば楽しそう。
帰宅時に発話されても、もたもたしていれば売られたり食べられて貰えないこともある。
tinv26は参照先が多いから、この条件で確実に話すわけではない。
MMAのreadmeに載っている例文↓
・PCの現在HPが最大HPの1/4を下回る場合だけ表示するメッセージ
inv系で覚えておきたい条件式:cinv23eqv*
使用中アイテムの付帯情報23が*に等しい時。tinvなら対象アイテムの~。ぶれずに使えるタグは限られる。
※残骸やモンスターボールの場合付帯情報23はキャラ識別子。
------------
妹(キャラ識別子176)のお肉(アイテム識別子204)がマップ内に落ちている条件下で妹ボイスを鳴らしたかった。
台詞はペットのものだけど声は肉から出てるイメージ。音声はあみたろの声素材工房からお借りする必要がある。
MMAhならペットの空腹知らせる設定にして%txtGrowlingStomachで鳴らしてもよいかも。
他のNPCの肉+妹の残骸やモンボが落ちている状況下でも発話されるので没に。
------------
PCがインベントリ内のゾンビ肉を調理したときペットが空腹である場合に発話。特定の食べ物が好物なペットRPに応用しやすそう。
使用中条件なので状況がブレにくいはず。
------------
%txtmilk,JPにも流用可。解説は自粛、していたけれど一部↓に。例も追加。
---------------
対象アイテムのキャラ識別子をcinv23で参照可能な飲食物:干し肉、肉料理、卵料理、酒、ソーダ、ジュース、乳。
非肉系飲料のcinv23はアイテム識別子+1000になる。
追加NPCやCNPCのジュース等ではcinv23が固定されるので個別判断には使えない。
ccdata7elv824で通常モンスターのみ対象に。条件式を長くしたくないので着替えてしまったペットに使うときは手動で対応。
飲み食いするときはt*系も使えるが、MMAwikiにも載っているように調理時などはt*系が調理する道具、c*系が調理されるアイテムになるので注意。
・腐った未調理の生麺を食べたとき
・呪われているか堕落しているカレーを食べたとき
・レモンを生で食べたとき。ハチミツCITEMとそれを落とすミツバチCNPCと、レモンのはちみつ漬け交換型CNPCを作りたくなる。
・レモン以外の果物を生で食べたとき
未鑑定の腐っている魚を渡そうとしたとき。
・腐っていない未鑑定の魚を渡そうとしたとき。魚嫌いなのに鮮度を見抜く謎設定なのは消費期限計算テスト用に作ったせいです。調理前と調理後。
・鑑定済みの腐っている魚を渡そうとしたとき
・骨だけ残ったスズキを食べたとき
・骨だけ残った魚(種類は問わないが釣れる魚限定)を食べたとき
・未鑑定のフォーチュンクッキーを渡そうとしたとき
・べっちょりしたリンゴを食べたとき。自分で調理しないペット用を想定
・火蟹のピリ辛炒めを食べたとき
・品質特別ではないNPCが半熟妹を食べたとき。名前が一番怖いのでとりあえずこのランクを例に
↑は妹に元々なっていないペット用を想定。変異防止分岐は使えそうな変数が見当たらなかったので断念。
おとわびさんのお正月BGMをMMAhの初日の出イベと同時に流したいがために試したペット用の口調断片。長い。
PCに使ったり足踏みしてるときはうまくいかなくて、釣りしたり休憩したときは反応よかったです。
※時刻をイベ判定タイミングに合わせて調整。CalmだけではなくHourと併用するとより確実です。
BGMは好きなものを用意し、~~~の部分は文学的表現や好きな台詞に置き換えてください。無言でも動きます。
gdata20eqv25⇒ラーナにて gdata17eqv0⇒晴れの日に
gdata11eqv1,gdata12eqv1,gdata13euv6,gdata13elv7⇒ゲーム内での元旦の6時~7時
※初日の出を拝みたい場合は6時前に到着しておきましょう。
cdata251eqv0,cdata253eqv0⇒盲目でも睡眠でもない状態で
pdata11eqv0⇒バッファ変数11番の値が0であるとき(つまり一度も発言されていないとき)
メッセージ表示後{pdata11set1}でバッファ変数11番に1を代入
pdata11eqv1⇒バッファ変数11番の値が1であるとき(つまりBGM変更後)
※リアル元旦なら⇒time1eqv1,time3eqv1
条件式分けてそれぞれ作ればいい?マップ入り直しでリセットされるからリアルのほうは幸運の日フラグ条件足したほうが良さそう。
------------
大晦日だけ山道のBGM変更したいとき用の条件式2パターン。テストしてません。
寝て起きたとき用のも入れておかないとBGMリセット。PCに使っても大丈夫。
------------
聖夜祭中のノイエル用BGM指定。madata29が聖夜祭フラグ。
細かい分岐させてないので火祭りしても穏やかなBGMのまま。
DOVA-SYNDROMEで配布されているMATSUさんの作品(https://dova-s.jp/bgm/play8317.html)を
導入した環境に合わせた記述だけどお好みのクリスマスソングで。
------------
PCが屋外で窃盗しているとき用のペットの台詞に。
何かしらの計算式で調整しなければ、盗んでるものが重ければ連呼されやすく軽いほど不発が増える。
マユマカ信仰かつ探知が高い時、NPCとの距離条件によって警告、みたいな使い方してみても楽しそう。
街ごとに依頼用一時マップのBGMを変更するための台詞差し替え。
musiclistは代替わりするたびに全書き換えしてるくらいbgm差し替慣れしてる方には使い道があるかもしれない。
(というかまずは本家のデフォルトmidiやmp3セットをしっかり堪能してほしいので初心者の人にはおすめできない。旧パルミア・・・)
睡眠不可なので起床時リセットの心配はない。リロードしたら元の音楽に戻るのは諦める。
------------
ノイエルで演奏依頼を受けてパーティー会場に移動したときFlying_to_the_sky.mp3を再生
こんな感じで自分は使っていますよ、というメモをひっそり。一部は配布用に再編済。即時依頼以外もてんこもり。→ctalkmusic_v5.txt
使用中のctalkに必要な部分だけ切り張りしてbgm素材も素材屋さんからDLして正しく入れれば使えます。
EExと併用するとフェイドインもできてさらに可能性大、ですがmmplayにするとMMAのmp3音量調整は効かないので葛藤も。
MMA_furnitureJP0. ",壊れかけた,ありふれた,素朴な,洗練された,味わい深い,使い勝手の良い,独特の個性を放つ,格調高い,特注品の,神秘的な,至高の"
※MMAのomake_config.txtに追記すると家具装飾語が差し替わります。定期的に書き換えて遊ぶと新鮮。
神々しい家具収集部屋などのショウルームに入るときは差し戻しておいたほうがわかりやすい場合もあるので注意。
※自分ではなく味方にバフをかける神官などに対して、一人ひとり別の台詞を用意したいならtalkconvert.txt(←omakeからの機能)で書き換える手がある。
簡単で応用も効くのでRP好きでまだ試してない方にはおすすめです。
・詠唱時に発話される%txt[MMA]cast442,JP等の台詞内に{nnpc}や{npc}を入れておき、名前で区別できるようにしておく。
・名前ごとセリフの書き換えたい部分を抜き出し、(汎用セリフ内容)-> (相手に応じた台詞)の形でtalkconvert.txtを作成しuser\talk内に保存。
・オプションの拡張設定2は台詞の変換をするに指定。
・EExと合わせて、PCにバフをかけるときだけ特別な効果音指定、といった遊びも可能。(←この遊び自体はtalkconvertしなくても可能。)
・護衛対象や少女団などペット以外にかける場合もわざわざ名前呼びかけるのはご愛敬。