カテゴリ:NScripter( 117 )
レポート
 かなり反応遅いですが、NScripterハンズオン主催者レポート - senzogawaのNな日々が来てました。
 自分もそうですが、個々のTipsなんかはよく見かけるし、自分も書きやすいんですが、開発そのものの話って聞く機会がなかなか無いんですよね。特にバージョン管理云々の話は聞きたいなぁ。自分のPCには一応Trac LightningとTortoiseSVNが入ってるんですが、全然使っておりません。名前すら合っているか不安なレベルです。
 ああ、アーカイブっていつまで残ってるんだろうか、早く見ないと。
[PR]
by lyricist_m | 2010-02-09 22:31 | NScripter
NScripterハンズオンなるものがあるらしい
 senzogawaさんがNScripterハンズオンなるものを開催するそうで。詳細はNScripterハンズオン:senzogawaのNな日々NScripterハンズオン : ATNDから。
 正直、何が何でも参加したいくらい興味はあるのだが、北海道はさすがに無理だ。列島縦断するほどの蓄えはない。
 なので、せめてここで宣伝するくらいはしようと思った。レポとか上がると嬉しいなぁ。
[PR]
by lyricist_m | 2009-12-23 16:59 | NScripter
新ボタン命令によるシステムカスタマイズのサンプル
 新ボタン命令(bexecなど)を使用したシステムカスタマイズのサンプルスクリプトをDelusionist's UtopiaのNScripterページにアップしました。
 Luaを使用しない純正NScripter仕上げです。新ボタン命令の使い方や注意点、問題点などを知ってもらうために作成したので、なるべく難しいことはしないように注意してスクリプトを書きました。今回はtextgosubのみですが、今後は→ックリックメニューや回想、セーブ・ロード画面などもbexecでカスタマイズしていく予定です。



 Luaを使用したシステムカスタマイズに関しても興味があるのですが、現在むいむい。さんが頑張ってらっしゃるようなので、Luaに関して自分はひとまず別方向に進もうかと思ってます。
 今考えているのは、
・アニメーション割り込み(NSCALL_animation)を応用した、画像描画以外の何か
・Luaを使ってキーコンフィグ
 といった内容です。
[PR]
by lyricist_m | 2009-07-16 04:39 | NScripter
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
NScripterページを整理しました
 Delusionist's Utopia -NScripter-を整理しました。
 といっても、上げてあるサンプルと関連したブログの記事にリンクを貼っただけですけどね。
 あと、リンクを貼る際に記事にも軽く目を通して、情報が古いものには多少追記を書きました。
 基本的にどのサンプルも投げっぱなしで、中にはreadmeすらついてないものもあるので、そこらへんも追々修正していきたいですね。



[2009年5月11日追記]
 そういえばexciteブログって、該当カテゴリの記事一覧って機能、無いですよね。
 うちは現在ほぼNScripter関連のTIPSで埋め尽くされていて、NScripterカテゴリの記事数は100を超えます。NSLuaもあわせると大体150ってとこですね。検索機能があるとはいえ、これは記事を読んでいくのが大変そう。
 どこか別のブログに移るべきかなぁ。
[PR]
by lyricist_m | 2009-05-11 02:37 | NScripter
セーブとキャプション
 ロードしてもcaptionは復元されません。
 例えば、
caption "test"
savegame 1
click
caption "test2"
loadgame 1

 なんてスクリプトを実行した場合、loadgameをしてもcaptionは"test2"のままです。
 なので、章ごとにcaptionを変えるようなゲームの場合は、セーブ時にcaptionを文字変数に格納、loadgosubで復元、という作業が必要になりそうです。
