BASIC解説

おおむねVisual BasicやQuick Basic系を参考にしています。ラベルの仕様等はプチコンのBASICも参考にしています。BASICは大文字と小文字を区別しませんが、文字列の中身は区別されます。また、テーブル記法の際にも大文字小文字は区別されます。
BASICはまず最初に@startラベルへジャンプし、そこから順番に実行されます。

BASICマニュアル目次

全体の目次に戻る

基本構文

実行制御

命令

関数

実効制御(ノベルモード専用)

命令

GUI処理

命令

関数

コンソール処理

命令

関数

フォント処理

命令

スプライト/ボタン処理

命令

関数

テクスチャ処理

命令

関数

ビットマップ処理

命令

動画処理

命令

音声処理

命令

関数

演出処理

命令

セーブ/ロード/ファイル処理

命令

関数

変数の変換・配列・文字列処理

命令

関数

数学処理

命令

関数

その他の処理

命令

関数

目次に戻る

BASIC解説(ドキュメント)

基本構文

コメント文とマルチステートメント
;で始まる行はコメント文です。読み飛ばされます。
BASICは原則的に一行一命令ですが、:(コロン記号)でつなぐと、一行に複数命令を書くことが出来ます。

; コメント文です。
;原則一行一命令ですが、
a=1
b=1
;このように書くことも出来ます。
a=1:b=1

目次に戻る

ラベル文
@で始まる行はラベル文になります。goto文gosub文defsub定義命令などの飛び先になります。
ラベル名に使えるのは英文字と数字とアンダーバーです。ただし、一文字目を数字にすることは出来ません。
なお、飛び先として指定する@labelは、内部的には文字列"@label"と等価です。goto文等の飛び先に文字列変数を使う事が出来ます。

@start ;このラベルから実行が始まります。
@label
@label2

;ダメな例
@2_ban ; 無効なラベル名
@あいうえお ; 日本語も使えません。
@label ;上で同じラベルが定義されているため二重定義はエラーになります。

目次に戻る

表示文
英文字でも@でも;でもない文字で始まる行は表示文になります。
英文を表示したい場合のために、>で始まる行も表示文として解釈されます(一文字目に>自体を表示したい場合は>>としてください)。
表示文中に「特殊表示文字」を使うことが出来ます。{漢字表現/日本語}でルビを振ることが出来ます。\pでページ途中の入力待ち、\nで改行することが出来ます。
表示文末には通常自動\pが補われますが、(アンダーバー)で終わっている場合は自動でのクリック待ちはしません。
内部的には、表示文は@text@textbへのサブルーチンコールとして処理されます。詳しくはサンプルを参照して下さい。
本文の前に[]で囲まれた文字列は「タグ」となります。例えば名前欄のテキストやボイスデータの指定などに使います。これは、省略された場合は""になります。

;次のふたつはどちらも表示文になります。
これはペンです。
> This is a pen.
;特殊表示文字の例です。
ここで改行\nされます。
ルビの例です。{天翔龍閃/あまかけるりゅうのひらめき}。
[タグ]タグのある表示文の例です。

目次に戻る

goto文
goto @label で指定したラベルにジャンプします。gosub(後述)と違い、行ったまま戻ってきません。また、変数のスコープ(後述)が変化することもありません。
for文やdo loop文で書かれたループ、もしくはgosubで作られたサブルーチンをgoto文で抜けないようにして下さい(ループやサブルーチンの中でgoto文ジャンプをするのは構いません)。ループはnextや loop、サブルーチンはreturnで抜けなければなりません。

;全部同じ意味になります。
goto @game_over
goto "@game_over"
next_label="@game_over"
goto next_label

目次に戻る

gosub文とreturn文
gosub @labelでサブルーチンをコールします。@labelから実行し、return文があると、呼び出し元に戻ってその次の命令から実行します。
なお、defsub文で命令を定義した場合もサブルーチンコールになります。同じくreturnで呼び出し元に戻ってその次の命令から実行しますが、こちらは命令として登録されるので、パラメータを渡すことが出来ます(後述)

gosub @sub ;サブルーチンジャンプする
.
.
.
@sub
;なんらかの処理
return ;呼び出し元の次の命令へ戻る

目次に戻る

if then else endif文
条件分岐を記述します。よくあるif文です。VisualBasic等と同様、一行if文と複数行if文が使えます。
thenの後改行すれば複数行if文、改行しなければ一行if文になります。elseとelseifが使えます。スペースを空けず、elseifと書いて下さい(これで一単語です)。 複数行if文の場合は、elseがある場合その後も改行し、if文の終わりにはend ifもしくはendifと書いて下さい。
IF文の条件式には、計算式や比較演算子が使えます。

; 一行IF文の例です。
if a==1 then b=0:goto @a_eq_1 else c=0
;複数行IF文の例です。
if a==1 then
  b=0
  goto @a_eq_1
else
  c=0
end if 

目次に戻る

for next文
変数を増やしながら(もしくは減らしながら)ループを実行します。
for 変数=初期値 to 終了値 (step 増分)でループ先頭、nextでループ終端を指定します。

for i=1 to 10
  cprint i
next
for i=10 to 1 step -1
  cprint i
next
for i=1 to 1000
  if i==10 then exit
next
for i=1 to 10
  cprint i
  if i<5 then continue
  cprint "i>=5"
next

目次に戻る

do loop文
標準的なBASICにおけるdo loop文と同じです。ただし、until文はありません。

i=0
do while i<5
  cprint i
  i=i+1
loop

do
  cprint i
  i=i-1
loop while i>0

do
  cprint "!"
loop
;これは無限ループします。

目次に戻る

exit文とcontinue文
do loopもしくはfor nextループを途中で抜けるにはexit、ループの頭に戻るにはcontinueを使って下さい。
なお、これらはスクリプト上のもっとも近いloopもしくはwhileの次へ抜けようとしますので、goto文でスクリプトの上でループの外に抜けてしまっていると正しく処理出来ません。処理の流れが読みにくくもなりますので、ループの中ではなるべくgoto文は使わない方がいいです。

for i=1 to 100
  cprint i
  if i==5 then exit
next
;5まででループが終わります。
for i=1 to 10
  if i<5 then continue
  cprint i
next
;5より小さいときはcontinueでループ頭に戻るため、値が表示されません。

目次に戻る

変数と代入文、未定義変数の扱い
変数には数値もしくは文字列を格納することが出来ます。変数には3種類あり、名前で区別されます。
先頭が_(アンダーバー)で始まる変数は「システム変数」で、これはプログラムを終了しても値が自動的に保持されます。
_でも%でもない英文字で始まる変数は「グローバル変数」で、セーブデータごとに保存され、リセットすると消去されます。
%で始まる変数は「ローカル変数」で、サブルーチンの間だけ(次のreturn文までの間)値が保持されます。return文で消去されます。gosubもしくはdefsub命令で他のサブルーチンに飛ぶと、その変数の値は保持されますが、飛んだ先からは値を参照することが出来ません。同じ名前の変数を作っても別の変数として扱われます。
ローカル変数の機能は便利ですが、初心者にはややこしいので無理に使う必要はありません(グローバル変数だけでも用は足せます)。
変数名は、一文字目が_もしくは%もしくは英文字(これで三種類に分類されます)、残りが_か英文字か数字です。
代入文は、変数名=値で書けます。値のところには式を書くことも出来ます。
値の代入されていない変数を参照(値を取り出そうとすること)すると、エラーになります。変数に値が代入されたかどうかを調べるにはisdefを使います。

(変数の例)
hitpoint=1 ; グローバル変数
name="太郎" ; グローバル変数
_screenmode=1 ; システム変数


%i=1 ;ローカル変数
gosub @sub
cprint %i
system "pause"
quit

@sub
%i=2 ; この%iは上の%iとは別の変数になります。
cprint %i
return

目次に戻る

シンボル、色指定、テーブル記法
#で始まる英単語(_や数字も可)は、「シンボル」として扱われます。
シンボルは内部的には全部を大文字に変換した文字列と等価です。
命令の機能や戻り値を表現するのに使っています。たとえばボタンから帰ってくる#wu #wd #rなどです。

;シンボルの例
#c #up #down #r #wd #wu
;これらは大文字でも同じ意味になります。大文字に変換した文字列と等価です。つまり、次の三つは等しくなります。
#c #C "#C"
内部的にはシンボルなのですが、NScripter2における色指定の頭文字には#を使います。
アルファチャンネルが必要な場合はARGBの順で指定して下さい。必要ない場合はHTMLと同じです。(alpha=FF(255)の扱いになります)

;色指定の例
#FF88BBCC ; alpha=FF R=88 G=BB B=CC
#5588ff   ; alpha=FF R=55 G=88 B=FF
一部の命令(spなど)は、パラメータに「テーブル記法」を要求します。
{属性名=値,属性名=値,...}という形で記述されます。配列を渡すことも出来て、その場合は、{属性名={1番目属性名=値,2番目属性名=値,...} } というような形になります。テーブル記法の中で変数や数式を使うことも出来ます。
内部的には文字列に変換され、それをLuaのテーブルとして読込ませています。

;実際に使われてる例です。{}で囲まれている部分がテーブル記法です。
sp "window:windowframe",{name="win\wind_frame.png",x=101,y=541,z=15}
sp "window:save",{name={"win\wb_save_off.png","win\wb_save_on.png"},x=810,y=575,z=0}

