Lua/A.I.M.S. リファレンスマニュアル

はじめに

全体の概要

スクリプトの構成

スクリプトの内容は次のようになる。

function OnLoad()
-- ステージの読み込み時の処理
end


function [SCENENAME]_OnStart()
-- シーンの初期化処理
end

function [SCENENAME]_OnStep()
-- シーンのフレームごとの処理 1フレに1回呼ばれる
end

function [SCENENAME]_OnClose()
-- シーンの終了時の処理
end

function OnVanish()
-- メモリ解放時の処理
end

function [CLASS_NAME]_OnStart()
-- アクター(いわゆるスプライト)の初期化時処理
end

function [CLASS_NAME]_OnStep()
-- アクターのフレームごとの処理 1フレに1回呼ばれる
end

function [CLASS_NAME]_OnVanish(cause)
-- アクターの消滅時の処理 cause=消滅理由
end

……あとは任意個数繰り返し

スクリプトの動作

システムがスクリプトを読み込む際、まずOnLoad関数が呼ばれる。ここで読み込みの際一度だけ実行すべき処理を行う(画像・音声 ファイル読み込みなど)。

そのあと、まずはboot_OnStart関数が呼ばれ、以降1フレームごとにboot_OnStep関数が呼ばれる。
シーンが自らシーンの終了を宣言(closeScene関数)した場合、または他のシーンへの移行を行う(changeScene関数)場合、 OnClose関数が呼ばれる。

アクターの制御ルーチンは各アクターに対して個別に関連付けられる。複数のアクターに同一クラスを指定してもよい。

スクリプト内において、変数はlocal宣言しない限り共通となる。各アクターで値を保持したい場合は専用の値スロットがある。システ ムでの定義済み変数 VAR[0〜71] を介して読み書き可能。他のアクターの値の読み書きはsetv()とgetv()で可能。

アクタースクリプト部

構成

function [CLASS_NAME]_OnStart()
-- アクターの初期化処理
end

function [CLASS_NAME]_OnStep()
-- アクターのフレームごとの処理 1フレに1回呼ばれる
end

function [CLASS_NAME]_OnVanish(cause)
-- アクターの消滅時の処理 cause=消滅理由
end

関数

生成、消去命令

hActor = createActor (hImage,x,y,angle,speed,layer,"class")
hActor = createActor (hImage,x,y,angle,speed,layer)
hActor = createActor (hImage,x,y,layer,"class")
hActor = createActor (hImage,x,y,layer)

アクターを生成する。戻り値はget〜/is〜系の命令で引数 hActortargetとして与えることができるアクター固有番号。

アクターには「見た目の向き」と「移動方向」の2つの角度が格納されているが、この二値はcreateActor の呼び出し方式で同期、非同期が変化することに注意。

また、移動方向と見た目の同期は次のタイミングで行われる。

※setVector関数やMOVER_SETVECTOR、MOVER_ADDVECTORのように、移動ベクトルをX,Y成分で直 接指定する場合には同期が起こらないことに留意すること。

同期、非同期の設定は setHeadSync 命令で後から変更することが可能。

addMoverの命令については「軌道設定命令」を参照のこと。

vanish ([hActor])
addMover(hActor, -1, 1, MOVER_VANISH)

指定したアクターを消滅させる。hActorを省略すると自分自身を消去。

アクター操作命令

setPos (x,y)
addMover(hActor, -1, 1, MOVER_SETPOSITION, x, y)

x,y座標を直接設定。 nilを入れると変更なし。

setZ (z)

高速描画レイヤーにおける描画順のキーになるZ値を設定。正の値でも負の値でもよいが、あまり極端な値にすると描画されなくなるので注 意すること。

setVector (vx,vy)
addMover(hActor, -1, 1, MOVER_SETVECTOR, vx, vy)

x,y速度を直接指定。nilを入れると変更なし。

setSpeed (speed)
addMover(hActor, -1, 1, MOVER_SETSPEED, speed)

移動速度を設定。呼ぶとSetAngleで指定した方向に向けて設定した速度で移動を開始する。

setAngle (angle)
addMover(hActor, -1, 1, MOVER_SETANGLE, angle)

移動角度を設定。呼ぶと SetSpeedで指定した速度で設定した角度に向けて移動を開始する。

x, y = makevector(ang, spd)

指定した角度、スピードのベクトル値を返す。

※common.luaで定義

ang, spd = getFromVector(actor)

指定したアクターの保持するベクトル情報から、角度、スピードを返す。

※common.luaで定義

ang = getAngleFromVector(actor)

