diff --git a/src/r_plane.c b/src/r_plane.c index 2a3cd407..32fd0644 100644 --- a/src/r_plane.c +++ b/src/r_plane.c @@ -405,7 +405,6 @@ static void DrawSkyTex(visplane_t *pl, sky_t *sky, skytex_t *skytex) { const side_t * const side = sky->side; const int texture = texturetranslation[skytex->texture]; - boolean vertically_scrolling = false; dc->texheight = textureheight[texture] >> FRACBITS; dc->iscale = FixedMul(skyiscale, skytex->scaley); @@ -415,13 +414,11 @@ static void DrawSkyTex(visplane_t *pl, sky_t *sky, skytex_t *skytex) deltay = LerpFixed(skytex->prevy, skytex->curry); deltax = LerpFixed(skytex->prevx, skytex->currx) << (ANGLETOSKYSHIFT - FRACBITS); dc->texturemid = skytex->mid + deltay; - vertically_scrolling = skytex->scrolly; if (side) { deltax += LerpFixed(side->oldtextureoffset, side->basetextureoffset); dc->texturemid += side->baserowoffset; - vertically_scrolling += (side->baserowoffset - side->oldrowoffset); } } else @@ -429,13 +426,11 @@ static void DrawSkyTex(visplane_t *pl, sky_t *sky, skytex_t *skytex) deltay = skytex->curry; deltax = skytex->currx << (ANGLETOSKYSHIFT - FRACBITS); dc->texturemid = skytex->mid + deltay; - vertically_scrolling = skytex->scrolly; if (side) { deltax += side->textureoffset; dc->texturemid += side->baserowoffset; - vertically_scrolling += (side->baserowoffset - side->oldrowoffset); } } @@ -448,7 +443,14 @@ static void DrawSkyTex(visplane_t *pl, sky_t *sky, skytex_t *skytex) angle_t an = viewangle + deltax; - if (colfunc != R_DrawTLColumn && !vertically_scrolling && dc->texheight >= 128) + if (sky->texturemid_tic != gametic) + { + sky->vertically_scrolling = (sky->old_texturemid != dc->texturemid); + sky->old_texturemid = dc->texturemid; + sky->texturemid_tic = gametic; + } + + if (colfunc != R_DrawTLColumn && !sky->vertically_scrolling && dc->texheight >= 128) { // Make sure the fade-to-color effect doesn't happen too early fixed_t diff = dc->texturemid - SCREENHEIGHT / 2 * FRACUNIT; diff --git a/src/r_sky.c b/src/r_sky.c index 47d00254..86c34b7d 100644 --- a/src/r_sky.c +++ b/src/r_sky.c @@ -311,6 +311,8 @@ static skyindex_t AddLevelsky(int texture, side_t *side) R_InitFireSky(&new_sky); } + new_sky.texturemid_tic = -1; + const int skyheight = textureheight[new_sky.background.texture] >> FRACBITS; new_sky.stretchable = true; diff --git a/src/r_skydefs.h b/src/r_skydefs.h index 2e5d3a5f..89fec3e5 100644 --- a/src/r_skydefs.h +++ b/src/r_skydefs.h @@ -60,6 +60,10 @@ typedef struct sky_s // Plain levelskies, flatmap boolean stretchable; + + boolean vertically_scrolling; + int old_texturemid; + int texturemid_tic; } sky_t; typedef struct