TRLE Level BOX
This Site is an unofficial site by NGLE fan.

NGLE講座

■スクリプトコマンドに関する基本的な事

目次

-TRLEとNGLEで変わった点-

スクリプトコマンドはTRLEから激変しました。TRLEは、

FlyCheat=ENABLED

と書くだけでよかったものがNGLEでは

WindowsFont=1, Arial, WFF_BOLD+WFF_SHADOW, 40, 1, 2

と複雑なものになり、しかもスクリプトコマンドだけで動作していたものが、NGLEでの変更が必要なものもあります。
また、TRLEではScript.txtをメモ帳で編集し、batファイルを実行してdatファイルを作成していたものが、NGLEからはNG_Centerを使用して編集を行い、datファイルを作成します。
これは、English.txtでも同様で、NG_Centerを使用して編集を行い、datファイルを作成します。

-スクリプトコマンドを書いてみよう-

  1. NG_Centerを起動して、【Script】タブを表示します。
  2. 表示されている文字に「FlyCheat=ENABLED」または「FlyCheat=DISABLED」が見つかるまでスクロールします。
    もしなければ、[Options]と書かれているすぐ下までスクロールします。
  3. カーソルを合わせて「ENABLED」を「DISABLED」に変更します。または、「DISABLED」を「ENABLED」に変更します。
    FlyCheat行がない時は「FlyCheat=ENABLED」と記述します。
  4. 変更したら、下の方にある『Save』ボタンをクリックし、『Build』をクリックします。緑の所に「Build completed: no error」と表示されたらOKです。
    これで、スクリプトコマンドが変更されました。英語のエラーダイアログが表示されたら、何かが間違っています。スペルミス等がないか確認してください。
  5. ゲームを起動してDOZYを同時に押してみてください。
    FlyCheat=ENABLEDと記述した場合はララが宙に浮いたような状態になり、
    FlyCheat=DISABLEDと記述した場合は何も起こらないはずです。

-スクリプトコマンドを理解する前に-

スクリプトコマンドの説明を始める前にNGLEのスクリプトコマンドには多くのフィールド、フラグ、引数、パラメータ、コンスタンツ、オペランド、MNEMONIC CONSTANTといった馴染みのない単語が数多く登場します。
プログラミングを経験したことのある方にはある程度予測がつくとは思うのですが、そうでない方は何のことだかサッパリわかりません。
そこで、そんな方のために簡単な例をあげて説明してみたいと思います。

以下の画像をみてください。この画像にはいろんな情報が含まれています。まずは色は赤で、形は丸。
ngle0330_01.jpg
次の画像では、青になりました。
ngle0330_02.jpg
更に次の画像では横長です。
ngle0330_03.jpg
これは、縦長ですね。
ngle0330_04.jpg
この中からどれか一つ画像を選択するのとしたら、どうでしょう。
人間相手なら、
「ほれ。そこにあるやつ。」
で通じたりもしますが、コンピューター相手ではそうはいきません。
目的の画像が赤なのか、青なのか、縦の長さはどうなっているのか?いろんな情報が不足しています。
そこで今度は、「色は青で、横の長さはXXで、縦の長さはYYの画像だよ。」
と教えてあげると、目的の画像を選択できます。

では、スクリプトコマンドの話に戻りましょう。
NGLEの世界では、上記の例の「画像を選択する」というのがスクリプトコマンドです。
そして、青とか、横の長さとか、縦の長さとかいうのが、スクリプトコマンドでのフィールド、引数、パラメータだと思ってください。この講座ではすべてフィールドという用語で説明することにします。
例では、「画像を選択する」でしたが、実際のNGLEでは、「文字を画面に表示する」とか、「セーブ画面を変更する」とかスクリプトコマンドによって処理する内容が異なります。

-スクリプトコマンド概要-

スクリプトコマンドによって多少の違いがありますが、大体以下のようになります。

スクリプトコマンドはゲームを起動する前に設定するもので、その設定はゲーム中変わることはない。(ForceVolumetricFXコマンドのような例外もあります。)
スクリプトコマンドによって処理する内容が異なる。
スクリプトコマンドにはフィールドがあり、それでスクリプトコマンドを細かく制御する。
フィールドにはコンスタンツとフラグというものがある。フィールドはあくまで説明上つけられた名前で、数字を入力するか、コンスタンツやフラグのように文字を入力する。
コンスタンツは一つだけ入力し、フラグは「+」記号でつなげて複数入力することができる。
コマンド=フィールド1,フィールド2,フィールド3,フィールド4
                          ↓
            フラグ1+フラグ2+フラグ3+フラグ4
            フィールドの中にフラグが含まれる。
スクリプトコマンドはそれぞれIDを持つことができ、そのIDで他のスクリプトコマンドと情報の受け渡しを行う。
以下の例をみてください。
ColorRGB=1, 255,255,255
WindowsFont=1, Arial, WFF_BOLD+WFF_CENTER_ALIGN, 40, 1, IGNORE
ColorRGB行の太字がこのColorRGBのIDです。
次に、WindowsFont行の最初の数字もこのWindowsFontのIDです。後に続く太字の「1」が、前の行で設定されたColorRGB行のIDです。
この数字でColorRGB行で設定された内容をWindowsFont行は受け取っています。
同じようにWindowsFont行の内容を他のスクリプトコマンドに渡したい場合は、WindowsFontのIDを他のスクリプトコマンドに記述します。
IDの受け渡しは上から下へと処理される。
以下の例をみてください。
WindowsFont=1, Arial, WFF_BOLD+WFF_CENTER_ALIGN, 40, 1, IGNORE
ColorRGB=1, 255,255,255
先述の例とよく似ていますが行の順番が逆になっています。
スクリプトコマンドは上から順に処理されるので、この例ではWindowsFont行が受け取るIDが見つかりません。
この例ではNG_Centerでエラーにはなりませんが、IDの受け渡しを行う場合は注意してください。
スクリプトコマンドは書く場所が決まっていて、その場所によって影響の出るレベルが異なる。
Script.txtには[Options][Title][Level]という3つのセクションが存在します。
[Options][Title]セクションに書いたスクリプトコマンドは全てのレベルで有効になります。
(Demoコマンドのような例外もあります。)
[Level]セクションに書いたスクリプトコマンドはそのレベルのみ有効になります。
スクリプトコマンドをトリガのように使用出来る。
詳しくは後述。
スクリプトコマンドをOCBのように使用出来る。
OCBでオブジェクトの動作を変更できますが、スクリプトコマンドでも細かな設定が変更できます。

-NGLEヘルプ内のスクリプトコマンド-

では、実際にスクリプトコマンドがどのようなものかみてみましょう。
NGLEのヘルプはすべて英語ですが、一応以下の書式にしたがって書かれています。
Layer1コマンドを例に見てみましょう。

Layer1=
スクリプトコマンドの名前です。名前の後ろに「=」がついています。この場合はLayer1コマンドということになります。
Syntax: Layer1=Red,Green,Blue,Speed
構文ともシンタックスとも呼ばれるもので、実際にScript.txtに書く際の書式です。
1+1=2や、1÷1=1みたいなものです。そのため+や÷の位置を間違えると答えが違ってしまうように、この書式に沿ってスクリプトコマンドを書かないと正常に動作しません。
だからといって「Layer1=Red,Green,Blue,Speed」と書くわけではありません。
ヘルプで説明する便宜上名前がついているだけであって、実際は
Layer1=0,128,64,0
のように書きます。
スクリプトコマンドによっては
FlyCheat=ENABLED
というようにヘルプの文字をそのまま書くものもあれば、一部のフィールドだけ文字にしたりと様々です。文字を書いた場合は、English.txtにも同じ文字が必要な場合もあります。
To use in [Level] section when Horizon=ENABLED
このスクリプトコマンドを書く場所の説明です。
Script.txtをよくみると[]で囲まれた部分(セクション)があるはずです。そのセクションとヘルプのセクションが同じ所にスクリプトコマンドを書きます。
This command set the color of sky texture and the speed of movements of sky texture
スクリプトコマンドの機能、使用目的が最初の一文(または段落)に書かれています。
以降の英文は各フィールドの説明になっています。
ここでは「Red,Green,Blue,Speed」がフィールドです。
フィールドの説明の中には()で囲まれたものがあります。これはフラグと呼ばれるもので、フィールドをさらに細かく制御するためのものです。
このフラグについてはヘルプの中に詳しい記述がありません。ほとんどの説明はNG_Center【Reference】タブの中にあります。

