mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-02-18 10:11:11 +00:00
- fixed: When stepping through a sector portal and touching a two sided line on the opposite side, its opening must be used, regardless of the FFCF_NOFLOOR flag.
This commit is contained in:
parent
e424ef63f2
commit
485c4c71b5
3 changed files with 8 additions and 1 deletions
|
@ -36,6 +36,7 @@ struct FCheckPosition
|
||||||
TMap<AActor*, bool> LastRipped;
|
TMap<AActor*, bool> LastRipped;
|
||||||
bool DoRipping;
|
bool DoRipping;
|
||||||
bool portalstep;
|
bool portalstep;
|
||||||
|
int portalgroup;
|
||||||
|
|
||||||
int PushTime;
|
int PushTime;
|
||||||
|
|
||||||
|
|
|
@ -161,6 +161,7 @@ DEFINE_FIELD_X(FCheckPosition, FCheckPosition, ceilingline);
|
||||||
DEFINE_FIELD_X(FCheckPosition, FCheckPosition, stepthing);
|
DEFINE_FIELD_X(FCheckPosition, FCheckPosition, stepthing);
|
||||||
DEFINE_FIELD_X(FCheckPosition, FCheckPosition, DoRipping);
|
DEFINE_FIELD_X(FCheckPosition, FCheckPosition, DoRipping);
|
||||||
DEFINE_FIELD_X(FCheckPosition, FCheckPosition, portalstep);
|
DEFINE_FIELD_X(FCheckPosition, FCheckPosition, portalstep);
|
||||||
|
DEFINE_FIELD_X(FCheckPosition, FCheckPosition, portalgroup);
|
||||||
DEFINE_FIELD_X(FCheckPosition, FCheckPosition, PushTime);
|
DEFINE_FIELD_X(FCheckPosition, FCheckPosition, PushTime);
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -288,6 +289,7 @@ static bool PIT_FindFloorCeiling(FMultiBlockLinesIterator &mit, FMultiBlockLines
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we are stepping through a portal the line's opening must be checked, regardless of the NOFLOOR flag
|
||||||
if (!(flags & FFCF_NOFLOOR))
|
if (!(flags & FFCF_NOFLOOR))
|
||||||
{
|
{
|
||||||
if (open.bottom > tmf.floorz)
|
if (open.bottom > tmf.floorz)
|
||||||
|
@ -905,6 +907,7 @@ bool PIT_CheckLine(FMultiBlockLinesIterator &mit, FMultiBlockLinesIterator::Chec
|
||||||
tm.floorpic = cres.line->sidedef[0]->GetTexture(side_t::mid);
|
tm.floorpic = cres.line->sidedef[0]->GetTexture(side_t::mid);
|
||||||
tm.floorterrain = 0;
|
tm.floorterrain = 0;
|
||||||
tm.portalstep = true;
|
tm.portalstep = true;
|
||||||
|
tm.portalgroup = cres.line->frontsector->GetOppositePortalGroup(sector_t::ceiling);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -999,6 +1002,7 @@ bool PIT_CheckLine(FMultiBlockLinesIterator &mit, FMultiBlockLinesIterator::Chec
|
||||||
{
|
{
|
||||||
// Actor is stepping through a portal.
|
// Actor is stepping through a portal.
|
||||||
tm.portalstep = true;
|
tm.portalstep = true;
|
||||||
|
tm.portalgroup = tm.thing->Sector->GetOppositePortalGroup(sector_t::ceiling);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1051,7 +1055,8 @@ bool PIT_CheckLine(FMultiBlockLinesIterator &mit, FMultiBlockLinesIterator::Chec
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(cres.portalflags & FFCF_NOFLOOR))
|
// If we are stepping through a portal the line's opening must be checked, regardless of the NOFLOOR flag
|
||||||
|
if (!(cres.portalflags & FFCF_NOFLOOR) || (tm.portalstep && open.bottomsec->PortalGroup == tm.portalgroup))
|
||||||
{
|
{
|
||||||
if (open.bottom > tm.floorz)
|
if (open.bottom > tm.floorz)
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,6 +22,7 @@ struct FCheckPosition
|
||||||
native Actor stepthing;
|
native Actor stepthing;
|
||||||
native bool DoRipping;
|
native bool DoRipping;
|
||||||
native bool portalstep;
|
native bool portalstep;
|
||||||
|
native int portalgroup;
|
||||||
|
|
||||||
native int PushTime;
|
native int PushTime;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue