TeamworkCastが配信している、PICO-8のチュートリアル動画の解説を連載中です。
前回はこちら。
そして今回の動画はこちらです。
【解説メモ】
マルチボールは、3つを2つに分裂するようにして、角度は両端の角度を取り、真ん中は無しにする。
unction multiball()〜end
function multiball()
ball2=copyball(ball[1])
ball3=copyball(ball[1])
if ball[1].ang==0 then
setang(ball2,1)
setang(ball3,2)
elseif ball[1].ang==1 then
setang(ball2,0)
setang(ball3,2)
else
setang(ball2,0)
setang(ball3,1)
end
ball[#ball+1]=ball2
ball[#ball+1]=ball3
end
を
function multiball()
local ballnum = flr(rnd(#ball))+1
local ogball = ball[ballnum]
ball2=copyball(ogball)
-- ball3=copyball(ball[1])
if ogball.ang==0 then
setang(ball2,2)
elseif ogball.ang==1 then
setang(ogball,0)
setang(ball2,2)
else
setang(ball2,0)
end
ball2.stuck=false
ball[#ball+1]=ball2
end
にする。
function powerupget(_p)〜endのreleasestuck()を消す。
function powerupget(_p)〜endの内容
function powerupget(_p)
if _p == 1 then
-- slowdown
powerup = 1
powerup_t = 900
elseif _p == 2 then
-- life
powerup = 0
powerup_t = 0
lives+=1
elseif _p == 3 then
-- catch
-- check if there are stuck balls
hasstuck=false
for i=1,#ball do
if ball[i].stuck then
hasstuck=true
end
end
if hasstuck==false then
sticky=true
end
elseif _p == 4 then
-- expand
powerup = 4
powerup_t = 900
elseif _p == 5 then
-- reduce
powerup = 5
powerup_t = 900
elseif _p == 6 then
-- megaball
powerup = 6
powerup_t = 900
elseif _p == 7 then
-- multiball
multiball()
end
end
を
function powerupget(_p)
if _p == 1 then
-- slowdown
timer_slow = 900
elseif _p == 2 then
-- life
lives+=1
elseif _p == 3 then
-- catch
-- check if there are stuck balls
hasstuck=false
for i=1,#ball do
if ball[i].stuck then
hasstuck=true
end
end
if hasstuck==false then
sticky=true
end
elseif _p == 4 then
-- expand
timer_expand = 900
elseif _p == 5 then
-- reduce
timer_reduce = 900
elseif _p == 6 then
-- megaball
timer_mega = 900
elseif _p == 7 then
-- multiball
multiball()
end
end
に変更し、それぞれのタイマーを設定する。
function update_game()〜endの内容の最後の
if powerup!=0 then
powerup_t-=1
-- debug = powerup_t
if powerup_t<=0 then
powerup=0
end
end
を
-- powerup timers
if timer_mega > 0 then
timer_mega-=1
end
if timer_slow > 0 then
timer_slow-=1
end
if timer_expand > 0 then
timer_expand-=1
end
if timer_reduce > 0 then
timer_reduce-=1
end
にして、先ほど決めたタイマーの変数のカウントダウンの処理を書く。
unction update_game()〜endの内容のif powerup==4 thenをif timer_expand > 0 thenに
elseif powerup==5 thenをelseif timer_reduce > 0 thenに変更。
function updateball(bi)〜endの内容のif powerup==1 thenをif timer_slow > 0 thenに変更。
function updateball(bi)〜endの内容のif (powerup == 6 and bricks[i].t==”i”) or powerup != 6 thenをif (timer_mega > 0 and bricks[i].t==”i”) or timer_mega <= 0 thenに変更。
function hitbrick(_i,_combo)〜endの内容のif powerup == 6 thenをif timer_mega > 0 thenに変更。
function powerupget(_p)〜endの内容のtimer_expand = 900の下にtimer_reduce = 0を書き、
timer_reduce = 900の下にtimer_expand = 0を書く。
function startgame()〜endの内容のserveball()の前に、
timer_mega=0
timer_slow=0
timer_expand=0
timer_reduce=0
と各タイマーを0でリセットする。
function serveball()〜endの内容のchain=1の下にも同じ様に記述。
【自分の感想】
カプセルの効果の期間を決めるタイマーを、それぞれ独立させて設定し、幾つもの効果を同時に受けられるようにした。
そして、タイマーがゼロということは、効果が無いという意味にも取れる。
マルチボールは、3つだとバランスが悪いのかもしれない。
コメント