diff --git a/src/g_demo.cpp b/src/g_demo.cpp index 9ea033f53..405163790 100644 --- a/src/g_demo.cpp +++ b/src/g_demo.cpp @@ -1548,8 +1548,9 @@ skippedghosttic: if (*g->p == DEMOMARKER) { g->mo->momx = g->mo->momy = g->mo->momz = 0; -#if 1 // freeze frame (maybe more useful for time attackers) +#if 0 // freeze frame (maybe more useful for time attackers) (2024-03-11: you leave it behind anyway!) g->mo->colorized = true; + g->mo->fuse = 10*TICRATE; if (follow) follow->colorized = true; #else // dissapearing act diff --git a/src/k_hud.cpp b/src/k_hud.cpp index d5d16ab49..9d80582f6 100644 --- a/src/k_hud.cpp +++ b/src/k_hud.cpp @@ -4425,27 +4425,28 @@ static void K_drawKartMinimap(void) demoghost *g = ghosts; while (g) { - if (g->mo->skin) - skin = ((skin_t*)g->mo->skin)-skins; - else - skin = 0; - - workingPic = R_CanShowSkinInDemo(skin) ? faceprefix[skin][FACE_MINIMAP] : kp_unknownminimap; - - if (g->mo->color) + if (g->mo && !P_MobjWasRemoved(g->mo) && g->mo->skin) { - if (g->mo->colorized) - colormap = R_GetTranslationColormap(TC_RAINBOW, static_cast(g->mo->color), GTC_CACHE); + skin = ((skin_t*)g->mo->skin)-skins; + + workingPic = R_CanShowSkinInDemo(skin) ? faceprefix[skin][FACE_MINIMAP] : kp_unknownminimap; + + if (g->mo->color) + { + if (g->mo->colorized) + colormap = R_GetTranslationColormap(TC_RAINBOW, static_cast(g->mo->color), GTC_CACHE); + else + colormap = R_GetTranslationColormap(skin, static_cast(g->mo->color), GTC_CACHE); + } else - colormap = R_GetTranslationColormap(skin, static_cast(g->mo->color), GTC_CACHE); + colormap = NULL; + + interpx = R_InterpolateFixed(g->mo->old_x, g->mo->x); + interpy = R_InterpolateFixed(g->mo->old_y, g->mo->y); + + K_drawKartMinimapIcon(interpx, interpy, x, y, splitflags, workingPic, colormap); } - else - colormap = NULL; - interpx = R_InterpolateFixed(g->mo->old_x, g->mo->x); - interpy = R_InterpolateFixed(g->mo->old_y, g->mo->y); - - K_drawKartMinimapIcon(interpx, interpy, x, y, splitflags, workingPic, colormap); g = g->next; } } diff --git a/src/k_respawn.c b/src/k_respawn.c index 6bb98db0e..d2da452db 100644 --- a/src/k_respawn.c +++ b/src/k_respawn.c @@ -509,6 +509,13 @@ static void K_MovePlayerToRespawnPoint(player_t *player) player->respawn.distanceleft = 0; } + // Almost all legitimate driving, no matter how clumsy, should be faster than death in TA. + // Advance only as far as we need to prevent respawn loops! + if (modeattacking) + { + player->respawn.distanceleft = 0; + } + player->respawn.wp = player->respawn.wp->nextwaypoints[nwp]; K_RespawnAtWaypoint(player, player->respawn.wp); diff --git a/src/p_inter.c b/src/p_inter.c index fa3652788..b586c7481 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -2571,7 +2571,7 @@ static boolean P_KillPlayer(player_t *player, mobj_t *inflictor, mobj_t *source, return false; } - if (modeattacking) + if (modeattacking & ATTACKING_SPB) { // Death in SPB Attack is an instant loss. P_DoPlayerExit(player, PF_NOCONTEST);