ミッションエディット

提供: Canned Catfood Gaming Community Wiki
Jump to navigation Jump to search

このチラ裏では、Arma3にてエディターとしても活躍したいエディター初心者向けの指南を綴っていきます。

玄人エディター向けのコマンドリファレンスはミッションエディット#Scripting Commands Referenceを参照。

便利なリンク集

クラスネームリスト

トリガー

エディタ向けリファレンス

ミッションの構想を練る

頭の中で漠然としたアイデアを練るもよし、テキストファイルにつらつらと書いていくもよし。

ただし、必ずどういうミッションにしたいか、どういう目標を置きたいかを決めることが肝心です。

「破壊」「殲滅」「救出」「暗殺」などミッションの主目標を決め、そこから設定や配置、味方・敵の各陣営を決めていきましょう。

エディターを開こう

構想が決まったら、Arma3を起動しましょう。

CCG鯖のプリセットのまま起動すると、余計なAddonが干渉したりするため、必要なAddonのみをArma3 launcherで選択し、起動しましょう。

筆者がおすすめするのは、CBA、ACE3、3CB、CUP、RHS、TFAR等の主要addonのみでの起動です。

起動したら、画面中央の3つのアイコンからEDITORを開き、使いたいmapを選んでエディターを開きましょう。

味方陣営を配置する

スタート地点はmapのどこでも大丈夫ですが、空港や前哨基地などの軍事施設からスタートするのが基本的な配置でしょう。

そのほかにも、適当な道路沿いに兵士と車両を配置しても構いません。

ミッションにストーリー性を持たせる意味でも、軍事施設にこだわらず平原や森の中など色んな可能性を考えてみましょう。

目標を設置する

上記で書いたミッションの主目標の中で、「暗殺」「破壊」など『1つのオブジェクティブを排除する』といった目標が一番簡単です。

エディターの操作やトリガーの配置に慣れるためにも、最初は簡単なものからスタートしてみるのがコツです。

それでは実際に目標となるオブジェクト(やユニット)、そしてミッションの勝利条件を設定するためのTriggerを置いて行きましょう。

例: 敵将校の暗殺ミッション
・敵将校を置く(OPFOR陣営のColonelやOfficer、Warlordなど)
・敵将校のAttributesを開き、Variable nameに名前を付ける(「TARGET」など)
・効果範囲の無いTriggerを設置し、TriggerのAttributesを開く
・TriggerのType欄で「Anybody」、Activation欄で「Present」をそれぞれ選択する
・TriggerのCondition欄に\\ 「!alive TARGET;」と記述する
・TriggerのOn Act欄に\\ ["end1",true,true] call BIS_fnc_endMission; と記述する
・TriggerのAttributesを閉じる

上記の操作によって、インゲームで敵将校を倒したらMISSION ACCOMPLISHEDと書かれた画面が出てくるようになります。

エディター画面右下のPLAY SCENARIOをクリックし実際に作動するかどうか確かめてみましょう。

敵兵士を置く

主目標の設置が終わり、動作することを確認をしたら次は敵兵士を設置です。

敵将校と同じ軍隊の兵士を置くのが好ましいでしょう。

建物の内外、道路上、ビルの上などに設置し、より雰囲気のあるゲームプレイに仕上げましょう。

設置型機関銃やテクニカル・武装車両などを置くと更にゲームプレイに刺激を与えられます。

ただし、1つの陣営につき144人の兵士しか設置できません。

そしてそもそも144人も設置するとミッションが重くなりプレイできなくなってしまいます。最大数は50~70人ほどが目安です。

うまく配置して、敵の数は少なくても、プレイヤーの難易度が適切になるよう配置を工夫してみましょう。

陣営(SIDE)とは

  • 青色で表現される西側(BLUFOR)
  • 赤色の東側(OPFOR)
  • 緑色の第3勢力(INDEPENDENT)
  • 紫色の民間人(CIVILIAN)

の4つがあります。