-スクリプトコマンドの書き方-

TRLEは、「ENABLED」が「EANBLED」となっていてもエラーは表示されず、datファイルが作成されていました。もちろんつづりが間違っているので、正常には動作しません。
ところが、NGLEはNG_Centerを使ってdatファイルを作成するため、エラーがあるとdatファイル作成時にメッセージが表示されます。
ここではスクリプトコマンドを書く際に注意して欲しい初歩的な事を書いておきます。

「=」の前に空白を入れない。
FlyCheat =ENABLED
はエラーが表示されます。
「=」の後の空白は処理されない。
FlyCheat=    ENABLED
FlyCheat= ENABLED
はエラーが表示されません。どちらも正常に動作します。
大文字/小文字は関係ない。
FLYCHEAT=ENABLED
flycheat=enabled
はエラーが表示されません。どちらも正常に動作します。
(カンマ)を「、」(句読点)にしない。
TriggerGroup=21$02200, 17, $0124
はエラーが表示されます。
コマンドを途中で改行したい場合は直前に「>」を入れる。
TriggerGroup=21, $02200, >
             17, $0124
コマンドを途中で改行した場合は直前に「,」を入れる。
TriggerGroup=21, $02200, >
             17, $0124
構文内で使用しないフィールドは、省略せずにIGNOREと記述する。
Plugin=1, plugin_people, IGNORE
注釈を入れる時は;(セミコロン)を記述する。
FlyCheat=ENABLED ;FlyCheatを有効にする
注釈は日本語も記述可能です。
スクリプトコマンドごとに書く場所に注意する。
FlyCheatコマンドは[Options]セクションに書かなければなりません。
[Level]セクションに書くとエラーが表示されます。
English.txtにも書く必要がある。
スクリプトコマンドによってはEnglish.txtにも記述が必要な場合があります。
English.txtに記述がないとエラーが表示されます。
二重記述が許されないものがある。
スクリプトコマンドによっては二重記述が許されないものがあります。
ForceVolumetricFX=DISABLED
ForceVolumetricFX=ENABLED
のように書くとエラーになります。

-トリガのようなスクリプトコマンド-

本来スクリプトコマンドは、ゲーム中変わることのない設定のためだけに使用されていました。
ところがNGLEからはスクリプトコマンドでゲーム中の設定を変更することが出来ます。(例えば、雷が止んで晴れたりとか。)
それはスクリプトコマンドがトリガのように使用できるからです。
スクリプトコマンドをトリガのように使用するパターンは以下の通り。

トリガの重複の回避。
TRLEではトリガの重複に制限がありました。
NGLEではスクリプトコマンドで処理することができます。
トリガ数の減少。
敵を倒した時に発動するトリガは、床一面に設置する必要がありました。
またFLAME_EMITTER2のトリガなど同一スクエアに複数設置する必要がありました。
スクリプトコマンドを使うとそれらを一つで処理することができます。
トリガ機能の拡張。
TRLEではトリガで設定できる値は、Timerフィールドと、トリガタイプの隣のフィールドの2つしかありませんでした。
スクリプトコマンドを使うとトリガ(主にFLIPEFFECTトリガ)の処理をより細かく制御できるようになります。
トリガの条件の指定。
TRLEではトリガのコードビットやオブジェクトのOCBを使ってトリガの発動条件を指定していました。
スクリプトコマンドを使うとトリガ(主にFLIPEFFECTトリガ)の発動条件をさらに細かく制御できるようになります。