新ボタン命令によるシステムカスタマイズのサンプル
 新ボタン命令(bexecなど)を使用したシステムカスタマイズのサンプルスクリプトをDelusionist's UtopiaのNScripterページにアップしました。
 Luaを使用しない純正NScripter仕上げです。新ボタン命令の使い方や注意点、問題点などを知ってもらうために作成したので、なるべく難しいことはしないように注意してスクリプトを書きました。今回はtextgosubのみですが、今後は→ックリックメニューや回想、セーブ・ロード画面などもbexecでカスタマイズしていく予定です。



 Luaを使用したシステムカスタマイズに関しても興味があるのですが、現在むいむい。さんが頑張ってらっしゃるようなので、Luaに関して自分はひとまず別方向に進もうかと思ってます。
 今考えているのは、
・アニメーション割り込み(NSCALL_animation)を応用した、画像描画以外の何か
・Luaを使ってキーコンフィグ
 といった内容です。
[PR]
# by lyricist_m | 2009-07-16 04:39 | NScripter
ローカル宣言を行なう場所に対しての注意
local a = "test"

luasub("test")
function NSCOM_test ()
NSExec('caption "'..a..'"')
end

--local a = "test"


 上記Luaスクリプトにおいて、上のlocal aをコメントアウトして、反対に下にあるlocal aのコメントアウトを外すと、エラーになります。どうやら、関数宣言より下にあるローカル宣言は、関数内からは見えないようで。test命令が呼び出されるのはNScripter側、つまりLuaスクリプトを全て読み込んだ後なので、ちゃんと変数aに値がセットされるものだと思ったのですが。ちなみに上記Luaスクリプトからlocalを外して通常の代入文にした場合は、上でも下でも普通に動きます。うーん、これってLuaリファレンス読めば書いてあるんだろうか。
 スクリプト中でローカル宣言をベタ書きする(関数外に書く)場合は、順番に注意が必要ですね。とりあえず、ローカル宣言はファイルの先頭にまとめて書いてしまった方がいいと思います。
[PR]
# by lyricist_m | 2009-07-15 23:50 | NSLua
bexecをキーアップに対応させる
 bexec命令は、マウスに関しては「ボタンが離された瞬間」に処理が返ってくるのですが、キーボードに関しては「キーが押された瞬間」に処理が返ってきます。この点が旧ボタン命令と異なるので、単に命令を置き換えるだけでは誤動作する場合が多々あります。なので、旧ボタン命令と同じ感覚で使えるように、bexec命令を用いた自作命令bexec2を作成し、「キーが離された瞬間」に処理が返ってくるようにしてみました。以下、スクリプト。

*bexec2
getparam s%0

bexec $%0
;if $%0 == "CTRL" return
mov $1,$%0
len %1,$1
if 1 < %1 && %1 < 5 && "S" < $1 && $1 < "T" mov $1,"LCLICK"
if $1 != "LCLICK" jumpf
checkkey %1,"SPACE":if %1 == 1 mov $1,"SPACE":jumpf
checkkey %1,"RETURN":if %1 == 1 mov $1,"RETURN":jumpf

~
checkkey %1,$1
if %1 == 0 return
wait 10
jumpb
return


 bexec2命令はbexec命令と同様、押されたボタンを文字列として返します。スプライトボタンの場合はS+スプライト番号という形式ですね。この命令を使えば、キーダウン時ではなくキーアップ時に処理が返ってきます。また、bcursor命令を指定していない場合でもスペースキーとリターンキーが正常に動作するように、bexec命令でLCLICKが返ってきたらcheckkey命令で実際に押されたキーは何なのかを判別しています。あと、bexec命令の下のコメントアウトを外すと、コントロールキーの場合のみキーダウン時に返ってくるようになるので、クリック待ち時のコントロールスキップも可能になります。



 話変わって。
 現在、bexec命令を用いたシステムカスタマイズ用サンプルスクリプトを作成中です。一応、nsluaサンプルスクリプト内のシステムカスタマイズサンプルでbexecが使われているのですが、Luaが使われているので、単純にbexec命令の使い方を知りたい人は手が出しづらいんじゃないかと思いまして。「俺はLuaなんて使わないぞ!」なんて方もいるでしょうからね。
 とりあえずクリック待ちの部分はできたので、あとはちょこちょこ調整してから公開しようと思います。右クリックメニューとかセーブロード画面などその他諸々は、公開してから追加していく形で。
