From 762357f4a3dc3b6e8bf14e6e13e7df292fe2f4b7 Mon Sep 17 00:00:00 2001 From: yakui-lover Date: Tue, 6 Sep 2016 13:44:18 +0100 Subject: [PATCH] Map reading cleaned up; scroll16.c temporary excluded from gr.libs in makefile --- makefile | 5 +-- src/lib/16_map.c | 93 ++++++++++++++++++++++++++---------------------- src/lib/16_map.h | 2 +- src/maptest.c | 7 ++-- 4 files changed, 59 insertions(+), 48 deletions(-) diff --git a/makefile b/makefile index d9a1228d..7e782770 100755 --- a/makefile +++ b/makefile @@ -107,7 +107,7 @@ LIBFLAGS=$(WLIBQ) -b -n # VGMSNDOBJ = vgmSnd.$(OBJ) 16_snd.$(OBJ) 16LIBOBJS = 16_in.$(OBJ) 16_mm.$(OBJ) wcpu.$(OBJ) 16_head.$(OBJ) 16_ca.$(OBJ) 16_dbg.$(OBJ) kitten.$(OBJ) 16_hc.$(OBJ) 16_timer.$(OBJ) -GFXLIBOBJS = modex16.$(OBJ) bitmap.$(OBJ) 16text.$(OBJ) bakapee.$(OBJ) scroll16.$(OBJ) 16render.$(OBJ) 16_vrs.$(OBJ) 16_sprit.$(OBJ) +GFXLIBOBJS = modex16.$(OBJ) bitmap.$(OBJ) 16text.$(OBJ) bakapee.$(OBJ) scroll16.$(OBJ) 16render.$(OBJ) 16_vrs.$(OBJ) 16_sprit.$(OBJ) #scroll16.$(OBJ) #16planar.$(OBJ) planar.$(OBJ) DOSLIBOBJ = adlib.$(OBJ) 8254.$(OBJ) 8259.$(OBJ) dos.$(OBJ) cpu.$(OBJ) !ifeq DEBUGSERIAL 1 @@ -209,7 +209,7 @@ palettec.exe: palettec.$(OBJ) gfx.lib $(DOSLIBLIBS) palettel.exe: palettel.$(OBJ) gfx.lib $(DOSLIBLIBS) pcxtest2.exe: pcxtest2.$(OBJ) gfx.lib $(DOSLIBLIBS) #planrpcx.exe: planrpcx.$(OBJ) gfx.lib -maptest.exe: maptest.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) gfx.lib $(DOSLIBLIBS) +maptest.exe: maptest.$(OBJ) 16_map.$(OBJ) 16_head.$(OBJ) jsmn.$(OBJ) gfx.lib $(DOSLIBLIBS) fmemtest.exe: fmemtest.$(OBJ) exmmtest.exe: exmmtest.$(OBJ) $(16LIB) $(DOSLIBLIBS) vgmtest.exe: vgmtest.$(OBJ) vgmsnd.lib $(16LIB) $(DOSLIBLIBS) @@ -284,6 +284,7 @@ planar.$(OBJ): $(SRCLIB)/planar.c $(SRCLIB)/planar.h scroll16.$(OBJ): $(SRCLIB)/scroll16.c $(SRCLIB)/scroll16.h 16text.$(OBJ): $(SRCLIB)/16text.c mapread.$(OBJ): $(SRCLIB)/mapread.c $(SRCLIB)/mapread.h +16_map.$(OBJ): $(SRCLIB)/16_map.c $(SRCLIB)/16_map.h 16_timer.$(OBJ): $(SRCLIB)/16_timer.c $(SRCLIB)/16_timer.h 16_in.$(OBJ): $(SRCLIB)/16_in.c $(SRCLIB)/16_in.h 16_mm.$(OBJ): $(SRCLIB)/16_mm.c $(SRCLIB)/16_mm.h diff --git a/src/lib/16_map.c b/src/lib/16_map.c index 45c85760..8e2d65b2 100755 --- a/src/lib/16_map.c +++ b/src/lib/16_map.c @@ -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(idata = 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); diff --git a/src/lib/16_map.h b/src/lib/16_map.h index 3665a650..4a9ce9bb 100755 --- a/src/lib/16_map.h +++ b/src/lib/16_map.h @@ -41,7 +41,7 @@ typedef struct { } tiles_t; typedef struct { - byte **data; + byte * huge *data; tiles_t **tiles; int width; //this has to be signed! int height; //this has to be signed! diff --git a/src/maptest.c b/src/maptest.c index cba6d07f..b77b5e55 100755 --- a/src/maptest.c +++ b/src/maptest.c @@ -20,10 +20,10 @@ * */ //TODO: ADD MEMORY MANAGER! WWWW -#include "src/lib/mapread.h" +#include "src/lib/16_map.h" #define DUMP -//#define DUMP_MAP +#define DUMP_MAP void main(int argc, char *argv[]) @@ -44,9 +44,10 @@ main(int argc, char *argv[]) fprintf(stdout, "map.width= %d\n", map.width); fprintf(stdout, "map.height= %d\n", map.height); #ifdef DUMP_MAP + if(map.width*map.height != 1200) exit(-3); for(i=0; i<(map.width*map.height); i++) { - fprintf(stdout, "%04d[%02d]", i, map.data[i]); + fprintf(stdout, "%04d[%02d]", i, map.data[0][i]); if(i && !(i%map.width)) fprintf(stdout, "\n"); } fprintf(stdout, "\n"); -- 2.39.2