bmpcut詳解

bmpcutの奇妙な現象 - 永字八法の続きかも。
なんか、NScripterとbmpcutでググられたリファラがあったので。

bmpcutとは

bmpcutは、ゲーム開発時に、NScripterを画像加工ツールとして使うことを想定して作られた命令である。(もっとも、使い方によってはゲーム本編中でも使えるが、それは後述)
機能は、指定された画像を指定された数に分割し、それぞれ別のbmpファイルとして出力することである。

bmpcut "ファイル名",横方向の等分割数,縦方向の等分割数

たとえば、


tatie.bmp
左のような画像を用意し
bmpcut "tatie.bmp",2,1

を実行すると、


_tatie.bmp00.bmp

_tatie.bmp10.bmp

こういうファイルが出来上がる。(大きさが違うのはこっちの手抜きです)
分割後のファイル名がかなりなげやりなのはNScirpter作者本人も認めるところである。
元のファイル名に対し、

  1. 頭に"_"をつける。
  2. 末尾に数字をつける。
  3. さらに最後に".bmp"をつける。

数字は二桁で、横方向の何番目かを0オリジンで、縦方向の何番目かを0オリジンで示す。

bmpcut "tatie.bmp",2,1

この場合、"_tatie.bmp00.bmp"と"_tatie.bmp10.bmp"ができあがる。

bmpcut "tatie.bmp",3,4

このようにすると、3×4で12枚の画像が作成される。ファイル名と位置の関係は下記のようになる。

_tatie.bmp00.bmp _tatie.bmp10.bmp _tatie.bmp20.bmp
_tatie.bmp01.bmp _tatie.bmp11.bmp _tatie.bmp21.bmp
_tatie.bmp02.bmp _tatie.bmp12.bmp _tatie.bmp22.bmp
_tatie.bmp03.bmp _tatie.bmp13.bmp _tatie.bmp23.bmp

分割されたファイルをこの位置関係で配置すると、元の画像になる。

注意点

指定したファイルが存在しなければ?
エラーメッセージを出して止まる。
ファイルにタグを指定すれば?
エラーは出ないし読み込みも成功する(多分)が、タグも含めてファイル名として処理しようとして、ファイル名として不適になり保存に失敗する。
ファイルがbmpでなければ? たとえばpngなら?
nspng.dllがある状況と仮定する。成功するが、サンプルで出したような「実体とシルエットの分離」目的には使えない。実体部分を分割し、なおかつアルファブレンド情報は削除されてしまう。
ファイル名にディレクトリ名をつければ?
失敗する。これについては後述する。
分割数に正の整数以外を指定した場合は?
0だとNScripterがフリーズして止まる。マイナスだと何も起こらずスルーされる。
分割数に10以上の数値を指定した場合は?
たとえば、bmpcut "tatie.bmp",20,20で最後に作られるのは、_tatie.bmp1919.bmpになる。また、この場合同じ名前のファイルが生成されることもあるので、その分上書きされてしまう。分割数は片方が10を超えれば、もう一方は10以下にしなければ全ての結果が得られない。
元ファイルの横幅(高さ)が分割数で割り切れない場合は?
分割後のファイルの横幅(高さ)は切り捨てられた値になり、元画像の余りの部分はどの分割後ファイルにも拾われずに切り捨てられる。

ディレクトリに対する注意点

たとえば、"_tatie\tatie.bmp"と言うファイルを分割しようとした場合、読み込みと分割自体は成功しても、分割後のファイル名が"_tatie\tatie.bmpXX.bmp"となり、"_tatie"ディレクトリが存在しなければ保存できないことになる。*1
これに対する回答は、実はNScripterデフォルトでは存在しない。DLLその他の助けを借りて、予めディレクトリを作成する必要がある。
一番簡単なのはファイル操作プラグイン - senzogawaのNな日々だろうか。

どういう風に使うか。

開発中に使い捨てスクリプトとともに使うのが本来の用途だろうが、

オリスクに使用

すなわち、立ち絵を実体部分とシルエットに分割し、別々に使ったのだ。
上述のファイルを使った場合、":m_tatie.bmp10.bmp;>446,480,#000000"このように指定することで、車田シルエット的な立ち絵が作成できる。これで、本編にない演出が可能になる。

ご褒美画像の出力

bmpcutの第二引数、第三引数を両方とも1にすれば、それは元画像をそのままコピーするのと等しくなる。
これを利用して、面をクリアーすればご褒美画像が出力されるようなゲームで、nsa.arc内部に蓄えられたご褒美画像を、ユーザーのハードディスクにコピーできる。ただし、ファイル名がぞんざいに付けられるので、元のファイル名からは拡張子を取ってからアーカイブするべきだろう。

*1:恐らく、bmpcutでググッた人はそこに引っかかったのではないかと憶測する。