void extract_map(const char *js, jsmntok_t *t, size_t count, map_t *map) {
int i, j, k, indent, inner_end;
bitmap_t bp;
- #ifdef DEBUG_DUMPVARS
- fprintf(stderr, "t->size=[%d] ", t->size);
- fprintf(stderr, "q=[%d] ", q);
- fprintf(stderr, "indent= [%d] ", indent);
- fprintf(stderr, "js_sv= [%s]\n", js_sv);
- #endif
- map->tiles = malloc(sizeof(tiles_t));
- map->tiles->btdata = malloc(sizeof(bitmap_t));
- //fix this to be far~
- //And a pointer
- bp = bitmapLoadPcx("data/ed.pcx");
- map->tiles->btdata = &bp;
- map->tiles->tileHeight = 16;
- map->tiles->tileWidth = 16;
- map->tiles->rows = 1;
- map->tiles->cols = 1;
- map->tiles->debug_text=false;
-
+ char *s;
+ i = 0;
while(i<count) {
- if(jsoneq(js, t, "layers" == 0)) {
+ if(jsoneq(js, &(t[i]), "layers") == 0) {
i++;
- map->data = malloc(sizeof(*byte) * t[i].size);
+ map->data = malloc(sizeof(byte*) * t[i].size);
inner_end = t[i].end;
k = 0;
while(t[i].start < inner_end) {
- if(jsoneq(js, t, "data") == 0) {
+ printf("%d, %d\n", t[i].start, inner_end);
+ if(jsoneq(js, &(t[i]), "data") == 0) {
+ #ifdef DEBUG_MAPVAR
+ printf("Layer %d data: [", k);
+ #endif
map->data[k] = malloc(sizeof(byte) * t[i+1].size);
for(j = 0; j < t[i+1].size; j++) {
- map->data[k][j] = (byte)atoi(js + t[i+1+j].start);
+ map->data[k][j] = (byte)atoi(js + t[i+2+j].start);
+ #ifdef DEBUG_MAPVAR
+ printf("%d, ", map->data[k][j]);
+ #endif
}
- i += j + 1;
+ i += j + 2;
k++;
+ #ifdef DEBUG_MAPVAR
+ puts("]");
+ #endif
+ }
+ else{
+ i++;
}
}
- }/*
- if(jsoneq(js, t, "tilesets" == 0)) {
+ }
+ if(jsoneq(js, &(t[i]), "tilesets") == 0) {
i++;
- map->tiles = malloc(sizeof(*tiles_t) * t[i].size);
+ map->tiles = malloc(sizeof(tiles_t*) * t[i].size);
inner_end = t[i].end;
k = 0;
while(t[i].start < inner_end) {
- if(jsoneq(js, t, "data") == 0) {
+ if(jsoneq(js, &(t[i]), "image") == 0) {
+ //fix this to be far~
map->tiles[k] = malloc(sizeof(tiles_t));
+ map->tiles[k]->btdata = malloc(sizeof(bitmap_t));
+ map->tiles[k]->tileHeight = 16;
+ map->tiles[k]->tileWidth = 16;
+ map->tiles[k]->rows = 1;
+ map->tiles[k]->cols = 1;
+ map->tiles[k]->debug_text=false;
+ //Fix to load tileset specified.
+ //And move to vrs, probably
bp = bitmapLoadPcx("data/ed.pcx");
- map->tiles[k].btdata = &bp;
+ map->tiles[k]->btdata = &bp;
k++;
}
+ i++;
}
- }*/
+ }
- if (jsoneq(js, t, "height") == 0 && indent<=1) {
+ if (jsoneq(js, &(t[i]), "height") == 0 && indent<=1) {
map->height = atoi(js + t[i+1].start);
#ifdef DEBUG_MAPVAR
- fprintf(stderr, "indent= [%d] ", indent);
- fprintf(stderr, "h:[%d]\n", map->height);
+ printf("Height: %d\n", map->height);
#endif
i++;
}
- else if(jsoneq(js, t, "width") == 0 && indent<=1) {
- map->width = atoi(js+t[i+1]->start);
+ else if(jsoneq(js, &(t[i]), "width") == 0 && indent<=1) {
+ map->width = atoi(js + t[i+1].start);
#ifdef DEBUG_MAPVAR
- fprintf(stderr, "indent= [%d] ", indent);
- fprintf(stderr, "w:[%d]\n", map->width);
+ printf("Width: %d\n", map->width);
#endif
i++;
}
int loadmap(char *mn, map_t *map) {
char *js;
- char js_ss[16];
jsmn_parser p;
jsmntok_t *tok = NULL;
size_t tokcount, file_s;
FILE *fh = fopen(mn, "r");
+ int status;
/* Prepare parser */
jsmn_init(&p);
fclose(fh);
return 1;
}
-
tokcount = jsmn_parse(&p, js, file_s, NULL, 0);
tok = malloc(tokcount*sizeof(jsmntok_t));
- jsmn_parse(&p, js, file_s, tok, tokcount);
- fprintf(stderr, "running dump~\n");
- printf("%d\n", p.toknext);
- extract_map(js, tok, tokcount, 0);
+ printf("Allocated %d tokens", tokcount);
+ jsmn_init(&p);
+ if((status = jsmn_parse(&p, js, file_s, tok, tokcount)) < 0)
+ {
+ printf("Error: %d\n", status);
+ return status;
+ }
+ else if(status != tokcount) { printf("Warning: used %d tok\n", status);}
+ extract_map(js, tok, tokcount, map);
free(js);
free(tok);