junk_cmap

MMAカスタムマップの覚書 ※スポイラー注意※

cmapを触ってみたくなったので初歩的なことから試しながら情報を整理してみることに。
参照、引用させていただいたもの:Elona omake_MMAのreadme_MMA.txt、様々なまとめtxt、関連スレのログなど
こちらで噛み砕いて表現を変えている部分とそのまま引用させてもらっている部分がこのページの記述内には混在しています。
誤植、誤情報注意。致命的な問題点以外は見逃してもらえると助かります。
※ここを公開したのはMMAがまだ開発されていた2012~2013年頃だと思います。

カスタムマップの配置手順

1.作りたいマップを思い浮かべながらcmap.txtに出力設定を記述。必要があればマップ名_*.txtも用意。Elona\user内に保存。
2.カスタムマップにしたいマップを用意する。通常は自宅かダンジョンを利用。シェルター以外の全てのユーザー物件が利用可。
 複数階cmapにする場合は階段を置いてその階層にあらかじめ入っておく。
3.登録したいマップ上でF8。現在地をカスタムマップファイルとして保存する。
4.ノースティリス以外のワールドマップ(サウスティリスなど)に移動し再度F8。カスタムマップを配置する。(最大50、重複配置不可)

2012/09/09版に配置できるカスタムマップは50個までで同じマップは複数配置できない、と記述があるが
2012/09/11T(人柱)版でカスタムマップ、カスタムワールド、カスタムワールド関所の合計設置可能数は189に引き上げられた。

「cmap.txt」出力設定







 2:主要以外の町(時々落し物が落ちる) 3:主要の町(時々落し物が落ちる、掲示板が設置できる)
 5:プレイヤー物件 6:固定マップ(どの階層でも外周から出られる)
 20:ネフィア(洞窟) 21:ネフィア(塔) 22:ネフィア(森) 23:ネフィア(砦)
 (※20~23は未到達セルが非表示になる)


 1:上り階段(降りていくタイプのダンジョン) 2:下り階段(登っていくタイプのダンジョン)
 3:ワールドマップからの進入方向 4:マップの中央 5:ランダム 8:マップの下側


 1:屋内 2:屋外

 1:平地、2:草原、3:森、4:荒野、5:雪原、6:砂漠、7:水上


 132:町 133:ネフィア(洞窟) 135:ネフィア(森) 136:都市 137:ネフィア(塔) 138:初期洞窟 139:レシマス 140:ネフィア(砦)
 141:墓所 142:村 144:小城 145:塔 146:洞窟 147:休戦地 148:サイバードーム 149:混沌の城 150:店
 151:博物館 152:畑 153:倉庫 154:牧場 155:大使館 156:ノイエル 157:ミラルガロク 158:関所 159:煙とパイプ亭
 160:ピラミッド 161:牢獄 (162:妹の館)
 cmapchip一覧画像を別窓で表示。

☆:graphicフォルダのmap*.bmpの番号?
 ・定義できるのは2以下の値。ランダムフロア以外ではあまり意味が無い。

☆:床や壁などのパターン設定
 0:洞窟 1:ワールドマップ 2:屋内 3:自宅 4:野外 6:雪原 7:灼熱の塔 8:サイバードーム(扉SF) 9:ラーナ(扉JP)
 10:浸水フロア 11:パーティー場 12:牢獄(扉JAIL) 100:塔 101:レシマス深層 200:砦 300:森
 ※ランダムフロアはcmaptypeに応じた再抽選があるため設定したセットにならない場合がある

☆:入出時にマップ再生成設定
 0:する(小犬の洞窟タイプ) 1:しない(通常ネフィアタイプ)

:入出時のNPC位置初期化設定
 0:しない(前回の位置を保持) 1:する(毎回初期位置に戻る)
 ※cmaptypeが2、3、5、6の時は1固定

:生成元マップからのNPCの信仰引継
 0:しない 1:する

