鏡面レイヤー型プラグインmirror.dll

境界線を指定して、画面の一部を反射させるレイヤー型プラグインを作成しました。
http://www.eiji8pou.pics/download/mirror20110508.zip

適用例


こういう画像を、

こんな風にします。

使い方

define節で、setlayerでdllを指定します。

setlayer 10,25,"mirror.dll"
  • 最初の数字はレイヤー番号で、適当に決めてください。複数のレイヤー型プラグインを使う場合に重複しなければそれでよいです。
  • 二つ目の数字はミリ秒で、ここで指定した時間毎にプラグインが呼ばれ、画面が書き換わります。あまり小さな数字すると重くなります。
    • 17にすると60fpsよりも若干遅いくらいです。
    • 34で30fpsくらいですね。
  • 三つ目はプラグイン名で固定です。

ここまでが下準備になります。
次に、start節

lsp 100,"*10" ; 任意のスプライトにプラグインを結びつけます。setlayerで10番に結びつけたので、10を指定します。
; 以降、このスプライトに対する操作のうち、位置については無効になります。
layermessage 10,"setarea,480,0,160,479,639,479" ; プラグインに命令を送ります。

layermessageでプラグインに送る命令は以下のとおりです。
1.setareaは固定です。
2.3.4.5.以降、二つの座標を送ります。この二つの点を通る直線が境界線になります。
6.7.さらに座標を送ります。境界線で区切ったうち、この座標がある方が鏡面になります。
※座標は画面外でも受け付けますし、画面内の中途半端な点を指定しても構いません。直線が構成されればなんでもいいようにしています。

オプション

layermessageにさらに三つ引数をつけて色を指定できます。
つけなかった場合は、鏡面化した時に対応する鏡がない領域はそのまま残されますが、オプションをつけるとその色で埋められます。

layermessage 10,"setarea,480,0,160,479,639,479,255,255,255" ; 白をつけてみる。


こんな風になります。

使い道

実は思いつきません。
しいて言えば、境界線を水平にして、さらに画面の一部分を揺らすレイヤー型プラグインと併用すれば、水没した風景を作れるかも知れません。