目次に戻る

配列と構造体
変数名[添字]と書くことで配列を扱えます。
二次元配列~N次元配列も、変数名[添字1][添字2]...[添字N]と書くことで扱えます。
配列に宣言は必要ありません。ただし、値を代入されていない配列を参照するとエラーになります。

array[0]=100
array[1]=10
array[2]=2000
array2d[0][0]=1
array2d[0][1]=2
array2d[1][0]=3
array2d[1][1]=4
また、変数名.メンバ名と書くことで構造体(レコード型)を扱えます。こちらも宣言は必要ありません。

info.x=100
info.y=50
info.c=#FFFFFFFF

目次に戻る

演算子
実装されている演算子の一覧です。

■算術演算子
a+b (数値同士なら足し算、文字列同士なら連結です)
a-b
a*b (数値同士ならかけ算、文字列*数値の場合は反復文字列です)
a/b (NScripter2の割り算は小数の割り算です。整数解が必要ならfloor(a/b)のようにfloor関数を使って下さい)
a mod b (aをbで割ったあまりです。こちらは整数の、あまりの出る割り算です)
a^b (aのb乗です。どちらも小数を指定できます。)
■比較・論理演算子
a>b
a<b
a>=b
a<=b
a==b
a<>b
not a
a and b
a or b

目次に戻る

命令と関数
NScripter2のBASICには「命令」と「関数」があります。
命令は、それ自体で一つの行になり(:でつなげてマルチステートメントにすることは出来ます)、何かを実行する物が多いです。
関数は、数式の中で使います。数値か文字列かどちらかを必ず返します。

resettimer ;これは命令
i=gettimer() ;このgettimer()は関数。resettimerからの経過時間をms単位で返す
実装の形態によって命令は3種類、関数は2種類に分けられます。

(Luaでコードを書く人のための内部資料)
命令には、C++で実装されている命令、Luaで実装されている命令、defsubに指定したサブルーチンでユーザーが作成する命令の3種類があります。
このうち最後のはユーザーが作るものです。C++で実装されている命令の実装は、exeの中にバイナリで入っています。Luaで実装されているものはsystem.luaの中にbasic_func.(大文字にした命令名)という関数で実装が書いてあります。
関数にはユーザー定義のものはありませんので、C++で実装されたバイナリのものと、Luaでsystem.luaの中に同じくbasic_func.(大文字にした関数名)という形で実装されたものとの二種類になります。
system.luaに書かれているものについては、内部的にどういう処理をしているのかのソースを見ることが出来ます。Luaでコードを書く人は参考にして下さい。

目次に戻る

defsubによるユーザー命令定義
defsubでユーザー命令を定義し、その名前でサブルーチンを呼び出し、paramで引数を受け取って処理することが出来ます。
それぞれ、詳細は目次「実行制御」から飛べるdefsub param call命令の解説で後述します。
NScripter2には汎用のスプライト命令は実装されていますが、立ち絵命令や背景命令やイベント絵命令や顔チップ命令はないので、それらはユーザー定義命令として作ることになります。
少々難しいと思うので、旧NScripter相当の命令の実装がサンプルファイルにありますので、それを参考にしてみて下さい。

;defsubの例です。
defsub ev,"S"
.
.
.
@ev
param %filename
sp "bg",{name=%filename,x=0,y=0,z=1000}
print #f,500
return

目次に戻る

画像ファイル名指定について
画像ファイル名には、普通のファイル名以外に、以下に挙げる特殊な指定が使えます。
"*色指定"
画面と同じサイズで、指定色で塗りつぶされた長方形画像
"*g色1,色2,fx,fy"
画面と同じサイズで色1から色2へのグラデーションテクスチャ。fxは横グラデーション、fyは縦グラデーションフラグ。どちらかだけが1ならその方向、ともに0もしくはともに1なら斜めグラデーション(この2つは方向が変わります)
"*幅,高さ,色指定"
その大きさと色で塗りつぶされた長方形画像
"*g幅,高さ,色1,色2,fx,fy"
色1から色2へのグラデーションテクスチャ。
">l幅,高さ,表示する値,最大値,バーの色,背景色"
左塗りつぶしバー。表示する値と最大値はともに整数で。
">r幅,高さ,表示する値,最大値,バーの色,背景色"
右塗りつぶしバー。表示する値と最大値はともに整数で。
":movie(ファイル名[,再生ボリューム])"
ムービーテクスチャ(透過無し、ループ無し)
":movieloop(ファイル名[,再生ボリューム])"
ムービーテクスチャ(透過無し、ループ)
":moviealpha(ファイル名[,再生ボリューム])"
ムービーテクスチャ(透過あり、ループ無し)
":movieloopalpha(ファイル名[,再生ボリューム])"→ムービーテクスチャ(透過あり、ループ)
ムービーテクスチャの指定において、再生ボリュームは省略できます。
"?文字列,フォント"
そのフォントを使った一行文字列画像(大きさは文字列に合わせて確保される)
二行以上、あるいはルビが必要な文字列画像が欲しい場合はspformatやtformat、bformatを使って下さい。

sp "fillred",{name="*#FFFF0000",x=0,y=0,z=1000};画面と同サイズの赤の塗りつぶし長方形
sp "whitebox",{name="*400,400,#FFFFFFFF",x=100,y=100,z=10} ; 400x400、真っ白の長方形
sp "movie_tex1",{name=":movie(test.nmv)",x=0,y=0,z=1} ; ムービーテクスチャ、ループも透過もなし
sp "movie_tex2",{name=":movieloopalpha(test.nmv,20)",x=0,y=0,z=1} ; ムービーテクスチャ、透過、ループ、ボリューム20
sp "textsp",{name="?TextSp,textfont",x=200,y=200,z=0} ; 文字列スプライト
;これより前にtextfontがfont命令で定義されているものとする

目次に戻る

実行制御

quit
エンジンを終了しウィンドウを閉じます。BASICのプログラム終了は一般的にendですが、luaではif文の終端にendを使うため、BASICでうっかりそう書くと何も言わずプログラムが終了して戸惑うことが多いので、あえて違う命令にしました。(system.luaで実装)

目次に戻る

select "text1",@label1,"text2",@label2,...
選択肢命令です。内部的にはラベル@selectbへのサブルーチンジャンプとして解釈されます。詳しくはサンプルを参照して下さい。(system.luaで実装)

select "選択肢テキスト1",@label1,"選択肢テキスト2",@label2,"選択肢テキスト3",@label3

目次に戻る

skip flag
スキップモードを設定します。0で通常状態、1でスキップモード、2でオートモードです。(system.luaで実装)

skip 1 ; スキップモード
skip 0 ; 通常モード
skip 2 ; オートモード

目次に戻る

trap label[,"スキップ条件"]
条件にあった入力があったときにlabelにジャンプします(この場合は自動でトラップモードが解除されます)。labelに#nilを指定するとトラップモードを解除します。
スキップ条件は省略できます。省略した場合は全部指定、つまり"LRSEP"になります。
L=左クリック R=右クリック S=スペースキー E=ENTERキー P=パッド入力、です。(C++で実装)

trap @skip_demo
.
.
.
.
@skip_demo
trap #nil ; これがないと、クリックで飛ばさなかったときにトラップモードが解除されない。

trap @l_skip,"L" ; Lボタンをクリックしたときのみジャンプします。

目次に戻る

defsub commandname,"paramlist"
ユーザー定義命令を作成します。commandnameが命令名になり、同じ名前のサブルーチンがその命令によってコールされます。
paramlistは引数(パラメータ)のリストです。左から順番に第一引数、第二引数...です。引数がない場合は""にしてください。(C++で実装)
paramlistの文字の意味
"*"
以下の引数は全部型チェックをせずそのまま受け取る。数も制限無し
"A"
どんな型でもひとつ受け取る。
"N"
数値をひとつ受け取る。
"S"
文字列をひとつ受け取る。シンボルやラベル名もこれで受け取ることが出来る。
"?"
その引数は、あってもなくてもよい。無い場合は、Luaではnil、BASICではシンボル#nilになる。?N ?S のように使う。
"R"
vsetやvgetに使う変数名を受け取る。いわゆる「参照渡し」をするときに使う。
"T"または"O"
テーブル記法を受け取る。結果は文字列になる。Lua側ではそれをbasic.decodetable(str)で処理する。
"."
一つ前の引数が同じ型で任意の数続くことを表す。"S."や"N."のように使う。

defsub bg,"S";bg命令を定義
defsub ld,"NS";ld命令を定義
goto @game_start

@bg
param %name
sp "bg",{name=%name,x=0,y=0,z=1000}
print #f,500
return

@ld
param %pos,%name ; pos=-1で左、pos=0で真ん中、pos=1で右、を想定。
%spname="chr"+STR(%pos)
sp %spname,{name=%name,x=1024,y=768,z=1}
getspinfo %spname,%info
%x=512+256*%pos-%info.w/2
%y=768-%info.h
spmove %spname,%x,%y
print #f,250
return

目次に戻る

param var1[,var2,var3,...]
defsubで定義された命令において、渡されたパラメータを受け取ります。
詳細や使用例は一つ上のdefsubの項目を参照して下さい。(C++で実装)。

