押さえておきたい仕様など

■ INDEX

仕様一覧 / グローバル変数 / スプライト / ボタン待ち(旧ボタンのbtnwait) / ボタン待ち(新ボタンのbexec) / 状態取得 / systemcallで呼べる命令一覧 / スプライトアニメのループ形式 / ボタン定義用のlsp一覧 /

◆ 仕様一覧 ◆

2013/02/13時点の最新版はver2.96です。

(win7 64bit環境での検証)nscr2.82nscr2.95nscr2.96
スプライト 0〜999まで(計1000枚)使用可能。
数値変数 nscr2.82%0〜%4095まで(計4096個)使用可能
nscr2.95%0〜%4095まで(計4096個)使用可能
nscr2.95デフォルトで同上。00.txtの1行目で指定することで可変
代入限度:32bit整数。2147483647〜-2147483648の範囲(±約21億)
文字列変数 nscr2.82$0〜$4095まで(計4096個)使用可能
nscr2.95$0〜$4095まで(計4096個)使用可能
nscr2.95デフォルトで同上。00.txtの1行目で指定することで可変
nscr2.82代入限度:(半角で2040文字、全角で1020文字まで使用可能)
nscr2.95代入限度:(半角で8183文字、全角で4091文字まで使用可能)
nscr2.96代入限度:(半角で8183文字、全角で4091文字まで使用可能)
配列変数 ?x〜?x+4095までの4096個を使用可能。添え字は20次元まで。ただし環境依存する。
配列に文字列は代入できない。(文字列変数で代用。SGPさんに素晴らしい記事有り)
配列の内容はセーブデータに保存されない。配列への数値代入方法はmov・movlのみ。
補講でも配列に関して記述。NScripterの配列は永字八法さんのdimの考察に詳しい。
(ver2.93以降)Luaのテーブルを利用すると妙な制限もなく高機能な配列が使用可能。
ラベルの上限数 nscr2.8210000個まで使用可能。(※ただし*define *start の2つを含む)
nscr2.9510000個まで使用可能。(※ただし*define *start の2つを含む)
nscr2.95デフォルトで同上。00.txtの1行目で指定することで可変
gosubで潜れる深さ 1000回まで可能。
ボタン定義の上限数 旧ボタン(spbtn)511個まで、新ボタン(bsp)256個まで可能。
エフェクト定義数 2番〜255番までの計254個登録可能。(※0,1は効果固定)
画面領域 nscr2.82nscr2.95デフォ(0,0)-(639,479)。;mode800時には(0,0)-(799,599)
nscr2.95デフォルトで同上。00.txtの1行目で指定することで可変
対応OS
(※必要ランタイム
nscr2.82nscr2.95Win98以降の各OS(※DirectX8.0a以降必須
nscr2.95WinXP以降の各OS(※DirectX9(November 2008)以降必須

(※ こちらに検証スクリプトを置いておきます。WinXP当時のver2.82検証結果もそちらに記載しておきます。

デフォルトで利用可能なファイル拡張子
画像 BMP,JPG,PNG
(2013/2/13 追記:PNGのみの利用を推奨
※PNGは公式同梱プラグイン利用のこと
※立ち絵もスプライトも透過PNGを利用可能。未だ誤解されているようなので一応
※GIFは利用できません。アニメーションさせたい場合はlspでタグ指定すれば可能
音声 WAV,OGG,MP3,MID,WMA
(2013/2/13 追記:OGGのみの利用を推奨
※OGGは公式同梱プラグイン利用のこと
※nsogg2.dll利用時はwavとogg以外bgm命令でリピート再生せず
※mp3ファイルは大概の環境バグの原因なので極力控えるべき
動画 AVI,MPEG,WMV
(2013/2/13 追記:MPEG-1形式の動画を推奨
※Windows Media Playerに投げる
※マシンにコーデックが有ることが前提なので有名規格で圧縮かけるべき
※その他、有志の方が制作されたプラグインにてOgg Theora・swfファイルも可能

△page top

◆ グローバル変数 ◆


globalon;  (*define節に要記述)カレントか指定フォルダにsavファイル作成

上の記述でグローバル変数(※ゲームを終了しても保持される変数)が利用できます。
デフォルトでは 数値変数%200〜%4095、文字列変数$200〜$4095 がグローバル変数となります。
globalonを記述しない場合は後述の;valueや;$G指定があっても全て通常変数として扱われます。

  ※一般的なプログラミング用語でのグローバル変数とは意味が違いますのでご注意ください

nscr2.82nscr2.95
通常変数とグローバル変数の境目は変更することができます。
その場合 0.txt の1行目に命令を記述する必要があります。空行を挟んではいけません。
例えば ;value500 と打つと、通常の変数範囲が %0〜%499・$0〜$499 に、
グローバル変数範囲が %500〜%4095・$500〜$4095 へと変更されることになります。

画面サイズとグローバル変数の境目を両方とも変更したい場合は


;mode800,value500

といった具合に並べて記述します。

  ゲームの規模にもよるが、将来のカスタマイズの可能性も考えて、
  はじめから ;value500 または ;value1000 くらいにしておいたほうがいいと思います。
  後から直すと結構手間がかかります。

nscr2.96
ver2.96以降は記述方法が変わりました。解像度や変数・ラベルの詳細を自由に設定できるようになりました。
;$V変数の総数Gグローバル変数開始位置Sウィンドウ横幅,ウィンドウ高さL総ラベル数(兼ファイルログの最大数)


;$V2000G1000S960,540L10000

こちらも必ず 00.txt の1行目に命令を記述する必要があります。空行を挟んではいけません。
上の指定例では、変数%0〜999と$0〜999が通常変数(ローカル変数)、
変数%1000〜1999と$1000〜1999がグローバル変数になり、2000番以降は利用できません。
ウィンドウサイズ(0,0)-(959,539)で、総ラベル数は10000個までとなります。
過去作との互換性がありますので、ver2.96のエンジンでも;mode800,value1000の記述が有効です。

△page top

◆ スプライト ◆

画像のこと。わかりにくいという人はレイヤーのようなものと考えてみて下さい。
そして、一枚のレイヤーに一枚の画像を描くとそれ以外には使えないと思って下さい。
合計1000枚のレイヤー使えると考えると、中々に贅沢ですよね。
下にそのレイヤー階層の上下を書いてみました。参考までにどうぞ。


humanz 200;   まずこの2行を*define節に記述します。
windowback;   深いことは考えず儀式みたいなものと思ってください。

まず上記のコードを書いておきますと、表示順が↓のようになります。これを頭に叩き込んでおきましょう。

_______________
|(上)  スプライト番号0   |
| ↑   スプライト番号199  |
| ○   テキストウィンドウ  | 通常の文章
| ●   立ち絵       | ld命令
| ↓   スプライト番号200  |
| ↓   スプライト番号999  |
|(下)  背景        | bg命令
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

もちろん humanz 200 の200を変更すると、基準となる立ち絵の階層が変わります。
また、windowback を削りますと、文章がスプライト番号0より上に表示されるようになります。

上の表にありますように、Nスクではスプライト番号が若い程上層に表示されます。
例えばセーブサムネイルにマウスポインタを重ねた時に、選択用の枠を表示させたいという場合には
サムネイルのスプライト番号よりも、選択枠のスプライト番号を若くする必要があります。

ちなみに、スプライト0番の上層に「バー」が、その更に上の階層に「数値ラベル」が存在します。
その二つは逆に若い番号が下になります。
さらに、mpegやaviなどの「動画」は無条件で最上部にて再生されます。

△page top

◆ ボタン待ち(旧ボタンのbtnwait) ◆

■キー取得のオプション命令

usewheel
useescspc

*define節に記述。以後全ボタン命令で有効。

getpage
getenter
gettab
getfunction
getcursor
getinsert
getzxc
getmclick
(※ver2.94以降)
※実行部に記述。btndef系後にbtnwait系命令までに挟む。

getskipoff
※カスタマイズ時の*text_lb内で使用。

  (※有効範囲)
  これらのボタン取得設定及びbtnareabtntime類での設定は、
  一度設定されると次のbtndef clearまでずっと有効になります。
  usewheeluseescspcに関してはclear後も有効です。

■返り値一覧

1〜999:スプライトボタンの選択
0:左クリック(非getenter時のEnterキー)
-1:右クリック
-2:ホイール上方向(非usewheel時のbtntime時間切れ)
-3:ホイール下方向
-4:btnarea範囲にマウスカーソル
-5:btntime時間切れ(usewheel時)
-10:Esc
-11:Spaceバー
-12:PageUp
-13:PageDown
-19:Enter
-20:TAB
-21:F1
-22:F2
-23:F3
-24:F4
-25:F5
-26:F6
-27:F7
-28:F8
-29:F9
-30:F10
-31:F11
-32:F12
-40:↑キー
-42:↓キー
-41:→キー
-43:←キー
-50:Insert
-51:Z
-52:X
-53:C
-60:スキップ終了
-61:オート終了
-70:マウスの中ボタンをクリック(※ver2.94以降)

■キーボード一覧

デフォルト時取得可能一覧
key

フルオプション時(※エンター/スペースが0から-19/-11に変化)
key

上記画像を作る際に利用させていただいた素材
Keyboard Keys Images | attosoft.info http://attosoft.info/blog/japanese-keyboard-images/ (CC BY)

△page top

◆ ボタン待ち(新ボタンのbexec)※ver2.93以降 ◆

■キー取得のオプション命令

bcursor
※実行部に記述。bclearからbexecまでに挟む。

■返り値一覧

"S0""S999":スプライトボタンの選択
"LCLICK":マウス左クリック・エンターキー・スペースキー
"RCLICK":マウス右クリック
"MCLICK":マウス中クリック(ホイールクリック)
"WHEELUP":マウスホイール上回転
"WHEELDOWN":マウスホイール下回転
"1""0":各数字キー
"A""Z":各英字キー(※Dキーデバッグ/Nキースキップに注意)
"F1""F12":ファンクションキー
"PAGEUP":ページアップキー
"PAGEDOWN":ページダウンキー
"ESC":エスケープキー
"SHIFT":シフトキー
"CTRL":コントロールキー
"SPACE":スペースキー(※bcursor時。非設定時は"LCLICK"
"RETURN":エンターキー(※bcursor時。"ENTER"ではないことに注意。非設定時は"LCLICK"
"UP":カーソルキー上(※bcursor時。非設定時は無効)
"DOWN":カーソルキー下(※bcursor時。非設定時は無効)
"LEFT":カーソルキー左(※bcursor時。非設定時は無効)
"RIGHT":カーソルキー右(※bcursor時。非設定時は無効)
"SKIP":スキップ状態時・メニューの「選択肢まで進む」
"AUTO":オート状態時・メニューの「オートモード」(※待ち時間の設定があってもノータイム)
"TIMEOUT":タイムアウト(btimeの待ち時間経過後にこれを持って流れる)

■キーボード一覧

デフォルト時取得可能一覧(※テンキー取得不可なことに注意)
key

bcursor命令の使用時(※エンター・スペース・カーソルキーで動作変更)
key

上記画像を作る際に利用させていただいた素材
Keyboard Keys Images | attosoft.info http://attosoft.info/blog/japanese-keyboard-images/ (CC BY)

△page top

◆ 状態取得 ◆

isで始まる命令文で現在の状況を取得できます。指定した数値変数に下記の値が返ってきます。

isskip %数値変数

  返り値:
  0 = 状態は通常
  1 = スキップ中
  2 = オート中

  (※スキップだけでなく、オート状態の取得も出来る)

isdown %数値変数

  返り値:
  0 = ボタン入力されていない
  1 = 入力がされている

  (※左クリックを押しっぱなしかどうか等の判定に使用)

isfull %数値変数

  返り値:
  0 = ウィンドウ表示中
  1 = フルスクリーン表示中

  (※コンフィグ画面などで使用)

ispage %数値変数

  返り値:
  0 = @*text_lbに入ってきている
  1 = ¥*text_lbに入ってきている

  (※システムカスタマイズ時のクリック待ちマーク分けなどに使用)

△page top

◆ systemcallで呼べる命令一覧 ◆

例文:systemcall skip

  skip     …… メッセージスキップ。既読未読は事前の設定に従う。
  automode   …… オート開始。待ち時間は設定に従う。
  save     …… デフォルトのセーブメニューを表示。
  load     …… デフォルトのロードメニューを表示。
  lookback   …… デフォルトのバックログを表示。
  windowerase …… テキストウィンドウを一時消去。
  reset    …… リセットしますか? はい/いいえ のメニューを表示。
  resetdlg   …… リセット確認 はい/いいえ の「ダイアログ」を表示。
  rmenu    …… デフォルトの右クリックメニューを表示。

△page top

◆ スプライトアニメのループ形式 ◆

例:
png
waiting.png 16セル 透過png の場合。(※左端が1番セルで右へ順に連結して作成します)


lsp 1,":a/16,50,0;waiting.png",100,100

lsp スプライト番号,":透過タグ/セル数,1セル当たりの時間,ループ形式;画像ファイル",x座標,y座標

■透過タグ

いつもの画像タグを指定。l r c a m と各種ありますが、まず a(透過付)と c(ベタ)以外は使いません。

■1セル当たりの時間

・全指定

上のサンプルでは、全てのセルの持ち時間を 50 と指定しています。
少ない数値では早く、大きい数値では遅くなります。

・個別指定

上の 50 の所を <10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160> 等と書きます。
これで個別に持ち時間を指定できます。セルの数だけ指定が必要です。指定が足りない場合はタグエラー。

---------------------------
タグエラー
---------------------------
タグの指定がおかしいです。
00.txt line:21
>	lsp 8,":a/10,<10,30,40,50,60,70,80,90,100>,0;img¥anim.png",10,10
---------------------------
OK   
---------------------------

■ループ形式

0 ……先頭に戻る繰り返し 例:12345123451234512345...

1 ……終端でストップする 例:12345

2 ……終端で遡行する繰り返し 例:12345432123454321...

△page top

◆ ボタン定義用のlsp一覧 ◆

bsp / spbtn / exbtn に番号指定するとマウスオーバーで変化するようなスプライトの定義の仕方です。

■普通の画像スプライト(基本)

lsp 1,":a/2,0,3;img¥button1.png",100,0

lsp 2,":c/2,0,3;img¥button2.png",100,100

指定としてはアニメスプライトの一種なのですが、気にせず/2,0,3と決まり文句で覚えましょう。

■文字列スプライト

lsp 3,":s/50,50,0;#FFFFFF#FF0000"+"ボタン3",100,200

普通の文字列スプライトですが、NScripterは色コードを並べると自動でセルを増やしてくれます。

■矩形スプライト(ver.2.93以降)

lsp 4,":c/2,0,3;>400,50,#FFFFFF#FF0000",100,300

矩形スプライトです。NScripterは色コードを並べると横に均等に塗り分けをしてくれます。
ただ、/2,0,3指定によって横幅400をセル数2で割った200x50の長方形になることに注意。


;実例
lsp 1,":a/2,0,3;img¥button1.png",100,0
lsp 2,":c/2,0,3;img¥button2.png",100,100
lsp 3,":s/50,50,0;#FFFFFF#FF0000"+"ボタン3",100,200
lsp 4,":c/2,0,3;>400,50,#FFFFFF#FF0000",100,300
print 1
for %0=1 to 4:bsp %0:next
bexec $0
mesbox $0,"返り値"
end

動作確認用に素材を置いておきます。
button1 button1.png(透過度付)
button2 button2.png(ベタ)

△page top