指定したアクターの保持するベクトル情報から、角度を返す。

※common.luaで定義

spd = getSpeedFromVector(actor)

指定したアクターの保持するベクトル情報から、スピードを返す。

※common.luaで定義

turn (dangle)
addMover(hActor, -1, 1, MOVER_TURN, dangle)

直ちに回転させる。

setHeading (angle)
addMover(hActor, -1, 1, MOVER_SETHEADING, angle)

見た目の向きを設定。呼んでも移動方向に影響はしない。

turnHeading (dangle)
addMover(hActor, -1, 1, MOVER_TURNHEADING, dangle)

向きを直ちに回転させる。

setHeadSync (flag)
addMover(hActor, -1, 1, MOVER_SETHEADSYNC, flag)

移動方向と見た目の向きを常にシンクロさせる。trueで常時一致、falseで分離。初期値はtrueになっている。

accel (dspeed)
addMover(hActor, -1, 1, MOVER_ACCEL, dspeed)

直ちに加(減)速させる。

setAnimePlay (flag)
addMover(hActor, -1, 1, MOVER_SETANIMEPLAY, flag)

自動チップアニメーションを有効/無効にする。trueで有効、falseで無効。

setPattern (hImage)
addMover(hActor, -1, 1, MOVER_SETFACE, hImage)

自アクターのグラフィックを指定したグラフィックハンドルに切り替える。

軌道設定命令

addMover (hActor,starttime,duration,action)
addMover (hActor,starttime,duration,action,value)
addMover (hActor,starttime,duration,action,value1,value2)

hActorで指定したキャラにムーバー(自動制御要素)を追加。 自身をTargetにする場合はiSelf()。

actionの値とvalue値の関係について

common.luaに次のように定義してある。引数で& amp; amp; times;になっているところは不要ということ。

定数名 機能 引数1 引数2 説明
MOVER_SETANGLE 方角指定 方角(度) × 指定角度に向く
MOVER_SETSPEED 速度指定 速度(px/フレーム) × 指定速度に変更
MOVER_TURN 旋回 回転速度(度/フレーム) × 指定角速度で回転運動
MOVER_ACCEL 加減速 加速度(px/フレーム) × 指定加速度で加減速
MOVER_SETFACE キャラクタ切り替え キャラクタハンドル × キャラを指定キャラハンドルに切り替え
MOVER_SETPOSITION 座標指定 X座標 Y座標 指定座標に移動
MOVER_SETVECTOR ベクトル指定 X方向速度(px/フレーム) Y方向速度(px/フレーム) 指定ベクトルを与える
MOVER_ADDVECTOR ベクトル加減算 X方向加速度(px/フレーム) Y方向加速度(px/フレーム) 現在の移動ベクトルに指定ベクトルを加算
MOVER_SETZOOM 拡大率設定 横拡大率 縦拡大率 拡大率を指定値に変更
MOVER_ADDZOOM 拡大率加減算 横拡大率加算値(倍/フレーム) 横拡大率加算値(倍/フレーム) 現在の拡大率に指定値を加算
MOVER_SETBLEND 描画時のブレンド法変更 ブレンド方法(別表) × このキャラクタの描画時ブレンド方法を変更
MOVER_SETANIMEPLAY キャラクタ自動アニメの設定 0 = アニメ停止
非0 = アニメする
× アクターの自動チップアニメ処理を行う
MOVER_SETALPHA α値設定 α値(0〜255) × 描画時のα値(不透明度)を指定値に変更
MOVER_ADDALPHA α値加減算 α値加算値(/フレーム) × 現在のα値に指定値を加算
MOVER_SETIMMORTALTIME 無敵時間設定 無敵時間(フレーム) × 無敵時間を設定
(指定時間中は衝突判定命令で判定されない)
MOVER_SETWAIT 一時停止指示 停止時間(フレーム) × 指定したフレームの間、処理を停止する。
MOVER_VANISH 消滅指示 × × このキャラクタを消去
MOVER_SETHEADING 画像回転角設定 方角(度) × 画像を指定角度に回転
(移動方向は変わらず)
MOVER_TURNHEADING 見た目だけ旋回 回転速度(度/フレーム) × 指定角速度で見た目だけ回転運動
(移動方向は変わらず)
MOVER_SETHEADSYNC 移動方向と見た目の向きの同期設定 0 = 同期しない
非0 = 同期する
× 移動方向の設定と同時に見た目も回転させるかどうかを設定
MOVER_SETCOLOR 描画色の変更 3引数、順番にR,G,B (0〜255) 描画色変更。255=元絵の色のまま、
0=その要素の色が真っ黒に。