目次に戻る

vset vname,value
第一引数の文字列が示す変数名の変数に第二引数の値を代入します。
defsub命令でparamlistが"R"のところは与えた変数名が文字列で入るので、そこへ代入するのに使います。(C++で実装)

defsub test,"R"
.
.
test v

@test
param %s
vset %s,"text" ; 呼び出し元が指定した変数vにtextを代入します。
return
;なお、ここではグローバル変数を渡していますが、どんな変数でも渡せます。

目次に戻る

call @label,"paramlist"[,param1,param2,...]
defsub定義無しであたかも命令のようにサブルーチンを呼ぶ命令です。
defsubは二重定義出来ず、プログラムの頭の方で設定しておく必要があるため、パラメーターは渡したいけど一時的にしか使わないような処理は、こちらで書くと便利なことがあります。(C++で実装)

call @lb,"SN","test",4
.
.
.
@lb
param %s,%n
for %i=0 to %n
  cprint %s
next
return

目次に戻る

exec "basicsrc"
与えられた文字列をBASICスクリプトとして解釈し実行します。文字列変数も使えるので、場合によっては役立ちます。(C++で実装)

str="beep"
exec str ; beep命令が実行されます。

目次に戻る

getlogtext num,tag変数,text変数
num個前のバックログを取得します。tagとtextを受け取る変数をそれぞれ指定します。なお、取得できない場合は#nilが戻ります。
現状、ノベルモードでも、得られる情報は表示文単位です。(system.luaで実装)

getlogtext 12,%tag,%text ; 12個前の表示文のタグと本文テキストをそれぞれ取得する。

目次に戻る

novelmode mode
ノベルモードに設定します。mode=1でノベルモード、0でADVモード(0がデフォルト)です。
ノベルモードでは表示文ごとに自動で改ページされなくなるほか、いくつか専用の命令が使えるようになります。詳しくはサンプルを御覧ください。
このモードは通常のセーブファイルにセーブされます。(system.luaで実装)

目次に戻る

flag=getskip()
現在のスキップモードを取得します。0が通常時、1がスキップ、2がオートモードです(system.luaで実装)

if getskip()==1 then return ; スキップモード時はリターン

目次に戻る

result=logchk(num)
バックログのデータが存在するかどうかチェックします。num個前を調べます。(system.luaで実装)

if logchk(%n)==0 then ~ ;バックログを処理したいときにこんな感じで。

目次に戻る

value=getconfig(key)
config.iniから値を取得します。keyもvalueも文字列です。詳しくはWindowsのiniファイルの仕様を調べて下さい。(system.luaで実装)

value=getconfig("chr_name")

目次に戻る

value=vget(vname)
引数の文字列が示す変数名値を返します。
defsub命令でparamlistが"R"のところは与えた変数名が文字列で入るので、そこから値を取得するのに使います。(C++で実装)

defsub test,"R"
.
.
v=125
test v

@test
param %s
cprint vget(%s) ; 125が戻ります。
return

目次に戻る

ver=getversion()
NScripter2のバージョンを返します。(system.luaで実装)

目次に戻る

実行制御(ノベルモード専用)

newpage
改ページを実行します。(system.luaで実装)

目次に戻る

gettextpos x変数,y変数
TFORMAT SPFORMAT BFORMATのうち一番最後に実行した命令における次のテキスト行の先頭を戻します。textbに渡るのはカーソル表示位置なので改行前ですが、こちらには改行後(次の行先頭)が渡ります。
ノベルゲームで選択肢を表示文の下に置きたいときや、FORMAT系で書き込んだ文字列の高さを知りたいときに使います。なお、得られる座標はスプライト左上からの相対座標です。(system.luaで実装)

目次に戻る

skippause mode
mode=1で、改ページではないクリック待ちをスキップするモードになります。mode=0で通常と同じです。このモードはシステムセーブデータにセーブされます。(system.luaで実装)

目次に戻る

GUI処理

setscreen flag
スクリーンモードを指定します。0でウィンドウモード、1でフルスクリーンモードです。
なお、NScripter2のフルスクリーンモードは、モニタ解像度はそのままにウィンドウをそれと同じ大きさで作り直し、画像を拡大しています。
また、この命令を呼びださなくても、ウィンドウの最大化ボタンを押したりAlt+Enterを入力したらスクリーンモードが切り替わることにご注意ください。
コンフィグ等でウィンドウモードの表示や選択をする場合は、現在の状態をシステム変数で管理するのではなく、getscreen()で得るようにしてください。
終了時にはシステムセーブデータに自動でスクリーン状態を保存するように作ってあります。(system.luaで実装)

目次に戻る

shell "filename or url"
指定したファイルをシェルで開きます。実行ファイルなら実行されます。URLを指定すれば、そのURLを規定のブラウザで開きます。(C++で実装)

shell "notepad.exe"
shell "http://www.google.co.jp"

目次に戻る

caption "captionstr"
ウィンドウのタイトルバーに入る文字列を指定します。(system.luaで実装)

目次に戻る

setmouse x,y
マウスカーソルを指定した座標に移動します。(system.luaで実装)

目次に戻る

clearmouse
実行時点で処理されていない全てのマウスメッセージ(クリックなど)を消去します。(system.luaで実装)

目次に戻る

getclick lu変数[,ru変数,w変数,ld変数,rd変数]
マウスクリックを取得します。luは左ボタンアップ、ruは右ボタンアップ、wはホイールアップ/ダウン、ldは左ボタンダウン、rdは右ボタンダウンです。(system.luaで実装)

getclick %lu ; 必要の無い情報は省略できます。
getclick %lu,%ru

目次に戻る

getmouse x変数,y変数
現在のマウス座標を取得します。画面外の場合は-1が戻ります。(system.luaで実装)

getmouse %x,%y

目次に戻る

doevents
メッセージを処理します。自前でループを回している場合、これを実行しないとメッセージ処理されません。
ボタン命令やclick命令等を実行している場合は内部で行っているので要りません。(system.luaで実装)

目次に戻る

sleep miliwait
プログラムを指定した時間(単位はミリ秒)スリープさせてCPUに時間を明け渡します。
スプライトなどのアニメーションまで止まってしまいますので、スプライトアニメーションをさせつつ時間待ちをしたい場合はwaitなどを使って下さい。(system.luaで実装)

目次に戻る

clearmessage
現状で処理されていないメッセージを消去します。(system.luaで実装)

目次に戻る

okbox text,caption
「OK」ボタンだけがあるダイアログを表示し、返答を待って動作を再開します。(system.luaで実装)

okbox "ウィンドウの文章がここにはいります。","ウィンドウタイトルです。"

目次に戻る

yesnobox result変数,text,caption
「はい」「いいえ」ボタンがあるダイアログを表示し、はいならば1、いいえならば0をresult変数に戻します。(system.luaで実装)

yesnobox %result,"ウィンドウの文章がここにはいります。","ウィンドウタイトルです。"
;%resultには、はいならば1、いいえならば0が入っています。

目次に戻る

input result変数,text,caption
文字列を入力するダイアログを表示し、入力された文字列をresult変数に戻します。(system.luaで実装)

input %result,"ウィンドウの文章がここにはいります。","ウィンドウタイトルです。"

目次に戻る

resettimer
内部タイマをリセットします。0からミリ秒単位で時を刻み始めます。用例はwaittimerやgettimerを参照して下さい。(system.luaで実装)

目次に戻る

waittimer mili
内部タイマが指定された時間になるまで待ちます。単位はミリ秒です。(system.luaで実装)

resettimer ;ここで内部タイマをリセットする
.
.
.
waittimer 1000 ; ここで1秒になるまで待つ。

目次に戻る

time year変数,month変数,day変数,hour変数,min変数,sec変数
実行時点の年月日日時分秒を取得します。(system.luaで実装)

time %year,%day,%hour,%min,%sec

目次に戻る

beep [freq[,mili]]
ビープ音を再生します。指定した周波数(freq)で指定した長さ(miliミリ秒)再生します。省略した場合デフォルトの長さと高さで再生されます。(system.luaで実装)

目次に戻る

gbegin
画面への描画を開始します。ここからgend命令の実行までの間は、画面描画を行うことが出来ます。
これはテクスチャ等を自前で描画する場合に必要な命令です。スプライト機能を使う場合は必要ありません。(system.luaで実装)

目次に戻る

gend
画面への描画を終了します。この命令の実行で、実際に画面に描画結果が反映されます。
これはテクスチャ等を自前で描画する場合に必要な命令です。スプライト機能を使う場合は必要ありません。(system.luaで実装)

目次に戻る

gblend mode
画面描画のブレンディングモードを指定します。0が通常モードで、1が加算合成モードです。
これはテクスチャ等を自前で描画する場合に必要な命令です。スプライト機能を使う場合は必要ありません。(system.luaで実装)

目次に戻る

getpad padnum,lx変数,ly変数,rx変数,ry変数,dx変数,dy変数,a変数,b変数,x変数,y変数,start変数,back変数,l1変数,r1変数,l2変数,r2変数,l3変数,r3変数
XInput方式のジョイパッドから入力を取得します。padnumはパッド番号です。lx,ly,rx,ryはアナログスティックの数値(-32768~32767)dx,dyはデジタル方向ボタンの数値(-1~1)です(Y軸は上が正なので注意)、start back a b x y l1 r1 l3 r3は押されてなければ0、押されていれば1です。l2 r2はアナログトリガなので、0~255で取得します。なお、情報の取得に失敗したときはlx変数に#nodataが戻ります。(system.luaで実装)
※なお、パッド系命令を使う場合はnscr2pad.dllがnscr2.exeと同じフォルダにある必要があります。