:生成元マップからのアイテムの色情報引継
 0:しない 1:する

☆:時間の流れ指定
 ・この値が小さいほどマップ上の時間経過が遅く、大きいほど速くなる

:スタート地点の階層。危険度等に影響
 ・この値を2以上に設定すると(スタート地点以外の層から?)ワールドマップに移動できなくなる
 ・例外はcmaptype6の固定マップか外への階段を置いた20~23(ネフィア)
 ・ネフィア最下層の外周から脱出できるようにするにはcmaptypeを6に設定したマップ名_*.txtを用意するとよい

:デフォルト値は0(自宅の2F?)
 ・ここで指定した生成元の階層をカスタムマップの最上階に設定する

:デフォルト値は10(自宅の地下9F?)
 ・ここで指定した生成元の階層をカスタムマップの最下層に設定する

:0~999
 ・1階以下の各階の間に配置したいランダム階層(敵の出現する通常ネフィアのような階層)の数を指定する


 ・1以上を指定すると指定階以下の降り階段が封印状態になる
 ・cmapdownlockedで参照する階層は生成元の自宅またはダンジョンの階層に対応する
 ・MMA/TT以外のヴァリアントでプレイすると3、17、25、44階の封印が魔石で開いてしまうのは仕様
 ※降り階段の封印を解くためには初期配置CNPCのカスタムメッセージで{unlockdownstairs}を使用する。

:帰還先として扱えるようにするか否か
 0:しない 1:する

以下に続く3項目はcmaptypeが3(主要の町)であれば有効化される。
:掲示板(クエスト依頼用)を座標に設置
:街掲示板(タウンボード)を座標に設置
:異名投票箱を座標に設置
 ・x,yはマップ座標。それぞれ10件まで定義できる

以下に続く4項目はカスタムマップ内のイベントに連動して表示される。(カスタムクエスト扱い)
:ジャーナルのタイトル日本語
:ジャーナルのタイトル英語
:ジャーナル概要日本語
:ジャーナル概要英語
・*は1~10の番号でそれぞれマップ変数(mgdata)の90~99番に対応する
・cmapjournalcaption*はマップ変数ごとに日本語と英語それぞれ9個ずつ定義でき段階ごとに表示する概要を切り替えられる
・cmapjournalcaption*の設定値が「*,xxx」の形式である場合はマップ変数が*以上でxxxを表示するという意味になる
・マップ変数は0でジャーナル未表示、1000以上でクエスト達成(概要は表示されずに達成リストに表示)、マイナスはクエスト失敗の表示になる

※以下ジャーナル表示の設定例(readmeより引用)

 cmapjournaltitle2,JP. "テストクエスト1 Lv10相当"
 cmapjournalcaption2,JP. "2,○○から依頼を受けた。"
 cmapjournalcaption2,JP. "○○が困ってるという噂を聞いた。"

・mgdata91の値が0の時はジャーナルのサブクエスト欄に何も表示されない
・mgdata91の値が1の場合は「○○が困って~」、2~9では「○○から依頼~」、10以上で「条件を~」が
 Quest[サブクエスト]欄の進行中クエスト概要として表示される
・mgdata91の値が1000以上になると概要は非表示になり、Completed Questsに「[達成]テストクエスト1 Lv10相当」が追加される

:同梱CNPCを指定。30個まで
:同梱カスタムアイテムを指定。30個まで
:同梱カスタムゴッドを指定。10件まで
 ・設定されたファイルは、マップ内に存在しない場合でもcmap作成時に同梱される


 ・マップ内のトレイナーNPCが教えるスキルの識別子をカンマ区切りで指定
 ・中身入りモンスターボールを投げるなどして中立NPC生成→干渉して@トレイナー(trainer)と名づける→cmap作成、でトレイナー配置可能
 ・銃器は設定しなくても出現するのを確認したのでおそらく探知も同じだと思います


 ・マップ内の交易店NPC(@交易店(trader))が扱う交易品の相場をカンマ区切りで指定
 ・"海産物,玩具,酒類,墓,楽器,船具,北国物,芸術品"の順に0~500の間の百分率で
 ・この項目を省略した場合はすべての相場を100と指定したもの("100,100,100,100,100,100,100,100")として扱われる
 ・試してみたところ相場によって出現率も制御されているようです(安いほど出回りやすい)

