ミッションエディター ~実際に作ってみよう~

Last-modified: 2018-03-14 (水) 10:25:37
 

(ちょっとずつ更新します。)
では今までの作業説明を応用して、実際に「遊べる」ミッションを作ってみよう。分からない点はSteelFury付属のエディターの説明書を読めば概ね大体多分分かる...と思う。(Google先生でも十分読めるぞ。)
ミッション制作の流れは以下の通り。

  • ミッション構想
  • エディターでの作業
  • 味付け
  • デモプレイ
  • 公開
     

 ミッション構想

 まず、自分の作ってみたい戦いを想像してみる。歴史的な戦闘もありだし、ifの戦闘でもありである。
戦闘を構想する上での制約は、

  • マップサイズは2km×2kmでループする。
  • AIは1942年頃の戦闘を想定して作られているので遠距離戦をさせることが難しい。
  • AIに細かな指示をすることはできない。
  • AIは指定された行動よりも、目の前の敵を撃破を優先することが多いので、あらかじめ余裕を持った戦闘を想定する。
  • 車両行動の分岐点(こうなったらAの動き、こうなったらBの動き)を作ることは基本的に無理。
    が挙げられる。

どんな戦いを作りたいかという大まかなイメージが出来上がったら、エディターでの作業に移る。詳細は作りながら試行錯誤する。

今回は

  • KV-1で敵が占領している村を襲撃、占領。その後敵の奪還部隊を撃退。

というシチュエーションのトレーニングミッションを作ってみる。ミッションの始め方は「~基礎編~」を参考に。

マップは「Rasenai」
ミッション名は「training_ussr」
を使用する。

 

マップ選び

このゲームで使うことの出来るマップは非常に多く、100種類近くある。全てのマップを一度に見ることはできず、欲しいマップを探す作業はなかなか骨が折れる。簡単に調べる方法はないが、過去にプレイしたミッションで「これが欲しい」というものがあった場合は次の方法でマップ探してみよう。

 

まず、欲しいマップがあったミッションを一度プレイする。
そのあと
Lighthouse Interactive\Steel Fury - Kharkov 1942\data\k42\loc_rus\levels\cur_mission.engcfg
を開く。(一番最後に読み出したミッションの内容が見られる)
その中に
cur_mission = levels\levels\△△△\○○○.level;
という記述がある。そして記載されている場所のフォルダを見つけ、○○○.levelファイルを開く。
そして、中の記述の
env_desc = ○○○.poly;
と書いてあるのが、マップデータ名である。
これと同じ名前のマップをミッション作成時に指定すればよい。

 

また、どうしても欲しいマップが無かった場合、ありがたいことになんとSteelFuryはマップを一から作ることができる。詳細な作り方はここでは割愛するが、付属のエディターマニュアルに方法が載っているので、読みながら挑戦してみて欲しい。

エディターでの作業

ミッション作りのメイン作業。ここから~味付けまでの作業は、順番にやっていくのではなく、各パートを行ったり来たりしながら微調整していくものである。設定を繰り返しながら納得のいくものに近づけてみよう。

 

最初に確認すること・やっておくこと
ミッションが作成出来たら、以下のファイルが生成されていることを確認する。

  • Lighthouse Interactive\Steel Fury - Kharkov 1942\data\k42\loc_rus\levels\LEVELS\cm_users\○○○.level何のファイルを読み出すか、時間進行の編集
  • Lighthouse Interactive\Steel Fury - Kharkov 1942\data\k42\loc_rus\levels\LEVELS\SCRIPTS\cm_users\○○○_loc_data.text文字として表示されるデータの編集
  • Lighthouse Interactive\Steel Fury - Kharkov 1942\data\k42\loc_rus\levels\LEVELS\SCRIPTS\cm_users\○○○_scripts.engscrミッションの進行プログラムの編集
  • Lighthouse Interactive\Steel Fury - Kharkov 1942\data\k42\loc_rus\levels\LEVELS\SCRIPTS\cm_users\○○○_zones.engcfg地点データの編集
     
    これらのファイルは作業を効率よく進めるためや詳細な設定をするために必要なファイルであるため、作業するときは同時に開いておくとやり易い。
  • スクリプトファイル操作時の注意
    エディターに戻って左上にあるファイルマーク「Load」を押す。スクリプトファイルで操作を行ったあと、エディターを操作する場合は必ず「Load」を押さなくてはいけない。押さないと、エディターに操作が反映されないからである。「Load」をせずに、エディターで操作を行った後保存してしまうと、反映されていない状態で行った操作が、スクリプトファイルに上書きされてしまう。

