Dabei brauche ich eine Art Dateiformat für Mapfiles (welche Kachel wo liegt usw.), Tilesets (welche Teile welcher Kacheln sind begehbar usw.) und "Entities". Unter Entities subsummiere ich alles was auf der Karte kreucht und fleucht: Skelette, Panzer, Feuerbälle, und was man sich alles überlegen kann.
Weil es so schön einfach ist einen Parser dafür zu schreiben - und weil die Art Dateien extrem einfach von Hand zu bearbeiten sind - verwende ich bisher INI-Files (wer die nicht mehr kennt: http://de.wikipedia.org/wiki/Initialisi ... tei#Aufbau)
Zum Beispiel folgendes Tileset:
dungeon.ini
Code: Alles auswählen
[init]
height=128
width=64
rows=5
cols=10
[block]
; row #1
0=0,0,0,0|0,0,0,0|0,0,0,0|0,0,0,0 ; plain
1=0,0,0,0|0,0,0,0|0,0,0,0|0,0,0,0 ; plain
2=1,1,1,1|1,1,1,1|1,1,1,1|1,1,1,0 ; nw wall
3=1,1,1,1|1,1,1,1|1,1,1,1|0,1,1,1 ; ne wall
4=1,0,0,0|1,1,0,0|1,1,0,0|1,0,0,0 ; outer w wall
5=0,0,0,1|0,0,1,1|0,0,1,1|0,0,0,1 ; outer e wall
6=1,1,1,1|0,1,1,0|0,0,0,0|0,0,0,0 ; outer n wall
7=1,1,1,1|1,1,1,1|1,0,0,1|0,0,0,0 ; inner n wall
;8=,,,|,,,|,,,|,,,
;9=,,,|,,,|,,,|,,,
; row #2
;10=,,,|,,,|,,,|,,,
;11=,,,|,,,|,,,|,,,
12=0,0,0,0|1,0,0,0|1,1,0,0|1,1,1,0 ; sw wall
13=0,0,0,0|0,0,0,1|0,0,1,1|0,1,1,1 ; se wall
14=1,1,1,0|1,1,0,0|1,1,0,0|1,1,1,0 ; inner w wall
15=0,1,1,1|0,0,1,1|0,0,1,1|0,1,1,1 ; inner e wall
16=0,0,0,0|1,0,0,1|1,1,1,1|1,1,1,1 ; inner s wall
17=0,0,0,0|0,0,0,0|0,1,1,0|1,1,1,1 ; outer s wall
;=17,,,|,,,|,,,|,,,
;=18,,,|,,,|,,,|,,,
;=19,,,|,,,|,,,|,,,
; row #3
;=20,,,|,,,|,,,|,,,
;=21,,,|,,,|,,,|,,,
;=22,,,|,,,|,,,|,,,
;=23,,,|,,,|,,,|,,,
;=24,,,|,,,|,,,|,,,
;=25,,,|,,,|,,,|,,,
;=26,,,|,,,|,,,|,,,
;=27,,,|,,,|,,,|,,,
;=28,,,|,,,|,,,|,,,
;=29,,,|,,,|,,,|,,,
; row #4
;=30,,,|,,,|,,,|,,,
;=31,,,|,,,|,,,|,,,
;=32,,,|,,,|,,,|,,,
;=33,,,|,,,|,,,|,,,
;=34,,,|,,,|,,,|,,,
;=35,,,|,,,|,,,|,,,
;=36,,,|,,,|,,,|,,,
;=37,,,|,,,|,,,|,,,
;=38,,,|,,,|,,,|,,,
;=39,,,|,,,|,,,|,,,
; row #5
;=40,,,|,,,|,,,|,,,
;=41,,,|,,,|,,,|,,,
;=42,,,|,,,|,,,|,,,
;=43,,,|,,,|,,,|,,,
;=44,,,|,,,|,,,|,,,
;=45,,,|,,,|,,,|,,,
;=46,,,|,,,|,,,|,,,
;=47,,,|,,,|,,,|,,,
;=48,,,|,,,|,,,|,,,
;=49,,,|,,,|,,,|,,,
Oder auch folgende Mapfile:
demo.ini
Code: Alles auswählen
[init]
tileset=dungeon
width=10
height=7
[tiles]
floor=0,0,0,0,0,0,0,0,0,0|0,0,0,0,0,0,0,0,0,0|0,0,0,0,0,0,0,0,0,0|0,0,0,0,0,0,0,0,0,0|0,0,0,0,0,0,0,0,0,0|0,0,0,0,0,0,0,0,0,0|0,0,0,0,0,0,0,0,0,0
wall=,,,,,,,,,|,,,,,,,,,|,,,,,,,,,|,,,,,,,,,|,,,,,,,,,|,,,,,,,,,|,,,,,,,,,
[entities]
4,5=skeleton
skeleton.ini
Code: Alles auswählen
[init]
width=128
height=128
default=stand
gfx=stand,move;,die
sfx=die
[collision]
width=1
height=1
mask=1
[stand]
duration=6
length=4
[move]
duration=3
length=8
speed=13
Beim Laden einer Entity bekommt der Konstruktor den Dateinamen der Konfiguration, lädt diese erstmal und verpasst den Membervariablen dann den entsprechenden Wert.
Was haltet ihr von dieser Art der Datenhaltung? Sicherlich wird der ein oder andere mir zu XML raten. Wie wird es aber bei den "großen" Spielen (ich denke dabei an die MPQ-Dateien von Diablo2 oder die BIG-Dateien von C&C) gemacht? Soweit ich das überblicke, stecken da ja die Grafiken und Sounds mit drinnen, und sicher auch Konfigurationen

Code: Alles auswählen
data\
entity\
skeleton\
config.ini
die.ogg
move.ogg
move.png
stand.png
fireball\
config.ini
die.ogg
move.png
stand.png
map\
demo.ini
foobar.ini
music\
theme.ogg
tiles\
dungeon.ini
dungeon.png
forest.ini
forest.png
widget\
button\
config.ini
frameset.png
checkbox\
config.ini
frameset.png
LG Glocke