:勝利画面の英語モード用メッセージを設定
:勝利画面の日本語モード用メッセージを設定
※(メインクエストクリア時の)勝利画面用メッセージを表示させるためには初期配置CNPCのカスタムメッセージで{conquered}を使用する。

☆:ギルド(mage、fighter、thief、none)を指定。
 ・mage、fighter、thiefのいずれかを指定した場合は指定したギルドに所属していない場合に警報がなる
 ・noneを指定した場合はどのギルドに所属していても警報がならない(従来通り)

☆:納入箱の用途タイプ
 ・現在設定可能なのはmageguild(魔術師ギルドタイプ)のみ

マップ内に制限をかけるタイプの設定項目
☆:1:帰還禁止
☆:1:魔法使用禁止
☆:1:物理攻撃無効
☆:1:窃盗禁止
☆:1:テレポート禁止
☆:1:火柱延焼禁止
☆:1:壁の硬度がとても堅い(壁への扉生成も禁止)
☆:1:定期炎ダメージあり
☆:1:定期更新なし(仕様は町の地下施設に類似)
 0:従来通り(制限なし) 1.制限有り 2:従来通りで上位設定を上書き

☆:未探索セルの隠蔽状態
0:マップタイプに依存(従来通り)、1:隠蔽固定(ネフィア等と同じ)、2:非隠蔽固定(街と同じ)

「マップ名_*.txt」

 ・user\cmapフォルダ配下に置いたcmap.txtと同じ書式の「マップ名_*.txt」(*は階層番号+100)ファイルでそのフロアの設定が上書きできる
 ・下記の項目が使用可能(cmap.txt設定一覧では目印に☆をつけてみました)

cmaptitle、cmaptitle2、cmaptype、cmapweather、cmaptileset、cmapchipset、cmapfixbuild、cmapturncost、cmaptrainer、cmaptrader、cmapguild、cmapchest、cmapfog、cmapantireturn、cmapantimagic、cmapantistrength、cmapantisteal、cmapantiteleport、cmapantifire、cmaphardwall、cmapfire、cmapnorenew

梱包

ここから下の項目はまだほとんどreadme等から抜粋しただけの未整理状態です。

音声

・カスタムマップファイル生成時にuser\cmapフォルダ配下にある音声素材ファイルを梱包できる
・BGM用として「マップ名_cmapmc*.mid」「マップ名_cmapmc*.mp3」(*は連番で1~30まで)を追加可能
・SE用として「マップ名_cmapse*.wav」(*は連番で1~30まで)を追加可能
・{mc}、{se}タグでロードする際はマップ名を含めず"cmapmc1.mid"の書式で使用する

・user\cmapフォルダ配下に特定の音楽ファイルがある場合にBGMとして優先使用される
・「マップ名_bgm.mid」「マップ名_bgm.mp3」:どの階層でも適用
・「マップ名_bgm*.mid」「マップ名_bgm*.mp3」(*は階層番号+100)は特定の階層で↑より優先して再生される
・階層番号はカスタムマップ配置後の階層に対応する(生成元の自宅やダンジョンではなく)
・カスタムマップファイル生成時に↑のbgmファイルがあれば自動的に梱包される

イベント関連

