#
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
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)
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
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);