From 1618d61bfcc925bf5249fb2843556f051f4b6388 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Thu, 9 Apr 2020 20:56:15 -0400 Subject: [PATCH 1/3] Fix potential overflow --- src/k_kart.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 3342b809b..7ad459ad1 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -796,6 +796,7 @@ static void K_KartGetItemResult(player_t *player, SINT8 getitem) { if (getitem == KITEM_SPB || getitem == KITEM_SHRINK) // Indirect items indirectitemcooldown = 20*TICRATE; + if (getitem == KITEM_HYUDORO) // Hyudoro cooldown hyubgone = 5*TICRATE; @@ -1167,7 +1168,17 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd) && players[i].kartstuff[k_position] == 1) { // This player is first! Yay! - pdis = player->distancetofinish - players[i].distancetofinish; + + if (player->distancetofinish <= players[i].distancetofinish) + { + // Guess you're in first / tied for first? + pdis = 0; + } + else + { + // Subtract 1st's distance from your distance, to get your distance from 1st! + pdis = player->distancetofinish - players[i].distancetofinish; + } break; } } @@ -1281,7 +1292,7 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd) player->kartstuff[k_itemroulette] = 0; player->kartstuff[k_roulettetype] = 0; if (P_IsDisplayPlayer(player)) - S_StartSound(NULL, (mashed ? sfx_itrolm : sfx_itrolf)); + S_StartSound(NULL, sfx_itrolm); return; } } From 43732b386d65619d4a2b259093c35e2bc03abaf9 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Thu, 9 Apr 2020 20:57:21 -0400 Subject: [PATCH 2/3] Fix being able to hold items to get them as early as possible (Doesn't matter in v2 because it'd waste your rings to do it, but y'know how it is. Maybe port for v1.2 if it works?) --- src/k_kart.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 7ad459ad1..1f0eb3462 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1150,17 +1150,21 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd) // If the roulette finishes or the player presses BT_ATTACK, stop the roulette and calculate the item. // I'm returning via the exact opposite, however, to forgo having another bracket embed. Same result either way, I think. // Finally, if you get past this check, now you can actually start calculating what item you get. - if ((cmd->buttons & BT_ATTACK) && (player->kartstuff[k_itemroulette] >= roulettestop) + if (((cmd->buttons & BT_ATTACK) && !(player->pflags & PF_ATTACKDOWN)) + && (player->kartstuff[k_itemroulette] >= roulettestop) && !(player->kartstuff[k_eggmanheld] || player->kartstuff[k_itemheld] || player->kartstuff[k_userings])) { // Mashing reduces your chances for the good items mashed = FixedDiv((player->kartstuff[k_itemroulette])*FRACUNIT, ((TICRATE*3)+roulettestop)*FRACUNIT) - FRACUNIT; } - else if (!(player->kartstuff[k_itemroulette] >= (TICRATE*3))) - return; + else + { + if (cmd->buttons & BT_ATTACK) + player->pflags |= PF_ATTACKDOWN; - if (cmd->buttons & BT_ATTACK) - player->pflags |= PF_ATTACKDOWN; + if (!(player->kartstuff[k_itemroulette] >= (TICRATE*3))) + return; + } for (i = 0; i < MAXPLAYERS; i++) { From c8da95cbda0cf59f7f99c2d8c2f5f42d2e999ed8 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Thu, 9 Apr 2020 21:05:46 -0400 Subject: [PATCH 3/3] Revert "Fix being able to hold items to get them as early as possible" This reverts commit 43732b386d65619d4a2b259093c35e2bc03abaf9. --- src/k_kart.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 1f0eb3462..7ad459ad1 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1150,21 +1150,17 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd) // If the roulette finishes or the player presses BT_ATTACK, stop the roulette and calculate the item. // I'm returning via the exact opposite, however, to forgo having another bracket embed. Same result either way, I think. // Finally, if you get past this check, now you can actually start calculating what item you get. - if (((cmd->buttons & BT_ATTACK) && !(player->pflags & PF_ATTACKDOWN)) - && (player->kartstuff[k_itemroulette] >= roulettestop) + if ((cmd->buttons & BT_ATTACK) && (player->kartstuff[k_itemroulette] >= roulettestop) && !(player->kartstuff[k_eggmanheld] || player->kartstuff[k_itemheld] || player->kartstuff[k_userings])) { // Mashing reduces your chances for the good items mashed = FixedDiv((player->kartstuff[k_itemroulette])*FRACUNIT, ((TICRATE*3)+roulettestop)*FRACUNIT) - FRACUNIT; } - else - { - if (cmd->buttons & BT_ATTACK) - player->pflags |= PF_ATTACKDOWN; + else if (!(player->kartstuff[k_itemroulette] >= (TICRATE*3))) + return; - if (!(player->kartstuff[k_itemroulette] >= (TICRATE*3))) - return; - } + if (cmd->buttons & BT_ATTACK) + player->pflags |= PF_ATTACKDOWN; for (i = 0; i < MAXPLAYERS; i++) {