バイナリとしてデータを一本に纏めてセーブロードする方法
//MAP_なんちゃら が作業用メモリの各要素数で 4倍したのがファイルや作業用メモリのオフセットになる
//(MAP_LIMITIM-MAP_NO)*4 で使用ファイル or メモリサイズが出せる
#enum MAP_NO=0
#enum MAP_LIMITIM
#enum MAP_NAME
#enum MAP_NAMELAST=20/4 ;20文字分
#enum MAP_NAME_END ;文字列の終わりが0になるように使用する文字数より多く確保するため
#enum MAP_DAT
mapsiz=10
dim map,mapsiz,mapsiz
repeat mapsiz*mapsiz
map(cnt\10,cnt/10)=cnt
loop
mapno=1
limitim=100
sdim mapnam,(MAP_NAME_END-MAP_NAME)*4
mapnam="セーブテスト"
button gosub "save",*save
button gosub "load",*load
button gosub "dat表示",*drw
stop
*save
dim datbuf,(MAP_DAT+mapsiz*mapsiz) ;作業用メモリ
memcpy datbuf,mapno,(MAP_LIMITIM-MAP_NO)*4,0,0
memcpy datbuf,limitim,(MAP_NAME-MAP_LIMITIM)*4,MAP_LIMITIM*4,0
memcpy datbuf,mapnam,(MAP_NAME_END-MAP_NAME)*4,MAP_NAME*4,0
memcpy datbuf,map,mapsiz*mapsiz*4,MAP_DAT*4,0
bsave "testmapdat.dat",datbuf
title "セーブ完了"
return
*load
exist "testmapdat.dat"
if strsize<0 {mes "ファイルがありません":return}
dim datbuf,strsize
bload "testmapdat.dat",datbuf
mapno=0
limitim=0
sdim mapnam,(MAP_NAME_END-MAP_NAME)*4
dim map,mapsiz,mapsiz
memcpy mapno,datbuf,(MAP_LIMITIM-MAP_NO)*4,0,0
memcpy limitim,datbuf,(MAP_NAME-MAP_LIMITIM)*4,0,MAP_LIMITIM*4
memcpy mapnam,datbuf,(MAP_NAME_END-MAP_NAME)*4,0,MAP_NAME*4
memcpy map,datbuf,mapsiz*mapsiz*4,0,MAP_DAT*4
title "ロード完了"
return
*drw
color 255,255,255:boxf:color
pos 16,100
mes "mapno: "+mapno
mes "limitim: "+limitim
mes "mapnam: "+mapnam
repeat mapsiz*mapsiz
pos 150+(cnt\10)*16,160+(cnt/10)*16
mes map(cnt\10,cnt/10)
loop
return
他にも一つずつファイルに追加してくとか、全部文字列にして保存するとかあると思う
文字列の方が、扱うデータの種類が増えたり減ったりした時の対応が楽かもしれない