基本的に

  • BLUFORとOPFORは常に対立しており、
  • INDEPENDENTは初期設定ではBLUFORと友好関係にあり
  • 設定を変えるとBLUFORと敵対
  • またはBLUFOR、OPFOR共に敵対状態にすることができます。
  • CIVILIANは武器を持たず攻撃してきません。

init.sqfを書く/taskを作る

ゲームエディター内の操作説明はここで終わりです。

続いてはミッションをきちんと動作させるため、そしてミッションにストーリー性と雰囲気を持たせるための作業に入ります。

具体的な作業としては、

  1. init.sqfファイルを作る
  2. init.sqfファイルの中に、taskを生成するコマンドを作る
  3. init.sqfファイルの中に、briefingを書く(※次章で説明します)

の3つです。

保存したミッションファイルは、マイドキュメント\Arma 3\mpmission\内に保存されます。

例:Altis島マップで「Neochori」という名前のミッションを保存した場合\mpmissions\Neochori.Altis\がミッションが保存されているフォルダです。

taskの生成

  1. ミッションが保存されたフォルダを開く
  2. 同フォルダ内に、新規テキストドキュメントを作成し、名前を「init.sqf」に変える(この時、.txtという拡張子は消してください。)
  3. init.sqfを開く
  4. 次の4行を追加する
