From a796f888ea7f095aebea014403500e243f852b0e Mon Sep 17 00:00:00 2001 From: NepDisk Date: Tue, 16 Dec 2025 13:34:12 -0500 Subject: [PATCH] Compat cope 1: Having to account for special shifting --- src/k_kart.c | 18 +++++++++++ src/p_spec.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index 138c55280..b673cf2cf 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -941,6 +941,15 @@ static fixed_t K_CheckOffroadCollide(mobj_t *mo) if ( ((s->flags & MSF_FLIPSPECIAL_FLOOR) && mo->z == flr) // floor check || ((mo->eflags & MFE_VERTICALFLIP && (s->flags & MSF_FLIPSPECIAL_CEILING) && (mo->z + mo->height) == cel)) ) // ceiling check. { + if (mapnamespace == MNS_SRB2KART && s->offroad == 0) // some maps remap offroad live so lets account for that. + { + INT32 i; + for (i = 2; i < 5; i++) // check for sector special + + if (GETSECSPECIAL(s->special, 1) == i) + return (i-1)*FRACUNIT; // return offroad type + } + return s->offroad; } @@ -960,6 +969,15 @@ static fixed_t K_CheckOffroadCollide(mobj_t *mo) if ( ((s2->flags & MSF_FLIPSPECIAL_FLOOR) && mo->z == cel) // "floor" check || ((s2->flags & MSF_FLIPSPECIAL_CEILING) && (mo->z + mo->height) == flr) ) // "ceiling" check. { + if (mapnamespace == MNS_SRB2KART && s->offroad == 0) // some maps remap offroad live so lets account for that. + { + INT32 i; + for (i = 2; i < 5; i++) // check for sector special + + if (GETSECSPECIAL(s->special, 1) == i) + return (i-1)*FRACUNIT; // return offroad type + } + return s2->offroad; } } diff --git a/src/p_spec.c b/src/p_spec.c index 0b53f4689..5d2df0809 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -5486,6 +5486,96 @@ static void P_EvaluateOldSectorSpecial(player_t *player, sector_t *sector, secto P_ProcessEggCapsule(player, sector); break; } + + // People use special shifting to remap some effects on the fly, we need to support more then on race start. + if (mapnamespace == MNS_SRB2KART) + { + switch (GETSECSPECIAL(sector->special, 3)) + { + case 1: // SRB2kart: Spring Panel + { + if (!(sector->specialflags & SSF_REDPOGOSPRING) && (roversector || isTouching)) + { + P_ProcessPogoSpring(player, (roversector || isTouching), SSPT_RED); + } + break; + } + case 3: // SRB2kart: Spring Panel (capped speed) + { + if (!(sector->specialflags & SSF_YELLOWPOGOSPRING) && (roversector || isTouching)) + { + P_ProcessPogoSpring(player, (roversector || isTouching), SSPT_YELLOW); + } + break; + } + case 5: // Speed pad w/o spin + case 6: // Speed pad w/ spin + { + if (!(sector->specialflags & SSF_SPEEDPAD) && (roversector || isTouching)) + { + P_ProcessSpeedPad(player, sector, roversector, SSPT_YELLOW); + } + break; + } + } + + switch (GETSECSPECIAL(sector->special, 4)) + { + case 1: // StarPost Activator + { + if (!(sector->specialflags & SSF_STARPOSTACTIVATOR)) + { + mobj_t *post = P_GetObjectTypeInSectorNum(MT_STARPOST, sector - sectors); + if (!post) + break; + P_TouchStarPost(post, player, false); + } + break; + } + case 5: // Fan sector + { + if (!(sector->specialflags & SSF_FAN)) + { + player->mo->momz += mobjinfo[MT_FAN].mass/4; + + if (player->mo->momz > mobjinfo[MT_FAN].mass) + player->mo->momz = mobjinfo[MT_FAN].mass; + + P_ResetPlayer(player); + } + break; + } + case 6: // SRB2kart 190117 - Sneaker Panel + { + if (!(sector->specialflags & SSF_SNEAKERPANEL) && (roversector || isTouching)) + { + P_ProcessBoostPanel(player, (roversector || isTouching), SBPT_SNEAKER); + } + break; + } + case 7: // SRB2kart 190117 - Oil Slick (deprecated) + { + if (roversector || isTouching) + { + if (player && player->mo && !player->mo->subsector->sector->damagetype) + P_DamageMobj(player->mo, NULL, NULL, 1, DMG_NORMAL); + } + break; + } + case 10: // Finish Line + { + if (!(sector->specialflags & SSF_FINISHLINE)) + { + if (K_UsingLegacyCheckpoints() && (gametyperules & GTR_CIRCUIT) && (player->exiting == 0) && !(player->pflags & PF_HITFINISHLINE)) + { + K_HandleLapIncrement(player); + player->pflags |= PF_HITFINISHLINE; + } + } + break; + } + } + } } /** Applies a sector special to a player.