getpad 0,%lx,%ly,%rx,%ry,%dx,%dy,%a,%b,%x,%y,%start,%back,%l1,%r1,%l2,%r2,%l3,%r3
if %lx<>#nodata then
  ;データ入力があったのでパッド処理
end

目次に戻る

ggetsize w変数,h変数
ウィンドウの幅と高さを取得します。(system.luaで実装)

目次に戻る

flag=getscreen()
現在のスクリーンモードを取得します。0がウィンドウモード、1がフルスクリーンモードです。(system.luaで実装)

if getscreen()==1 then ~;何かフルスクリーンモード用の処理

目次に戻る

getkey(keycode)
指定されたキーが押されているかどうかを取得します。一部マウスの取得も出来ます。(system.luaで実装)
キーコードの一覧
  • 英文字(例:"A")もしくは数字キー……その文字の表すキー(数字はフルキーのほう)。大文字小文字は区別されない
  • + - * / . =……その文字の表すキー。
  • " "もしくは"SPACE"……スペースキー
  • "CTRL"……コントロールキー
  • "UP"……カーソルキー上
  • "DOWN"……カーソルキー下
  • "LEFT"……カーソルキー左
  • "RIGHT"……カーソルキー右
  • "F1"~"F12"……ファンクションキー
  • "RETURN" もしくは "ENTER"……ENTERキー
  • "PAGEUP"……ページアップキー
  • "PAGEDOWN"……ページダウンキー
  • "SHIFT"……シフトキー
  • "SCROLLLOCK"……スクロールロックキー(ランプ付き状態なら1)
  • "NUMLOCK"……ナムロックキー(ランプ付き状態なら1)
  • "CAPSLOCK"……キャプスロックキー(ランプ付き状態なら1)
  • "LBUTTON"……マウス左ボタン
  • "RBUTTON"……マウス右ボタン
  • "MBUTTON"……マウス中ボタン
  • "NUM0"~"NUM9"……テンキーの0~9

if getkey("CTRL")==1 then ~;CTRLが押されているときの処理

目次に戻る

mili=gettimer()
resettimerから何ミリ秒経ったかを戻します。(system.luaで実装)

resettimer
.
.
.
.

if gettimer()<1000 then ~;1秒経ってない時にはなんらかの処理

目次に戻る

コンソール処理

copen
コンソールを開きます。開くだけで何もしません。なお、これ以外のコンソール系の命令を実行しても自動で開きます。(system.luaで実装)

目次に戻る

cclose
コンソールを閉じます。(system.luaで実装)

目次に戻る

ccaption "ウィンドウタイトル"
コンソールのウィンドウタイトルを変更します。(system.luaで実装)

目次に戻る

cprint param1[,param2,param3,...]
与えたパラメータを連結してコンソールに表示します。パラメータは数値でも文字列でも構いません。最後に改行します。(system.luaで実装)

目次に戻る

cwrite param1[,param2,param3,...]
与えたパラメータを連結してコンソールに表示します。パラメータは数値でも文字列でも構いません。printと違い、最後に改行がつきません。(system.luaで実装)

目次に戻る

clocate x,y
カーソルを移動し、次以降の表示をそこからにします。(system.luaで実装)

目次に戻る

cgetsize 変数w,変数h
コンソールの画面サイズを取得します。wが幅、hが高さです。clocateはこの範囲で指定して下さい。(system.luaで実装)

目次に戻る

csetsize w,h
コンソールの画面サイズを設定します。wが幅、hが高さです。(system.luaで実装)

目次に戻る

cgetcursor 変数x,変数y
コンソールの現在の表示位置を変数に取得します。(system.luaで実装)

目次に戻る

csettext str,x,y[,cr,cg,cb,br,bg,bb,ci,bi]
コンソールの文字列を指定位置に指定カラーで表示します。カラーは省略できます。crcgcbは文字色(赤緑青)、brbgbbは背景色、これらは0か1です。ciとbiは強調(色が明るくなる)です。これも0か1です。(system.luaで実装)

目次に戻る

cclear
コンソールをクリアします。(system.luaで実装)

目次に戻る

ccolor cr,cg,cb,br,bg,bb,ci,bi
今後使う色を指定します。crcgcbは文字色、brbgbbは背景色、これらは0か1です。ciとbiは強調(色が明るくなる)です。これも0か1です。(system.luaで実装)

目次に戻る

system "commandline"
コンソールからコマンドプロンプトへ命令を送ります。(system.luaで実装)

system "dir" ; ディレクトリの内容を表示します。
system "dir > out.txt" ; リダイレクトも出来ます。

目次に戻る

str=cread()
文字列をキーボードから一行取得します。(system.luaで実装)

目次に戻る

c=cinkey()
一文字分の入力を取得します。改行を入力しなくても一文字だけ取得できます。(system.luaで実装)

目次に戻る

フォント処理

font "フォント名",{フォント指定文字列}
ゲーム中で使うフォントを作成します。フォント名は文字列で指定します。フォントの内容をテーブルで指定して下さい。
フォントはセーブされません。スクリプトの最初で実行するといいでしょう。(system.luaで実装)

