From 37ce3dba27df703356b59ce3e8e1b7362470883f Mon Sep 17 00:00:00 2001 From: "James R." Date: Mon, 18 Sep 2023 04:05:00 -0700 Subject: [PATCH] E-Brake ring: visual consistency and polish - Always spawns on the ground below the player - If falling fast enough, spawn afterimages around the player like "falling through hoops" - Also fix scaling to Shrink/Grow --- src/k_kart.c | 12 +++--------- src/p_mobj.c | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index ab7547fbc..08b379ab6 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -10147,15 +10147,9 @@ void K_KartEbrakeVisuals(player_t *p) { if (p->ebrakefor % 20 == 0) { - wave = P_SpawnMobj(p->mo->x, p->mo->y, p->mo->z, MT_SOFTLANDING); - P_SetScale(wave, p->mo->scale); - if (p->respawn.state == RESPAWNST_NONE) - { - wave->momx = p->mo->momx; - wave->momy = p->mo->momy; - wave->momz = p->mo->momz; - wave->standingslope = p->mo->standingslope; - } + wave = P_SpawnMobj(p->mo->x, p->mo->y, p->mo->floorz, MT_SOFTLANDING); + P_InstaScale(wave, p->mo->scale); + P_SetTarget(&wave->target, p->mo); K_ReduceVFX(wave, p); } diff --git a/src/p_mobj.c b/src/p_mobj.c index 3a6176d7b..f818695cf 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -10404,6 +10404,28 @@ void P_SceneryThinker(mobj_t *mobj) mobj->renderflags |= RF_DONTDRAW; else mobj->renderflags &= ~RF_DONTDRAW; + + if (!P_MobjWasRemoved(mobj->target)) + { + // Cast like a shadow on the ground + P_MoveOrigin(mobj, mobj->target->x, mobj->target->y, mobj->target->floorz); + mobj->standingslope = mobj->target->standingslope; + + if (!P_IsObjectOnGround(mobj->target) && mobj->target->momz < -24 * mapobjectscale) + { + // Going down, falling through hoops + mobj_t *ghost = P_SpawnGhostMobj(mobj); + + ghost->z = mobj->target->z; + ghost->momz = -(mobj->target->momz); + ghost->standingslope = NULL; + + ghost->renderflags = mobj->renderflags; + ghost->fuse = 16; + ghost->extravalue1 = 1; + ghost->extravalue2 = 0; + } + } } if (mobj->type == MT_RANDOMAUDIENCE)