X-Git-Url: http://4ch.mooo.com/gitweb/?p=16.git;a=blobdiff_plain;f=src%2Flib%2F16_map.c;h=33c27d1446fb98d81c362e15519466160c1bd331;hp=3b1d7d72ae05908ff8341ea63afe715128c6d59f;hb=def418b6ee7f06ce7229e6eae5dbfbe44e9b9e82;hpb=0fafba3a1ca84e8bb74c995cc42e397131f2bcd6 diff --git a/src/lib/16_map.c b/src/lib/16_map.c index 3b1d7d72..33c27d14 100755 --- a/src/lib/16_map.c +++ b/src/lib/16_map.c @@ -1,5 +1,5 @@ /* Project 16 Source Code~ - * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover + * Copyright (C) 2012-2019 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover * * This file is part of Project 16. * @@ -20,7 +20,12 @@ * */ +//TODO USE CA AND THIS FILE FORMAT + #include "src/lib/16_map.h" +//#define JSMN_STATIC +#include "src/lib/jsmn/jsmn.h" +#include // Ideally, preprocess json during compilation and read serialized data @@ -32,6 +37,8 @@ int jsoneq(const char *json, jsmntok_t *tok, const char *s) { return -1; } +//TODO: WORK ON THIS LIKE CRAZY! --sparky4 +//FIXME: please FIX THIS AND USE CA! --sparky4 void extract_map(const char *js, jsmntok_t *t, size_t count, map_t *map) { int i, j, k, indent=0, inner_end; char *s; @@ -46,23 +53,20 @@ void extract_map(const char *js, jsmntok_t *t, size_t count, map_t *map) { inner_end = t[i].end; k = 0; while(t[i].start < inner_end) { -#ifdef DEBUG_DUMPVARS - printf("t[%d].start=%d, %d\n", i, t[i].start, inner_end); -#endif +//#define DEBUG_DUMPVARS +//#ifdef DEBUG_DUMPVARS +// printf("t[%d].start=%d, %d\n", i, t[i].start, inner_end); +//#endif if(!objlay){ if(jsoneq(js, &(t[i]), "data") == 0) { #ifdef DEBUG_MAPDATA printf("Layer %d data: (size is %d)[\n", k, t[i+1].size); #endif map->layerdata[k].data = malloc(sizeof(byte) * t[i+1].size);//TODO: USE MM_ CA_ AND PM_ -// map->data = (map->layerdata[k].data); //for backwards compatibility for rest of code for(j = 0; j < t[i+1].size; j++) { - //map->layerdata[k][j] = (byte)atoi(js + t[i+2+j].start); map->layerdata[k].data[j] = (byte)atoi(js + t[i+2+j].start); #ifdef DEBUG_MAPDATA - //printf("[%d,%d]%d", k, j, map->MAPDATAPTK[j]); - printf("%c", map->MAPDATAPTK[j]+44); - //fprintf(stdout, "%c", map->data[j]+44); + printf("%c", map->layerdata[k].data[j]+44); #endif } i += j + 2; @@ -70,13 +74,13 @@ void extract_map(const char *js, jsmntok_t *t, size_t count, map_t *map) { puts("\n]"); #endif }else if(jsoneq(js, &(t[i]), "name") == 0) { -#ifdef DEBUG_MAPDATA +#ifdef DEBUG_MAPVARS printf("Layer %d's name: (size is %d)[\n", k, MAPLNAMESIZE); #endif - map->layerdata[k].layername = malloc(sizeof(byte) * MAPLNAMESIZE);//TODO: USE MM_ CA_ AND PM_ - strncpy(map->layerdata[k].layername, js+t[i+1].start, MAPLNAMESIZE); - if(map->layerdata[k].layername[MAPLNAMESIZE]!=0) map->layerdata[k].layername[MAPLNAMESIZE]='\0'; - if(strstr(map->layerdata[k].layername, "ob")) objlay=1; + //map->layerdata[k].layername = malloc(sizeof(byte) * MAPLNAMESIZE);//TODO: USE MM_ CA_ AND PM_ + strncpy(&(map->layerdata[k].layername), js+t[i+1].start, MAPLNAMESIZE); + if((map->layerdata[k].layername[MAPLNAMESIZE])!=0) map->layerdata[k].layername[MAPLNAMESIZE]='\0'; + if(strstr(&map->layerdata[k].layername, "ob")) objlay=1; #ifdef DEBUG_MAPDATA printf("%s", map->layerdata[k].layername); printf("\n]\n"); @@ -84,24 +88,33 @@ void extract_map(const char *js, jsmntok_t *t, size_t count, map_t *map) { k++; } }else{ //objlay - if(jsoneq(js, &(t[i]), "objects") == 0) { -#ifdef DEBUG_MAPDATA - printf("objects detected\n"); + if(jsoneq(js, &(t[i]), "objects") == 0) { +#ifdef DEBUG_OBVARS + printf("objects detected\n"); #endif -// map->layerdata[k].layername = malloc(sizeof(byte) * MAPLNAMESIZE);//TODO: USE MM_ CA_ AND PM_ -// strncpy(map->layerdata[k].layername, js+t[i+1].start, MAPLNAMESIZE);//TODO: USE MM_ CA_ AND PM_ -// if(map->layerdata[k].layername[MAPLNAMESIZE]!=0) map->layerdata[k].layername[MAPLNAMESIZE]='\0'; - }else if(jsoneq(js, &(t[i]), "name") == 0) { -#ifdef DEBUG_MAPDATA - printf("Object %d's name: (size is %d)[\n", k, MAPLNAMESIZE); - printf("'%.*s'", t[i+1].end - t[i+1].start, js+t[i+1].start); - printf("\n]\n"); +#ifdef DEBUG_OBVARS + #endif +// map->layerdata[k].layername = mAlloc(sizeof(byte) * MAPLNAMESIZE);//TODO: USE MM_ CA_ AND PM_ +// strncpy(map->layerdata[k].layername, js+t[i+1].start, MAPLNAMESIZE);//TODO: USE MM_ CA_ AND PM_ +// if(map->layerdata[k].layername[MAPLNAMESIZE]!=0) map->layerdata[k].layername[MAPLNAMESIZE]='\0'; + }else if(jsoneq(js, &(t[i]), "name") == 0) { +#ifdef DEBUG_OBVARS + printf("Object %d's name: ", k);//, MAPLNAMESIZE + printf("'%.*s'\n", t[i+1].end - t[i+1].start, js+t[i+1].start); +#endif + }else if(jsoneq(js, &(t[i]), "properties") == 0) { +#ifdef DEBUG_OBVARS + printf(" properties: %.*s\n", t[i+1].end - t[i+1].start, js+t[i+1].start); +#endif + }else if(jsoneq(js, &(t[i]), "walkable") == 0) { + printf(" walkable: %d\n", atoi(js + t[i+1].start)); } - } - i++; - } - } + + }//end objlay + i++;//next token + }//tokens + }//layers if(jsoneq(js, &(t[i]), "tilesets") == 0) { @@ -124,13 +137,13 @@ void extract_map(const char *js, jsmntok_t *t, size_t count, map_t *map) { i++; }else if(jsoneq(js, &(t[i]), "tileheight") == 0) { map->tiles->tileHeight = atoi(js + t[i+1].start); -#ifdef DEBUG_MAPVAR +#ifdef DEBUG_MAPVARS printf("Tile Height: %d\n", map->tiles->tileHeight); #endif i++; }else if(jsoneq(js, &(t[i]), "tilewidth") == 0) { map->tiles->tileWidth = atoi(js + t[i+1].start); -#ifdef DEBUG_MAPVAR +#ifdef DEBUG_MAPVARS printf("Tile Width: %d\n", map->tiles->tileWidth); #endif i++; @@ -142,14 +155,14 @@ void extract_map(const char *js, jsmntok_t *t, size_t count, map_t *map) { if (jsoneq(js, &(t[i]), "height") == 0 && indent<=1) { map->height = atoi(js + t[i+1].start); -#ifdef DEBUG_MAPVAR +#ifdef DEBUG_MAPVARS printf("Height: %d\n", map->height); #endif i++; } else if(jsoneq(js, &(t[i]), "width") == 0 && indent<=1) { map->width = atoi(js + t[i+1].start); -#ifdef DEBUG_MAPVAR +#ifdef DEBUG_MAPVARS printf("Width: %d\n", map->width); #endif i++; @@ -196,9 +209,9 @@ int newloadmap(char *mn, map_t *map) { else if(status != tokcount) { printf("Warning: used %d tok\n", status);} extract_map(js, tok, tokcount, map); - free(js); - free(tok); - fclose(fh); + free(js); //TODO: USE MM_ CA_ AND PM_ + free(tok); //TODO: USE MM_ CA_ AND PM_ + fclose(fh); //TODO: USE MM_ CA_ AND PM_ return 0; } @@ -207,7 +220,6 @@ int newloadmap(char *mn, map_t *map) { //====== -#define MAPBUFINLM (gvar->ca.camap.mapsegs) int CA_loadmap(char *mn, map_t *map, global_game_variables_t *gvar) { jsmn_parser p; @@ -221,21 +233,23 @@ int CA_loadmap(char *mn, map_t *map, global_game_variables_t *gvar) jsmn_init(&p); file_s = filesize(fh); - CA_LoadFile(mn, &MAPBUFINLM, gvar); - tokcount = jsmn_parse(&p, MAPBUFINLM, file_s, NULL, 0); - tok = malloc(tokcount*sizeof(jsmntok_t)); + CA_LoadFile(mn, MEMPTRCONV MAPSEGINLM, gvar); + tokcount = jsmn_parse(&p, (char const *)MAPSEGINLM, file_s, NULL, 0); + tok = malloc(tokcount*sizeof(jsmntok_t));//TODO: USE MM_ CA_ AND PM_ // printf("Allocated %d tokens", tokcount); jsmn_init(&p); - if((status = jsmn_parse(&p, MAPBUFINLM, file_s, tok, tokcount)) < 0) + if((status = jsmn_parse(&p, (char const *)MAPSEGINLM, 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(MAPBUFINLM, tok, tokcount, map); + extract_map((char const *)MAPSEGINLM, tok, tokcount, map); - free(tok); - fclose(fh); +// printf("freeing tok\n"); + free(tok); //TODO: USE MM_ CA_ AND PM_ +// printf("fclose fh\n"); + fclose(fh); //TODO: USE MM_ CA_ AND PM_ return 0; }