・カスタムマップ、カスタムワールドのファイル生成時にuser\cmapフォルダ配下にある素材ファイルを梱包できる
・背景用として640x480のbmpファイル「マップ名_cmapbg*.bmp」(*は連番で1~30まで)を追加可能
・顔画像用として80x112のbmpファイル「マップ名_cmapface*.bmp」(*は連番で1~30まで)を追加可能・カスタムマップのダイアログ系メッセージで{cmapface*}(*は画像ファイル番号)を使用すると表示中のポートレイトを変更できる
・日本語のイベントシーンファイルとして「マップ名.sc1」を追加可能
・英語のイベントシーンファイルとして「マップ名.sc2」を追加可能

マップチップ

・カスタムマップではuser\cmapフォルダ配下に特定のマップチップファイルがある場合に優先使用される
・「マップ名_map*.bmp」(通常カスタムマップは1、カスタムワールドは0)はどの階層でも適用される
・形式はgraphic\map*.bmpと同じで進入不可セルなどの内部設定は変わらない
・カスタムマップのファイル生成時に↑のbmpファイルがあれば自動的に梱包される
・カスタムマップの独自マップチップファイルが存在しない場合に所属するカスタムワールドの同番号の独自マップチップファイルも参照する

テキスト

・カスタムワールドのファイル生成時にuser\cmapフォルダ配下にある依頼の掲示板メッセージファイルを梱包できる
・掲示板差し替え用として「マップ名_board.txt」を追加可能・メッセージ内で使用可能な{}の数は1行20個まで
・MMA独自の{}や条件文は使えない
・カスタムマップ、カスタムワールドのファイル生成時にuser\cmapフォルダ配下にあるNPCの汎用メッセージファイルを梱包できる
・ファイル形式はtalk.txtと同じ形式のもの(%AREA,~は実質機能しないので%DEFAULT,JPを使う)
・NPCの汎用メッセージ差し替え用として「マップ名_talk.txt」を追加可能

その他

役職機能

・名前に「@役職名」をつけた非ユニークの中立NPCはその役職のNPCとして配置される
・ワイバ@トレイナー(trainer)、のように名前を変えてもcmap化後にはトレイナーのワイバーン、のように後付けの名前は無視される模様。
 つまり@役職名、という名前に変えるだけで~店の~、の後半部分は自動補完されるので文字数制限については気にしなくてもよさそうでした

・カスタムマップ作成時にマップ上に配置された非ユニークの中立NPCの名前に一部の「@ユニーク名」が含まれていた場合は
 そのユニークNPCとして扱う。

ファイル関連

・カスタムマップ配置時に削除されるもの→既にcmapフォルダに生成されている.txt、.tx、.txs、.bm、.bms、.idx、.map、.obj、.ob2、.obcファイル
・.cmp、.cwd、.npc、.item、.sc1、.sc2、.bmp、.wav、.mp3、.mid、オリジナルの.txtファイルは自動削除しない

・カスタムマップ、カスタムワールドの作成時にtxt、sc1、sc2、bmpファイルを圧縮して別形式でパッキングする
・txt、sc1、sc2ファイルはtxとtxs、bmpファイルはbmとbmsの2つのファイルに変換される
・元ファイルと変換先ファイルが両方user\cmapフォルダに存在する場合は変換先ファイルを優先して使用する

シーン再生関連

・カスタムマップのマップ移動時にマップ変数に対応するイベントシーンの再生ができる
・シーンファイルの形式はelona本編のメインシナリオで使用されているものと同じ
・シーン再生判定に使用するマップ変数は90~99番。シーン番号は[マップ変数の値+(マップ変数番号-90)*10000]に対応する

・CNPCのダイアログメッセージの表示終了に%byeの代わりに%sceneplayを使用した場合、会話終了後にシーン再生判定を行う
・CNPCのメッセージ内に{}文字列パラメータsceneplayを使用すると、次のPC行動ターンにシーン再生判定を行う

・カスタムマップの新規階層に到達した時に階層+100000番のシーンがあれば再生する
・カスタムマップの新規階層に到達した時に階層をマップ変数の89番に代入する

マップ変数てなに?となると拡張書式も理解しないと進まなさそうなので寄り道しながら少しずつ解読中→cmapnote

