diff options
Diffstat (limited to 'src/parser.c')
-rw-r--r-- | src/parser.c | 43 |
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) |