次に天候ファイルを分離させる。天候ファイルの場所は
C:\Program Files (x86)\Lighthouse Interactive\Steel Fury - Kharkov 1942\data\k42\loc_rus\levels\LEVELS\weather
内である。
初期設定のままだと、天候データは全てweather_user.engcfgになっている。このままでは、作ったミッション全ての天候データが共通になってしまう。そのため、ミッションごとに天候を分けるためにweather_user.engcfgをコピー、同一フォルダ内に貼り付けをして、適当な名前weather_○○○.engcfgに変更する。
その後、○○○.levelを開き、その中の
weather_file = weather\weather_user.engcfg;

weather_file = weather\weather_○○○.engcfg;
に変更する。
これで天候データの分離が完了だ。

戦闘の流れと部隊を具体的にする

改めて今回使用するマップこちら
Rasenai.jpg
このマップの左側にある村を中心にミッションを組み立てる。
図のように、マップ南より進撃し、村を占領。北側から来る奪還部隊を迎撃するという流れとする。
Rasenai_attack.jpg

自軍部隊(ソ連)

  • KV-1B...1小隊(3台)
  • T-26...1小隊(3台)
  • 歩兵...2小隊

敵部隊(ドイツ)
村内

  • Pak35...2門
  • 迫撃砲...2門
  • 歩兵...1小隊

奪還部隊

  • 3号戦車...1小隊(3台)
  • Pz.38(t)...1小隊(3台)
  • Sdkfz251...2台
  • 歩兵...2分隊

簡単なミッションということで、自車両はKV-1と強めに。
歩兵を守りながら村に侵入させるのを援護する。
村への侵入が前座のような戦いとなり、後半の奪還部隊迎撃が本命戦闘になる。
・・・ということを想像している。

部隊編成を構築する際の注意点

  • 基本的に侵攻部隊側が不利なので、進行側を強めに設定する。
  • シミュレーター的戦闘(3人称視点使用しない)を作りたい場合はプレイヤーがあまり何もしなくてもクリアできる程度の難易度に。
  • 大規模すぎる戦闘だとAIが迷いまくってまともに動いてくれない。
  • 航空機は知っての通りマップ兵器であり、作戦区域問わず攻撃するので、待機させてある後詰車両が攻撃されてもいいようにしておく。

ユニットコンター設置

車両配置は「~基礎編~」を参考のこと。
sov_haiti_01.jpg
コンターレイヤー(Conter Layer)の「sov_position」を利用する。コンターレイヤーごとに色分けができるので、敵味方勢力ごとにレイヤーを変えると見やすくなる。
コンターには方向がついており、向いている方向には矢印が表示されている。車両の初期の方向はこの矢印の方向を向く。コンターの向きはコンター設置時のカメラの向いている方向に設定される。そのため、今回の場合、ソ連ユニットのコンターは侵攻したい村の方向を向けて設置した。コンターはコピーできるため、同じ勢力、同じ進行方向を設定するユニットはコピーすることで効率よくコンターを設置できる。

あとのユニット指定のことも考えて、分かりやすいコンター名にしておくと作業がしやすい。
戦車:「sov_tank_01」「sov_tank_02」
歩兵:「sov_inf_01」「sov_inf_02」

同様にドイツ側の部隊のコンターも設置していく
ger_haiti_1.jpg
3カ所の塹壕に3つのコンターを設置。迫撃砲は3つのコンターを迫撃砲用塹壕に設置。対戦車砲用のコンターは4つ設置(Aと書いてあるもの)。迫撃砲と対戦車砲はそれぞれのコンターのうち、ランダムに2つ利用するようにする。ランダム配置については「~実践編Ⅰ~」を参考に。
歩兵:「ger_inf_01」「ger_inf_02」「ger_inf_03」
対戦車砲:「ger_at_gun_01」「ger_at_gun_02」「ger_at_gun_03」「ger_at_gun_04」
迫撃砲:「ger_mort_01」「ger_mort_02」「ger_mort_03」

