Loading a Saved Tilemap (ReadFile)
BlitzMax Forums/BlitzMax Beginners Area/Loading a Saved Tilemap (ReadFile)| 
 | ||
| Hi all, 		If KeyHit(KEY_S) Then 'save the map file
			Local ts_savemap:TStream = WriteFile("media\usermaps\map.txt")
			For Local x:Int = 0 To 14
				For Local y:Int = 0 To 14
					WriteInt(ts_savemap,ar_mapd1[x,y].t)
					WriteInt(ts_savemap,ar_mapd2[x,y].t)
				Next
			Next
		End If
	
		If KeyHit(KEY_L) Then 'load the map file
			Local ts_loadmap:TStream = ReadFile("media\usermaps\map.txt")
			For Local x:Int = 0 To 14
				For Local y:Int = 0 To 14
					ar_mapd1[x,y].t=ReadInt(ts_loadmap)
					ar_mapd2[x,y].t=ReadInt(ts_loadmap)
				Next
			Next
		End IfThe save portion of the above code works fine, but the load portion doesn't. It 'works', but it just populated my ar_mapd1 and ar_mapd2 arrays with all the same tiles (in otherwords, not what I saved!) Would anyone be kind enough to point out where I've made the mistake(s)! Thanks! | 
| 
 | ||
| are you shure you are saving it correctly? have you looked at the saved file? put a print in the save loop to see what it's saving: print ts_savemap,ar_mapd1[x,y].t + " " + ts_savemap,ar_mapd2[x,y].t | 
| 
 | ||
| 
SuperStrict 
Graphics 640,480
Const LOAD_FROM_FILE:Byte = False   'change to true to load from file
Const MAP_WIDTH:Int = 15
Const MAP_HEIGHT:Int = 15
Type TTilemap
	Field t:Int 
End Type
Global ar_mapd1:TTilemap[MAP_WIDTH,MAP_HEIGHT]
Global ar_mapd2:TTilemap[MAP_WIDTH,MAP_HEIGHT]
If LOAD_FROM_FILE = True
	LoadTileMap()
Else
	RestoreData dat
	For Local y:Int = 0 To MAP_HEIGHT-1
		For Local x:Int = 0 To MAP_WIDTH-1
			Local incomingData:Int
			ReadData incomingData
			ar_mapd1[x,y] = New TTileMap
			ar_mapd2[x,y] = New TTileMap
			ar_mapd1[x,y].t = incomingData
			ar_mapd2[x,y].t = incomingData
		Next
	Next
End If
Repeat
	Cls
	
	If KeyHit(KEY_S) Then 'save the map file
		SaveTileMap()
	End If
 
	If KeyHit(KEY_L) Then 'load the map file
		LoadTileMap()
	End If
	
	For Local y:Int = 0 To MAP_HEIGHT-1
		For Local x:Int = 0 To MAP_WIDTH-1
			If ar_mapd1[x,y].t = 1
				DrawRect x Shl 4, y Shl 4,16,16
			End If
		Next
	Next
	
	Flip
Until KeyDown(KEY_ESCAPE)
End
Function LoadTileMap()
	Local ts_loadmap:TStream = ReadFile("map.txt")
	For Local y:Int = 0 To MAP_HEIGHT-1
		For Local x:Int = 0 To MAP_WIDTH-1
			ar_mapd1[x,y] = New TTileMap
			ar_mapd2[x,y] = New TTileMap
			ar_mapd1[x,y].t=ReadInt(ts_loadmap)
			ar_mapd2[x,y].t=ReadInt(ts_loadmap)
		Next
	Next
	CloseStream ts_loadmap
End Function
Function SaveTileMap()
	Local ts_savemap:TStream = WriteFile("map.txt")
	For Local y:Int = 0 To MAP_HEIGHT-1
		For Local x:Int = 0 To MAP_WIDTH-1
			WriteInt(ts_savemap,ar_mapd1[x,y].t)
			WriteInt(ts_savemap,ar_mapd2[x,y].t)
		Next
	Next
	CloseStream ts_savemap
End Function
#dat
DefData 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
DefData 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Quicky! ;) Dabz | 
| 
 | ||
| Thanks - tested that and it certainly appears to be saving the data as expected. So I'm guessing it's defintely the load routine that's falling over somewhere... Hmm... | 
| 
 | ||
| ar_mapd1[x,y] = New TTileMap ar_mapd2[x,y] = New TTileMap In my example, tinker with this line:- Const LOAD_FROM_FILE:Byte = True Dabz | 
| 
 | ||
| well Dabz beat me to it while i was typing it up, but here it is anyway seems to work. i'm wondering if your problem is a lack of 'CloseStream' commands in the load and save functions, their absent atleast from the code in the first post. | 
| 
 | ||
| Thanks guys, I've got it working now thanks to your help. Where would I be without this site?! ;) ;) | 
| 
 | ||
| well Dabz beat me to it while i was typing it up, but here it is anyway lol, I've wrote that much code surrounding tilemaps that it just rolls off the fingers! :) Dabz | 
| 
 | ||
| glad you got it working matt  lol, I've wrote that much code surrounding tilemaps that it just rolls off the fingers! :) no doubt :) as i was coding my example, i was able to fill the arrays with dummy figures, then save the map file and clear it, but i could not load it unless i exited out of the program and restarted then load the map right away. it's been quite awhile since i wrote any load/save routines so i pondered over it again and again then i decided to look at the help files. sure enough 'dohhh' i forgot to close the streams after use, once i did that every thing seemed to work fine. | 
| 
 | ||
| Cheers!  but i could not load it unless i exited out of the program and restarted then load the map right away.  Strangely, that was a subsequent issue I had - As you say, it was down to the fact I wasn't closing the stream. DOH! Thanks once again... |