diff --git a/src/k_kart.c b/src/k_kart.c index 583057f8..32aa45d3 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -721,7 +721,7 @@ static INT32 K_KartItemOddsBalloons[NUMKARTITEMS][5] = { //P-Odds 0 1 2 3 4 /*Magnet*/ { 0, 0, 0, 0, 0 }, // Magnet - /*Boo*/ { 0, 1, 5, 2, 0 }, // Boo + /*Boo*/ { 0, 1, 3, 2, 0 }, // Boo /*Mushroom*/ { 1, 2, 5, 1, 0 }, // Mushroom /*Triple Mushroom*/ { 0, 0, 0, 0, 0 }, // Triple Mushroom /*Mega Mushroom*/ { 1, 1, 0, 0, 0 }, // Mega Mushroom @@ -740,7 +740,7 @@ static INT32 K_KartItemOddsBalloons[NUMKARTITEMS][5] = /*Triple Red Shell*/ { 1, 1, 0, 0, 0 }, // Triple Red Shell /*Lightning*/ { 0, 0, 0, 0, 0 }, // Lightning - /*Feather*/ { 0, 0, 5, 3, 1 } // Feather + /*Feather*/ { 0, 0, 3, 2, 1 } // Feather }; /** \brief Item Roulette for Kart @@ -1924,6 +1924,8 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju { source->player->kartstuff[k_comebackpoints] += 2; CONS_Printf(M_GetText("%s bombed %s!\n"), player_names[source->player-players], player_names[player-players]); + if (thing->player->kartstuff[k_comebackpoints] >= 3) + K_StealBalloon(thing->player, tmthing->player, true); } P_AddPlayerScore(source->player, 1); } @@ -2014,9 +2016,13 @@ void K_StealBalloon(player_t *player, player_t *victim, boolean force) player->kartstuff[k_balloon]++; player->kartstuff[k_comebackpoints] = 0; + player->powers[pw_flashing] = K_GetKartFlashing(player); player->kartstuff[k_comebacktimer] = comebacktime; + victim->powers[pw_flashing] = K_GetKartFlashing(victim); + victim->kartstuff[k_comebacktimer] = comebacktime; + return; } @@ -2950,12 +2956,13 @@ static void K_KartUpdatePosition(player_t *player) { if (player->exiting) return; - if (players[i].kartstuff[k_balloon] > player->kartstuff[k_balloon]) + if (players[i].kartstuff[k_balloon] == player->kartstuff[k_balloon] && players[i].score > player->score) position++; - else if (players[i].score > player->score) + else if (players[i].kartstuff[k_balloon] > player->kartstuff[k_balloon]) position++; } } + player->kartstuff[k_position] = position; } // diff --git a/src/p_inter.c b/src/p_inter.c index 380bbea3..322058d9 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -414,8 +414,8 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) { if (player->kartstuff[k_comebackmode] == 0 && !player->kartstuff[k_comebacktimer]) { - if (special->tracer && special->tracer->player) - special->tracer->player->kartstuff[k_comebackmode] = 0; + if (special->tracer) + return; P_SetTarget(&special->tracer, toucher); player->kartstuff[k_comebackmode] = 1; } diff --git a/src/p_map.c b/src/p_map.c index 4a175c92..f2fcf53c 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -1648,20 +1648,12 @@ static boolean PIT_CheckThing(mobj_t *thing) if (tmthing->player->kartstuff[k_balloon] > 0) { K_ExplodePlayer(tmthing->player, thing); - - if (thing->player->kartstuff[k_comebackpoints] >= 3) - K_StealBalloon(thing->player, tmthing->player, true); - thing->player->kartstuff[k_comebacktimer] = comebacktime; return true; } else if (thing->player->kartstuff[k_balloon] > 0) { K_ExplodePlayer(thing->player, tmthing); - - if (tmthing->player->kartstuff[k_comebackpoints] >= 3) - K_StealBalloon(tmthing->player, thing->player, true); - tmthing->player->kartstuff[k_comebacktimer] = comebacktime; return true; }