From 94ad7879caca8540bbfe39612167441374568b4d Mon Sep 17 00:00:00 2001 From: MegaMech Date: Sat, 5 Jul 2025 19:05:46 -0600 Subject: [PATCH] Fix Harder CPU Items (#421) * Fix crash * Poorly document camera * Fix harder cpu items --------- Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com> --- src/camera.c | 6 +++--- src/code_80005FD0.c | 6 ++++++ src/racing/actors_extended.c | 2 +- src/update_objects.c | 28 ++++++++++++++-------------- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/camera.c b/src/camera.c index 11c846ab5..54e42493b 100644 --- a/src/camera.c +++ b/src/camera.c @@ -1126,10 +1126,10 @@ void func_8001EE98(Player* player, Camera* camera, s8 index) { } if (gIsGamePaused == 0) { switch (D_80152300[cameraIndex]) { - case 3: + case 3: // end of race func_8001A588(&D_80152300[cameraIndex], camera, player, index, cameraIndex); break; - case 1: + case 1: // player camera if (((player->unk_0CA & 1) == 1) || ((player->unk_0CA & 2) == 2)) { func_8001E8E8(camera, player, index); break; @@ -1137,7 +1137,7 @@ void func_8001EE98(Player* player, Camera* camera, s8 index) { freecam(camera, player, index); // Runs func_8001E45C when freecam is disabled //func_8001E45C(camera, player, index); break; - case 8: + case 8: // Transition start func_8001E0C4(camera, player, index); func_8001F87C(cameraIndex); break; diff --git a/src/code_80005FD0.c b/src/code_80005FD0.c index 3e1143088..384eb28c3 100644 --- a/src/code_80005FD0.c +++ b/src/code_80005FD0.c @@ -6993,6 +6993,9 @@ void func_8001AB00(void) { void cpu_decisions_branch_item(UNUSED s32 playerId, s16* branch, s32 itemId) { s32 value = -1; switch (itemId) { + case ITEM_NONE: + value = -1; + break; case ITEM_FAKE_ITEM_BOX: value = CPU_STRATEGY_ITEM_FAKE_ITEM_BOX; break; @@ -7021,6 +7024,9 @@ void cpu_decisions_branch_item(UNUSED s32 playerId, s16* branch, s32 itemId) { if (CVarGetInteger("gHarderCPU", 0) == 1) { switch (itemId) { + case ITEM_NONE: + value = -1; + break; case ITEM_BANANA_BUNCH: value = CPU_STRATEGY_ITEM_BANANA_BUNCH; break; diff --git a/src/racing/actors_extended.c b/src/racing/actors_extended.c index fb7a8aeeb..0aed659ad 100644 --- a/src/racing/actors_extended.c +++ b/src/racing/actors_extended.c @@ -878,7 +878,7 @@ void use_thunder_item(Player* player) { } } -// Handles item use? +// Handles item use void player_use_item(Player* player) { s32 playerId = player - gPlayerOne; diff --git a/src/update_objects.c b/src/update_objects.c index 7b477881d..5dd60490f 100644 --- a/src/update_objects.c +++ b/src/update_objects.c @@ -2962,9 +2962,9 @@ ItemProbabilities grandPrixHardCPUProbabilityTable[] = { .doubleMushroom = 0, .tripleMushroom = 15, .superMushroom = 5 }, - { .none = 3, - .banana = 3, - .bananaBunch = 2, + { .none = 0, + .banana = 5, + .bananaBunch = 3, .greenShell = 0, .tripleGreenShell = 10, .redShell = 20, @@ -3006,17 +3006,17 @@ ItemProbabilities grandPrixHardCPUProbabilityTable[] = { .fakeItemBox = 5, .star = 15, .boo = 0, - .mushroom = 5, - .doubleMushroom = 5, + .mushroom = 10, + .doubleMushroom = 0, .tripleMushroom = 25, .superMushroom = 10 }, - { .none = 5, + { .none = 0, .banana = 0, .bananaBunch = 0, .greenShell = 0, .tripleGreenShell = 0, .redShell = 5, - .tripleRedShell = 20, + .tripleRedShell = 25, .blueSpinyShell = 10, .thunderbolt = 0, .fakeItemBox = 0, @@ -3026,13 +3026,13 @@ ItemProbabilities grandPrixHardCPUProbabilityTable[] = { .doubleMushroom = 0, .tripleMushroom = 25, .superMushroom = 10 }, - { .none = 5, + { .none = 0, .banana = 0, .bananaBunch = 0, .greenShell = 5, .tripleGreenShell = 0, .redShell = 5, - .tripleRedShell = 20, + .tripleRedShell = 25, .blueSpinyShell = 10, .thunderbolt = 0, .fakeItemBox = 0, @@ -3355,15 +3355,15 @@ u8 hard_cpu_gen_random_item(UNUSED s32 arg0, s16 rank) { return gen_random_item(rank, HARD_CPU_TABLE); } -s16 func_8007AFB0(s32 objectIndex, s32 arg1) { +s16 func_8007AFB0(s32 objectIndex, s32 playerId) { UNUSED s32 pad[3]; s16 randomItem; - randomItem = gen_random_item_human(gLapCountByPlayerId[arg1], gGPCurrentRaceRankByPlayerId[arg1]); + randomItem = gen_random_item_human(gLapCountByPlayerId[playerId], gGPCurrentRaceRankByPlayerId[playerId]); - if (playerHUD[arg1].itemOverride != 0) { - randomItem = (s16) playerHUD[arg1].itemOverride; - playerHUD[arg1].itemOverride = 0; + if (playerHUD[playerId].itemOverride != 0) { + randomItem = (s16) playerHUD[playerId].itemOverride; + playerHUD[playerId].itemOverride = 0; } func_800729B4(objectIndex, (s32) randomItem);