From 7a0b36f25b61e27a0ec2e36ce7b0a1810ad78667 Mon Sep 17 00:00:00 2001 From: Clownacy Date: Wed, 21 Dec 2022 19:53:19 +0000 Subject: [PATCH] Fix Pinball bugs This fixes two bugs: - If you get multiple different shields in the crane game, then the character may have a bugged 'null' shield upon returning to the level. This is caused by the IDs of the obtained shields being OR'd together, producing an invalid ID. - In Mania Mode, the crane game should offer 1UPs, but an incorrect `RSDK::Rand` parameter was preventing it from doing so. Both of these fixes have been verified against the assembly code of the latest Steam EXE. --- SonicMania/Objects/Pinball/PBL_Crane.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SonicMania/Objects/Pinball/PBL_Crane.c b/SonicMania/Objects/Pinball/PBL_Crane.c index 27f62cdef..704a9f49f 100644 --- a/SonicMania/Objects/Pinball/PBL_Crane.c +++ b/SonicMania/Objects/Pinball/PBL_Crane.c @@ -162,8 +162,8 @@ void PBL_Crane_HandlePrizes(void) case PBL_CRANE_PRIZE_SHIELD_BUBBLE: case PBL_CRANE_PRIZE_SHIELD_FIRE: case PBL_CRANE_PRIZE_SHIELD_ELECTRIC: - globals->restartPowerups &= ~0x40; - globals->restartPowerups |= self->displayAnimator.frameID - 6; + globals->restartPowerups &= ~0x3F; + globals->restartPowerups |= self->displayAnimator.frameID - PBL_CRANE_PRIZE_SHIELD_BLUE + SHIELD_BLUE; // Converts the frame ID to a shield ID PBL_Crane->prizeID = PBL_CRANE_PRIZEID_ITEM; break; @@ -287,7 +287,7 @@ void PBL_Crane_State_CreatePrizes(void) prize->displayAnimator.frameID = i; } else { - prize->displayAnimator.frameID = RSDK.Rand(PBL_CRANE_PRIZE_RINGS, PBL_CRANE_PRIZE_1UP); + prize->displayAnimator.frameID = RSDK.Rand(PBL_CRANE_PRIZE_RINGS, PBL_CRANE_PRIZE_TABLE_RESTORE + 1); } } else { @@ -295,7 +295,7 @@ void PBL_Crane_State_CreatePrizes(void) prize->displayAnimator.frameID = PBL_CRANE_PRIZE_EGGMAN; } else { - prize->displayAnimator.frameID = RSDK.Rand(PBL_CRANE_PRIZE_RINGS, PBL_CRANE_PRIZE_1UP); + prize->displayAnimator.frameID = RSDK.Rand(PBL_CRANE_PRIZE_RINGS, PBL_CRANE_PRIZE_1UP + 1); } }