if(jsoneq(js, &(t[i]), "image") == 0) {\r
map->MAPTILESPTK = malloc(sizeof(tiles_t));\r
s = remove_ext((char *)js+t[i+1].start, '.', '/');\r
- strcpy(map->MAPTILESPTK->imgname, s);\r
+ strcpy(map->MAPTILESPTK->tileset.imgname, s);\r
//And move to vrs, probably\r
// bp = bitmapLoadPcx("data/ed.pcx");\r
// map->MAPTILESPTK->btdata = &bp;\r
word offset;\r
} bitmap_t;\r
\r
+//from 16_sprit.h\r
+#ifdef __WATCOMC__\r
+typedef struct sprite\r
+{\r
+ // VRS container from which we will extract animation and image data\r
+ struct vrs_container *spritesheet;\r
+ // Container for a vrl sprite\r
+ struct vrl_container *sprite_vrl_cont;\r
+ // Current sprite id\r
+ int curr_spri_id;\r
+ // Index of a current sprite in an animation sequence\r
+ int curr_anim_spri;\r
+ // Current animation sequence\r
+ struct vrs_animation_list_entry_t *curr_anim_list;\r
+ // Index of current animation in relevant VRS offsets table\r
+ int curr_anim;\r
+ // Delay in time units untill we should change sprite\r
+ int delay;\r
+ // Position of sprite on screen\r
+ int x, y;\r
+} sprite_t;\r
+#endif\r
+\r
typedef struct {\r
- byte far **data;\r
- word ntiles; /* the number of tiles */\r
- word twidth; /* width of the tiles */\r
- word theight; /* height of the tiles */\r
- byte *palette; /* palette for the tile set */\r
+ //byte far **data;\r
+//#ifdef __WATCOMC__\r
+ //sprite_t *spri;\r
+//#endif\r
+ bitmap_t far *data; // actual tileset info\r
+//in the bitmap_t\r
+// byte *palette; // palette for the tile set\r
+ word ntiles; // the number of tiles\r
+ word twidth; // width of the tiles\r
+ word theight; // height of the tiles\r
+ byte imgname[8]; // image filename of tileset\r
} tileset_t;\r
\r
+//not currently using\r
typedef struct {\r
byte far *plane[4]; // 4 planes of image data\r
word width; // width of the image (spread across 4 planes)\r
byte *palette;\r
} planar_buf_t;\r
\r
-//TODO: 16_mm and 16_ca must handle this\r
+//tile properties\r
typedef struct {\r
- bitmap_t far *data; //old\r
- //planar_buf_t far *data; //old\r
+ //bitmap_t far *btdata; //old\r
+ tileset_t tileset; //new\r
word tileHeight, tileWidth;\r
- unsigned int rows, cols;\r
-// #ifdef __DEBUG__\r
-// boolean debug_text; //show the value of the tile! wwww\r
-// byte *debug_data;\r
-// #endif\r
- byte imgname[8]; //image file of tileset\r
+ word rows, cols;\r
} tiles_t;\r
\r
//TODO: 16_mm and 16_ca must handle this\r
//TODO: add variables from 16_ca\r
+#define MAPLAYERS 4\r
//#define __NEWMAPTILEDATAVARS__\r
\r
#ifdef __NEWMAPTILEDATAVARS__\r
-#define MAPLAYERS 4\r
#define MAPTILESPTR layertile[0]\r
#define MAPTILESPTK layertile[k]\r
#define MAPDATAPTR layerdata[0]\r
//long planestart[3];\r
//unsigned planelength[3];\r
#ifndef __NEWMAPTILEDATAVARS__\r
- byte *data; //TODO: 16_mm and 16_ca must handle this\r
- tiles_t *tiles; //TODO: 16_mm and 16_ca must handle this\r
+ byte *data; //TODO: 16_mm and 16_ca must handle this\r
+ tiles_t *tiles; //TODO: 16_mm and 16_ca must handle this\r
#else\r
- byte * far *layerdata; //TODO: 16_mm and 16_ca must handle this\r
- tiles_t far *layertile[MAPLAYERS]; //TODO: 16_mm and 16_ca must handle this\r
+ byte far *layerdata[MAPLAYERS]; //mapindex for specific layer\r
+ tiles_t far *layertile[MAPLAYERS];\r
#endif\r
int width, height; //this has to be signed!\r
- byte name[16];\r
+ byte name[16]; //mapname/maptitle\r
} map_t;\r
\r
typedef struct{\r
sword tilemidposscreeny; /* middle tile y position */ /* needed for scroll system to work accordingly */\r
sword tileplayerposscreenx; /* player position on screen */ /* needed for scroll and map system to work accordingly */\r
sword tileplayerposscreeny; /* player position on screen */ /* needed for scroll and map system to work accordingly */\r
-} tileinfo_t;\r
+} pagetileinfo_t;\r
\r
typedef struct {\r
nibble/*word*/ id; /* the Identification number of the page~ For layering~ */\r
byte far* data; /* the data for the page */\r
- tileinfo_t ti;\r
+ pagetileinfo_t ti;\r
word dx; /* col we are viewing on virtual screen (on page[0]) */ /* off screen buffer on the left size */\r
word dy; /* row we are viewing on virtual screen (on page[0]) */ /* off screen buffer on the top size */\r
word sw; /* screen width */ /* resolution */\r
sword delta; // How much should we shift the page for smooth scrolling\r
} page_t;\r
\r
-//from 16_sprit.h\r
-#ifdef __WATCOMC__\r
-typedef struct sprite\r
-{\r
- // VRS container from which we will extract animation and image data\r
- struct vrs_container *spritesheet;\r
- // Container for a vrl sprite\r
- struct vrl_container *sprite_vrl_cont;\r
- // Current sprite id\r
- int curr_spri_id;\r
- // Index of a current sprite in an animation sequence\r
- int curr_anim_spri;\r
- // Current animation sequence\r
- struct vrs_animation_list_entry_t *curr_anim_list;\r
- // Index of current animation in relevant VRS offsets table\r
- int curr_anim;\r
- // Delay in time units untill we should change sprite\r
- int delay;\r
- // Position of sprite on screen\r
- int x, y;\r
-} sprite_t;\r
-#endif\r
-\r
//newer structs\r
typedef struct\r
{\r
\r
void VL_LoadPalFile(const char *filename, byte *palette)\r
{\r
- int fd;\r
-\r
- fd = open(filename,O_RDONLY|O_BINARY);\r
- if (fd >= 0) {\r
- word i;\r
-\r
- read(fd,palette, PAL_SIZE);\r
- close(fd);\r
-\r
- vga_palette_lseek(0);\r
- for (i=0;i < 256;i++) vga_palette_write(palette[(i*3)+0]>>2,palette[(i*3)+1]>>2,palette[(i*3)+2]>>2);\r
- }\r
+ VL_LoadPalFilewithoffset(filename, palette, 0);\r
}\r
\r
void VL_LoadPalFilewithoffset(const char *filename, byte *palette, word o)\r
read(fd,palette, PAL_SIZE);\r
close(fd);\r
\r
- vga_palette_lseek(o);\r
- for (i=o;i < 256-o;i++) vga_palette_write(palette[(i*3)+0]>>2,palette[(i*3)+1]>>2,palette[(i*3)+2]>>2);\r
+ vga_palette_lseek(1+o);\r
+ for (i=o;i < 255-o;i++) vga_palette_write(palette[(i*3)+0]>>2,palette[(i*3)+1]>>2,palette[(i*3)+2]>>2);\r
}\r
}\r
\r
modexPalSave(pal);\r
CHKCOLDBGOUT1\r
//check palette for dups\r
- for(; (*z)<PAL_SIZE; (*z)+=3)\r
+ for(; (*z)<PAL_SIZE-3; (*z)+=3)\r
{\r
CHKCOLDBGOUT2\r
//if((*z)%3==0)\r
word w=0;\r
word q=0;\r
word qq=0;\r
- static word a[PAL_SIZE]; //palette array of change values!\r
+ static word a[PAL_SIZE-3]; //palette array of change values!\r
word z=0, aq=0, aa=0, pp=0;\r
\r
//modexWaitBorder();\r
if((*i)==0)\r
{\r
memset(a, -1, sizeof(a));\r
- outp(PAL_WRITE_REG, 0); /* start at the beginning of palette */\r
+ outp(PAL_WRITE_REG, 1); /* start at the beginning of palette */\r
}\r
else if(qp==0)\r
{\r
#endif\r
outp(PAL_WRITE_REG, qq); /* start at the beginning of palette */\r
}\r
- if((*i)<PAL_SIZE && w==0)\r
+ if((*i)<PAL_SIZE-3 && w==0)\r
{\r
- for(; (*i)<PAL_SIZE; (*i)++)\r
+ for(; (*i)<PAL_SIZE-3; (*i)++)\r
{\r
//if(i%3==0 && (p[i+5]==p[i+4] && p[i+4]==p[i+3] && p[i+3]==p[i+2] && p[i+2]==p[i+1] && p[i+1]==p[i] && p[i+5]==p[i]))\r
//____ if((qp>0)&&((*i)-q)%3==0 && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) outp(PAL_DATA_REG, p[(*i)-q]); else\r
}\r
\r
//TODO: update!!\r
+/*\r
tileset_t\r
bitmapLoadPcxTiles(char *filename, word twidth, word theight) {\r
tileset_t ts;\r
bitmap_t result;\r
int i;\r
\r
- /* open the PCX file for reading */\r
+ // open the PCX file for reading\r
file = fopen(filename, "rb");\r
if(!file) {\r
printf("Could not open %s for reading.\n", filename);\r
exit(-2);\r
}\r
\r
- /* load the first part of the pcx file */\r
+ // load the first part of the pcx file\r
loadPcxStage1(file, &result);\r
\r
- /* get the number of tiles and set up the result structure */\r
+ // get the number of tiles and set up the result structure\r
ts.twidth = twidth;\r
ts.theight = theight;\r
ts.ntiles = (result.width/twidth) * (result.height/theight);\r
ts.palette = result.palette;\r
\r
- /* allocate the pixel storage for the tiles */\r
+ // allocate the pixel storage for the tiles\r
ts.data = _fmalloc(sizeof(byte*) * ts.ntiles);\r
//ts.data[0] = malloc(sizeof(byte) * ts.ntiles * twidth * theight);\r
for(i=1; i < ts.ntiles; i++) {\r
ts.data[i] = ts.data[i-1] + twidth * theight;\r
}\r
\r
- /* finish off the file */\r
+ // finish off the file\r
loadPcxPalette(file, &result);\r
\r
fclose(file);\r
\r
return ts;\r
-}\r
+}*/\r
void near\r
mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y)\r
{\r
- word rx;\r
- word ry;\r
+ word rx, ry;\r
//word textx=0, texty=0;\r
//if(i==0) i=2;\r
- if(i==0)\r
+ switch(i)\r
{\r
+ case 0:\r
//wwww\r
- modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, 1); //currently the over scan color!\r
- }\r
- else\r
- {\r
- rx = (((i-1) % ((t->data->width)/t->tileWidth)) * t->tileWidth);\r
- ry = (((i-1) / ((t->data->height)/t->tileHeight)) * t->tileHeight);\r
+ modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, 0); //currently the over scan color!\r
+ break;\r
+ case 1:\r
+ rx = (((i-1) % ((t->tileset.data->width)/t->tileWidth)) * t->tileWidth);\r
+ ry = (((i-1) / ((t->tileset.data->height)/t->tileHeight)) * t->tileHeight);\r
+// rx = (((i-1) % ((t->spri->sprite_vrl_cont->vrl_header->width)/t->tileWidth)) * t->tileWidth);\r
+// ry = (((i-1) / ((t->spri->sprite_vrl_cont->vrl_header->height)/t->tileHeight)) * t->tileHeight);\r
////0000printf("i=%d\n", i);\r
-#ifdef __DEBUG_MAP__\r
- switch(dbg_maptext)\r
- {\r
- case 0:\r
-#endif\r
#ifndef TILERENDER\r
- if(!pagenorendermap) modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, i+1);\r
+ if(!pagenorendermap) modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, i+1);\r
#else\r
- modexDrawBmpRegion (page, x, y, rx, ry, t->tileWidth, t->tileHeight, i);\r
- /* then the sprite. note modding ram ptr means we just draw to (x&3,0) */\r
- //draw_vrl1_vgax_modex(x-rx,y-ry,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));\r
- //modexDrawBmpRegion (page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));\r
+ //modexDrawBmpRegion (page, x, y, rx, ry, t->tileWidth, t->tileHeight, i);\r
+ /* then the sprite. note modding ram ptr means we just draw to (x&3,0) */\r
+ //draw_vrl1_vgax_modex(x-rx,y-ry,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));\r
+ //modexDrawBmpRegion (page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));\r
+ //drawmap here\r
#endif\r
#ifdef __DEBUG_MAP__\r
+ switch(dbg_maptext)\r
+ {\r
+ case 0:\r
+\r
break;\r
case 1:\r
- if(!pagenorendermap) modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, i);\r
sprintf(global_temp_status_text2, "%d", i);\r
- modexprint(page, x, y, 1, 1, 2, global_temp_status_text2);\r
+ modexprint(page, x+8, y+8, 1, 1, 2, global_temp_status_text2);\r
break;\r
}\r
#endif\r
+ break;\r
}\r
}\r
\r
map_t map;\r
#ifdef DUMP\r
#ifdef DUMP_MAP\r
- short i;\r
+ short i,k;\r
#endif\r
#endif\r
char *fmt = "Memory available = %u\n";\r
fprintf(stdout, "map.height= %d\n", map.height);\r
#ifdef DUMP_MAP\r
//if(map.width*map.height != 1200)\r
- for(i=0; i<(map.width*map.height); i++)\r
+ for(k=0;k<MAPLAYERS;k++)\r
{\r
- //fprintf(stdout, "%04d[%02d]", i, map.data[i]);\r
- fprintf(stdout, "%c", map.MAPDATAPTR[i]+44);\r
- if(!((i+1)%map.width)){\r
- //fprintf(stdout, "[%d]", i);\r
- fprintf(stdout, "\n"); }\r
+ for(i=0; i<(map.width*map.height); i++)\r
+ {\r
+ //fprintf(stdout, "%04d[%02d]", i, map.data[i]);\r
+ fprintf(stdout, "%c", map.MAPDATAPTR[i]+44);\r
+ if(!((i+1)%map.width)){\r
+ //fprintf(stdout, "[%d]", i);\r
+ fprintf(stdout, "\n"); }\r
+ }\r
+ fprintf(stdout, "\n");\r
+ getch();\r
}\r
- fprintf(stdout, "\n");\r
#else\r
//fprintf(stderr, "contents of the buffer\n[\n%s\n]\n", (gvar.ca.camap.mapsegs));\r
#endif\r