スクリプトの基本


スクリプトって何ですか?

スクリプトはゲームの勝利判定、オブジェクトを動かしたり、あんなことやこんなことをするプログラムです。
TCEには(現在のところ) Objective, BodyCount, CaptureTheFlag の3種類のゲームモードがあり
それぞれ別のスクリプトが動いています。

マップ名_gt5.script
Objectiveモード用スクリプト

マップ名_gt7.script
Bodycountモード用スクリプト

マップ名_gt2.script
CaptureTheFlagモード用スクリプト

pk3を作るときはこの三つにスクリプトを記述しないといけません。

スクリプトの構造

スクリプトの構造は Java や C++ などのオブジェクト指向言語の構造に似ています。

スクリプト名 { 関数A { 関数Aの中身 ・・・ } 関数B { 関数Bの中身 ・・・ } } ・・・・

スクリプト名はオブジェクト指向言語のクラス名に相当するものと思えばいいでしょう。

関数

関数はあるイベントが起こったときに決まって呼び出される関数と、ユーザーが定義した関数があります。
具体的な例で見てみましょう。

lamp_script // スクリプト名 { spawn // ゲーム開始直後に必ず呼ばれる関数spawn { wait 200 setstate lamp1 invisible } trigger show // ユーザー定義関数 show { setstate lamp1 default trigger game_manager lampshow //他のスクリプトの関数呼び出し } }

最初の spawn { ... } ブロック は、ゲーム開始直後に必ず呼ばれるブロックです。*1
このように、ある決められたイベントが発生したときに呼ばれる関数は名前が決まっています。
例えば destroyed(エンティティが壊された!) や dynamited(C4を仕掛けられた) など。

ユーザー定義関数は trigger 宣言 をすることで
他のスクリプトや target_script_triggerエンティティ から呼び出すことができます。

他のスクリプトの関数を呼ぶ際には

trigger スクリプト名 関数名

という形で呼びます。
上の例では game_manager というスクリプトの中の lampshow という関数をコールしてます。
コールされた関数の処理が終わるのを待つことはしないで、すぐ次の処理に移ります。

もっと詳しく。。。

基本的な知識はこんなもんで十分です。
あとはたくさんスクリプトの実例を見るのがいいでしょう。

関数、変数の使い方、演算、条件分岐...などなど、書き出したらキリがないので
http://games.chruker.dk/enemy_territory/scripting_reference.php (英語)
を読んでください。


*1 初期状態を設定したい場合はこの spawn ブロック内に記述します。
最初に wait 200(200_秒の待ち)を指定しているのは バグ回避のための常套句で
spawn ブロック内で何らかの処理をしたいときには必ず入れるようにしてください。