From ab40ede95508b7dc55c87facb001a92e67ce6653 Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 15 Apr 2020 18:45:23 -0700 Subject: [PATCH 1/2] Line special 507, scroll tagged lines' front and back textures by front and back texture offsets --- src/p_spec.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/p_spec.c b/src/p_spec.c index 425d1c779..2d80dce5c 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -7205,9 +7205,15 @@ static void P_SpawnScrollers(void) { fixed_t dx = l->dx >> SCROLL_SHIFT; // direction and speed of scrolling fixed_t dy = l->dy >> SCROLL_SHIFT; + + fixed_t bx = 0;/* backside variants */ + fixed_t by = 0; + INT32 control = -1, accel = 0; // no control sector or acceleration INT32 special = l->special; + INT32 s; + // These types are same as the ones they get set to except that the // first side's sector's heights cause scrolling when they change, and // this linedef controls the direction and speed of the scrolling. The @@ -7236,10 +7242,21 @@ static void P_SpawnScrollers(void) control = (INT32)(sides[*l->sidenum].sector - sectors); } + if (special == 507) // front and back scrollers + { + s = l->sidenum[0]; + + dx = -(sides[s].textureoffset); + dy = sides[s].rowoffset; + + s = l->sidenum[1]; + + bx = -(sides[s].textureoffset); + by = sides[s].rowoffset; + } + switch (special) { - register INT32 s; - case 513: // scroll effect ceiling case 533: // scroll and carry objects on ceiling for (s = -1; (s = P_FindSectorFromLineTag(l, s)) >= 0 ;) @@ -7292,6 +7309,17 @@ static void P_SpawnScrollers(void) CONS_Debug(DBG_GAMELOGIC, "Line special 506 (line #%s) missing 2nd side!\n", sizeu1(i)); break; + case 507: // scroll front and backside of tagged lines + for (s = -1; (s = P_FindLineFromLineTag(l, s)) >= 0 ;) + { + if (s != (INT32)i) + { + Add_Scroller(sc_side, dx, dy, control, lines[s].sidenum[0], accel, 0); + Add_Scroller(sc_side, bx, by, control, lines[s].sidenum[1], accel, 0); + } + } + break; + case 500: // scroll first side Add_Scroller(sc_side, FRACUNIT, 0, -1, lines[i].sidenum[0], accel, 0); break; From 190fc271216627510ddec597a72fcd0ac1a8cdbb Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 15 Apr 2020 18:48:23 -0700 Subject: [PATCH 2/2] Check that a back side exists --- src/p_spec.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/p_spec.c b/src/p_spec.c index 2d80dce5c..ee3e4851f 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -7251,8 +7251,11 @@ static void P_SpawnScrollers(void) s = l->sidenum[1]; - bx = -(sides[s].textureoffset); - by = sides[s].rowoffset; + if (s != 0xffff) + { + bx = -(sides[s].textureoffset); + by = sides[s].rowoffset; + } } switch (special) @@ -7315,7 +7318,8 @@ static void P_SpawnScrollers(void) if (s != (INT32)i) { Add_Scroller(sc_side, dx, dy, control, lines[s].sidenum[0], accel, 0); - Add_Scroller(sc_side, bx, by, control, lines[s].sidenum[1], accel, 0); + if (lines[s].sidenum[1] != 0xffff) + Add_Scroller(sc_side, bx, by, control, lines[s].sidenum[1], accel, 0); } } break;