// "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. //These changes are from version 5 to version 6 //Remember that this is backwards from what this program does! // //Added wall[].pal, sprite[].pal //Added sprite[].clipdist //Expanded sprite[].cstat to a short //Added sprite[].xoffset, sprite[].yoffset //Removed wall[].nextsector2, wall[].nextwall2 //Renamed wall[].nextsector1 to just wall[].nextsector //Renamed wall[].nextwall1 to just wall[].nextwall //Scrapped numextras and extratype structure - Don't confuse this with // sector[].extra, wall[].extra, sprite[].extra which ARE in map version 6. #include #include #include #ifdef PLATFORM_DOS #include #include #include #include #include "dos_compat.h" #else #include #include #include #include "unix_compat.h" #endif #define NEWMAPVERSION 5 #define MAXMENUFILES 1024 #define MAXSECTORS 1024 #define MAXWALLS 4096 #define MAXSPRITES 4096 #define MAXSTATUS 1024 #define MAXTILES 4096 static char menuname[MAXMENUFILES][32]; static long menunamecnt; #ifdef PLATFORM_DOS #pragma pack(push,1); #endif typedef struct { short unsigned int wallptr, wallnum; short ceilingpicnum, floorpicnum; short ceilingheinum, floorheinum; long ceilingz, floorz; signed char ceilingshade, floorshade; char ceilingxpanning, floorxpanning; char ceilingypanning, floorypanning; char ceilingstat, floorstat; char ceilingpal, floorpal; char visibility; short lotag, hitag; short extra; } newsectortype; typedef struct { long x, y; short point2; short picnum, overpicnum; signed char shade; short cstat; unsigned char xrepeat, yrepeat, xpanning, ypanning; short nextsector1, nextwall1; short nextsector2, nextwall2; short lotag, hitag; short extra; } newwalltype; typedef struct { long x, y, z; char cstat; signed char shade; unsigned char xrepeat, yrepeat; short picnum, ang, xvel, yvel, zvel, owner; short sectnum, statnum; short lotag, hitag; short extra; } newspritetype; typedef struct { unsigned short wallptr, wallnum; short ceilingpicnum, floorpicnum; short ceilingheinum, floorheinum; long ceilingz, floorz; signed char ceilingshade, floorshade; char ceilingxpanning, floorxpanning; char ceilingypanning, floorypanning; char ceilingstat, floorstat; char ceilingpal, floorpal; char visibility; short lotag, hitag, extra; } sectortype; typedef struct { long x, y; short point2, nextsector, nextwall; short picnum, overpicnum; signed char shade; char pal; short cstat; unsigned char xrepeat, yrepeat, xpanning, ypanning; short lotag, hitag, extra; } walltype; typedef struct { long x, y, z; short cstat; signed char shade; char pal, clipdist; unsigned char xrepeat, yrepeat; signed char xoffset, yoffset; short picnum, ang, xvel, yvel, zvel, owner; short sectnum, statnum; short lotag, hitag, extra; } spritetype; #ifdef PLATFORM_DOS #pragma pack(pop); #endif //************************************************************************** static sectortype sector[MAXSECTORS]; static walltype wall[MAXWALLS]; static spritetype sprite[MAXSPRITES]; static newsectortype newsector[MAXSECTORS]; static newwalltype newwall[MAXWALLS]; static newspritetype newsprite[MAXSPRITES]; static long posx, posy, posz, mapversion; static short ang, cursectnum, numsectors, numwalls, numsprites; // Function definitions void convmap(char *filename); int loadoldboard(char *filename); int savenewboard(char *filename); int getfilenames(char *kind); void sortfilenames(void); int main(int argc, char **argv) { long i; if (argc != 2) { printf("BACKMAP%d [filespec] by Ken Silverman\n",NEWMAPVERSION); printf("This BACKMAP%d.EXE converts map version %d to map version %d\n",NEWMAPVERSION,NEWMAPVERSION+1,NEWMAPVERSION); exit(0); } menunamecnt = 0; getfilenames(argv[1]); sortfilenames(); if (menunamecnt == 0) { printf("BACKMAP%d [filespec] by Ken Silverman\n",NEWMAPVERSION); printf("This BACKMAP%d.EXE converts map version %d to map version %d\n",NEWMAPVERSION,NEWMAPVERSION+1,NEWMAPVERSION); printf("File not found\n"); exit(0); } printf("Converting map version %d to map version %d\n",NEWMAPVERSION+1,NEWMAPVERSION); for(i=0;i 0)) if ((fileinfo.name[0] != '.') || (fileinfo.name[1] != 0)) { if (menunamecnt < MAXMENUFILES) { strcpy(menuname[menunamecnt],fileinfo.name); menuname[menunamecnt][16] = type; menunamecnt++; } //else // printmessage("Too many files! (max=MAXMENUFILES)"); } } while (_dos_findnext(&fileinfo) == 0); return(0); } void sortfilenames(void) { char sortbuffer[32]; long i, j, k; for(i=1;i