Merge branch 'find-sector-from-tag' into 'next'

Remove P_FindSectorFromLineTag and P_FindLineFromLineTag

See merge request STJr/SRB2!901
This commit is contained in:
MascaraSnake 2020-05-01 05:49:52 -04:00
commit 2449c66b78
5 changed files with 60 additions and 121 deletions

View file

@ -395,7 +395,7 @@ INT32 EV_DoCeiling(line_t *line, ceiling_e type)
sector_t *sec; sector_t *sec;
ceiling_t *ceiling; ceiling_t *ceiling;
while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0) while ((secnum = P_FindSectorFromTag(line->tag,secnum)) >= 0)
{ {
sec = &sectors[secnum]; sec = &sectors[secnum];
@ -615,7 +615,7 @@ INT32 EV_DoCrush(line_t *line, ceiling_e type)
sector_t *sec; sector_t *sec;
ceiling_t *ceiling; ceiling_t *ceiling;
while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0) while ((secnum = P_FindSectorFromTag(line->tag,secnum)) >= 0)
{ {
sec = &sectors[secnum]; sec = &sectors[secnum];

View file

@ -1284,7 +1284,7 @@ void T_NoEnemiesSector(noenemies_t *nobaddies)
INT32 secnum = -1; INT32 secnum = -1;
boolean FOFsector = false; boolean FOFsector = false;
while ((secnum = P_FindSectorFromLineTag(nobaddies->sourceline, secnum)) >= 0) while ((secnum = P_FindSectorFromTag(nobaddies->sourceline->tag, secnum)) >= 0)
{ {
sec = &sectors[secnum]; sec = &sectors[secnum];
@ -1300,7 +1300,7 @@ void T_NoEnemiesSector(noenemies_t *nobaddies)
FOFsector = true; FOFsector = true;
while ((targetsecnum = P_FindSectorFromLineTag(sec->lines[i], targetsecnum)) >= 0) while ((targetsecnum = P_FindSectorFromTag(sec->lines[i]->tag, targetsecnum)) >= 0)
{ {
if (T_SectorHasEnemies(&sectors[targetsecnum])) if (T_SectorHasEnemies(&sectors[targetsecnum]))
return; return;
@ -1395,7 +1395,7 @@ void T_EachTimeThinker(eachtime_t *eachtime)
eachtime->playersOnArea[i] = false; eachtime->playersOnArea[i] = false;
} }
while ((secnum = P_FindSectorFromLineTag(eachtime->sourceline, secnum)) >= 0) while ((secnum = P_FindSectorFromTag(eachtime->sourceline->tag, secnum)) >= 0)
{ {
sec = &sectors[secnum]; sec = &sectors[secnum];
@ -1418,7 +1418,7 @@ void T_EachTimeThinker(eachtime_t *eachtime)
FOFsector = true; FOFsector = true;
while ((targetsecnum = P_FindSectorFromLineTag(sec->lines[i], targetsecnum)) >= 0) while ((targetsecnum = P_FindSectorFromTag(sec->lines[i]->tag, targetsecnum)) >= 0)
{ {
targetsec = &sectors[targetsecnum]; targetsec = &sectors[targetsecnum];
@ -1801,7 +1801,7 @@ void EV_DoFloor(line_t *line, floor_e floortype)
sector_t *sec; sector_t *sec;
floormove_t *dofloor; floormove_t *dofloor;
while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) while ((secnum = P_FindSectorFromTag(line->tag, secnum)) >= 0)
{ {
sec = &sectors[secnum]; sec = &sectors[secnum];
@ -2017,7 +2017,7 @@ void EV_DoElevator(line_t *line, elevator_e elevtype, boolean customspeed)
elevator_t *elevator; elevator_t *elevator;
// act on all sectors with the same tag as the triggering linedef // act on all sectors with the same tag as the triggering linedef
while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0) while ((secnum = P_FindSectorFromTag(line->tag,secnum)) >= 0)
{ {
sec = &sectors[secnum]; sec = &sectors[secnum];

View file

@ -566,7 +566,7 @@ void P_CopySectorSlope(line_t *line)
int i, special = line->special; int i, special = line->special;
// Check for copy linedefs // Check for copy linedefs
for (i = -1; (i = P_FindSectorFromLineTag(line, i)) >= 0;) for (i = -1; (i = P_FindSectorFromTag(line->tag, i)) >= 0;)
{ {
sector_t *srcsec = sectors + i; sector_t *srcsec = sectors + i;

View file

@ -987,42 +987,12 @@ static sector_t *P_FindModelCeilingSector(fixed_t ceildestheight, INT32 secnum)
} }
#endif #endif
/** Searches the tag lists for the next sector tagged to a line.
*
* \param line Tagged line used as a reference.
* \param start -1 to start at the beginning, or the result of a previous call
* to keep searching.
* \return Number of the next tagged sector found.
* \sa P_FindSectorFromTag, P_FindLineFromLineTag
*/
INT32 P_FindSectorFromLineTag(line_t *line, INT32 start)
{
if (line->tag == -1)
{
start++;
if (start >= (INT32)numsectors)
return -1;
return start;
}
else
{
start = start >= 0 ? sectors[start].nexttag :
sectors[(unsigned)line->tag % numsectors].firsttag;
while (start >= 0 && sectors[start].tag != line->tag)
start = sectors[start].nexttag;
return start;
}
}
/** Searches the tag lists for the next sector with a given tag. /** Searches the tag lists for the next sector with a given tag.
* *
* \param tag Tag number to look for. * \param tag Tag number to look for.
* \param start -1 to start anew, or the result of a previous call to keep * \param start -1 to start anew, or the result of a previous call to keep
* searching. * searching.
* \return Number of the next tagged sector found. * \return Number of the next tagged sector found.
* \sa P_FindSectorFromLineTag
*/ */
INT32 P_FindSectorFromTag(INT16 tag, INT32 start) INT32 P_FindSectorFromTag(INT16 tag, INT32 start)
{ {
@ -1045,42 +1015,12 @@ INT32 P_FindSectorFromTag(INT16 tag, INT32 start)
} }
} }
/** Searches the tag lists for the next line tagged to a line.
*
* \param line Tagged line used as a reference.
* \param start -1 to start anew, or the result of a previous call to keep
* searching.
* \return Number of the next tagged line found.
* \sa P_FindSectorFromLineTag
*/
static INT32 P_FindLineFromLineTag(const line_t *line, INT32 start)
{
if (line->tag == -1)
{
start++;
if (start >= (INT32)numlines)
return -1;
return start;
}
else
{
start = start >= 0 ? lines[start].nexttag :
lines[(unsigned)line->tag % numlines].firsttag;
while (start >= 0 && lines[start].tag != line->tag)
start = lines[start].nexttag;
return start;
}
}
#if 0
/** Searches the tag lists for the next line with a given tag and special. /** Searches the tag lists for the next line with a given tag and special.
* *
* \param tag Tag number. * \param tag Tag number.
* \param start -1 to start anew, or the result of a previous call to keep * \param start -1 to start anew, or the result of a previous call to keep
* searching. * searching.
* \return Number of next suitable line found. * \return Number of next suitable line found.
* \sa P_FindLineFromLineTag
* \author Graue <graue@oceanbase.org> * \author Graue <graue@oceanbase.org>
*/ */
static INT32 P_FindLineFromTag(INT32 tag, INT32 start) static INT32 P_FindLineFromTag(INT32 tag, INT32 start)
@ -1089,7 +1029,7 @@ static INT32 P_FindLineFromTag(INT32 tag, INT32 start)
{ {
start++; start++;
if (start >= numlines) if (start >= (INT32)numlines)
return -1; return -1;
return start; return start;
@ -1103,7 +1043,7 @@ static INT32 P_FindLineFromTag(INT32 tag, INT32 start)
return start; return start;
} }
} }
#endif
// //
// P_FindSpecialLineFromTag // P_FindSpecialLineFromTag
// //
@ -2500,7 +2440,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
newceilinglightsec = line->frontsector->ceilinglightsec; newceilinglightsec = line->frontsector->ceilinglightsec;
// act on all sectors with the same tag as the triggering linedef // act on all sectors with the same tag as the triggering linedef
while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) while ((secnum = P_FindSectorFromTag(line->tag, secnum)) >= 0)
{ {
if (sectors[secnum].lightingdata) if (sectors[secnum].lightingdata)
{ {
@ -2555,7 +2495,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
case 409: // Change tagged sectors' tag case 409: // Change tagged sectors' tag
// (formerly "Change calling sectors' tag", but behavior was changed) // (formerly "Change calling sectors' tag", but behavior was changed)
{ {
while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) while ((secnum = P_FindSectorFromTag(line->tag, secnum)) >= 0)
P_ChangeSectorTag(secnum,(INT16)(sides[line->sidenum[0]].textureoffset>>FRACBITS)); P_ChangeSectorTag(secnum,(INT16)(sides[line->sidenum[0]].textureoffset>>FRACBITS));
break; break;
} }
@ -2565,7 +2505,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
break; break;
case 411: // Stop floor/ceiling movement in tagged sector(s) case 411: // Stop floor/ceiling movement in tagged sector(s)
while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) while ((secnum = P_FindSectorFromTag(line->tag, secnum)) >= 0)
{ {
if (sectors[secnum].floordata) if (sectors[secnum].floordata)
{ {
@ -2635,7 +2575,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
} }
else else
{ {
if ((secnum = P_FindSectorFromLineTag(line, -1)) < 0) if ((secnum = P_FindSectorFromTag(line->tag, -1)) < 0)
return; return;
dest = P_GetObjectTypeInSectorNum(MT_TELEPORTMAN, secnum); dest = P_GetObjectTypeInSectorNum(MT_TELEPORTMAN, secnum);
@ -2750,7 +2690,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
// Additionally play the sound from tagged sectors' soundorgs // Additionally play the sound from tagged sectors' soundorgs
sector_t *sec; sector_t *sec;
while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) while ((secnum = P_FindSectorFromTag(line->tag, secnum)) >= 0)
{ {
sec = &sectors[secnum]; sec = &sectors[secnum];
S_StartSound(&sec->soundorg, sfxnum); S_StartSound(&sec->soundorg, sfxnum);
@ -2865,7 +2805,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
break; break;
case 416: // Spawn adjustable fire flicker case 416: // Spawn adjustable fire flicker
while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) while ((secnum = P_FindSectorFromTag(line->tag, secnum)) >= 0)
{ {
if (line->flags & ML_NOCLIMB && line->backsector) if (line->flags & ML_NOCLIMB && line->backsector)
{ {
@ -2899,7 +2839,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
break; break;
case 417: // Spawn adjustable glowing light case 417: // Spawn adjustable glowing light
while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) while ((secnum = P_FindSectorFromTag(line->tag, secnum)) >= 0)
{ {
if (line->flags & ML_NOCLIMB && line->backsector) if (line->flags & ML_NOCLIMB && line->backsector)
{ {
@ -2933,7 +2873,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
break; break;
case 418: // Spawn adjustable strobe flash (unsynchronized) case 418: // Spawn adjustable strobe flash (unsynchronized)
while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) while ((secnum = P_FindSectorFromTag(line->tag, secnum)) >= 0)
{ {
if (line->flags & ML_NOCLIMB && line->backsector) if (line->flags & ML_NOCLIMB && line->backsector)
{ {
@ -2967,7 +2907,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
break; break;
case 419: // Spawn adjustable strobe flash (synchronized) case 419: // Spawn adjustable strobe flash (synchronized)
while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) while ((secnum = P_FindSectorFromTag(line->tag, secnum)) >= 0)
{ {
if (line->flags & ML_NOCLIMB && line->backsector) if (line->flags & ML_NOCLIMB && line->backsector)
{ {
@ -3015,7 +2955,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
break; break;
case 421: // Stop lighting effect in tagged sectors case 421: // Stop lighting effect in tagged sectors
while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) while ((secnum = P_FindSectorFromTag(line->tag, secnum)) >= 0)
if (sectors[secnum].lightingdata) if (sectors[secnum].lightingdata)
{ {
P_RemoveThinker(&((elevator_t *)sectors[secnum].lightingdata)->thinker); P_RemoveThinker(&((elevator_t *)sectors[secnum].lightingdata)->thinker);
@ -3030,7 +2970,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
if ((!mo || !mo->player) && !titlemapinaction) // only players have views, and title screens if ((!mo || !mo->player) && !titlemapinaction) // only players have views, and title screens
return; return;
if ((secnum = P_FindSectorFromLineTag(line, -1)) < 0) if ((secnum = P_FindSectorFromTag(line->tag, -1)) < 0)
return; return;
altview = P_GetObjectTypeInSectorNum(MT_ALTVIEWMAN, secnum); altview = P_GetObjectTypeInSectorNum(MT_ALTVIEWMAN, secnum);
@ -3349,7 +3289,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
if (line->sidenum[1] != 0xffff) if (line->sidenum[1] != 0xffff)
state = (statenum_t)sides[line->sidenum[1]].toptexture; state = (statenum_t)sides[line->sidenum[1]].toptexture;
while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) while ((secnum = P_FindSectorFromTag(line->tag, secnum)) >= 0)
{ {
boolean tryagain; boolean tryagain;
sec = sectors + secnum; sec = sectors + secnum;
@ -3504,7 +3444,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
// Except it is activated by linedef executor, not level load // Except it is activated by linedef executor, not level load
// This could even override existing colormaps I believe // This could even override existing colormaps I believe
// -- Monster Iestyn 14/06/18 // -- Monster Iestyn 14/06/18
for (secnum = -1; (secnum = P_FindSectorFromLineTag(line, secnum)) >= 0 ;) for (secnum = -1; (secnum = P_FindSectorFromTag(line->tag, secnum)) >= 0 ;)
{ {
P_ResetColormapFader(&sectors[secnum]); P_ResetColormapFader(&sectors[secnum]);
@ -3832,7 +3772,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
} }
case 455: // Fade colormap case 455: // Fade colormap
for (secnum = -1; (secnum = P_FindSectorFromLineTag(line, secnum)) >= 0 ;) for (secnum = -1; (secnum = P_FindSectorFromTag(line->tag, secnum)) >= 0 ;)
{ {
extracolormap_t *source_exc, *dest_exc, *exc; extracolormap_t *source_exc, *dest_exc, *exc;
INT32 speed = (INT32)((line->flags & ML_DONTPEGBOTTOM) || !sides[line->sidenum[0]].rowoffset) && line->sidenum[1] != 0xFFFF ? INT32 speed = (INT32)((line->flags & ML_DONTPEGBOTTOM) || !sides[line->sidenum[0]].rowoffset) && line->sidenum[1] != 0xFFFF ?
@ -3921,7 +3861,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
break; break;
case 456: // Stop fade colormap case 456: // Stop fade colormap
for (secnum = -1; (secnum = P_FindSectorFromLineTag(line, secnum)) >= 0 ;) for (secnum = -1; (secnum = P_FindSectorFromTag(line->tag, secnum)) >= 0 ;)
P_ResetColormapFader(&sectors[secnum]); P_ResetColormapFader(&sectors[secnum]);
break; break;
@ -3935,7 +3875,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
boolean persist = (line->flags & ML_EFFECT2); boolean persist = (line->flags & ML_EFFECT2);
mobj_t *anchormo; mobj_t *anchormo;
if ((secnum = P_FindSectorFromLineTag(line, -1)) < 0) if ((secnum = P_FindSectorFromTag(line->tag, -1)) < 0)
return; return;
anchormo = P_GetObjectTypeInSectorNum(MT_ANGLEMAN, secnum); anchormo = P_GetObjectTypeInSectorNum(MT_ANGLEMAN, secnum);
@ -6504,7 +6444,7 @@ void P_SpawnSpecials(boolean fromnetsave)
case 1: // Definable gravity per sector case 1: // Definable gravity per sector
sec = sides[*lines[i].sidenum].sector - sectors; sec = sides[*lines[i].sidenum].sector - sectors;
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
{ {
sectors[s].gravity = &sectors[sec].floorheight; // This allows it to change in realtime! sectors[s].gravity = &sectors[sec].floorheight; // This allows it to change in realtime!
@ -6528,7 +6468,7 @@ void P_SpawnSpecials(boolean fromnetsave)
case 5: // Change camera info case 5: // Change camera info
sec = sides[*lines[i].sidenum].sector - sectors; sec = sides[*lines[i].sidenum].sector - sectors;
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
P_AddCameraScanner(&sectors[sec], &sectors[s], R_PointToAngle2(lines[i].v2->x, lines[i].v2->y, lines[i].v1->x, lines[i].v1->y)); P_AddCameraScanner(&sectors[sec], &sectors[s], R_PointToAngle2(lines[i].v2->x, lines[i].v2->y, lines[i].v1->x, lines[i].v1->y));
break; break;
@ -6555,7 +6495,7 @@ void P_SpawnSpecials(boolean fromnetsave)
P_ApplyFlatAlignment(lines + i, lines[i].frontsector, flatangle, xoffs, yoffs); P_ApplyFlatAlignment(lines + i, lines[i].frontsector, flatangle, xoffs, yoffs);
else else
{ {
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0;)
P_ApplyFlatAlignment(lines + i, sectors + s, flatangle, xoffs, yoffs); P_ApplyFlatAlignment(lines + i, sectors + s, flatangle, xoffs, yoffs);
} }
} }
@ -6566,7 +6506,7 @@ void P_SpawnSpecials(boolean fromnetsave)
break; break;
case 8: // Sector Parameters case 8: // Sector Parameters
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
{ {
if (lines[i].flags & ML_NOCLIMB) if (lines[i].flags & ML_NOCLIMB)
{ {
@ -6594,7 +6534,7 @@ void P_SpawnSpecials(boolean fromnetsave)
case 10: // Vertical culling plane for sprites and FOFs case 10: // Vertical culling plane for sprites and FOFs
sec = sides[*lines[i].sidenum].sector - sectors; sec = sides[*lines[i].sidenum].sector - sectors;
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
sectors[s].cullheight = &lines[i]; // This allows it to change in realtime! sectors[s].cullheight = &lines[i]; // This allows it to change in realtime!
break; break;
@ -6655,18 +6595,18 @@ void P_SpawnSpecials(boolean fromnetsave)
case 63: // support for drawn heights coming from different sector case 63: // support for drawn heights coming from different sector
sec = sides[*lines[i].sidenum].sector-sectors; sec = sides[*lines[i].sidenum].sector-sectors;
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
sectors[s].heightsec = (INT32)sec; sectors[s].heightsec = (INT32)sec;
break; break;
case 64: // Appearing/Disappearing FOF option case 64: // Appearing/Disappearing FOF option
if (lines[i].flags & ML_BLOCKMONSTERS) { // Find FOFs by control sector tag if (lines[i].flags & ML_BLOCKMONSTERS) { // Find FOFs by control sector tag
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
for (j = 0; (unsigned)j < sectors[s].linecount; j++) for (j = 0; (unsigned)j < sectors[s].linecount; j++)
if (sectors[s].lines[j]->special >= 100 && sectors[s].lines[j]->special < 300) if (sectors[s].lines[j]->special >= 100 && sectors[s].lines[j]->special < 300)
Add_MasterDisappearer(abs(lines[i].dx>>FRACBITS), abs(lines[i].dy>>FRACBITS), abs(sides[lines[i].sidenum[0]].sector->floorheight>>FRACBITS), (INT32)(sectors[s].lines[j]-lines), (INT32)i); Add_MasterDisappearer(abs(lines[i].dx>>FRACBITS), abs(lines[i].dy>>FRACBITS), abs(sides[lines[i].sidenum[0]].sector->floorheight>>FRACBITS), (INT32)(sectors[s].lines[j]-lines), (INT32)i);
} else // Find FOFs by effect sector tag } else // Find FOFs by effect sector tag
for (s = -1; (s = P_FindLineFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindLineFromTag(lines[i].tag, s)) >= 0 ;)
{ {
if ((size_t)s == i) if ((size_t)s == i)
continue; continue;
@ -6676,15 +6616,15 @@ void P_SpawnSpecials(boolean fromnetsave)
break; break;
case 66: // Displace floor by front sector case 66: // Displace floor by front sector
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
P_AddPlaneDisplaceThinker(pd_floor, P_AproxDistance(lines[i].dx, lines[i].dy)>>8, sides[lines[i].sidenum[0]].sector-sectors, s, !!(lines[i].flags & ML_NOCLIMB)); P_AddPlaneDisplaceThinker(pd_floor, P_AproxDistance(lines[i].dx, lines[i].dy)>>8, sides[lines[i].sidenum[0]].sector-sectors, s, !!(lines[i].flags & ML_NOCLIMB));
break; break;
case 67: // Displace ceiling by front sector case 67: // Displace ceiling by front sector
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
P_AddPlaneDisplaceThinker(pd_ceiling, P_AproxDistance(lines[i].dx, lines[i].dy)>>8, sides[lines[i].sidenum[0]].sector-sectors, s, !!(lines[i].flags & ML_NOCLIMB)); P_AddPlaneDisplaceThinker(pd_ceiling, P_AproxDistance(lines[i].dx, lines[i].dy)>>8, sides[lines[i].sidenum[0]].sector-sectors, s, !!(lines[i].flags & ML_NOCLIMB));
break; break;
case 68: // Displace both floor AND ceiling by front sector case 68: // Displace both floor AND ceiling by front sector
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
P_AddPlaneDisplaceThinker(pd_both, P_AproxDistance(lines[i].dx, lines[i].dy)>>8, sides[lines[i].sidenum[0]].sector-sectors, s, !!(lines[i].flags & ML_NOCLIMB)); P_AddPlaneDisplaceThinker(pd_both, P_AproxDistance(lines[i].dx, lines[i].dy)>>8, sides[lines[i].sidenum[0]].sector-sectors, s, !!(lines[i].flags & ML_NOCLIMB));
break; break;
@ -7286,46 +7226,46 @@ void P_SpawnSpecials(boolean fromnetsave)
case 600: // floor lighting independently (e.g. lava) case 600: // floor lighting independently (e.g. lava)
sec = sides[*lines[i].sidenum].sector-sectors; sec = sides[*lines[i].sidenum].sector-sectors;
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
sectors[s].floorlightsec = (INT32)sec; sectors[s].floorlightsec = (INT32)sec;
break; break;
case 601: // ceiling lighting independently case 601: // ceiling lighting independently
sec = sides[*lines[i].sidenum].sector-sectors; sec = sides[*lines[i].sidenum].sector-sectors;
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
sectors[s].ceilinglightsec = (INT32)sec; sectors[s].ceilinglightsec = (INT32)sec;
break; break;
case 602: // Adjustable pulsating light case 602: // Adjustable pulsating light
sec = sides[*lines[i].sidenum].sector - sectors; sec = sides[*lines[i].sidenum].sector - sectors;
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
P_SpawnAdjustableGlowingLight(&sectors[sec], &sectors[s], P_SpawnAdjustableGlowingLight(&sectors[sec], &sectors[s],
P_AproxDistance(lines[i].dx, lines[i].dy)>>FRACBITS); P_AproxDistance(lines[i].dx, lines[i].dy)>>FRACBITS);
break; break;
case 603: // Adjustable flickering light case 603: // Adjustable flickering light
sec = sides[*lines[i].sidenum].sector - sectors; sec = sides[*lines[i].sidenum].sector - sectors;
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
P_SpawnAdjustableFireFlicker(&sectors[sec], &sectors[s], P_SpawnAdjustableFireFlicker(&sectors[sec], &sectors[s],
P_AproxDistance(lines[i].dx, lines[i].dy)>>FRACBITS); P_AproxDistance(lines[i].dx, lines[i].dy)>>FRACBITS);
break; break;
case 604: // Adjustable Blinking Light (unsynchronized) case 604: // Adjustable Blinking Light (unsynchronized)
sec = sides[*lines[i].sidenum].sector - sectors; sec = sides[*lines[i].sidenum].sector - sectors;
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
P_SpawnAdjustableStrobeFlash(&sectors[sec], &sectors[s], P_SpawnAdjustableStrobeFlash(&sectors[sec], &sectors[s],
abs(lines[i].dx)>>FRACBITS, abs(lines[i].dy)>>FRACBITS, false); abs(lines[i].dx)>>FRACBITS, abs(lines[i].dy)>>FRACBITS, false);
break; break;
case 605: // Adjustable Blinking Light (synchronized) case 605: // Adjustable Blinking Light (synchronized)
sec = sides[*lines[i].sidenum].sector - sectors; sec = sides[*lines[i].sidenum].sector - sectors;
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
P_SpawnAdjustableStrobeFlash(&sectors[sec], &sectors[s], P_SpawnAdjustableStrobeFlash(&sectors[sec], &sectors[s],
abs(lines[i].dx)>>FRACBITS, abs(lines[i].dy)>>FRACBITS, true); abs(lines[i].dx)>>FRACBITS, abs(lines[i].dy)>>FRACBITS, true);
break; break;
case 606: // HACK! Copy colormaps. Just plain colormaps. case 606: // HACK! Copy colormaps. Just plain colormaps.
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[i].tag, s)) >= 0 ;)
sectors[s].extra_colormap = sectors[s].spawn_extra_colormap = sides[lines[i].sidenum[0]].colormap_data; sectors[s].extra_colormap = sectors[s].spawn_extra_colormap = sides[lines[i].sidenum[0]].colormap_data;
break; break;
@ -7380,7 +7320,7 @@ static void P_AddFakeFloorsByLine(size_t line, ffloortype_e ffloorflags, thinker
INT32 s; INT32 s;
size_t sec = sides[*lines[line].sidenum].sector-sectors; size_t sec = sides[*lines[line].sidenum].sector-sectors;
for (s = -1; (s = P_FindSectorFromLineTag(lines+line, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[line].tag, s)) >= 0 ;)
P_AddFakeFloor(&sectors[s], &sectors[sec], lines+line, ffloorflags, secthinkers); P_AddFakeFloor(&sectors[s], &sectors[sec], lines+line, ffloorflags, secthinkers);
} }
@ -7742,7 +7682,7 @@ static void P_SpawnScrollers(void)
case 513: // scroll effect ceiling case 513: // scroll effect ceiling
case 533: // scroll and carry objects on ceiling case 533: // scroll and carry objects on ceiling
for (s = -1; (s = P_FindSectorFromLineTag(l, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(l->tag, s)) >= 0 ;)
Add_Scroller(sc_ceiling, -dx, dy, control, s, accel, l->flags & ML_NOCLIMB); Add_Scroller(sc_ceiling, -dx, dy, control, s, accel, l->flags & ML_NOCLIMB);
if (special != 533) if (special != 533)
break; break;
@ -7751,13 +7691,13 @@ static void P_SpawnScrollers(void)
case 523: // carry objects on ceiling case 523: // carry objects on ceiling
dx = FixedMul(dx, CARRYFACTOR); dx = FixedMul(dx, CARRYFACTOR);
dy = FixedMul(dy, CARRYFACTOR); dy = FixedMul(dy, CARRYFACTOR);
for (s = -1; (s = P_FindSectorFromLineTag(l, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(l->tag, s)) >= 0 ;)
Add_Scroller(sc_carry_ceiling, dx, dy, control, s, accel, l->flags & ML_NOCLIMB); Add_Scroller(sc_carry_ceiling, dx, dy, control, s, accel, l->flags & ML_NOCLIMB);
break; break;
case 510: // scroll effect floor case 510: // scroll effect floor
case 530: // scroll and carry objects on floor case 530: // scroll and carry objects on floor
for (s = -1; (s = P_FindSectorFromLineTag(l, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(l->tag, s)) >= 0 ;)
Add_Scroller(sc_floor, -dx, dy, control, s, accel, l->flags & ML_NOCLIMB); Add_Scroller(sc_floor, -dx, dy, control, s, accel, l->flags & ML_NOCLIMB);
if (special != 530) if (special != 530)
break; break;
@ -7766,14 +7706,14 @@ static void P_SpawnScrollers(void)
case 520: // carry objects on floor case 520: // carry objects on floor
dx = FixedMul(dx, CARRYFACTOR); dx = FixedMul(dx, CARRYFACTOR);
dy = FixedMul(dy, CARRYFACTOR); dy = FixedMul(dy, CARRYFACTOR);
for (s = -1; (s = P_FindSectorFromLineTag(l, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(l->tag, s)) >= 0 ;)
Add_Scroller(sc_carry, dx, dy, control, s, accel, l->flags & ML_NOCLIMB); Add_Scroller(sc_carry, dx, dy, control, s, accel, l->flags & ML_NOCLIMB);
break; break;
// scroll wall according to linedef // scroll wall according to linedef
// (same direction and speed as scrolling floors) // (same direction and speed as scrolling floors)
case 502: case 502:
for (s = -1; (s = P_FindLineFromLineTag(l, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(l->tag, s)) >= 0 ;)
if (s != (INT32)i) if (s != (INT32)i)
Add_Scroller(sc_side, dx, dy, control, lines[s].sidenum[0], accel, 0); Add_Scroller(sc_side, dx, dy, control, lines[s].sidenum[0], accel, 0);
break; break;
@ -7843,7 +7783,7 @@ void T_Disappear(disappear_t *d)
ffloor_t *rover; ffloor_t *rover;
register INT32 s; register INT32 s;
for (s = -1; (s = P_FindSectorFromLineTag(&lines[d->affectee], s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(lines[d->affectee].tag, s)) >= 0 ;)
{ {
for (rover = sectors[s].ffloors; rover; rover = rover->next) for (rover = sectors[s].ffloors; rover; rover = rover->next)
{ {
@ -8600,7 +8540,7 @@ static void P_SpawnFriction(void)
else else
movefactor = FRACUNIT; movefactor = FRACUNIT;
for (s = -1; (s = P_FindSectorFromLineTag(l, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(l->tag, s)) >= 0 ;)
Add_Friction(friction, movefactor, s, -1); Add_Friction(friction, movefactor, s, -1);
} }
} }
@ -9135,15 +9075,15 @@ static void P_SpawnPushers(void)
switch (l->special) switch (l->special)
{ {
case 541: // wind case 541: // wind
for (s = -1; (s = P_FindSectorFromLineTag(l, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(l->tag, s)) >= 0 ;)
Add_Pusher(p_wind, l->dx, l->dy, NULL, s, -1, l->flags & ML_NOCLIMB, l->flags & ML_EFFECT4); Add_Pusher(p_wind, l->dx, l->dy, NULL, s, -1, l->flags & ML_NOCLIMB, l->flags & ML_EFFECT4);
break; break;
case 544: // current case 544: // current
for (s = -1; (s = P_FindSectorFromLineTag(l, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(l->tag, s)) >= 0 ;)
Add_Pusher(p_current, l->dx, l->dy, NULL, s, -1, l->flags & ML_NOCLIMB, l->flags & ML_EFFECT4); Add_Pusher(p_current, l->dx, l->dy, NULL, s, -1, l->flags & ML_NOCLIMB, l->flags & ML_EFFECT4);
break; break;
case 547: // push/pull case 547: // push/pull
for (s = -1; (s = P_FindSectorFromLineTag(l, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(l->tag, s)) >= 0 ;)
{ {
thing = P_GetPushThing(s); thing = P_GetPushThing(s);
if (thing) // No MT_P* means no effect if (thing) // No MT_P* means no effect
@ -9151,19 +9091,19 @@ static void P_SpawnPushers(void)
} }
break; break;
case 545: // current up case 545: // current up
for (s = -1; (s = P_FindSectorFromLineTag(l, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(l->tag, s)) >= 0 ;)
Add_Pusher(p_upcurrent, l->dx, l->dy, NULL, s, -1, l->flags & ML_NOCLIMB, l->flags & ML_EFFECT4); Add_Pusher(p_upcurrent, l->dx, l->dy, NULL, s, -1, l->flags & ML_NOCLIMB, l->flags & ML_EFFECT4);
break; break;
case 546: // current down case 546: // current down
for (s = -1; (s = P_FindSectorFromLineTag(l, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(l->tag, s)) >= 0 ;)
Add_Pusher(p_downcurrent, l->dx, l->dy, NULL, s, -1, l->flags & ML_NOCLIMB, l->flags & ML_EFFECT4); Add_Pusher(p_downcurrent, l->dx, l->dy, NULL, s, -1, l->flags & ML_NOCLIMB, l->flags & ML_EFFECT4);
break; break;
case 542: // wind up case 542: // wind up
for (s = -1; (s = P_FindSectorFromLineTag(l, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(l->tag, s)) >= 0 ;)
Add_Pusher(p_upwind, l->dx, l->dy, NULL, s, -1, l->flags & ML_NOCLIMB, l->flags & ML_EFFECT4); Add_Pusher(p_upwind, l->dx, l->dy, NULL, s, -1, l->flags & ML_NOCLIMB, l->flags & ML_EFFECT4);
break; break;
case 543: // wind down case 543: // wind down
for (s = -1; (s = P_FindSectorFromLineTag(l, s)) >= 0 ;) for (s = -1; (s = P_FindSectorFromTag(l->tag, s)) >= 0 ;)
Add_Pusher(p_downwind, l->dx, l->dy, NULL, s, -1, l->flags & ML_NOCLIMB, l->flags & ML_EFFECT4); Add_Pusher(p_downwind, l->dx, l->dy, NULL, s, -1, l->flags & ML_NOCLIMB, l->flags & ML_EFFECT4);
break; break;
} }

View file

@ -55,7 +55,6 @@ fixed_t P_FindNextLowestFloor(sector_t *sec, fixed_t currentheight);
fixed_t P_FindLowestCeilingSurrounding(sector_t *sec); fixed_t P_FindLowestCeilingSurrounding(sector_t *sec);
fixed_t P_FindHighestCeilingSurrounding(sector_t *sec); fixed_t P_FindHighestCeilingSurrounding(sector_t *sec);
INT32 P_FindSectorFromLineTag(line_t *line, INT32 start);
INT32 P_FindSectorFromTag(INT16 tag, INT32 start); INT32 P_FindSectorFromTag(INT16 tag, INT32 start);
INT32 P_FindSpecialLineFromTag(INT16 special, INT16 tag, INT32 start); INT32 P_FindSpecialLineFromTag(INT16 special, INT16 tag, INT32 start);