MOVER_CHANGEBLENDの定数は次の通り。

BLEND_NONE = 0 -- アルファブレンド無効
BLEND_NORMAL = 1 -- 通常ブレンディング
BLEND_ADD = 2 -- 加算ブレンディング
BLEND_MUL = 3 -- 乗算ブレンディング
BLEND_REVERSE = 4 -- 反転ブレンディング
clearMover([hActorTarget])

指定したキャラ(省略時は自分自身)に登録されているムーバーを全 削除。動作中であっても中断される。

キャラクタID獲得命令

hActor = iSelf ()

自分のIDを得る。

hActor = iParent ()

直接の生成元キャラのIDを得る。

hActor = iMaster ()

一次生成元(ステージ制御部で生成されたアクター)のIDを得る。 自分自身がステージ制御部で生成されているのなら自分自身のIDが帰る。

hActorTable = iLayerActors(layer)

指定したレイヤーに存在する全アクターのIDを取得。戻り値はテー ブル。

情報取得命令

flag = isAlive (hActor)

指定したアクターが生存しているかを返す。消滅している場合は falseが返される。

frame = getUptime ([hActor])

キャラクターの生成から経過した時間を 返す。単位フレーム。省略すると自分自身を指定した場合に等価。(以下も同様)

x = getX ([hActor])

X座標を返す。

y = getY ([hActor])

Y座標を返す。

z = getZ ([hActor])

Z値を返す。

vx = getVX ([hActor])

X速度を返す。

vy = getVY ([hActor])

Y速度を返す。

angle = getAngle ([hActor])

向きを返す。

speed = getSpeed ([hActor])

速度を返す。

angle = getAngleFromVector ([hActor])

現在のベクトルの角度を返す。

speed = getSpeedFromVector ([hActor])

現在のベクトルの速度(大きさ)を返す。

hImage = getPattern([hActor])

現在割り当てられているグラフィックハンドルを返す。

deg = aim ([hActorfrom,]hActorto)

fromのアクターからtoのアクターに向く角度を返す。from が省略されると自分自身からの角度になる。

dist = dist ([hActorfrom,]hActorto)

fromのアクターからtoのアクターへの距離を返す。fromが 省略されると自分自身からtoへの距離になる。

flag = isHitActor(hActor1[,hActor2])

ハンドルをひとつ指定した場合はそのアクターと自分自身、ふたつ指 定した場合はその2つのアクターが接触しているかどうか(当たり判定矩形が重なっているか)を返す。なお、異なるレイヤー間のアクター同士の当たり判定を 行う際、後述のレイヤースクロールを使用している場合はその分補正されて判定される( = 画面で見えている通りの位置関係で判定)。

hActor = getHitLayer([hActortarget,]layer)

hActortargetで指定されたアクター(省略した場合自分 自身)と、指定レイヤーの全アクターとの当たり判定をチェック、最初に当たっていると判定されたアクターのハンドルを返す。どれにも当たっていなかった場 合負数が返る。

動画表示・制御

hMovie = loadMovie("filename")

動画ファイルを読み込む。戻り値は割り当てられたハンドル。 hMovieはグラフィックハンドルとして定義される。

playMovie(hMovie)

指定されたハンドルの動画を再生する。

stopMovie(hMovie)

指定されたハンドルの動画を停止する。

flag = isMoviePlaying(hMovie)

動画が再生中ならture。

入力管理

flag = isJoyPressed ([pad_no], button_no)

指定した番号のボタンが押されているかどうかを 返す。押されていれば1、押されてい なければ0。

pad_noを省略した場合は0、2人同時プレイなどの場合は明示 すること。

button_noの定数は次のように定義されている。

BUTTON_RIGHT = 0 --方向右
BUTTON_DOWN = 1 --方向下
BUTTON_LEFT = 2 --方向左
BUTTON_UP = 3 --方向上
BUTTON_TRIG1 = 4 --トリガ1
BUTTON_TRIG2 = 5 --トリガ2
BUTTON_TRIG3 = 6 --トリガ3
...
count = getJoyPressCount (button_no)

指定した番号のボタンが押されはじめてからの経過時 間を返す(単位フレーム)。押さ れていなければ0。

ID = getTrigID (PadID)

指定したパッドの入力情報を返す。入力状態の検索は以下の順で行わ れる。

入力確認 => 戻り値
BUTTON_UP => "up"
BUTTON_DOWN => "down"
BUTTON_LEFT => "left"
BUTTON_RIGHT => "right"
BUTTON_TRIG1 => "trig1"
BUTTON_TRIG2 => "trig2"
BUTTON_TRIG3 => "trig3"

