長々と制作中の PICO-8 スネークゲーム「ピコニョロ」。
デモに容量を割いてしまい、ゲーム実装が後ちょっとの所で容量がいっぱいになってしまいました。
「コードの最適化」という素敵な試練もあるのですが、力不足の私は 程々にして、マルチカートリッジに活路を開くことに致しました。
「PICO-8は、load 命令で他のカートリッジを読み込んで実行することができることを知り、「タイトル&デモ」カートリッジと、「ゲーム」の2つに分けることにしました。
また、記事「カートリッジの不可侵領域」で紹介したように、新たにカートリッジを読み込み実行しても、書き換えられないメモリ領域があることを知り、そこに色んな情報を記録すれば可能だと理解しました。
まずは、「本当にカートリッジを読み込んで切り替えられるのか?」実験してみました。
「2つのカートリッジを用意して、ボタンを押すともう一つのカートリッジを読み込む」プログラムです。
2つのカートリッジのファイル名は、「cart1.p8」「cart2.p8」と決めました。
cart1.p8 の内容
-- cart1.p8
__lua__
function _init()
end
function _update()
if (btn(4) or btn(5)) then
load("cart2.p8")
end
end
function _draw()
cls()
printb("this is cart1",nil,64,6,3)
end
-->8
function printb(s,x,y,sc,bc)
if(x==nil) x=64-#s*2
for by=-1,1 do
for bx=-1,1 do
print(s,x+bx,y+by,bc)
end
end
print(s,x,y,sc)
end
cart2.p8 の内容
-- cart2.p8
__lua__
function _init()
end
function _update()
if (btn(4) or btn(5)) then
load("cart1.p8")
end
end
function _draw()
cls()
printb("this is cart2",nil,64,6,3)
end
-->8
function printb(s,x,y,sc,bc)
if(x==nil) x=64-#s*2
for by=-1,1 do
for bx=-1,1 do
print(s,x+bx,y+by,bc)
end
end
print(s,x,y,sc)
end
実行結果です。
「THIS IS CART◯」と現在読み込まれ実行されているカートリッジの番号を表示し、ボタンを押すと左上にカートリッジ(?)のアイコンが回転するアニメを表示し、他のカートリッジを読み込んでいます。
次は、このコードに書き加えて、書き換えられないメモリ領域を使って、カートリッジを切り替える度にカウントアップするようにしてみます。
コメント