Map Format Import & Conversion

Started by kevin, May 18, 2013, 07:29:44 AM

Previous topic - Next topic

kevin


  Map Format Import & Conversion

       There's literally hundreds of 2d mapping tools on the net, finding one isn't difficult, but importing/converting the data formats can be.   So this little thread will document my various little explorations from time to time. 



  Isometric Map Test

       This is just a quick import mock up of the Isometric map from 'Tiled'  map editor, this scene is one of the stock examples that comes with it.  The editor seems to  default  XML with compressed tile data hunk, can't be bothered with that.  But there is a CSV form, which just spits the tile data out as,



  <data encoding="csv">
24,24,23,24,23,24,23,23,24,24,23,7,2,2,1,4,2,2,3,4,4,1,3,4,1,
24,23,23,23,23,23,24,23,24,24,18,4,1,3,1,3,3,4,4,1,3,1,4,3,4,
23,23,23,23,23,24,24,24,23,11,7,2,1,3,1,3,4,4,3,2,2,3,4,2,1,
23,24,24,23,23,24,24,24,11,7,2,4,4,3,3,1,4,2,1,4,4,4,1,1,1,
23,23,23,24,23,23,24,23,18,4,4,2,2,3,3,3,4,3,4,4,3,2,4,3,4,
24,23,23,24,11,12,24,24,18,4,4,3,2,1,2,2,1,1,1,2,1,4,2,1,1,
24,24,23,23,10,9,23,11,7,1,4,1,1,1,2,3,2,3,3,3,4,2,4,4,4,
24,23,23,24,24,23,11,7,3,1,3,1,1,3,4,4,1,1,4,2,2,3,4,4,2,
19,19,19,19,19,19,7,3,1,3,3,2,3,1,1,3,1,3,3,2,4,3,3,3,1,
1,2,4,2,2,3,3,2,1,5,6,4,1,2,3,1,2,4,3,4,4,1,1,1,1,
3,3,1,1,2,4,3,4,4,8,7,4,3,2,1,5,6,4,1,2,2,4,4,4,4,
2,4,4,4,4,2,3,3,4,4,2,3,3,5,17,21,7,1,4,1,3,2,4,3,1,
3,1,2,2,3,2,4,4,3,1,2,2,4,20,23,18,2,1,1,3,3,1,4,3,4,
4,2,3,3,1,2,4,3,1,1,3,1,1,20,23,18,3,1,2,4,3,4,1,3,2,
4,1,2,1,3,3,1,4,4,1,4,1,3,20,23,18,1,3,3,3,3,2,1,4,2,
3,4,3,2,3,4,3,4,4,3,1,5,17,9,23,18,1,2,2,4,4,4,1,2,3,
2,2,1,4,4,3,3,3,2,4,4,8,19,19,19,7,3,2,4,4,3,3,4,3,4,
1,4,1,3,2,1,4,4,1,3,4,3,4,4,3,2,2,2,3,3,3,1,1,2,3,
2,1,3,3,3,3,2,2,3,2,1,3,3,1,3,4,3,3,2,3,1,1,3,4,2,
4,2,4,1,2,1,2,3,4,4,3,4,3,2,3,3,1,2,3,1,1,1,4,4,1,
3,2,2,4,4,3,2,1,4,2,2,1,4,2,3,4,1,2,3,2,2,2,4,3,1,
1,3,1,2,3,3,3,4,2,1,3,2,1,1,1,3,3,1,3,4,3,1,2,3,4,
1,2,3,4,1,3,4,4,4,1,4,4,3,2,3,4,1,2,4,2,1,2,2,4,1,
4,2,3,2,1,4,2,2,1,2,2,2,4,3,3,2,3,3,2,3,2,4,1,3,1,
1,1,1,4,1,3,3,2,1,4,2,1,3,1,3,3,4,3,4,2,1,2,3,1,1
</data>



       So really all you'd do is load the map file to a string, find the DATA tags and pull out the text,  remove the chr$(13) and Chr(10) characters and split it to an integer array.    Couldn't be simpler. 


kevin


   Example of pulling the tile indexes from the data section of the xml.


PlayBASIC Code: [Select]
   // Make the data section of string just like it was when loaded

cr$=chr$(13)+chr$(10)

