2017年 12月31日
エフェクトの素材は極力借りる事にして、まずどういうエフェクトかチェックする「エフェクトチェッカー」を作った。
別にサイトのサンプルで決めてもいいし、RPGツクール用なんだろうから普通はそちらでチェックできるんだろうけど、こちらは HSPだからねえ。
こんな感じ

← →でエフェクト切り替え
↑で表示開始
↓でアニメの切り替え時間変更
fpcって書いてある数字だけど、自分の場合 fpsは 20で固定している(1秒に
20回表示)ので、これは何回カウントしたら次の表示にするかになってる。
つまり 2だったら fps10相当のスピードになる。
spaceキーで反転表示切り替え
tabと Enterで表示濃度を +-する
ctrlキーで透明と加算を切り替える
透明は gmde3、加算は gmode5、透明の 255濃度で 100%上書き表示になる。
加算は光ったような表示になるが、背景が明るいと見えづらい。
数字キーの 1、2、3で表示の仕方を変える
1は一回だけ、2は繰り返し、3は表示が終わったら次のエフェクトに順次移る。
数字キーの 4、5で回転表示を +-する
赤い数字がそれ
緑表示の x、yは画像の大きさ、aはアニメの数だ。
右下の窓は、そのエフェクトの背景が透明かそれ以外か見るためのもの。
なぜかと言うと、透明だと加算でなくても背景色を抜いてくれるのだが、例えば背景が黒だと抜いてくれないらしい。
こんな感じ
(「表示」の所に透明と加算と切り替えて書いてあるのに注意)

この場合、加算表示で使う事になる

