summaryrefslogtreecommitdiff
path: root/src/parser.c
diff options
context:
space:
mode:
authorLudovic Pouzenc <lpouzenc@gmail.com>2013-07-21 00:41:15 +0200
committerLudovic Pouzenc <lpouzenc@gmail.com>2013-07-21 00:41:15 +0200
commitbf2391843b679d8919e0a9d054d71e320b9f5afc (patch)
treef22c3ab55e71f2e0d9f0c9f2032053db10a7bea7 /src/parser.c
parent5d0b6e197f11004753484ad383d66fe0c3588857 (diff)
downloadmplemmings-bf2391843b679d8919e0a9d054d71e320b9f5afc.tar.gz
mplemmings-bf2391843b679d8919e0a9d054d71e320b9f5afc.tar.bz2
mplemmings-bf2391843b679d8919e0a9d054d71e320b9f5afc.zip
paint_terrain, la suite. Enfait, le parsing des ficheirs ini n'est pas complet. Et il n'y a pas de message d'erreur en cas d'arret du parseur sur une erreur !
Diffstat (limited to 'src/parser.c')
-rw-r--r--src/parser.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/parser.c b/src/parser.c
index 027d1fc..89f3c55 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -206,6 +206,49 @@ int callback_ini_level(const mTCHAR *section, const mTCHAR *key, const mTCHAR *v
MATCH_STRING(style,MAX_NAMELEN);
MATCH_STRING(name,MAX_NAMELEN);
+ if (SDL_strncasecmp(key,"object",6)==0 && key[6]=='_') {
+ return 1;
+ }
+ if (SDL_strncasecmp(key,"steel",5)==0 && key[5]=='_') {
+ return 1;
+ }
+
+ if (SDL_strncasecmp(key,"terrain",7)==0 && key[7]=='_') {
+ char *wordBoundary;
+ int v;
+ int k = atoi(key+8);
+ if ( k<0 || k>MAX_TERRAINS_COUNT) { *err=ERR_KEY_OUT_OF_RANGE; return 0; }
+ if (data->terrainCount < k+1) data->terrainCount = k+1;
+
+ if ( (wordBoundary=SDL_strchr(value,','))==NULL ) { *err=ERR_BAD_FIELDS; return 0; }
+ *wordBoundary='\0';
+ v = atoi(value);
+ if ( v<0 || v>MAX_OBJECTS_COUNT) { *err=ERR_VAL_OUT_OF_RANGE; return 0; }
+ data->terrains[k].id = v;
+ value = wordBoundary+1;
+
+ if ( (wordBoundary=SDL_strchr(value,','))==NULL ) { *err=ERR_BAD_FIELDS; return 0; }
+ *wordBoundary='\0';
+ v = atoi(value);
+ if ( v<0 || v>LEVEL_WIDTH) { *err=ERR_VAL_OUT_OF_RANGE; return 0; }
+ data->terrains[k].xpos = v;
+ value = wordBoundary+1;
+
+ if ( (wordBoundary=SDL_strchr(value,','))==NULL ) { *err=ERR_BAD_FIELDS; return 0; }
+ *wordBoundary='\0';
+ v = atoi(value);
+ if ( v<0 || v>LEVEL_HEIGHT) { *err=ERR_VAL_OUT_OF_RANGE; return 0; }
+ data->terrains[k].ypos = v;
+ value = wordBoundary+1;
+
+ v = atoi(value);
+ if ( v<0 || v>16) { *err=ERR_VAL_OUT_OF_RANGE; return 0; }
+ data->terrains[k].modifier = v;
+
+ return 1;
+ }
+ //MATCH_INT_ARRAY_QUAD(terrain,MAX_OBJECTS_COUNT,data->terrainCount,data->terrains,id,xpos,ypos,modifier);
+ //MATCH_INT_ARRAY_QUAD(terrain,MAX_STEELS_COUNT,data->terrainCount,data->terrains,id,xpos,ypos,modifier);
// TODO : object/terrain/steel à la main (car struct, et complications)
// No match is an error (unkown key)