【ナメクジでもわかるエディット講座】
Stage.2-1 トリガーとは?
初心者がかなり迷うと思うトリガー、しかし一度こつを覚えれば逆にどんどん使っていけます。
まずF3を押して『F3 Triggers』を選択し、ユニットを置くようにマップをダブルクリックしてください。ウィンドウが開きましたが、意味不明ですね?
とりあえず2つ目の表の『Activation』をWestに設定し、左下の『Effects』で好きなエフェクトを選択してみてください。エフェクト欄は文字通りカメラ、効果音、音楽、文字の設定が出来ます。とりあえずここでは音楽をならすことにしてみましょう。
旗のようなマークと、丸い青い円が表示されましたね?それがトリガーです。旗がトリガーの本体で、青い線はトリガーの範囲です。Westのプレイヤーユニットを円の外に設置してプレビューし、マップには表示されていませんが、走って円の中に移動してみてください。音楽がなりますよね。
頭の良い方はもう気づいていると思いますが、このトリガーはWestのユニットが入ったときオンになり、指示された行動、つまり音楽をならすトリガーです。もちろんEast、Resistance、Civilianに変えれば同じ事が出来ます。どうですか?以外と簡単でしょう?
それではトリガーの各部分の設定に入りたいと思います。一番目の枠はトリガーの有効範囲の設定です。 『Axis
a』が縦、『Axis b』が横です。単位はメートルです。『Angle』は角度ですが、ユニットと同じようにマップでシフト+ドラッグで回転できるのでここで設定しなくてもいいでしょう。『Ellipse』、『Rectangle』はトリガーの有効範囲を丸くするか、四角くするかの違いです。
次の枠はトリガーで最重要です。『Activation』は上でやったとおり検知する団体(Radio
***については後で解説します)、その右の『Once』、『Repeatedly』はトリガーを一回だけ、もしくは何度でも起動できるように設定できます。
そしてその下、『Present』はその団体が「居る」とき、『Not
Present』はその団体が「居ない」ときオンになります。『Detected by...』はその団体に発見されたときオンになるよう設定します。これを利用すれば敵に見つかったときサイレンが鳴る基地なども簡単に作れます。『Countdown』は上で設定した条件がオンになってから、決めた時間だけトリガーがオンになるのを送らせることが出来ます。Minが最小、Maxが最大、Midが平均時間です。 『Timeout』は使いどころが非常に難しいのでほっといてください。
次の枠はトリガーの性質を設定します。『Guarded
by...』はよくわかりませんが、あまり使うことはなさそうです。『Switch』はトリガーにスイッチの属性をつけるか(これについても後で説明します)、『End
#...』はミッションを終了させ、指定されたデブリーフィングを表示します。『Loose』はその名の通り負けです。
最後の枠はトリガーの起動条件と、起動したとき実行するスクリプトを設定できます。スクリプトについては後で説明するのでとりあえずここはほっておいてください。
トリガーの設定は以上です。一見難しくてさわれそうもないOFPのエディターが非常に便利なことがわかったでしょうか。とりあえず、代表的な利用例を説明してみます。
・自分をWestの兵士にして、敵のEastのグループを設置する。
・敵のいる場所にトリガーを設定し、『East』、『Not
Present』、『End#1』と設定する。
・エフェクト欄でTextを選び、『Mission Completed』と入力する。
・結果:敵が倒れるか逃げ出すかして一定範囲から追い出すと『Mission
Completed』になる。
これだけでも、工夫すれば十分面白いミッションが作れます。
Stage.2-2 トリガーとウェイポイント
さて、いろいろミッションを作っているとすぐにまた新しい機能が欲しくなると思います。
例えば戦車基地を作ってその場所の戦車をすべて倒して『基地に戻れ』の命令が出て基地に戻るとミッション成功になる・・・とか。これもちょっといじるだけで簡単に作れます。
まずプレイヤーユニットを設置し、基地に空の戦車を二台置いてください。『Name』欄にはTank1、Tank2と入れてください。プレイヤーウェイポイントは一個目に基地の真ん中に『HOLD』で、DESTROY
TANKSとでも名付けておいてください。二個目は戦車を爆破した後戻る陣地に移動するよう置きます。
そしてトリガーを設置し、とりあえず『Condition』欄に『this』を消して『Not(Alive
Tank1) and Not(Alive Tank2)』と入れてください。Aliveはそのユニットが生きているかどうか検出するコマンドです。そして上の属性でスイッチを選びます。このトリガーに有効範囲は必要ないので範囲は0、0と設定してください。
次に『F5 Synchronize』を選択し、基地のウェイポイントとさっき置いたトリガーをつなげてください。これで作業は終わりです。
さて、論より証拠。さっそくプレイしてどのように動くか見てみましょう。基地に忍び込んで爆弾をセットし・・・爆破!するとウェイポイントが変わって基地に戻るウェイポイントが表示されるはずです。変わらない人は戦車の名前を間違えているか、それか属性をスイッチにし忘れています。
わかりましたか?シンクロナイズでトリガーとウェイポイントをつないでスイッチがオンになると、指定したウェイポイントをとばす事が出来るのです。これは先の破壊工作だけではなく、一定範囲にプレイヤーが入ったとき敵が逃げ出す・・・なんて事にも役立ちます。マップ画面に戻り、2番目のウェイポイントの基地に戻る場所に自分が入ったときミッション終了になるように設定してみてください。立派な1ミッションが出来ました。
ところが!しばらくやっていたらすぐ不備に気づきますよね。そう、最初から脱出地点に向かっても、そのままミッション終了になってしまうのです。さあ、どうするかどうするか。・・・ここで"変数"なるものを使うのですが、説明すると長くなるので実践して覚えてください。
ObjStatusってものは知ってますか?ミッション中に効果音がなり、ブリーフィングの項目にチェックが入るアレです。あれをモデルと考えてください。まず、戦車を破壊してObjStatus0がオンになり、基地に入ったときObjStatus0がオンならミッション終了になる・・・。
一個目のトリガーのOn Activation欄に『obj0 = true』と入れてください。これで戦車を破壊してトリガーがオンになったときobj0という項目にチェックが入ります。そして二個目のトリガーのCondition欄には『this
and obj0』と入れてください。さてミッションを走らせてみましょう。今度は戦車を破壊してから脱出地点に行かないとミッションが終わらないようになっています。
効果はイメージした通りです。二個目のトリガーに『this
and Not(Alive Tank1) and Not(Alive tank2)』と入れても同じ事が出来ますが、ミッションが複雑になるとわけがわからなくなってくるのでやはり変数を使った方が良いでしょう。
Stage.2-3 こんなにある!便利な判定文&コマンド
判定文とはトリガーがオンになる条件のことで、『this』と初期設定されているアレです。
この条件を満たすと、トリガーがオンになり、トリガーの属性(End
#1やSwitchなど)と、『On Activation』、そしてエフェクトが実行されます。
これらの二つをまとめてスクリプトと言います。スクリプトには数え切れないほど数があるのですが、この中で便利でよく使うものをいくつかここに記しておきましょう。
判定文の基本の『this』は、トリガーの2段目で設定できる、どの属性のユニットがいるかとかそういうものを検出します。
また、判定文にはand、orが利用できます。説明するまでもないでしょうが、『Not(Alive
tank1) and Not(Alive tank2)』ならTank1とTank2が両方死んでいるとき、『Not(Alive
tank1) or Not(Alive tank2)』ならTank1とTank2のどちらかが死んでいる時に検出されます。判定文が複雑になるときはカッコを使って整理することが出来ます。『(Not(Alive
tank1) and obj1) or Not(Alive Tank2)』といった感じで。Not(...)で属性を裏返すことも出来ます。
・Alive
文字通り、『ユニットが生きているかどうか』を検出します。Notで属性を裏返せば『死んでいるかどうか』を検出でき、数ある判定文のなかでもthisの次に使うことが多いでしょう。
書き方:Alive unitname
使用例:Not(Alive helicopter)
・Canmove
これも文字通り、『ユニットが移動可能かどうか』を検出します。Notで属性を裏返せば『移動可能かどうか』を検出できます。車両などで乗務員を倒したが完全に壊れていないためトリガーがオンにならない...そんなときに便利です。基本的に乗り物、特に重戦車に対して使うと便利です。
書き方:Canmove unitname
使用例:Not(CanMove t72_1)
・in thislist
『thislist』、つまり『トリガーの一番上で設定した範囲』について検出します。『player
in thislist』ならプレイヤーが、『james in thislist』とならジェイムズさんという誰かわからない人が入ったとき反応します。乗り物に乗っていると中の歩兵ではなく乗り物が検出されてしまうため、そんなときは『Vehicle
unitname in thislist』とすればOKです。
書き方:unitname in thislist
使用例:Vehicle player in thislist
・true
問答無用でトリガーをオンにします。つまりミッションが始まったとき自動的にコマンドを実行することができます。ウェイポイントではこの条件が初期設定となっています。なぜならウェイポイントでは『Move』『Seek
And Destroy』などの条件がオンになり、そして『Condition』もすべてOKならウェイポイントが達成されたことになります。だからウェイポイントの初期設定はtrueなのです。
他、トリガーの属性で『Radio
***』に設定すればメニューの0-0-1、0-0-2...から無線を選ぶことによってトリガーをオンにすることができます。属性をスイッチにしてトリガーと結べば無線があったときに増援、なんてことが出来ます。この場合はトリガーのText欄が送る命令の名前となります。前に解説したように、コマンドでtrueにした変数の名前も入れることができます。(『player
in thislist and obj1』といった感じで)
後はHasWeapon、Getdammageなど便利なのがいくつもありますが、全部書いてるとちっとも初心者向けで無くなってしまうので省きます。コマンドリファレンスなどで調べてみてください。
次はコマンドです。トリガーの『On Activation』欄に書いておけば、判定文がすべてOKになったとき実行されます。コマンドは;(セミコロン)で区切って何個も入れることができます。またウェイポイントの同名欄、ユニットの『Initialization』欄にもコマンドを入力することができます。ユニットのInit欄では、そのユニットを表す代名詞として『this』が使用できます。
・Setdammage
数あるコマンドの中で、たぶんもっとも効果がわかりやすいと思います。指定されたユニットにダメージをセットすることができます。ダメージは0が全快で、1が死亡、その間に.1、.2、.3...となります。0.1ではなぜかうまく動きません。ユニットのinitに『this
setdammage 1』と入れて最初から体力0のユニットを作ったり、指定エリアにプレイヤーが入るとプレイヤーが死亡する、等に使います。
また、発想を逆転させ一度死んだユニットを『setdammage
0』で復活させることもできます。ただプレイヤーユニットにこのコマンドを入れてもあまり意味はないです。死ぬものは死にます。
書き方:unitname setdammage value(0、.1、.2、.3...1)
使用例:Tank1 Setdammage 1
・ObjStatus
オブジェステータス、ブリーフィングで説明され目標を達成するとチェックが入るあれです。それにチェックを入れたり、逆にバツ印をつけたりできます。ちなみにこれは関数まで変更するものではないので、これが実行されたかどうかを判定したいなら一緒に『Obj1
= true』とでも入れてください。『ACTIVE』、『HIDDEN』でうまく消したり隠したりするのはもう少し技術がいります。後で説明しましょう。
書き方:"value" ObjStatus "status"
value = 0、1、2、3、4...
Status = DONE(達成)、FAILED(失敗)、ACTIVE(隠れていた目標を表示)、HIDDEN(目標を隠す)
使用例:"0" ObjStatus "DONE"
・Movein
通常車両を設置するときは元からの兵士が入った状態か、空席の状況で置きますが、このコマンドを使えば指定ユニットを車両の中に一瞬で移動させることができます。MoveinDriver、MoveinGunner、MoveinCommander、MoveinCargo、すべてそのままの意味です。航空機の操縦者はパイロットですが、ドライバーと同じコマンドで動かすことができます。
書き方:unitname Moveindriver vehiclename
使用例:Player MoveinCommander type74
・Addweapon
空きスロットを持った歩兵ユニットに武器を追加することができます。これで自由自在に歩兵ユニットの武器を設定することができます。『AddMagazine』なら武器の弾薬を追加できます。ちなみにこの二つを兼用するときは弾薬の名前を先、武器の名前を後に書くようにしましょう。空きスロットは『unitname
RemoveWeapon(Magezine) "weaponname"』、『removeallweapons
unitname』などで作ることが出来ます。
書き方:unitname AddWeapon "weaponname"
使用例:player AddMagazine "HandGrenade"
Weaponname、武器弾薬名はアドオンならその説明書に書いてあります。参考としてオフシャルの武器弾薬名を書いておきます。
武器名/弾薬名
HK/HK
M4/M4
M16/M16
M16GrenadeLauncher/GrenadeLauncher
M60/M60
M21/.M21
MM1/MM1magazine
G36a/G36amag
XMS/M4
Steyr/SteyrMag
LAWLauncher/LAWLauncher
CarlGustavLauncher/CarlGustavLauncher
AALauncher/AALauncher
LaserDesignator/LaserDesignator
/Mortar
AK74SU/AK74
AK74/AK74
AK74GrenadeLauncher/AK74GrenadeLauncher
AK47CZ/AK47
AK47GrenadeLauncher/GrenadeLauncher
PK/PK
Kozlice/kozliceball, kozliceshell
Bizon/BizonMag
SVDDragunov/SVDDragunov
RPGLauncher/RPGLauncher
AT4Launcher/AT4Launcher
9K32Launcher/9K32Launcher
6g30/6g30Magazine
HKG3/HKG3Mag
FAL/FALMag
UZI/UZIMag
Beretta/BerettaMag
Tokarev/TokarevMag
CZ75/CZ75Mag
Glock/GlockMag
Skorpion/SkorpionMag
/HandGrenade
/PipeBomb
/Binocular
/NVGoggles
/Mine
他、『this allowfleeing 0』で兵士を逃げなくしたり、『Hint
Format ["%1",getpos unitname]』で座標を取得し『unitname
Setpos [x,y,z]』で好きな座標にユニットをセットしたり・・・とにかくコマンドはいろんな事が出来ます。これを使えば不思議なミッションや過激なミッションも作れますが、エディットの基本はあくまで遊べるミッションを作ることだということを忘れないでください。プレイヤーはトリガーの自慢をされるためにミッションを落として遊ぶわけではないのですから。
次の章からは、ミッションを外部ファイルによって飾る技術について説明します。
(もっとコマンドについて詳しく知りたい人は、ヨシノイドWEBや火薬庫を見てください。詳しい説明があります)