From 8fa9aa26275e71b32cd92065c7ba6d80c7fd1b17 Mon Sep 17 00:00:00 2001 From: "Eevee (Alex Munroe)" Date: Sat, 6 Jun 2015 18:08:18 -0700 Subject: [PATCH 1/2] Use the correct sidedef's middle scaling when drawing 3D floors. This wants `curline->sidedef`, which is the 3D sidedef currently being drawn. `sidedef` appears to be the last regular sidedef that happened to be drawn? The perils of globals. --- src/r_segs.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/r_segs.cpp b/src/r_segs.cpp index cf00abc45..bfa4fdee4 100644 --- a/src/r_segs.cpp +++ b/src/r_segs.cpp @@ -557,8 +557,8 @@ void R_RenderFakeWall(drawseg_t *ds, int x1, int x2, F3DFloor *rover) MaskedSWall = (fixed_t *)(openings + ds->swall) - ds->x1; // find positioning - xscale = FixedMul(rw_pic->xScale, sidedef->GetTextureXScale(side_t::mid)); - yscale = FixedMul(rw_pic->yScale, sidedef->GetTextureYScale(side_t::mid)); + xscale = FixedMul(rw_pic->xScale, curline->sidedef->GetTextureXScale(side_t::mid)); + yscale = FixedMul(rw_pic->yScale, curline->sidedef->GetTextureYScale(side_t::mid)); // encapsulate the lifetime of rowoffset fixed_t rowoffset = curline->sidedef->GetTextureYOffset(side_t::mid) + rover->master->sidedef[0]->GetTextureYOffset(side_t::mid); dc_texturemid = rover->model->GetPlaneTexZ(sector_t::ceiling); From 15b97c14093d80563f4773d17ea00e86b7b13ad0 Mon Sep 17 00:00:00 2001 From: "Eevee (Alex Munroe)" Date: Sat, 6 Jun 2015 18:26:13 -0700 Subject: [PATCH 2/2] Fix scaling of 3D floor wall textures. The scale factors are now taken from the same part of the sidedef that provides the texture. --- src/r_segs.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/r_segs.cpp b/src/r_segs.cpp index bfa4fdee4..7bcfec13a 100644 --- a/src/r_segs.cpp +++ b/src/r_segs.cpp @@ -557,8 +557,25 @@ void R_RenderFakeWall(drawseg_t *ds, int x1, int x2, F3DFloor *rover) MaskedSWall = (fixed_t *)(openings + ds->swall) - ds->x1; // find positioning - xscale = FixedMul(rw_pic->xScale, curline->sidedef->GetTextureXScale(side_t::mid)); - yscale = FixedMul(rw_pic->yScale, curline->sidedef->GetTextureYScale(side_t::mid)); + side_t *scaledside; + side_t::ETexpart scaledpart; + if (rover->flags & FF_UPPERTEXTURE) + { + scaledside = curline->sidedef; + scaledpart = side_t::top; + } + else if (rover->flags & FF_LOWERTEXTURE) + { + scaledside = curline->sidedef; + scaledpart = side_t::bottom; + } + else + { + scaledside = rover->master->sidedef[0]; + scaledpart = side_t::mid; + } + xscale = FixedMul(rw_pic->xScale, scaledside->GetTextureXScale(scaledpart)); + yscale = FixedMul(rw_pic->yScale, scaledside->GetTextureYScale(scaledpart)); // encapsulate the lifetime of rowoffset fixed_t rowoffset = curline->sidedef->GetTextureYOffset(side_t::mid) + rover->master->sidedef[0]->GetTextureYOffset(side_t::mid); dc_texturemid = rover->model->GetPlaneTexZ(sector_t::ceiling);