【ナメクジでもわかるエディット講座】


Stage.3-1 ミッションを飾る設定スクリプト

 ここまでで、ミッションエディターのコマンドの使い方はもうほとんどわかったと思います。もうミッションも作っていろいろスクリプトも工夫しているところでしょう。
 ですが、まだまだ人様のミッションと比べると見劣りするかと思います。それは何が違うのか・・・?一つづつ検証していってみましょう。なお、ここで紹介している様々な拡張子のファイルは、すべてメモ帳で開くことが出来ます。

 まず、一番最初に気づくのはミッション開始時かと思います。急に画面が表示され荒削りな感じがしますよね。これを格好良く少しづつ表示するようにするにはどうすればいいか・・・?
 これは簡単にできます。この
init.sqsをダウンロードしてミッションと同じフォルダに入れてください。これで一発で目標は完了しました。
 この「init.sqs」はミッション開始と同時に読み込まれるコマンドを設定できます。もちろんBLACK INをWHITE INにすれば白い画面から始まりますし、ObjstatusのHIDDENコマンドもここに書き込んで始めて有効となります。

 次に、ミッション開始時の「Get ready...」という文字を変える方法を説明します。
 これには
description.extというファイルを使うのですが、このファイルは非常に使い方が難しいです。失敗すると一発でOFPが落ちます。

 まず最初の「...Score」というのは、デブリーフィングで出る評価の設定です。maxscoreで定義したスコアになると丸五個になるようです。
 次の「Show...」というのはすべてそのままの意味で、1で表示、0で非表示に出来ます。
 最後に重要なのが「onLoadMission」です。見たとおり、そこに入れた文字が「プレブリーフィング」として開始時に表示されることとなります。

 さて、次にBOHの武器とマガジンの名前がずらりと並んでいますが、これはブリーフィング時に武器を設定できるようにするコマンドです。
 Class...は武器及びマガジンの名前、Count...は数を表します。とりあえず、通常のミッションで使う設定はここまでです。まだこの例ファイルには画像や音声の定義がありますが、とりあえずほっといて結構です。

 次に、皆さんお待ちかねの
briefing.htmlです。バツ印だらけで見づらいですが、重要なのはそこではないです。とりあえずメモ帳で開いてみてください。<a name="Main"></a>という部分がありますよね。この後の部分に文字を書くことによって、ブリーフィングに文字が表示されるのです。「Main」はノートを、「Plan」はプランを、「OBJ_...」は...番目の項目を、「Debriefing:End...」はEnd#...で終わらした番号のデブリーフィングを表します。フロントページなどのHP作成ソフトがあればわかりやすいですが、メモ帳でも十分編集できます。
 ちなみに、バツ印がつきまくってるのは日本語を使っているからなのですが、これの作り方はまた後日紹介します。

 最後に
overview.htmlです。ミッション選択時に表示される説明の部分を編集することができます。まあブリーフィングと似たような感じです。
 ここにはJPG形式の画像ファイルを使うことができますので、簡単にカッコイイ説明を書くことが出来るでしょう。
 ちなみに、オフシャルのキャンペーンの用に写真風に格好良くするにはまずPAAをTGAに変換、そしてアルファチャンネルを個別に保存、写真ファイルに上から縦横サイズを調整したスクリーンショットを貼り付け、TGAに戻してアルファチャンネルを重ね、最後にPAAで保存すればOKです。

 チャンネルやら、TGAやらPAAやら意味不明な単語が出てきましたが、これは「Stage.3-3 日本語字幕の作り方」で説明することにしましょう。


Stage.3-2 How to make a cutscene

 さて、次はカットシーンの作り方を説明します。
 もうここまで進んでいる人はたぶんトリガーを置きまくってムービーを作っていると思いますが、たぶんトリガー置きまくりで意味わからなくなるのと、細かな視点が調整できないこと、そして長いカットシーンが作れなく、あの方法は非常に不便です。カメラスクリプトならこれらの問題は一挙に解決します。
 カメラスクリプトを使うときは、「camera.sqs」なり自分でわかりやすい名前を付けてミッションと同じフォルダに格納してください。呼び出すときはコマンド「[] exec "camera.sqs"」を使えばOKです(最初から呼び出すときはユニットのInit欄に)。通常の外部スクリプトと同様にスクリプトを入力することもできます。