※common.luaで定義

その他の命令

value = getv ([hActor,]slot)

指定アクターが個別に持っている値スロットから値を得る。 hActorを省略すると自分自身を参照。

setv ([hActor,]slot,value)

指定アクターが個別に持っている値スロットに値 value を書き込む。hActorを省略すると自分自身を参照。内部的には値はdoubleで保持されている。

attach ("class")

classのサブスクリプトを割り当てる。サブスクリプトはメイン と並列に動作する。アクターの値スロットは共有するので値破壊に注意。

deattach ()

いま割り当てられているサブスクリプトを終了。

release ()

アクターに使った場合はスクリプトの駆動を終了。シーンスクリプト で使った場合はシーンの駆動を終了。

シーン制御

構成

function OnLoad()
-- スクリプト読み込み直後の処理 リソースの読み込みなど
end

function [SCENENAME]_OnStart()
-- シーン開始のときにあわせて呼ばれる処理 アクターの初期配置、変数の初期化など。
end

function [SCENENAME]_OnStep()
-- 1フレに1回呼ばれる処理
end

function [SCENENAME]_OnClose()
-- シーン終了の処理 表示したアクターを消すなど。
end

function OnVanish()
-- メモリ解放時の処理 読み込んだリソースの破棄など
end

関数

グローバルフラグ操作

value = getgv (page,slot)

指定ページ、指定スロットのグローバルフラグ値を返す。ページは 0〜3、スロットは0〜

setgv (page,slot,value)

指定ページ、指定スロットのグローバルフラグ値を設定する。

コルーチン制御

startThread("threadname")

threadnameで指定した関数をスレッドとして起動。スレッ ドの中ではcoroutine.yield()で実行を一時停止。次のフレームではその次から実行を再開する。

flag = isThreadRunning()

スレッドが動作中ならtrue。

wait(count)
※この関数はスレッド内部でのみ使用可能。

count分スレッドを停止。

※common.luaで定義

stopThread()

スレッドを強制停止。

グラフィック関連

hImage = loadGraphic ("filename"[, r, g, b])

グラフィックを読み込む。hImageにグラフィックハンドルが帰 る。
ファイル名の後ろのそれぞれの引数に「RGB値」を設定すると、指定された色が抜き色として取り扱われる。

deleteGraphic (hImage)

loadGraphic で読み込んだグラフィックを破棄。

deleteAllGraphic (hImages)

引数に渡されたテーブルのグラフィックを全て破棄。

※common.luaで定義

hImage = cutGraphic (hSrcImage,x,y,width,height)

loadGraphicで読み込んだグラフィックの一部を新しいグ ラフィックとする。hImageに切り抜き済みのグラフィックハンドルが返る。

setGraphicClip (hImage,x,y,width,height)

hImageで指定したグラフィックの切り出し範囲を変更。元テク スチャの座標で指定。切り出し範囲を変更しても、描画基準点は調整されない。

hImage = cloneGraphic (hsrcimage)

hsrcimageで指定したグラフィックと同じテクスチャ、同じ 切り抜き矩形を持つグラフィックをもうひとつ生成。

setGraphicCenter(hImage,x,y)

hImageで指定したグラフィックの「描画時の基準座標」を指 定。普通は画像の中心。回転、拡大の基準座標にもなる。

addGraphicHit(hImage,x,y,width,height)

hImageで指定したグラフィックに当たり判定矩形を追加。初期状態では当たり判定が設定されていないので注意。当たり判定矩形は1グラフィックあたり最大16個まで追加できる。

setGraphicAnime (hImage,hNextImage,delay)

hImageで指定したグラフィックにアニメ情報をセット。各グラ フィックは「次のコマ」と「このグラフィックを表示し続ける時間」を保持しているが、この命令でそれらの情報をセットする。hnextimageが次のコ マのグラフィックハンドル、delayが待ち時間。hnextimageに負数を与えるとこのコマでアニメーションが止まる。(アニメの終端)

hfirstimage = setGraphicAnimeSequence (hImages,delay)

hImagesにはテーブルを指定。テーブル内で指定したグラ フィックをすべて連結し、最後のコマで止まるアニメパターンを生成する。hImages[1]をアクターに割り当ててアニメを開始させると勝手にアニメし てくれる、という寸法。hImagesには直接テーブルを与えるとよい。

※common.luaで定義

hfirstimage = setGraphicAnimeLoop (hImages,delay,looppoint)