最後に増援部隊のコンターを設置する。
ger_haiti_02.jpg
村からは直接見えない丘の裏に設置する。この部隊は村の占領完了後に移動開始するように後々設定する。
戦車:「ger_tank_01」「ger_tank_02」
装甲車:「ger_apc_01」
歩兵:「ger_inf_04」

ユニット配置

「基礎編」「応用編Ⅱ」を参考にしながら先程設置したコンターに車両を配置していく。
unit_haiti_02.jpg
まず、プレイヤー車両の設定をする。
最初に初期車両のT-34が設定されているはずである。これは後で削除する。
新規ユニット「sov_tank_01」を作成。名前は配置したいコンターと同じ名前だと分かりやすい。
車両は「3xKV-1e(ekran/rounded turret 1 LOD)」を選択
コンターは「sov_tank_01」を選択
モラル(士気)は100%
経験は60%
部隊マークとスクリプトは保留
Player's Divisionの手のひらマークにチェックを入れてこのユニットを自車両にする。

 

士気について
士気は敵に面した時の撤退のしやすさが設定できる。特に歩兵ユニットを設定した時に顕著に表れ、士気が低いと、歩兵部隊に向かって戦車が接近したり、軽く制圧射撃をしただけで逃げはじめる。

 

経験について
経験のパラメータによって、戦車の行動が変わる。
経験が高いと、より敵の認識能力が高くなり、命中率が上がり、回避能力が上がる
基本的に経験が高い方が強いのだが、回避能力が上がるというのが厄介で、経験が高いユニットは戦闘時に左右に振る行動が激しくなる。そのため、WW2後期の車両や、重戦車の設定としては好ましくなく、わざわざ側面を晒す行動を取ってしまう。激しい回避行動を取らせたくない場合は60%程にしておく。

 

KV-1を自車両に設定すると、初期車両のT-34が削除可能となる。ユニットを削除する。

 

同様の手順でユニット作成し、ユニットを設定していく。
「sov_tank_01」:「3xKV-1e(ekran/rounded turret 1 LOD)」>コンター「sov_tank_01」に設定
「sov_tank_02」:「3xT-26」>コンター「sov_tank_02」に設定
「sov_inf_01」:「Platoon infantry (state1941)」>コンター「sov_inf_01」に設定
「sov_inf_02」:「Platoon infantry (state1941)」>コンター「sov_inf_02」に設定

 

対戦車砲と迫撃砲を設定する
「ger_at_gun_0」:「2x 3.7cm light anti-tank gun Pak35」>コンター「ger_at_gun_0
「ger_mort_0」:「2x 5cm mortar GrW36」>コンター「ger_mort_0
この2つのユニットはランダム配置を設定する。
うまく複数コンターへの設定が行われればこのように複数コンターに「対戦車砲」「迫撃砲」それぞれのマークがつく。
set_at_gun.jpg

 

ドイツ兵を設定する
「ger_inf_01」:「Infantry squad」>「ger_inf_01」
「ger_inf_02」:「Infantry squad」>「ger_inf_02」
「ger_inf_03」:「Infantry squad」>「ger_inf_03」
初期のドイツ兵ユニットは塹壕に入れておく。

 

増援部隊を設定する
「ger_tank_01」:「3x Pz.III ausf.J(KWK38)」>「ger_tank_01」
「ger_tank_02」:「3x Pz38(t) ausf.G」>「ger_tank_02」
「ger_apc_01」:「Heavy APC Sdkfz251/1 Ausf.C」>「ger_apc_01」
「ger_apc_02」:「Heavy APC Sdkfz251/1 Ausf.C」>「ger_apc_02」
「ger_inf_04」:「Infantry squad」>「ger_inf_04」
「ger_inf_05」:「Infantry squad」>「ger_inf_05」
3号戦車の方の経験値を60%、38(t)の経験値を100%に設定。この戦闘では分かりにくいが違う動きをするように設定する。
装甲車と歩兵は2ユニットが1小隊になっているものがないので、1台のみのユニットを2つ作り、同じコンターに配置する。

トリガー設定

「実戦編Ⅱ」を参考のこと。
トリガー設定とユニット移動はほぼ並行してやっていくが、今回は先にトリガーの説明をする。
トリガーは作戦の成功・失敗、ユニットの移動など、作戦の進行において欠かせないものである。
今回のミッションの流れをするにあたって、どの部分にトリガーを設置、起動したらよいか時系列で解説する。

 

