From 01cf93080e129238086d56292fac79a2f27b3f76 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Wed, 3 Oct 2012 14:36:35 -0400 Subject: [PATCH] committing Faultcheck's verion with formatting changes: - trailing spaces removed - 8 spaces reverted to tab - some manual 'bad' indents kept/fixed to show patterns --- s6.asm | 30 ++-- slab6.c | 404 +++++++++++++++++++++++++++++++++++++++++++++++------- slab6.ico | Bin 2238 -> 57260 bytes 3 files changed, 374 insertions(+), 60 deletions(-) diff --git a/s6.asm b/s6.asm index da3c65b..99a774d 100644 --- a/s6.asm +++ b/s6.asm @@ -12,7 +12,7 @@ else .XMM ;To compile with Microsoft assembler: >ml /c /coff s6.asm endif -BUFZSIZ EQU 256 +BUFZSIZ EQU 512 EXTRN _ptfaces16 : dword EXTRN _lcol : dword @@ -22,15 +22,19 @@ ASSUME cs:CODE,ds:CODE PUBLIC _s6_asm_dep_unlock ;Data Execution Prevention unlock (works under XP2 SP2) _s6_asm_dep_unlock: - EXTRN __imp__VirtualProtect@16:NEAR - sub esp, 4 - push esp - push 40h ;PAGE_EXECUTE_READWRITE - push offset _dep_protect_end - offset _s6_asm_dep_unlock - push offset _s6_asm_dep_unlock - call dword ptr __imp__VirtualProtect@16 - add esp, 4 - ret + EXTRN __imp__VirtualProtect@16:NEAR + sub esp, 4 + push dword ptr esp + push 40h + + mov eax, _dep_protect_end + sub eax, _s6_asm_dep_unlock + push eax + + push offset _s6_asm_dep_unlock + call dword ptr __imp__VirtualProtect@16 + add esp, 4 + ret PUBLIC _caddasm, _ztabasm, _qsum0, _qsum1, _qbplbpp, _kv6frameplace, _kv6bpl ALIGN 16 @@ -45,9 +49,9 @@ _kv6bpl dd 0 ALIGN 16 PUBLIC _drawboundcubeasm ;Visual C entry point (pass by stack) _drawboundcubeasm: - mov edx, [esp+4] - mov eax, [esp+8] - mov ecx, [esp+12] + mov edx, DWORD PTR [esp+4] + mov eax, DWORD PTR [esp+8] + mov ecx, DWORD PTR [esp+12] PUBLIC drawboundcubeasm_ ;Watcom C entry point (pass by register) drawboundcubeasm_: push ebx ;Visual C's _cdecl requires EBX,ESI,EDI,EBP to be preserved diff --git a/slab6.c b/slab6.c index 4e92931..90407fb 100644 --- a/slab6.c +++ b/slab6.c @@ -1,8 +1,8 @@ #if 0 //To compile, type: "nmake slab6.c" -slab6.exe: slab6.obj winmain.obj s6.obj slab6.res - link slab6.obj winmain.obj s6.obj slab6.res ddraw.lib dinput.lib dxguid.lib user32.lib gdi32.lib comdlg32.lib /nologo /opt:nowin98 -slab6.obj: slab6.c sysmain.h ; cl /c /J /TP slab6.c /Ox /G6Fy /MD /nologo -winmain.obj: winmain.cpp ; cl /c /J /TP winmain.cpp /Ox /G6Fy /MD /nologo /DNOSOUND +spadeslab.exe: slab6.obj winmain.obj s6.obj slab6.res + link slab6.obj winmain.obj s6.obj slab6.res ddraw.lib dinput.lib dxguid.lib user32.lib gdi32.lib comdlg32.lib /nologo +slab6.obj: slab6.c sysmain.h ; cl /c /J /TP slab6.c /Ox /MD /nologo +winmain.obj: winmain.cpp ; cl /c /J /TP winmain.cpp /Ox /MD /nologo /DNOSOUND s6.obj: s6.asm ; ml /c /coff s6.asm /nologo slab6.res: slab6.rc slab6.ico; rc -r slab6.rc !if 0 @@ -11,6 +11,7 @@ slab6.res: slab6.rc slab6.ico; rc -r slab6.rc #if 0 SLAB6.C by Ken Silverman (http://advsys.net/ken) +SPADES LAB 6 Modifications By Jeremiah Page (http://blockman2d.herokuapp.com) License for this code: * No commercial exploitation please @@ -107,18 +108,14 @@ License for this code: #define min(a,b) (((a) < (b)) ? (a) : (b)) #endif -#define MAXXDIM 2048 -#define MAXYDIM 1536 +#define MAXXDIM 4096 +#define MAXYDIM 4096 #define PI 3.141592653589793 -#define MAXXSIZ 256 //Default values -#define MAXYSIZ 256 +#define MAXXSIZ 512 //Default values +#define MAXYSIZ 512 #define BUFZSIZ 256 //(BUFZSIZ&7) MUST == 0 #define LIMZSIZ 255 //Limited to 255 by: char ylen[?][?] -//#define MAXXSIZ 1420 //REGFILE.VOX values: -//#define MAXYSIZ 1024 -//#define BUFZSIZ 8 -//#define LIMZSIZ 8 #define MAXVOXMIPS 5 #define CULLBYDIR 0 //1:renderboundcube faster, but thin parts get omitted @@ -149,12 +146,14 @@ float hx, hy, hz, hds, sphk1, sphk2, sphk3; long ihx, ihy; long ylookup[MAXYDIM+1], lastx[MAXYDIM], slcol[3][256], pag; char whitecol, graycol, blackcol, backgroundcol = 0; -long backgroundcolrgb18 = 0x18618; +long backgroundcolrgb18 = 0x3366; long curcol = -1, curgamminterp = 1000; static char curfilnam[MAX_PATH]; extern long ddrawuseemulation; +long cbuffer[MAXXSIZ][MAXYSIZ][LIMZSIZ]; + //KVX loading variables char fipalette[768]; long numbytes, xsiz, ysiz, zsiz, xstart[MAXXSIZ+1]; @@ -169,12 +168,12 @@ static char palgroup[256], palookup[64][256]; //SLAB6 voxel file format: (siz = 4+24+xsiz*ysiz+numvoxs*2) //SLAB6 voxel memory format: (siz = 24+4+xsiz*2+xsiz*ysiz+numvoxs*4) -#define MAXVOXS 1048576 //numvoxs = 993756 for regfile.vox! -typedef struct { char z, col, vis, dir; } voxtype; +#define MAXVOXS 66846720 //numvoxs = 993756 for regfile.vox! +typedef struct { long z, col, vis, dir; } voxtype; float xpiv, ypiv, zpiv; long numvoxs; //sum of xlens and number of surface voxels unsigned short xlen[MAXXSIZ]; -char ylen[MAXXSIZ][MAXYSIZ]; +unsigned short ylen[MAXXSIZ][MAXYSIZ]; voxtype voxdata[MAXVOXS]; //2D MODE variables: @@ -203,7 +202,7 @@ float sx[8], sy[8], spherad2 = .75; long ptface[6][4] = {0,2,6,4, 5,7,3,1, 5,4,6,7, 0,1,3,2, 0,4,5,1, 2,3,7,6}; char pow2char[8] = {1,2,4,8,16,32,64,128}; char pow2mask[8] = {254,253,251,247,239,223,191,127}; -long drawmode = 2, reflectmode = -1, drawoption = 0; +long drawmode = 3, reflectmode = -1, drawoption = 0; point3d ztab[BUFZSIZ], cadd[8]; //UNION OF FACES CUBE RENDERING TABLES: @@ -353,7 +352,7 @@ void initfsqrtasm () long i, j; float f, s1, s2; - s1 = 16777216 / sqrt(1<= 0) { for(i=767;i>=0;i--) dapal[i] = (char)(((unsigned char)dapal[i])>>2); } } +long loadvxl (char *filnam) +{ + FILE *fil; + long i, x, ch, y, j, z; + unsigned char *v, *vbuf, *cbuf; + voxtype *vptr, *vend; + + zsiz = (long)64; + xsiz = (long)512; + ysiz = (long)512; + + // LOAD VXL FILE + + fil = fopen(filnam,"rb"); if (!fil) return(-1); + i = filelength(_fileno(fil))-ftell(fil); + vbuf = (unsigned char *)malloc(i); if (!vbuf) { fclose(fil); return(-1); } + fread(vbuf,i,1,fil); + fclose(fil); + + xpiv = ((float)xsiz)*0.24; + ypiv = ((float)ysiz)*0.5; + zpiv = ((float)zsiz)*0.5; + + // CLEAR ENTIRE BOARD SINCE OTHER FORMATS ARE LARGER AND MAY ALREADY BE LOADED + for(x=0;x>6)&0x3f000)+((ch>>4)&0xfc0)+((ch>>2)&0x3f); + cbuffer[x][y][z] = ch; + if( palnum<256 && closestcol[ch] == 255 ) + { + // GENERATE PALLETE FROM COLORS IN VXL VOXEL COLUMNS + fipalette[palnum*3+0] = ((ch>>12)&63); + fipalette[palnum*3+1] = ((ch>>6)&63); + fipalette[palnum*3+2] = ( ch &63); + closestcol[ch] = palnum; + palnum++; + } + + } + len_bottom = top_color_end - top_color_start + 1; + + if (number_4byte_chunks == 0) + { + v += 4 * (len_bottom + 1); + break; + } + + len_top = (number_4byte_chunks-1) - len_bottom; + v += v[0]*4; + bottom_color_end = v[3]; // aka air start + bottom_color_start = bottom_color_end - len_top; + + for(z=bottom_color_start; z < bottom_color_end; ++z) + { + setzrange0(j,z,z); + ch = *color++; + ch = ((ch>>6)&0x3f000)+((ch>>4)&0xfc0)+((ch>>2)&0x3f); + cbuffer[x][y][z] = ch; + if( palnum<256 && closestcol[ch] == 255 ) + { + // GENERATE PALLETE FROM COLORS IN VXL VOXEL COLUMNS + fipalette[palnum*3+0] = ((ch>>12)&63); + fipalette[palnum*3+1] = ((ch>>6)&63); + fipalette[palnum*3+2] = ( ch &63); + closestcol[ch] = palnum; + palnum++; + } + } + } + } + } + + for(x=0;xz; + i = ((long)vptr->col)*3; + map[x][y][z] = (char) 1; + long a = 255&0xFF; + long r = (long)fipalette[i]*3.5; + long g = (long)fipalette[i+1]*3.5; + long b = (long)fipalette[i+2]*3.5; + long argb = (((int)a&0xFF) << 24) | (((int)r&0xFF) << 16) | (((int)g&0xFF) << 8) | (((int)b&0xFF) << 0); + color[x][y][z] = argb; + } + } + } +} +int is_surface(int x, int y, int z) +{ + if (map[x][y][z]==0) return 0; + if (x > 0 && map[x-1][y][z]==0) return 1; + if (x+1 < 512 && map[x+1][y][z]==0) return 1; + if (y > 0 && map[x][y-1][z]==0) return 1; + if (y+1 < 512 && map[x][y+1][z]==0) return 1; + if (z > 0 && map[x][y][z-1]==0) return 1; + if (z+1 < 64 && map[x][y][z+1]==0) return 1; + return 0; +} +void write_color(FILE *f, long color) +{ + fputc((char) (color >> 0)&0xFF, f); + fputc((char) (color >> 8)&0xFF, f); + fputc((char) (color >> 16)&0xFF, f); + fputc((char) (color >> 24)&0xFF, f); +} +long savevxl (const char *filnam) +{ + buffer_vxl_map(); + + int i,j,k; + int MAP_Z = 64; + FILE *f = fopen(filnam, "wb"); + for (j=0; j < 512; ++j) + { + for (i=0; i < 512; ++i) + { + int written_colors = 0; + int backpatch_address = -1; + int previous_bottom_colors = 0; + int current_bottom_colors = 0; + int middle_start = 0; + k = 0; + + while (k < MAP_Z) + { + int z; + + int air_start; + int top_colors_start; + int top_colors_end; + int bottom_colors_start; + int bottom_colors_end; + int top_colors_len; + int bottom_colors_len; + int colors; + + air_start = k; + while (k < MAP_Z && !map[i][j][k]) + ++k; + + top_colors_start = k; + while (k < MAP_Z && is_surface(i,j,k)) + ++k; + + top_colors_end = k; + + while (k < MAP_Z && map[i][j][k] && !is_surface(i,j,k)) + ++k; + + bottom_colors_start = k; + + z = k; + while (z < MAP_Z && is_surface(i,j,z)) + ++z; + + if (z == MAP_Z || 0) { } + else + { + while (is_surface(i,j,k)) { ++k; } + } + + bottom_colors_end = k; + top_colors_len = top_colors_end - top_colors_start; + bottom_colors_len = bottom_colors_end - bottom_colors_start; + colors = top_colors_len + bottom_colors_len; + + if (k == MAP_Z) + fputc(0,f); + else + fputc(colors+1, f); + fputc(top_colors_start, f); + fputc(top_colors_end-1, f); + fputc(air_start, f); + + for (z=0; z < top_colors_len; ++z) + write_color(f, color[i][j][top_colors_start + z]); + for (z=0; z < bottom_colors_len; ++z) + write_color(f, color[i][j][bottom_colors_start + z]); + } + } + } + fclose(f); + return(1); +} long loadkv6 (char *filnam) { long i, j, x, y, z; @@ -3338,7 +3636,6 @@ long loadkvx (char *filnam) voxdata[numvoxs].z = z; voxdata[numvoxs].col = fgetc(fil); voxdata[numvoxs].vis = getvis(x,y,z); - //voxdata[numvoxs].dir = getvdir(x,y,z); ylen[x][y]++; numvoxs++; } } while (i); @@ -3631,9 +3928,8 @@ static char getkenslogocol (long x, long y, long z) return(58); } #endif -static char paldef[24] = - {63,63,63,48,48,63,63,48,32,63,32,24,63,24,24,32,32,63,24,63,24,63,32,63}; -static loadefaultkvx () +static int paldef[24] = {63,63,63,48,48,63,63,48,32,63,32,24,63,24,24,32,32,63,24,63,24,63,32,63}; +static int loadefaultkvx () { char ch, davis; long i, j, x, y, z; @@ -3749,7 +4045,7 @@ long convert2palette (char *filnam, long convertcol) { FILE *fil; long i, x, y, z, nv; - char newpal[768], convbuf[256]; + char newpal[768], convbuf[256*256*256]; i = strlen(filnam); if (i < 4) return(0); if (!(fil = fopen(filnam,"rb"))) return(0); @@ -3780,7 +4076,7 @@ long convert2palette (char *filnam, long convertcol) { //convert all colors from fipalette[768] to newpal[768] here! initclosestcolorfast(newpal); - for(i=0;i<256;i++) + for(i=0;i<256*256*256;i++) { x = fipalette[i*3 ]; y = fipalette[i*3+1]; @@ -5584,12 +5880,14 @@ static long mymenufunc (WPARAM wparam, LPARAM lparam) ddflip2gdi(); if (MessageBox(ghwnd,"Start new model?",prognam,MB_OKCANCEL) == IDOK) { - loadefaultkvx(); + //loadefaultkvx(); + loadvxl("newmap.vxl"); + mymenufunc(RESETZOOMANDPOS,0); readklock(&dtotclk); - strcpy(curfilnam,"default.kv6"); + strcpy(curfilnam,"newmap.vxl"); initpal(fipalette); resetwindowborders(); calcalldir(); @@ -5615,15 +5913,16 @@ static long mymenufunc (WPARAM wparam, LPARAM lparam) updatepalette(0,16); } - if (v = (char *)loadfileselect("LOAD MODEL...","*.KV6;*.KVX;*.VOX\0*.kv6;*.kvx;*.vox\0\0","KV6")) + if (v = (char *)loadfileselect("LOAD MODEL...","*.KV6;*.KVX;*.VOX;*.VXL\0*.kv6;*.kvx;*.vox;*.vxl\0\0","KV6")) { ch = v[strlen(v)-3]; i = -1; - if ((ch == 'K') || (ch == 'k')) + if ((ch == 'V') || (ch == 'v')) i = loadvxl(v); + else if ((ch == 'K') || (ch == 'k')) { ch = v[strlen(v)-1]; if ((ch == 'X') || (ch == 'x')) i = loadkvx(v); - else if (ch == '6') i = loadkv6(v); - } else i = loadvox(v); + else if (ch == '6') i = loadkv6(v); + } else i = loadvox(v); if (i >= 0) { @@ -5666,7 +5965,7 @@ static long mymenufunc (WPARAM wparam, LPARAM lparam) updatepalette(0,16); } - while (v = (char *)savefileselect("SAVE MODEL...","*.KV6\0*.kv6\0*.KVX\0*.kvx\0*.VOX\0*.vox\0\0","KV6")) + while (v = (char *)savefileselect("SAVE MODEL...","*.KV6\0*.kv6\0*.KVX\0*.kvx\0*.VOX\0*.vox\0*.VXL\0*.vxl\0\0","KV6")) { strcpy(curfilnam,v); @@ -5674,8 +5973,9 @@ static long mymenufunc (WPARAM wparam, LPARAM lparam) if (curfilnam[i] == '.') j = i+1; if (j <= 1) { sprintf(message,"Invalid filename."); break; } - if (!stricmp(&curfilnam[j],"vox")) { savevox(curfilnam); i = 1; } + if (!stricmp(&curfilnam[j],"vox")) { savevox(curfilnam); i = 1; } else if (!stricmp(&curfilnam[j],"kv6")) { savekv6(curfilnam); i = 1; } + else if (!stricmp(&curfilnam[j],"vxl")) { savevxl(curfilnam); i = 1; } else if (!stricmp(&curfilnam[j],"kvx")) { switch(getkvxtype((char *)prognam,"Choose .KVX save format:\nSelect 1 mip for smaller files\nSelect 5 mips for Build Engine\n")) @@ -6257,8 +6557,8 @@ static void mymenuinit () sptr = menuadd(sptr,"&Render method" ,MF_POPUP|MF_END ,0); sptr = menuadd(sptr,"Dots" ,0 ,RENDERMETHOD+0); sptr = menuadd(sptr,"Ortho cubes" ,0 ,RENDERMETHOD+1); - sptr = menuadd(sptr,"Cubes (default)" ,MF_CHECKED ,RENDERMETHOD+2); - sptr = menuadd(sptr,"Bounded cubes" ,0 ,RENDERMETHOD+3); + sptr = menuadd(sptr,"Cubes" ,0 ,RENDERMETHOD+2); + sptr = menuadd(sptr,"Bounded cubes (default)",MF_CHECKED ,RENDERMETHOD+3); sptr = menuadd(sptr,"Spheres" ,0 ,RENDERMETHOD+4); sptr = menuadd(sptr,"Bounded spheres" ,MF_END ,RENDERMETHOD+5); sptr = menuadd(sptr,"&Options" ,MF_POPUP ,0); @@ -6339,11 +6639,11 @@ long initapp (long argc, char **argv) GetCurrentDirectory(sizeof(tbuf),tbuf); relpathinit(tbuf); - prognam = "SLAB6 by Ken Silverman"; + prognam = "SPADES LAB 6 Mod By Jeremiah Page (SLAB6 By Ken Silverman)"; peekwindowproc = mypeekwindowproc; - xres = 800; yres = 600; colbits = 8; fullscreen = 0; argfilindex = -1; + xres = 900; yres = 600; colbits = 8; fullscreen = 0; argfilindex = -1; for(i=argc-1;i>0;i--) { if (argv[i][0] != '/') { argfilindex = i; continue; } @@ -6351,7 +6651,7 @@ long initapp (long argc, char **argv) if (!stricmp(&argv[i][1],"full")) { fullscreen = 1; continue; } if (argv[i][1] == '?') { - MessageBox(ghwnd,"SLAB6 [.KVX, .VOX, or .KV6 file] [/XDIMxYDIM] [/win]\n(options can be any order)\nExamples:\n" + MessageBox(ghwnd,"SPADES LAB 6 Mod By Jeremiah Page [.KVX, .VXL, .VOX, or .KV6 file] [/XDIMxYDIM] [/win]\n(options can be any order)\nExamples:\n" ">slab6 duke\n" ">slab6 worm /512x384\n" ">slab6 /600x400 wtc /win",prognam,MB_OK); @@ -6422,20 +6722,22 @@ long initapp (long argc, char **argv) if (!k) { tbuf[j ] = '.'; tbuf[j+4] = 0; - tbuf[j+1] = 'k'; tbuf[j+2] = 'v'; tbuf[j+3] = 'x'; i = loadkvx(tbuf); + tbuf[j+1] = 'k'; tbuf[j+2] = 'v'; tbuf[j+3] = 'x'; i = loadkvx(tbuf); if (!i) { tbuf[j+1] = 'v'; tbuf[j+2] = 'o'; tbuf[j+3] = 'x'; i = loadvox(tbuf); } if (!i) { tbuf[j+1] = 'k'; tbuf[j+2] = 'v'; tbuf[j+3] = '6'; i = loadkv6(tbuf); } + if (!i) { tbuf[j+1] = 'v'; tbuf[j+2] = 'x'; tbuf[j+3] = 'l'; i = loadvxl(tbuf); } } else if (!stricmp(&curfilnam[k],".kvx")) { i = loadkvx(curfilnam); } else if (!stricmp(&curfilnam[k],".vox")) { i = loadvox(curfilnam); } else if (!stricmp(&curfilnam[k],".kv6")) { i = loadkv6(curfilnam); } + else if (!stricmp(&curfilnam[k],".vxl")) { i = loadvxl(curfilnam); } if (!i) { MessageBox(ghwnd,"File not found!",prognam,MB_OK); return(-1); } } - strcpy(curfilnam,tbuf); + initpal(fipalette); ipos.x = 0; ipos.y = 0; ipos.z = -128; @@ -6458,6 +6760,12 @@ long initapp (long argc, char **argv) //if (!fullscreen) setacquire(0,1); + mymenufunc(RENDERMETHOD+3,1); + mymenufunc(NORMALSHADING,0); + + loadvxl("newmap.vxl"); + strcpy(curfilnam,tbuf); + return(0); } @@ -6689,7 +6997,8 @@ void doframe () d = frameval[0]; for(j=AVERAGEFRAMES-1;j>0;j--) d = max(d,frameval[j]); averagefps = ((averagefps*3.0+d)*.25); - print6x8(gdd.x-68,0,closestcol[262143],-1L,"%7.1f FPS",averagefps); + print6x8(gdd.x-120,3,closestcol[262143],-1L,"%d VOXES",numvoxs); + print6x8(gdd.x-250,3,closestcol[262143],-1L,"%7.1f FPS",averagefps); a1 = a2 = a3 = 0; if ((!(bstatus&1)) || (inawindow >= 0)) @@ -7308,12 +7617,13 @@ skipdd:; if (cptr = (char *)myfileselect_input()) { ch = cptr[strlen(cptr)-3]; i = -1; - if ((ch == 'K') || (ch == 'k')) + if ((ch == 'V') || (ch == 'v')) i = loadvxl(cptr); + else if ((ch == 'K') || (ch == 'k')) { ch = cptr[strlen(cptr)-1]; if ((ch == 'X') || (ch == 'x')) i = loadkvx(cptr); - else if (ch == '6') i = loadkv6(cptr); - } else i = loadvox(cptr); + else if (ch == '6') i = loadkv6(cptr); + } else i = loadvox(cptr); if (i >= 0) { diff --git a/slab6.ico b/slab6.ico index 5cfbb5aa4e5b332d9a27cd00837b7363e8a17a37..2a78a14ac8e3a46e7ca101ce2aa3be39d912b468 100644 GIT binary patch literal 57260 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