From d51870333456bccb6bf6f137119015501efda19d Mon Sep 17 00:00:00 2001 From: Nev3r Date: Tue, 14 Apr 2020 23:33:56 +0200 Subject: [PATCH] Replaces P_FindSectorFromTag() occurrences with its corresponding macro and vanishes it from existence. --- src/p_floor.c | 30 ++++++++++++------------ src/p_lights.c | 4 +++- src/p_slopes.c | 4 ++-- src/p_spec.c | 63 ++++++-------------------------------------------- src/p_spec.h | 1 - 5 files changed, 27 insertions(+), 75 deletions(-) diff --git a/src/p_floor.c b/src/p_floor.c index fbcb1274b..5d57263d3 100644 --- a/src/p_floor.c +++ b/src/p_floor.c @@ -687,6 +687,7 @@ void T_BounceCheese(levelspecthink_t *bouncer) fixed_t floorheight; sector_t *actionsector; INT32 i; + TAG_ITER_C if (bouncer->sector->crumblestate == 4 || bouncer->sector->crumblestate == 1 || bouncer->sector->crumblestate == 2) // Oops! Crumbler says to remove yourself! @@ -701,7 +702,7 @@ void T_BounceCheese(levelspecthink_t *bouncer) } // You can use multiple target sectors, but at your own risk!!! - for (i = -1; (i = P_FindSectorFromTag(bouncer->sourceline->tag, i)) >= 0 ;) + TAG_ITER_SECTORS(bouncer->sourceline->tag, i) { actionsector = §ors[i]; actionsector->moved = true; @@ -844,6 +845,7 @@ void T_StartCrumble(elevator_t *elevator) ffloor_t *rover; sector_t *sector; INT32 i; + TAG_ITER_C // Once done, the no-return thinker just sits there, // constantly 'returning'... kind of an oxymoron, isn't it? @@ -873,7 +875,7 @@ void T_StartCrumble(elevator_t *elevator) } else if (++elevator->distance == 0) // Reposition back to original spot { - for (i = -1; (i = P_FindSectorFromTag(elevator->sourceline->tag, i)) >= 0 ;) + TAG_ITER_SECTORS(elevator->sourceline->tag, i) { sector = §ors[i]; @@ -904,7 +906,7 @@ void T_StartCrumble(elevator_t *elevator) // Flash to indicate that the platform is about to return. if (elevator->distance > -224 && (leveltime % ((abs(elevator->distance)/8) + 1) == 0)) { - for (i = -1; (i = P_FindSectorFromTag(elevator->sourceline->tag, i)) >= 0 ;) + TAG_ITER_SECTORS(elevator->sourceline->tag, i) { sector = §ors[i]; @@ -1000,7 +1002,7 @@ void T_StartCrumble(elevator_t *elevator) P_RemoveThinker(&elevator->thinker); } - for (i = -1; (i = P_FindSectorFromTag(elevator->sourceline->tag, i)) >= 0 ;) + TAG_ITER_SECTORS(elevator->sourceline->tag, i) { sector = §ors[i]; sector->moved = true; @@ -1016,6 +1018,7 @@ void T_StartCrumble(elevator_t *elevator) void T_MarioBlock(levelspecthink_t *block) { INT32 i; + TAG_ITER_C #define speed vars[1] #define direction vars[2] @@ -1057,8 +1060,7 @@ void T_MarioBlock(levelspecthink_t *block) block->sector->ceilspeed = 0; block->direction = 0; } - - for (i = -1; (i = P_FindSectorFromTag((INT16)block->vars[0], i)) >= 0 ;) + TAG_ITER_SECTORS((INT16)block->vars[0], i) P_RecalcPrecipInSector(§ors[i]); #undef speed @@ -1151,9 +1153,7 @@ void T_FloatSector(levelspecthink_t *floater) // Just find the first sector with the tag. // Doesn't work with multiple sectors that have different floor/ceiling heights. - secnum = P_FindSectorFromTag((INT16)floater->vars[0], -1); - - if (secnum > 0) + if ((secnum = Tag_Iterate_Sectors((INT16)floater->vars[0], 0)) >= 0) actionsector = §ors[secnum]; else actionsector = NULL; @@ -1288,9 +1288,7 @@ void T_ThwompSector(levelspecthink_t *thwomp) // Just find the first sector with the tag. // Doesn't work with multiple sectors that have different floor/ceiling heights. - secnum = P_FindSectorFromTag((INT16)thwomp->vars[0], -1); - - if (secnum > 0) + if ((secnum = Tag_Iterate_Sectors((INT16)thwomp->vars[0], 0)) >= 0) { actionsector = §ors[secnum]; @@ -1860,11 +1858,12 @@ void T_RaiseSector(levelspecthink_t *raise) boolean playeronme = false, active = false; fixed_t ceilingdestination, floordestination; result_e res = 0; + TAG_ITER_C if (raise->sector->crumblestate >= 3 || raise->sector->ceilingdata) return; - for (i = -1; (i = P_FindSectorFromTag(raise->sourceline->tag, i)) >= 0 ;) + TAG_ITER_SECTORS(raise->sourceline->tag, i) { sector = §ors[i]; @@ -2057,7 +2056,7 @@ void T_RaiseSector(levelspecthink_t *raise) raise->sector->ceilspeed = 42; raise->sector->floorspeed = raise->vars[3]*raise->vars[8]; - for (i = -1; (i = P_FindSectorFromTag(raise->sourceline->tag, i)) >= 0 ;) + TAG_ITER_SECTORS(raise->sourceline->tag, i) P_RecalcPrecipInSector(§ors[i]); } @@ -2726,6 +2725,7 @@ INT32 EV_StartCrumble(sector_t *sec, ffloor_t *rover, boolean floating, elevator_t *elevator; sector_t *foundsec; INT32 i; + TAG_ITER_C // If floor is already activated, skip it if (sec->floordata) @@ -2778,7 +2778,7 @@ INT32 EV_StartCrumble(sector_t *sec, ffloor_t *rover, boolean floating, elevator->sector->crumblestate = 2; - for (i = -1; (i = P_FindSectorFromTag(elevator->sourceline->tag, i)) >= 0 ;) + TAG_ITER_SECTORS(elevator->sourceline->tag, i) { foundsec = §ors[i]; diff --git a/src/p_lights.c b/src/p_lights.c index 371077a30..bb8ef6989 100644 --- a/src/p_lights.c +++ b/src/p_lights.c @@ -374,8 +374,10 @@ void P_FadeLightBySector(sector_t *sector, INT32 destvalue, INT32 speed, boolean void P_FadeLight(INT16 tag, INT32 destvalue, INT32 speed, boolean ticbased, boolean force) { INT32 i; + TAG_ITER_C + // search all sectors for ones with tag - for (i = -1; (i = P_FindSectorFromTag(tag, i)) >= 0 ;) + TAG_ITER_SECTORS(tag, i) { if (!force && ticbased // always let speed fader execute && sectors[i].lightingdata diff --git a/src/p_slopes.c b/src/p_slopes.c index c4ef28666..63a7aeb20 100644 --- a/src/p_slopes.c +++ b/src/p_slopes.c @@ -549,11 +549,11 @@ static boolean P_SetSlopeFromTag(sector_t *sec, INT32 tag, boolean ceiling) { INT32 i; pslope_t **secslope = ceiling ? &sec->c_slope : &sec->f_slope; + TAG_ITER_C if (!tag || *secslope) return false; - - for (i = -1; (i = P_FindSectorFromTag(tag, i)) >= 0;) + TAG_ITER_SECTORS(tag, i) { pslope_t *srcslope = ceiling ? sectors[i].c_slope : sectors[i].f_slope; if (srcslope) diff --git a/src/p_spec.c b/src/p_spec.c index 6e7e06823..8b5b5ac9b 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -988,54 +988,6 @@ static sector_t *P_FindModelCeilingSector(fixed_t ceildestheight, INT32 secnum) } #endif -/** Searches the tag lists for the next sector with a given tag. - * - * \param tag Tag number to look for. - * \param start -1 to start anew, or the result of a previous call to keep - * searching. - * \return Number of the next tagged sector found. - */ -INT32 P_FindSectorFromTag(INT16 tag, INT32 start) -{ - if (tag == -1) - { - start++; - - if (start >= (INT32)numsectors) - return -1; - - return start; - } -#if 0 - INT32 tpos = 0; - - if (tags_sectors[tag]) - { - // Resume previous position. - if (start != -1) - for (; tpos < tags_sectors[(UINT16)tag]->count;) - if (start == tags_sectors[(UINT16)tag]->elements[tpos++]) - break; - - if (tpos >= tags_sectors[(UINT16)tag]->count) - return -1; - - return tags_sectors[(UINT16)tag]->elements[tpos++]; - } - - return -1; -#else - else - { - start = start >= 0 ? sectors[start].nexttag : - sectors[(unsigned)tag % numsectors].firsttag; - while (start >= 0 && sectors[start].tag != tag) - start = sectors[start].nexttag; - return start; - } -#endif -} - // // P_FindSpecialLineFromTag // @@ -3181,7 +3133,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) ffloor_t *rover; // FOF that we are going to crumble boolean foundrover = false; // for debug, "Can't find a FOF" message - for (secnum = -1; (secnum = P_FindSectorFromTag(sectag, secnum)) >= 0 ;) + TAG_ITER_SECTORS(sectag, secnum) { sec = sectors + secnum; @@ -3365,7 +3317,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) boolean foundrover = false; // for debug, "Can't find a FOF" message ffloortype_e oldflags; // store FOF's old flags - for (secnum = -1; (secnum = P_FindSectorFromTag(sectag, secnum)) >= 0 ;) + TAG_ITER_SECTORS(sectag, secnum) { sec = sectors + secnum; @@ -3423,7 +3375,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) if (line->flags & ML_NOCLIMB) // don't respawn! respawn = false; - for (secnum = -1; (secnum = P_FindSectorFromTag(sectag, secnum)) >= 0 ;) + TAG_ITER_SECTORS(sectag, secnum) { sec = sectors + secnum; @@ -3608,7 +3560,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) ffloor_t *rover; // FOF that we are going to operate boolean foundrover = false; // for debug, "Can't find a FOF" message - for (secnum = -1; (secnum = P_FindSectorFromTag(sectag, secnum)) >= 0 ;) + TAG_ITER_SECTORS(sectag, secnum) { sec = sectors + secnum; @@ -3672,7 +3624,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) boolean foundrover = false; // for debug, "Can't find a FOF" message size_t j = 0; // sec->ffloors is saved as ffloor #0, ss->ffloors->next is #1, etc - for (secnum = -1; (secnum = P_FindSectorFromTag(sectag, secnum)) >= 0 ;) + TAG_ITER_SECTORS(sectag, secnum) { sec = sectors + secnum; @@ -3757,7 +3709,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) ffloor_t *rover; // FOF that we are going to operate boolean foundrover = false; // for debug, "Can't find a FOF" message - for (secnum = -1; (secnum = P_FindSectorFromTag(sectag, secnum)) >= 0 ;) + TAG_ITER_SECTORS(sectag, secnum) { sec = sectors + secnum; @@ -7617,8 +7569,7 @@ void T_Scroll(scroll_t *s) if (!is3dblock) continue; - - for (sect = -1; (sect = P_FindSectorFromTag(line->tag, sect)) >= 0 ;) + TAG_ITER_SECTORS(line->tag, sect) { sector_t *psec; psec = sectors + sect; diff --git a/src/p_spec.h b/src/p_spec.h index 590eb476b..271c04c08 100644 --- a/src/p_spec.h +++ b/src/p_spec.h @@ -55,7 +55,6 @@ fixed_t P_FindNextLowestFloor(sector_t *sec, fixed_t currentheight); fixed_t P_FindLowestCeilingSurrounding(sector_t *sec); fixed_t P_FindHighestCeilingSurrounding(sector_t *sec); -INT32 P_FindSectorFromTag(INT16 tag, INT32 start); INT32 P_FindSpecialLineFromTag(INT16 special, INT16 tag, INT32 start); INT32 P_FindMinSurroundingLight(sector_t *sector, INT32 max);