ミッションスタート

移動開始

歩兵部隊が村を占領(1.歩兵部隊が村に入ったことを認識するトリガー
同時に敵の奪還部隊が攻撃開始

敵奪還部隊を撃退(2.敵が撃退されたことを認識するトリガー
勝利(3.撃退と同時に勝利フラグを立てるトリガー

味方歩兵壊滅(4.味方歩兵が一定数減少したことを認識するトリガー
敗北(5.味方歩兵減少と同時に敗北フラグを立てるトリガー

1~5のトリガーを設定していく
1.歩兵部隊が村に入ったことを認識するトリガー
まず、コンター>レイヤーの「trigger」を選択
新規コンター「enter_inf」を作成する
enter_inf_01.jpg
「このコンター内に入ったらトリガーが起動する」ということにしたいため、村の中央辺りに境界線が来るようにコンターを配置。
このとき、図に書いてあるチェックが入っているか確認。チェックを入れることで、コンターが円になり、「コンターに入る」ことができるようになる。

次にトリガー「Triggers」に移る。
新規トリガー「enter_inf_01」を作成する。これは歩兵が先程の「enter_inf」コンターに入ったことを認識させるトリガーとする。そして旗のマークにチェックを入れる。これは一度起動したトリガーを起動させたままにしておくことを意味する。
enter_trigger_01.jpg
「trigger parameters」から「Object in Counter」を選択
「Counter」には「enter_inf」
「Division」には先程ユニット配置で指定した歩兵部隊「sov_inf_01」を指定

 

これで、「コンター『enter_inf』にユニット『sov_inf_01』が入ったらトリガーが起動する」の意味になった。
同様に「enter_inf_02」を作成し、「sov_inf_02」が入ったら「enter_inf_02」が起動するようにしておく。

 

さて、現在歩兵部隊が侵入したときのトリガーは「sov_inf_01」「sov_inf_02」の二つ存在しており、それぞれ、バラバラで起動する。ユニット移動では同時に一つのトリガーしか、引用することができないため、このままでは使うことができない。
また、これらのトリガーで表現したいのは「歩兵部隊の村への侵入」であり、「sov_inf_01」「sov_inf_02」のどちらが先に村に侵入しても良いようにしたい。

 

そこで、新たにトリガー「enter_inf_03」を作成する

 

「trigger parameter」から「Logical expression」を選択
下の方にある「Line of parameter」に「enter_inf_01 | enter_inf_02」と入力。
enter_trigger_02.png
このトリガー「Logical expression」は複数のトリガーの起動状況を組み合わせて、統合した一つのトリガーとすることができる。
入力した「enter_inf_01 | enter_inf_02」は「enter_inf_01 または enter_inf_02が起動したとき、このトリガーenter_inf_03を起動する」と言う意味になる。

 

2.敵を撃退されたことを認識するトリガー
新規トリガー「defeat_ger_01」を作成。
「trigger_parameter」から「The effciency of dividion has decreased 」を選択(このトリガーの詳細は『実戦編Ⅱ』を参考
これは特定の車両が一定以上減ると起動するトリガーである(実際はもっとややこしいのでトリガーの説明を見て欲しい。)。
defeat_ger_01.jpg
「Division」は「ger_tank_01」を選択
「Threshold, time」は取り敢えず「2.0」を選択。

 

このパラメーターは「1.0~2.0」の範囲で作動する。1.0が「被害なし」・2.0が「全滅」である。8割くらいに被害を与えたら起動するように「1.8」を設定したいが、ここでは設定できないのであとでまとめて設定する。
同様に「defeat_ger_02」を作成し、「ger_tank_02」を割り当てる。

戦車部隊を減らした段階で、トリガーを起動させたいので、「1.」と同様に「Logical expression」を使用する。
defeat_ger_03.jpg
「defeat_ger_03」を作成し、「Logical expression」を選択。
「Line of parameter」には「defeat_ger_01 & defeat_ger_02」と入力。

 

これは「defeat_ger_01 と defeat_ger_02の両方のトリガーが起動したらこのトリガーdefeat_ger_03を起動する」の意味となる。

 

3.撃退と同時に勝利フラグを立てるトリガー
トリガー「defeat_ger_03」の起動をもって勝利とするようにしたい。
勝利フラグは「Mission completed successfully」を使用する。このトリガーは単体では機能せず、勝利フラグとしたいトリガーに付随させなくてはならない。
defeat_ger_03_clear.jpg
「defeat_ger_03」トリガーをコピーする。
そうすると「defeat_ger_03」が2つになる。新しくできた方の「trigger parameter」を変更し、「Misson completed successfully」を選択する。
これで「defeat_ger_03」の起動が勝利フラグとなった。

 

4.味方歩兵が一定数減少したことを認識するトリガー
「2.」と同様の手順で設定する。
defeat_sov_01.jpg
トリガー「The effciency of dividion has decreased 」を使用する。
「defeat_sov_01」に「sov_inf_01」
「defeat_sov_02」に「sov_inf_02」
を割り当てる。
「Threshold, time」は後で設定する。

 

歩兵部隊がある程度減ったらトリガーを起動させたいので、「2.」と同様に「Logical expression」を使用する。
defeat_sov_03.jpg
「defeat_sov_03」を作成し、「Logical expression」を選択。
「Line of parameter」には「defeat_sov_01 & defeat_sov_02」と入力。

 

これにより2つの歩兵部隊がともに減ったときに「defeat_sov_03」起動するようになった。

 

5.味方歩兵減少と同時に敗北フラグを立てるトリガー
「3.」と同様の手順で、「defeat_sov_03」に失敗フラグを付与する。
失敗フラグは「Mission completed unsuccessfully」を使用する。
defeat_sov_03_clear.jpg
「defeat_sov_03」トリガーをコピーする。
そうすると「defeat_sov_03」が2つになる。新しくできた方の「trigger parameter」を変更し、「Misson completed unsuccessfully」を選択する。
これで「defeat_sov_03」の起動が失敗フラグとなる。

 

最後に先程保留にしておいた「The effciency of dividion has decreased」トリガーの微調整をする。
まず、一旦ここで「保存」を押しておく。
「最初にやっておくこと」見ながら「training_ussr_scripts.engscr」を開く。
File not found: "set_def_trigger.jpg" at page "ミッションエディター 〜実際に作ってみよう〜"[添付]
すると、ずらっとプログラムに関する文字が並んでいるのが分かると思う。
その一番下にトリガーに関する項目がある。
その中で「The effciency of dividion has decreased」のパラメータにあたる以下の記述を「1.8」に書き換える。
書き換えたらテキストファイルの方で保存を押す。
保存出来たらエディタにて「Load」を押す。これで、テキストファイルの改変が反映される。(エディタ上の数字は変わらないが)
これで基本的なトリガー設定が完了した。

 

ユニット移動

スクリプト(Scripts)で行う。操作方法は「応用編」を参考。
最初に自車両のスクリプトを作成する。自車両の小隊は自分で操作することもできるので、必ずしも設定すなくてはならないわけではない。
set_sov_script_01.jpg
新規スクリプト「sov_move_tank_02」を作成。割り当てたいユニットと似た名前にしておくと、分かりやすい。しかし、同名にしてはならない

 

「Add new operation」より新しいオペレーションを追加。
「Type of operation」より「Movement mode」を選択
「Set parameters」より「Fire」を設定。

 

Movement modeについて
移動中の行動を設定することができる。何も設定しないと「自由戦闘」となり、たとえ移動中でも敵を発見すると接近して攻撃する。見える敵を排除すると通常の移動に戻る。
自由戦闘以外の行動はほとんどできないが、若干行動に幅を持たせることができる。

 

Fire:近~中距離戦闘。中近距離で割と直線的に戦闘する。撃ち合いながら強引に突破させたいとき向け。
Attack:中~遠距離戦闘(Max800mくらい)。遠距離戦させたいとき向け。ただし、なかなか前進しない。

 

Movementmodeでの戦闘パターンの指示は、自由戦闘よりも優先順位が低いため、対象ユニットが自由戦闘に入る前に設定しておく必要がある。そのため、大抵はスクリプトの一番最初に設定しておくのが無難。

 

次に赤い○を押して、行動させたい順番にコンターを設定していく。設定が終わったら赤○のチェックをはずす。
このとき、コンターを見ると、新たなコンターレイヤーとコンターが自動生成されていることが分かる。先程の「同名にしてはならない」理由はこの仕組みで、自動生成されたコンター名はスクリプトの名前が先頭についている。同名にしてしまうと、ユニット配置したコンターと途中まで同じ名前のコンターが量産されるため、ランダム配置機能の対象となってしまい、本来移動させたい場所へユニットが配置されてしまう事故が起こるためである。

同様にT-26のスクリプトも設定。
「sov_move_tank_02」とする。

歩兵スクリプト「sov_move_inf_01」を作成。
歩兵もほぼ同様であるが、最初に歩兵が固まらないようにするために「応用編」のように隊列を設定する。
赤○を押すと上のメニューが増え、そこから「Line」を設定できる。
set_sov_script_02.jpg
隊列を指示すると、標準状態が隊列になり、例えば、戦闘で一台(一人)遅れたりしていると、遅れた車両が隊列に復帰するまで待機したりする。

次に敵増援部隊を設定する。
3号戦車のスクリプト「ger_move_tank_01」を作成。
set_ger_script_01.jpg
今度は、ソ連兵が村に侵入するまで動かないようにしておきたい
「Type of operation」より「Waite the trigger」を設定。これはトリガー起動時まで待機せよとの命令である。
トリガーには「トリガー設定」で作成したトリガー「enter_inf_03」を設定。これで、村に歩兵が侵入するまで動かなくなる。
「Movement mode」より「Set parameteers」を「Attack」にする。
赤○を押し、横列を設定した後、村に向かってルートを設定する。

 

Pz.38(t)のスクリプト「ger_move_tank_02」を作成
set_ger_script_02.jpg
ほぼ3号戦車と同じだが、少し動きを変える。
「Wait the trigger」で「enter_inf_03」を設定。
「Movement mode」は「Fire」
隊列は特に設定しない。

 

装甲車と歩兵は同一のスクリプトを使用する。
「ger_move_apc_01」を作成。
内容は「ger_move_tank_01」とほぼ同じだが、ルートは新たに設定しておく。

 

これで必要なスクリプトは設定完了だ。

 

最後に作成したスクリプトを車両に割り当てる。割り当てなければ車両は動かない。
set_ger_script_03.jpg
「Units」で割り当てたいスクリプトのユニットを指定し、「Script(s)」にて割り当てたいスクリプトを設定する。

 

以上「コンター設置」「ユニット配置」「トリガー設定」「ユニット移動」の全てが完了すれば、ミッションのメインの作業は終了だ!
この時点で既に「遊べる」ようになっているはずである。
テストプレイに進んでみよう!

テストプレイ

これでメインの設定は終了、既に「遊べる」ようになった。
SteelFuryを起動して、実際に遊んでみよう。

味付け

さて、前までのパートで遊べるミッションができたと思う。しかし、戦いには背景があり、多くの兵士たちが関わっている。今のままでは、非常に味気ない。そこで、作った戦いに「味付け」をし、「戦いらしく」していく。
ここからはエディター上での作業以外にスクリプトファイルに直接書き込む作業が多くなる。そしてエディターとスクリプトファイルを行ったり来たりする操作が非常に多く煩雑なので、操作手順に注意してほしい。「notepad++」など作業の巻き戻しなどがやりやすいソフトを使うことを強く推奨する。

 
  • 無線演出
    無線演出はトリガーtraining_ussr_loc_data.texttraining_ussr_scripts.engscrを直接操作する。
    まず、どこに無線を入れるか考える。今回は「戦闘開始時」・「村占領時」・「作戦成功時」の3カ所に挿入する。
     
    「戦闘開始時」の無線演出
    • エディター上で新しいトリガー、「mission_start」を作成する。Trigger parametersは「Timer」を選択。ここで一旦保存
    • training_ussr_scripts.engscrを開く。
      message_01.jpg
      トリガー設定?同様に下の方の「triggers()」を見ると、先程作ったトリガー「mission_start」がある。そこの1.000となっている部分を0.000に書き換えて、training_ussr_scripts.engscr保存
    • エディターに戻って左上にあるファイルマーク「Load」を押す。スクリプトファイルで操作を行ったあと、エディターを操作する場合は必ず「Load」を押さなくてはいけない。押さないと、エディターに操作が反映されないからである。「Load」をせずに、エディターで操作を行った後保存してしまうと、反映されていない状態で行った操作が、スクリプトファイルに上書きされてしまう。
    • テキストを表示させるトリガーを使う。このトリガーは単体では動かないため、何かのトリガーに付随させる必要がある。
      トリガー「mission_start」をコピー。trigger parameter「The test message」を選択。
    • Time, minは「0.3」に設定。これが表示時間になる。0.3は18秒。
      message_02.jpg
    • Line of parameters に「txt_mission_start」と入力。これがメッセージを読み出すための名前となる。
    • training_ussr_loc_data.textを開く
    • 図に書かれた位置に記述していく。ルールは図の通り。プログラム触ったことある人にとっては容易だかもしれない。
      message_03.jpg
    • {;}の中に無線メッセージを記述していく。雰囲気の出そうなセリフを考えてみよう。
      今回は
      「= Commander =\nWe'll eliminate invaders from the village.\nFollow me, comrade!」
      と書いた。
      = 車長 =これより村から侵略者を排除する。ついて来い、同志!
      と言う意味となる(はず)。
    • 同様にあと2か所も設定していく。トリガー「enter_inf_03」をコピー、テキストトリガーを割り当て、「txt_occupy_inf」と記入。
    • トリガー「defeat_ger_03」をコピー、テキストトリガーを割り当て、「txt_mission_clear」と記入。保存。
      message_04.jpg
    • training_ussr_loc_data.textにメッセージを追加。
      message_05.jpg
      message_06.jpg
       
  • マップオブジェクトの設定
    マップオブジェクトは地図上で表示される記号です。エディター上でコンターを設定し、そこに記号を割り当てる。トリガーと連動させることで、作戦の進行状況に合わせて記号を変化させることもできる。
    「コンター設定」
    • マップオブジェクトを設定するコンターを設定。
    • コンターレイヤー「map」に矢印記号を設置したい場所にコンターを設定。「map_sov_arrow_01」を設置。このとき、向かせたい矢印の方向にコンターの向きも合わせておく
      map_object_04.jpg
    • 同様にコンターレイヤー「map」にソ連側の進攻矢印「map_sov_arrow_02」とドイツ側の進攻矢印「map_ger_arrow_01」「map_ger_arrow_02」を設置する。
      map_object_05.jpg
      map_object_06.jpg
    • 次に目標の街をマップ上に記述するためのコンターを設置する。このコンターに割り当てる記号はミッションの進行途中で変化する機能を持たせるために、別レイヤーに設定する
    • 新レイヤー「map_village_01」を追加。そこにコンター「map_village_01」を作成し、目標の村に設置する。角度は0度方向にする。
      map_object_07.jpg
    • コンターに記号を割り当てる。training_ussr_scripts.engscrを開き、cs_map()の部分に記入する。
    • 図のように必要事項を記入する。これは村の目標を設定している。
    • 村に「Village」と表示させたいのでtraining_ussr_loc_data.textを開き、無線メッセージ同様に文章を設定する。
      map_object_01.jpg
      map_object_08.jpg
    • このミッションは、「村に進行」→「村を占拠」→「敵の反撃」という流れになっている。その説明のため「ソ連側の村への矢印」→「村占拠によって村の色を変更と同時にドイツ軍の反撃の矢印」という順場にしたい。
    • 村の目標とソ連側の矢印の設定の次に、コンター起動を待つ命令「wait_tr」を設定。歩兵の占領フラグである「enter_inf_03」を設定
    • その次に指定レイヤーにあるマップオブジェクトの色を変える命令「change_mo_cols」を設定。レイヤー「map_village_01」を割り当て、赤色に変更する。
      map_object_02.jpg
    • そのあとにドイツの矢印を設定する。
    • 一通り設定が終わったら、マップの初期位置を変える命令「set_map」一番上に設定。自車のコンター「sov_tank_01」を割り当てる。
      map_object_03.jpg
    • 出来上がるとこんな感じになる
      map_object_09.jpg
       
  • ミッション進行に関する情報の追加
    ミッション開始時に事前情報や作戦説明の情報、ウェイポイントをまとめて記入する。
    • training_ussr_scripts.engscrを開き、cs_mainの部分に記入していく。これもトリガーと連携可能であり、必要に合わせて順番に表示していくことができる。
      mis_object_05.jpg
    • 最初にミッション説明を記入する。図のように「add_misobj」使う。
    • 「txt_training_ussr_brief」はメインパネルの部分に当たる。training_ussr_loc_data.textに内容を記入する。
      mis_object_01.jpg
      mis_object_02.jpg
    • txt_mission_orderはサブパネルの内容で、こちらは「data>k42>loc_rus>text>User_missions.text」に記入する
      mis_object_07.jpg
    • ウェイポイント(進行方向)の表示する。作戦中に注視すべき方向、目標を表示できる。
      mis_object_06.jpg
    • 図のように「sel_waypoint」命令を記入
    • 最初は村を注視したいので、コンター「map_village_01」を指定。
    • 色は明るめの赤色に設定。
    • ウェイポイントに「Attack」(攻撃しろ)と表示させたいので、「txt_attack_order」を設定。内容は「Users_mission.text」に「Attack」の文を記入。
    • 村を表示」→「敵の反撃方向を表示」にしたいので、間に「wait_tr」、トリガー「enter_inf_03」を挟む
    • 同様に今度は敵が攻撃してくる方向にウェイポイントを設定。コンター「map_ger_arrow_01」を設定。文は「txt_repel_order」を作成してUsers_mission.textから読み出す。
      mis_object_04.jpg
      mis_object_03.jpg
       
  • ミッション名・ロード前・中の説明と表示の設定
    ミッション名・ロード前・ロード中の説明・背景など、ミッション中以外の設定は「user_camp.engcfg」でまとめて設定する。
    • 「user_camp.engcfg」を開く。ミッション名・ロード中の説明文・ミッション選択画面の説明文は「User_mission.text」で記入する。
      mis_expl_01.jpg
    • 今までのテキストの記入方法でよいが、ロード中の説明文だけ違う。ロード中の説明文はいくつかの文章をランダムで出現させることができる。その場合文章と文章の間は「;」で区切る。テキスト記述終了の「;」の数と間違えないように注意。
    • ロード中の説明文を複数出す場合その総数「user_camp.engcfg」にて記さなくてはならない。今回は4種類作ったので「4」とする。デフォルトは「30」になっている。この数が合っていないと上手く呼び出せず「???」と表示される。
      mis_expl_02.jpg
    • ロード中の背景を設定する。最近の画面は大抵16:9なので、「1920x1080」のjpgで作成してもよいだろう。カッコイイ背景を作ってみよう。
    • ロード中の背景の上250ピクセル・下230ピクセル程度はロード画面の説明とロゴで切れてしまうので注意してほしい。
      mis_expl_03.jpg
    • ロード中の背景は「data>k42?loc_rus>images>backs」内に入れる。

デモプレイ

本当にお疲れ様でした!!
ここまで煩雑で分かり辛い説明について来ていただきありがとうございました。
これにてようやく全ての作業が終了しました。最後に通しでプレイしてみて、問題が無ければ完成です。もう少し修正したい点があれば、もう一度各項を見直してみたり、個別の説明を見ながらより良くしていってください。そして、自分の作りたいミッションを是非是非作ってみてください。

loading...

公開

 作った戦いをそのまま自分のPCの肥やしにしておくのはもったいない。是非作ったミッションを公開し、同じSteelFuryを好きな者同士、共有することでSteelFury界隈を盛り上げる一人となって欲しい。
公開に必要なデータファイル

 

コメント欄

  • ミッション制作の一連の流れをとりあえず説明するもの作りました。 -- 2018-01-31 (水) 19:32:20
    • 続き)まだ完成はしてませんが順次更新します。 -- 2018-01-31 (水) 19:33:17
  • 取り急ぎ「メイン」部分を作りました。説明がまだ雑ですが、それは追々何とかします (^^; -- 2018-01-31 (水) 22:00:24
  • マップオブジェクト(地図上の記号)の設定方法を追加しました。 -- 2018-03-13 (火) 19:11:31
  • 続いて作戦中の説明文とウェイポイントの設定方法を追加 -- 2018-03-13 (火) 22:35:09
  • とりあえず最後まで作りました。完成するとデモプレイのようになります。 -- 2018-03-14 (水) 10:25:37