From 7d3be06795eb9f79ccfde737294c70c701c5e98a Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Tue, 30 Apr 2024 23:42:27 -0400 Subject: [PATCH 1/2] Full FREE PLAY item reel All items in the game are put into the FREE PLAY item reel, instead of the fake "time attack" behavior. Everyone's already just turning off items to get a particular one, so turn it into a feature. Tutorials are specifically set to be unaffected. --- src/k_roulette.c | 53 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/src/k_roulette.c b/src/k_roulette.c index 2e05b1862..900b851d2 100644 --- a/src/k_roulette.c +++ b/src/k_roulette.c @@ -1356,7 +1356,7 @@ void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulet } else if (K_TimeAttackRules() == true) { - kartitems_t *presetlist = K_KartItemReelRingSneaker; + kartitems_t *presetlist = NULL; // If the objective is not to go fast, it's to cause serious damage. if (battleprisons == true) @@ -1367,10 +1367,55 @@ void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulet { presetlist = K_KartItemReelSPBAttack; } - - for (i = 0; presetlist[i] != KITEM_NONE; i++) + else if (gametype == GT_TUTORIAL) { - K_PushToRouletteItemList(roulette, presetlist[i]); + presetlist = K_KartItemReelRingSneaker; + } + + if (presetlist != NULL) + { + for (i = 0; presetlist[i] != KITEM_NONE; i++) + { + K_PushToRouletteItemList(roulette, presetlist[i]); + } + } + else + { + // New FREE PLAY behavior; + // every item in the game! + + // Create the same item reel given the same inputs. + P_SetRandSeed(PR_ITEM_ROULETTE, ITEM_REEL_SEED); + + for (i = 1; i < NUMKARTRESULTS; i++) + { + if (K_ItemEnabled(i) == true) + { + spawnChance[i] = ( totalSpawnChance++ ); + } + } + + while (totalSpawnChance > 0) + { + rngRoll = P_RandomKey(PR_ITEM_ROULETTE, totalSpawnChance); + for (i = 1; i < NUMKARTRESULTS && spawnChance[i] <= rngRoll; i++) + { + continue; + } + + K_AddItemToReel(player, roulette, i); + + for (; i < NUMKARTRESULTS; i++) + { + // Be sure to fix the remaining items' odds too. + if (spawnChance[i] > 0) + { + spawnChance[i]--; + } + } + + totalSpawnChance--; + } } return; From d5141a9ea1dadc67557bf90ae4d1612f738fe76b Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Fri, 3 May 2024 22:54:37 -0400 Subject: [PATCH 2/2] Update k_roulette.c --- src/k_roulette.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/k_roulette.c b/src/k_roulette.c index 900b851d2..1c6984b0c 100644 --- a/src/k_roulette.c +++ b/src/k_roulette.c @@ -1391,7 +1391,7 @@ void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulet { if (K_ItemEnabled(i) == true) { - spawnChance[i] = ( totalSpawnChance++ ); + spawnChance[i] = ( totalSpawnChance += 1 ); } } @@ -1403,7 +1403,7 @@ void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulet continue; } - K_AddItemToReel(player, roulette, i); + K_PushToRouletteItemList(roulette, i); for (; i < NUMKARTRESULTS; i++) {