マッピング:オブジェクティブ

nmoマップは、マップ名(ファイル名)が「nmo_」で始まっていなければならない。

特に分かりにくいであろう部分だけを独自に解説しました。
公式wikiのページ を読んで、補足としてこのページを眺めるようにしてください。
最初にこのページを読むと逆に混乱してしまうかもしれません。

visgroupはどういう構造にするの?

  • Objectives
    • (オブジェクティブ名A)
    • (オブジェクティブ名B)
    • (オブジェクティブ名C)
    • anti
      • (オブジェクティブ名A)
      • (オブジェクティブ名B)
      • (オブジェクティブ名C)

antiってなあに?

「anti」visgroup内の物は、そのオブジェクティブが選ばれなかった回に出現する。

例えば、ゲーム開始後「A or B」に分岐し、それらをクリアした後「C」をクリアすると、脱出可能になるマップを作るとしよう。

シンプルな例としてオブジェクティブは以下のようなものとする。
  • A「バッテリーを探して、発電機に繋げ」
  • B「外れている電源コードを、繋げ」
  • C「シャッターのボタンを押せ」
今回A,Bどちらが選ばれたとしても、Cは確実に通るので、Cのantiは必要無い。
この場合、antiには以下のようなものが考えられる。
  • Aのanti「バッテリーは既に発電機に繋がっている」
  • Bのanti「電源コードは既に繋がっている」

つまりこのantiとは、3つ以上の選択肢に分岐する場合の作り辛さを軽減してくれるシステムと言える。何故なら、分岐が2種類しか無い場合は、選ばれなかったほうのオブジェクティブに入れてしまえばいいからである。

antiは分かった。普通のオブジェクティブのvisgroupには何を入れればいいの?

そのオブジェクティブが選ばれた時に出てくる物 + ポイントエンティティnmrih_objective_boundary。つまりこのnmrih_objective_boundaryは、必然的にマップ上にオブジェクティブの数だけ存在することになる。このエンティティに、「ObjectiveComplete」「ObjectiveFailed」「ObjectiveCompleteTriggerExtraction」のinputがなされることで、ゲームのフェーズが1つ進行するという訳である。
  • 「ObjectiveComplete」は、オブジェクティブが完了し、
    次のフェーズ(次のオブジェクティブ or 脱出地点に行け)に進む。
  • 「ObjectiveFailed」は、その名の通りオブジェクティブが失敗したことを知らせるinputだが、
    このinputがされたときにどのような挙動をするのか私は知りません。自分で試してみてください。
  • 「ObjectiveCompleteTriggerExtraction」は、このinputがあった時点で脱出(=脱出地点に向かわなくてよい)となる。

オブジェクティブ(及びanti)のvisgroupに入れちゃいけないものってある?

func_brush化していないブラシや、prop_staticは多分うまいこと出せないので入れないほうがいいでしょう。とりあえずprop_physics、prop_dynamicあたりは出てくると思う。とりあえず、入れる必要が無いものは極力入れないようにしよう。

例えば「フィルターを通して指定したprop_physics(バッテリー)が範囲内に入った時に出力をするtrigger_once」なら、そのバッテリーをvisgroupに入れれば、そのオブジェクティブが選ばれなかった場合にトリガーが出力をすることはあり得ないので、入れなくていいでしょう。

nmrih_objective_boundaryってなあに?

このエンティティの最大の役割は上に書いたように、オブジェクティブの進行を管理することであるが、それ以外にも働きがある。とその前に、このエンティティのnameは何でも良い。オブジェクティブの名前はvisgroup名(これも、下記のNMRObjective.exeの設定時に使うだけ)、実際ゲーム画面に表示される指示はNMRObjective.exeで設定するDescriptionなので、このエンティティの名前は本当に何でも良い

まず、このエンティティを配置した位置が、コンパスキーに表示される白点の方角となる。つまり、しっかり置く場所も考えろということ。

次に、このエンティティで、縁取りされるオブジェクト(例えば、broadwayの上映室の鍵)と、その色を指定できる。どういう風に設定するかは、SmartEditオンでこのエンティティを作れば言われなくても分かるはず。縁取りされるオブジェクトは10個まで設定できる。そして、この時設定した縁取りされるオブジェクトが、そのままコンパスにその色で方角を表示される。つまり、白には設定するなということ。ちなみに、オブジェクトと言ったけどprop_physics以外を縁取りさせられるかどうかは知りません。(少なくとも、prop_staticはnameが存在しないので指定すること自体がまず不可能)

それで、脱出地点はどうやって設定すれば?

まず最初に。脱出関係の物はvisgroupにまとめる必要は無いし、もちろんnmrih_objective_boundaryも要らない。NMRObjective.exeでExtractionをオブジェクティブ達の最後に繋ぐことによって、自動的に直前のオブジェクティブが完了した時にのみ有効化される。 

では実際に脱出地点に必要な3つの要素をそれぞれ解説する。なおこれら3つは全て必須なので注意されたし。
  • まずブラシエンティティfunc_nmrih_extractionzone。その通り、この範囲内にプレイヤーが入ると脱出となります。
  • 次にポイントエンティティnmrih_extract_preview。脱出が可能になった時に数秒間全員の画面(視界)をジャックするプレビューカメラみたいなもの。
    各keyvaluesやflagsは自分で考えてください。
  • 最後にポイントエンティティnmrih_extract_point。これのkeyvaluesで上記2つを指定します。
    それと脱出が可能になってから時間切れ(闇消え)になるまでの秒数も指定します。
なお脱出地点はコンパスには表示されないのでそこらへんは気にしないでいいです。

NMRObjective.exeとは何ぞや?

nmrih/utilに入ってるよ。これで作ったマップのvmfファイルを読み込むと、先ほど「Objectives」visgroupに入れたオブジェクティブ達が表示されるので、頑張っていろいろ繋ぎ合わせる。最終的にどんなルートを通ってもExtractionに繋がるようにする。Descriptionは、実際にゲーム内で表示される指示。なおゲーム側に影響するのは「何と何が、どちら向きに繋がっているか」だけなので、NMRObjective.exeウィンドウ内の各オブジェクティブの配置は自分が見やすいようにすればそれで良い。で、上手に繋ぎ合わせたらセーブすればOK。
最終更新:2015年03月23日 10:06