;全部デフォルト
font "text1",{}
;普通のフォント
font "text2",{name="MS ゴシック",color=#FFFFFFFF,width=16,height=16}
;袋文字
font "text3",{name="MS ゴシック",style="outline",outlinecolor=#FF000000,color=#FFFFFFFF,width=24,height=24}
;影付き文字
font "text4",{name="MS ゴシック",style="shadow",color=#FFFFFFFF,shadowcolor=#FF000000,width=24,height=24}
;袋文字+字グラデーション
font "text5",{name="MS ゴシック",style="fancy",outlinecolor=#FF000000,color1=#FFFFEEAA,color2=#FFFFFFFF,shadowcolor=#FF000000,fx=1,fy=1,width=24,height=24}

目次に戻る

fdelete "フォント名"
指定したフォントを削除します。(system.luaで実装)

目次に戻る

スプライト/ボタン処理

sp "スプライト名",{テーブル指定文字列}
スプライトを作成します。同名のスプライトがある場合、それは削除されます。旧NScripterと違い、複数セル画像は全てのセルの画像をばらばらに指定します。画像としては連結しません。
animtimeを指定するとセルアニメーションします。アニメーションのタイプはanimtypeで指定します。
アニメーションタイプの説明
セルが4つのアニメーションの場合は、こうなります。
"normal"もしくは指定なしもしくは""
0→1→2→3→0→1→2→3→0→1...
"stop"
0→1→2→3(ここで止まる)
"round"
0→1→2→3→2→1→0→1→2→3→...
"delete"
0→1→2→3→スプライト自体を削除。演出などで使います。
"lua"
animfuncに指定してあるLua関数を呼び出します。Luaがわかる人向け。詳細はsystem.luaのbasic.sprite_animation_checkを参照してください。
なお、ムービーテクスチャはこのアニメーション設定とは別です(セル内容自体がアニメーションすると考えてください)
delete=1とすると、ムービーテクスチャの再生が終わった際にスプライトを削除します。これも演出などで使います。
(system.luaで実装)

;テーブル指定で指定されない値にはデフォルト値があります。
sp "sp1",{name="test.png",x=100,y=100,z=100,a=128}
sp "set:sp2",{name={"cell1.png","cell2.png"},x=200,y=200,z=100,cell=0,blend=1}
;blendは0または省略で通常、1で加算ブレンド
sp "set:sp2",{name={"cell1.png","cell2.png"},cx=300,cy=300,xs=1.2,ys=1.2,rot=45,z=100,cell=0}
;角度はディグリー(度)単位です。ラジアンではありません。
sp "set:sp3",{name={"cell1.png","cell2.png","cell3.png"},x=200,y=200,z=100,animtime=100,animtype="normal"}
sp "set:sp4",{name="test.png",x=100,y=100,z=100,a=128,effect="nega"};ネガポジ反転
sp "set:sp5",{name="test.png",x=100,y=100,z=100,a=128,effect="monotone",color=#FF3388FF};モノトーン
sp "set:sp6",{name=":movieloopalpha(test.nmv)",x=0,y=0,z=0} ; ムービーテクスチャ
sp "set:sp7",{name=":moviealpha(bomber.nmv)",x=100,y=200,z=0,delete=1} ;ムービーテクスチャ、再生が終わったら削除
スプライト名の仕様
スプライト名は次のように記述されます。
"setname:spname"
setname=スプライトセット名、spname=スプライト名
スプライトセットがフォルダでスプライトが個別ファイルのようなものです。
スプライトセットはボタン処理の際に指定される他、スプライトセット自体のZ値や、表示非表示切り替えがあります。
スプライトセット名を省略すると、スプライトセット名""として扱われます。このスプライトセットはZ値が10000に設定されています。

目次に戻る

spdelete "スプライト名"
スプライトを消去します。(system.luaで実装)

目次に戻る

spdeletes "スプライト名前部分文字列"
指定した文字列で始まるスプライトを全部削除します。例えば、spdeletes "set:test"とすれば、"set:testa""set:testb"...などがまとめて消去されます。(system.luaで実装)

目次に戻る

spcell "スプライト名",cellnum
スプライトのセル番号を切り替えます。0~作るときに指定した画像の数-1までです。(system.luaで実装)

目次に戻る

spmove "スプライト名",x,y[,a]
スプライトを指定位置に移動します。aは省略すると255になります。(system.luaで実装)

目次に戻る

spmovelt "スプライト名",cx,cy,xs,ys,rot[,a]
スプライトを指定位置に拡大縮小回転を加えて移動します。aは省略すると255になります。(system.luaで実装)

目次に戻る

spvisible "スプライト名",flag
スプライトの表示状態を切り替えます。flagが1で表示、0で非表示です。(system.luaで実装)

目次に戻る

spz "スプライト名",z
スプライトのZ値を切り替えます。小さい方が上に表示されます。(system.luaで実装)

目次に戻る

spfill "スプライト名",#色指定
スプライトを指定した色で塗りつぶします。(system.luaで実装)

目次に戻る

spanimationreset
全てのスプライトのアニメーションをリセットします。(system.luaで実装)

目次に戻る

spset "スプライトセット名",z
スプライトセットを作成します。スプライトセットのz値を指定できます。(system.luaで実装)

目次に戻る

spsetdelete "スプライトセット名"
スプライトセットを削除します。(system.luaで実装)

目次に戻る

spsetclear "スプライトセット名"
そのスプライトセットに属しているスプライトを全部削除します。スプライトセット自体は残ります。(system.luaで実装)

目次に戻る

spsetz "スプライトセット名",z
スプライトセットのz値を変更します。(system.luaで実装)

目次に戻る

spsetvisible "スプライトセット名",flag
スプライトセットの表情状態を切り替えます。flagが1で表示、0で非表示です。(system.luaで実装)

目次に戻る

spformat "スプライト名",cell,"表示文字列",{本文設定テーブル指定}[,{ルビ設定テーブル指定}]
指定スプライトの指定セルに文字列を書き込みます。これはスプライトを書き換える命令であって、描画命令ではありません。たとえばバックログの文字列を作るとき等に使います。テキスト中に%p等がある場合は単に無視します。なお、ルビ機能を使わない場合はルビ設定は省略できます。(system.luaで実装)

spformat "sp1",0,"あいうえおかきくけこ{漢字/ルビ}さしすせそ",{font="text",x=2,y=2,w=25,h=4},{font="ruby"}
;ここで、本文のx,yはピクセル単位でスプライトの左上からの座標、wとhは文字数単位で幅と高さです。

目次に戻る

spputtext "スプライト名",cell,"表示文字列",{本文設定テーブル指定}[,{ルビ設定テーブル指定}]
スプライトに文字列を書き込み、それを逐次表示します。waitで速度を調整できます。速度に0を指定したときは瞬時に全部を表示します。
テキスト中の\pと文末で、BASICの@textbを呼び出してテキストウィンドウのクリック待ちのインタフェース処理をします。
ただし、文末が_で終わってる場合は文末でのインタフェース処理はしません。表示が終わるとそのまま次の行に実行を移します。
デフォルトでは、この命令を実行すると改ページし、スプライトを無色透明でクリアし、指定したx,y座標から字を書き始めます。ADV形式のゲームではこれでいいですが、ノベル形式(1クリック1ページではない、画面全体に字が出るゲーム)では不便なので、novelmodeという命令があります。novelmode 1の状態では、文末で改ページクリック待ち\cを使えるようになります。これを処理するかpageclear命令を処理するまで改ページされません。(system.luaで実装)

spputtext "sp1",0,"あいうえおかきくけこ{漢字/ルビ}さしすせそ",{font="text",x=2,y=2,w=25,h=4,wait=50},{font="ruby"}
;x,yは文字を書き始める際の左上の座標、省略すると0,0。w,hは横と縦の文字数。waitは文字表示速度。
;本文テーブルのfontは本文の、ルビテーブルのfontはルビのフォント。
;ルビテーブルでpxやpyを指定すると、ルビの送り幅が指定できる(省略するとフォントの幅になる)

目次に戻る

getscreenshot "ビットマップ名"
スプライトで構成されている現在の画面のスクリーンショットを取り、ビットマップオブジェクトに格納します。ビットマップについては↓のビットマップ処理の項目を参照して下さい。(system.luaで実装)

目次に戻る

btnclear ["スプライトセット名",{デフォルトのスプライト操作文字列}]
ボタン設定をクリアします。設定はスプライトセットごとに別です。デフォルトのスプライト操作文字列は、どのボタンにもカーソルが乗ってないときに実行されます。スプライト操作文字列についてはbtnstrの項目で解説します。
なお、スプライトセット名を省略するとスプライトセット""、スプライト操作文字列を省略すると""(何もしない)になります。(system.luaで実装)

目次に戻る

btn "スプライト名",{ボタン設定テーブル}
指定したスプライトをボタンにします。(system.luaで実装)
ボタン設定テーブル
on="スプライト操作文字列" ボタンにカーソルが重なったときに実行する処理を指定します。省略すると自分自身をセル1にするものになります。
off="スプライト操作文字列" ボタンからカーソルが離れたときに実行する処理を指定します。省略すると自分自身をセル0にするものになります。
style="スタイル指定"
 ボタンのスタイルを指定します。省略すると"push"になります。次の種類があります。
 "push" または"" プッシュボタン、重なっているときにセル1、離れているときにセル0を表示、戻り値はスプライト名です。
 "toggle" トグルボタン 押すごとにセル0と1が切り替わります。戻り値は"スプライト名:0"もしくは"スプライト名:1"です。
 "bar" バー セルをバーのように使って、スプライトの中のどこをクリックしたかでバーの位置が変わります。ちょっとややこしいのでサンプルを参照してください。
align="left" もしくは align="right" バータイプのボタンで、スプライトのどちらの端を0にするかを選択します。省略時のデフォルトは"left"です。
notreset=1 プッシュボタンで、押した後に通常ならセルが0に戻りますが、1のまま戻らないようにします。

btn "window:sp1"
btn "window:sp2",{style="push"}
btn "window:sp3",{style="toggle"}
btn "window:sp4",{on="P(sp1,0)P(sp2,1)"}
btn "window:bar0",{style="bar"}

目次に戻る

btnexec 戻り値変数名,"スプライトセット名"[,{ボタン処理テーブル}]
ボタン処理を実行し、戻り値を変数に返します。戻り値にはスプライトセット名は含まれません。(system.luaで実装)
ボタン処理テーブル
wheel=1
ホイール入力を取得します。戻り値は、#WU(ホイールアップ時) #WD(ホイールダウン時)です。
ctrl=1
コントロールキーを取得します。#CTRLが戻ります。
spcret=1
スペースキーとリターンキーを取得します。" "もしくは#RETURNを返します。
automode=1
オートモードを実行します。ボイスがなっているときはボイスが終了したとき、なっていないときはtimeで指定した時間が過ぎたときに処理を続行します。タイムアウト(もしくはボイス終了)時の戻り値は#TIMEOUTです。
time=1000
タイムアウト時を指定します。オートモード時には、ボイスがなっていないとき、オートモードでないときはどのような場合でも指定時間でタイムアウトします。
ldown=1
マウス左ボタンの押し下げを判定します。#LDが戻ります。
rdown=1
マウス右ボタンの押し下げを判定します。#RDが戻ります。
func=1
ファンクションキーを取得します。#F1~#F12が戻ります。
cursor=1
カーソルキーを取得します。#UP #DOWN #LEFT #RIGHTが戻ります。
alphabet=1
アルファベットキーを取得します。#KEY_A~#KEY_Zが戻ります。
sizechange=1
スクリーンモードが変更されると#SIZECHANGEが戻ります(コンフィグなどで使います)
変数に返される戻り値
以下、「スプライト名」とありますが、スプライトセット名は含まれないので注意してください。
プッシュボタン
"スプライト名"
トグルボタン
"スプライト名:0"もしくは"スプライト名:1"
バー
"スプライト名:セル番号"
ボタンではないところをクリックしたとき
""
右クリック時
#R
パッドボタン入力
(basic.pad_enableが真のときのみ)#PAD_A~#PAD_R3 パッド入力の値が戻ります。
その他
ボタン処理テーブルで指定した値
ボタンは色々な値を戻すので、処理するものだけ判定して、しないものは、どれでもなかったときにbtnexec命令に戻るように組むといいでしょう。
※なお、パッド系命令を使う場合はnscr2pad.dllがnscr2.exeと同じフォルダにある必要があります。

;ここより前にwindow:btn1とwindow:btn2はロードされているものとする。
btnclear "window"
btn "window:btn1"
btn "window:btn2"
@btnloop
btnexec %ret,"window"
if %ret==#r then ;右クリック時の処理
if %ret=="btn1" then ;ボタン1の時の処理
if %ret=="btn2" then ;ボタン2の時の処理
goto @btnloop

目次に戻る

btnstr "スプライト操作文字列"
スプライト操作文字列を実行します。スプライト操作文字列はボタン処理にも使われますが、スプライト操作文字列を単体で実行するのがこの命令です。ここでスプライト操作文字列の仕様についても説明します。(system.luaで実装)
スプライト操作文字列
"S(サウンドファイル名)" そのサウンドを再生します。
"P(スプライト名,セル番号)" 指定したスプライトを表示状態にし、セル番号を変更します。セル番号とありますが、これは整数の数値を直接書かなければなりません。変数は使えません。
"C(スプライト名)" 指定したスプライトを非表示状態にします。
"M(スプライト名,x,y)" 指定したスプライトを移動します。この座標にも整数を直接書いて下さい。変数は使えません。
これらはつなげて組み合わせることも出来ます。

btnstr "S(se/test.ogg)P(set:sp1,1)"

目次に戻る

print #transition[,time[,option]]
スプライトの描画状態を変更すると、内部にその変化が蓄積されます。
PRINT命令で実際に画面に反映することが出来ます。この仕様は旧NScripterと同じです。
シンボルはトランジションの種類を指定します。時間の単位はミリ秒です。
#c もしくは"" 瞬時表示 時間指定はいりません。
#f クロスフェード
#ru #rd #rl #rr ロール上下左右
#su #sd #sl #sr スクロール上下左右
#u ユニバーサルトランジション 三番目の引数にルール画像を取ります。旧NScripterのトランジション18番と同じです。

print #c
print #rd,500
print #sl,500
print #f,500
print #u,500,"rule.png"
(system.luaで実装)

目次に戻る

wait time[,clickflag]
指定した時間処理を中断します。時間の単位はミリ秒です。クリックフラグを1にするとクリックで飛ばせるようになります。なお、この命令の実行中もアニメーションなどは表示されます。
sleepを使うとアニメーションも止まってしまうので、スプライトを使った普通のゲーム中はこちらを使うことが多いでしょう。(system.luaで実装)

目次に戻る

click
クリック待ちをします。左クリックで先へ進めます。アニメーションは実行されます。(system.luaで実装)

目次に戻る

lrclick
左右どちらのクリックでも飛ばせるクリック待ちをします。(system.luaで実装)

目次に戻る

spdraw
スプライト全てを描画します。これはテクスチャなどの低水準描画命令と一緒にスプライトを描画したいときに使います。(system.luaで実装)

目次に戻る

getspinfo "スプライト名",変数info
スプライト情報を取得します。構造体に情報を格納します。
変数がinfoの場合は次のようになります。(system.luaで実装)
(通常のスプライトの場合)
info.x ; X座標
info.y ; Y座標
(回転拡縮指定のスプライトの場合)
info.cx ; CX座標
info.cy ; CY座標
info.xs ; X拡大率
info.ys ; Y拡大率
info.rot ; 回転角
(どちらでも共通)
info.z ; Z値
info.a ; α値
info.cell ; セル番号
info.cellnum ; セルの数
info.w ; 画像の幅
info.h ; 画像の高さ
info.animtype ; アニメーションタイプ
info.animtime ; アニメーション時間

目次に戻る

cell=getspcell("スプライト名")
指定したスプライトの現在のセル番号を取得します。(system.luaで実装)

目次に戻る

flag=sphitcheck("スプライト名",x,y)
指定したスプライトの内側に座標x,yが含まれるなら1、含まれないなら0を返します。現状、拡大縮小回転タイプのスプライトには対応していません。(system.luaで実装)

目次に戻る

テクスチャ処理

スプライトの描画系命令ではテクスチャは管理されていませんし、セーブ時にも保存されません。
内部的にはスプライトもテクスチャで実装されています。詳しくはsystem.luaを参照して下さい。
基本的にはスプライト命令でほとんどの用は足せると思います。こちらは、スプライトを実装するための土台という側面が強いです。
tcreate "テクスチャ名",w,h
空白のテクスチャを作成します。幅と高さを指定します。(system.luaで実装)

目次に戻る

tload "テクスチャ名","画像ファイル名"
画像をテクスチャとしてロードします。(system.luaで実装)

目次に戻る

tfromb "テクスチャ名","ビットマップ名"
ビットマップオブジェクトをテクスチャに変換します。(system.luaで実装)

目次に戻る

tdelete "テクスチャ名"
テクスチャを削除します。(system.luaで実装)

目次に戻る

tdraw "テクスチャ名",x,y,a
テクスチャを指定位置に指定の透過度で描画します。(system.luaで実装)

目次に戻る

tdrawlt "テクスチャ名",cx,cy,xs,ys,rot,a
テクスチャを回転拡大縮小して描画します。(system.luaで実装)

目次に戻る

tfill "テクスチャ名",#色指定
テクスチャを指定した色で塗りつぶします。(system.luaで実装)

目次に戻る

tfrect "テクスチャ名",lx,ly,rx,ry,#色指定
テクスチャの(lx,ly)-(rx,ry)の範囲を指定色で塗りつぶします。(system.luaで実装)

目次に戻る

tgetsize "テクスチャ名",幅変数名,高さ変数名
テクスチャの幅と高さを取得します。(system.luaで実装)

目次に戻る

tsave "テクスチャ名","セーブファイル名"
テクスチャの内容をpngファイルとしてセーブします。(system.luaで実装)

目次に戻る

tbegin "テクスチャ名"
テクスチャへの描画を開始します。(system.luaで実装)

目次に戻る

tend
テクスチャへの描画を終了します。(system.luaで実装)

目次に戻る

tformat "テクスチャ名","表示文字列",{本文設定テーブル指定}[,{ルビ設定テーブル指定}]
テクスチャに文字列を書き込みます。引数の詳細はspformatを参照して下さい。(system.luaで実装)

目次に戻る

flag=tisplaying("テクスチャ名")
ムービーテクスチャが再生中の場合は1、再生が終了している場合は0を戻します。(system.luaで実装)

目次に戻る

ビットマップ処理

ビットマップは描画するためではなく内部で加工するための画像オブジェクトです。スクリーンショットを加工したり、いろいろなツールを作るときに使えます。
bcreate "ビットマップ名",w,h
空白のビットマップを作成します。(system.luaで実装)

目次に戻る

bload "ビットマップ名","画像ファイル名"
画像ファイルからビットマップを作成します。ビットマップという名前ですが、対応フォーマットはpngとjpegです。(system.luaで実装)

目次に戻る

bfromt "ビットマップ名","テクスチャ名"
テクスチャをビットマップに変換します。(system.luaで実装)

目次に戻る

bdelete "ビットマップ名"
ビットマップを削除する。(system.luaで実装)

目次に戻る

bsave "ビットマップ名","セーブファイル名"[,品質]
ビットマップを画像ファイルとして保存します。拡張子にpngを選べばPNGファイル、jpegもしくはjpgを選べばJPEGファイルになります(英字の大文字小文字はどちらでも構いません)。
JPEGの場合のみ品質を0-100で指定できます。省略した場合は95になります。
この命令はWindows BMP形式には対応していませんのでご注意ください。(system.luaで実装)

目次に戻る

bfill "ビットマップ名",#色指定
指定した色でビットマップを塗りつぶします。(system.luaで実装)

目次に戻る

bfrect "ビットマップ名",lx,ly,rx,ry,#色指定
指定した色で(lx,ly)-(rx,ry)の範囲を塗りつぶします。(system.luaで実装)

目次に戻る

breverse "ビットマップ名",xflag,yflag
ビットマップを反転します。1を指定した軸を反転します。(system.luaで実装)

目次に戻る

bresize "ビットマップ名",w,h
画像を拡大縮小してサイズ変更します。幅と高さを指定します。(system.luaで実装)

目次に戻る

btrim "ビットマップ名",lx,ly,rx,ry
(lx,ly)-(rx,ry)の範囲を切り抜いてそこだけを同じ名前のビットマップにします。(system.luaで実装)

目次に戻る

bjoinx "ビットマップ名1","ビットマップ名2"
ビットマップ2をビットマップ1の右にくっつけて新しいビットマップ1にします。(system.luaで実装)

目次に戻る

bjoiny "ビットマップ名1","ビットマップ名2"
ビットマップ2をビットマップ1の下にくっつけて新しいビットマップ1にします。(system.luaで実装)

目次に戻る

bgetsize "ビットマップ名",幅変数名,高さ変数名
ビットマップの幅と高さを取得します。(system.luaで実装)

目次に戻る

bdup "新ビットマップ名","コピー元ビットマップ名"
ビットマップをコピーします。(system.luaで実装)

目次に戻る

bgradation "ビットマップ名",#色1,#色2,xflag,yflag
色1から色2へのグラデーションでビットマップを塗りつぶします。(system.luaで実装)

目次に戻る

bnega "ビットマップ名"
ビットマップをネガポジ反転させます。(system.luaで実装)

目次に戻る

bmonotone "ビットマップ名",#色指定
ビットマップを指定色でモノトーン化します。(system.luaで実装)

目次に戻る

bbegin "ビットマップ名"
ビットマップへの描画を開始します。(system.luaで実装)

目次に戻る

bend
ビットマップへの描画を終了します。(system.luaで実装)

目次に戻る

bformat "ビットマップ名","表示文字列",{本文設定テーブル指定}[,{ルビ設定テーブル指定}]
ビットマップに文字列を書き込みます。引数の詳細はspformatを参照して下さい。(system.luaで実装)

目次に戻る

動画処理

movie filename[,clickskipflag]
画面全体にムービーを再生します。clickskipflagに0を指定するとクリックで飛ばせなくなります。(system.luaで実装)

目次に戻る

mreset
全ムービーテクスチャのアニメーションをリセット(最初から再生)します。(system.luaで実装)

目次に戻る

音声処理

bgmplay filename
OGGファイルをBGMとして再生します。(system.luaで実装)

目次に戻る

bgmplayonce filename
OGGファイルをBGMとして再生します。こちらはループしません。(system.luaで実装)

目次に戻る

bgmstop
BGMの再生を停止します。(system.luaで実装)

目次に戻る

bgmfadeout militime
BGMのフェードアウト時間を指定します。単位はミリ秒です。(system.luaで実装)

目次に戻る

bgmvolume volume
BGMのボリュームを指定します。0~-10000です(DirectXの仕様に合わせてあります)。0が最大で、-10000が完全無音ですが、-2000くらいでほとんど聞こえなくなります。実際に試していい感じの値にしてください。
ボリュームに関しては他のすべての音声処理で同じ範囲です。(system.luaで実装)

目次に戻る

seplay ch,filename
SEを再生します。チャンネル番号とファイル名を指定してください。チャンネル番号は0-15です。(system.luaで実装)

目次に戻る

seloop ch,filename
SEをループで再生します。チャンネル番号とファイル名を指定してください。チャンネル番号は0-15です。(system.luaで実装)

目次に戻る

sestop ch
SEの再生をストップします。チャンネル番号を指定してください。(system.luaで実装)

目次に戻る

sestopall
すべてのチャンネルのSEの再生をストップします。(system.luaで実装)

目次に戻る

sefadeout militime
SEのフェードアウト時間を指定します。単位はミリ秒です。(system.luaで実装)

目次に戻る

sevolume volume
SE全体のボリュームを設定します。(system.luaで実装)

目次に戻る

sechvolume ch,volume
あるチャンネルのボリュームを設定します。(system.luaで実装)

目次に戻る

voiceplay filename[,speed]
ボイスを再生します。speedは省略できます。ここに2を指定すると倍速で再生します。
なお、ファイル名に""を指定すると今鳴っているボイスが停止します。(system.luaで実装)

目次に戻る

voicewait
ボイスの再生終了を待ちます。アニメーション等は実行されます。(system.luaで実装)

目次に戻る

voicevolume volume
ボイスのボリュームを設定します。(system.luaで実装)

目次に戻る

bgvplay ch,filename
BGV(Back Ground Voice、台詞ボイス(VOICEPLAY命令)が再生されていないときにループで再生されるボイス)を再生します。chはチャンネルで0~15です。ファイル名に""を指定するとBGVが停止します。(system.luaで実装)

目次に戻る

bgvfadeout militime
BGVのフェードアウト時間を指定します。単位はミリ秒です。(system.luaで実装)

目次に戻る

bgvolume volume
BGVのボリュームを設定します。(system.luaで実装)

目次に戻る

sound "サウンド名"
サウンドオブジェクトを作成します。
sound sdelete splay sstop svolume span sfadeout spause sresume sisplayingは、サウンドオブジェクトを直接扱う命令です。BGMやSEやVOICEの命令も内部的にはこれで実現されています。
これらのオブジェクトはセーブ機能ではセーブされません。あまり直接使う機会はないかもしれません。実装詳細はsystem.luaの該当部分を読んでください。
なお、BGM系命令はサウンドオブジェクト"BGM0"もしくは"BGM1"が交互に、ボイス命令は"VOICE"、SEは"SE0""SE1"、BGVは"BGV0""BGV1"...で処理されます。これらにSOUND系命令の機能を使いたい場合はこの名前でアクセスしてください。(system.luaで実装)

目次に戻る

sdelete "サウンド名"
サウンドオブジェクトを削除します。(system.luaで実装)

目次に戻る

splay "サウンド名",{name="サウンドファイル名",loop=ループフラグ(0か1),looppoint=ループ再開位置(秒単位、小数可),volume=ボリューム,pan=パン,speed=スピードフラグ(1か2),fadeintime=フェードイン時間(ミリ秒単位)}
サウンドを再生します。nameだけは必須ですが、あとは省略できます。(system.luaで実装)

目次に戻る

sstop "サウンド名"
再生中のサウンドオブジェクトを停止します。オブジェクト自体はなくなりません。(system.luaで実装)

目次に戻る

svolume "サウンド名",vol
サウンドオブジェクトのボリュームを設定します。他と同じく0~-10000です。(system.luaで実装)

目次に戻る

span "サウンド名",pan
サウンドをパン(左右に偏らせる処理)します。-10000~10000で、真ん中が0です。(system.luaで実装)

目次に戻る

sfadeout "サウンド名",フェードアウト時間
サウンドをフェードアウトします。(system.luaで実装)

目次に戻る

spause "サウンド名"
サウンドの再生を一時停止します。(system.luaで実装)

目次に戻る

sresume "サウンド名"
一時停止していたサウンドの再生を再開します。(system.luaで実装)

目次に戻る

vol=getbgmvolume()
BGMのボリュームを取得します。(system.luaで実装)

目次に戻る

vol=getsevolume()
SEのボリュームを取得します。(system.luaで実装)

目次に戻る

vol=getvoicevolume()
ボイスのボリュームを取得します。(system.luaで実装)

目次に戻る

vol=getbgvvolume()
BGVのボリュームを取得します。(system.luaで実装)

目次に戻る

flag=sisplaying("サウンド名")
サウンドオブジェクトが再生中なら1、停止していれば0を返します。(system.luaで実装)

目次に戻る

演出処理

transition "切り替え元画像","切り替え先画像",rate,typestr,option
トランジション途中の画像を描画する命令です。print命令で行うトランジションは内部的にこれを呼び出しています。これを使うのはトランジションをカスタマイズする場合でしょうから、詳しくはsystem.luaと、Luaマニュアルのほうを参照してください。(system.luaで実装)

目次に戻る

quake [time,num,size]
画面を地震のように揺らします。エフェクトに掛ける時間、揺らす回数、揺らす幅を指定します。
幅の単位はピクセルではありません。1=画面の1/32です。(system.luaで実装)

目次に戻る

セーブ/ロード/ファイル処理

save num
セーブを実行します。numはセーブ番号です。整数を指定してください。(C++で実装)

目次に戻る

load num
ロードを実行します。numはセーブ番号です。データがない場合はエラー終了します。(C++で実装)

目次に戻る

savepoint
明示的にセーブポイントを更新します。呼び出さなくても表示文先頭では自動的に呼び出されています。savemode 0時には自動セーブポイント更新は停止しますが、この命令を実行した時はセーブポイントが更新されます。(C++で実装)

目次に戻る

savemode flag
セーブポイントが自動で更新されるかどうかを設定します。0で自動更新が止まります。1で再開します。(C++で実装)

目次に戻る

filetime filename,year変数,month変数,day変数,hour変数,min変数,sec変数
ファイルの更新年月日時分秒を取得します。ファイルがない場合は変数の値を変更しません。(C++で実装)

目次に戻る

savetime num,year変数,month変数,day変数,hour変数,min変数,sec変数
セーブデータ、セーブ番号numの更新年月日時分秒を取得します。データがない場合は変数の値を変更しません。(C++で実装)

目次に戻る

linsert @label(もしくはlabel "@label")
ラベルログに、そのラベルを通過したものとして挿入します。ラベルそのものでもラベル名文字列でもどちらでも指定できます。(C++で実装)

目次に戻る

finsert filename
ファイルログに、そのファイルにアクセスしたものとして挿入します。(system.luaで実装)

目次に戻る

strsave filename,str
文字列をファイルに保存します。(C++で実装)

目次に戻る

flag=lchk(@label)(もしくはflag=lchk("@label"))
そのラベルを通過したことがあれば1、なければ0になります。回想モードなどで使うといいでしょう。(C++で実装)

目次に戻る

flag=schk(num)
セーブ番号numのセーブデータが存在すれば1、なければ0を返します。(C++で実装)

目次に戻る

flag=tchk()
@textの中で使います。その表示文を以前に読んだことがあれば1、なければ0を返します。(C++で実装)

目次に戻る

flag=filechk(filename)
ファイルfilenameがアーカイブもしくは裸ファイルの中に「存在すれば」1、なければ0を返します。なお、このfilenameにはアーカイブ自身(01.ns2など)も指定できます。パッチの有無などの判定に使えます。(system.luaで実装)

目次に戻る

flag=fchk(filename)
そのファイルを「読み込んだことがあれば」1を、なければ0を返します。CGモードなどの実装に使います。filechkとの違いにご注意ください。(system.luaで実装)

目次に戻る

str=strload(filename)
strsaveでセーブした文字列や、その他テキストファイルを文字列としてロードします。アーカイブの中からも読めます。(C++で実装)

目次に戻る

変数の変換・配列・文字列処理

split src,sep,val1[,val2,....]
文字列srcを区切り文字sepで分割して変数に代入していきます。データがなくなると""を代入します。(C++で実装)

split "test/abc/def","/",a,b,c ; a="test" b="abc" c="def"
split "abc,def",",",a,b,c ; a="abc" b="def" c=""

目次に戻る

splita src,sep,var
splitの配列版です。文字列srcを区切り文字sepで分割して配列varに代入します。一番最後に#NILというシンボルを代入します。(C++で実装)

splita "test/abc/def","/",a ; a[0]="test" a[1]="abc" a[2]="def" a[3]=#NIL

目次に戻る

vclear var
与えた名前の変数、配列、もしくは構造体をクリアします。値を消去し宣言前の状態になります。(C++で実装)

目次に戻る

vcopy dest,src
配列もしくは構造体srcを配列もしくは構造体destにコピーします。(C++で実装)

a[0]=1
a[1]=2
a[2]=3
vcopy b,a ; b[0]=1 b[1]=2 b[2]=3
fighter.hp=100
fighter.mp=0
vcopy monk,fighter ; monk.hp=100 monk.mp=0

目次に戻る

flag=isdef(var)
変数varが定義(既に何かの値を代入)されていれば1、されていなければ0を戻します。未定義の変数の値を参照すると普通はエラーが出ますが、isdef関数だけは例外です。(C++で実装)

目次に戻る

n=num(s)
文字列を数値に変換します。(C++で実装)

目次に戻る

s=str(n)
数値を文字列に変換します。(C++で実装)

目次に戻る

code=asc(c)
指定した文字のキャラクターコードを得ます。1バイト文字専用です。(C++で実装)

目次に戻る

c=chr(code)
指定したキャラクターコードの文字を得ます。1バイト文字専用です。(C++で実装)

目次に戻る

s=strf("printf書式指定",val)
与えた数値を書式を整えてした形で文字列に戻します。書式指定にはprintfと同じものを、数値(整数もしくは実数)ひとつ分だけ指定できます。詳しくはC言語のprintfを調べてください。(C++で実装)

s=strf("%3d",12) ; s=" 12"
s=strf("%04d",15) ; s="0015"

目次に戻る

sym=type(val)
値の型が数値なら#NUMBER、文字列なら#STRINGを戻します。(C++で実装)

目次に戻る

ret=replace("処理する文字列","検索文字列","置き換え文字列")
文字列の単純な置換を行います。置換した結果の文字列を返します。与えた文字列が変数でも、それを直接書き換えるわけではないので注意してください。戻ってきた値を代入しなければなりません。(C++で実装)

目次に戻る

ret=left(str,num)
文字列の左からnum文字を返します。文字列より長い数値を指定すると文字列全部を返します。(C++で実装)

目次に戻る

ret=right(str,num)
文字列の右からnum文字を返します。文字列より長い数値を指定すると文字列全部を返します。(C++で実装)

目次に戻る

ret=mid(str,pos,num)
文字列の左からpos文字目をスタートとして、そこからnum文字を返します。文字列より長い数値を指定するとposから残り全部を返します。posは0から数えることに注意してください。(C++で実装)

目次に戻る

ret=trim(str)
文字列の左右の端の空白または改行文字を削除して戻します。(C++で実装)

目次に戻る

ret=ltrim(str)
文字列の左の端の空白または改行文字を削除して戻します。右は削除しません。(C++で実装)

目次に戻る

ret=rtrim(str)
文字列の右の端の空白または改行文字を削除して戻します。左は削除しません。(C++で実装)

目次に戻る

l=len(str)
文字列の長さをバイト単位で戻します。日本語の文字数ではないことに注意してください。内部的に日本語文字列はUTF-8になっています。一文字2バイトとは限りません(3バイトのことも多いです)(C++で実装)

目次に戻る

l=zlen(str)
文字列の日本語における文字数を戻します。バイト数ではありません。(C++で実装)

目次に戻る

ret=lcase(str)
文字列中の大文字を全部小文字に変換した文字列を戻します。(C++で実装)

目次に戻る

ret=ucase(str)
文字列中の小文字を全部大文字に変換した文字列を戻します。(C++で実装)

目次に戻る

ret=zenkaku(str)
文字列を全角文字列に変換した文字列を戻します。(C++で実装)

目次に戻る

ret=join(sep,val1,val2,...)
与えた文字列を区切り文字sepで順番につなげた文字列を戻します。(C++で実装)

cprint join("/","abc","def","ghi") ; "abc/def/ghi"が出力される

目次に戻る

ret=joina(sep,var)
文字列の配列varを0から順番に区切り文字sepでつなげて戻します。(C++で実装)

a[0]="abc"
a[1]="def"
a[2]="ghi"
cprint joina("/",a) ; "abc/def/ghi"が出力される

目次に戻る

pos=search("処理する文字列","検索する文字列")
処理対象の文字列から検索する文字列を探し、その位置を戻します。posは0から数えることに注意してください。(C++で実装)

目次に戻る

ret=regex_replace("処理する文字列","正規表現","変換対象")
正規表現で置換した文字列を返します。正規表現については、boost 正規表現 で検索してください。(C++で実装)

目次に戻る

l=vlen(var)
varで指定した配列の要素数を戻します。添字0から数えて、未定義の番号がもしあればそこでカウントが止まります。(C++で実装)

目次に戻る

ub=vubound(var)
配列varの最も大きい添字番号を戻します。間に未定義の番号があっても正しく動作します。(C++で実装)

目次に戻る

lb=vlbound(var)
配列varの最も小さい添字番号を戻します。間に未定義の番号があっても正しく動作します。(C++で実装)

目次に戻る

数学処理

randomseed num
擬似乱数を初期化します。0を与えると起動後の時間を使って毎回違った初期化をします。同じ種で初期化したい場合は0以外の正の整数を指定してください。(C++で実装)

目次に戻る

p=pi()
円周率を返します。(C++で実装)

目次に戻る

s=sin(x)
サイン関数の値を返します。なお、以下すべての三角関数において、扱う角度の単位は「ラジアン」です。(C++で実装)

目次に戻る

hs=sinh(x)
ハイパーボリックサイン関数の値を返します。(C++で実装)

目次に戻る

c=cos(x)
コサイン関数の値を返します。(C++で実装)

目次に戻る

hc=cosh(x)
ハイパーボリックコサイン関数の値を返します。(C++で実装)

目次に戻る

t=tan(x)
タンジェント関数の値を返します。(C++で実装)

目次に戻る

ht=tanh(x)
ハイパーボリックタンジェント関数の値を返します。(C++で実装)

目次に戻る

as=asin(x)
アークサイン関数の値を返します。(C++で実装)

目次に戻る

ac=acos(x)
アークコサイン関数の値を返します。(C++で実装)

目次に戻る

at=atan(x)
アークタンジェント関数の値を返します。(C++で実装)

目次に戻る

at2=atan2(x0,x1)
アークタンジェント関数の値を返します。入力をx0/x1で与えます。x0に0を指定すると、x1が正の時π/2、負の時-π/2を返します。 (C++で実装)

目次に戻る

v=random()
乱数を返します。値は0~32ビット整数の上限までの整数なので、これをmodで余りを取る等して必要な乱数を得ます。(C++で実装)

目次に戻る

e=exp(x)
指数関数です。自然対数の底eのx乗を得ます。(C++で実装)

目次に戻る

ln=log(x)
自然対数関数です。自然対数の底eを使って、ln(x)を得ます。(C++で実装)

目次に戻る

l10=log10(x)
常用対数関数です。底10を使ってlog10(x)を得ます。(C++で実装)

目次に戻る

r=rad(x)
ディグリー単位(普通の「度」です。直角が90度)の角度を与えると、ラジアンに変換した値を返します。(C++で実装)

目次に戻る

d=deg(x)
ラジアン単位の角度を与えるとディグリー単位に変換した値を返します。(C++で実装)

目次に戻る

s=sqrt(x)
xの平方根を返します。(C++で実装)

目次に戻る

f=floor(x)
切り捨て関数です。xの小数点以下を負の無限大方向に丸めた値を返します。NScripter2は整数型を持たず、すべての計算は実数で行われますので、この関数は座標などを扱うときによく使います。(C++で実装)

cprint floor(3.14) ; -> 3
cprint floor(-1.5) ; -> -2 ; 小さい方に丸めています。

目次に戻る

c=ceil(x)
切り上げ関数です。xの小数点以下を正の無限大方向に丸めた値を返します。floorは「床」ceilは「天井」なので、高い低いでイメージするとわかりやすいでしょう。(C++で実装)

cprint ceil(3.14) ; -> 4
cprint ceil(-1.5) ; -> -1 ; 大きい方に丸めています。

目次に戻る

a=abs(x)
xの絶対値を返します。(C++で実装)

目次に戻る

s=sgn(x)
符号関数です。xが正ならば1、0ならば0、負ならば-1を返します。(C++で実装)

目次に戻る

その他の処理

lua str
文字列strをLuaスクリプトとしてコンパイルし、実行します。(C++で実装)

目次に戻る

luafile filename
luaスクリプトファイルを読み込んで実行します。(C++で実装)

目次に戻る

setclipboard str
指定した文字列をクリップボードにテキストとしてコピーします。外部のテキストエディタ等にペースト出来ます。デバッグ機能などに使います。(C++で実装)

目次に戻る

result=luaf(str)
文字列をLuaスクリプトとして実行します。数値か文字列を返せます。
内部的には、"return (" .. str .. ")" をコンパイルして実行し、戻った値をBASICにかえしています。(C++で実装)

目次に戻る