From 6b2770f608c4e722fd4ec25141759f468894479d Mon Sep 17 00:00:00 2001 From: NepDisk Date: Sat, 12 Jul 2025 13:30:57 -0400 Subject: [PATCH] Handle obscure lava edge case I would convert with args but that overlaps with offroad, so this will do. --- src/p_mobj.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 084f27041..e7116ba6c 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3084,6 +3084,24 @@ boolean P_CanRunOnWater(mobj_t *mobj, ffloor_t *rover) return false; } +// Of course this shit is different. +static boolean P_HandleSolidLavaCompat(mobj_t *mobj, ffloor_t *rover) +{ + if (mapnamespace == MNS_SRB2KART) + { + I_Assert(mobj != NULL); + I_Assert(!P_MobjWasRemoved(mobj)); + fixed_t topheight = P_GetFFloorTopZAt(rover, mobj->x, mobj->y); + + if (rover->fofflags & FOF_SWIMMABLE && GETSECSPECIAL(rover->master->frontsector->special, 1) == 3 + && !(rover->master->flags & ML_BLOCKMONSTERS) + && ((rover->master->flags & ML_MIDPEG) || mobj->z-mobj->momz > topheight - FixedMul(16*FRACUNIT, mobj->scale))) + return true; + } + + return P_CheckSolidLava(rover); +} + boolean P_CheckSolidFFloorSurface(mobj_t *mobj, ffloor_t *rover) { if (!mobj->player) @@ -3092,7 +3110,9 @@ boolean P_CheckSolidFFloorSurface(mobj_t *mobj, ffloor_t *rover) return P_CanRunOnWater(mobj, rover); } - return P_CheckSolidLava(rover) || + + + return P_HandleSolidLavaCompat(mobj, rover) || P_CanRunOnWater(mobj, rover); }