Repaired the height difference check during track switching

This commit is contained in:
MascaraSnake 2019-06-16 22:00:50 +02:00
parent cf7e618b2f
commit e23ef050d5
1 changed files with 13 additions and 8 deletions

View File

@ -9753,7 +9753,7 @@ void P_DoPityCheck(player_t *player)
} }
} }
static sector_t *P_GetMinecartSector(fixed_t x, fixed_t y, fixed_t z) static sector_t *P_GetMinecartSector(fixed_t x, fixed_t y, fixed_t z, fixed_t *nz)
{ {
sector_t *sec = R_PointInSubsector(x, y)->sector; sector_t *sec = R_PointInSubsector(x, y)->sector;
@ -9768,15 +9768,20 @@ static sector_t *P_GetMinecartSector(fixed_t x, fixed_t y, fixed_t z)
if (!(rover->flags & FF_EXISTS)) if (!(rover->flags & FF_EXISTS))
continue; continue;
fixed_t fofz = *rover->t_slope ? P_GetZAt(*rover->t_slope, x, y) : *rover->topheight; *nz = *rover->t_slope ? P_GetZAt(*rover->t_slope, x, y) : *rover->topheight;
if (abs(z - fofz) <= 40*FRACUNIT) if (abs(z - *nz) <= 40*FRACUNIT)
{ {
sec = &sectors[rover->secnum]; sec = &sectors[rover->secnum];
break; return sec;
} }
} }
} }
*nz = sec->f_slope ? P_GetZAt(sec->f_slope, x, y) : sec->floorheight;
if (abs(z - *nz) > 40*FRACUNIT)
return NULL;
return sec; return sec;
} }
@ -9906,7 +9911,7 @@ static mobj_t *P_LookForRails(mobj_t* mobj, fixed_t c, fixed_t s, angle_t target
INT16 fwooffset = FixedHypot(mobj->momx, mobj->momy) >> FRACBITS; INT16 fwooffset = FixedHypot(mobj->momx, mobj->momy) >> FRACBITS;
fixed_t x = mobj->x; fixed_t x = mobj->x;
fixed_t y = mobj->y; fixed_t y = mobj->y;
fixed_t z = mobj->z + 40*FRACUNIT; fixed_t z = mobj->z;
UINT8 i; UINT8 i;
for (i = 4; i <= 10; i++) for (i = 4; i <= 10; i++)
@ -9916,9 +9921,8 @@ static mobj_t *P_LookForRails(mobj_t* mobj, fixed_t c, fixed_t s, angle_t target
x += interval*xcom*i + fwooffset*c*i; x += interval*xcom*i + fwooffset*c*i;
y += interval*ycom*i + fwooffset*s*i; y += interval*ycom*i + fwooffset*s*i;
nz = P_FloorzAtPos(x, y, z, mobj->height);
lline = P_GetMinecartSpecialLine(P_GetMinecartSector(x, y, nz)); lline = P_GetMinecartSpecialLine(P_GetMinecartSector(x, y, z, &nz));
if (lline != -1) if (lline != -1)
{ {
fixed_t nx, ny; fixed_t nx, ny;
@ -10010,6 +10014,7 @@ static void P_MinecartThink(player_t *player)
{ {
sector_t *sec; sector_t *sec;
size_t lnum; size_t lnum;
fixed_t dummy;
// Just hit floor. // Just hit floor.
if (minecart->eflags & MFE_JUSTHITFLOOR) if (minecart->eflags & MFE_JUSTHITFLOOR)
@ -10018,7 +10023,7 @@ static void P_MinecartThink(player_t *player)
S_StartSound(minecart, sfx_s3k96); S_StartSound(minecart, sfx_s3k96);
} }
sec = P_GetMinecartSector(minecart->x, minecart->y, minecart->z); sec = P_GetMinecartSector(minecart->x, minecart->y, minecart->z, &dummy);
if (sec) if (sec)
lnum = P_GetMinecartSpecialLine(sec); lnum = P_GetMinecartSpecialLine(sec);