先のサンプルでラベルを変数で管理する事ができているので
あとはbsave・bloadやnotesave・noteload等を使って変数を
保存・読み込みするようにすればいいだけです。
(arraysave・arrayloadという命令もあります)
その際existを使えば指定したファイルが存在しているかを調べる事が
できるので、セーブファイルが既にある場合上書きするか確認する事が出来ます。
以下はbsave・bloadを使った例です。
; 記述の簡略化用マクロ
#define __clear color 255 , 255 , 255 : boxf : color 0 , 0 , 0
#define __status title "現在のシーンNO=" + scene + " SAVEしたシーンNO=" + savescene
; 変数初期化
lbl = *s_00 , *s_01 , *s_02 , *s_03 , *s_04 ; ラベルを配列に代入
scene = 0 ; 現在のシーンNO
nextscene = 0 ; 次に進むシーンNO
savescene = 0 ; セーブしたシーンNO
cls
onkey gosub *key_in
button gosub "SAVE" , *save ; セーブボタン
button gosub "LOAD" , *load ; ロードボタン
*s_00 ; タイトル画面等の処理
gosub *s_01
__status ; ステータス表示マクロ
stop
; 操作処理
*key_in ; 入力処理
if wparam = 13 { ; Enterで進む
gosub lbl(nextscene) ; 次のシーンへ進む
}
__status
return
*save ; セーブ処理(ファイルを作成して保存)
exist "savedata.dat" ; セーブファイルがあるか確認
if strsize = -1 { ; セーブファイルが存在していない場合の処理
dialog "セーブデータを作成します"
} else {
dialog "セーブデータを上書きしますか?" , 3
if stat = 7 : return ; いいえが押されたらキャンセル
}
savescene = scene ; 現在のシーンNOを保存する
bsave "savedata.dat" , savescene
__status
return
*load ; ロード処理
exist "savedata.dat" ; セーブファイルがあるか確認
if strsize = -1 { ; セーブファイルがなければ処理をキャンセル
dialog "セーブデータがありません"
return
}
bload "savedata.dat" , savescene
scene = savescene ; 保存したシーンNOを現在のシーンNOにする
__status
gosub lbl(scene) ; 指定したシーンへ進む
return
; シナリオ処理
*s_01
__clear ; 画面クリアマクロ
pos 0 , 48
mes "test1です"
scene = 1 ; 現在のシーンNO
nextscene = 2 ; 次のシーンNO
return
*s_02
__clear
pos 0 , 48
mes "test2です"
scene = 2
nextscene = 3
return
*s_03
__clear
pos 0 , 48
mes "test3です"
scene = 3
nextscene = 4
return
*s_04
__clear
pos 0 , 48
mes "test4です"
mes "最初に戻ります"
scene = 4
nextscene = 1 ; 最初のシーンに戻る
return