む式ver.lua
む式ライブラリver.2 - 永字八法の続き。
技術の進歩はたいしたもので、一部にご好評いただいた「む式」もついにバージョンアップすることができました。
※2009-05-27バージョンにバージョンアップ
導入方法
- nscr.exeを、Luaが使える最新の物にさしかえる。
- 最新のnscr.exeには、nslua.dllがついているはずなので、それを同梱する。
- nscr.exeと同じ場所にsystem.luaファイルを作り、そこに下記内容をコピペして保存する。
次にstart節のできるだけ早い段階で、
- 「chnsa umineko4」とか宣言する。
- その次の行で「music_set umineko4」とか宣言する。
「移動が必要」なオリスクが、たったこれだけの手間で「移動が不要」になります。
機能説明
以下の五つの命令を追加します。
- chnsa
- get_addnsadir
- fullpath
- music_set
- music_get
また、音楽系の6種類の命令を上書きします。
さらに、nsaをLuaの中から呼ぶようにしました。これで、define節中に呼び出すのを忘れても安心。
chnsa
このライブラリの肝。たとえば、「chnsa umineko4」と宣言するだけで、「うみねこのなく頃に Alliance of the golden witch」のarc.nsaと音楽ファイルを余所から使えるようになります。
※機能的には前バージョンと変わっていません。
get_addnsadir
追加命令。
「get_addnsadir $0」とすると、$0に、今現在参照している余所のディレクトリが入ります。
music_set
音楽ファイルに限って、別のディレクトリを参照するためのものです。
music_get
music_setで設定されたディレクトリを返します。
fullpath
追加命令。
「fullpath $0,$1」とすると、$0に、music_getの結果と$1をつなげた内容が入ります。
※oggを扱う時、最初にカッコで繰り返し時間を指定する場合、この命令でファイル名をフルパスにしてから、カッコを頭につけてください。
※もしかして不要かも。
前バージョンとの相違点
「うみねこのなく頃に」の基本システムとの相性を主眼に置きました。
- エラーチェック機能を強くしました。
- chnsaを実行した時、指定されたバージョンの「うみねこのなく頃に」がなかったり、あったとしても本来あるべき場所にarc.nsaがなかったりすると、それだけでエラーを出して止めるようにしました。music_setでも同様です。
- 音量記録機能を省略しました。
- 「うみねこのなく頃に」の基本システムについているようなので、省略しました。
- 変数領域を汚しません。
- 「うみねこのなく頃に」の基本システムが使う変数と、絶対にバッティングしなくなりました。つーか、NScripter本来の変数を使いません。汚しません。なので、オリスクユーザーが気にしないといけないのは、基本システムとのバッティングだけです。
system.lua
-- む式 ver.lua 2009-05-27 NSExec("nsa") -- 共通部分 function id2reg(id) local lid = id:lower() local reg_key = "" local reg_var = "" if id == "singingmoon" then reg_key = 'Software\\TYPE-MOON\\歌月十夜' reg_var = 'directory' else if id == "higurasi1" then reg_key = 'Software\\07th_Expansion\\higurasi' elseif id == "higurasi2" then reg_key = 'Software\\07th_Expansion\\higurasi2' elseif id == "higurasi3" then reg_key = 'Software\\07th_Expansion\\higurasi3' elseif id == "higurasi4" then reg_key = 'Software\\07th_Expansion\\higurasi4' elseif id == "higurasi5" then reg_key = 'Software\\07th_Expansion\\higurasi5' elseif id == "higurasi6" then reg_key = 'Software\\07th_Expansion\\higurasi6' elseif id == "higurasi7" then reg_key = 'Software\\07th_Expansion\\higurasi7' elseif id == "higurasi8" then reg_key = 'Software\\07th_Expansion\\higurasi8' elseif id == "higurasi9" then reg_key = 'Software\\07th_Expansion\\higurasi9' elseif id == "umineko1" then reg_key = 'Software\\07th_Expansion\\Umineko1' elseif id == "umineko2" then reg_key = 'Software\\07th_Expansion\\Umineko2' elseif id == "umineko3" then reg_key = 'Software\\07th_Expansion\\Umineko3' elseif id == "umineko4" then reg_key = 'Software\\07th_Expansion\\Umineko4' elseif id == "umineko5" then reg_key = 'Software\\07th_Expansion\\Umineko5' elseif id == "umineko6" then reg_key = 'Software\\07th_Expansion\\Umineko6' elseif id == "umineko7" then reg_key = 'Software\\07th_Expansion\\Umineko7' elseif id == "umineko8" then reg_key = 'Software\\07th_Expansion\\Umineko8' end if reg_key ~= "" then reg_var = 'gamedir' end end if reg_key == "" then NSOkBox("正しいキーワードを指定してください。", "む式。") NSSystemCall("end") end -- 取得してみる。 local temp0 = NSGetStrValue(0) -- 退避 NSExec('_getreg $0,"'..reg_key..'","'..reg_var..'"') local dir = NSGetStrValue(0) NSSetStrValue(0, temp0) -- 復帰 if dir == "" then NSOkBox(id.."はインストールされていません。", "む式。") NSSystemCall("end") end -- 末尾に\がなければ\をつける。 if string.char(dir:byte(dir:len())) ~= "\\" then dir = dir .. "\\" end -- そこにnsaがあるかどうかチェックする。 temp0 = NSGetIntValue(0) -- 退避 NSExec('_fileexist %0,"'..dir..'arc.nsa"') local exist = NSGetIntValue(0) NSSetIntValue(0, temp0) -- 復帰 if exist == 0 then NSOkBox(id.."のarc.nsaがみつかりません。", "む式。") NSSystemCall("end") end return dir end -- nsa関係 local chnsa_dir = "" -- 現在のchnsaディレクトリ NSExec("luasub chnsa") function NSCOM_chnsa() -- IDの取得 local dir = id2reg(NSPopID()) -- ディレクトリを追加する。 NSExec('_addnsadir "'..dir..'"') -- ディレクトリを保存する。 chnsa_dir = dir end NSExec("luasub get_addnsadir") function NSCOM_get_addnsadir() NSSetStrValue(NSPopStrRef(), chnsa_dir) end -- 音楽系 local music_dir = "" NSExec("luasub music_set") function NSCOM_music_set() -- IDの取得 local dir = id2reg(NSPopID()) -- ディレクトリを保存する。 music_dir = dir end NSExec("luasub music_get") function NSCOM_music_get() NSSetStrValue(NSPopStrRef(), music_dir) end NSExec("luasub fullpath") function NSCOM_fullpath() local ref = NSPopStrRef() NSPopComma() NSSetStrValue(ref, music_dir..NSPopStr()) end -- 既存命令の上書き NSExec("luasub bgm") function NSCOM_bgm() NSExec('_bgm "'..music_dir..NSPopStr()..'"') end NSExec("luasub bgmonce") function NSCOM_bgmonce() NSExec('_bgmonce "'..music_dir..NSPopStr()..'"') end NSExec("luasub loopbgm") function NSCOM_loopbgm() local file1 = NSPopStr() NSPopComma() local file2 = NSPopStr() NSExec('_loopbgm "'..music_dir..file1..'","'..music_dir..file2..'"') end NSExec("luasub dwave") function NSCOM_dwave() local ch = NSPopInt() NSPopComma() NSExec('_dwave '..ch..',"'..music_dir..NSPopStr()..'"') end NSExec("luasub dwaveload") function NSCOM_dwaveload() local ch = NSPopInt() NSPopComma() NSExec('_dwaveload '..ch..',"'..music_dir..NSPopStr()..'"') end NSExec("luasub dwaveloop") function NSCOM_dwaveloop() local ch = NSPopInt() NSPopComma() NSExec('_dwaveloop '..ch..',"'..music_dir..NSPopStr()..'"') end