その他

・カスタムマップに初期配置または再生成される祭壇、儀式用の祭壇は生成元マップの宗派を引き継ぐ

CNPCの行動命令

ショウルームまたはカスタムマップに初期生成されたCNPCにのみ使うことのできるメッセージ

・{conquered}メインクエストを制覇した時の勝利画面を表示

マップ上に該当する階段が存在しない場合...
・{setupstairs}PCの足元に昇り階段設置
・{setdownstairs}PCの足元に降り階段設置
・{tsetupstairs}対象NPCのいる座標に昇り階段設置
・{tsetdownstairs}対象NPCのいる座標に降り階段設置

マップ上に対象となる降り階段が1つ存在する場合...
・{lockdownstairs}降り階段を封印
・{unlockdownstairs}降り階段を封印解除

・{vanquish}NPCを消滅させる(時間経過で復活させたくないNPCに使う場合は%txt[MMA]Deadの中で使う)
・{createunpc:*}(*はCNPC名)使用したNPCの周囲に指定した種類のCNPCを生成する
・{createchar*}(*はキャラ識別子)使用したNPCの周囲に指定した種類のキャラを生成する。特別品質のキャラは生成できない
  ・この2項目で呼び出されたNPCは初期生成CNPCと同様の権限を持つ
・{createuitem:*}(*はカスタムアイテム名)PCの足元に指定した種類のカスタムアイテムを生成する

・{levelmove*}{mapmove*}{umapmove:*}
 使用方法と制限については%levelmove*、%mapmove*、%umapmove:*と同じなのでそちらを参照してください。

※cmap内限定なのかどうか、使用可能な対象未検証。
・{removeuitem:*}(*はカスタムアイテム名)発言キャラが所持するカスタムアイテムを消去する
・{sceneplay}次のPC行動ターンにシーン再生判定を行う
・{vanqtnpc} {createtunpc:*}{ecreatetunpc:*}で生成したマップ内の一時NPCを全て消去する。

カスタムマップに初期生成されたCNPCにのみ使うことのできるメッセージ

・{joinguild:*}(*はmage、fighter、thiefのいずれか)PCの所属ギルドを指定したものに変更する
・{resignguild}PCの所属ギルドを無所属にする
・{joinparty}発話キャラをPCのペットにする

スタートアップワールドに配置されたカスタムマップに初期生成されたNPC限定で使えるメッセージ

・{reunionpet}ペットとの再会イベントを発生させる
・{reunionsister}妹との再会イベントを発生させる

ショウルームまたはカスタムマップに初期生成されたCNPCで%byeの代わりに使える書式

・%levelmove*(*は存在する階層番号)→会話終了後に指定階層に移動
・%mapmove*(*はマップ番号)→会話終了後に指定マップ(一時マップ以外)の1階(なければ最上層)に移動
・%umapmove:*(*はカスタムマップ名(cmapname.))→会話終了後に指定マップの1階(なければ最上層)に移動
・%sceneplay→会話終了後にシーン再生判定実行

ショウルーム作成モード関連

・コンソールコマンド「arealist」でマップ情報を参照する ・コンソールに showroom_edit_on と入力することでショウルーム作成モードを開始する(omake_babyからの取り込み)

ショウルーム作成モードでは...
・コンソールコマンド「makechest」で主の納入箱を足元に生成する
・キャラ生成を願った場合のNPC生成位置もターゲットポイントになる
・召喚系魔法、スキルが座標指定で使用できる
・テストワールドのワールドマップ上でハウスボードが使用できる

wizardモードとショウルーム作成モードでは...
・願いのキーワード「変異種生成」で変異種のNPCを生成できる
・願いのキーワード「シェイド生成」でシェイド化したNPCを生成できる
・願いのキーワード「カスタムマップ用生成」でショウルーム、カスタムマップに初期生成された場合と同じ権限を持つNPCを生成できる