s$ =""+cr$
s$+="24,24,23,24,23,24,23,23,24,24,23,7,2,2,1,4,2,2,3,4,4,1,3,4,1,"+cr$
s$+="24,23,23,23,23,23,24,23,24,24,18,4,1,3,1,3,3,4,4,1,3,1,4,3,4,"+cr$
s$+="23,23,23,23,23,24,24,24,23,11,7,2,1,3,1,3,4,4,3,2,2,3,4,2,1,"+cr$
s$+="23,24,24,23,23,24,24,24,11,7,2,4,4,3,3,1,4,2,1,4,4,4,1,1,1,"+cr$
s$+="23,23,23,24,23,23,24,23,18,4,4,2,2,3,3,3,4,3,4,4,3,2,4,3,4,"+cr$
s$+="24,23,23,24,11,12,24,24,18,4,4,3,2,1,2,2,1,1,1,2,1,4,2,1,1,"+cr$
s$+="24,24,23,23,10,9,23,11,7,1,4,1,1,1,2,3,2,3,3,3,4,2,4,4,4,"+cr$
s$+="24,23,23,24,24,23,11,7,3,1,3,1,1,3,4,4,1,1,4,2,2,3,4,4,2,"+cr$
s$+="19,19,19,19,19,19,7,3,1,3,3,2,3,1,1,3,1,3,3,2,4,3,3,3,1,"+cr$
s$+="1,2,4,2,2,3,3,2,1,5,6,4,1,2,3,1,2,4,3,4,4,1,1,1,1,"+cr$
s$+="3,3,1,1,2,4,3,4,4,8,7,4,3,2,1,5,6,4,1,2,2,4,4,4,4,"+cr$
s$+="2,4,4,4,4,2,3,3,4,4,2,3,3,5,17,21,7,1,4,1,3,2,4,3,1,"+cr$
s$+="3,1,2,2,3,2,4,4,3,1,2,2,4,20,23,18,2,1,1,3,3,1,4,3,4,"+cr$
s$+="4,2,3,3,1,2,4,3,1,1,3,1,1,20,23,18,3,1,2,4,3,4,1,3,2,"+cr$
s$+="4,1,2,1,3,3,1,4,4,1,4,1,3,20,23,18,1,3,3,3,3,2,1,4,2,"+cr$
s$+="3,4,3,2,3,4,3,4,4,3,1,5,17,9,23,18,1,2,2,4,4,4,1,2,3,"+cr$
s$+="2,2,1,4,4,3,3,3,2,4,4,8,19,19,19,7,3,2,4,4,3,3,4,3,4,"+cr$
s$+="1,4,1,3,2,1,4,4,1,3,4,3,4,4,3,2,2,2,3,3,3,1,1,2,3,"+cr$
s$+="2,1,3,3,3,3,2,2,3,2,1,3,3,1,3,4,3,3,2,3,1,1,3,4,2,"+cr$
s$+="4,2,4,1,2,1,2,3,4,4,3,4,3,2,3,3,1,2,3,1,1,1,4,4,1,"+cr$
s$+="3,2,2,4,4,3,2,1,4,2,2,1,4,2,3,4,1,2,3,2,2,2,4,3,1,"+cr$
s$+="1,3,1,2,3,3,3,4,2,1,3,2,1,1,1,3,3,1,3,4,3,1,2,3,4,"+cr$
s$+="1,2,3,4,1,3,4,4,4,1,4,4,3,2,3,4,1,2,4,2,1,2,2,4,1,"+cr$
s$+="4,2,3,2,1,4,2,2,1,2,2,2,4,3,3,2,3,3,2,3,2,4,1,3,1,"+cr$
s$+="1,1,1,4,1,3,3,2,1,4,2,1,3,1,3,3,4,3,4,2,1,2,3,1,1"+cr$
s$+=""+cr$




DIm Map(0,0)

Map()=Decode_Map(s$,25,25)

For Ylp=0 to GetArrayELements(Map(),2)-1
For Xlp=0 to GetArrayELements(Map())-1
text xlp*20,ylp*20,Map(xlp,ylp)
next
next

sync
waitkey



Function Decode_Map(s$,width,Height)
Dim MapData(Width,Height)

startpos=instring(s$,")
if STartpos
TagEnd=Instring(s$,">",Startpos)
if Tagend
Endpos=instring(s$,"
"
)
if EndPos

StartPos=TagEnd+1

Dim Values(0)
t$=mid$(s$,StartPos,EndPos-StartPos)
t$=replace$(t$,chr$(13)+chr$(10),"")
count=SplitToArray(t$,",",Values())

if count
For ylp=0 to Height-1
For xlp=0 to Width-1
MapData(xlp,ylp)=Values(Index)
Index++
next
next
endif

endif
endif
endif

EndFunction MapData()