カメラDLL

カメラインポーズDLL - 永字八法の整理発展形です。

基本!

define節で、

setlayer (任意の数字A),(書き換える間隔(ミリ秒)),"screen.dll"

start節で、

lsp (任意の数字B),"*(任意の数字A)"

とする。このBのスプライトを、これ以降「カメラレイヤー」と呼称します。

カメラレイヤー

カメラレイヤーの機能は、

  1. カメラレイヤーよりも奥にある背景、立ち絵、スプライト等を重ね合わせた画像を取得すること。
  2. 取得した画像を別スプライトに送ること。

以上の2点です。

スプライト番号 画像
背景 bg.bmp
750 適当なスプライト1
立ち絵 立ち絵
250 適当なスプライト2
100 カメラレイヤー
50 適当なスプライト3
テキストウィンドウ テキストウィンドウ

上記のような場合、カメラレイヤーは、「背景・750・立ち絵・250」までを重ね合わせた画像を受け取っています。
作成したばかりのカメラレイヤーは送り先がありませんので、このままでは何も役に立ちません。
送り先を設定するには、layermessage命令を使います。

layermessage (任意の数字A),"(チャンネル番号),(送り先のスプライト番号),(転写モード番号)"

※このlayermessageを実行する前に、送り先のスプライトを先に作っておく必要があります。

  • チャンネル番号は、0〜19までの整数です。カメラレイヤーは複数のスプライトに送ることができます。
  • 送り先に指定されたスプライトは、常にカメラレイヤーによって書き換え続けられる以外は、他の全てのスプライトと同じ扱いができます。(vsp, msp, amsp等の操作を受け付ける)
  • カメラレイヤーによって書き換えられるのは、実体部分だけで、マスク画像付きスプライトはマスク画像はそのままになります。

転写モード

転写モードは0と1の2種類があります。
0にすると、カメラレイヤーが取得した画像全体を、拡大縮小してスプライトに転写します。(以前、拡大はうまくいきませんでしたが、今回は拡大にも対応しています。)
1にすると、カメラレイヤーが取得した画像の一部を、等倍でスプライトに転写します。この時、転写元を指定するために、さらに数字を続けることができます。

layermessage 0,"10,50,1,25,35"
; チャンネル10番を設定
; スプライト番号50に対し、1の等倍転写モード。
; カメラレイヤーの取得した画像の(25, 35)を、転写先スプライトの(0, 0)に合わせて転写する。

チャンネルを破棄したい時

layermessage (任意の数字A),"(チャンネル番号),1000"

と、送り先スプライト番号に無効な数字を入れてください。

サンプル1:モニターの中にモニターがある。

スプライト番号 画像 命令
500 背景画像 lsp 500,":c;back.jpg"
499 送り先スプライト lsp ":m>50,50,#000000;>50,50,#FFFFFF",10,10
498 立ち絵スプライト lsp ":a;chara.bmp",100,0
497 カメラレイヤー lsp 499,"*0"

このように配置した後で、

layermessage 0,"0,499,0"

と実行すると、このような画像ができます。

サンプル2:ミニ画面

スプライト番号 画像 命令
500 背景画像その1 lsp 500,":c;back1.jpg"
499 立ち絵スプライトその1 lsp 499,":a;chara1.bmp"
498 カメラレイヤー lsp 498,"*0"
400 背景画像その2 lsp 400,":c;back2.jpg"
399 立ち絵スプライトその2 lsp 399,":a;chara2.bmp"
398 送り先スプライト lsp ":m>50,50,#000000;>50,50,#FFFFFF",10,10

このように配置した後で、

layermessage 0,"0,398,0"

と、実行すると、このような画像ができます。

サンプル3:透視眼鏡

スプライト番号 画像 命令
501 吊り橋 lsp 501,":c;bmp\haikei\mori\hasi5.jpg",0,0
500 裸立ち絵 lsp 500,":a;bmp\tati\satoko\zenra\sa_odorokia1.bmp",0,0
499 カメラレイヤー _lsp 499,"*0"
498 タオル立ち絵 lsp 498,":a;bmp\tati\satoko\taoru\sa_odorokia1.bmp",0,0
497 送り先スプライト _lsp 497,":m>40,40,#000000;>40,40,#FFFFFF",300,220

このように配置します。
その後、マウスの位置を取得して(それを送り先スプライトの大きさに合わせてずらして)、

amsp 497,(加工後マウスx座標),(加工後マウスy座標)
layermessage 0,"0,497,1,(加工後マウスx座標),(加工後マウスy座標)"

これを繰り返すと、マウスの場所だけ透けて見える透視眼鏡が完成します。
※497の送り先スプライトのマスク画像を変えると、四角以外の色んな形にできる。円形とか、中心から外に向かうグラデーションとか、目の形とか、色々と試してみると面白いかも。

サンプル4:顔トーク


省略。ともかく、画面の一部分を切り取って他のスプライトに貼れるので、うまくやればこういう話者の顔がテキストウィンドウの横に出る演出も、別に顔グラフィックを用意しなくても可能になる、それだけの話です。

注意事項!

拙作「む式 ver.lua」等と併用する時は、スプライトとレイヤーを結びつける時に、必ず「_lsp」を使ってください。現時点で、む式の方がレイヤー記法に対応していないためです。ご迷惑をおかけします。