hImagesにはテーブルを指定。テーブル内で指定したグラ フィックをすべて連結し、最後のコマまで到達するとlooppoint(インデックス番号)に戻るアニメパターンを生成する。

※common.luaで定義

hImage = createBlankGraphic(width, height)

指定された空のグラフィックイメージを生成する。

hImage = createRenderTarget(width, height)

createBlankGraphic関数と同じく空のテクスチャ を作成するだけの関数だが、この関数で作成したテクスチャにはrenderSceneGroupToGraphic関数によって、シーンの内容を描画する ことができる。それ以外は通常のグラフィック同様に取り扱うことができる。

renderSceneGroupToGraphic(hImage, scenegroup)

指定された空のグラフィックイメージを生成する。 scenegroupは0〜2を指定。hImageがcreateRenderTargetで生成されていない場合はエラー。

画面設定命令

cls([layer])

layerのオブジェクトを全て消去する。layerが未指定の場 合は全アクターを消去する。

clearLayerSettings()

各レイヤーの設定を全て初期化。オフセット、画面外自動消去、高速描画の設定が初期状態に戻る。

setScreenSize(width,height)

仮想画面のサイズを設定。実画面が640x480のとき、 640,480に設定すると実際の画面の まま。320,240にすると画面全体が二倍拡大された感じになる。

setLayerScroll (layer,x,y)

指定レイヤーの描画オフセット座標を設定。画面上では(x,y)の 分だけ左上にズレて描画されて見える。x,yは実数。(負数可)

X = getLayerScrollX (layer)

指定レイヤーの描画オフセットX座標を得る。

Y = getLayerScrollY (layer)

指定レイヤーの描画オフセットY座標を得る。

setLayerAutoVanish(layer,flag)

指定レイヤーにおける「画面外自動消去」の有効・無効を設定。

setLayerUseFastDraw(layer,flag)

指定レイヤーにて高速描画モードを有効にする。高速描画モードを有 効にすると以下の制限が加わる代わりに描画速度が大幅に向上し、描画順を自由に設定できる。

setLayerUseAutoYSort(layer,flag)

指定レイヤーの自動描画順ソートを有効にする。これを有効にすると Y座標がより大きいアクターが自動的に手前に描画されるようになる。ただし高速描画モードが有効でないと何も変化しない。

setLayerGraphicForFastDraw(layer.hImage)

指定した高速描画レイヤーで使用するテクスチャを含むグラフィック のハンドルを設定。ここで指定したテクスチャを使っているグラフィックのみがこのレイヤーで描画可能になる。それ以外のグラフィックを描画しようとすると 化けるので注意。

setLayerDrawHitBox(layer,flag[,R,G,B])

デ バッグ専用(一般公開Verではこの命令は無視されます(エラーにはなりません))

指定したレイヤーのアクターの当たり判定矩形を描画する。RGBを 指定すると矩形の色を設定可能(0〜255)。省略すると白色。

サウンド制御

handle = loadSound ("filename")

WAVEファイルを読み込む。戻り値は割り当てられたサウンドハン ドル。

playSound (handle)

handleはサウンドハンドル(loadSoundの戻り値)。

stopSound (handle)

指定した音を強制的に止める。

stopSounds (table)

table に存在する音を強制的に止める。

deleteSound (handle)

サウンドをメモリから削除。

deleteSound (table)

table に存在するサウンドを全て削除。

※common.luaで定義

playMusic ("filename")

oggストリームを再生。

playMusicLoop (["introfilename",]"loopfilename")

oggストリームをループ再生。引数2個でイントロ→ループ再生 に、1個で単独のループ再生になる。

stopMusic ()

再生中のoggストリームを停止。

汎用関数

上記のどの分類にもあてはまらない汎用関数。

integer = randMT( min,max )
integer = randMT( max )
double = randMT()

Mersenne Twisterによって生成された乱数を返す。

を返す。math.randomはそのままこの関数に置き換え可 能。

srandMT([seed])

randMTの「種」を指定。値は整数。省略すると現在時刻を元に 自動決定。math.randomseedを置き換え可能。

crc = crc32(input)

inputに渡された文字列のCRC32を返す。

text = serialize(table)

table の内容をテキストにする。10月2日現在、非テーブルが渡された場合のエラー処理は行っていないので注意。

※common.luaで定義

table = deserialize(text)

text の内容をテーブルにする。内部的にはLuaスクリプトを実行しているだけであり、実行中にエラー処理が発生した場合の処理は行っていないので注意。

※common.luaで定義