[PR]
# by lyricist_m | 2009-07-07 18:31 | NScripter
bcursor命令について
[2009年7月5日修正、追記]
 更新.txtには「カーソルキー入力を得たい場合はbclearとbexecの間にbcursor命令を入れてください。」と書いてありますが、エンターキーとスペースキーの入力を得たい場合もbcursor命令を使用する必要があります。
 以下、検証用スクリプト。

*define
game

*start
;bcursor
bexec $0
caption $0
goto *start


 押されたキーをタイトルバーに表示するだけのスクリプトです。bcursor命令をコメントアウトしていない場合とした場合で、カーソルキー・エンターキー・スペースキーに対する挙動が変化することを確認できるはずです。bcursor命令を使用しない場合、カーソルキーに対しての反応は無く、エンターキーとスペースキーに対してはLCLICKが返りますカーソルキーはスプライトボタンの選択に用いられ、エンタキー・スペースキーは左クリックと同様の動作をします(ただしbexecから処理が返ってくるのはキーアップ時ではなくキーダウン時)。使用した場合はカーソルキーはUP・DOWN・RIGHT・LEFT、エンターキー=RETURN、スペースキー=SPACEとなります。

[追記]
 きなこさんからのコメントを受けて、スプライトボタンに関して調べていなかったことに気がついたので、ちょっと試してみました。

*define
game

*start
bclear
lsp 1,":s#FFFFFF#FF0000あいうえお",0,0
print 1
bsp 1
;btrans

*loop
bexec $0,%0
if %0 > 0 inc %1:itoa $1,%1:caption "sp"+$1:goto *start
goto *loop


 上記スクリプトは、スプライトボタンを1個設置し、それがクリックされるとspX(Xにはボタンがクリックされた回数が入る)という文字列をタイトルバーに表示するものです。このスクリプトにおいて、スプライトボタンに対して左クリックをした場合とカーソルで選択→エンターキーないしスペースキーで決定した場合では、明らかに動作が異なります。
 具体的には、左クリックの場合はマウスの左ボタンがアップされた後でbexecから処理が返ってくるのに対し、エンターキー・スペースキーの場合はキーがダウンされてすぐに処理が返るという違いがあります。なので、後者ではキーを押している間中数字が増え続けることになります。
 もしbcursor命令を使用しない場合は「戻り値がLCLICKでもマウスからの入力とキーボードからの入力の2通りの場合があり、動作が異なる」ことを覚えておかなければなりませんね。

 余談ですが。
 上記スクリプトでbtrans命令のコメントアウトを外すと、カーソルキーでボタンを選択しようとしても透過部分にカーソルがあってしまい、エンターキーを押しても決定できません。
 まあ、bexecで選択肢命令を自作する(=文字列をスプライトボタン化する)場合はbtransを使用しないでしょうし、真ん中が透過されているボタンというのも想像できないので、実害はないでしょう。
[PR]
# by lyricist_m | 2009-07-05 16:49 | NScripter
GENOウイルス
 最近「GENOウイルス」なるものが感染拡大してるそうですね。
 詳しくは同人サイト向け・通称「GENOウイルス」対策まとめを見てもらうとして。
 とりあえず自分のPCが感染していないことと、自分のサイトとサークルHPが改竄されていないことは確認しました。
 WEBページが感染源となるので、サイト管理者の方は十分注意したほうが良さそうです。
[PR]
# by lyricist_m | 2009-05-17 19:29