妖精の上にも表示しているが、背景が明るいと分かりづらいと思う。
ではソースを公開する
/////// エフェクトチェッカー ////////////////////////////
;Effects Checker
; 操作説明
; ↑ : 表示開始
; ← or → : グラNo.切り替え
; ↓ ; コマ送りウエイト数増減
; Tab or Enter ; ブレンド率増減
; Ctrl ; 透明、加算、切り替え
; space ; 反転表示切り替え
; 1 ; 連続表示切替、1回
; 2 ; 固定連続
; 3 ; 送り連続
; 4 ; 回転+
; 5 ; 回転-
#include "hsp3dish.as"
gosub *main : end
#deffunc put ; 表示 ------------------------------------
redraw 0
color 0,0,0 : boxf : color 255,255,255
pos 30,12 : mes ps(pn)
gmode 2
pos x1 ,y1 : celput 1001,gr(0)
pos x1+96 ,y1 : celput 1001,gr(1)
pos x1+192,y1 : celput 1001,gr(2)
gmode pm,,,br ; グラのブレンド率
if f=1 : pos x1-20+pcx(pn),y1+5+pcy(pn) : celput pn,c,hx(hn),hy(hn),kai
pos x2-20+pcx(pn),y2+5+pcy(pn) : celput pn,c,hx(hn),hy(hn),kai
pos x3,y3 : mes "No, "+pn ; グラNo.
pos x3,y3+40 : mes hxys(hn) ; 反転表示
pos x3,y3+80 : mes "表示 "+hp(pm); 半透明、加算、フラグ
pos x3,y3+120 : mes "濃さ "+br ; ブレンド率
pos x3,y3+160 : mes "fpc "+fpc ; コマ送りウエイト
pos x3,y3+200 : mes "cnt "+c ; 表示フレーム
color 255,96,96
pos x4,y3+120 : mes kai ; 回転率表示
; 連続表示モード
if rhm=1 : color 160,160,255 : else : color 192,192,192
pos x4,y4 : mes "1 1回"
if rhm=2 : color 160,160,255 : else : color 192,192,192
pos x4,y4+30 : mes "2 固定"
if rhm=3 : color 160,160,255 : else : color 192,192,192
pos x4,y4+60 : mes "3 送り"
; 抜き色チェック
color 128,128,128 : boxf 410,260,640,360
gmode 2
pos 430+pcx(pn),270+pcy(pn) : celput pn,c
; データ
color 96,255,96
pos 560,12 : mes "x "+px(pn)
pos 560,12+30 : mes "y "+py(pn)
pos 560,12+60 : mes "a "+pa(pn)
redraw 1
if f=1 : c2+ : if c2=fpc : c2=0 : c+ : if c>=pa(pn) {
c=0
if rhm=1 : f=0 ; 1回
if rhm=2 : ; 固定連続
if rhm=3 : pn+ : if pn>gb : pn=1 ; 送り
}
return
*main ; メイン --------------------------------------------
randomize ; 乱数発生
gosub *gr_data ; グラ読み込み
celload "../chara.bmp",1001 ; 枠
celdiv 1001,80,130
font "",28 ; 文字の大きさ
x1=80 : y1=200 ; 表示座標
x2=80 : y2=55
x3=420: y3=12
x4=545: y4=164
hp="","","","透明","","加算"
hx=1.0,-1.0,1.0,-1.0 ; 表示反転データ
hy=1.0,1.0,-1.0,-1.0
hxys="正表示","左右反転","上下反転","全反転"
kai=0.0 ; 回転
f=0 ; 表示中フラグ
pn=1 ; グラNo,
pm=3 ; 半透明、加算、フラグ
br=255 ; ブレンド率
rhm=1 ; 連続表示モード(1=無、2=pn固定、3=pn順送り)
c=0 ; アニメカウンター
c2=0 ; コマ送り数カウンター
fpc=1 ; 何フレームで1コマ送るか
repeat 3 ; 使用mobグラ
gr(cnt)=rnd(200)
loop
repeat ; メインルーチン
k=0 : stick k,1+4+32+1024
if k=4 : pn+ : c=0 : c2=0 : if pn>gb : pn=1 ; グラNo.切り替え+
if k=1 : pn- : c=0 : c2=0 : if pn<1 : pn=gb ; グラNo.切り替え-
if k=2 : f=1 ; 表示開始
if k=8 : fpc+ : c2=0 : if fpc>4 : fpc=1 ; コマ送りウエイト数
if k=64 : if pm=3 : pm=5 : else : pm=3 ; 透明、加算、切り替え
if k=32 : br+ : if br>255 : br=0 ; ブレンド率+
if k=1024 : br- : if br<0 : br=255 ; ブレンド率-
if k=16 : hn+ : if hn>3 : hn=0 ; 反転表示切替
getkey k2,49 : if k2 : rhm=1 ; 連続表示モード切り替え
getkey k2,50 : if k2 : rhm=2
getkey k2,51 : if k2 : rhm=3
getkey k2,52 : if k2 : kai+=0.1 ; 回転+
getkey k2,53 : if k2 : kai-=0.1 ; 回転-
getkey k2,27 : if k2 : return
put
await 1000/20
loop
return
#deffunc pds ; データセット
pcx(gn)=px(gn)/2 ; 中央x
pcy(gn)=py(gn)/2 ; 中央y
celload "../pic/"+ps(gn),gn ; 画像読み込み
celdiv gn,px(gn),py(gn),pcx(gn),pcy(gn)
gn+
return
*gr_data ; グラフィックデータ ----------------------------
pb=300 ; エフェクト数
dim px,pb ; 大きさx
dim py,pb ; 大きさy
dim pcx,pb ; 表示座標x
dim pcy,pb ; 表示座標y
dim pa,pb ; コマ数
sdim ps,30,pb ; グラ、ファイル名
gn=1 ; グラNo.
ps(gn)="pipo-btleffect001.png"
px(gn)=120 : py(gn)=120 : pa(gn)=5
pds
ps(gn)="pipo-btleffect002.png"
px(gn)=120 : py(gn)=120 : pa(gn)=9
pds
ps(gn)="pipo-btleffect003.png"
px(gn)=120 : py(gn)=120 : pa(gn)=5
pds
gb=gn-1 ; 最大
return
HSPヘコピペすればそのまま使えると思う。
もしバグがあっても各自で対処してください、ハハ。
画像は 2次配布に当たるので、それぞれで用意してください。
これの欠点と言うか、データを全部手入力しなければいけない事。

延々と書かなければいけない(もちろんコピペして修正していくんだけど)
後はデータセットの部分のファイル名
celload "../pic/"+ps(gn),gn ; 画像読み込み
これは一つ上のフォルダに戻って、別の picフォルダに移るという意味だから、ソースと同じフォルダに画像フォルダを置くなら
"pic/"
フォルダを使わずにソースと同じ場所に画像を置くなら、単に
""
となる。
あ、そうそう、それと画面下の方のカード画像は人によって違うだろうから、各自で用意して、ソースもランダム表示になってるけど、その部分は改造してね。
という訳で、自分はこれを見ながらどのエフェクトを使うか選ぶ事にする。
次回の課題は戦闘プログラム中に、どうエフェクト表示を差し込んで、エフェクトのウエイト時間を取るかだねえ、う~ん頭いたい。