Luaスクリプトの保存場所
GameGuruのLuaスクリプトは以下の場所に置いてあります。
C:\Program Files\Steam\steamapps\common\Game Guru\Files\scriptbank
自分の作ったLuaスクリプトもここに入れていきます。
サンプルゲームのLuaスクリプトも各種ありますので、チェックしてみてください。
GameGuruのLuaのバージョン
自分の環境で確認したところ 5.2 でした。
※ 2016/1/13 現在
バージョンアップすることはあるでしょうが、バージョンダウンすることはないでしょう。
Luaの5.2は日本語での情報もありますし、大丈夫ですね。
そもそも Lua って何さ?
Luaはよくゲームエンジンなどの組み込みスクリプトとして利用されるスクリプト言語です。
そんなに高機能なスクリプト言語ではないのですが、軽量で使いやすく C/C++ 等と連携しやすいスクリプト言語です。
NScripterとかでも採用されてますね。あと昔のファイナルファンタジー14とか。
手続き型の言語なので理解しやすいのも嬉しいですね。
Lua 入門 とかでググって覚えてみてください。
GameGuruでは AI を書いたり、イベントを書いたりするのに使っています。
全く Lua が書けなくても GameGuru は遊べますが、まぁ書けたほうがやれることが多くなって良いと思います。
GameGuruにおけるLuaスクリプトの基本
とはいえ、両者とも英語の情報なので、ここでも簡単にではあるが日本語で解説しよう。
ファイル名と関数名の関係
GameGuruではファイル名と同じ名前を関数名のプリフィックスとして使用する。
例えば health.lua というファイル名でスクリプトを作成したとする。
その場合は関数名は以下のようになる。
function health_init(e)
-- ここに初期化の処理を書く
end
function health_main(e)
-- ここにメイン処理を書く
end
function health_exit(e)
-- ここにエンティティが破棄された時の処理を書く
end
このように関数名の前にファイル名をつけるのがお約束である。
上記で紹介した init、main、exit はそれぞれGameGuruでは特殊な意味を持つ関数である。
init は読み込み時にまず最初に自動的に実行される関数で、データの初期化処理が書かれる。
たとえは画像を読みこんだり、音楽を読みこんだり、変数を初期化したり……などなど。
この関数は必須である。
main はゲームループの中で実行される関数で、メインの処理をここに書く。
まぁ主な処理はここに書くということだ。
この関数は必須である。
exit はエンティティが破棄される時に実行される関数で、やや特殊な関数である。
エンティティが破棄される時というのは、簡単にいえば プレイヤーに殺された時 のことである。
なので、断末魔の音声を再生したりする。「やられたー!!」とか「うぎゃー」とか。
あとは死んだ瞬間に当たり判定を消すなどもしている。
実際に敵のAI用のLuaスクリプトではそういう使われ方をしている。
init や main と違って、この関数は必須ではない。(書かなくても良い)
init main exit 以外の関数は、好きな名前をつけて良い。ファイル名をつけなくとも良い。
GameGuruで定義されている関数の解説
global.lua には公式には紹介されていないが、定義されている関数も多い。
Prompt(string) |
stringに指定した文字列を画面の下の方に表示する。なお半角英数字にのみ対応。日本語とかは表示できません。 |
PromptDuration(str,v) |
vで指定した秒数だけテキストを表示する |
PromptTextSize(v) |
Prompt関数で表示されるテキストのサイズを 1 から 5 の範囲で設定する。5 はとても大きい |
PromptLocal(e,str) |
指定したエンティティにくっつくようにテキストを表示する |
SetFogNearest(distance) |
フォグ(霧)を表示しはじめる距離(distance)を指定する |
SetFogDistance(distance) |
フォグの表示を終える距離を指定する |
SetFogRed(red) |
フォグの赤っぽさを 0 から 255 の範囲で指定する |
SetFogGreen(green) |
フォグの緑っぽさを 0 から 255 の範囲で指定する |
SetFogBlue(blue) |
フォグの青っぽさを 0 から 255 の範囲で指定する |
SetFogIntensity(v) |
フォグの濃さを 0 から 100 の範囲で指定する |
SetAmbienceIntensity(percentage) |
アンビエント(環境光)の強さをパーセンテージ(0 から 100 の範囲)で指定する |
SetAmbienceRed(red) |
アンビエントの赤っぽさを 0 から 255 の範囲で指定する |
SetAmbienceGreen(green) |
アンビエントの緑っぽさを 0 から 255 の範囲で指定する |
SetAmbienceBlue(blue) |
アンビエントの青っぽさを 0 から 255 の範囲で指定する |
SetSurfaceRed(red) |
モデルの表面の色の赤っぽさを 0 から 255 の範囲で指定する |
SetSurfaceGreen(green) |
モデルの表面の色の緑っぽさを 0 から 255 の範囲で指定する |
SetSurfaceBlue(blue) |
モデルの表面の色の青っぽさを 0 から 255 の範囲で指定する |
StartTimer(entity index) |
エンティティに関連付けられたタイマーを 0 からスタートする |
GetTimer(entity index) |
エンティティに関連付けられたタイマーの値を取得する。単位はミリ秒単位 |
Destroy(entity index) |
指定のエンティティを破棄(デストロイ)する。もちろん破棄したエンティティは以後は使えない。画面からも消される。 |
CollisionOn(entity index) |
指定されたエンティティに衝突判定を作成する。 |
CollisionOff(entity index) |
指定されたエンティティの衝突判定を破棄する。死体とかの衝突判定はこの関数で破棄した方がゲーム全体の処理が軽くなるよ! |
Hide(entity index) |
指定したエンティティを非表示にする。 |
Show(entity index) |
指定したエンティティを表示する。Hide(e)で非表示にしてからShow(e)で表示しましょうね。 |
Spawn(entity index) |
指定したエンティティがゲーム開始時にスポーンしていない場合はスポーンさせる。エンティティのプロパティの Spawn At Start? を No と指定した場合に使用する |
Collected(entity index) |
指定したエンティティの collected プロパティを 1 に設定する。collectedプロパティは g_Entity[e]['collected'] で参照可能。 |
MoveUp(entity index,amount) |
指定したエンティティを 指定した amout の分だけ上方向に移動する |
MoveForward(entity index,amount) |
指定したエンティティを 指定した amout の分だけ前進させる |
MoveBackward(entity index,amount) |
指定したエンティティを 指定した amout の分だけ後退させる |
ModulateSpeed(entity index,speed) |
指定したエンティティの移動速度およびアニメーション速度を変更する |
SetAnimation(index) |
後で使用するために、アニメーションのインデックス値を設定する |
SetAnimationFrames(start,end) |
後で使用するために、アニメーションのインデックス値を範囲(start から endの範囲)で設定する |
PlayAnimation(entity index) |
指定したエンティティの先に設定しておいたアニメーションのインデックス値 または 範囲 のアニメーションを再生する |
LoopAnimation(entity index) |
指定したエンティティの先に設定しておいたアニメーションのインデックス値 または 範囲 のアニメーションをループ再生する |
StopAnimation(entity index) |
指定したエンティティのアニメーションを停止させる |
SetAnimationSpeed(entity index,speed) |
指定したエンティティのアニメーション速度を設定する |
GetAnimationFrame(entity index) |
指定したエンティティのアニメーションフレームを取得する |
CharacterControlUnarmed(entity index) |
指定したエンティティのステートを unarmd(非武装) にする |
CharacterControlLimbo(entity index) |
指定したエンティティのステートを limbo(移行) にする |
CharacterControlArmed(entity index) |
指定したエンティティのステートを armed(武装) にする |
CharacterControlFidget(entity index) |
指定したエンティティのステートを fidget(そわそわ) にする |
CharacterControlDucked(entity index) |
指定したエンティティのステートを ducked(しゃがみ) にする |
CharacterControlStand(entity index) |
指定したエンティティのステートを stand(立っている) にする |
SetCharacterToWalk(entity index) |
指定したエンティティの移動方法を 歩く にする |
SetCharacterToRun(entity index) |
指定したエンティティの移動方法を 走る にする |
RotateToPlayer(entity index) |
指定したエンティティをプレイヤーの方に向かせる |
AddPlayerWeapon(entity index) |
指定の武器エンティティをプレイヤーに追加する(簡単にいえば指定の武器をプレイヤーにあげる) |
AddPlayerAmmo(entity index) |
指定の弾薬エンティティをプレイヤーに追加する(簡単にいえば指定の弾薬をプレイヤーにあげる) |
AddPlayerHealth(entity index) |
指定の回復薬エンティティをプレイヤーに追加する |
WinZone(entity index) |
プレイヤーがレベルに勝利したことを通知し、次のレベルに移動する |
Checkpoint(entity index) |
プレイヤーがチェックポイントに到達したことを記録したことを通知する |
GetPlayerInZone(entity index) |
プレイヤーが指定のゾーンに入っているかどうかを返す。この関数が 1 を返したら、プレイヤーが指定のゾーンに入っているということ。 |
PlaySound(entity index,slot) |
指定のエンティティの指定のサウンドスロットに設定されているサウンドを再生する |
LoopSound(entity index,slot) |
指定のエンティティの指定のサウンドスロットに設定されているサウンドをループ再生する |
StopSound(entity index,slot) |
指定のエンティティの指定のサウンドスロットに設定されているサウンドを停止する |
SetSoundSpeed(speed) |
先に設定したサウンドの再生速度を設定する。単位はヘルツ |
SetSoundVolume(volume) |
先に設定したサウンドの再生音量を 0 から 100 の範囲で設定する |
FireWeapon(entity index) |
指定したエンティティがプレイヤーに対して発砲する |
Include ("ai_cover.lua") |
init関数で使用する。指定のスクリプトを読み込む |
SwitchScript ( e,"ai_cover" ) |
指定のAIスクリプトに切り替える |
SetCharacterToStrafeLeft(e) |
左方向に機銃掃射する |
SetCharacterToStrafeRight(e) |
右方向に機銃掃射する |
RotateX(e,v) |
指定のエンティティを X軸 で回転させる |
RotateY(e,v) |
指定のエンティティを Y軸 で回転させる |
RotateZ(e,v) |
指定のエンティティを Z軸 で回転させる |
Scale(e,v) |
指定のエンティティのスケール(大きさ)をパーセンテージで設定する |
SetCharacterVisionDelay(e,v) |
不明(Sets the speed at which a) |
SetEntityHealth(e,health) |
エンティティのヘルスを設定する。0 に設定した場合、そのエンティティは破棄(デストロイ)される |
SetPlayerHealth(health) |
プレイヤーのヘルスを設定するassign a new health value to the player (total health). |
SetPosition(e,x,y,z) |
指定したエンティティの絶対座標を設定する。指定したエンティティの物理演算(physics)がOFFに設定されている時のみ使用できる。もし GravityOff(e) が指定したエンティティに対して実行されていない場合、絶対座標は地形に合わせて配置される。 |
SetRotation(e,x,y,z) |
指定したエンティティの回転を設定する。物理演算(physics)をOFFにしているエンティティにのみ使用する |
ResetPosition(e,x,y,z) |
指定した物理演算の効いているエンティティの配置をリセットする。 |
GravityOff(e) |
指定したエンティティの物理演算をOFFにする。init関数内で実行する。 |
GravityOn(e) |
指定したエンティティの物理演算をONにする |
HurtPlayer(e,v) |
プレイヤーにダメージを与える |
HideTerrain() |
地形を非表示にする。※ 非表示になるだけで地形との衝突判定は有効である |
ShowTerrain() |
地形を表示する |
HideWater() |
水を非表示にする |
ShowWater() |
水を表示する |
PlaySoundIfSilent(e,v) |
指定したエンティティがサウンドを何も再生していない時のみ、指定したサウンドを再生する |
PlayNon3DSound(e,v) |
3Dサウンドではなく、普通にサウンドを再生する。※ 普通のPlaySound(e, v)はプレイヤーとエンティティが近くにいたら、サウンドが大きく聞こえるし、プレイヤーとエンティティが離れていたら小さく聞こえる3Dサウンドで再生される |
TransportToIfUsed(e) |
IFUSEDフィールド内のオブジェクトの位置にプレーヤーを移動 |
FinishLevel() |
強制的に現在のレベルを終了させる |
PlayCombatMusic(playTime,fadeTime) |
戦闘音楽を再生する ※ ミュージックトラック2に設定されている音楽を再生するだけ |
PlayFinalAssaultMusic(fadeTime) |
突撃音楽を再生する ※ ミュージックトラック3に設定されている音楽を再生するだけ |
HideHuds() |
HUDを隠す ※ HUDとはヘッドアップディスプレイの略で、プレイヤーのヘルスとか今持っている武器とかを画面下で表示しているアレのこと |
ShowHuds() |
HUDを表示する |
FreezeAI() |
AIの動作を停止させる |
UnFreezeAI() |
停止させたAIの動作を復活させる |
FreezePlayer() |
プレイヤーの移動やマウスによる視界の移動などを停止させる ※ 要は操作できないようにする |
UnFreezePlayer() |
停止させたプレイヤーの移動や視界の移動などを復活させる |
DisableMusicReset(v) |
不明。よくわかんない。(call at start of game to suspend normal music restart behaviour) |
LoadImages(str,v) |
scriptbank\imaes フォルダ配下の指定したフォルダの画像を一括でロードする |
SetImagePosition(x,y) |
画像を描画する座標を x と y で設定(パーセンテージで指定する。ピクセル単位の指定ではないので要注意) |
ShowImage(i) |
指定のスロットナンバーの画像を表示する |
HideImage(i) |
指定のスロットナンバーの画像を非表示にする |
SetImageAlignment(i) |
0 を指定すると画像の中央を基準に、1 を指定すると画像の左上を基準にする |
GetPlayerDistance(e) |
指定したエンティティとプレイヤーとの距離を計算して取得する |
SetFlashLightKeyEnabled(v) |
フラッシュライトをつけるキー(Fキー)の有効/無効を切り替える。0 で無効。1 で有効 |
最終更新:2016年01月17日 05:02