[PR]
by lyricist_m | 2009-04-26 15:37 | NScripter
今後の方針
 とりあえずLuaを勉強するのは当たり前として、勉強するためにどんなスクリプトを書こうかな、と。
 できることなら他のサイトさんと被らない方向性だといいのですが。

 ちなみに、現在自分はコールバックのtextを弄ってます。「サンプル2-2 表示文をスプライト化」がありますが、これをもっと弄って、通常の文字表示と同様にできないかなーと。
 string.subの仕様が解らなくて小一時間ほど悩みましたが、とりあえず一定の時間間隔で文字を表示することには成功。ただし表示中はイベントを全く受け付けない状態なのでそこの改善と、あとは表示速度やら何やらを外部から弄れるようにしたいですね。イメージ的にはKAGのMessageLayer+αみたいな。
[PR]
by lyricist_m | 2009-04-19 22:36 | NScripter
if文でANDとORを同時に使う
 とうとうif文で論理和(|)が使えるようになりましたね。使い方は下のような感じ。
;%0が0か%1が1のときにメッセージボックスを表示する
if %0 == 0 | %1 == 1 mesbox "hit!","hit!"

 論理積と同様、||と重ねても意味は同じになります。
;これでも動作は同じ
if %0 == 0 || %1 == 1 mesbox "hit!","hit!"




 さて、現バージョン(ver.2.93)では論理積と論理和は混在できません。下のように書いてもエラーが出てしまいます。
;%0が0か%1が1で、かつ%2が2のときだけヒットさせたいけど……
if %0 == 0 || %1 == 1 && %2 == 2 mesbox "hit!","hit!"

 じゃあこういう条件の時はif文を分けなきゃいけないかと言うと、そうでもありません。幻惑郷 : if文の重ねがけと同様のやり方が通用するんです。つまり上のif文は、
;こう書くと動くよ!
if %0 == 0 || %1 == 1 if %2 == 2 mesbox "hit!","hit!"

 のように、if文の中にif文を書けばいいと。条件がもっと複雑な場合は、どの条件から書き始めるかをよく考えた方がいいかもしれません。

 論理和が使えるようになったことで、if文がぐっと書きやすくなりました。他にもLua対応やボタン系命令の刷新など、システムの根幹に関わる重要な部分での更新が行なわれたので、昔からNScripterを弄ってる人は過去のスクリプトの見直しが必要になるかもしれませんね。
[PR]
by lyricist_m | 2009-04-16 19:21 | NScripter
怒涛の更新とNScripter講座
 早くもLua搭載の正式版が来ましたね。
 最近の更新速度は凄まじいものがあります。正直追いつくのが大変です。まだLuaの勉強も出来ていないというのに!
 でも大変さ以上に色々とやれることが広がったワクワク感の方が強いかな。もうちょっと早くLua版が出てたら吉里吉里弄らずにNScripter一本でやってたかもなぁ。まあ吉里吉里は吉里吉里で面白いのですが。

 実は、前々から「そのうちNScripterの講座的なものでも作ろうかなー」と思っていたのですが、最近の更新ラッシュを見て「もう少し待つべきかな」と考え直しつつあります。
 Luaが搭載されるだけなら今からでも作り始めるんですが(単にLuaに手を出さなければいいだけですから)、NScripterそのものにもかなり手が入れられ始めてますからね。ボタン系の命令が刷新されたり、if文でORが使えるようになったり(まだテスト版ですが)。そういう仕様変更が一段落ついてから、落ち着いて書こうかなと。
 もし講座を作るとしたら、
1.初心者コース(とりあえず動かせるレベル)
2.初級者コース(定義節で命令を使って設定を変更できる)
3.中級者コース(システムカスタマイズに手を出す)
4.上級者コース(Luaを使えるようにする)
 という風に4コースに分け、全50+α回くらいにしようかなと考えています。毎週更新したらだいたい1年で終わる。終わるといいなぁ。あ、もしくは中高生の夏休みとだいたい同じくらいの数にして(だいたい40日くらいでしたっけ?)、「1日1つ進めていけば、夏休みが終わる頃にはゲーム作れるようになってるよ!」みたいなのもいいかも。

 とりあえず今やってる作業をさっさと終わらせて、NScripter&Luaを思う存分弄りたいです……。
[PR]
by lyricist_m | 2009-04-09 04:51 | NScripter