_camera1 = "camera" CamCreate [0,0,0]
_camera1 CameraEffect ["INTERNAL","BACK"]
_camera1 CamSetTarget aP
_camera1 CamSetRelPos [0,-1000,50]
_camera1 CamCommit 0
_camera1 CamSetRelPos [0,-750,50]
_camera1 CamCommit 13
@(CamCommitted _camera1)
_camera1 CameraEffect ["TERMINATE","BACK"]
CamDestroy _camera1

 カメラスクリプトは基本的にこのようなリズムの繰り返しで作られています。まずわかりやすいところから見ていきましょう。

 _CamSetTarget aP...これは見ての通り、aPというユニットにカメラをあわせます。
 _camera1 CamSetRelPos [0,-1000,50]...この中の数字は、対象からの最初の距離を表します。単位はメートルです。
 一段とばして、_camera1 CamSetRelPos [0,-750,50]...この中の数字の距離にカメラを移動させます。
 _camera1 CamCommit 13...上で設定した距離に移動させる時間をここで決定します。

 変更が必要なのは以上の4部分です。上の10行の繰り返しでカットシーンは進行していきます。これについてはFWWのカットシーン11が参考になるでしょう。



 さて、まだまだこれでは不満足でしょう。というのも、この方法ではユニットからユニットへカメラ視点を移動させることが出来ず、カメラを止めるためにもいちいち新しく記述しなければならないので全体の見栄えが悪くなることです。では、上の10行のコマンドの説明をしていきましょう。

1:_camera1 = "camera" CamCreate [0,0,0] ・・・ カメラを座標[x,y,z]の位置に作成します。
2:_camera1 CameraEffect ["INTERNAL","BACK"] ・・・ カメラに演出効果を与えます。とりあえずここは変えなくて良いです。
3:_camera1 CamSetTarget aP ・・・ 上で説明したとおり、カメラの対象をaPというユニットにします。
4:_camera1 CamSetRelPos [0,-1000,50] ・・・ これは、カメラの対象からの距離を設定します。
5:_camera1 CamCommit 0 ・・・ カメラにこの時間で上の演出効果を与えます。
6:_camera1 CamSetRelPos [0,-750,50] ・・・ 上同。
7:_camera1 CamCommit 13 ・・・ 上同。
8:@(CamCommitted _camera1) ・・・ 今まで上で書いたコマンドを起動します。スイッチをオンにするような感じです。
9:_camera1 CameraEffect ["TERMINATE","BACK"] ・・・ カメラに「視点を削除」する演出を与えます。
10:CamDestroy _camera1 ・・・ カメラを破壊します。

 まずカメラスクリプトの最初の五行は数字以外は変える必要がありません。カメラを作成してから対象までの最初の距離に時間を使うと、[0,0,0]、つまり海の端からカメラが移動してくるまでの時間がかかるからです。そしてカメラを一度止めるならその次に6を使いましょう。止める時間は「~3」などと書けばOKです。
 次に、まず最初の対象にカメラをあわせます(3と4と5と8)。そして必要なら待機時間を設定し、次の対象にカメラをあわせてください(3と4と5と8)。もちろん、距離を変えずカメラをそのまま対象の方に向けるなら4は必要ありません。
 そして、カットシーンの最後には9、10を入れ、カメラを破壊してEnd #1をオンにすればいいわけです。

 ここまでごてごてと書いてきましたが、ようはこういうことです。

_camera1 = "camera" CamCreate [0,0,0]
_camera1 CameraEffect ["INTERNAL","BACK"]
_camera1 CamSetTarget tank1
_camera1 CamSetRelPos [0,-10,3]
_camera1 CamCommit 0
@(CamCommitted _camera1)

~1

_camera1 CamSetRelPos [0,-5,3]
_camera1 CamCommit 3
@(CamCommitted _camera1)

_camera1 CamSetTarget tank2
_camera1 CamSetRelPos [0,10,5]
_camera1 CamCommit 4
@(CamCommitted _camera1)

~5

_camera1 CamSetRelPos [0,10,10]
_camera1 CamCommit 4
@(CamCommitted _camera1)
_camera1 CameraEffect ["TERMINATE","BACK"]
CamDestroy _camera1

 つまり、10行いちいち書かなくても必要なのを状況に合わせて使えばいいということです(これに関してはFWWのエンディングが参考になります)。


Stage.3-3 日本語字幕の作り方

 さて、いよいよ真打登場、我々日本人がずっと望んでいた、日本語字幕の登場です。
 OFPのシステムではそのまま日本語を表示することはできませんが、画像表示システムを使えば実現することができます。
 このマニュアルではフリーソフトのGIMPを使う場合を紹介します。

 まずは両方に共通の作業として、description.extを入れておく必要があります。画像の調整は『class RscTitles』で行うことができ、各種の設定をすることが出来ますが、これについてはいろいろさわればその効果が分かるはずです。

 GIMPを使った場合の日本語字幕の表示方法はVictor Troskaさんからパワーポイントの形式でまとめたファイルを頂きました。
 作者であるVictor Troskaさんには長い間更新しなかったことにお詫び申し上げます。


トップへ