diff --git a/engine/draw.c b/engine/draw.c index abd8ee0..9b1b01e 100644 --- a/engine/draw.c +++ b/engine/draw.c @@ -891,10 +891,9 @@ Draw_Init =============== */ - -byte menumap[256][16]; // Used for menu backgrounds and simple colormod -byte gelmap[256]; // Unused id effect TO be used somehow. made redundant by menumap -byte remapmap[256]; // For translating an old palette to new on load +byte menumap[256][16]; // Used for menu backgrounds and simple colormod +byte gelmap[256]; // Unused id effect TO be used somehow. made redundant by menumap +byte remapmap[256]; // For translating an old palette to new on load int translate_bsp; int translate_mdl; @@ -906,9 +905,8 @@ byte coltranslate[256]; // TranslateToCustomPal - used for taking one palette t pixel_t addTable[256][256]; // Additive blending effect pixel_t mulTable[256][256]; // Multiply blending effect (for colormod) pixel_t transTable[256][256]; // Alpha blending by 33% and 66% -//pixel_t alphaTable[256][256]; // Alpha blending by row pixel_t waterTable[256][256]; // Not cached to disk - for wateralpha only (THIS IS A STUPID but only sensible way to go for this) -int smoothtable[32768][3]; // a table for smoothing out things.... :( +int smoothtable[32768][3]; // a table for smoothing out things.... :( int noisetable[512][5]; // a table for table int wootel[32][32][32]; // alternate kernel blend @@ -922,72 +920,54 @@ void InitGel (byte *palette) for (i=0 ; i<256 ; i++) { -// r = (palette[i*3]>>4); r = (palette[i*3] + palette[i*3+1] + palette[i*3+2])/(16*3); - gelmap[i] = /* 64 */ 0 + r; + gelmap[i] = 0 + r; } } -// Gamepad notes: -// AUX29 - dpad up -// AUX32 - dpad left -// AUX30 - dpad right -// AUX31 - dpad down -extern cvar_t *temp2; void InitWootel (void) { - int i; - int r; - int ordered = 0; + int i; + int r; float ay, ae; int result; int range = 32; float spread = 1024; - //float spread = temp2->value; for (i=1 ; i 512) result = 512; - //if (result < 0) result = 0; - wootel[i][r][0] = result; + for (r=0; r<32; r++) + { + ay = (RandomRange(0,spread)); + result = (float)ay; + wootel[i][r][0] = result; } } } void InitNoise (void) { - int i; - int r; + int i; + int r; float ay, ae; int result; int range = 64; float spread = 1024; - //float spread = temp2->value; for (i=1 ; i 512) result = 512; - //if (result < 0) result = 0; - noisetable[i][r] = result; - - //noisetable[i][r] = (float)(range * ay); + for (r=0; r<6; r++) + { + ay = (RandomRange(0,spread)); + result = (float)ay; + noisetable[i][r] = result; } } - for (r=0; r<6; r++){ - noisetable[0][r] = 0; //yeah.... 0 - //noisetable[64][r] = 64; //yeah...SIXTY FOUR - } + for (r=0; r<6; r++) + noisetable[0][r] = 0; } extern cvar_t *temp3; @@ -1000,34 +980,33 @@ void InitOrder (void) int result; int range = 64; float spread = 1024; - //float spread = temp2->value; for (i=1 ; ivalue; for (i=1 ; i 512) result = 512; - //if (result < 0) result = 0; - noisetable[i][r] = result; - - //noisetable[i][r] = (float)(range * ay); + result = (float)ay; + noisetable[i][r] = result; } } - for (r=0; r<6; r++){ - noisetable[0][r] = 0; //yeah.... 0 - //noisetable[64][r] = 64; //yeah...SIXTY FOUR - } + for (r=0; r<6; r++) + noisetable[0][r] = 0; } // leilei - smooth table for some 'smooth' things... like model shading @@ -1078,14 +1053,12 @@ void InitSmooth (void) float noiiz; int range = 64; InitNoise(); -// InitOrder(); -// InitSimple(); + for (i=0 ; i<32768; i+=range) { for (r=0; r 255) r = 255; - if (g > 255) g = 255; - if (b > 255) b = 255; + if (r > 255) r = 255; + if (g > 255) g = 255; + if (b > 255) b = 255; + coltranslate[i] = BestColor(r,g,b, 0, 254); - remapmap [i] = BestColor(r,g,b, 0, 256-host_fullbrights); // no fullbrights... + remapmap[i] = BestColor(r,g,b, 0, 256-host_fullbrights); // no fullbrights... } coltranslate[256] = 256; coltranslate[255] = 255; // null is null - - rmap_ready = 1; - - + rmap_ready = 1; } - - - // makes a little remap table for our new palette to use void InitRemapEGA (byte *palette) { diff --git a/include/d_iface.h b/include/d_iface.h index cd316ea..7a37b4c 100644 --- a/include/d_iface.h +++ b/include/d_iface.h @@ -173,7 +173,6 @@ void D_PolysetUpdateTables (void); // these are currently for internal use only, and should not be used by drivers extern int r_skydirect; -extern byte *r_skysource; // transparency types for D_DrawRect () #define DR_SOLID 0 @@ -210,8 +209,6 @@ extern drawsurf_t r_drawsurf; void R_DrawSurface (void); void R_DrawSurface32 (void); -void R_GenTile (msurface_t *psurf, void *pdest); - // !!! if this is changed, it must be changed in d_ifacea.h too !!! #define TURB_TEX_SIZE 64 // base turbulent texture size diff --git a/include/r_shared.h b/include/r_shared.h index f959c65..5a21f6f 100644 --- a/include/r_shared.h +++ b/include/r_shared.h @@ -141,9 +141,6 @@ extern void TransformVector (vec3_t in, vec3_t out); extern void SetUpForLineScan(fixed8_t startvertu, fixed8_t startvertv, fixed8_t endvertu, fixed8_t endvertv); -extern int r_skymade; -extern void R_MakeSky (void); - extern int ubasestep, errorterm, erroradjustup, erroradjustdown; // flags in finalvert_t.flags diff --git a/renderer/d_edge.c b/renderer/d_edge.c index 8a32b80..da67370 100644 --- a/renderer/d_edge.c +++ b/renderer/d_edge.c @@ -239,11 +239,6 @@ void D_DrawSurfaces (void) waterinsight = 0; if (s->flags & SURF_DRAWSKY) { - - if (!r_skymade) - { - R_MakeSky (); - } D_DrawSkyScans8 (s->spans); D_DrawZSpans (s->spans); diff --git a/renderer/d_sky.c b/renderer/d_sky.c index 7ab0d12..7fca97f 100644 --- a/renderer/d_sky.c +++ b/renderer/d_sky.c @@ -1,4 +1,5 @@ /* +Copyright (C) Manoel Kasimier Copyright (C) 1996-1997 Id Software, Inc. This program is free software; you can redistribute it and/or @@ -27,60 +28,38 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define SKY_SPAN_MAX (1 << SKY_SPAN_SHIFT) extern qboolean r_dowarp; +static float timespeed1, timespeed2; +extern byte *skyunderlay, *skyoverlay; + /* ================= D_Sky_uv_To_st ================= */ - -void D_Sky_uv_To_st (int u, int v, fixed16_t *s, fixed16_t *t) +void D_Sky_uv_To_st (int u, int v, fixed16_t *s, fixed16_t *t, fixed16_t *s2, fixed16_t *t2) { - float wu, wv, temp; - vec3_t end; + float wu, wv; + vec3_t end; - if (r_refdef.vrect.width >= r_refdef.vrect.height) - temp = (float)r_refdef.vrect.width; - else - temp = (float)r_refdef.vrect.height; + wu = (u - xcenter) / xscale; + wv = (ycenter - v) / yscale; - // leilei - sky fix for low detail - if(r_docrap == 1) - { - wu = 8192.0 * (float)(u-((int)vid.maxlowwidth>>1)) / temp; - wv = 8192.0 * (float)(((int)vid.maxlowheight>>1)-v) / temp; + end[0] = vpn[0] + wu*vright[0] + wv*vup[0]; + end[1] = vpn[1] + wu*vright[1] + wv*vup[1]; + end[2] = vpn[2] + wu*vright[2] + wv*vup[2]; - } - else if(r_docrap > 1) - { - wu = 8192.0 * (float)(u-((int)vid.maxwarpwidth>>1)) / temp; - wv = 8192.0 * (float)(((int)vid.maxwarpheight>>1)-v) / temp; - - } - - else if(r_dowarp) - { - wu = 8192.0 * (float)(u-((int)320>>1)) / temp; - wv = 8192.0 * (float)(((int)200>>1)-v) / temp; - - } - else - - { - wu = 8192.0 * (float)(u-((int)vid.width>>1)) / temp; - wv = 8192.0 * (float)(((int)vid.height>>1)-v) / temp; - } - - end[0] = 4096*vpn[0] + wu*vright[0] + wv*vup[0]; - end[1] = 4096*vpn[1] + wu*vright[1] + wv*vup[1]; - end[2] = 4096*vpn[2] + wu*vright[2] + wv*vup[2]; end[2] *= 3; VectorNormalize (end); - - temp = skytime*skyspeed; // TODO: add D_SetupFrame & set this there - *s = (int)((temp + 6*(SKYSIZE/2-1)*end[0]) * 0x10000); - *t = (int)((temp + 6*(SKYSIZE/2-1)*end[1]) * 0x10000); + *s = (int)((timespeed1 + 6*(SKYSIZE/2-1)*end[0]) * 0x10000); + *t = (int)((timespeed1 + 6*(SKYSIZE/2-1)*end[1]) * 0x10000); + *s2 = (int)((timespeed2 + 6*(SKYSIZE/2-1)*end[0]) * 0x10000); + *t2 = (int)((timespeed2 + 6*(SKYSIZE/2-1)*end[1]) * 0x10000); } +unsigned char D_DrawSkyPixelOpaque (unsigned char pixel1, unsigned char pixel2) +{ + return pixel2 ? pixel2 : pixel1; +} /* ================= @@ -89,25 +68,28 @@ D_DrawSkyScans8 */ void D_DrawSkyScans8 (espan_t *pspan) { - int count, spancount, u, v; - unsigned char *pdest; - fixed16_t s, t, snext, tnext, sstep, tstep; - int spancountminus1; + int count, spancount, u, v; + unsigned char *pdest; + fixed16_t s, t, snext, tnext, sstep, tstep; + int spancountminus1; - sstep = 0; // keep compiler happy - tstep = 0; // ditto + fixed16_t s2, t2, snext2, tnext2, sstep2, tstep2; + timespeed1=skytime*skyspeed;//*4; // Fightoon modification + timespeed2=timespeed1*2.0;//*-1; // Fightoon modification + sstep2 = 0; + tstep2 = 0; + + sstep = 0; // keep compiler happy + tstep = 0; // ditto do { - pdest = (unsigned char *)((byte *)d_viewbuffer + - (screenwidth * pspan->v) + pspan->u); - + pdest = (unsigned char *)((byte *)d_viewbuffer + (screenwidth * pspan->v) + pspan->u); count = pspan->count; - // calculate the initial s & t u = pspan->u; v = pspan->v; - D_Sky_uv_To_st (u, v, &s, &t); + D_Sky_uv_To_st (u, v, &s, &t, &s2, &t2); do { @@ -119,45 +101,51 @@ void D_DrawSkyScans8 (espan_t *pspan) count -= spancount; if (count) - { + { u += spancount; - // calculate s and t at far end of span, - // calculate s and t steps across span by shifting - D_Sky_uv_To_st (u, v, &snext, &tnext); - + // calculate s and t at far end of span, + // calculate s and t steps across span by shifting + D_Sky_uv_To_st (u, v, &snext, &tnext, &snext2, &tnext2); + sstep = (snext - s) >> SKY_SPAN_SHIFT; tstep = (tnext - t) >> SKY_SPAN_SHIFT; + + sstep2 = (snext2 - s2) >> SKY_SPAN_SHIFT; + tstep2 = (tnext2 - t2) >> SKY_SPAN_SHIFT; } else { - // calculate s and t at last pixel in span, - // calculate s and t steps across span by division + // calculate s and t at last pixel in span, + // calculate s and t steps across span by division spancountminus1 = (float)(spancount - 1); if (spancountminus1 > 0) { u += spancountminus1; - D_Sky_uv_To_st (u, v, &snext, &tnext); + D_Sky_uv_To_st (u, v, &snext, &tnext, &snext2, &tnext2); sstep = (snext - s) / spancountminus1; tstep = (tnext - t) / spancountminus1; + sstep2 = (snext2 - s2) / spancountminus1; + tstep2 = (tnext2 - t2) / spancountminus1; } } do { - *pdest++ = r_skysource[((t & R_SKY_TMASK) >> 8) + - ((s & R_SKY_SMASK) >> 16)]; - s += sstep; - t += tstep; - } while (--spancount > 0); - - s = snext; - t = tnext; + *pdest++ = D_DrawSkyPixelOpaque(skyunderlay[((t & R_SKY_TMASK) >> 8) + ((s & R_SKY_SMASK) >> 16)], + skyoverlay [((t2 & R_SKY_TMASK) >> 8) + ((s2 & R_SKY_SMASK) >> 16)]); + s += sstep; + t += tstep; + s2 += sstep2; + t2 += tstep2; + } while (--spancount > 0); + s = snext; + t = tnext; + s2 = snext2; + t2 = tnext2; } while (count > 0); - } while ((pspan = pspan->pnext) != NULL); } - diff --git a/renderer/r_sky.c b/renderer/r_sky.c index 1e2a470..bfd3a16 100644 --- a/renderer/r_sky.c +++ b/renderer/r_sky.c @@ -31,20 +31,10 @@ float skyspeed, skyspeed2; float skytime; byte *r_skysource; - -int r_skymade; +; int r_skydirect; // not used? - -// TODO: clean up these routines - -byte bottomsky[128*131]; -byte bottommask[128*131]; -byte newsky[128*256]; // newsky and topsky both pack in here, 128 bytes - // of newsky on the left of each scan, 128 bytes - // of topsky on the right, because the low-level - // drawers need 256-byte scan widths - +byte *skyunderlay, *skyoverlay; /* ============= @@ -55,204 +45,10 @@ A sky texture is 256*128, with the right side being a masked overlay */ void R_InitSky (texture_t *mt) { - int i, j; - byte *src; - - src = (byte *)mt + mt->offsets[0]; - - for (i=0 ; i<128 ; i++) - { - for (j=0 ; j<128 ; j++) - { - newsky[(i*256) + j + 128] = src[i*256 + j + 128]; - } - } - - for (i=0 ; i<128 ; i++) - { - for (j=0 ; j<131 ; j++) - { - if (src[i*256 + (j & 0x7F)]) - { - bottomsky[(i*131) + j] = src[i*256 + (j & 0x7F)]; - bottommask[(i*131) + j] = 0; - } - else - { - bottomsky[(i*131) + j] = 0; - bottommask[(i*131) + j] = 0xff; - } - } - } - - r_skysource = newsky; + skyoverlay = (byte *)mt + mt->offsets[0]; + skyunderlay = skyoverlay+128; } - -/* -================= -R_MakeSky -================= -*/ -void R_MakeSky (void) -{ - int x, y; - int ofs, baseofs; - int xshift, yshift; - unsigned *pnewsky; - static int xlast = -1, ylast = -1; - - xshift = skytime*skyspeed; - yshift = skytime*skyspeed; - - if ((xshift == xlast) && (yshift == ylast)) - return; - - xlast = xshift; - ylast = yshift; - - pnewsky = (unsigned *)&newsky[0]; - - for (y=0 ; yflags & SURF_DRAWTURB) - { - - if (r_pixbytes == 1) - { - R_GenTurbTile ((pixel_t *) - ((byte *)psurf->texinfo->texture + psurf->texinfo->texture->offsets[0]), pdest); - } - else - { - R_GenTurbTile16 ((pixel_t *) - ((byte *)psurf->texinfo->texture + psurf->texinfo->texture->offsets[0]), pdest); - } - } - else if (psurf->flags & SURF_DRAWSKY) - { - if (r_pixbytes == 1) - { - R_GenSkyTile (pdest); - } - else - { - R_GenSkyTile16 (pdest); - } - } - else - { - Sys_Error ("Unknown tile type"); - } -} - /* ================ R_BuildSurfaceDisplayList