スクリプト解読中
 すいはんさんのすいはんBlog 〔NScripter+Lua〕〔弾幕?STG〕についてから「弾幕?STGサンプル」を落としてスクリプト解読中。いやー、久しぶりに他人の書いたスクリプトをガッツリ読んでる気がします。
 うちのノートPCじゃ多少FPSが落ちますが(それでも平均20ちょいってとこ)、普通にプレイできることに驚きました。凄いなぁ。
 どうも自分はこういうゲームらしいゲームを作る方向に食指が動かないのですが、こういうの見てると作りたくなってくるなぁ。数年前、CとWindowsのAPIを触ってた頃に作ったどうしようもないゲームでも移殖してみようかな。
[PR]
# by lyricist_m | 2009-05-03 18:23 | NSLua
system.luaを読み込むタイミング
 system.luaはgame命令終了後に読み込まれます。つまり、
1.*define
2.game
3.system.lua
4.*start
 の順番に読んで行く、と。
 このうち、1~3までは定義節、4からは実行節になります。なのでsystem.lua中ではdefsubやluasubなどの定義節専用命令が使用できます。

 system.luaを読むのがgame命令実行後のため、たとえばLua側に値を渡す目的で、定義節でローカル変数を使用しても、game命令でローカル変数がクリアされてしまいます。
 なので「定義節内からLuaへ値を渡す」場合はグローバル変数を使用しましょう。実行節からならluasubが使えるので、普通にそっちで。
[PR]
# by lyricist_m | 2009-05-03 09:21 | NSLua
numalias&Luaについて考えてみる
 どうにかして、Luaでaliasを便利にできないものでしょうか。
 例えば実際のエイリアスの定義を別ファイル(例えばalias.txtとか)に分けて、それをLuaから読み込むのであれば楽に出来るんですが。
 理想としてはvaralias 変数名って感じで変数番号を意識せずに変数名をつけられる自作命令を作れて、普通に定義節で使えるのが一番かなと思います。だけどsystem.luaが読み込まれる順番はgame命令通過後なんですよね……。

 仕組み自体は、単にinc %0してたのを関数内部に引っ張ってくるだけにすれば楽に実装できるので、問題はどこでその関数を実行するか、ですね。
 とりあえず変数定義別ファイル化の方向で動いてみるかなぁ。
[PR]
# by lyricist_m | 2009-05-01 09:04 | NSLua
テーブル周り
 Luaでテーブルを弄るサンプルスクリプトをアップしました。Delusionist's Utopia -NScripter-からDLできます。
 サンプルスクリプトと言ってもtable.luaが一つ入ってるだけなので、そのままでは動作しません。余裕があれば後でsystem.luaと00.txtを追加しておきます。

 テーブルを1つの文字列に圧縮したり、逆に文字列からテーブルに展開したり。またはテーブルをCSVとして保存したり、CSVからテーブルに復元したりできます。これらの命令とコールバックのセーブやロードと組み合わせれば、テーブルのセーブ・ロードも簡単にできるかと思います。
 また、テーブルを配列(array)や連想配列(hash)と見なして上記の動作を行なう関数も入っています。このスクリプトを読めば、Luaにおける配列の扱い方、テーブルとforループの連係、文字列の連結、ファイルの読み書きの仕方なんかが少しは理解しやすくなるんじゃないでしょうか。コメントは全く書いていないので、おそらく読むのが大変でしょうけども、テーブル・配列・連想配列間で処理の内容に大差はないので、見た目ほど量は多くないかと。



 次はどうしましょうか。
 とりあえずストックとして、NSCALL_animationを利用したマウスカーソル移動スクリプトとか表示文スプライト化(製作途中)とかあるんですが、個人的にはnumaliasをどうにかしてLuaで使いやすくしたいところです。
[PR]
# by lyricist_m | 2009-05-01 08:55 | NSLua
Luaスクリプトを新規作成するバッチファイル
@echo off
rem Luaスクリプトを新規作成します
set /p FILENAME="ファイル名を入力してください>"
echo --%FILENAME%.lua> %FILENAME%.lua


 上のように書いたバッチファイルを作ると、ファイル名を入力するだけで「ファイル名.lua」というファイルを作成してくれます。
 ちなみに、Luaスクリプトのファイルの一行目に書いた内容がエラーメッセージに出力されるそうです。なのでこのバッチファイルではファイルの一行目にファイル名を書いています。



 バッチファイルは便利ですねぇ。
 複数行に渡ってテキストを書けたら、*defineとgameと*startだけを書いた00.txtを作るバッチファイルでも作るところなんですが、そっちはむしろエクスプローラの新規作成を弄った方がいいかな。
[PR]
# by lyricist_m | 2009-04-30 16:33 | NSLua