// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman // Ken Silverman's official web site: "http://www.advsys.net/ken" // See the included license file "BUILDLIC.TXT" for license info. // This file has been modified from Ken Silverman's original release #include #include #include #include #include #include #define MAXWADS 4096 static long artversion, localtilestart, localtileend; static long fil1, fil2; static char wadata[MAXWADS][8]; static long wadplc[MAXWADS], wadlen[MAXWADS], numwads; static long xoffses[1024], ylookup[256], picanm[MAXWADS]; static short tilesizx[MAXWADS], tilesizy[MAXWADS]; static char pal[768], palookup[8192]; static char screen[65536], tempbuf[131072]; static long frameplace; #pragma aux setvmode =\ "int 0x10",\ parm [eax]\ #pragma aux drawpixel =\ "mov byte ptr [edi], al",\ parm [edi][eax]\ #pragma aux clearbuf =\ "rep stosd",\ parm [edi][ecx][eax]\ #pragma aux copybuf =\ "rep movsd",\ parm [esi][edi][ecx]\ main(short argc, char **argv) { long i, j, endoffile; char wadfile[80]; printf("Wad2Art! Copyright 1995 by Ken Silverman\n"); if (argc != 2) { printf("Command line parameters: Wad2Art [Doom IWAD file]\n"); printf(" Creates TILES000.ART, PALETTE.DAT, and NAMES.H in current directory.\n"); printf(" Ex: wad2art c:\\doom\\doom.wad\n"); exit(0); } strcpy(wadfile,argv[1]); if (strchr(wadfile,'.') == 0) strcat(wadfile,".wad"); if ((fil1 = open(wadfile,O_BINARY|O_RDWR,S_IREAD)) == -1) { printf("Wad not found\n"); exit(0); } if ((fil2 = open("tiles000.art",O_BINARY|O_TRUNC|O_CREAT|O_WRONLY,S_IWRITE)) == -1) { printf("Can't open art file\n"); exit(0); } frameplace = FP_OFF(screen); j = 0; for(i=0;i<256;i++) { ylookup[i] = j; j += 320; } printf("Loading wad header...\n"); loadwadheader(); setvmode(0x13); lseek(fil2,16+(numwads<<3),SEEK_SET); for(i=0;i>= 2; outp(0x3c9,pal[i]); } i = 0; while (strnicmp(wadata[i],"COLORMAP",8) != 0) i++; lseek(fil1,wadplc[i],SEEK_SET); read(fil1,palookup,8192); if ((fil3 = open("palette.dat",O_BINARY|O_TRUNC|O_CREAT|O_WRONLY,S_IWRITE)) == -1) { printf("Cannot save palette.dat\n"); exit(0); } write(fil3,pal,768); danumshades = 32; write(fil3,&danumshades,2); write(fil3,palookup,8192); close(fil3); } saveart (short tilenum, short xlen, short ylen) { long i, x, p, pend; pend = ylookup[ylen]; copybuf(frameplace,0xa0000,pend>>2); tilesizx[tilenum] = xlen; tilesizy[tilenum] = ylen; i = 0; for(x=0;x= 10000) buffer[j++] = ((i/10000)%10)+48; if (i >= 1000) buffer[j++] = ((i/1000)%10)+48; if (i >= 100) buffer[j++] = ((i/100)%10)+48; if (i >= 10) buffer[j++] = ((i/10)%10)+48; buffer[j++] = (i%10)+48; buffer[j++] = 13; buffer[j++] = 10; write(fil3,&buffer[0],j); } close(fil3); return; } showart (char *part) { char yoff, ylen; short xsiz, ysiz; long i, j, z, zx, zzx, x, y, p, pend, junk, curplc; curplc = -1; if ((strnicmp(part,"L_START",7) == 0) || (strnicmp(part,"S_START",7) == 0) || (strnicmp(part,"P_START",7) == 0)) { if (strnicmp(part,"L_START",7) == 0) z = 462; else { z = 0; while (strnicmp(wadata[z],part,7) != 0) z++; z++; } do { if (strnicmp(wadata[z],"P1_START",8) == 0) z++; if (strnicmp(wadata[z],"P1_END",6) == 0) z++; if (strnicmp(wadata[z],"P2_START",8) == 0) z++; if (strnicmp(wadata[z],"S_START",7) == 0) break; if (strnicmp(wadata[z],"S_END",5) == 0) break; if (strnicmp(wadata[z],"P_END",5) == 0) break; if (curplc != wadplc[z]) lseek(fil1,wadplc[z],SEEK_SET); read(fil1,&tempbuf[0],wadlen[z]); curplc = wadplc[z]+wadlen[z]; xsiz = (long)tempbuf[0]+(((long)tempbuf[1])<<8); ysiz = (long)tempbuf[2]+(((long)tempbuf[3])<<8); if ((xsiz <= 0) || (ysiz <= 0) || (xsiz > 320) || (ysiz > 200)) goto skipit; i = 8; for(zx=0;zx>2,0xffffffff); for(x=0;x