Reading and writing map data?

BlitzMax Forums/BlitzMax Beginners Area/Reading and writing map data?

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

Regarding the first reply to this post - "I cannot believe that YOU wrote the code above or YOU wrote one piece of that stuff there... doesn't fit somehow..."

Although I guess this isnt the case here, I'm sure some of us have family members we are teaching to code, who use our blitz accounts for hte support forums. I know sometimes im posting as myself, proud owner, and sometimes my brother posts under this name as he is just learning (although he is doing really well for a HS freshman!)


Anyway, I wrote tile loading and saving code for a now-abandoned tile game. (Funny how all my projects seem abandoned now) I'll print it below:

[code]
Function SaveTileMap(map:TileMap, path:String, gPile:GraphicPile)
DeleteFile(path)
success = CreateFile(path)
If Not success RuntimeError ("couldnt create save file " + path)
File = OpenFile(path)

WriteLine File, "Level Creator File"
WriteLine File, "Tilemap:"
WriteLine File, "Tilemap X Tile Count"
WriteLine File, map.xtiles
WriteLine File, "Tilemap Y Tile Count"
WriteLine File, map.ytiles
WriteLine File, "Tilemap X Tile Size"
WriteLine File, map.tilewidth
WriteLine File, "Tilemap Y Tile Size"
WriteLine File, map.tileheight
WriteLine File, "Tile Information Follows:"
map.UpdateTilePositions()

WriteLine File, "Number of tile attributes:"
WriteLine File, TileAttributeCount
WriteLine File, "Tile Format is as Follows:"
WriteLine File, "Tile.xloc - int"
WriteLine File, "Tile.yloc - int"
WriteLine File, "Tile.mygraphic - int"
WriteLine File, "Tile.drawR - int"
WriteLine File, "Tile.drawG - int"
WriteLine File, "Tile.drawB - int"
WriteLine File, "Tile.Attributes[1] - int"
WriteLine File, "Tile.Attributes[2] - int"
WriteLine File, "Tile.Attributes[3] - int"
WriteLine File, "Tile.Attributes[...] - int"
WriteLine File, "Tile.Attributes[" + TileAttributeCount + "] - int"
WriteLine File, "starting with top left tile, working across each row"

For r = 0 To map.ytiles - 1
For i = 0 To map.xtiles -1
WriteLine File, map.Tiles[i,r].xloc
WriteLine File, map.Tiles[i,r].yloc
WriteLine File, gpile.names[map.Tiles[i,r].mygraphic]
WriteLine File, map.Tiles[i,r].drawR
WriteLine File, map.Tiles[i,r].drawG
WriteLine File, map.Tiles[i,r].drawB
For j = 0 To TileAttributeCount - 1
WriteLine File, map.Tiles[i,r].Attributes[j]
Next
Next
Next

WriteLine File, "End of Tilemap"
CloseStream File
End Function

Function LoadTileMap:TileMap(map:TileMap, gPile:graphicPile, path:String)
Local line:String
Local File:Int
file = ReadFile(path)
If Not file Return map
line = ReadLine(file)

If line <> "Level Creator File" Then
Return map
End If

line = ReadLine(File) 'WriteLine File, "Tilemap:"
line = ReadLine(File) 'WriteLine File, "Tilemap X Tile Count:"
xtiles:Int = Int(ReadLine(file)) 'WriteLine File, map.xtiles
line = ReadLine(File) 'WriteLine File, "Tilemap Y Tile Count:"
ytiles:Int = Int(ReadLine(file)) 'WriteLine File, map.ytiles
line = ReadLine(File) 'WriteLine File, "Tilemap X Tile Size"
tilewidth:Int = Int(ReadLine(file)) 'WriteLine File, map.tilewidth
line = ReadLine(File) 'WriteLine File, "Tilemap Y Tile Size"
tileheight:Int = Int(ReadLine(file)) 'WriteLine File, map.tileheight
line = ReadLine(File) 'WriteLine File, "Tile Information Follows:"
line = ReadLine(File) 'WriteLine File, "Number of tile attributes:"
TileAttributeCount = Int(ReadLine(file)) 'WriteLine File, TileAttributeCount

line = ReadLine(File) 'WriteLine File, "Tile Format is as Follows:"
line = ReadLine(File) 'WriteLine File, "Tile.xloc - int"
line = ReadLine(File) 'WriteLine File, "Tile.yloc - int"
line = ReadLine(File) 'WriteLine File, "Tile.mygraphic - int"
line = ReadLine(File) 'WriteLine File, "Tile.drawR - int"
line = ReadLine(File) 'WriteLine File, "Tile.drawG - int"
line = ReadLine(File) 'WriteLine File, "Tile.drawB - int"
line = ReadLine(File) 'WriteLine File, "Tile.Attributes[1] - int"
line = ReadLine(File) 'WriteLine File, "Tile.Attributes[2] - int"
line = ReadLine(File) 'WriteLine File, "Tile.Attributes[3] - int"
line = ReadLine(File) 'WriteLine File, "Tile.Attributes[...] - int"
line = ReadLine(File) 'WriteLine File, "Tile.Attributes[" + TileAttributeCount + "] - int"
line = ReadLine(File) 'WriteLine File, "starting with top left tile, working across each row"

map:tilemap = TileMap.create(xtiles, ytiles, tilewidth, tileheight)

CT:Tile = Tile.Create(0, gpile, 0, 0) 'CT stands for Current Tile (we load stats into one tile, and save copies of it into the tilemap

For r = 0 To map.ytiles - 1
For i = 0 To map.xtiles -1
CT.mygPile = gpile
CT.xloc = Int(ReadLine(file)) 'WriteLine File, map.Tiles[i,r].xloc
CT.yloc = Int(ReadLine(file)) 'WriteLine File, map.Tiles[i,r].yloc
CT.mygraphic = gPile.getIndex(ReadLine(file)) 'WriteLine File, gpile.names[map.Tiles[i,r].mygraphic]
CT.drawR = Int(ReadLine(file)) 'WriteLine File, map.Tiles[i,r].drawR
CT.drawG = Int(ReadLine(file)) 'WriteLine File, map.Tiles[i,r].drawG
CT.drawB = Int(ReadLine(file)) 'WriteLine File, map.Tiles[i,r].drawB
For j = 0 To TileAttributeCount - 1
CT.Attributes[j] = Int(ReadLine(file)) 'WriteLine File, map.Tiles[i,r].Attributes[j]
Next
map.Tiles[i,r] = CT.duplicate()
Next
Next

map.UpdateTilePositions()

line = ReadLine(File) 'WriteLine File, "End of Tilemap"
CloseStream File
Return map
End Function