マルチカートリッジを扱う

レッツマルチカート PICO-8
レッツマルチカート

長々と制作中の 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◯」と現在読み込まれ実行されているカートリッジの番号を表示し、ボタンを押すと左上にカートリッジ(?)のアイコンが回転するアニメを表示し、他のカートリッジを読み込んでいます。

次は、このコードに書き加えて、書き換えられないメモリ領域を使って、カートリッジを切り替える度にカウントアップするようにしてみます。

コメント

タイトルとURLをコピーしました