Repaired the height difference check during track switching
This commit is contained in:
parent
cf7e618b2f
commit
e23ef050d5
21
src/p_user.c
21
src/p_user.c
|
@ -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 = §ors[rover->secnum];
|
sec = §ors[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);
|
||||||
|
|
Loading…
Reference in New Issue