Hatena::ブログ(Diary)

senzogawaのNな日々 このページをアンテナに追加 RSSフィード

2004 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 12 |
2011 | 01 | 03 | 04 | 05 | 06 |
2012 | 01 | 08 | 09 |
2013 | 02 |

2005-03-24 プラグインの利用方法

プラグインの利用方法

| プラグインの利用方法を含むブックマーク プラグインの利用方法のブックマークコメント

はじめに

 以前まで書いてきたこととsystemcallをきちんと組み合わせられれば大体のカスタマイズはできる。

 実際にはsystemcall部分の改造、というか代替機能の実装は可能だが、構造についてしっかり管理する必要があるため、なかなか難しい。また、さらにはプラグインの作成があるが、これは完全にプログラマの領域だ。

 で、まずは、君影草工房さんのサイト君影草工房 -Web Site-などで公開されているプラグインを有難く利用することを覚えるといいと思う。

 ということで、今回はプラグインの利用方法を記述する。

プラグインの利用方法

 プラグインの利用については、そのままだと非常に面倒な手続きが多かったりして、プラグインの品質が悪くなくてもスクリプトでバグを混入してしまう可能性がある。

 より簡易、かつ安全に使う方法として、「wrapper(ラッパ)の作成」という手法がある。

 特に大げさに言うようなことではないのだが、提供されたものをそのまま使わずに、wrapという言葉どおり、自分の扱いやすい命令で覆ってしまう方法だ。

 実際に一つ作ってみた方が早いので、先述した君影草工房さんのサイトで公開されている、「花散里」という桜が舞い散る演出を行うプラグインを使ってみることにする。

花散里のダウンロード

 中級者講座で書くことでもないと思うが、一応。

 ダウンロードするファイルは「第4展示室」のところにある。「花散里 for NScripter」というのがそれだ。

 ZIPファイルでの圧縮なので、展開(解凍)にはさほど手間はかからないだろう。

 展開すると、「hana」というフォルダが出来て、その下にいくつかのファイルができる。

花散里の内容

 ファイルを一つ一つ見ていく前に、まず目を付けるのは「Readme.txt」だ。

 実際に中を見るとわかるが、サンプルが4つとソースファイルが1つとなっている。

 このうちソースファイルについては、プラグイン作成の際には大変参考になるのだが、今回は利用だけなので考えなくていい。

 サンプルについては、ファイル名から判断して、スクリプトファイル1つと画像ファイルが3つということがわかるはずだ。

花散里の動作

 動作については、「Readme.txt」の冒頭に記述があるとおり、「hana」フォルダ内に「nscr.exe」を置いて実行してみるといい。

 たぶん問題無く動くはずだが、もし動作しなかったら、NScripterのバージョンや、動作環境に合致しているかどうかを確認してみること。

 見ればわかるが、桜の花びらが散り落ちる表現が背景として描写されるはずだ。

 これはスプライトを使っても実現できることはできるが、スプライト番号の管理手間や計算量を考えると、プラグインを利用する価値は高い。

花散里のwrapper作成(必須部分)

 では、花散里プラグインの価値を理解したところで、wrapper作成に取り掛かる。

 「Readme.txt」の【使い方】を見ると、必須事項は以下の通りだ。

・define節でsetlayer命令を記述

・lsp(lsph)命令でレイヤをスプライトとして登録

・画像の登録

・動作パラメータの設定

 まずはこれらを実装する。

 命令の分け方については個々の使いやすさに合わせればいいと思うが、定義ブロックと実行ブロックだけは明確に分ける必要がある。

 ここでは、define節のものは定義処理、登録処理を初期化処理、動作の設定を設定処理として3つに分け、それぞれを命令にすることにする。

; 花散里の定義
*hana_define
numalias HANA_LAYERNUM,0 ; 使用するレイヤ番号
stralias HANA_LAYERSTR,"*0" ; レイヤ番号登録用の文字列
numalias HANA_SPNUM,2 ; 使用するスプライト番号
numalias HANA_TIMER,100 ; 更新間隔(ミリ秒)
stralias HANA_DLLFILE,"hana.dll" ; DLLファイル名
stralias HANA_IMAGEFILES,"sakura1.bmp,8,sakura2.bmp,8,sakura3.bmp,8" ; 画像ファイル名
stralias HANA_DEFAULTPARAM,"16,8,45" ; 風,振幅,周期

defsub hana_init
defsub hana_setparam

; 変数用
numalias hana_param,100
numalias hana_interval,101
numalias hana_speed,102

; レイヤの定義
setlayer HANA_LAYERNUM,HANA_TIMER,HANA_DLLFILE
return

; 花散里の初期化
*hana_init
; レイヤ番号の登録
lsp HANA_SPNUM,HANA_LAYERSTR
; 画像の登録
mov $hana_param,"i|":add $hana_param,HANA_IMAGEFILES
layermessage HANA_LAYERNUM,$hana_param
return

; 花散里の設定(間隔,落下速度のみ指定)
*hana_setparam
getparam %hana_interval,%hana_speed
; 動作パラメータの設定
mov $hana_param,"s|"
itoa $hana_interval,%hana_interval
itoa $hana_speed,%hana_speed
add $hana_param,$hana_interval:add $hana_param,","
add $hana_param,$hana_speed:add $hana_param,","
add $hana_param,HANA_DEFAULTPARAM
layermessage HANA_LAYERNUM,$hana_param
return

 上記を「01.txt」として保存する。

 これで、「00.txt」は以下のように書くだけで動作する。

*define
; 定義
gosub *hana_define
game
*start
; 初期化
hana_init
; 表示
hana_setparam 3,12
クリックすると終了します。
click
end

花散里のwrapper作成(実用部分)

 さて、一応これだけでも動くが、消す時にcspを使うのは、せっかくのwrapperを無にしているような気分になる。

 また、決まった値で呼び出すだけではなく、個別に値を指定できるようにしたり、サンプルにあるような、降り止ませる命令も追加しないと、あまり意味が無い。

 というわけで、多少改造する。さすがに大きくなってしまうので、ファイルで置いておく。

 http://senzogawa.s90.xrea.com/dl/hana_wrapper.zip

 hana.dllとsakura1〜3.bmpの4ファイル、及びnscr.exeを同階層において実行すると、動作する。

 wrapper作成のポイントは、必須の命令については利用する時に意識すべきデータのみを意識させるようにすることと、実用的な命令については目的に沿った動作をする命令を作成することと思う。

 ただ、別段決まりきったやり方のようなものは無い。

 今回は以上。

トラックバック - http://d.hatena.ne.jp/senzogawa/20050324
Connection: close