WriteFile()/tile editor saving problems...

BlitzPlus Forums/BlitzPlus Programming/WriteFile()/tile editor saving problems...

elseano(Posted 2004) [#1]
hi I'm working on an RPG and I just made this simple tile editor which works fine but I am now trying to get loading/saving to work...Here's the code. I used writefile nd writeInt to try and save which 'frame' to use for each tile ie. which tile.
The problem is that when I open the file after writing it with Blitz, all I get is a '[]' (wierd box)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Graphics 800,600,16,1

AppTitle "Editor"

SetBuffer BackBuffer()

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Const width=800
Const height=600

Const kLeft=203
Const kRight=205
Const kUp=200
Const kDown=208

Const Kz=44
Const kx=45
Const Kc=46
Const Kspace=57

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Type tile
	Field which
	Field x#,y#
	Field xn#
	Field yn#
	Field water
	Field passable
	Field ident
End Type

Global grasstiles=LoadAnimImage( "C:/RPG/tiles/grass.bmp",32,32,0,52 )
Global mudties=LoadAnimImage( "C:/RPG/tiles/mud.bmp",32,32,0,52 )
Global cursor=LoadImage( "C:/RPG/cursor.bmp" )
MaskImage cursor,255,0,255

Global cx=1,cy=1,cimg=0,curdent=100,status=0,set=0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

While Not KeyHit(1)

Cls

	Select set
	
	Case 0
	tiles=grasstiles
	
	Case 1
	tiles=mudtiles
	
	Default
	tiles=grasstiles
	
	End Select

	If Not status=1 Then
	
	If KeyHit(15) And set=0 Then
		set=1
	EndIf
	
	If KeyHit(15) And set=1 Then
		set=0
	EndIf
	
	If KeyHit(31) And cimg<52 Then
		cimg=cimg+1
	EndIf
	
	If KeyHit(30) And cimg>0 Then
		cimg=cimg-1
	EndIf
	
	If KeyHit(57) Then
		t.tile=New tile
		t\x=cx
		t\y=cy
		t\which=cimg
		t\ident=curdent
		
		curdent=curdent+1
	EndIf
	
	If KeyHit(19) Then
	EndIf
	
	If KeyHit(Kz) Then
	status=1
	EndIf
			
	
	For t.tile = Each tile
		DrawImage tiles,t\x,t\y,t\which
	Next	
	
	
	If KeyHit(Kright) Then
		cx=cx+32
	EndIf
	
	If KeyHit(Kleft) Then
		cx=cx-32
	EndIf
	
	If KeyHit(Kdown) Then
		cy=cy+32
	EndIf
	
	If KeyHit(Kup) Then
		cy=cy-32
	EndIf
	
	If KeyHit(42) Then
	Color 100,140,150
	Text width/2,height/2,">>Saving<<",True,True
	name= WriteFile(CurrentDir()+"/levels/first_level")
	For t.tile = Each tile
	WriteByte(name,t\which)
	Next
	EndIf
	
	
	DrawImage tiles,cx,cy,cimg
	Color 255,255,255
	Rect cx-1,cy-1,34,34,False
	Text cx+35,cy,"Tile no: "+cimg
	For t.tile = Each tile
	If RectsOverlap(cx,cy,32,32,t\x,t\y,32,32) Then
	Text cx+35,cy+15,"Tile ident: "+t\ident
	EndIf
	Next
	
	Else
	
	window(200,10,350,560,50,90,30,"Tile editor V1.0")
	button(230,50,60,20,30,130,20,"Save")
	
		
	If KeyHit(Kz) Then
	status=0
	EndIf
	
	DrawImage cursor,MouseX(),MouseY()
	
	EndIf	

Flip

Wend

Function window(x#,y#,ys#,xs#,r#,g#,b#,title$)

Color 50,50,50
Rect x,y,ys,xs,True

Color 255,255,255
Text x+2,y-5,title,False

Color 255,255,255
Rect x+7,y+7,ys-7,xs-7,False

Color r,g,b
Rect x+17,y+17,ys-27,xs-27,True

End Function

Function button(x#,y#,xs#,ys#,r#,g#,b#,title$)

Color r,g,b
Rect x,y,xs,ys,True

Color 255,255,255
Rect x,y,xs,ys,False

Color 255,255,255
Text x+(xs/2),y+(ys/2),title,True,True


End Function


Please help me with this as it's pretty much the only thing stopping me from making a great RPG :[


elseano(Posted 2004) [#2]
C'mon, somebody help me!


soja(Posted 2004) [#3]
Post your graphics, so I don't have to make my own to run it and see what's going on


Andy_A(Posted 2004) [#4]
I didn't notice a "CloseFile()" after the Wend, in your code. Could that be corrupting the file on subsequent reads? What code are you using to read the tile data?


Floyd(Posted 2004) [#5]
Are you trying to write plain text readable in an editor such as NotePad?

In that case you must use WriteLine. All the other functions such as WriteInt and WriteFloat use various forms of raw data. They are appropriate when you intend to read them back with the corresponding ReadInt and ReadFloat.


elseano(Posted 2004) [#6]
Thanks. It think I have to use writeline then. Also I'll add the closefile suggested by Andy_A.
The graphics will be on [a http://www.elseano.tk]my site[/\] before the end of the week if you wanted to see them.