Merge branch 'fix-nonslope-slopes' into 'next'
Provide a fix for "non-sloped" slopes launch/land behavior by checking the normal's components. See merge request STJr/SRB2!634
This commit is contained in:
commit
0a061616ef
|
@ -50,10 +50,10 @@ static void ReconfigureViaVertexes (pslope_t *slope, const vector3_t v1, const v
|
||||||
// Set some defaults for a non-sloped "slope"
|
// Set some defaults for a non-sloped "slope"
|
||||||
if (vec1.z == 0 && vec2.z == 0)
|
if (vec1.z == 0 && vec2.z == 0)
|
||||||
{
|
{
|
||||||
/// \todo Fix fully flat cases.
|
|
||||||
|
|
||||||
slope->zangle = slope->xydirection = 0;
|
slope->zangle = slope->xydirection = 0;
|
||||||
slope->zdelta = slope->d.x = slope->d.y = 0;
|
slope->zdelta = slope->d.x = slope->d.y = 0;
|
||||||
|
slope->normal.x = slope->normal.y = 0;
|
||||||
|
slope->normal.z = FRACUNIT;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -653,7 +653,9 @@ void P_ReverseQuantizeMomentumToSlope(vector3_t *momentum, pslope_t *slope)
|
||||||
// Handles slope ejection for objects
|
// Handles slope ejection for objects
|
||||||
void P_SlopeLaunch(mobj_t *mo)
|
void P_SlopeLaunch(mobj_t *mo)
|
||||||
{
|
{
|
||||||
if (!(mo->standingslope->flags & SL_NOPHYSICS)) // If there's physics, time for launching.
|
if (!(mo->standingslope->flags & SL_NOPHYSICS) // If there's physics, time for launching.
|
||||||
|
&& (mo->standingslope->normal.x != 0
|
||||||
|
|| mo->standingslope->normal.y != 0))
|
||||||
{
|
{
|
||||||
// Double the pre-rotation Z, then halve the post-rotation Z. This reduces the
|
// Double the pre-rotation Z, then halve the post-rotation Z. This reduces the
|
||||||
// vertical launch given from slopes while increasing the horizontal launch
|
// vertical launch given from slopes while increasing the horizontal launch
|
||||||
|
@ -710,8 +712,7 @@ fixed_t P_GetWallTransferMomZ(mobj_t *mo, pslope_t *slope)
|
||||||
void P_HandleSlopeLanding(mobj_t *thing, pslope_t *slope)
|
void P_HandleSlopeLanding(mobj_t *thing, pslope_t *slope)
|
||||||
{
|
{
|
||||||
vector3_t mom; // Ditto.
|
vector3_t mom; // Ditto.
|
||||||
|
if (slope->flags & SL_NOPHYSICS || (slope->normal.x == 0 && slope->normal.y == 0)) { // No physics, no need to make anything complicated.
|
||||||
if (slope->flags & SL_NOPHYSICS) { // No physics, no need to make anything complicated.
|
|
||||||
if (P_MobjFlip(thing)*(thing->momz) < 0) // falling, land on slope
|
if (P_MobjFlip(thing)*(thing->momz) < 0) // falling, land on slope
|
||||||
{
|
{
|
||||||
thing->standingslope = slope;
|
thing->standingslope = slope;
|
||||||
|
|
Loading…
Reference in New Issue