From 2effb6adc36787879516b8cb2b13023fc4c423d2 Mon Sep 17 00:00:00 2001 From: toaster Date: Fri, 5 Oct 2018 23:24:26 +0100 Subject: [PATCH] Halt frame-perfect egg crash. (The code is slightly modified from what I put in bug-reports as a potential fix, but I'm glad I was on the right track.) --- src/p_inter.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/p_inter.c b/src/p_inter.c index bd02da42..5ca9a104 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -494,11 +494,19 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) K_StripOther(player); player->kartstuff[k_itemroulette] = 1; player->kartstuff[k_roulettetype] = 2; - if (special->target && special->target->player - && (G_RaceGametype() || special->target->player->kartstuff[k_bumper] > 0)) - player->kartstuff[k_eggmanblame] = special->target->player-players; - else - player->kartstuff[k_eggmanblame] = player-players; + if (special->target && special->target->player) + { + if (G_RaceGametype() || special->target->player->kartstuff[k_bumper] > 0) + player->kartstuff[k_eggmanblame] = special->target->player-players; + else + player->kartstuff[k_eggmanblame] = player-players; + + if (special->target->hnext == special) + { + P_SetTarget(&special->target->hnext, NULL); + special->target->player->kartstuff[k_eggmanheld] = 0; + } + } P_RemoveMobj(special); return;