]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_map.c
Merge remote-tracking branch 'upstream/master'
[16.git] / src / lib / 16_map.c
index 45c85760a6a95868cda4a652e72302dfb49a56b2..8e2d65b2de75763aabe807e57fd894b08e699be2 100755 (executable)
@@ -35,69 +35,74 @@ int jsoneq(const char *json, jsmntok_t *tok, const char *s) {
 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++;
                }
@@ -107,13 +112,13 @@ void extract_map(const char *js, jsmntok_t *t, size_t count, map_t *map) {
 
 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);
@@ -131,13 +136,17 @@ int loadmap(char *mn, map_t *map) {
                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);