カメラインポーズDLL

※以下は無視して、カメラDLL - 永字八法←こっちを使ってください。

カメラを実現するプラグインを作りました。
http://www.eiji8pou.net/download/screen.zip

使い方

define節で、

setlayer 0,30,"screen.dll"

等とする。一つ目はレイヤー番号、二つ目は書き換えタイミング(ミリ秒)である。
start節で、

lsp 50,":c;>100,80,#FFFFFF",10,10

等として、「カメラ画像」の出力先のスプライトを作る。このスプライトは、":c;"タグかつセルを持たないコピー型ならばなんでもよいが、塗りつぶし長方形を使うのが便利である。
なお、このスプライトに透明度を付加した場合、ちゃんと半透明のホロスクリーンになるし、このスプライトを移動させることもできる。
※ただし、大きさを変更するのは注意が必要。基本的に作ったら触らないでおくのがよい。

lsp 200,"*0"
layermessage 0,"50"

スプライト番号200番をカメラレイヤーにして、その映像の出力先を50番のスプライトにする。
これで完成。

概念

レイヤーと結びつけたスプライトは「カメラレイヤー」になり、それよりも奥にある背景画像を重ね合わせた画像を取得する。
「カメラレイヤー」が取得した画像は、layermessageで結びつけた出力先のスプライトに送られる。この時、出力先の大きさに合わせて画面は拡大縮小される。(ただし、アルゴリズムの都合上、拡大は可能だが出力が乱れる。作ってる最中は思いつかなかった)

サンプル1


その実現スクリプトむ式 ver.lua使用)

*define
deletemenu
setlayer 0,30,"screen.dll"
game
*start
saveoff
caption "訪問! 六軒島"
setwindow 58,374,22,4,24,22,0,6,1,1,1,#AAAAAA,40,350,600,470

; 雛見沢部分を作成(スプライト、画面手前の方を使用)
lsp 100,":a;bmp\tati\mion\me_waraia2.bmp",0,0 ; 魅音
getspsize 100,%0,%1
amsp 100,640-%0,0 ; 魅音を再配置
lsp 150,":c;bmp\haikei\jinja\ji1.jpg",0,0 ; 神社

; カメラ作成
lsp 125,":c;>480,360,#FFFFFF",20,20,128 ; カメラの内容の出力先
_lsp 75,"*0" ; カメラの設置場所
layermessage 0,"125" ; 出力先と設置場所をつなぐ

print 1
さて。\
end

この例では、カメラレイヤーを手前、出力先レイヤーを奥に置くことで、画面に画面が映る入れ子構造を動的に作成している。

サンプル2


その実現スクリプトむ式 ver.lua使用)

*define
deletemenu
setlayer 0,30,"screen.dll"
game
*start
saveoff
caption "訪問! 六軒島"
setwindow 58,374,22,4,24,22,0,6,1,1,1,#AAAAAA,40,350,600,470

; 雛見沢部分を作成(スプライト、画面手前の方を使用)
lsp 100,":a;bmp\tati\mion\me_waraia2.bmp",0,0 ; 魅音
getspsize 100,%0,%1
amsp 100,640-%0,0 ; 魅音を再配置
lsp 101,":c;bmp\haikei\jinja\ji1.jpg",0,0 ; 神社

; 六軒島部分を作成
lsp 200,":a;bmp\tati\but\1\but_waraia1.bmp",0,0 ; 戦人
lsp 201,":a;bmp\tati\rena\re_kaiib1.bmp",0,0 ; レナ
getspsize 201,%0,%1
amsp 201,640-%0,0 ; レナを再配置
lsp 202,":c;bmp\background\forest\forest_s1b.jpg",0,0 ; 入口

; カメラ作成
lsp 50,":c;>240,180,#FFFFFF",10,10 ; カメラの内容の出力先
_lsp 150,"*0" ; カメラの設置場所
layermessage 0,"50" ; 出力先と設置場所をつなぐ

print 1
魅音「現場のレナさーん!」
レナ「はーい! 今日は右代宮戦人(うしろのみやばとら)さんにお越しいただいてまーす!」\
end

こちらはさらに配置に注意が必要。スプライトの重なり具合を見て欲しい。画面奥に六軒島部分を作り、それを雛見沢部分で覆い隠してしまっているが、六軒島部分直前にカメラレイヤーを置き、その出力先を雛見沢部分手前にすることで、ニュース番組やアイドル水着大会と同じような演出にしている。
もちろん、レナや戦人のスプライトを移動させれば、自動的に手前の小画面のレナや戦人も変化する。

技術的な話

スプライトの直接書き換えができるとこんなに楽なんだね!