mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-01-27 19:50:51 +00:00
Created R_GetTextureNum to make sure top/bottom/midtexture texture ids are always valid in rendering code for both software and OpenGL (and also for the Solid Midtexture effect physics code)
This commit is contained in:
parent
fa8a673d3b
commit
a9cfd12e04
5 changed files with 118 additions and 119 deletions
|
@ -1558,6 +1558,7 @@ static void HWR_StoreWallRange(double startfrac, double endfrac)
|
||||||
|
|
||||||
if (gr_backsector)
|
if (gr_backsector)
|
||||||
{
|
{
|
||||||
|
INT32 gr_toptexture, gr_bottomtexture;
|
||||||
// two sided line
|
// two sided line
|
||||||
if (gr_backsector->heightsec != -1)
|
if (gr_backsector->heightsec != -1)
|
||||||
{
|
{
|
||||||
|
@ -1608,19 +1609,22 @@ static void HWR_StoreWallRange(double startfrac, double endfrac)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gr_toptexture = R_GetTextureNum(gr_sidedef->toptexture);
|
||||||
|
gr_bottomtexture = R_GetTextureNum(gr_sidedef->bottomtexture);
|
||||||
|
|
||||||
// check TOP TEXTURE
|
// check TOP TEXTURE
|
||||||
if ((
|
if ((
|
||||||
#ifdef ESLOPE
|
#ifdef ESLOPE
|
||||||
worldhighslope < worldtopslope ||
|
worldhighslope < worldtopslope ||
|
||||||
#endif
|
#endif
|
||||||
worldhigh < worldtop
|
worldhigh < worldtop
|
||||||
) && texturetranslation[gr_sidedef->toptexture])
|
) && gr_toptexture)
|
||||||
{
|
{
|
||||||
if (drawtextured)
|
if (drawtextured)
|
||||||
{
|
{
|
||||||
fixed_t texturevpegtop; // top
|
fixed_t texturevpegtop; // top
|
||||||
|
|
||||||
grTex = HWR_GetTexture(texturetranslation[gr_sidedef->toptexture]);
|
grTex = HWR_GetTexture(gr_toptexture);
|
||||||
|
|
||||||
// PEGGING
|
// PEGGING
|
||||||
if (gr_linedef->flags & ML_DONTPEGTOP)
|
if (gr_linedef->flags & ML_DONTPEGTOP)
|
||||||
|
@ -1638,7 +1642,7 @@ static void HWR_StoreWallRange(double startfrac, double endfrac)
|
||||||
texturevpegtop += gr_sidedef->rowoffset;
|
texturevpegtop += gr_sidedef->rowoffset;
|
||||||
|
|
||||||
// This is so that it doesn't overflow and screw up the wall, it doesn't need to go higher than the texture's height anyway
|
// This is so that it doesn't overflow and screw up the wall, it doesn't need to go higher than the texture's height anyway
|
||||||
texturevpegtop %= SHORT(textures[texturetranslation[gr_sidedef->toptexture]]->height)<<FRACBITS;
|
texturevpegtop %= SHORT(textures[gr_toptexture]->height)<<FRACBITS;
|
||||||
|
|
||||||
wallVerts[3].t = wallVerts[2].t = texturevpegtop * grTex->scaleY;
|
wallVerts[3].t = wallVerts[2].t = texturevpegtop * grTex->scaleY;
|
||||||
wallVerts[0].t = wallVerts[1].t = (texturevpegtop + gr_frontsector->ceilingheight - gr_backsector->ceilingheight) * grTex->scaleY;
|
wallVerts[0].t = wallVerts[1].t = (texturevpegtop + gr_frontsector->ceilingheight - gr_backsector->ceilingheight) * grTex->scaleY;
|
||||||
|
@ -1683,9 +1687,9 @@ static void HWR_StoreWallRange(double startfrac, double endfrac)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (gr_frontsector->numlights)
|
if (gr_frontsector->numlights)
|
||||||
HWR_SplitWall(gr_frontsector, wallVerts, texturetranslation[gr_sidedef->toptexture], &Surf, FF_CUTSOLIDS);
|
HWR_SplitWall(gr_frontsector, wallVerts, gr_toptexture, &Surf, FF_CUTSOLIDS);
|
||||||
else if (grTex->mipmap.flags & TF_TRANSPARENT)
|
else if (grTex->mipmap.flags & TF_TRANSPARENT)
|
||||||
HWR_AddTransparentWall(wallVerts, &Surf, texturetranslation[gr_sidedef->toptexture], PF_Environment, false, lightnum, colormap);
|
HWR_AddTransparentWall(wallVerts, &Surf, gr_toptexture, PF_Environment, false, lightnum, colormap);
|
||||||
else
|
else
|
||||||
HWR_ProjectWall(wallVerts, &Surf, PF_Masked, lightnum, colormap);
|
HWR_ProjectWall(wallVerts, &Surf, PF_Masked, lightnum, colormap);
|
||||||
}
|
}
|
||||||
|
@ -1695,13 +1699,13 @@ static void HWR_StoreWallRange(double startfrac, double endfrac)
|
||||||
#ifdef ESLOPE
|
#ifdef ESLOPE
|
||||||
worldlowslope > worldbottomslope ||
|
worldlowslope > worldbottomslope ||
|
||||||
#endif
|
#endif
|
||||||
worldlow > worldbottom) && texturetranslation[gr_sidedef->bottomtexture]) //only if VISIBLE!!!
|
worldlow > worldbottom) && gr_bottomtexture) //only if VISIBLE!!!
|
||||||
{
|
{
|
||||||
if (drawtextured)
|
if (drawtextured)
|
||||||
{
|
{
|
||||||
fixed_t texturevpegbottom = 0; // bottom
|
fixed_t texturevpegbottom = 0; // bottom
|
||||||
|
|
||||||
grTex = HWR_GetTexture(texturetranslation[gr_sidedef->bottomtexture]);
|
grTex = HWR_GetTexture(gr_bottomtexture);
|
||||||
|
|
||||||
// PEGGING
|
// PEGGING
|
||||||
#ifdef ESLOPE
|
#ifdef ESLOPE
|
||||||
|
@ -1721,7 +1725,7 @@ static void HWR_StoreWallRange(double startfrac, double endfrac)
|
||||||
texturevpegbottom += gr_sidedef->rowoffset;
|
texturevpegbottom += gr_sidedef->rowoffset;
|
||||||
|
|
||||||
// This is so that it doesn't overflow and screw up the wall, it doesn't need to go higher than the texture's height anyway
|
// This is so that it doesn't overflow and screw up the wall, it doesn't need to go higher than the texture's height anyway
|
||||||
texturevpegbottom %= SHORT(textures[texturetranslation[gr_sidedef->bottomtexture]]->height)<<FRACBITS;
|
texturevpegbottom %= SHORT(textures[gr_bottomtexture]->height)<<FRACBITS;
|
||||||
|
|
||||||
wallVerts[3].t = wallVerts[2].t = texturevpegbottom * grTex->scaleY;
|
wallVerts[3].t = wallVerts[2].t = texturevpegbottom * grTex->scaleY;
|
||||||
wallVerts[0].t = wallVerts[1].t = (texturevpegbottom + gr_backsector->floorheight - gr_frontsector->floorheight) * grTex->scaleY;
|
wallVerts[0].t = wallVerts[1].t = (texturevpegbottom + gr_backsector->floorheight - gr_frontsector->floorheight) * grTex->scaleY;
|
||||||
|
@ -1766,13 +1770,13 @@ static void HWR_StoreWallRange(double startfrac, double endfrac)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (gr_frontsector->numlights)
|
if (gr_frontsector->numlights)
|
||||||
HWR_SplitWall(gr_frontsector, wallVerts, texturetranslation[gr_sidedef->bottomtexture], &Surf, FF_CUTSOLIDS);
|
HWR_SplitWall(gr_frontsector, wallVerts, gr_bottomtexture, &Surf, FF_CUTSOLIDS);
|
||||||
else if (grTex->mipmap.flags & TF_TRANSPARENT)
|
else if (grTex->mipmap.flags & TF_TRANSPARENT)
|
||||||
HWR_AddTransparentWall(wallVerts, &Surf, texturetranslation[gr_sidedef->bottomtexture], PF_Environment, false, lightnum, colormap);
|
HWR_AddTransparentWall(wallVerts, &Surf, gr_bottomtexture, PF_Environment, false, lightnum, colormap);
|
||||||
else
|
else
|
||||||
HWR_ProjectWall(wallVerts, &Surf, PF_Masked, lightnum, colormap);
|
HWR_ProjectWall(wallVerts, &Surf, PF_Masked, lightnum, colormap);
|
||||||
}
|
}
|
||||||
gr_midtexture = texturetranslation[gr_sidedef->midtexture];
|
gr_midtexture = R_GetTextureNum(gr_sidedef->midtexture);
|
||||||
if (gr_midtexture)
|
if (gr_midtexture)
|
||||||
{
|
{
|
||||||
FBITFIELD blendmode;
|
FBITFIELD blendmode;
|
||||||
|
@ -2134,7 +2138,7 @@ static void HWR_StoreWallRange(double startfrac, double endfrac)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Single sided line... Deal only with the middletexture (if one exists)
|
// Single sided line... Deal only with the middletexture (if one exists)
|
||||||
gr_midtexture = texturetranslation[gr_sidedef->midtexture];
|
gr_midtexture = R_GetTextureNum(gr_sidedef->midtexture);
|
||||||
if (gr_midtexture)
|
if (gr_midtexture)
|
||||||
{
|
{
|
||||||
if (drawtextured)
|
if (drawtextured)
|
||||||
|
@ -2232,13 +2236,13 @@ static void HWR_StoreWallRange(double startfrac, double endfrac)
|
||||||
if (*rover->topheight < lowcut || *rover->bottomheight > highcut)
|
if (*rover->topheight < lowcut || *rover->bottomheight > highcut)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
texnum = texturetranslation[sides[rover->master->sidenum[0]].midtexture];
|
texnum = R_GetTextureNum(sides[rover->master->sidenum[0]].midtexture);
|
||||||
|
|
||||||
if (rover->master->flags & ML_TFERLINE)
|
if (rover->master->flags & ML_TFERLINE)
|
||||||
{
|
{
|
||||||
size_t linenum = gr_curline->linedef-gr_backsector->lines[0];
|
size_t linenum = gr_curline->linedef-gr_backsector->lines[0];
|
||||||
newline = rover->master->frontsector->lines[0] + linenum;
|
newline = rover->master->frontsector->lines[0] + linenum;
|
||||||
texnum = texturetranslation[sides[newline->sidenum[0]].midtexture];
|
texnum = R_GetTextureNum(sides[newline->sidenum[0]].midtexture);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ESLOPE
|
#ifdef ESLOPE
|
||||||
|
@ -2366,13 +2370,13 @@ static void HWR_StoreWallRange(double startfrac, double endfrac)
|
||||||
if (*rover->topheight < lowcut || *rover->bottomheight > highcut)
|
if (*rover->topheight < lowcut || *rover->bottomheight > highcut)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
texnum = texturetranslation[sides[rover->master->sidenum[0]].midtexture];
|
texnum = R_GetTextureNum(sides[rover->master->sidenum[0]].midtexture);
|
||||||
|
|
||||||
if (rover->master->flags & ML_TFERLINE)
|
if (rover->master->flags & ML_TFERLINE)
|
||||||
{
|
{
|
||||||
size_t linenum = gr_curline->linedef-gr_backsector->lines[0];
|
size_t linenum = gr_curline->linedef-gr_backsector->lines[0];
|
||||||
newline = rover->master->frontsector->lines[0] + linenum;
|
newline = rover->master->frontsector->lines[0] + linenum;
|
||||||
texnum = texturetranslation[sides[newline->sidenum[0]].midtexture];
|
texnum = R_GetTextureNum(sides[newline->sidenum[0]].midtexture);
|
||||||
}
|
}
|
||||||
#ifdef ESLOPE //backsides
|
#ifdef ESLOPE //backsides
|
||||||
h = *rover->t_slope ? P_GetZAt(*rover->t_slope, v1x, v1y) : *rover->topheight;
|
h = *rover->t_slope ? P_GetZAt(*rover->t_slope, v1x, v1y) : *rover->topheight;
|
||||||
|
|
|
@ -572,51 +572,54 @@ void P_LineOpening(line_t *linedef, mobj_t *mobj)
|
||||||
side_t *side = &sides[linedef->sidenum[0]];
|
side_t *side = &sides[linedef->sidenum[0]];
|
||||||
fixed_t textop, texbottom, texheight;
|
fixed_t textop, texbottom, texheight;
|
||||||
fixed_t texmid, delta1, delta2;
|
fixed_t texmid, delta1, delta2;
|
||||||
|
INT32 texnum = R_GetTextureNum(side->midtexture); // make sure the texture is actually valid
|
||||||
|
|
||||||
// Get the midtexture's height
|
if (texnum) {
|
||||||
texheight = textures[texturetranslation[side->midtexture]]->height << FRACBITS;
|
// Get the midtexture's height
|
||||||
|
texheight = textures[texnum]->height << FRACBITS;
|
||||||
|
|
||||||
// Set texbottom and textop to the Z coordinates of the texture's boundaries
|
// Set texbottom and textop to the Z coordinates of the texture's boundaries
|
||||||
#if 0 // #ifdef POLYOBJECTS
|
#if 0 // #ifdef POLYOBJECTS
|
||||||
// don't remove this code unless solid midtextures
|
// don't remove this code unless solid midtextures
|
||||||
// on non-solid polyobjects should NEVER happen in the future
|
// on non-solid polyobjects should NEVER happen in the future
|
||||||
if (linedef->polyobj && (linedef->polyobj->flags & POF_TESTHEIGHT)) {
|
if (linedef->polyobj && (linedef->polyobj->flags & POF_TESTHEIGHT)) {
|
||||||
if (linedef->flags & ML_EFFECT5 && !side->repeatcnt) { // "infinite" repeat
|
if (linedef->flags & ML_EFFECT5 && !side->repeatcnt) { // "infinite" repeat
|
||||||
texbottom = back->floorheight + side->rowoffset;
|
texbottom = back->floorheight + side->rowoffset;
|
||||||
textop = back->ceilingheight + side->rowoffset;
|
textop = back->ceilingheight + side->rowoffset;
|
||||||
} else if (!!(linedef->flags & ML_DONTPEGBOTTOM) ^ !!(linedef->flags & ML_EFFECT3)) {
|
} else if (!!(linedef->flags & ML_DONTPEGBOTTOM) ^ !!(linedef->flags & ML_EFFECT3)) {
|
||||||
texbottom = back->floorheight + side->rowoffset;
|
texbottom = back->floorheight + side->rowoffset;
|
||||||
textop = texbottom + texheight*(side->repeatcnt+1);
|
textop = texbottom + texheight*(side->repeatcnt+1);
|
||||||
} else {
|
} else {
|
||||||
textop = back->ceilingheight + side->rowoffset;
|
textop = back->ceilingheight + side->rowoffset;
|
||||||
texbottom = textop - texheight*(side->repeatcnt+1);
|
texbottom = textop - texheight*(side->repeatcnt+1);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (linedef->flags & ML_EFFECT5 && !side->repeatcnt) { // "infinite" repeat
|
if (linedef->flags & ML_EFFECT5 && !side->repeatcnt) { // "infinite" repeat
|
||||||
texbottom = openbottom + side->rowoffset;
|
texbottom = openbottom + side->rowoffset;
|
||||||
textop = opentop + side->rowoffset;
|
textop = opentop + side->rowoffset;
|
||||||
} else if (!!(linedef->flags & ML_DONTPEGBOTTOM) ^ !!(linedef->flags & ML_EFFECT3)) {
|
} else if (!!(linedef->flags & ML_DONTPEGBOTTOM) ^ !!(linedef->flags & ML_EFFECT3)) {
|
||||||
texbottom = openbottom + side->rowoffset;
|
texbottom = openbottom + side->rowoffset;
|
||||||
textop = texbottom + texheight*(side->repeatcnt+1);
|
textop = texbottom + texheight*(side->repeatcnt+1);
|
||||||
} else {
|
} else {
|
||||||
textop = opentop + side->rowoffset;
|
textop = opentop + side->rowoffset;
|
||||||
texbottom = textop - texheight*(side->repeatcnt+1);
|
texbottom = textop - texheight*(side->repeatcnt+1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
texmid = texbottom+(textop-texbottom)/2;
|
texmid = texbottom+(textop-texbottom)/2;
|
||||||
|
|
||||||
delta1 = abs(mobj->z - texmid);
|
delta1 = abs(mobj->z - texmid);
|
||||||
delta2 = abs(thingtop - texmid);
|
delta2 = abs(thingtop - texmid);
|
||||||
|
|
||||||
if (delta1 > delta2) { // Below
|
if (delta1 > delta2) { // Below
|
||||||
if (opentop > texbottom)
|
if (opentop > texbottom)
|
||||||
opentop = texbottom;
|
opentop = texbottom;
|
||||||
} else { // Above
|
} else { // Above
|
||||||
if (openbottom < textop)
|
if (openbottom < textop)
|
||||||
openbottom = textop;
|
openbottom = textop;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
14
src/r_data.c
14
src/r_data.c
|
@ -303,6 +303,20 @@ done:
|
||||||
return blocktex;
|
return blocktex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// R_GetTextureNum
|
||||||
|
//
|
||||||
|
// Returns the actual texture id that we should use.
|
||||||
|
// This can either be texnum, the current frame for texnum's anim (if animated),
|
||||||
|
// or 0 if not valid.
|
||||||
|
//
|
||||||
|
INT32 R_GetTextureNum(INT32 texnum)
|
||||||
|
{
|
||||||
|
if (texnum < 0 || texnum >= numtextures)
|
||||||
|
return 0;
|
||||||
|
return texturetranslation[texnum];
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// R_GetColumn
|
// R_GetColumn
|
||||||
//
|
//
|
||||||
|
|
|
@ -65,6 +65,8 @@ extern CV_PossibleValue_t Color_cons_t[];
|
||||||
void R_LoadTextures(void);
|
void R_LoadTextures(void);
|
||||||
void R_FlushTextureCache(void);
|
void R_FlushTextureCache(void);
|
||||||
|
|
||||||
|
INT32 R_GetTextureNum(INT32 texnum);
|
||||||
|
|
||||||
// Retrieve column data for span blitting.
|
// Retrieve column data for span blitting.
|
||||||
UINT8 *R_GetColumn(fixed_t tex, INT32 col);
|
UINT8 *R_GetColumn(fixed_t tex, INT32 col);
|
||||||
|
|
||||||
|
|
108
src/r_segs.c
108
src/r_segs.c
|
@ -300,7 +300,7 @@ void R_RenderMaskedSegRange(drawseg_t *ds, INT32 x1, INT32 x2)
|
||||||
curline = ds->curline;
|
curline = ds->curline;
|
||||||
frontsector = curline->frontsector;
|
frontsector = curline->frontsector;
|
||||||
backsector = curline->backsector;
|
backsector = curline->backsector;
|
||||||
texnum = texturetranslation[curline->sidedef->midtexture];
|
texnum = R_GetTextureNum(curline->sidedef->midtexture);
|
||||||
windowbottom = windowtop = sprbotscreen = INT32_MAX;
|
windowbottom = windowtop = sprbotscreen = INT32_MAX;
|
||||||
|
|
||||||
// hack translucent linedef types (900-909 for transtables 1-9)
|
// hack translucent linedef types (900-909 for transtables 1-9)
|
||||||
|
@ -740,7 +740,7 @@ void R_RenderThickSideRange(drawseg_t *ds, INT32 x1, INT32 x2, ffloor_t *pfloor)
|
||||||
curline = ds->curline;
|
curline = ds->curline;
|
||||||
backsector = pfloor->target;
|
backsector = pfloor->target;
|
||||||
frontsector = curline->frontsector == pfloor->target ? curline->backsector : curline->frontsector;
|
frontsector = curline->frontsector == pfloor->target ? curline->backsector : curline->frontsector;
|
||||||
texnum = texturetranslation[sides[pfloor->master->sidenum[0]].midtexture];
|
texnum = R_GetTextureNum(sides[pfloor->master->sidenum[0]].midtexture);
|
||||||
|
|
||||||
colfunc = wallcolfunc;
|
colfunc = wallcolfunc;
|
||||||
|
|
||||||
|
@ -748,7 +748,7 @@ void R_RenderThickSideRange(drawseg_t *ds, INT32 x1, INT32 x2, ffloor_t *pfloor)
|
||||||
{
|
{
|
||||||
size_t linenum = curline->linedef-backsector->lines[0];
|
size_t linenum = curline->linedef-backsector->lines[0];
|
||||||
newline = pfloor->master->frontsector->lines[0] + linenum;
|
newline = pfloor->master->frontsector->lines[0] + linenum;
|
||||||
texnum = texturetranslation[sides[newline->sidenum[0]].midtexture];
|
texnum = R_GetTextureNum(sides[newline->sidenum[0]].midtexture);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pfloor->flags & FF_TRANSLUCENT)
|
if (pfloor->flags & FF_TRANSLUCENT)
|
||||||
|
@ -1878,14 +1878,16 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||||
|
|
||||||
if (!backsector)
|
if (!backsector)
|
||||||
{
|
{
|
||||||
|
fixed_t texheight;
|
||||||
// single sided line
|
// single sided line
|
||||||
midtexture = texturetranslation[sidedef->midtexture];
|
midtexture = R_GetTextureNum(sidedef->midtexture);
|
||||||
|
texheight = textureheight[midtexture];
|
||||||
// a single sided line is terminal, so it must mark ends
|
// a single sided line is terminal, so it must mark ends
|
||||||
markfloor = markceiling = true;
|
markfloor = markceiling = true;
|
||||||
#ifdef ESLOPE
|
#ifdef ESLOPE
|
||||||
if (linedef->flags & ML_EFFECT2) {
|
if (linedef->flags & ML_EFFECT2) {
|
||||||
if (linedef->flags & ML_DONTPEGBOTTOM)
|
if (linedef->flags & ML_DONTPEGBOTTOM)
|
||||||
rw_midtexturemid = frontsector->floorheight + textureheight[sidedef->midtexture] - viewz;
|
rw_midtexturemid = frontsector->floorheight + texheight - viewz;
|
||||||
else
|
else
|
||||||
rw_midtexturemid = frontsector->ceilingheight - viewz;
|
rw_midtexturemid = frontsector->ceilingheight - viewz;
|
||||||
}
|
}
|
||||||
|
@ -1894,10 +1896,10 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||||
if (linedef->flags & ML_DONTPEGBOTTOM)
|
if (linedef->flags & ML_DONTPEGBOTTOM)
|
||||||
{
|
{
|
||||||
#ifdef ESLOPE
|
#ifdef ESLOPE
|
||||||
rw_midtexturemid = worldbottom + textureheight[sidedef->midtexture];
|
rw_midtexturemid = worldbottom + texheight;
|
||||||
rw_midtextureslide = floorfrontslide;
|
rw_midtextureslide = floorfrontslide;
|
||||||
#else
|
#else
|
||||||
vtop = frontsector->floorheight + textureheight[sidedef->midtexture];
|
vtop = frontsector->floorheight + texheight;
|
||||||
// bottom of texture at bottom
|
// bottom of texture at bottom
|
||||||
rw_midtexturemid = vtop - viewz;
|
rw_midtexturemid = vtop - viewz;
|
||||||
#endif
|
#endif
|
||||||
|
@ -2129,76 +2131,50 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
fixed_t texheight;
|
||||||
// top texture
|
// top texture
|
||||||
if ((linedef->flags & (ML_DONTPEGTOP) && (linedef->flags & ML_DONTPEGBOTTOM))
|
if ((linedef->flags & (ML_DONTPEGTOP) && (linedef->flags & ML_DONTPEGBOTTOM))
|
||||||
&& linedef->sidenum[1] != 0xffff)
|
&& linedef->sidenum[1] != 0xffff)
|
||||||
{
|
{
|
||||||
// Special case... use offsets from 2nd side but only if it has a texture.
|
// Special case... use offsets from 2nd side but only if it has a texture.
|
||||||
side_t *def = &sides[linedef->sidenum[1]];
|
side_t *def = &sides[linedef->sidenum[1]];
|
||||||
toptexture = texturetranslation[def->toptexture];
|
toptexture = R_GetTextureNum(def->toptexture);
|
||||||
|
|
||||||
if (!toptexture) //Second side has no texture, use the first side's instead.
|
if (!toptexture) //Second side has no texture, use the first side's instead.
|
||||||
toptexture = texturetranslation[sidedef->toptexture];
|
toptexture = R_GetTextureNum(sidedef->toptexture);
|
||||||
|
texheight = textureheight[toptexture];
|
||||||
#ifdef ESLOPE
|
|
||||||
if (!(linedef->flags & ML_EFFECT1)) { // Ignore slopes for lower/upper textures unless flag is checked
|
|
||||||
if (linedef->flags & ML_DONTPEGTOP)
|
|
||||||
rw_toptexturemid = frontsector->ceilingheight - viewz;
|
|
||||||
else
|
|
||||||
rw_toptexturemid = backsector->ceilingheight - viewz;
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
if (linedef->flags & ML_DONTPEGTOP)
|
|
||||||
{
|
|
||||||
// top of texture at top
|
|
||||||
rw_toptexturemid = worldtop;
|
|
||||||
#ifdef ESLOPE
|
|
||||||
rw_toptextureslide = ceilingfrontslide;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#ifdef ESLOPE
|
|
||||||
rw_toptexturemid = worldhigh + textureheight[def->toptexture];
|
|
||||||
rw_toptextureslide = ceilingbackslide;
|
|
||||||
#else
|
|
||||||
vtop = backsector->ceilingheight + textureheight[def->toptexture];
|
|
||||||
// bottom of texture
|
|
||||||
rw_toptexturemid = vtop - viewz;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
toptexture = texturetranslation[sidedef->toptexture];
|
toptexture = R_GetTextureNum(sidedef->toptexture);
|
||||||
|
texheight = textureheight[toptexture];
|
||||||
|
}
|
||||||
#ifdef ESLOPE
|
#ifdef ESLOPE
|
||||||
if (!(linedef->flags & ML_EFFECT1)) { // Ignore slopes for lower/upper textures unless flag is checked
|
if (!(linedef->flags & ML_EFFECT1)) { // Ignore slopes for lower/upper textures unless flag is checked
|
||||||
if (linedef->flags & ML_DONTPEGTOP)
|
|
||||||
rw_toptexturemid = frontsector->ceilingheight - viewz;
|
|
||||||
else
|
|
||||||
rw_toptexturemid = backsector->ceilingheight - viewz;
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
if (linedef->flags & ML_DONTPEGTOP)
|
if (linedef->flags & ML_DONTPEGTOP)
|
||||||
{
|
rw_toptexturemid = frontsector->ceilingheight - viewz;
|
||||||
// top of texture at top
|
|
||||||
rw_toptexturemid = worldtop;
|
|
||||||
#ifdef ESLOPE
|
|
||||||
rw_toptextureslide = ceilingfrontslide;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
rw_toptexturemid = backsector->ceilingheight - viewz;
|
||||||
#ifdef ESLOPE
|
} else
|
||||||
rw_toptexturemid = worldhigh + textureheight[sidedef->toptexture];
|
#endif
|
||||||
rw_toptextureslide = ceilingbackslide;
|
if (linedef->flags & ML_DONTPEGTOP)
|
||||||
#else
|
{
|
||||||
vtop = backsector->ceilingheight + textureheight[sidedef->toptexture];
|
// top of texture at top
|
||||||
// bottom of texture
|
rw_toptexturemid = worldtop;
|
||||||
rw_toptexturemid = vtop - viewz;
|
#ifdef ESLOPE
|
||||||
|
rw_toptextureslide = ceilingfrontslide;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#ifdef ESLOPE
|
||||||
|
rw_toptexturemid = worldhigh + texheight;
|
||||||
|
rw_toptextureslide = ceilingbackslide;
|
||||||
|
#else
|
||||||
|
vtop = backsector->ceilingheight + texheight;
|
||||||
|
// bottom of texture
|
||||||
|
rw_toptexturemid = vtop - viewz;
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// check BOTTOM TEXTURE
|
// check BOTTOM TEXTURE
|
||||||
|
@ -2209,7 +2185,7 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||||
) //seulement si VISIBLE!!!
|
) //seulement si VISIBLE!!!
|
||||||
{
|
{
|
||||||
// bottom texture
|
// bottom texture
|
||||||
bottomtexture = texturetranslation[sidedef->bottomtexture];
|
bottomtexture = R_GetTextureNum(sidedef->bottomtexture);
|
||||||
|
|
||||||
#ifdef ESLOPE
|
#ifdef ESLOPE
|
||||||
if (!(linedef->flags & ML_EFFECT1)) { // Ignore slopes for lower/upper textures unless flag is checked
|
if (!(linedef->flags & ML_EFFECT1)) { // Ignore slopes for lower/upper textures unless flag is checked
|
||||||
|
@ -2494,7 +2470,7 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||||
|
|
||||||
ds_p->numthicksides = numthicksides = i;
|
ds_p->numthicksides = numthicksides = i;
|
||||||
}
|
}
|
||||||
if (sidedef->midtexture)
|
if (sidedef->midtexture > 0 && sidedef->midtexture < numtextures)
|
||||||
{
|
{
|
||||||
// masked midtexture
|
// masked midtexture
|
||||||
if (!ds_p->thicksidecol)
|
if (!ds_p->thicksidecol)
|
||||||
|
@ -3101,12 +3077,12 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||||
if (maskedtexture && !(ds_p->silhouette & SIL_TOP))
|
if (maskedtexture && !(ds_p->silhouette & SIL_TOP))
|
||||||
{
|
{
|
||||||
ds_p->silhouette |= SIL_TOP;
|
ds_p->silhouette |= SIL_TOP;
|
||||||
ds_p->tsilheight = sidedef->midtexture ? INT32_MIN: INT32_MAX;
|
ds_p->tsilheight = (sidedef->midtexture > 0 && sidedef->midtexture < numtextures) ? INT32_MIN: INT32_MAX;
|
||||||
}
|
}
|
||||||
if (maskedtexture && !(ds_p->silhouette & SIL_BOTTOM))
|
if (maskedtexture && !(ds_p->silhouette & SIL_BOTTOM))
|
||||||
{
|
{
|
||||||
ds_p->silhouette |= SIL_BOTTOM;
|
ds_p->silhouette |= SIL_BOTTOM;
|
||||||
ds_p->bsilheight = sidedef->midtexture ? INT32_MAX: INT32_MIN;
|
ds_p->bsilheight = (sidedef->midtexture > 0 && sidedef->midtexture < numtextures) ? INT32_MAX: INT32_MIN;
|
||||||
}
|
}
|
||||||
ds_p++;
|
ds_p++;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue