diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index a48cac6c9..1fecd9d41 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -345,11 +345,10 @@ void hitradius_d(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h if(spri->picnum != SHRINKSPARK && !(spri->picnum == RPG && spri->xrepeat < 11)) { - BFSSearch search(numsectors, spri->sectnum); + BFSSectorSearch search(spri->sector()); - for(unsigned dasect; (dasect = search.GetNext()) != BFSSearch::EOL;) + while (auto dasectp = search.GetNext()) { - auto dasectp = §or[dasect]; if (((dasectp->ceilingz - spri->z) >> 8) < r) { auto wal = dasectp->firstWall(); @@ -369,10 +368,9 @@ void hitradius_d(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h { if ((abs(wal.x - spri->x) + abs(wal.y - spri->y)) < r) { - int nextsect = wal.nextsector; - if (nextsect >= 0) + if (wal.twoSided()) { - search.Add(nextsect); + search.Add(wal.nextSector()); } int x1 = (((wal.x + wal.point2Wall()->x) >> 1) + spri->x) >> 1; int y1 = (((wal.y + wal.point2Wall()->y) >> 1) + spri->y) >> 1; diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index 3795a047c..1a7478625 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -223,11 +223,10 @@ void hitradius_r(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h if (spri->xrepeat >= 11 || !(spri->picnum == RPG || ((isRRRA()) && spri->picnum == RPG2))) { - BFSSearch search(numsectors, spri->sectnum); - - for (unsigned dasect; (dasect = search.GetNext()) != BFSSearch::EOL;) + BFSSectorSearch search(spri->sector()); + + while (auto dasectp = search.GetNext()) { - auto dasectp = §or[dasect]; if (((dasectp->ceilingz - spri->z) >> 8) < r) { auto wal = dasectp->firstWall(); @@ -247,10 +246,9 @@ void hitradius_r(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h { if ((abs(wal.x - spri->x) + abs(wal.y - spri->y)) < r) { - int nextsect = wal.nextsector; - if (nextsect >= 0) + if (wal.twoSided()) { - search.Add(nextsect); + search.Add(wal.nextSector()); } int x1 = (((wal.x + wal.point2Wall()->x) >> 1) + spri->x) >> 1; int y1 = (((wal.y + wal.point2Wall()->y) >> 1) + spri->y) >> 1;