if (!isDedicated) then {waitUntil {!isNull player && isPlayer player};};
task1 = player createSimpleTask ["Kill the officer"];
task1 setSimpleTaskDescription ["敵将校を暗殺せよ", "Kill the officer", Kill the officer"];
player setCurrentTask task1; 

『4.主目標を置く』で説明した例に沿って書いています。この合計4行のコマンドラインを上から順番に説明していきます。

ミッションが回るまでinit内スクリプトを開始させない

 if (!isDedicated) then {waitUntil {!isNull player && isPlayer player};};
 

必ず入れないといけません。この1行だけは、必ずinit.sqfの一行目に書いてください。

このコマンドラインは、「Dedicatedサーバーなら、プレイヤーが入ってくるまで以降のコマンドを実行するのを待つ」といったことが書かれているようです。

init.sqfの一番最初に入れなければなりません。

taskの生成

 task1 = player createSimpleTask ["Kill the officer"];

この2行目で、taskを作ります。taskは、プレイヤーに表示される”指示”のようなもので、CoDに出てくる「対空砲を破壊せよ」や

「ヘリに乗れ」といったオブジェクティブの働きをしています。

このtaskを作ると、プレイヤーがマップを開いたときに左上に表示され、プレイヤーの目標は何なのかを知らせることができます。

「task1という名前で、『Kill the officer』というタイトルがついたtaskを生成します」と書かれています。

taskの説明文の生成

 task1 setSimpleTaskDescription ["敵将校を暗殺せよ", "Kill the officer", Kill the officer"];

editor#taskの生成 で生成したtaskの説明文を指定します。

四角いカッコの左から、 task1 setSimpleTaskDescription [“説明文”,”タイトル”,”Waypointでの説明文”]; となります。

説明文は、プレイヤーがマップをWaypointでの説明文の使い方は筆者も正直よくわかってないので、タイトルと同じ文を入れています。

taskを「現在のtask」に指定する

 player setCurrentTask task1;\\

editor#taskの説明文の生成で生成したtaskを、プレイヤーの「現在のtask」に指定します。

「現在のtask」に指定されたtaskは、インゲーム画面にてオレンジ色で強調され、プレイヤーがいま遂行しなければならないtaskが

どれなのかを知らせることができます。

「プレイヤーに対して、task1を「現在のtask」に指定します」と書かれています。

briefing.sqfを書く

6. init.sqfを書く/taskを生成する』でもチラッと言及しましたが、ここではbriefingの書き方について触れます。

briefingはミッションにおける作戦内容、作戦が実行される背景、舞台設定などをプレイヤーに知ってもらうためのもので

ミッションの説明書きとしての働きをします。

こちらも、『editor#目標を設置する』で出した例に沿って設定を作ってみます。

 - ミッションは、Altis島現地軍であるAAFの将校の殺害
 - AAFの将校はAltis島の主要都市Kavalaに潜伏している
 - 主な潜伏先はKavala最西端の城内部、もしくはKavala中心に位置する病院
 - 味方はNATO軍1分隊、敵の総数は不明、テクニカルやAPCを所有している可能性あり
 - 市民がいた場合、これに対する射撃および射殺を許可しない

かなり即興ででっち上げた設定ですが、こういったミッションの背景があるだけでも雰囲気が増します。 次は実際に、上記に沿ってbriefingを書いてみましょう

briefingのコマンドを書く

Scripting Commands Reference

Condition欄で主に使うもの

  • alive
    • 例: alive Officer1;
    • 意味: 変数名Officer1が生きているなら
    • 値: Officer1が生きていればtrue、死んでいればfalseが返される。
  • and
    • 例: alive (Officer1 && Officer2);
    • 意味: 変数名Officer1とOfficer2が共に生きているなら
    • 値: Officer1、Officer2共に生きていればtrue、どちらか一方、もしくは両方が死んでいればfalseが返される。
  • canMove
    • 例: canMove tank1;
    • 意味: 変数名tank1が動ける状態ならば
    • 値: tank1が動ける状態ならばtrue、動けない状態ならばfalseが返される。
  • in
    • 例: soldier1 in tank1;
    • 意味: 変数名soldier1が変数名tank1に乗っているならば
    • 値 soldier1がtank1に乗っていればtrue、乗っていなければfalseが返される。
  • not
    • 例: !alive Officer1;
    • 意味: unitやvehicleなどの状態を確認する構文に付け足すことで、否定文にする
    • 値: Officer1が生きてなければ(=死んでいれば)true、生きていればfalseが返される。
  • or
    • 例: (soldier1 || soldier2) in tank1
    • 意味: 変数名soldier1もしくは変数名soldier2のどちらか一方が変数名tank1に乗っているならば
    • 値: soldier1もしくはsoldier2の一方または両方がtank1に乗っていればtrue、両方とも乗っていなければfalseが返される。
  • this
    • 例1: this addAction [Say Hello world, {hint, 'Hello, world'};];
    • 意味1: 変数名(soldier1など)の代わりに、そのunitやvehicleそのものを表す ※unitのinit欄に書く時
    • 値1: そのunitやvehicleそのもの
    • 例2: this
    • 意味2: そのtriggerの条件(EastやWest、PresentやNot present等)を満たすなら ※triggerのCondition欄に書く時
    • 値2: そのtriggerの条件が満たされていればtriggerが達成(activate)される、満たされていなければ達成されない。
  • thisList
    • 例: Officer1 in thisList;
    • 意味: 変数名Officer1が当該triggerの範囲内に入っていれば
    • 値: Officer1が当該triggerの範囲内に入っていればtriggerが達成(activate)される、入っていなければ達成されない。
  • triggerActivated
    • 例: triggerActivated trigger1;
    • 意味: triggerが達成(activate)されたかどうかを確認し、値を返す
    • 値: 変数名trigger1が達成されていればtrue、達成されていなければfalseを返す。

OnAct欄で主に使うもの

  • captive
  • createMarker
  • createTrigger
  • disableNVGEquipment
  • disableTIEquipment
  • doSuppressiveFire
  • doTarget
  • doWatch
  • enableSimulation
  • getMarkerPos
  • getPos
  • hint
  • playMusic
  • publicVariable
  • setDamage
  • setMarkerPos
  • setPos
  • SetUnitPos

unitやvehicleのinit欄で主に使うもの

  • addAction
  • attachTo
  • disableAI
  • doStop
  • say
  • say2d
  • say3d

sqfファイルの中で主に使うもの

応用編

作成中

外部リンク