From 1a78e55f4cd0f0c73a21deca1b5de48279378de2 Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 4 Dec 2023 20:22:41 -0800 Subject: [PATCH 1/5] P_DoPlayerExit: abuse K_MakeObjectReappear to vanish player if they win a Sealed Star --- src/p_user.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/p_user.c b/src/p_user.c index b1a0fd3cd..d5e781e19 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1332,6 +1332,11 @@ void P_DoPlayerExit(player_t *player, pflags_t flags) { G_BeginLevelExit(); } + + if (specialstageinfo.valid == true && losing == false && P_MobjWasRemoved(player->mo) == false) + { + K_MakeObjectReappear(player->mo); + } } K_InitPlayerTally(player); From 7aa5b478516f8842f734ab8be994f7ede6f41e33 Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 4 Dec 2023 20:24:25 -0800 Subject: [PATCH 2/5] P_RunOverlays: copy punted state from target --- src/p_mobj.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/p_mobj.c b/src/p_mobj.c index a21d676cb..6d8fd0994 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -5434,6 +5434,9 @@ void P_RunOverlays(void) mo->scale = mo->destscale = FixedMul(mo->target->scale, mo->movefactor); mo->angle = (mo->target->player ? mo->target->player->drawangle : mo->target->angle) + mo->movedir; + P_SetTarget(&mo->punt_ref, mo->target->punt_ref); + mo->reappear = mo->target->reappear; + if (!(mo->threshold & OV_DONTSCREENOFFSET)) { mo->spritexoffset = mo->target->spritexoffset; From d80689f0d1eed96447e45beeb09e70725748ffa8 Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 4 Dec 2023 20:25:15 -0800 Subject: [PATCH 3/5] K_HandleFollower: set follower punt_ref to player --- src/k_follower.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/k_follower.c b/src/k_follower.c index f288d63f1..78e233e4c 100644 --- a/src/k_follower.c +++ b/src/k_follower.c @@ -419,6 +419,7 @@ void K_HandleFollower(player_t *player) K_UpdateFollowerState(player->follower, fl->idlestate, FOLLOWERSTATE_IDLE); P_SetTarget(&player->follower->target, player->mo); // we need that to know when we need to disappear + P_SetTarget(&player->follower->punt_ref, player->mo); player->follower->angle = player->follower->old_angle = player->mo->angle; // This is safe to only spawn it here, the follower is removed then respawned when switched. @@ -427,10 +428,12 @@ void K_HandleFollower(player_t *player) bmobj = P_SpawnMobj(player->follower->x, player->follower->y, player->follower->z, MT_FOLLOWERBUBBLE_FRONT); P_SetTarget(&player->follower->hnext, bmobj); P_SetTarget(&bmobj->target, player->follower); // Used to know if we have to despawn at some point. + P_SetTarget(&bmobj->punt_ref, player->mo); bmobj = P_SpawnMobj(player->follower->x, player->follower->y, player->follower->z, MT_FOLLOWERBUBBLE_BACK); P_SetTarget(&player->follower->hnext->hnext, bmobj); // this seems absolutely stupid, I know, but this will make updating the momentums/flags of these a bit easier. P_SetTarget(&bmobj->target, player->follower); // Ditto + P_SetTarget(&bmobj->punt_ref, player->mo); } } else // follower exists, woo! From 2277b2017e9807cc666dfb6ab4888fb10c59d2ce Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 4 Dec 2023 20:25:47 -0800 Subject: [PATCH 4/5] K_UpdateTripwire: set Tripwire Blaster punt_ref to player --- src/k_kart.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index 119619bd0..e2facf4ce 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8057,6 +8057,9 @@ static void K_UpdateTripwire(player_t *player) P_SetTarget(&front->target, player->mo); P_SetTarget(&back->target, player->mo); + P_SetTarget(&front->punt_ref, player->mo); + P_SetTarget(&back->punt_ref, player->mo); + front->dispoffset = 1; front->old_angle = back->old_angle = K_MomentumAngle(player->mo); back->dispoffset = -1; From e51fa390c1d5d8d8baeb8a655a8ae6b8ea27a866 Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 4 Dec 2023 20:26:17 -0800 Subject: [PATCH 5/5] Obj_BeginEmeraldOrbit: set emerald punt_ref to orbit target --- src/objects/emerald.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/objects/emerald.c b/src/objects/emerald.c index 65b23edb6..e749efb92 100644 --- a/src/objects/emerald.c +++ b/src/objects/emerald.c @@ -276,6 +276,7 @@ static void spawn_lens_flare(mobj_t *emerald) void Obj_BeginEmeraldOrbit(mobj_t *emerald, mobj_t *target, fixed_t radius, INT32 revolution_time, tic_t fuse) { P_SetTarget(&emerald_orbit(emerald), target); + P_SetTarget(&emerald->punt_ref, target); if (P_MobjWasRemoved(emerald_award(emerald))) {