diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-04-11 21:47:47 -0400 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-04-11 21:47:47 -0400 |
commit | 4e3b3cdd3cf2f7677c01e62be56bed809471cf3c (patch) | |
tree | 02743b391060eb2bff0dddd08fe219464a1834a0 | |
parent | 8f8665e1dcfffaa83727e3cb814c82179aa3dbe3 (diff) |
Berry Crush documentation, 2
-rw-r--r-- | include/berry.h | 6 | ||||
-rw-r--r-- | include/berry_crush.h | 115 | ||||
-rw-r--r-- | include/math_util.h | 12 | ||||
-rw-r--r-- | include/save.h | 2 | ||||
-rw-r--r-- | src/battle_anim_effects_2.c | 14 | ||||
-rw-r--r-- | src/berry.c | 2 | ||||
-rw-r--r-- | src/berry_crush.c | 45 | ||||
-rw-r--r-- | src/berry_crush_2.c | 1067 | ||||
-rw-r--r-- | src/berry_crush_3.c | 555 | ||||
-rw-r--r-- | src/dodrio_berry_picking_2.c | 4 | ||||
-rw-r--r-- | src/math_util.c | 18 | ||||
-rw-r--r-- | src/oak_speech.c | 4 | ||||
-rw-r--r-- | src/pokemon_jump_2.c | 4 | ||||
-rw-r--r-- | src/save.c | 2 | ||||
-rw-r--r-- | src/start_menu.c | 4 |
15 files changed, 939 insertions, 915 deletions
diff --git a/include/berry.h b/include/berry.h index 905ce291b..ec0caf11b 100644 --- a/include/berry.h +++ b/include/berry.h @@ -67,11 +67,11 @@ const struct Berry * GetBerryInfo(u8 berryIdx); extern const struct Berry gBerries[]; -struct UnkStruct_0858AB24 { +struct BerryCrushStats { u8 unk0; - u16 unk1; + u16 powder; }; -extern const struct UnkStruct_0858AB24 gUnknown_83DFC9C[]; +extern const struct BerryCrushStats gBerryCrushStats[]; #endif // GUARD_BERRY_H diff --git a/include/berry_crush.h b/include/berry_crush.h index 1aab15032..999fb59f3 100644 --- a/include/berry_crush.h +++ b/include/berry_crush.h @@ -13,9 +13,37 @@ enum { BCTEXT_COMMSTANDBY, }; +enum { + BCCMD_BeginNormalPaletteFade = 1, + BCCMD_WaitPaletteFade, + BCCMD_PrintMessage, + BCCMD_InitGfx, + BCCMD_TeardownGfx, + BCCMD_SignalReadyToBegin, + BCCMD_AskPickBerry, + BCCMD_GoToBerryPouch, + BCCMD_WaitForOthersToPickBerries, + BCCMD_DropBerriesIntoCrusher, + BCCMD_DropLid, + BCCMD_Countdown, + BCCMD_PlayGame_Master, + BCCMD_PlayGame_Slave, + BCCMD_FinishGame, + BCCMD_HandleTimeUp, + BCCMD_TabulateResults, + BCCMD_ShowResults, + BCCMD_SaveTheGame, + BCCMD_AskPlayAgain, + BCCMD_CommunicatePlayAgainResponses, + BCCMD_FadeOutToPlayAgain, + BCCMD_PlayAgainFailureMessage, + BCCMD_GracefulExit, + BCCMD_Quit, +}; + struct BerryCrushGame_Player { - u16 unk0; + u16 berryId; u16 unk2; union { @@ -25,40 +53,26 @@ struct BerryCrushGame_Player u8 unk14[12]; }; -struct __attribute__((packed, aligned(2))) BerryCrushGame_4E -{ - u16 unk0; - u16 filler2; - u8 unk4_0:1; - u8 unk4_1:1; - s8 unk5; - u16 unk6; - u16 unk8; - u16 unkA; - u16 unkC; -}; - -struct __attribute__((packed)) BerryCrushGame_40 -{ - u8 unk0[2]; - u16 unk2[6]; - struct BerryCrushGame_4E unkE; -}; - struct BerryCrushGame_5C { u16 unk00; u8 unk02_0:1; u8 unk02_1:1; - u8 unk02_2:1; + u8 pushedAButton:1; u8 unk02_3:5; - u8 unk03; + s8 unk03; u16 unk04; u16 unk06; u16 unk08; u16 unk0A; }; +struct __attribute__((packed, aligned(2))) BerryCrushGame_4E +{ + u16 unk0; + struct BerryCrushGame_5C data; +}; + union BerryCrushGame_68 { struct BerryCrushGame_68_x @@ -70,7 +84,9 @@ union BerryCrushGame_68 s16 unk06; u16 unk08; u16 unk0A; - u16 unk0C[2][5]; + // 0: Number of A presses + // 1: Neatness + u16 stats[2][5]; u8 filler20[16]; } unk00; u8 unk30[12]; @@ -85,7 +101,7 @@ union BerryCrushGame_68 } as_five_players; }; -struct BerryCrushGame_138_C +struct BerryCrushPlayerSeatCoords { u8 unk0; u8 unk1; @@ -98,19 +114,19 @@ struct BerryCrushGame_138_C struct BerryCrushGame_138 { - u8 unk0; + u8 animBerryIdx; u8 unk1; u8 unk2; u8 unk3; - s16 unk4; - s16 unk6; - s16 unk8; - const struct BerryCrushGame_138_C *unkC[5]; - struct Sprite *unk20; - struct Sprite *unk24[5]; - struct Sprite *unk38[5]; - struct Sprite *unk4C[11]; - struct Sprite *unk78[2]; + s16 minutes; + s16 secondsInt; + s16 secondsFrac; + const struct BerryCrushPlayerSeatCoords * seatCoords[5]; + struct Sprite *coreSprite; + struct Sprite *impactSprites[5]; + struct Sprite *berrySprites[5]; + struct Sprite *sparkleSprites[11]; + struct Sprite *timerSprites[2]; u8 unk80; u8 filler81; u8 unk82; @@ -130,12 +146,12 @@ struct BerryCrushGame u8 nextCmd; u8 afterPalFadeCmd; u16 unk10; - u16 unk12; + u16 gameState; u16 unk14; - u16 unk16; + u16 pressingSpeed; s16 unk18; s16 unk1A; - int unk1C; + int powder; s32 unk20; u8 unk24; u8 unk25_0:1; @@ -145,18 +161,19 @@ struct BerryCrushGame u8 unk25_4:1; u8 unk25_5:3; u16 unk26; - u16 unk28; - s16 unk2A; - s16 unk2C; + u16 timer; + s16 depth; + s16 vibration; s16 unk2E; s16 unk30; s16 unk32; s16 unk34; u8 commandParams[10]; - struct BerryCrushGame_40 unk40; - struct BerryCrushGame_5C unk5C; + u16 sendCmd[7]; + u16 recvCmd[7]; + struct BerryCrushGame_5C localState; union BerryCrushGame_68 unk68; - struct BerryCrushGame_138 unk138; + struct BerryCrushGame_138 spritesManager; u8 bg1Buffer[0x1000]; u8 unk11C0[0x1000]; u8 bg2Buffer[0x1000]; @@ -175,21 +192,21 @@ u32 ExitBerryCrushWithCallback(MainCallback callback); void CB2_BerryCrush_GoToBerryPouch(void); void BerryCrush_SetVBlankCallback(void); void BerryCrush_UnsetVBlankCallback(void); -void sub_814B930(void); +void BerryCrush_UpdateSav2Records(void); void BerryCrush_RunOrScheduleCommand(u16 command, u8 runMode, u8 *params); void BerryCrush_SetPaletteFadeParams(u8 *params, bool8 communicateAfter, u32 selectedPals, s8 delay, u8 startY, u8 targetY, u16 palette); int sub_814D9CC(struct BerryCrushGame *arg0); int BerryCrush_InitBgs(void); int BerryCrush_TeardownBgs(void); -void sub_814DA24(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1); -void sub_814DC24(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1); +void BerryCrush_CreateBerrySprites(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1); +void BerryCrushFreeBerrySpriteGfx(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1); void sub_814DC5C(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1); bool32 sub_814DE50(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1); bool32 sub_814E644(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1); void sub_814E80C(struct BerryCrushGame *arg0); void sub_814DA04(struct BerryCrushGame *arg0); -void sub_814EB04(struct BerryCrushGame_138 *arg0); -void sub_814DB84(struct Sprite * sprite); +void BerryCrush_HideTimerSprites(struct BerryCrushGame_138 *arg0); +void SpriteCB_DropBerryIntoCrusher(struct Sprite * sprite); void ShowBerryCrushRankings(void); #endif //GUARD_BERRY_CRUSH_H diff --git a/include/math_util.h b/include/math_util.h index 71e87dad1..9f9677463 100644 --- a/include/math_util.h +++ b/include/math_util.h @@ -1,11 +1,11 @@ #ifndef GUARD_MATH_UTIL_H #define GUARD_MATH_UTIL_H -s16 sub_80D8B90(s16 y); -s16 sub_80D8AA0(s16 x, s16 y); -s32 sub_80D8B68(s32 x, s32 y); -s32 sub_80D8AE0(s32 x, s32 y); -s16 sub_80D8B40(u8 s, s16 x, s16 y); -s16 sub_80D8ABC(u8 s, s16 x, s16 y); +s16 MathUtil_Inv16(s16 y); +s16 MathUtil_Mul16(s16 x, s16 y); +s32 MathUtil_Div32(s32 x, s32 y); +s32 MathUtil_Mul32(s32 x, s32 y); +s16 MathUtil_Div16Shift(u8 s, s16 x, s16 y); +s16 MathUtil_Mul16Shift(u8 s, s16 x, s16 y); #endif //GUARD_MATH_UTIL_H diff --git a/include/save.h b/include/save.h index 32c09896a..24c03b0fa 100644 --- a/include/save.h +++ b/include/save.h @@ -114,6 +114,6 @@ bool8 sub_80DA4A0(void); u8 Save_LoadGameData(u8 saveType); u32 TryCopySpecialSaveSection(u8 sector, u8* dst); u32 TryWriteSpecialSaveSection(u8 sector, u8* src); -void sub_80DA634(u8 taskId); +void Task_SaveGame_UpdatedLinkRecords(u8 taskId); #endif // GUARD_SAVE_H diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 510b8eabb..94423bab9 100644 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -1532,7 +1532,7 @@ void AnimAirWaveProjectile(struct Sprite *sprite) { sprite->data[0] = 8; task->data[5] = 4; - a = sub_80D8B90(0x1000); + a = MathUtil_Inv16(0x1000); sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; sprite->pos2.y = 0; @@ -1551,8 +1551,8 @@ void AnimAirWaveProjectile(struct Sprite *sprite) sprite->data[1] = 0; sprite->data[6] = 0; sprite->data[5] = 0; - sprite->data[3] = sub_80D8AA0(sub_80D8AA0(b, a), sub_80D8B90(0x1C0)); - sprite->data[4] = sub_80D8AA0(sub_80D8AA0(c, a), sub_80D8B90(0x1C0)); + sprite->data[3] = MathUtil_Mul16(MathUtil_Mul16(b, a), MathUtil_Inv16(0x1C0)); + sprite->data[4] = MathUtil_Mul16(MathUtil_Mul16(c, a), MathUtil_Inv16(0x1C0)); sprite->callback = AnimAirWaveProjectile_Step1; } } @@ -1643,18 +1643,18 @@ void AnimTask_AirCutterProjectile(u8 taskId) else xDiff = attackerX - targetX; - gTasks[taskId].data[5] = sub_80D8AA0(xDiff, sub_80D8B90(gBattleAnimArgs[2] & ~1)); - gTasks[taskId].data[6] = sub_80D8AA0(gTasks[taskId].data[5], 0x80); + gTasks[taskId].data[5] = MathUtil_Mul16(xDiff, MathUtil_Inv16(gBattleAnimArgs[2] & ~1)); + gTasks[taskId].data[6] = MathUtil_Mul16(gTasks[taskId].data[5], 0x80); gTasks[taskId].data[7] = gBattleAnimArgs[2]; if (targetY >= attackerY) { yDiff = targetY - attackerY; - gTasks[taskId].data[8] = sub_80D8AA0(yDiff, sub_80D8B90(gTasks[taskId].data[5])) & ~1; + gTasks[taskId].data[8] = MathUtil_Mul16(yDiff, MathUtil_Inv16(gTasks[taskId].data[5])) & ~1; } else { yDiff = attackerY - targetY; - gTasks[taskId].data[8] = sub_80D8AA0(yDiff, sub_80D8B90(gTasks[taskId].data[5])) | 1; + gTasks[taskId].data[8] = MathUtil_Mul16(yDiff, MathUtil_Inv16(gTasks[taskId].data[5])) | 1; } gTasks[taskId].data[3] = gBattleAnimArgs[3]; diff --git a/src/berry.c b/src/berry.c index b92a41ed4..ef6999e9a 100644 --- a/src/berry.c +++ b/src/berry.c @@ -867,7 +867,7 @@ const struct Berry gBerries[] = { }; -const struct UnkStruct_0858AB24 gUnknown_83DFC9C[] = { +const struct BerryCrushStats gBerryCrushStats[] = { { 50, 20}, { 50, 20}, { 50, 20}, diff --git a/src/berry_crush.c b/src/berry_crush.c index 23b520f30..12e1a823e 100644 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -85,11 +85,11 @@ void StartBerryCrush(MainCallback callback) sBerryCrushGamePtr->localId = multiplayerId; sBerryCrushGamePtr->playerCount = playerCount; BerryCrush_InitPlayerNamesAndTextSpeed(sBerryCrushGamePtr); - sBerryCrushGamePtr->unk12 = 1; - sBerryCrushGamePtr->nextCmd = 1; - sBerryCrushGamePtr->afterPalFadeCmd = 6; + sBerryCrushGamePtr->gameState = 1; + sBerryCrushGamePtr->nextCmd = BCCMD_BeginNormalPaletteFade; + sBerryCrushGamePtr->afterPalFadeCmd = BCCMD_SignalReadyToBegin; BerryCrush_SetPaletteFadeParams(sBerryCrushGamePtr->commandParams, TRUE, 0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - BerryCrush_RunOrScheduleCommand(4, 1, sBerryCrushGamePtr->commandParams); + BerryCrush_RunOrScheduleCommand(BCCMD_InitGfx, 1, sBerryCrushGamePtr->commandParams); SetMainCallback2(CB2_BerryCrush); sBerryCrushGamePtr->taskId = CreateTask(Task_RunBerryCrushGame, 8); } @@ -101,11 +101,11 @@ static void CB2_ReturnToBerryCrushGameFromBerryPouch(void) else RemoveBagItem(gSpecialVar_ItemId, 1); - sBerryCrushGamePtr->unk68.as_four_players.others[sBerryCrushGamePtr->localId].unk0 = gSpecialVar_ItemId - FIRST_BERRY_INDEX; - sBerryCrushGamePtr->nextCmd = 1; - sBerryCrushGamePtr->afterPalFadeCmd = 9; + sBerryCrushGamePtr->unk68.as_four_players.others[sBerryCrushGamePtr->localId].berryId = gSpecialVar_ItemId - FIRST_BERRY_INDEX; + sBerryCrushGamePtr->nextCmd = BCCMD_BeginNormalPaletteFade; + sBerryCrushGamePtr->afterPalFadeCmd = BCCMD_WaitForOthersToPickBerries; BerryCrush_SetPaletteFadeParams(sBerryCrushGamePtr->commandParams, FALSE, 0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - BerryCrush_RunOrScheduleCommand(4, 1, sBerryCrushGamePtr->commandParams); + BerryCrush_RunOrScheduleCommand(BCCMD_InitGfx, 1, sBerryCrushGamePtr->commandParams); sBerryCrushGamePtr->taskId = CreateTask(Task_RunBerryCrushGame, 8); SetMainCallback2(CB2_BerryCrush); } @@ -126,51 +126,52 @@ void BerryCrush_UnsetVBlankCallback(void) SetVBlankCallback(NULL); } -void sub_814B930(void) +void BerryCrush_UpdateSav2Records(void) { u32 var0, var1; + // unk0A / (unk04 / 60) var0 = sBerryCrushGamePtr->unk68.as_four_players.unk00.unk04; var0 <<= 8; - var0 = sub_80D8B68(var0, 60 << 8); + var0 = MathUtil_Div32(var0, 60 << 8); var1 = sBerryCrushGamePtr->unk68.as_four_players.unk00.unk0A; var1 <<= 8; - var1 = sub_80D8B68(var1, var0) & 0xFFFF; - sBerryCrushGamePtr->unk16 = var1; + var1 = MathUtil_Div32(var1, var0) & 0xFFFF; + sBerryCrushGamePtr->pressingSpeed = var1; switch (sBerryCrushGamePtr->playerCount) { case 2: - if (sBerryCrushGamePtr->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[0]) + if (sBerryCrushGamePtr->pressingSpeed > gSaveBlock2Ptr->berryCrush.berryCrushResults[0]) { sBerryCrushGamePtr->unk25_1 = 1; - gSaveBlock2Ptr->berryCrush.berryCrushResults[0] = sBerryCrushGamePtr->unk16; + gSaveBlock2Ptr->berryCrush.berryCrushResults[0] = sBerryCrushGamePtr->pressingSpeed; } break; case 3: - if (sBerryCrushGamePtr->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[1]) + if (sBerryCrushGamePtr->pressingSpeed > gSaveBlock2Ptr->berryCrush.berryCrushResults[1]) { sBerryCrushGamePtr->unk25_1 = 1; - gSaveBlock2Ptr->berryCrush.berryCrushResults[1] = sBerryCrushGamePtr->unk16; + gSaveBlock2Ptr->berryCrush.berryCrushResults[1] = sBerryCrushGamePtr->pressingSpeed; } break; case 4: - if (sBerryCrushGamePtr->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[2]) + if (sBerryCrushGamePtr->pressingSpeed > gSaveBlock2Ptr->berryCrush.berryCrushResults[2]) { sBerryCrushGamePtr->unk25_1 = 1; - gSaveBlock2Ptr->berryCrush.berryCrushResults[2] = sBerryCrushGamePtr->unk16; + gSaveBlock2Ptr->berryCrush.berryCrushResults[2] = sBerryCrushGamePtr->pressingSpeed; } break; case 5: - if (sBerryCrushGamePtr->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[3]) + if (sBerryCrushGamePtr->pressingSpeed > gSaveBlock2Ptr->berryCrush.berryCrushResults[3]) { sBerryCrushGamePtr->unk25_1 = 1; - gSaveBlock2Ptr->berryCrush.berryCrushResults[3] = sBerryCrushGamePtr->unk16; + gSaveBlock2Ptr->berryCrush.berryCrushResults[3] = sBerryCrushGamePtr->pressingSpeed; } break; } - sBerryCrushGamePtr->unk1C = sBerryCrushGamePtr->unk68.as_four_players.unk00.unk00; - if (GiveBerryPowder(sBerryCrushGamePtr->unk1C)) + sBerryCrushGamePtr->powder = sBerryCrushGamePtr->unk68.as_four_players.unk00.unk00; + if (GiveBerryPowder(sBerryCrushGamePtr->powder)) return; sBerryCrushGamePtr->unk25_0 = 1; diff --git a/src/berry_crush_2.c b/src/berry_crush_2.c index 5544ca7a7..1f13387e2 100644 --- a/src/berry_crush_2.c +++ b/src/berry_crush_2.c @@ -21,28 +21,28 @@ static u32 BerryCrushCommand_WaitPaletteFade(struct BerryCrushGame * berryCrushG static u32 BerryCrushCommand_PrintMessage(struct BerryCrushGame * berryCrushGame, u8 *params); static u32 BerryCrushCommand_InitGfx(struct BerryCrushGame * berryCrushGame, u8 *params); static u32 BerryCrushCommand_TeardownGfx(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814BDBC(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814BE0C(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814BE64(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814BE7C(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814BFD0(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814C118(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814C24C(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814C850(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814C8F8(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814C990(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814CB20(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814CC0C(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814CFA8(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814D094(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814D188(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814D240(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814D31C(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814D3A4(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814D468(struct BerryCrushGame * berryCrushGame, u8 *params); -static u32 sub_814D4C8(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_SignalReadyToBegin(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_AskPickBerry(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_GoToBerryPouch(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_WaitForOthersToPickBerries(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_DropBerriesIntoCrusher(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_DropLid(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_Countdown(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_PlayGame_Master(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_PlayGame_Slave(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_FinishGame(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_HandleTimeUp(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_TabulateResults(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_ShowResults(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_SaveTheGame(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_AskPlayAgain(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_CommunicatePlayAgainResponses(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_FadeOutToPlayAgain(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_PlayAgainFailureMessage(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_GracefulExit(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 BerryCrushCommand_Quit(struct BerryCrushGame * berryCrushGame, u8 *params); static void sub_814D4D8(struct BerryCrushGame * r4); -static void sub_814D5A4(u8 *r0, u32 r1, u32 r2, u32 r3, u32 r5); +static void BerryCrush_SetShowMessageParams(u8 *params, u8 stringId, u8 flags, u16 waitKeys, u8 followupCmd); static const u8 gUnknown_846E2E0[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; static const u8 gUnknown_846E2E8[] = {0x00, 0x01, 0x02, 0x03, 0x05, 0x00, 0x00, 0x00}; @@ -63,7 +63,7 @@ ALIGNED(4) const u8 gUnknown_846E314[][4] = { {0x03, 0x05, 0x03, 0x00} }; -static const u8 *const gUnknown_846E328[] = { +static const u8 *const sBerryCrushMessages[] = { gText_BerryCrush_AreYouReady, gText_BerryCrush_WaitForOthersToChooseBerry, gText_BerryCrush_GainedXUnitsOfPowder, @@ -82,26 +82,26 @@ static u32 (*const sBerryCrushCommands[])(struct BerryCrushGame * berryCrushGame BerryCrushCommand_PrintMessage, BerryCrushCommand_InitGfx, BerryCrushCommand_TeardownGfx, - sub_814BDBC, - sub_814BE0C, - sub_814BE64, - sub_814BE7C, - sub_814BFD0, - sub_814C118, - sub_814C24C, - sub_814C850, - sub_814C8F8, - sub_814C990, - sub_814CB20, - sub_814CC0C, - sub_814CFA8, - sub_814D094, - sub_814D188, - sub_814D240, - sub_814D31C, - sub_814D3A4, - sub_814D468, - sub_814D4C8 + BerryCrushCommand_SignalReadyToBegin, + BerryCrushCommand_AskPickBerry, + BerryCrushCommand_GoToBerryPouch, + BerryCrushCommand_WaitForOthersToPickBerries, + BerryCrushCommand_DropBerriesIntoCrusher, + BerryCrushCommand_DropLid, + BerryCrushCommand_Countdown, + BerryCrushCommand_PlayGame_Master, + BerryCrushCommand_PlayGame_Slave, + BerryCrushCommand_FinishGame, + BerryCrushCommand_HandleTimeUp, + BerryCrushCommand_TabulateResults, + BerryCrushCommand_ShowResults, + BerryCrushCommand_SaveTheGame, + BerryCrushCommand_AskPlayAgain, + BerryCrushCommand_CommunicatePlayAgainResponses, + BerryCrushCommand_FadeOutToPlayAgain, + BerryCrushCommand_PlayAgainFailureMessage, + BerryCrushCommand_GracefulExit, + BerryCrushCommand_Quit }; static const u8 gUnknown_846E3B4[][4] = { @@ -119,7 +119,7 @@ void BerryCrush_RunOrScheduleCommand(u16 command, u8 runMode, u8 *params) { struct BerryCrushGame * game = GetBerryCrushGame(); - if (command > 25) + if (command >= NELEMS(sBerryCrushCommands)) command = 0; switch (runMode) { @@ -127,7 +127,7 @@ void BerryCrush_RunOrScheduleCommand(u16 command, u8 runMode, u8 *params) // Call now and set followup to game->nextCmd if (command != 0) sBerryCrushCommands[command](game, params); - if (game->nextCmd > 25) + if (game->nextCmd >= NELEMS(sBerryCrushCommands)) game->nextCmd = 0; game->cmdCallback = sBerryCrushCommands[game->nextCmd]; break; @@ -173,7 +173,7 @@ static u32 BerryCrushCommand_BeginNormalPaletteFade(struct BerryCrushGame * game gPaletteFade.bufferTransferDisabled = FALSE; BeginNormalPaletteFade(selectedPals, params[4], params[5], params[6], color); UpdatePaletteFade(); - game->nextCmd = 2; + game->nextCmd = BCCMD_WaitPaletteFade; return 0; } @@ -212,35 +212,36 @@ static u32 BerryCrushCommand_WaitPaletteFade(struct BerryCrushGame * game, u8 *p static u32 BerryCrushCommand_PrintMessage(struct BerryCrushGame * game, u8 *params) { - u16 r4 = params[3]; + u16 waitKeys; - r4 <<= 8; - r4 |= params[2]; + waitKeys = params[3]; + waitKeys <<= 8; + waitKeys |= params[2] << 0; switch (game->cmdState) { case 0: DrawDialogueFrame(0, FALSE); if (params[1] & 2) { - StringExpandPlaceholders(gStringVar4, gUnknown_846E328[params[0]]); + StringExpandPlaceholders(gStringVar4, sBerryCrushMessages[params[0]]); AddTextPrinterParameterized2(0, 2, gStringVar4, game->textSpeed, 0, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY); } else { - AddTextPrinterParameterized2(0, 2, gUnknown_846E328[params[0]], game->textSpeed, NULL, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY); + AddTextPrinterParameterized2(0, 2, sBerryCrushMessages[params[0]], game->textSpeed, NULL, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY); } CopyWindowToVram(0, COPYWIN_BOTH); break; case 1: if (!IsTextPrinterActive(0)) { - if (r4 == 0) + if (waitKeys == 0) ++game->cmdState; break; } return 0; case 2: - if (!(r4 & gMain.newKeys)) + if (!(waitKeys & gMain.newKeys)) return 0; break; case 3: @@ -268,9 +269,9 @@ static u32 BerryCrushCommand_TeardownGfx(struct BerryCrushGame * game, UNUSED u8 return 0; } -static u32 sub_814BDBC(struct BerryCrushGame * r4, UNUSED u8 *r1) +static u32 BerryCrushCommand_SignalReadyToBegin(struct BerryCrushGame * game, UNUSED u8 *params) { - switch (r4->cmdState) + switch (game->cmdState) { case 0: LinkRfu_SetRfuFuncToSend6600(); @@ -279,55 +280,55 @@ static u32 sub_814BDBC(struct BerryCrushGame * r4, UNUSED u8 *r1) if (IsLinkTaskFinished()) { PlayNewMapMusic(MUS_SLOT); - BerryCrush_RunOrScheduleCommand(7, 1, NULL); - r4->unk12 = 3; - r4->cmdState = 0; + BerryCrush_RunOrScheduleCommand(BCCMD_AskPickBerry, 1, NULL); + game->gameState = 3; + game->cmdState = 0; } return 0; } - ++r4->cmdState; + ++game->cmdState; return 0; } -static u32 sub_814BE0C(struct BerryCrushGame * r4, u8 *r5) +static u32 BerryCrushCommand_AskPickBerry(struct BerryCrushGame * game, u8 *params) { - switch (r4->cmdState) + switch (game->cmdState) { default: - ++r4->cmdState; + ++game->cmdState; break; case 0: - sub_814D4D8(r4); - sub_814D5A4(r5, 0, 1, 0, 1); - r4->nextCmd = 7; - BerryCrush_RunOrScheduleCommand(3, 1, NULL); + sub_814D4D8(game); + BerryCrush_SetShowMessageParams(params, BCTEXT_AREYOUREADY, 1, 0, BCCMD_BeginNormalPaletteFade); + game->nextCmd = BCCMD_AskPickBerry; + BerryCrush_RunOrScheduleCommand(BCCMD_PrintMessage, 1, NULL); break; case 1: - r4->nextCmd = 8; - BerryCrush_RunOrScheduleCommand(5, 1, NULL); - r4->cmdState = 2; + game->nextCmd = BCCMD_GoToBerryPouch; + BerryCrush_RunOrScheduleCommand(BCCMD_TeardownGfx, 1, NULL); + game->cmdState = 2; break; } return 0; } -static u32 sub_814BE64(struct BerryCrushGame * game, UNUSED u8 *params) +static u32 BerryCrushCommand_GoToBerryPouch(struct BerryCrushGame * game, UNUSED u8 *params) { game->cmdCallback = NULL; SetMainCallback2(CB2_BerryCrush_GoToBerryPouch); return 0; } -static u32 sub_814BE7C(struct BerryCrushGame * r5, u8 *r2) +static u32 BerryCrushCommand_WaitForOthersToPickBerries(struct BerryCrushGame * game, u8 *params) { - u8 r3; + u8 i; - switch (r5->cmdState) + switch (game->cmdState) { case 0: - sub_814D5A4(r2, 1, 0, 0, 1); - r5->nextCmd = 9; - BerryCrush_RunOrScheduleCommand(3, 1, NULL); + BerryCrush_SetShowMessageParams(params, BCTEXT_WAITFOROTHERS, 0, 0, BCCMD_BeginNormalPaletteFade); + game->nextCmd = BCCMD_WaitForOthersToPickBerries; + BerryCrush_RunOrScheduleCommand(BCCMD_PrintMessage, 1, NULL); return 0; case 1: LinkRfu_SetRfuFuncToSend6600(); @@ -335,126 +336,126 @@ static u32 sub_814BE7C(struct BerryCrushGame * r5, u8 *r2) case 2: if (!IsLinkTaskFinished()) return 0; - memset(r5->unk40.unk2, 0, sizeof(r5->unk40.unk2)); - r5->unk40.unk2[0] = r5->unk68.as_four_players.others[r5->localId].unk0; - SendBlock(0, r5->unk40.unk2, 2); + memset(game->sendCmd + 1, 0, sizeof(game->sendCmd) - 2); + game->sendCmd[1] = game->unk68.as_four_players.others[game->localId].berryId; + SendBlock(0, game->sendCmd + 1, 2); break; case 3: if (!IsLinkTaskFinished()) return 0; - r5->unk10 = 0; + game->unk10 = 0; break; case 4: - if (GetBlockReceivedStatus() != sReceivedPlayerBitmasks[r5->playerCount - 2]) + if (GetBlockReceivedStatus() != sReceivedPlayerBitmasks[game->playerCount - 2]) return 0; - for (r3 = 0; r3 < r5->playerCount; ++r3) + for (i = 0; i < game->playerCount; ++i) { - r5->unk68.as_four_players.others[r3].unk0 = gBlockRecvBuffer[r3][0]; - if (r5->unk68.as_four_players.others[r3].unk0 > 0xB0) - r5->unk68.as_four_players.others[r3].unk0 = 0; - r5->unk18 += gUnknown_83DFC9C[r5->unk68.as_four_players.others[r3].unk0].unk0; - r5->unk1C += gUnknown_83DFC9C[r5->unk68.as_four_players.others[r3].unk0].unk1; + game->unk68.as_four_players.others[i].berryId = gBlockRecvBuffer[i][0]; + if (game->unk68.as_four_players.others[i].berryId > 0xB0) + game->unk68.as_four_players.others[i].berryId = 0; + game->unk18 += gBerryCrushStats[game->unk68.as_four_players.others[i].berryId].unk0; + game->powder += gBerryCrushStats[game->unk68.as_four_players.others[i].berryId].powder; } - r5->unk10 = 0; + game->unk10 = 0; ResetBlockReceivedFlags(); - r5->unk20 = sub_80D8B68(r5->unk18 << 8, 0x2000); + game->unk20 = MathUtil_Div32(game->unk18 << 8, 0x2000); break; case 5: ClearDialogWindowAndFrame(0, TRUE); - BerryCrush_RunOrScheduleCommand(10, 1, NULL); - r5->unk12 = 4; - r5->cmdState = 0; + BerryCrush_RunOrScheduleCommand(BCCMD_DropBerriesIntoCrusher, 1, NULL); + game->gameState = 4; + game->cmdState = 0; return 0; } - ++r5->cmdState; + ++game->cmdState; return 0; } -static u32 sub_814BFD0(struct BerryCrushGame * r4, UNUSED u8 *r1) +static u32 BerryCrushCommand_DropBerriesIntoCrusher(struct BerryCrushGame * game, UNUSED u8 *params) { - switch (r4->cmdState) + switch (game->cmdState) { case 0: - sub_814DA24(r4, &r4->unk138); + BerryCrush_CreateBerrySprites(game, &game->spritesManager); LinkRfu_SetRfuFuncToSend6600(); break; case 1: if (!IsLinkTaskFinished()) return 0; - r4->unk138.unk0 = 0; - r4->unk138.unk1 = 0; - r4->unk138.unk2 = 0; - r4->unk138.unk3 = 0; + game->spritesManager.animBerryIdx = 0; + game->spritesManager.unk1 = 0; + game->spritesManager.unk2 = 0; + game->spritesManager.unk3 = 0; break; case 2: - r4->unk138.unk38[r4->unk138.unk0]->callback = sub_814DB84; - r4->unk138.unk38[r4->unk138.unk0]->affineAnimPaused = FALSE; + game->spritesManager.berrySprites[game->spritesManager.animBerryIdx]->callback = SpriteCB_DropBerryIntoCrusher; + game->spritesManager.berrySprites[game->spritesManager.animBerryIdx]->affineAnimPaused = FALSE; PlaySE(SE_NAGERU); break; case 3: - if (r4->unk138.unk38[r4->unk138.unk0]->callback == sub_814DB84) + if (game->spritesManager.berrySprites[game->spritesManager.animBerryIdx]->callback == SpriteCB_DropBerryIntoCrusher) return 0; - r4->unk138.unk38[r4->unk138.unk0] = NULL; - ++r4->unk138.unk0; + game->spritesManager.berrySprites[game->spritesManager.animBerryIdx] = NULL; + ++game->spritesManager.animBerryIdx; LinkRfu_SetRfuFuncToSend6600(); break; case 4: if (!IsLinkTaskFinished()) return 0; - if (r4->unk138.unk0 < r4->playerCount) + if (game->spritesManager.animBerryIdx < game->playerCount) { - r4->cmdState = 2; + game->cmdState = 2; return 0; } - r4->unk138.unk0 = 0; + game->spritesManager.animBerryIdx = 0; break; case 5: - sub_814DC24(r4, &r4->unk138); + BerryCrushFreeBerrySpriteGfx(game, &game->spritesManager); LinkRfu_SetRfuFuncToSend6600(); break; case 6: if (!IsLinkTaskFinished()) return 0; PlaySE(SE_RU_HYUU); - BerryCrush_RunOrScheduleCommand(11, 1, NULL); - r4->unk12 = 5; - r4->cmdState = 0; + BerryCrush_RunOrScheduleCommand(BCCMD_DropLid, 1, NULL); + game->gameState = 5; + game->cmdState = 0; return 0; } - ++r4->cmdState; + ++game->cmdState; return 0; } -static u32 sub_814C118(struct BerryCrushGame * r4, UNUSED u8 *r1) +static u32 BerryCrushCommand_DropLid(struct BerryCrushGame * game, UNUSED u8 *params) { - switch (r4->cmdState) + switch (game->cmdState) { case 0: - r4->unk2A += 4; - if (r4->unk2A < 0) + game->depth += 4; + if (game->depth < 0) return 0; - r4->unk2A = 0; - r4->unk138.unk1 = 4; - r4->unk138.unk0 = 0; - r4->unk138.unk2 = gUnknown_846E2F0[r4->unk138.unk1][0]; + game->depth = 0; + game->spritesManager.unk1 = 4; + game->spritesManager.animBerryIdx = 0; + game->spritesManager.unk2 = gUnknown_846E2F0[game->spritesManager.unk1][0]; PlaySE(SE_W070); break; case 1: - r4->unk2C = gUnknown_846E2F0[r4->unk138.unk1][r4->unk138.unk0]; - SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); - SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); - SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C); - ++r4->unk138.unk0; - if (r4->unk138.unk0 < r4->unk138.unk2) + game->vibration = gUnknown_846E2F0[game->spritesManager.unk1][game->spritesManager.animBerryIdx]; + SetGpuReg(REG_OFFSET_BG0VOFS, -game->vibration); + SetGpuReg(REG_OFFSET_BG2VOFS, -game->vibration); + SetGpuReg(REG_OFFSET_BG3VOFS, -game->vibration); + ++game->spritesManager.animBerryIdx; + if (game->spritesManager.animBerryIdx < game->spritesManager.unk2) return 0; - if (r4->unk138.unk1 == 0) + if (game->spritesManager.unk1 == 0) break; - --r4->unk138.unk1; - r4->unk138.unk2 = gUnknown_846E2F0[r4->unk138.unk1][0]; - r4->unk138.unk0 = 0; + --game->spritesManager.unk1; + game->spritesManager.unk2 = gUnknown_846E2F0[game->spritesManager.unk1][0]; + game->spritesManager.animBerryIdx = 0; return 0; case 2: - r4->unk2C = 0; + game->vibration = 0; SetGpuReg(REG_OFFSET_BG0VOFS, 0); SetGpuReg(REG_OFFSET_BG2VOFS, 0); SetGpuReg(REG_OFFSET_BG3VOFS, 0); @@ -463,19 +464,22 @@ static u32 sub_814C118(struct BerryCrushGame * r4, UNUSED u8 *r1) case 3: if (!IsLinkTaskFinished()) return 0; - BerryCrush_RunOrScheduleCommand(12, 1, NULL); - r4->unk12 = 6; - r4->cmdState = 0; + BerryCrush_RunOrScheduleCommand(BCCMD_Countdown, 1, NULL); + game->gameState = 6; + game->cmdState = 0; return 0; } - ++r4->cmdState; + ++game->cmdState; return 0; } -static u32 sub_814C24C(struct BerryCrushGame * r4, UNUSED u8 *r1) +static u32 BerryCrushCommand_Countdown(struct BerryCrushGame * r4, UNUSED u8 *r1) { switch (r4-> cmdState) { + case 0: + LinkRfu_SetRfuFuncToSend6600(); + break; case 1: if (!IsLinkTaskFinished()) return 0; @@ -484,23 +488,21 @@ static u32 sub_814C24C(struct BerryCrushGame * r4, UNUSED u8 *r1) case 2: if (IsMinigameCountdownRunning()) return 0; - // fallthrough - case 0: LinkRfu_SetRfuFuncToSend6600(); break; case 3: if (!IsLinkTaskFinished()) return 0; - r4->unk138.unk0 = 0; - r4->unk138.unk1 = 0; - r4->unk138.unk2 = 0; - r4->unk138.unk3 = 0; + r4->spritesManager.animBerryIdx = 0; + r4->spritesManager.unk1 = 0; + r4->spritesManager.unk2 = 0; + r4->spritesManager.unk3 = 0; r4->unk10 = 0; if (r4->localId == 0) - BerryCrush_RunOrScheduleCommand(13, 1, NULL); + BerryCrush_RunOrScheduleCommand(BCCMD_PlayGame_Master, 1, NULL); else - BerryCrush_RunOrScheduleCommand(14, 1, NULL); - r4->unk12 = 7; + BerryCrush_RunOrScheduleCommand(BCCMD_PlayGame_Slave, 1, NULL); + r4->gameState = 7; r4->cmdState = 0; return 0; } @@ -508,310 +510,310 @@ static u32 sub_814C24C(struct BerryCrushGame * r4, UNUSED u8 *r1) return 0; } -void sub_814C2FC(struct BerryCrushGame * r4) +static void BerryCrush_ProcessGamePartnerInput(struct BerryCrushGame * game) { - u8 r8 = 0; + u8 numPressedA = 0; u16 r3; - u16 *r2; - u8 r7 = 0; + u16 *curRecvCmd; + u8 i = 0; s32 r2_ = 0; s32 r0; - for (r7 = 0; r7 < r4->playerCount; ++r7) + for (i = 0; i < game->playerCount; ++i) { - r2 = gRecvCmds[r7]; - if ((r2[0] & 0xFF00) == 0x2F00 - && r2[1] == 2) + curRecvCmd = gRecvCmds[i]; + if ((curRecvCmd[0] & 0xFF00) == 0x2F00 + && curRecvCmd[1] == 2) { - if ((u8)r2[2] & 4) + if ((u8)curRecvCmd[2] & 4) // pushedAButton { - r4->unk5C.unk02_3 |= gUnknown_846E2E0[r7]; - r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] = 1; - ++r4->unk68.as_four_players.others[r7].unk4.as_hwords[3]; - ++r8; - r3 = r4->unk28 - r4->unk68.as_four_players.others[r7].unk2; - if (r3 >= r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] - 1 - && r3 <= r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] + 1) + game->localState.unk02_3 |= gUnknown_846E2E0[i]; + game->unk68.as_four_players.others[i].unk4.as_2d_bytes[1][5] = 1; + ++game->unk68.as_four_players.others[i].unk4.as_hwords[3]; + ++numPressedA; + r3 = game->timer - game->unk68.as_four_players.others[i].unk2; + if (r3 >= game->unk68.as_four_players.others[i].unk4.as_hwords[1] - 1 + && r3 <= game->unk68.as_four_players.others[i].unk4.as_hwords[1] + 1) { - ++r4->unk68.as_four_players.others[r7].unk4.as_hwords[0]; - r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] = r3; - if (r4->unk68.as_four_players.others[r7].unk4.as_hwords[0] > r4->unk68.as_four_players.others[r7].unk4.as_hwords[2]) - r4->unk68.as_four_players.others[r7].unk4.as_hwords[2] = r4->unk68.as_four_players.others[r7].unk4.as_hwords[0]; + ++game->unk68.as_four_players.others[i].unk4.as_hwords[0]; + game->unk68.as_four_players.others[i].unk4.as_hwords[1] = r3; + if (game->unk68.as_four_players.others[i].unk4.as_hwords[0] > game->unk68.as_four_players.others[i].unk4.as_hwords[2]) + game->unk68.as_four_players.others[i].unk4.as_hwords[2] = game->unk68.as_four_players.others[i].unk4.as_hwords[0]; } else { - r4->unk68.as_four_players.others[r7].unk4.as_hwords[0] = 0; - r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] = r3; + game->unk68.as_four_players.others[i].unk4.as_hwords[0] = 0; + game->unk68.as_four_players.others[i].unk4.as_hwords[1] = r3; } - r4->unk68.as_four_players.others[r7].unk2 = r4->unk28; - if (++r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][4] > 2) - r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][4] = 0; + game->unk68.as_four_players.others[i].unk2 = game->timer; + if (++game->unk68.as_four_players.others[i].unk4.as_2d_bytes[1][4] > 2) + game->unk68.as_four_players.others[i].unk4.as_2d_bytes[1][4] = 0; } else { - r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] = 0; + game->unk68.as_four_players.others[i].unk4.as_2d_bytes[1][5] = 0; } } } - if (r8 > 1) + if (numPressedA > 1) { - for (r7 = 0; r7 < r4->playerCount; ++r7) + for (i = 0; i < game->playerCount; ++i) { - if (r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] != 0) + if (game->unk68.as_four_players.others[i].unk4.as_2d_bytes[1][5] != 0) { - r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] |= 2; - ++r4->unk68.as_four_players.others[r7].unk4.as_hwords[4]; + game->unk68.as_four_players.others[i].unk4.as_2d_bytes[1][5] |= 2; + ++game->unk68.as_four_players.others[i].unk4.as_hwords[4]; } } } - if (r8 != 0) + if (numPressedA != 0) { - r4->unk2E += r8; - r8 += gUnknown_846E2E8[r8 - 1]; - r4->unk34 += r8; - r4->unk1A += r8; - r0 = r4->unk18; - r2_ = r4->unk1A; + game->unk2E += numPressedA; + numPressedA += gUnknown_846E2E8[numPressedA - 1]; + game->unk34 += numPressedA; + game->unk1A += numPressedA; + r0 = game->unk18; + r2_ = game->unk1A; if (r0 - r2_ > 0) { r2_ <<= 8; - r2_ = sub_80D8B68(r2_, r4->unk20); + r2_ = MathUtil_Div32(r2_, game->unk20); r2_ >>= 8; - r4->unk24 = r2_; + game->unk24 = r2_; } else { - r4->unk24 = 32; - r4->unk5C.unk02_0 = 1; + game->unk24 = 32; + game->localState.unk02_0 = 1; } } } -void sub_814C4B8(struct BerryCrushGame * r3) +void BerryCrush_BuildLocalState(struct BerryCrushGame * game) { - u8 r6 = 0; + u8 count = 0; u16 r1 = 0; - u8 r4 = 0; + u8 i = 0; - for (r4 = 0; r4 < r3->playerCount; ++r4) + for (i = 0; i < game->playerCount; ++i) { - if (r3->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] != 0) + if (game->unk68.as_four_players.others[i].unk4.as_2d_bytes[1][5] != 0) { - ++r6; - r1 = r3->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][4] + 1; - if (r3->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] & 2) + ++count; + r1 = game->unk68.as_four_players.others[i].unk4.as_2d_bytes[1][4] + 1; + if (game->unk68.as_four_players.others[i].unk4.as_2d_bytes[1][5] & 2) r1 |= 4; - r1 <<= 3 * r4; - r3->unk5C.unk08 |= r1; + r1 <<= 3 * i; + game->localState.unk08 |= r1; } } - r3->unk5C.unk04 = r3->unk24; - if (r6 == 0) + game->localState.unk04 = game->unk24; + if (count == 0) { - if (r3->unk138.unk3 != 0) - ++r3->unk138.unk0; + if (game->spritesManager.unk3 != 0) + ++game->spritesManager.animBerryIdx; else goto SET_UNK5F_0; } else { - if (r3->unk138.unk3 != 0) + if (game->spritesManager.unk3 != 0) { - if (r6 != r3->unk138.unk1) + if (count != game->spritesManager.unk1) { - r3->unk138.unk1 = r6 - 1; - r3->unk138.unk2 = gUnknown_846E314[r6 - 1][0]; + game->spritesManager.unk1 = count - 1; + game->spritesManager.unk2 = gUnknown_846E314[count - 1][0]; } else { - ++r3->unk138.unk0; + ++game->spritesManager.animBerryIdx; } } else { - r3->unk138.unk0 = 0; - r3->unk138.unk1 = r6 - 1; - r3->unk138.unk2 = gUnknown_846E314[r6 - 1][0]; - r3->unk138.unk3 = 1; + game->spritesManager.animBerryIdx = 0; + game->spritesManager.unk1 = count - 1; + game->spritesManager.unk2 = gUnknown_846E314[count - 1][0]; + game->spritesManager.unk3 = 1; } } - if (r3->unk138.unk3 != 0) + if (game->spritesManager.unk3 != 0) { - if (r3->unk138.unk0 >= r3->unk138.unk2) + if (game->spritesManager.animBerryIdx >= game->spritesManager.unk2) { - r3->unk138.unk0 = 0; - r3->unk138.unk1 = 0; - r3->unk138.unk2 = 0; - r3->unk138.unk3 = 0; + game->spritesManager.animBerryIdx = 0; + game->spritesManager.unk1 = 0; + game->spritesManager.unk2 = 0; + game->spritesManager.unk3 = 0; r1 = 0; } else { - r1 = gUnknown_846E314[r3->unk138.unk1][r3->unk138.unk0 + 1]; + r1 = gUnknown_846E314[game->spritesManager.unk1][game->spritesManager.animBerryIdx + 1]; } - r3->unk5C.unk03 = r1; + game->localState.unk03 = r1; } else { SET_UNK5F_0: - r3->unk5C.unk03 = 0; + game->localState.unk03 = 0; } - r3->unk5C.unk06 = r3->unk26; + game->localState.unk06 = game->unk26; } -void sub_814C618(struct BerryCrushGame * r5) +static void BerryCrush_HandlePlayerInput(struct BerryCrushGame * game) { - if (gMain.newKeys & A_BUTTON) - r5->unk5C.unk02_2 = 1; - if (gMain.heldKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) + game->localState.pushedAButton = 1; + if (JOY_HELD(A_BUTTON)) { - if (r5->unk68.as_four_players.others[r5->localId].unk4.as_hwords[5] < r5->unk28) - ++r5->unk68.as_four_players.others[r5->localId].unk4.as_hwords[5]; + if (game->unk68.as_four_players.others[game->localId].unk4.as_hwords[5] < game->timer) + ++game->unk68.as_four_players.others[game->localId].unk4.as_hwords[5]; } - if (r5->localId != 0 && r5->unk5C.unk02_2 == 0) + if (game->localId != 0 && game->localState.pushedAButton == 0) return; - r5->unk5C.unk00 = 2; - if (r5->unk28 % 30 == 0) + game->localState.unk00 = 2; + if (game->timer % 30 == 0) { - if (r5->unk2E > gUnknown_846E3C4[r5->playerCount - 2]) + if (game->unk2E > gUnknown_846E3C4[game->playerCount - 2]) { - ++r5->unk30; - r5->unk25_4 = 1; + ++game->unk30; + game->unk25_4 = 1; } else { - r5->unk25_4 = 0; + game->unk25_4 = 0; } - r5->unk2E = 0; - ++r5->unk32; + game->unk2E = 0; + ++game->unk32; } - if (r5->unk28 % 15 == 0) + if (game->timer % 15 == 0) { - if (r5->unk34 < gUnknown_846E3B4[r5->playerCount - 2][0]) - r5->unk25_5 = 0; - else if (r5->unk34 < gUnknown_846E3B4[r5->playerCount - 2][1]) - r5->unk25_5 = 1; - else if (r5->unk34 < gUnknown_846E3B4[r5->playerCount - 2][2]) - r5->unk34 = 2; // typo since r5->unk34 will be reset? - else if (r5->unk34 < gUnknown_846E3B4[r5->playerCount - 2][3]) - r5->unk34 = 3; // typo since r5->unk34 will be reset? + if (game->unk34 < gUnknown_846E3B4[game->playerCount - 2][0]) + game->unk25_5 = 0; + else if (game->unk34 < gUnknown_846E3B4[game->playerCount - 2][1]) + game->unk25_5 = 1; + else if (game->unk34 < gUnknown_846E3B4[game->playerCount - 2][2]) + game->unk34 = 2; // typo since game->unk34 will be reset? + else if (game->unk34 < gUnknown_846E3B4[game->playerCount - 2][3]) + game->unk34 = 3; // typo since game->unk34 will be reset? else - r5->unk25_5 = 4; - r5->unk34 = 0; + game->unk25_5 = 4; + game->unk34 = 0; } else { - ++r5->unk10; - if (r5->unk10 > 60) + ++game->unk10; + if (game->unk10 > 60) { - if (r5->unk10 > 70) + if (game->unk10 > 70) { sub_80FBA44(); - r5->unk10 = 0; + game->unk10 = 0; } - else if (r5->unk5C.unk02_3 == 0) + else if (game->localState.unk02_3 == 0) { sub_80FBA44(); - r5->unk10 = 0; + game->unk10 = 0; } } } - if (r5->unk28 >= 36000) - r5->unk5C.unk02_0 = 1; - r5->unk5C.unk02_1 = r5->unk25_4; - r5->unk5C.unk0A = r5->unk25_5; - memcpy(r5->unk40.unk2, &r5->unk5C, sizeof(r5->unk40.unk2)); - RfuPrepareSend0x2f00(r5->unk40.unk2); + if (game->timer >= 36000) + game->localState.unk02_0 = 1; + game->localState.unk02_1 = game->unk25_4; + game->localState.unk0A = game->unk25_5; + memcpy(&game->sendCmd[1], &game->localState, sizeof(game->sendCmd) - 2); + RfuPrepareSend0x2f00(game->sendCmd + 1); } -void sub_814C7BC(struct BerryCrushGame * r5) +void BerryCrush_UpdateGameState(struct BerryCrushGame * game) { struct BerryCrushGame_4E * r4_; #ifndef NONMATCHING - register u32 r4 asm("r4"); - register u32 r0 asm("r0"); + register u32 i asm("r4"); + register u32 iPlusPlus asm("r0"); - for (r4 = 0; r4 < r5->playerCount; r4 = (u8)r0) + for (i = 0; i < game->playerCount; i = (u8)iPlusPlus) { - r5->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] = 0; - r0 = r4 + 1; + game->unk68.as_four_players.others[i].unk4.as_2d_bytes[1][5] = 0; + iPlusPlus = i + 1; } #else - u8 r4; + u8 i; - for (r4 = 0; r4 < r5->unk9; ++r4) - r5->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] = 0; + for (i = 0; i < game->playerCount; ++i) + game->unk68.as_four_players.others[i].unk4.as_2d_bytes[1][5] = 0; #endif if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00 || gRecvCmds[0][1] != 2) { - r5->unk25_2 = 0; + game->unk25_2 = 0; } else { - r4_ = &r5->unk40.unkE; + r4_ = (struct BerryCrushGame_4E *)&game->recvCmd; memcpy(r4_, gRecvCmds, sizeof(struct BerryCrushGame_4E)); - r5->unk2A = r4_->unk6; - r5->unk2C = r4_->unk5; - r5->unk28 = r4_->unk8; - sub_814DC5C(r5, &r5->unk138); - if (r4_->unk4_0) - r5->unk25_3 = 1; + game->depth = r4_->data.unk04; + game->vibration = r4_->data.unk03; + game->timer = r4_->data.unk06; + sub_814DC5C(game, &game->spritesManager); + if (r4_->data.unk02_0) + game->unk25_3 = 1; } } -static u32 sub_814C850(struct BerryCrushGame * r4, UNUSED u8 *r1) +static u32 BerryCrushCommand_PlayGame_Master(struct BerryCrushGame * game, UNUSED u8 *params) { - memset(&r4->unk5C, 0, sizeof(r4->unk5C)); - memset(&r4->unk40.unkE, 0, sizeof(r4->unk40.unkE)); - sub_814C7BC(r4); - SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); - SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); - SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C); - if (r4->unk25_3) + memset(&game->localState, 0, sizeof(game->localState)); + memset(&game->recvCmd, 0, sizeof(game->recvCmd)); + BerryCrush_UpdateGameState(game); + SetGpuReg(REG_OFFSET_BG0VOFS, -game->vibration); + SetGpuReg(REG_OFFSET_BG2VOFS, -game->vibration); + SetGpuReg(REG_OFFSET_BG3VOFS, -game->vibration); + if (game->unk25_3) { - if (r4->unk28 >= 36000) + if (game->timer >= 36000) { - r4->unk28 = 36000; - BerryCrush_RunOrScheduleCommand(16, 1, NULL); + game->timer = 36000; + BerryCrush_RunOrScheduleCommand(BCCMD_HandleTimeUp, 1, NULL); } else { - BerryCrush_RunOrScheduleCommand(15, 1, NULL); + BerryCrush_RunOrScheduleCommand(BCCMD_FinishGame, 1, NULL); } - r4->unk10 = 0; - r4->cmdState = 0; + game->unk10 = 0; + game->cmdState = 0; return 0; } else { - ++r4->unk26; - sub_814C2FC(r4); - sub_814C4B8(r4); - sub_814C618(r4); + ++game->unk26; + BerryCrush_ProcessGamePartnerInput(game); + BerryCrush_BuildLocalState(game); + BerryCrush_HandlePlayerInput(game); return 0; } } -static u32 sub_814C8F8(struct BerryCrushGame * r4, UNUSED u8 *r1) +static u32 BerryCrushCommand_PlayGame_Slave(struct BerryCrushGame * r4, UNUSED u8 *r1) { - memset(&r4->unk5C, 0, sizeof(r4->unk5C)); - memset(&r4->unk40.unkE, 0, sizeof(r4->unk40.unkE)); - sub_814C7BC(r4); - SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); - SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); - SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C); + memset(&r4->localState, 0, sizeof(r4->localState)); + memset(&r4->recvCmd, 0, sizeof(r4->recvCmd)); + BerryCrush_UpdateGameState(r4); + SetGpuReg(REG_OFFSET_BG0VOFS, -r4->vibration); + SetGpuReg(REG_OFFSET_BG2VOFS, -r4->vibration); + SetGpuReg(REG_OFFSET_BG3VOFS, -r4->vibration); if (r4->unk25_3) { - if (r4->unk28 >= 36000) + if (r4->timer >= 36000) { - r4->unk28 = 36000; - BerryCrush_RunOrScheduleCommand(16, 1, NULL); + r4->timer = 36000; + BerryCrush_RunOrScheduleCommand(BCCMD_HandleTimeUp, 1, NULL); } else { - BerryCrush_RunOrScheduleCommand(15, 1, NULL); + BerryCrush_RunOrScheduleCommand(BCCMD_FinishGame, 1, NULL); } r4->unk10 = 0; r4->cmdState = 0; @@ -819,89 +821,89 @@ static u32 sub_814C8F8(struct BerryCrushGame * r4, UNUSED u8 *r1) } else { - sub_814C618(r4); + BerryCrush_HandlePlayerInput(r4); return 0; } } -static u32 sub_814C990(struct BerryCrushGame * r4, UNUSED u8 *r1) +static u32 BerryCrushCommand_FinishGame(struct BerryCrushGame * game, UNUSED u8 *params) { - switch (r4->cmdState) + switch (game->cmdState) { case 0: - r4->unk12 = 8; + game->gameState = 8; PlaySE(SE_W070); BlendPalettes(0xFFFFFFFF, 8, RGB(31, 31, 0)); - r4->unk138.unk0 = 2; + game->spritesManager.animBerryIdx = 2; break; case 1: - if (--r4->unk138.unk0 != 255) + if (--game->spritesManager.animBerryIdx != 255) return 0; BlendPalettes(0xFFFFFFFF, 0, RGB(31, 31, 0)); - r4->unk138.unk1 = 4; - r4->unk138.unk0 = 0; - r4->unk138.unk2 = gUnknown_846E2F0[r4->unk138.unk1][0]; + game->spritesManager.unk1 = 4; + game->spritesManager.animBerryIdx = 0; + game->spritesManager.unk2 = gUnknown_846E2F0[game->spritesManager.unk1][0]; break; case 2: - r4->unk2C = gUnknown_846E2F0[r4->unk138.unk1][r4->unk138.unk0]; - SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); - SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); - SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C); - if (++r4->unk138.unk0 < r4->unk138.unk2) + game->vibration = gUnknown_846E2F0[game->spritesManager.unk1][game->spritesManager.animBerryIdx]; + SetGpuReg(REG_OFFSET_BG0VOFS, -game->vibration); + SetGpuReg(REG_OFFSET_BG2VOFS, -game->vibration); + SetGpuReg(REG_OFFSET_BG3VOFS, -game->vibration); + if (++game->spritesManager.animBerryIdx < game->spritesManager.unk2) return 0; - if (r4->unk138.unk1 != 0) + if (game->spritesManager.unk1 != 0) { - --r4->unk138.unk1; - r4->unk138.unk2 = gUnknown_846E2F0[r4->unk138.unk1][0]; - r4->unk138.unk0 = 0; + --game->spritesManager.unk1; + game->spritesManager.unk2 = gUnknown_846E2F0[game->spritesManager.unk1][0]; + game->spritesManager.animBerryIdx = 0; return 0; } break; case 3: - r4->unk2C = 0; + game->vibration = 0; SetGpuReg(REG_OFFSET_BG0VOFS, 0); SetGpuReg(REG_OFFSET_BG2VOFS, 0); SetGpuReg(REG_OFFSET_BG3VOFS, 0); break; case 4: - if (!sub_814DE50(r4, &r4->unk138)) + if (!sub_814DE50(game, &game->spritesManager)) return 0; LinkRfu_SetRfuFuncToSend6600(); - r4->unk10 = 0; + game->unk10 = 0; break; case 5: if (!IsLinkTaskFinished()) return 0; - BerryCrush_RunOrScheduleCommand(17, 1, NULL); - r4->unk10 = 0; - r4->cmdState = 0; + BerryCrush_RunOrScheduleCommand(BCCMD_TabulateResults, 1, NULL); + game->unk10 = 0; + game->cmdState = 0; return 0; } - ++r4->cmdState; + ++game->cmdState; return 0; } -static u32 sub_814CB20(struct BerryCrushGame * r5, u8 *r6) +static u32 BerryCrushCommand_HandleTimeUp(struct BerryCrushGame * game, u8 *params) { - switch (r5->cmdState) + switch (game->cmdState) { case 0: - r5->unk12 = 9; + game->gameState = 9; PlaySE(SE_HAZURE); BlendPalettes(0xFFFFFFFF, 8, RGB(31, 0, 0)); - r5->unk138.unk0 = 4; + game->spritesManager.animBerryIdx = 4; break; case 1: - if (--r5->unk138.unk0 != 255) + if (--game->spritesManager.animBerryIdx != 255) return 0; BlendPalettes(0xFFFFFFFF, 0, RGB(31, 0, 0)); - r5->unk138.unk0 = 0; + game->spritesManager.animBerryIdx = 0; break; case 2: - if (!sub_814DE50(r5, &r5->unk138)) + if (!sub_814DE50(game, &game->spritesManager)) return 0; LinkRfu_SetRfuFuncToSend6600(); - r5->unk10 = 0; + game->unk10 = 0; SetGpuReg(REG_OFFSET_BG0VOFS, 0); SetGpuReg(REG_OFFSET_BG2VOFS, 0); SetGpuReg(REG_OFFSET_BG3VOFS, 0); @@ -909,87 +911,89 @@ static u32 sub_814CB20(struct BerryCrushGame * r5, u8 *r6) case 3: if (!IsLinkTaskFinished()) return 0; - ConvertIntToDecimalStringN(gStringVar1, r5->unk1C, STR_CONV_MODE_LEFT_ALIGN, 6); - sub_814D5A4(r6, 7, 1, 0, 0); - r5->nextCmd = 19; - BerryCrush_RunOrScheduleCommand(3, 1, NULL); - r5->unk10 = 0; - r5->cmdState = 0; + ConvertIntToDecimalStringN(gStringVar1, game->powder, STR_CONV_MODE_LEFT_ALIGN, 6); + BerryCrush_SetShowMessageParams(params, BCTEXT_TIMEUP, 1, 0, 0); + game->nextCmd = BCCMD_SaveTheGame; + BerryCrush_RunOrScheduleCommand(BCCMD_PrintMessage, 1, NULL); + game->unk10 = 0; + game->cmdState = 0; return 0; } - ++r5->cmdState; + ++game->cmdState; return 0; } -static u32 sub_814CC0C(struct BerryCrushGame * r7, UNUSED u8 *r1) +static u32 BerryCrushCommand_TabulateResults(struct BerryCrushGame * game, UNUSED u8 *params) { - u8 r8, r4_; + u8 i, j; s32 r2; s32 r4; u8 r6; // ??? - switch (r7->cmdState) + switch (game->cmdState) { case 0: - memset(r7->unk40.unk2, 0, 2 * sizeof(u16)); - if (r7->unk68.as_four_players.others[r7->localId].unk4.as_hwords[5] > r7->unk28) - r7->unk68.as_four_players.others[r7->localId].unk4.as_hwords[5] = r7->unk28; - r7->unk40.unk2[0] = r7->unk68.as_four_players.others[r7->localId].unk4.as_hwords[5]; - SendBlock(0, r7->unk40.unk2, 2); + memset(game->sendCmd + 1, 0, 2 * sizeof(u16)); + if (game->unk68.as_four_players.others[game->localId].unk4.as_hwords[5] > game->timer) + game->unk68.as_four_players.others[game->localId].unk4.as_hwords[5] = game->timer; + game->sendCmd[1] = game->unk68.as_four_players.others[game->localId].unk4.as_hwords[5]; + SendBlock(0, game->sendCmd + 1, 2); break; case 1: if (!IsLinkTaskFinished()) return 0; - r7->unk10 = 0; + game->unk10 = 0; break; case 2: - if (GetBlockReceivedStatus() != sReceivedPlayerBitmasks[r7->playerCount - 2]) + if (GetBlockReceivedStatus() != sReceivedPlayerBitmasks[game->playerCount - 2]) return 0; - for (r8 = 0; r8 < r7->playerCount; ++r8) - r7->unk68.as_four_players.others[r8].unk4.as_hwords[5] = gBlockRecvBuffer[r8][0]; - r7->unk10 = 0; - r7->unk40.unk2[0] = 0; + for (i = 0; i < game->playerCount; ++i) + game->unk68.as_four_players.others[i].unk4.as_hwords[5] = gBlockRecvBuffer[i][0]; + game->unk10 = 0; + game->sendCmd[1] = 0; ResetBlockReceivedFlags(); - if (r7->localId == 0) - r7->cmdState = 3; + if (game->localId == 0) + game->cmdState = 3; else - r7->cmdState = 6; + game->cmdState = 6; return 0; case 3: memset( - &r7->unk68, + &game->unk68, 0, sizeof(struct BerryCrushGame_68_x_SubStruct) ); - r7->unk68.as_four_players.unk00.unk04 = r7->unk28; - r7->unk68.as_four_players.unk00.unk06 = r7->unk18 / (r7->unk28 / 60); - r2 = sub_80D8AE0(r7->unk30 << 8, 0x3200); - r2 = sub_80D8B68(r2, r7->unk32 << 8) + 0x3200; + game->unk68.as_four_players.unk00.unk04 = game->timer; + game->unk68.as_four_players.unk00.unk06 = game->unk18 / (game->timer / 60); + // (unk30 * 50 / unk32) + 50 + r2 = MathUtil_Mul32(game->unk30 << 8, 50 << 8); + r2 = MathUtil_Div32(r2, game->unk32 << 8) + (50 << 8); r2 >>= 8; - r7->unk68.as_four_players.unk00.unk08 = r2 & 0x7F; + game->unk68.as_four_players.unk00.unk08 = r2 & 0x7F; + // powder + playerCount * (r2 / 100) r2 <<= 8; - r2 = sub_80D8B68(r2, 0x6400); - r4 = (r7->unk1C * r7->playerCount) << 8; - r4 = sub_80D8AE0(r4, r2); - r7->unk68.as_four_players.unk00.unk00 = r4 >> 8; - r7->unk68.as_five_players.players[0].unk4.as_2d_bytes[0][7] = Random() % 3; - for (r6 = 0, r8 = 0; r8 < r7->playerCount; ++r8) + r2 = MathUtil_Div32(r2, 100 << 8); + r4 = (game->powder * game->playerCount) << 8; + r4 = MathUtil_Mul32(r4, r2); + game->unk68.as_four_players.unk00.unk00 = r4 >> 8; + game->unk68.as_five_players.players[0].unk4.as_2d_bytes[0][7] = Random() % 3; + for (r6 = 0, i = 0; i < game->playerCount; ++i) { - r7->unk68.as_five_players.players[0].unk4.as_2d_bytes[0][r8] = r8; - r7->unk68.as_five_players.players[0].unk4.as_2d_bytes[1][r8] = r8; - r7->unk68.as_four_players.unk00.unk0C[0][r8] = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3]; - r7->unk68.as_four_players.unk00.unk0A += r7->unk68.as_four_players.unk00.unk0C[0][r8]; - switch (r7->unk68.as_five_players.players[0].unk4.as_2d_bytes[0][7]) + game->unk68.as_five_players.players[0].unk4.as_2d_bytes[0][i] = i; + game->unk68.as_five_players.players[0].unk4.as_2d_bytes[1][i] = i; + game->unk68.as_four_players.unk00.stats[0][i] = game->unk68.as_four_players.others[i].unk4.as_hwords[3]; + game->unk68.as_four_players.unk00.unk0A += game->unk68.as_four_players.unk00.stats[0][i]; + switch (game->unk68.as_five_players.players[0].unk4.as_2d_bytes[0][7]) { case 0: - if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] != 0) + if (game->unk68.as_four_players.others[i].unk4.as_hwords[3] != 0) { - r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[2]; + r2 = game->unk68.as_four_players.others[i].unk4.as_hwords[2]; r2 <<= 8; - r2 = sub_80D8AE0(r2, 0x6400); - r4 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3]; + r2 = MathUtil_Mul32(r2, 0x6400); + r4 = game->unk68.as_four_players.others[i].unk4.as_hwords[3]; r4 <<= 8; - r4 = sub_80D8B68(r2, r4); + r4 = MathUtil_Div32(r2, r4); } else { @@ -997,14 +1001,14 @@ static u32 sub_814CC0C(struct BerryCrushGame * r7, UNUSED u8 *r1) } break; case 1: - if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] != 0) + if (game->unk68.as_four_players.others[i].unk4.as_hwords[3] != 0) { - r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[4]; + r2 = game->unk68.as_four_players.others[i].unk4.as_hwords[4]; r2 <<= 8; - r2 = sub_80D8AE0(r2, 0x6400); - r4 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3]; + r2 = MathUtil_Mul32(r2, 0x6400); + r4 = game->unk68.as_four_players.others[i].unk4.as_hwords[3]; r4 <<= 8; - r4 = sub_80D8B68(r2, r4); + r4 = MathUtil_Div32(r2, r4); } else { @@ -1012,159 +1016,159 @@ static u32 sub_814CC0C(struct BerryCrushGame * r7, UNUSED u8 *r1) } break; case 2: - if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] == 0) + if (game->unk68.as_four_players.others[i].unk4.as_hwords[3] == 0) { r4 = 0; } - else if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[5] >= r7->unk28) + else if (game->unk68.as_four_players.others[i].unk4.as_hwords[5] >= game->timer) { r4 = 0x6400; } else { - r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[5]; + r2 = game->unk68.as_four_players.others[i].unk4.as_hwords[5]; r2 <<= 8; - r2 = sub_80D8AE0(r2, 0x6400); - r4 = r7->unk28; + r2 = MathUtil_Mul32(r2, 0x6400); + r4 = game->timer; r4 <<= 8; - r4 = sub_80D8B68(r2, r4); + r4 = MathUtil_Div32(r2, r4); } break; } r4 >>= 4; - r7->unk68.as_four_players.unk00.unk0C[1][r8] = r4; + game->unk68.as_four_players.unk00.stats[1][i] = r4; } break; case 4: - for (r6 = 0, r8 = 0; r8 < r7->playerCount - 1; ++r8) + for (r6 = 0, i = 0; i < game->playerCount - 1; ++i) { - for (r4_ = r7->playerCount - 1; r4_ > r8; --r4_) + for (j = game->playerCount - 1; j > i; --j) { u16 r0; u8 r3; - u16 *sp00 = r7->unk68.as_four_players.unk00.unk0C[0]; - u8 *sp04 = r7->unk68.as_five_players.players[0].unk4.as_2d_bytes[0]; - u8 *r10 = r7->unk68.as_five_players.players[0].unk4.as_2d_bytes[1]; - u16 *r9 = r7->unk68.as_four_players.unk00.unk0C[1]; - s32 r12 = r4_ - 1; - u16 *p1 = sp00 + r12; // these have to be here - u16 *p2 = sp00 + r4_; // to swap operands. macro? + u16 *numPresses_p = game->unk68.as_four_players.unk00.stats[0]; + u8 *sp04 = game->unk68.as_five_players.players[0].unk4.as_2d_bytes[0]; + u8 *r10 = game->unk68.as_five_players.players[0].unk4.as_2d_bytes[1]; + u16 *r9 = game->unk68.as_four_players.unk00.stats[1]; + s32 r12 = j - 1; + u16 *p1 = numPresses_p + r12; // these have to be here + u16 *p2 = numPresses_p + j; // to swap operands. macro? if (*p1 < *p2) { - r0 = sp00[r4_]; - sp00[r4_] = sp00[r12]; - sp00[r12] = r0; - r3 = sp04[r4_]; - sp04[r4_] = sp04[r12]; + r0 = numPresses_p[j]; + numPresses_p[j] = numPresses_p[r12]; + numPresses_p[r12] = r0; + r3 = sp04[j]; + sp04[j] = sp04[r12]; sp04[r12] = r3; } p1 = r9 + r12; - p2 = r9 + r4_; + p2 = r9 + j; if (*p1 < *p2) { - r0 = r9[r4_]; - r9[r4_] = r9[r12]; + r0 = r9[j]; + r9[j] = r9[r12]; r9[r12] = r0; - r3 = r10[r4_]; - r10[r4_] = r10[r12]; + r3 = r10[j]; + r10[j] = r10[r12]; r10[r12] = r3; } } } SendBlock( 0, - &r7->unk68, + &game->unk68, sizeof(struct BerryCrushGame_68_x_SubStruct) ); break; case 5: if (!IsLinkTaskFinished()) return 0; - r7->unk10 = 0; + game->unk10 = 0; break; case 6: if (GetBlockReceivedStatus() != 1) return 0; memset( - &r7->unk68, + &game->unk68, 0, sizeof(struct BerryCrushGame_68_x_SubStruct) ); memcpy( - &r7->unk68, + &game->unk68, gBlockRecvBuffer, sizeof(struct BerryCrushGame_68_x_SubStruct) ); ResetBlockReceivedFlags(); - r7->unk10 = 0; + game->unk10 = 0; break; case 7: - sub_814B930(); - BerryCrush_RunOrScheduleCommand(18, 1, NULL); - r7->unk12 = 11; - r7->cmdState = 0; - r7->unk24 = 0; + BerryCrush_UpdateSav2Records(); + BerryCrush_RunOrScheduleCommand(BCCMD_ShowResults, 1, NULL); + game->gameState = 11; + game->cmdState = 0; + game->unk24 = 0; return 0; } - ++r7->cmdState; + ++game->cmdState; return 0; } -static u32 sub_814CFA8(struct BerryCrushGame * r5, u8 *r6) +static u32 BerryCrushCommand_ShowResults(struct BerryCrushGame * game, u8 *params) { - switch (r5->cmdState) + switch (game->cmdState) { case 0: - if (!sub_814E644(r5, &r5->unk138)) + if (!sub_814E644(game, &game->spritesManager)) return 0; break; case 1: CopyBgTilemapBufferToVram(0); - r5->unk138.unk0 = 30; + game->spritesManager.animBerryIdx = 30; break; case 2: - if (r5->unk138.unk0 != 0) + if (game->spritesManager.animBerryIdx != 0) { - --r5->unk138.unk0; + --game->spritesManager.animBerryIdx; return 0; } - if (!(gMain.newKeys & A_BUTTON)) + if (!JOY_NEW(A_BUTTON)) return 0; PlaySE(SE_SELECT); - sub_814E80C(r5); + sub_814E80C(game); break; case 3: - if (r5->unk12 <= 12) + if (game->gameState <= 12) { - ++r5->unk12; - r5->cmdState = 0; + ++game->gameState; + game->cmdState = 0; return 0; } break; case 4: - ConvertIntToDecimalStringN(gStringVar1, r5->unk1C, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar1, game->powder, STR_CONV_MODE_LEFT_ALIGN, 6); ConvertIntToDecimalStringN(gStringVar2, GetBerryPowder(), STR_CONV_MODE_LEFT_ALIGN, 6); - sub_814D5A4(r6, 2, 3, 0, 0); - r5->nextCmd = 19; - BerryCrush_RunOrScheduleCommand(3, 1, NULL); - r5->cmdState = 0; + BerryCrush_SetShowMessageParams(params, BCTEXT_GAINEDPOWDER, 3, 0, 0); + game->nextCmd = BCCMD_SaveTheGame; + BerryCrush_RunOrScheduleCommand(BCCMD_PrintMessage, 1, NULL); + game->cmdState = 0; return 0; } - ++r5->cmdState; + ++game->cmdState; return 0; } -static u32 sub_814D094(struct BerryCrushGame * r5, u8 *r4) +static u32 BerryCrushCommand_SaveTheGame(struct BerryCrushGame * r5, u8 *r4) { switch (r5->cmdState) { case 0: - if (r5->unk28 >= 36000) - sub_814EB04(&r5->unk138); - sub_814D5A4(r4, 8, 0, 0, 1); - r5->nextCmd = 19; - BerryCrush_RunOrScheduleCommand(3, 1, NULL); + if (r5->timer >= 36000) + BerryCrush_HideTimerSprites(&r5->spritesManager); + BerryCrush_SetShowMessageParams(r4, BCTEXT_COMMSTANDBY, 0, 0, BCCMD_BeginNormalPaletteFade); + r5->nextCmd = BCCMD_SaveTheGame; + BerryCrush_RunOrScheduleCommand(BCCMD_PrintMessage, 1, NULL); r5->cmdState = 0; return 0; case 1: @@ -1176,15 +1180,15 @@ static u32 sub_814D094(struct BerryCrushGame * r5, u8 *r4) DrawDialogueFrame(0, FALSE); AddTextPrinterParameterized2(0, 2, gText_SavingDontTurnOffThePower2, 0, NULL, 2, 1, 3); CopyWindowToVram(0, COPYWIN_BOTH); - CreateTask(sub_80DA634, 0); + CreateTask(Task_SaveGame_UpdatedLinkRecords, 0); break; case 3: - if (FuncIsActiveTask(sub_80DA634)) + if (FuncIsActiveTask(Task_SaveGame_UpdatedLinkRecords)) return 0; break; case 4: - BerryCrush_RunOrScheduleCommand(20, 1, NULL); - r5->unk12 = 15; + BerryCrush_RunOrScheduleCommand(BCCMD_AskPlayAgain, 1, NULL); + r5->gameState = 15; r5->cmdState = 0; return 0; } @@ -1192,7 +1196,7 @@ static u32 sub_814D094(struct BerryCrushGame * r5, u8 *r4) return 0; } -static u32 sub_814D188(struct BerryCrushGame * r5, u8 *r6) +static u32 BerryCrushCommand_AskPlayAgain(struct BerryCrushGame * r5, u8 *r6) { s32 r4; #ifndef NONMATCHING @@ -1204,9 +1208,9 @@ static u32 sub_814D188(struct BerryCrushGame * r5, u8 *r6) switch (r5->cmdState) { case 0: - sub_814D5A4(r6, 4, 0, 0, 1); - r5->nextCmd = 20; - BerryCrush_RunOrScheduleCommand(3, 1, NULL); + BerryCrush_SetShowMessageParams(r6, BCTEXT_ASKPLAYAGAIN, 0, 0, BCCMD_BeginNormalPaletteFade); + r5->nextCmd = BCCMD_AskPlayAgain; + BerryCrush_RunOrScheduleCommand(BCCMD_PrintMessage, 1, NULL); r0 = 0; r5->cmdState = r0; // dunno what it's doing because it's already in case 0 return 0; @@ -1216,7 +1220,7 @@ static u32 sub_814D188(struct BerryCrushGame * r5, u8 *r6) case 2: if ((r4 = Menu_ProcessInputNoWrapClearOnChoose()) != -2) { - memset(r5->unk40.unk2, 0, sizeof(r5->unk40.unk2)); + memset(r5->sendCmd + 1, 0, sizeof(r5->sendCmd) - 2); if (r4 == 0) { if (CheckHasAtLeastOneBerry()) @@ -1229,9 +1233,9 @@ static u32 sub_814D188(struct BerryCrushGame * r5, u8 *r6) r5->unk14 = 1; } ClearDialogWindowAndFrame(0, TRUE); - sub_814D5A4(r6, 8, 0, 0, 0); - r5->nextCmd = 21; - BerryCrush_RunOrScheduleCommand(3, 1, NULL); + BerryCrush_SetShowMessageParams(r6, BCTEXT_COMMSTANDBY, 0, 0, 0); + r5->nextCmd = BCCMD_CommunicatePlayAgainResponses; + BerryCrush_RunOrScheduleCommand(BCCMD_PrintMessage, 1, NULL); r5->cmdState = 0; } return 0; @@ -1240,11 +1244,11 @@ static u32 sub_814D188(struct BerryCrushGame * r5, u8 *r6) return 0; } -static u32 sub_814D240(struct BerryCrushGame * r4, UNUSED u8 *r1) +static u32 BerryCrushCommand_CommunicatePlayAgainResponses(struct BerryCrushGame * game, UNUSED u8 *params) { - u8 r5 = 0; + u8 i = 0; - switch (r4->cmdState) + switch (game->cmdState) { case 0: LinkRfu_SetRfuFuncToSend6600(); @@ -1252,36 +1256,36 @@ static u32 sub_814D240(struct BerryCrushGame * r4, UNUSED u8 *r1) case 1: if (!IsLinkTaskFinished()) return 0; - r4->unk40.unk2[0] = r4->unk14; - r4->unk40.unkE.unk0 = 0; - SendBlock(0, r4->unk40.unk2, sizeof(u16)); + game->sendCmd[1] = game->unk14; + game->recvCmd[0] = 0; + SendBlock(0, game->sendCmd + 1, sizeof(u16)); break; case 2: if (!IsLinkTaskFinished()) return 0; - r4->unk10 = 0; + game->unk10 = 0; break; case 3: - if (GetBlockReceivedStatus() != sReceivedPlayerBitmasks[r4->playerCount - 2]) + if (GetBlockReceivedStatus() != sReceivedPlayerBitmasks[game->playerCount - 2]) return 0; - for (; r5 < r4->playerCount; ++r5) - r4->unk40.unkE.unk0 += gBlockRecvBuffer[r5][0]; - if (r4->unk40.unkE.unk0 != 0) - BerryCrush_RunOrScheduleCommand(23, 1, NULL); + for (; i < game->playerCount; ++i) + game->recvCmd[0] += gBlockRecvBuffer[i][0]; + if (game->recvCmd[0] != 0) + BerryCrush_RunOrScheduleCommand(BCCMD_PlayAgainFailureMessage, 1, NULL); else - BerryCrush_RunOrScheduleCommand(22, 1, NULL); + BerryCrush_RunOrScheduleCommand(BCCMD_FadeOutToPlayAgain, 1, NULL); ResetBlockReceivedFlags(); - r4->unk40.unk2[0] = 0; - r4->unk40.unkE.unk0 = 0; - r4->unk10 = 0; - r4->cmdState = 0; + game->sendCmd[1] = 0; + game->recvCmd[0] = 0; + game->unk10 = 0; + game->cmdState = 0; return 0; } - ++r4->cmdState; + ++game->cmdState; return 0; } -static u32 sub_814D31C(struct BerryCrushGame * r5, UNUSED u8 *r1) +static u32 BerryCrushCommand_FadeOutToPlayAgain(struct BerryCrushGame * r5, UNUSED u8 *r1) { switch (r5->cmdState) { @@ -1302,8 +1306,8 @@ static u32 sub_814D31C(struct BerryCrushGame * r5, UNUSED u8 *r1) case 3: if (UpdatePaletteFade()) return 0; - BerryCrush_RunOrScheduleCommand(7, 1, NULL); - r5->unk12 = 3; + BerryCrush_RunOrScheduleCommand(BCCMD_AskPickBerry, 1, NULL); + r5->gameState = 3; r5->cmdState = 0; return 0; } @@ -1311,29 +1315,29 @@ static u32 sub_814D31C(struct BerryCrushGame * r5, UNUSED u8 *r1) return 0; } -static u32 sub_814D3A4(struct BerryCrushGame * r5, UNUSED u8 *r1) +static u32 BerryCrushCommand_PlayAgainFailureMessage(struct BerryCrushGame * r5, UNUSED u8 *r1) { switch (r5->cmdState) { case 0: DrawDialogueFrame(0, FALSE); if (r5->unk14 == 3) - AddTextPrinterParameterized2(0, 2, gUnknown_846E328[5], r5->textSpeed, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 2, sBerryCrushMessages[BCTEXT_CANCEL_NOBERRIES], r5->textSpeed, NULL, 2, 1, 3); else - AddTextPrinterParameterized2(0, 2, gUnknown_846E328[6], r5->textSpeed, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 2, sBerryCrushMessages[BCTEXT_CANCEL_DROPPEDOUT], r5->textSpeed, NULL, 2, 1, 3); CopyWindowToVram(0, COPYWIN_BOTH); break; case 1: if (IsTextPrinterActive(0)) return 0; - r5->unk138.unk0 = 120; + r5->spritesManager.animBerryIdx = 120; break; case 2: - if (r5->unk138.unk0 != 0) - --r5->unk138.unk0; + if (r5->spritesManager.animBerryIdx != 0) + --r5->spritesManager.animBerryIdx; else { - BerryCrush_RunOrScheduleCommand(24, 1, NULL); + BerryCrush_RunOrScheduleCommand(BCCMD_GracefulExit, 1, NULL); r5->cmdState = 0; } return 0; @@ -1342,7 +1346,7 @@ static u32 sub_814D3A4(struct BerryCrushGame * r5, UNUSED u8 *r1) return 0; } -static u32 sub_814D468(struct BerryCrushGame * r5, UNUSED u8 *r1) +static u32 BerryCrushCommand_GracefulExit(struct BerryCrushGame * r5, UNUSED u8 *r1) { switch (r5->cmdState) { @@ -1357,8 +1361,8 @@ static u32 sub_814D468(struct BerryCrushGame * r5, UNUSED u8 *r1) case 2: if (gReceivedRemoteLinkPlayers) return 0; - r5->nextCmd = 25; - BerryCrush_RunOrScheduleCommand(5, 1, NULL); + r5->nextCmd = BCCMD_Quit; + BerryCrush_RunOrScheduleCommand(BCCMD_TeardownGfx, 1, NULL); r5->cmdState = 2; // ??? return 0; } @@ -1366,50 +1370,50 @@ static u32 sub_814D468(struct BerryCrushGame * r5, UNUSED u8 *r1) return 0; } -static u32 sub_814D4C8(UNUSED struct BerryCrushGame * r0, UNUSED u8 *r1) +static u32 BerryCrushCommand_Quit(UNUSED struct BerryCrushGame * r0, UNUSED u8 *r1) { ExitBerryCrushWithCallback(NULL); return 0; } -static void sub_814D4D8(struct BerryCrushGame * r4) +static void sub_814D4D8(struct BerryCrushGame * game) { u8 r5 = 0; IncrementGameStat(GAME_STAT_BERRY_CRUSH_POINTS); - r4->unkD = 0; - r4->unk10 = 0; - r4->unk12 = 2; - r4->unk14 = 0; - r4->unk1C = 0; - r4->unk18 = 0; - r4->unk1A = 0; - r4->unk20 = 0; - r4->unk24 = 0; - r4->unk25_0 = 0; - r4->unk25_1 = 0; - r4->unk25_2 = 0; - r4->unk25_3 = 0; - r4->unk25_4 = 0; - r4->unk25_5 = 0; - r4->unk26 = 0; - r4->unk28 = 0; - r4->unk2E = 0; - r4->unk32 = -1; - r4->unk30 = 0; - r4->unk34 = 0; + game->unkD = 0; + game->unk10 = 0; + game->gameState = 2; + game->unk14 = 0; + game->powder = 0; + game->unk18 = 0; + game->unk1A = 0; + game->unk20 = 0; + game->unk24 = 0; + game->unk25_0 = 0; + game->unk25_1 = 0; + game->unk25_2 = 0; + game->unk25_3 = FALSE; + game->unk25_4 = 0; + game->unk25_5 = 0; + game->unk26 = 0; + game->timer = 0; + game->unk2E = 0; + game->unk32 = -1; + game->unk30 = 0; + game->unk34 = 0; for (; r5 < 5; ++r5) // why is it 5 instead of 4? fillerBC isn't sufficient for one player { - r4->unk68.as_four_players.others[r5].unk0 = -1; - r4->unk68.as_four_players.others[r5].unk2 = 0; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[0] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[1] = 1; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[2] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[3] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[4] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[5] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_2d_bytes[1][4] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_2d_bytes[1][5] = 0; + game->unk68.as_four_players.others[r5].berryId = -1; + game->unk68.as_four_players.others[r5].unk2 = 0; + game->unk68.as_four_players.others[r5].unk4.as_hwords[0] = 0; + game->unk68.as_four_players.others[r5].unk4.as_hwords[1] = 1; + game->unk68.as_four_players.others[r5].unk4.as_hwords[2] = 0; + game->unk68.as_four_players.others[r5].unk4.as_hwords[3] = 0; + game->unk68.as_four_players.others[r5].unk4.as_hwords[4] = 0; + game->unk68.as_four_players.others[r5].unk4.as_hwords[5] = 0; + game->unk68.as_four_players.others[r5].unk4.as_2d_bytes[1][4] = 0; + game->unk68.as_four_players.others[r5].unk4.as_2d_bytes[1][5] = 0; } } @@ -1427,14 +1431,11 @@ void BerryCrush_SetPaletteFadeParams(u8 *params, bool8 communicateAfter, u32 sel params[9] = communicateAfter; } -static void sub_814D5A4(u8 *r0, u32 r1, u32 r2, u32 r3, u32 r5) +static void BerryCrush_SetShowMessageParams(u8 *params, u8 stringId, u8 flags, u16 waitKeys, u8 followupCmd) { - u8 sp[4]; - - 0[(u16 *)sp] = r3; - r0[0] = r1; - r0[1] = r2; - r0[2] = sp[0]; - r0[3] = sp[1]; - r0[4] = r5; + params[0] = stringId; + params[1] = flags; + params[2] = ((u8 *)&waitKeys)[0]; + params[3] = ((u8 *)&waitKeys)[1]; + params[4] = followupCmd; } diff --git a/src/berry_crush_3.c b/src/berry_crush_3.c index 077cfc1c3..7ebcf005f 100644 --- a/src/berry_crush_3.c +++ b/src/berry_crush_3.c @@ -21,18 +21,18 @@ #include "constants/items.h" #include "constants/songs.h" -static void sub_814DEC0(struct BerryCrushGame_138 * arg0, u16 arg1); -static void sub_814DF44(u8 windowId, u8 left, u8 colorId, const u8 *string); -static void sub_814DFA4(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 r3); +static void FramesToMinSec(struct BerryCrushGame_138 * arg0, u16 arg1); +static void PrintTextCentered(u8 windowId, u8 left, u8 colorId, const u8 *string); +static void PrintBerryCrushResultWindow(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 r3); static void sub_814E32C(struct BerryCrushGame * r8); static void Task_ShowBerryCrushRankings(u8 r4); -static void sub_814EAD4(struct BerryCrushGame_138 * r4, u16 r1); +static void BerryCrush_PrintTimeOnSprites(struct BerryCrushGame_138 * r4, u16 r1); static void sub_814EB38(struct BerryCrushGame * r5); static void sub_814EBB0(struct BerryCrushGame * r6); static void sub_814EC80(struct BerryCrushGame * r6); static void sub_814ECE0(struct BerryCrushGame * r6); static void sub_814EF10(struct BerryCrushGame * r5); -static void sub_814EFD0(struct Sprite * sprite); +static void SpriteCB_BerryCrushImpact(struct Sprite * sprite); static void sub_814EFFC(struct Sprite * sprite); static void sub_814F044(struct Sprite * sprite); static void sub_814F0D8(struct Sprite * sprite); @@ -101,7 +101,7 @@ static const u8 sBerryCrushTextColorTable[][3] = { } }; -static const struct WindowTemplate gUnknown_846E3F0 = { +static const struct WindowTemplate sWindowTemplate_BerryCrushRankings = { .bg = 0, .tilemapLeft = 3, .tilemapTop = 4, @@ -188,25 +188,27 @@ static const u8 gUnknown_846E448[][4] = { { 12, 14, 15, 16} }; -static const u32 gUnknown_846E450[] = { - 50000000, - 25000000, - 12500000, - 6250000, - 3125000, - 1562500, - 781250, - 390625 +static const u32 sPressingSpeedConversionTable[] = { + // Decimal point is vertically aligned with the pixel + // directly between the >< below. + 50000000, // 50 + 25000000, // 25 + 12500000, // 12.5 + 6250000, // 6.25 + 3125000, // 3.125 + 1562500, // 1.5625 + 781250, // 0.78125 + 390625 // 0.390625 }; -static const u16 gUnknown_846E470[] = INCBIN_U16("graphics/link_games/unk_846E4D0.gbapal"); -static const u16 gUnknown_846E490[] = INCBIN_U16("graphics/link_games/unk_846E7FC.gbapal"); -static const u16 gUnknown_846E4B0[] = INCBIN_U16("graphics/link_games/unk_846ECC4.gbapal"); +static const u16 sBerryCrushCorePal[] = INCBIN_U16("graphics/link_games/unk_846E4D0.gbapal"); +static const u16 sBerryCrushImpactAndSparklesPal[] = INCBIN_U16("graphics/link_games/unk_846E7FC.gbapal"); +static const u16 sBerryCrushTImerPal[] = INCBIN_U16("graphics/link_games/unk_846ECC4.gbapal"); -static const u32 gUnknown_846E4D0[] = INCBIN_U32("graphics/link_games/unk_846E4D0.4bpp.lz"); -static const u32 gUnknown_846E7FC[] = INCBIN_U32("graphics/link_games/unk_846E7FC.4bpp.lz"); -static const u32 gUnknown_846EB78[] = INCBIN_U32("graphics/link_games/unk_846EB78.4bpp.lz"); -static const u32 gUnknown_846ECC4[] = INCBIN_U32("graphics/link_games/unk_846ECC4.4bpp.lz"); +static const u32 sBerryCrushCoreTiles[] = INCBIN_U32("graphics/link_games/unk_846E4D0.4bpp.lz"); +static const u32 sBerryCrushImpactTiles[] = INCBIN_U32("graphics/link_games/unk_846E7FC.4bpp.lz"); +static const u32 sBerryCrushPowderSparklesTiles[] = INCBIN_U32("graphics/link_games/unk_846EB78.4bpp.lz"); +static const u32 sBerryCrushTimerTiles[] = INCBIN_U32("graphics/link_games/unk_846ECC4.4bpp.lz"); static const u32 gBerryCrushGrinderTopTilemap[] = INCBIN_U32("graphics/link_games/unk_846ED90.bin.lz"); static const u32 gBerryCrushContainerCapTilemap[] = INCBIN_U32("graphics/link_games/unk_846EEC0.bin.lz"); @@ -219,50 +221,50 @@ static const u8 gUnknown_846F280[][5] = { {0, 1, 3, 2, 4} }; -static const struct BerryCrushGame_138_C gUnknown_846F294[] = { - {0x00, 0x00, 0x00, 0x0000, 0xfff0, 0x0000, 0x0000}, - {0x01, 0x00, 0x03, 0xffe4, 0xfffc, 0xffe8, 0x0010}, - {0x02, 0x00, 0x06, 0xfff0, 0x0014, 0xfff8, 0x0010}, - {0x03, 0x14, 0x03, 0x001c, 0xfffc, 0x0020, 0xfff8}, - {0x04, 0x14, 0x06, 0x0010, 0x0014, 0x0010, 0xfff8} +static const struct BerryCrushPlayerSeatCoords gUnknown_846F294[] = { + {0, 0, 0, 0, -16, 0, 0}, + {1, 0, 3, -28, -4, -24, 16}, + {2, 0, 6, -16, 20, -8, 16}, + {3, 20, 3, 28, -4, 32, -8}, + {4, 20, 6, 16, 20, 16, -8} }; static const s8 gUnknown_846F2D0[][2] = { - {0x00, 0x00}, - {0xff, 0x00}, - {0x01, 0x01} + { 0, 0}, + {-1, 0}, + { 1, 1} }; static const s8 gUnknown_846F2D6[][2] = { - {0x00, 0x00}, - {0xf0, 0xfc}, - {0x10, 0xfc}, - {0xf8, 0xfe}, - {0x08, 0xfe}, - {0xe8, 0xf8}, - {0x18, 0xf8}, - {0xe0, 0xf4}, - {0x20, 0xf4}, - {0xd8, 0xf0}, - {0x28, 0xf0} + { 0, 0}, + {-16, -4}, + { 16, -4}, + { -8, -2}, + { 8, -2}, + {-24, -8}, + { 24, -8}, + {-32, -12}, + { 32, -12}, + {-40, -16}, + { 40, -16} }; -static const u16 gUnknown_846F2EC[] = { +static const u16 sPlayerBerrySpriteTags[] = { 5, 6, 7, 8, 9 }; static const struct CompressedSpriteSheet sSpriteSheets[] = { - {gUnknown_846E4D0, 0x0800, 1}, - {gUnknown_846E7FC, 0x0e00, 2}, - {gUnknown_846EB78, 0x0700, 3}, - {gUnknown_846ECC4, 0x02c0, 4}, + {sBerryCrushCoreTiles, 0x0800, 1}, + {sBerryCrushImpactTiles, 0x0e00, 2}, + {sBerryCrushPowderSparklesTiles, 0x0700, 3}, + {sBerryCrushTimerTiles, 0x02c0, 4}, {} }; static const struct SpritePalette sSpritePals[] = { - {gUnknown_846E470, 1}, - {gUnknown_846E490, 2}, - {gUnknown_846E4B0, 4}, + {sBerryCrushCorePal, 1}, + {sBerryCrushImpactAndSparklesPal, 2}, + {sBerryCrushTImerPal, 4}, {} }; @@ -330,21 +332,21 @@ static const union AffineAnimCmd gUnknown_846F3D4[] = { AFFINEANIMCMD_JUMP(1) }; -static const union AnimCmd *const gUnknown_846F3EC[] = { +static const union AnimCmd *const sAnimTable_BerryCrushCore[] = { gUnknown_846F340 }; -static const union AnimCmd *const gUnknown_846F3F0[] = { +static const union AnimCmd *const sAnimTable_BerryCrushImpact[] = { gUnknown_846F348, gUnknown_846F358 }; -static const union AnimCmd *const gUnknown_846F3F8[] = { +static const union AnimCmd *const sAnimTable_BerryCrushPowderSparkles[] = { gUnknown_846F36C, gUnknown_846F388 }; -static const union AnimCmd *const gUnknown_846F400[] = { +static const union AnimCmd *const sAnimTable_BerryCrushTimer[] = { gUnknown_846F3AC }; @@ -358,43 +360,43 @@ static const union AffineAnimCmd *const gUnknown_846F408[] = { }; -static const struct SpriteTemplate gUnknown_846F410 = { +static const struct SpriteTemplate sSpriteTemplate_BerryCrushCore = { .tileTag = 1, .paletteTag = 1, .oam = &gOamData_AffineOff_ObjNormal_64x64, - .anims = gUnknown_846F3EC, + .anims = sAnimTable_BerryCrushCore, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_846F428 = { +static const struct SpriteTemplate sSpriteTemplate_BerryCrushImpact = { .tileTag = 2, .paletteTag = 2, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = gUnknown_846F3F0, + .anims = sAnimTable_BerryCrushImpact, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_814EFD0 + .callback = SpriteCB_BerryCrushImpact }; -static const struct SpriteTemplate gUnknown_846F440 = { +static const struct SpriteTemplate sSpriteTemplate_BerryCrushPowderSparkles = { .tileTag = 3, .paletteTag = 2, .oam = &gOamData_AffineOff_ObjNormal_16x16, - .anims = gUnknown_846F3F8, + .anims = sAnimTable_BerryCrushPowderSparkles, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_846F458 = { +static const struct SpriteTemplate sSpriteTemplate_BerryCrushTimer = { .tileTag = 4, .paletteTag = 4, .oam = &gOamData_AffineOff_ObjNormal_8x16, - .anims = gUnknown_846F400, + .anims = sAnimTable_BerryCrushTimer, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_846F470 = { +static const struct SpriteTemplate sSpriteTemplate_PlayerBerry = { .tileTag = 5, .paletteTag = 5, .oam = &gOamData_AffineDouble_ObjNormal_32x32, @@ -609,25 +611,25 @@ int BerryCrush_TeardownBgs(void) int sub_814D9CC(struct BerryCrushGame * game) { - gSpriteCoordOffsetY = game->unk2A + game->unk2C; + gSpriteCoordOffsetY = game->depth + game->vibration; SetGpuReg(REG_OFFSET_BG1VOFS, -gSpriteCoordOffsetY); - if (game->unk12 == 7) + if (game->gameState == 7) { - sub_814EAD4(&game->unk138, game->unk28); + BerryCrush_PrintTimeOnSprites(&game->spritesManager, game->timer); } return 0; } -void sub_814DA04(struct BerryCrushGame * arg0) +void sub_814DA04(struct BerryCrushGame * game) { - arg0->unk2A = -104; - arg0->unk2C = 0; + game->depth = -104; + game->vibration = 0; gSpriteCoordOffsetX = 0; gSpriteCoordOffsetY = -104; } -void sub_814DA24(struct BerryCrushGame * arg0, struct BerryCrushGame_138 * arg1) +void BerryCrush_CreateBerrySprites(struct BerryCrushGame * game, struct BerryCrushGame_138 * spritesManager) { u8 i; u8 spriteId; @@ -637,24 +639,24 @@ void sub_814DA24(struct BerryCrushGame * arg0, struct BerryCrushGame_138 * arg1) s16 var5; u32 var6; - for (i = 0; i < arg0->playerCount; i++) + for (i = 0; i < game->playerCount; i++) { spriteId = AddItemIconObjectWithCustomObjectTemplate( - &gUnknown_846F470, - gUnknown_846F2EC[i], - gUnknown_846F2EC[i], - arg0->unk68.as_four_players.others[i].unk0 + FIRST_BERRY_INDEX); - arg1->unk38[i] = &gSprites[spriteId]; - arg1->unk38[i]->oam.priority = 3; - arg1->unk38[i]->affineAnimPaused = TRUE; - arg1->unk38[i]->pos1.x = arg1->unkC[i]->unk8 + 120; - arg1->unk38[i]->pos1.y = -16; - data = arg1->unk38[i]->data; + &sSpriteTemplate_PlayerBerry, + sPlayerBerrySpriteTags[i], + sPlayerBerrySpriteTags[i], + game->unk68.as_four_players.others[i].berryId + FIRST_BERRY_INDEX); + spritesManager->berrySprites[i] = &gSprites[spriteId]; + spritesManager->berrySprites[i]->oam.priority = 3; + spritesManager->berrySprites[i]->affineAnimPaused = TRUE; + spritesManager->berrySprites[i]->pos1.x = spritesManager->seatCoords[i]->unk8 + 120; + spritesManager->berrySprites[i]->pos1.y = -16; + data = spritesManager->berrySprites[i]->data; var5 = 512; data[1] = var5; data[2] = 32; data[7] = 112; - var0 = arg1->unkC[i]->unkA - arg1->unkC[i]->unk8; + var0 = spritesManager->seatCoords[i]->unkA - spritesManager->seatCoords[i]->unk8; var3 = var0; if (var0 < 0) var3 += 3; @@ -663,19 +665,19 @@ void sub_814DA24(struct BerryCrushGame * arg0, struct BerryCrushGame_138 * arg1) var0 *= 128; var6 = var5 + 32; var6 = var6 / 2; - var1 = sub_80D8B40(7, 0x3F80, var6); - data[0] = (u16)arg1->unk38[i]->pos1.x * 128; - data[3] = sub_80D8B40(7, var0, var1); - var1 = sub_80D8ABC(7, var1, 85); + var1 = MathUtil_Div16Shift(7, 0x3F80, var6); + data[0] = (u16)spritesManager->berrySprites[i]->pos1.x * 128; + data[3] = MathUtil_Div16Shift(7, var0, var1); + var1 = MathUtil_Mul16Shift(7, var1, 85); data[4] = 0; - data[5] = sub_80D8B40(7, 0x3F80, var1); + data[5] = MathUtil_Div16Shift(7, 0x3F80, var1); data[7] |= 0x8000; - if (arg1->unkC[i]->unk8 < 0) - StartSpriteAffineAnim(arg1->unk38[i], 1); + if (spritesManager->seatCoords[i]->unk8 < 0) + StartSpriteAffineAnim(spritesManager->berrySprites[i], 1); } } -void sub_814DB84(struct Sprite * sprite) +void SpriteCB_DropBerryIntoCrusher(struct Sprite * sprite) { s16 *data = sprite->data; @@ -702,17 +704,17 @@ void sub_814DB84(struct Sprite * sprite) } } -void sub_814DC24(struct BerryCrushGame * arg0, UNUSED struct BerryCrushGame_138 * arg1) +void BerryCrushFreeBerrySpriteGfx(struct BerryCrushGame * arg0, UNUSED struct BerryCrushGame_138 * arg1) { u8 i; for (i = 0; i < arg0->playerCount; i++) { - FreeSpritePaletteByTag(gUnknown_846F2EC[i]); - FreeSpriteTilesByTag(gUnknown_846F2EC[i]); + FreeSpritePaletteByTag(sPlayerBerrySpriteTags[i]); + FreeSpriteTilesByTag(sPlayerBerrySpriteTags[i]); } } -void sub_814DC5C(struct BerryCrushGame * arg0, struct BerryCrushGame_138 * arg1) +void sub_814DC5C(struct BerryCrushGame * game, struct BerryCrushGame_138 * manager) { u8 sp4; struct BerryCrushGame_4E * var4E; @@ -720,47 +722,47 @@ void sub_814DC5C(struct BerryCrushGame * arg0, struct BerryCrushGame_138 * arg1) u16 var, var2; sp4 = 0; - var4E = &arg0->unk40.unkE; - for (i = 0; i < arg0->playerCount; i++) + var4E = (struct BerryCrushGame_4E *)&game->recvCmd; + for (i = 0; i < game->playerCount; i++) { - var = var4E->unkA >> (i * 3); + var = var4E->data.unk08 >> (i * 3); var &= 7; if (var) { sp4++; if (var & 0x4) - StartSpriteAnim(arg1->unk24[i], 1); + StartSpriteAnim(manager->impactSprites[i], 1); else - StartSpriteAnim(arg1->unk24[i], 0); + StartSpriteAnim(manager->impactSprites[i], 0); - arg1->unk24[i]->invisible = FALSE; - arg1->unk24[i]->animPaused = FALSE; - arg1->unk24[i]->pos2.x = gUnknown_846F2D0[(var % 4) - 1][0]; - arg1->unk24[i]->pos2.y = gUnknown_846F2D0[(var % 4) - 1][1]; + manager->impactSprites[i]->invisible = FALSE; + manager->impactSprites[i]->animPaused = FALSE; + manager->impactSprites[i]->pos2.x = gUnknown_846F2D0[(var % 4) - 1][0]; + manager->impactSprites[i]->pos2.y = gUnknown_846F2D0[(var % 4) - 1][1]; } } if (sp4 == 0) { - arg0->unk25_2 = 0; + game->unk25_2 = 0; } else { - var = (u8)(arg0->unk28 % 3); + var = (u8)(game->timer % 3); var2 = var; - for (i = 0; i < var4E->unkC * 2 + 3; i++) + for (i = 0; i < var4E->data.unk0A * 2 + 3; i++) { - if (arg1->unk4C[i]->invisible) + if (manager->sparkleSprites[i]->invisible) { - arg1->unk4C[i]->callback = sub_814F0D8; - arg1->unk4C[i]->pos1.x = gUnknown_846F2D6[i][0] + 120; - arg1->unk4C[i]->pos1.y = gUnknown_846F2D6[i][1] + 136 - (var * 4); - arg1->unk4C[i]->pos2.x = gUnknown_846F2D6[i][0] + (gUnknown_846F2D6[i][0] / (var2 * 4)); - arg1->unk4C[i]->pos2.y = gUnknown_846F2D6[i][1]; - if (var4E->unk4_1) - StartSpriteAnim(arg1->unk4C[i], 1); + manager->sparkleSprites[i]->callback = sub_814F0D8; + manager->sparkleSprites[i]->pos1.x = gUnknown_846F2D6[i][0] + 120; + manager->sparkleSprites[i]->pos1.y = gUnknown_846F2D6[i][1] + 136 - (var * 4); + manager->sparkleSprites[i]->pos2.x = gUnknown_846F2D6[i][0] + (gUnknown_846F2D6[i][0] / (var2 * 4)); + manager->sparkleSprites[i]->pos2.y = gUnknown_846F2D6[i][1]; + if (var4E->data.unk02_1) + StartSpriteAnim(manager->sparkleSprites[i], 1); else - StartSpriteAnim(arg1->unk4C[i], 0); + StartSpriteAnim(manager->sparkleSprites[i], 0); var++; if (var > 3) @@ -768,9 +770,9 @@ void sub_814DC5C(struct BerryCrushGame * arg0, struct BerryCrushGame_138 * arg1) } } - if (arg0->unk25_2) + if (game->unk25_2) { - arg0->unk25_2 = 0; + game->unk25_2 = 0; } else { @@ -779,7 +781,7 @@ void sub_814DC5C(struct BerryCrushGame * arg0, struct BerryCrushGame_138 * arg1) else PlaySE(SE_TOY_KABE); - arg0->unk25_2 = 1; + game->unk25_2 = 1; } } } @@ -790,48 +792,48 @@ bool32 sub_814DE50(struct BerryCrushGame * arg0, struct BerryCrushGame_138 * arg for (i = 0; i < arg0->playerCount; i++) { - if (!arg1->unk24[i]->invisible) + if (!arg1->impactSprites[i]->invisible) return FALSE; } for (i = 0; i < 11; i++) { - if (!arg1->unk4C[i]->invisible) + if (!arg1->sparkleSprites[i]->invisible) return FALSE; } - if (arg0->unk2C != 0) - arg0->unk2C = 0; + if (arg0->vibration != 0) + arg0->vibration = 0; return TRUE; } -static void sub_814DEC0(struct BerryCrushGame_138 * arg0, u16 arg1) +static void FramesToMinSec(struct BerryCrushGame_138 * manager, u16 frames) { u8 i = 0; - u32 r7 = 0; + u32 fractionalFrames = 0; s16 r3 = 0; - arg0->unk4 = arg1 / 3600; - arg0->unk6 = (arg1 % 3600) / 60; - r3 = sub_80D8AA0((arg1 % 60) << 8, 4); + manager->minutes = frames / 3600; + manager->secondsInt = (frames % 3600) / 60; + r3 = MathUtil_Mul16((frames % 60) << 8, 4); for (i = 0; i < 8; i++) { if ((r3 >> (7 - i)) & 1) - r7 += gUnknown_846E450[i]; + fractionalFrames += sPressingSpeedConversionTable[i]; } - arg0->unk8 = r7 / 1000000; + manager->secondsFrac = fractionalFrames / 1000000; } -static void sub_814DF44(u8 windowId, u8 left, u8 colorId, const u8 *string) +static void PrintTextCentered(u8 windowId, u8 left, u8 colorId, const u8 *string) { left = (left * 4) - (GetStringWidth(2, string, -1) / 2u); AddTextPrinterParameterized3(windowId, 2, left, 0, sBerryCrushTextColorTable[colorId], 0, string); } -static void sub_814DFA4(struct BerryCrushGame * game, u8 command, u8 x, u8 y) +static void PrintBerryCrushResultWindow(struct BerryCrushGame * game, u8 command, u8 x, u8 y) { u8 i = 0; u8 linkPlayerId = 0; @@ -848,37 +850,40 @@ static void sub_814DFA4(struct BerryCrushGame * game, u8 command, u8 x, u8 y) switch (command) { case 0: + // Number of presses linkPlayerId = bcPlayers->as_five_players.players[0].unk4.as_2d_bytes[command][i]; - if (i != 0 && bcPlayers->as_four_players.unk00.unk0C[command][i] != bcPlayers->as_four_players.unk00.unk0C[command][i - 1]) + if (i != 0 && bcPlayers->as_four_players.unk00.stats[command][i] != bcPlayers->as_four_players.unk00.stats[command][i - 1]) { linkIdToPrint = i; } - ConvertIntToDecimalStringN(gStringVar1, bcPlayers->as_four_players.unk00.unk0C[command][i], STR_CONV_MODE_RIGHT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar1, bcPlayers->as_four_players.unk00.stats[command][i], STR_CONV_MODE_RIGHT_ALIGN, 4); realX = x - GetStringWidth(2, sBCRankingHeaders[command], -1) - 4; - AddTextPrinterParameterized3(game->unk138.unk82, 2, realX, y + 14 * i, sBerryCrushTextColorTable[0], 0, sBCRankingHeaders[command]); - AddTextPrinterParameterized3(game->unk138.unk82, 2, realX - 24, y + 14 * i, sBerryCrushTextColorTable[0], 0, gStringVar1); + AddTextPrinterParameterized3(game->spritesManager.unk82, 2, realX, y + 14 * i, sBerryCrushTextColorTable[0], 0, sBCRankingHeaders[command]); + AddTextPrinterParameterized3(game->spritesManager.unk82, 2, realX - 24, y + 14 * i, sBerryCrushTextColorTable[0], 0, gStringVar1); break; case 1: + // Neatness linkPlayerId = bcPlayers->as_five_players.players[0].unk4.as_2d_bytes[command][i]; - if (i != 0 && bcPlayers->as_four_players.unk00.unk0C[command][i] != bcPlayers->as_four_players.unk00.unk0C[command][i - 1]) + if (i != 0 && bcPlayers->as_four_players.unk00.stats[command][i] != bcPlayers->as_four_players.unk00.stats[command][i - 1]) { linkIdToPrint = i; } - ConvertIntToDecimalStringN(gStringVar1, bcPlayers->as_four_players.unk00.unk0C[command][i] >> 4, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar1, bcPlayers->as_four_players.unk00.stats[command][i] >> 4, STR_CONV_MODE_RIGHT_ALIGN, 3); score = 0; - realX = bcPlayers->as_four_players.unk00.unk0C[command][i] & 15; + realX = bcPlayers->as_four_players.unk00.stats[command][i] & 15; for (j = 0; j < 4; j++) { if ((realX >> (3 - j)) & 1) - score += gUnknown_846E450[j]; + score += sPressingSpeedConversionTable[j]; } realX = score / 1000000u; ConvertIntToDecimalStringN(gStringVar2, realX, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, sBCRankingHeaders[command]); realX2 = x - 4; - AddTextPrinterParameterized3(game->unk138.unk82, 2, realX2 - GetStringWidth(2, gStringVar4, 0), y + 14 * i, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(game->spritesManager.unk82, 2, realX2 - GetStringWidth(2, gStringVar4, 0), y + 14 * i, sBerryCrushTextColorTable[0], 0, gStringVar4); break; case 2: + // Berry names linkPlayerId = i; linkIdToPrint = i; j = game->unk68.as_five_players.players[i].unk14[12]; @@ -886,7 +891,7 @@ static void sub_814DFA4(struct BerryCrushGame * game, u8 command, u8 x, u8 y) j = 0; StringCopy(gStringVar1, gBerries[j].name); StringExpandPlaceholders(gStringVar4, sBCRankingHeaders[command]); - AddTextPrinterParameterized3(game->unk138.unk82, 2, x - GetStringWidth(2, gStringVar4, -1) - 4, y + 14 * i, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(game->spritesManager.unk82, 2, x - GetStringWidth(2, gStringVar4, -1) - 4, y + 14 * i, sBerryCrushTextColorTable[0], 0, gStringVar4); break; } if (linkPlayerId == game->localId) @@ -896,127 +901,127 @@ static void sub_814DFA4(struct BerryCrushGame * game, u8 command, u8 x, u8 y) gStringVar3[0] = linkIdToPrint + CHAR_1; DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, BERRYCRUSH_PLAYER_NAME(game, linkPlayerId)); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gStringVar3); - AddTextPrinterParameterized3(game->unk138.unk82, 2, 4, y + 14 * i, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(game->spritesManager.unk82, 2, 4, y + 14 * i, sBerryCrushTextColorTable[0], 0, gStringVar4); } } -static void sub_814E32C(struct BerryCrushGame * r8) +static void sub_814E32C(struct BerryCrushGame * game) { - u8 r10 = 0; - u8 r6 = 0; - u32 sp0C = 0; - union BerryCrushGame_68 *sp10 = &r8->unk68; - u8 r7 = GetWindowAttribute(r8->unk138.unk82, WINDOW_HEIGHT) * 8 - 42; + u8 i = 0; + u8 x = 0; + u32 score = 0; + union BerryCrushGame_68 *players = &game->unk68; + u8 y = GetWindowAttribute(game->spritesManager.unk82, WINDOW_HEIGHT) * 8 - 42; - sub_814DEC0(&r8->unk138, sp10->as_four_players.unk00.unk04); - AddTextPrinterParameterized3(r8->unk138.unk82, 2, 2, r7, sBerryCrushTextColorTable[0], 0, gText_TimeColon); + FramesToMinSec(&game->spritesManager, players->as_four_players.unk00.unk04); + AddTextPrinterParameterized3(game->spritesManager.unk82, 2, 2, y, sBerryCrushTextColorTable[0], 0, gText_TimeColon); - r6 = 190 - (u8)GetStringWidth(2, gText_SpaceSec, 0); - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_SpaceSec); + x = 190 - (u8)GetStringWidth(2, gText_SpaceSec, 0); + AddTextPrinterParameterized3(game->spritesManager.unk82, 2, x, y, sBerryCrushTextColorTable[0], 0, gText_SpaceSec); - r6 -= 32; - ConvertIntToDecimalStringN(gStringVar1, r8->unk138.unk6, STR_CONV_MODE_LEADING_ZEROS, 2); - ConvertIntToDecimalStringN(gStringVar2, r8->unk138.unk8, STR_CONV_MODE_LEADING_ZEROS, 2); + x -= 32; + ConvertIntToDecimalStringN(gStringVar1, game->spritesManager.secondsInt, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(gStringVar2, game->spritesManager.secondsFrac, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_XDotY2); - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(game->spritesManager.unk82, 2, x, y, sBerryCrushTextColorTable[0], 0, gStringVar4); - r6 -= (u8)GetStringWidth(2, gText_SpaceMin, 0) + 3; - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_SpaceMin); + x -= (u8)GetStringWidth(2, gText_SpaceMin, 0) + 3; + AddTextPrinterParameterized3(game->spritesManager.unk82, 2, x, y, sBerryCrushTextColorTable[0], 0, gText_SpaceMin); - r6 -= 9; - ConvertIntToDecimalStringN(gStringVar1, r8->unk138.unk4, STR_CONV_MODE_LEADING_ZEROS, 1); + x -= 9; + ConvertIntToDecimalStringN(gStringVar1, game->spritesManager.minutes, STR_CONV_MODE_LEADING_ZEROS, 1); StringExpandPlaceholders(gStringVar4, gText_StrVar1); - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(game->spritesManager.unk82, 2, x, y, sBerryCrushTextColorTable[0], 0, gStringVar4); - r7 += 14; - AddTextPrinterParameterized3(r8->unk138.unk82, 2, 2, r7, sBerryCrushTextColorTable[0], 0, gText_PressingSpeed); + y += 14; + AddTextPrinterParameterized3(game->spritesManager.unk82, 2, 2, y, sBerryCrushTextColorTable[0], 0, gText_PressingSpeed); - r6 = 190 - (u8)GetStringWidth(2, gText_TimesPerSec, 0); - AddTextPrinterParameterized3(r8->unk138.unk82, 3, r6, r7, sBerryCrushTextColorTable[0], 0, gText_TimesPerSec); + x = 190 - (u8)GetStringWidth(2, gText_TimesPerSec, 0); + AddTextPrinterParameterized3(game->spritesManager.unk82, 3, x, y, sBerryCrushTextColorTable[0], 0, gText_TimesPerSec); - for (r10 = 0; r10 < 8; ++r10) - if (((u8)r8->unk16 >> (7 - r10)) & 1) - sp0C += *(r10 + gUnknown_846E450); // It's accessed in a different way here for unknown reason - ConvertIntToDecimalStringN(gStringVar1, r8->unk16 >> 8, STR_CONV_MODE_RIGHT_ALIGN, 3); - ConvertIntToDecimalStringN(gStringVar2, sp0C / 1000000, STR_CONV_MODE_LEADING_ZEROS, 2); + for (i = 0; i < 8; ++i) + if (((u8)game->pressingSpeed >> (7 - i)) & 1) + score += *(i + sPressingSpeedConversionTable); // It's accessed in a different way here for unknown reason + ConvertIntToDecimalStringN(gStringVar1, game->pressingSpeed >> 8, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar2, score / 1000000, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_XDotY3); - r6 -= 38; - if (r8->unk25_1) - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[5], 0, gStringVar4); + x -= 38; + if (game->unk25_1) + AddTextPrinterParameterized3(game->spritesManager.unk82, 2, x, y, sBerryCrushTextColorTable[5], 0, gStringVar4); else - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(game->spritesManager.unk82, 2, x, y, sBerryCrushTextColorTable[0], 0, gStringVar4); - r7 += 14; - AddTextPrinterParameterized3(r8->unk138.unk82, 2, 2, r7, sBerryCrushTextColorTable[0], 0, gText_Silkiness); + y += 14; + AddTextPrinterParameterized3(game->spritesManager.unk82, 2, 2, y, sBerryCrushTextColorTable[0], 0, gText_Silkiness); - ConvertIntToDecimalStringN(gStringVar1, sp10->as_four_players.unk00.unk08, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar1, players->as_four_players.unk00.unk08, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_Var1Percent); - r6 = 190 - (u8)GetStringWidth(2, gStringVar4, 0); - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); + x = 190 - (u8)GetStringWidth(2, gStringVar4, 0); + AddTextPrinterParameterized3(game->spritesManager.unk82, 2, x, y, sBerryCrushTextColorTable[0], 0, gStringVar4); } -bool32 sub_814E644(struct BerryCrushGame * r4, struct BerryCrushGame_138 * r6) +bool32 sub_814E644(struct BerryCrushGame * game, struct BerryCrushGame_138 * spriteManager) { - u8 r5; + u8 playerCountMinus2; struct WindowTemplate template; - switch (r6->unk80) + switch (spriteManager->unk80) { case 0: - r5 = r4->playerCount - 2; - sub_814EB04(r6); - memcpy(&template, &gUnknown_846E428[r4->unk12 - 11], sizeof(struct WindowTemplate)); - if (r4->unk12 == 13) - template.height = gUnknown_846E448[1][r5]; + playerCountMinus2 = game->playerCount - 2; + BerryCrush_HideTimerSprites(spriteManager); + memcpy(&template, &gUnknown_846E428[game->gameState - 11], sizeof(struct WindowTemplate)); + if (game->gameState == 13) + template.height = gUnknown_846E448[1][playerCountMinus2]; else - template.height = gUnknown_846E448[0][r5]; - r6->unk82 = AddWindow(&template); + template.height = gUnknown_846E448[0][playerCountMinus2]; + spriteManager->unk82 = AddWindow(&template); break; case 1: - PutWindowTilemap(r6->unk82); - FillWindowPixelBuffer(r6->unk82, PIXEL_FILL(0)); + PutWindowTilemap(spriteManager->unk82); + FillWindowPixelBuffer(spriteManager->unk82, PIXEL_FILL(0)); break; case 2: - TextWindow_SetStdFrame0_WithPal(r6->unk82, 0x21D, 0xD0); - DrawStdFrameWithCustomTileAndPalette(r6->unk82, 0, 541, 13); + TextWindow_SetStdFrame0_WithPal(spriteManager->unk82, 0x21D, 0xD0); + DrawStdFrameWithCustomTileAndPalette(spriteManager->unk82, FALSE, 541, 13); break; case 3: - r5 = r4->playerCount - 2; - switch (r4->unk12) + playerCountMinus2 = game->playerCount - 2; + switch (game->gameState) { case 11: - sub_814DF44(r6->unk82, 22, 3, gText_PressesRankings); - sub_814DFA4(r4, 0, 0xB0, 8 * gUnknown_846E448[0][r5] - r4->playerCount * 14); - r6->unk80 = 5; + PrintTextCentered(spriteManager->unk82, 22, 3, gText_PressesRankings); + PrintBerryCrushResultWindow(game, 0, 0xB0, 8 * gUnknown_846E448[0][playerCountMinus2] - game->playerCount * 14); + spriteManager->unk80 = 5; return FALSE; case 12: - sub_814DF44(r6->unk82, 22, 4, sBCRankingHeaders[r4->unk68.as_five_players.players[0].unk4.as_2d_bytes[0][7] + 3]); - sub_814DFA4(r4, 1, 0xB0, 8 * gUnknown_846E448[0][r5] - r4->playerCount * 14); - r6->unk80 = 5; + PrintTextCentered(spriteManager->unk82, 22, 4, sBCRankingHeaders[game->unk68.as_five_players.players[0].unk4.as_2d_bytes[0][7] + 3]); + PrintBerryCrushResultWindow(game, 1, 0xB0, 8 * gUnknown_846E448[0][playerCountMinus2] - game->playerCount * 14); + spriteManager->unk80 = 5; return FALSE; case 13: - sub_814DF44(r6->unk82, 24, 3, gText_CrushingResults); - sub_814DFA4(r4, 2, 0xC0, 0x10); + PrintTextCentered(spriteManager->unk82, 24, 3, gText_CrushingResults); + PrintBerryCrushResultWindow(game, 2, 0xC0, 0x10); break; } break; case 4: - sub_814E32C(r4); + sub_814E32C(game); break; case 5: - CopyWindowToVram(r6->unk82, COPYWIN_BOTH); - r6->unk80 = 0; + CopyWindowToVram(spriteManager->unk82, COPYWIN_BOTH); + spriteManager->unk80 = 0; return TRUE; } - ++r6->unk80; + ++spriteManager->unk80; return FALSE; } -void sub_814E80C(struct BerryCrushGame * r4) +void sub_814E80C(struct BerryCrushGame * game) { - ClearStdWindowAndFrameToTransparent(r4->unk138.unk82, 1); - RemoveWindow(r4->unk138.unk82); - sub_814EBB0(r4); + ClearStdWindowAndFrameToTransparent(game->spritesManager.unk82, 1); + RemoveWindow(game->spritesManager.unk82); + sub_814EBB0(game); } static void Task_ShowBerryCrushRankings(u8 taskId) @@ -1029,7 +1034,7 @@ static void Task_ShowBerryCrushRankings(u8 taskId) switch (data[0]) { case 0: - data[1] = AddWindow(&gUnknown_846E3F0); + data[1] = AddWindow(&sWindowTemplate_BerryCrushRankings); PutWindowTilemap(data[1]); FillWindowPixelBuffer(data[1], PIXEL_FILL(0)); TextWindow_SetStdFrame0_WithPal(data[1], 0x21D, 0xD0); @@ -1073,7 +1078,7 @@ static void Task_ShowBerryCrushRankings(u8 taskId) for (j = 0; j < 8; ++j) { if (((data[i + 2] & 0xFF) >> (7 - j)) & 1) - score += gUnknown_846E450[j]; + score += sPressingSpeedConversionTable[j]; } ConvertIntToDecimalStringN(gStringVar1, (u16)data[i + 2] >> 8, STR_CONV_MODE_RIGHT_ALIGN, 3); ConvertIntToDecimalStringN(gStringVar2, score / 1000000, STR_CONV_MODE_LEADING_ZEROS, 2); @@ -1125,18 +1130,18 @@ void ShowBerryCrushRankings(void) gTasks[taskId].data[5] = gSaveBlock2Ptr->berryCrush.berryCrushResults[3]; } -static void sub_814EAD4(struct BerryCrushGame_138 * r4, u16 r1) +static void BerryCrush_PrintTimeOnSprites(struct BerryCrushGame_138 * manager, u16 frames) { - sub_814DEC0(r4, r1); - DigitObjUtil_PrintNumOn(0, r4->unk4); - DigitObjUtil_PrintNumOn(1, r4->unk6); - DigitObjUtil_PrintNumOn(2, r4->unk8); + FramesToMinSec(manager, frames); + DigitObjUtil_PrintNumOn(0, manager->minutes); + DigitObjUtil_PrintNumOn(1, manager->secondsInt); + DigitObjUtil_PrintNumOn(2, manager->secondsFrac); } -void sub_814EB04(struct BerryCrushGame_138 * r0) +void BerryCrush_HideTimerSprites(struct BerryCrushGame_138 * manager) { - r0->unk78[0]->invisible = TRUE; - r0->unk78[1]->invisible = TRUE; + manager->timerSprites[0]->invisible = TRUE; + manager->timerSprites[1]->invisible = TRUE; DigitObjUtil_HideOrShow(2, 1); DigitObjUtil_HideOrShow(1, 1); DigitObjUtil_HideOrShow(0, 1); @@ -1148,10 +1153,10 @@ static void sub_814EB38(struct BerryCrushGame * game) for (i = 0; i < game->playerCount; ++i) { - game->unk138.unkC[i] = &gUnknown_846F294[gUnknown_846F280[game->playerCount - 2][i]]; - game->unk138.unk83[i] = AddWindow(&gUnknown_846E3F8[game->unk138.unkC[i]->unk0]); - PutWindowTilemap(game->unk138.unk83[i]); - FillWindowPixelBuffer(game->unk138.unk83[i], PIXEL_FILL(0)); + game->spritesManager.seatCoords[i] = &gUnknown_846F294[gUnknown_846F280[game->playerCount - 2][i]]; + game->spritesManager.unk83[i] = AddWindow(&gUnknown_846E3F8[game->spritesManager.seatCoords[i]->unk0]); + PutWindowTilemap(game->spritesManager.unk83[i]); + FillWindowPixelBuffer(game->spritesManager.unk83[i], PIXEL_FILL(0)); } } @@ -1161,11 +1166,11 @@ static void sub_814EBB0(struct BerryCrushGame * game) for (i = 0; i < game->playerCount; ++i) { - PutWindowTilemap(game->unk138.unk83[i]); + PutWindowTilemap(game->spritesManager.unk83[i]); if (i == game->localId) { AddTextPrinterParameterized4( - game->unk138.unk83[i], + game->spritesManager.unk83[i], 2, 36 - GetStringWidth(2, BERRYCRUSH_PLAYER_NAME(game, i), 0) / 2u, 1, @@ -1179,7 +1184,7 @@ static void sub_814EBB0(struct BerryCrushGame * game) else { AddTextPrinterParameterized4( - game->unk138.unk83[i], + game->spritesManager.unk83[i], 2, 36 - GetStringWidth(2, BERRYCRUSH_PLAYER_NAME(game, i), 0) / 2u, 1, @@ -1190,7 +1195,7 @@ static void sub_814EBB0(struct BerryCrushGame * game) BERRYCRUSH_PLAYER_NAME(game, i) ); } - CopyWindowToVram(game->unk138.unk83[i], COPYWIN_BOTH); + CopyWindowToVram(game->spritesManager.unk83[i], COPYWIN_BOTH); } CopyBgTilemapBufferToVram(0); } @@ -1210,12 +1215,12 @@ static void sub_814EC80(struct BerryCrushGame * game) LZ77UnCompWram(r0, r4); for (; i < game->playerCount; ++i) { - r0_ = game->unk138.unkC[i]->unk0; + r0_ = game->spritesManager.seatCoords[i]->unk0; CopyToBgTilemapBufferRect( 3, &r4[r0_ * 40], - game->unk138.unkC[i]->unk1, - game->unk138.unkC[i]->unk2, + game->spritesManager.seatCoords[i]->unk1, + game->spritesManager.seatCoords[i]->unk2, 10, 2 ); @@ -1228,64 +1233,64 @@ static void sub_814ECE0(struct BerryCrushGame * game) u8 i = 0; u8 spriteId; - game->unk2A = -104; - game->unk2C = 0; + game->depth = -104; + game->vibration = 0; gSpriteCoordOffsetX = 0; gSpriteCoordOffsetY = -104; for (; i < 4; ++i) LoadCompressedSpriteSheet(&sSpriteSheets[i]); LoadSpritePalettes(sSpritePals); - spriteId = CreateSprite(&gUnknown_846F410, 120, 88, 5); - game->unk138.unk20 = &gSprites[spriteId]; - game->unk138.unk20->oam.priority = 3; - game->unk138.unk20->coordOffsetEnabled = TRUE; - game->unk138.unk20->animPaused = TRUE; + spriteId = CreateSprite(&sSpriteTemplate_BerryCrushCore, 120, 88, 5); + game->spritesManager.coreSprite = &gSprites[spriteId]; + game->spritesManager.coreSprite->oam.priority = 3; + game->spritesManager.coreSprite->coordOffsetEnabled = TRUE; + game->spritesManager.coreSprite->animPaused = TRUE; for (i = 0; i < game->playerCount; ++i) { spriteId = CreateSprite( - &gUnknown_846F428, - game->unk138.unkC[i]->unk4 + 120, - game->unk138.unkC[i]->unk6 + 32, + &sSpriteTemplate_BerryCrushImpact, + game->spritesManager.seatCoords[i]->unk4 + 120, + game->spritesManager.seatCoords[i]->unk6 + 32, 0 ); - game->unk138.unk24[i] = &gSprites[spriteId]; - game->unk138.unk24[i]->oam.priority = 1; - game->unk138.unk24[i]->invisible = TRUE; - game->unk138.unk24[i]->coordOffsetEnabled = TRUE; - game->unk138.unk24[i]->animPaused = TRUE; + game->spritesManager.impactSprites[i] = &gSprites[spriteId]; + game->spritesManager.impactSprites[i]->oam.priority = 1; + game->spritesManager.impactSprites[i]->invisible = TRUE; + game->spritesManager.impactSprites[i]->coordOffsetEnabled = TRUE; + game->spritesManager.impactSprites[i]->animPaused = TRUE; } - for (i = 0; i < NELEMS(game->unk138.unk4C); ++i) + for (i = 0; i < NELEMS(game->spritesManager.sparkleSprites); ++i) { spriteId = CreateSprite( - &gUnknown_846F440, + &sSpriteTemplate_BerryCrushPowderSparkles, gUnknown_846F2D6[i][0] + 120, gUnknown_846F2D6[i][1] + 136, 6 ); - game->unk138.unk4C[i] = &gSprites[spriteId]; - game->unk138.unk4C[i]->oam.priority = 3; - game->unk138.unk4C[i]->invisible = TRUE; - game->unk138.unk4C[i]->animPaused = TRUE; - game->unk138.unk4C[i]->data[0] = i; + game->spritesManager.sparkleSprites[i] = &gSprites[spriteId]; + game->spritesManager.sparkleSprites[i]->oam.priority = 3; + game->spritesManager.sparkleSprites[i]->invisible = TRUE; + game->spritesManager.sparkleSprites[i]->animPaused = TRUE; + game->spritesManager.sparkleSprites[i]->data[0] = i; } - for (i = 0; i < NELEMS(game->unk138.unk78); ++i) + for (i = 0; i < NELEMS(game->spritesManager.timerSprites); ++i) { spriteId = CreateSprite( - &gUnknown_846F458, + &sSpriteTemplate_BerryCrushTimer, 24 * i + 176, 8, 0 ); - game->unk138.unk78[i] = &gSprites[spriteId]; - game->unk138.unk78[i]->oam.priority = 0; - game->unk138.unk78[i]->invisible = FALSE; - game->unk138.unk78[i]->animPaused = FALSE; + game->spritesManager.timerSprites[i] = &gSprites[spriteId]; + game->spritesManager.timerSprites[i]->oam.priority = 0; + game->spritesManager.timerSprites[i]->invisible = FALSE; + game->spritesManager.timerSprites[i]->animPaused = FALSE; } DigitObjUtil_CreatePrinter(0, 0, &sDigitObjTemplates[0]); DigitObjUtil_CreatePrinter(1, 0, &sDigitObjTemplates[1]); DigitObjUtil_CreatePrinter(2, 0, &sDigitObjTemplates[2]); - if (game->unk12 == 1) - sub_814EB04(&game->unk138); + if (game->gameState == 1) + BerryCrush_HideTimerSprites(&game->spritesManager); } static void sub_814EF10(struct BerryCrushGame * r5) @@ -1299,20 +1304,20 @@ static void sub_814EF10(struct BerryCrushGame * r5) FreeSpritePaletteByTag(4); FreeSpritePaletteByTag(2); FreeSpritePaletteByTag(1); - for (; r4 < NELEMS(r5->unk138.unk78); ++r4) - DestroySprite(r5->unk138.unk78[r4]); + for (; r4 < NELEMS(r5->spritesManager.timerSprites); ++r4) + DestroySprite(r5->spritesManager.timerSprites[r4]); DigitObjUtil_DeletePrinter(2); DigitObjUtil_DeletePrinter(1); DigitObjUtil_DeletePrinter(0); - for (r4 = 0; r4 < NELEMS(r5->unk138.unk4C); ++r4) - DestroySprite(r5->unk138.unk4C[r4]); + for (r4 = 0; r4 < NELEMS(r5->spritesManager.sparkleSprites); ++r4) + DestroySprite(r5->spritesManager.sparkleSprites[r4]); for (r4 = 0; r4 < r5->playerCount; ++r4) - DestroySprite(r5->unk138.unk24[r4]); - if (r5->unk138.unk20->inUse) - DestroySprite(r5->unk138.unk20); + DestroySprite(r5->spritesManager.impactSprites[r4]); + if (r5->spritesManager.coreSprite->inUse) + DestroySprite(r5->spritesManager.coreSprite); } -static void sub_814EFD0(struct Sprite * sprite) +static void SpriteCB_BerryCrushImpact(struct Sprite * sprite) { if (sprite->animEnded) { @@ -1369,12 +1374,12 @@ static void sub_814F0D8(struct Sprite * sprite) r7[2] = 32; r7[7] = 168; r4 = sprite->pos2.x * 128; - r5 = sub_80D8B40(7, (168 - sprite->pos1.y) << 7, (r2 + 32) >> 1); + r5 = MathUtil_Div16Shift(7, (168 - sprite->pos1.y) << 7, (r2 + 32) >> 1); sprite->data[0] = sprite->pos1.x << 7; - r7[3] = sub_80D8B40(7, r4, r5); - r2 = sub_80D8ABC(7, r5, 85); + r7[3] = MathUtil_Div16Shift(7, r4, r5); + r2 = MathUtil_Mul16Shift(7, r5, 85); r7[4] = r8; - r7[5] = sub_80D8B40(7, 0x3F80, r2); + r7[5] = MathUtil_Div16Shift(7, 0x3F80, r2); r7[6] = sprite->pos2.x / 4; r7[7] |= 0x8000; sprite->pos2.y = r8; diff --git a/src/dodrio_berry_picking_2.c b/src/dodrio_berry_picking_2.c index 0af504906..ea2ea060d 100644 --- a/src/dodrio_berry_picking_2.c +++ b/src/dodrio_berry_picking_2.c @@ -1431,12 +1431,12 @@ static void sub_8155A78(void) case 2: if (!IsDma3ManagerBusyWithBgCopy()) { - CreateTask(sub_80DA634, 0); + CreateTask(Task_SaveGame_UpdatedLinkRecords, 0); gUnknown_203F440->state++; } break; case 3: - if (!FuncIsActiveTask(sub_80DA634)) + if (!FuncIsActiveTask(Task_SaveGame_UpdatedLinkRecords)) gUnknown_203F440->state++; break; default: diff --git a/src/math_util.c b/src/math_util.c index 466a31921..f77c82608 100644 --- a/src/math_util.c +++ b/src/math_util.c @@ -1,6 +1,6 @@ #include "global.h" -s16 sub_80D8AA0(s16 x, s16 y) +s16 MathUtil_Mul16(s16 x, s16 y) { s32 result; @@ -10,7 +10,7 @@ s16 sub_80D8AA0(s16 x, s16 y) return result; } -s16 sub_80D8ABC(u8 s, s16 x, s16 y) +s16 MathUtil_Mul16Shift(u8 s, s16 x, s16 y) { s32 result; @@ -20,7 +20,7 @@ s16 sub_80D8ABC(u8 s, s16 x, s16 y) return result; } -s32 sub_80D8AE0(s32 x, s32 y) +s32 MathUtil_Mul32(s32 x, s32 y) { s64 result; @@ -30,7 +30,7 @@ s32 sub_80D8AE0(s32 x, s32 y) return result; } -s16 sub_80D8B1C(s16 x, s16 y) +s16 MathUtil_Div16(s16 x, s16 y) { if (y == 0) { @@ -39,7 +39,7 @@ s16 sub_80D8B1C(s16 x, s16 y) return (x << 8) / y; } -s16 sub_80D8B40(u8 s, s16 x, s16 y) +s16 MathUtil_Div16Shift(u8 s, s16 x, s16 y) { if (y == 0) { @@ -48,7 +48,7 @@ s16 sub_80D8B40(u8 s, s16 x, s16 y) return (x << s) / y; } -s32 sub_80D8B68(s32 x, s32 y) +s32 MathUtil_Div32(s32 x, s32 y) { s64 _x; @@ -61,7 +61,7 @@ s32 sub_80D8B68(s32 x, s32 y) return _x / y; } -s16 sub_80D8B90(s16 y) +s16 MathUtil_Inv16(s16 y) { s32 x; @@ -69,7 +69,7 @@ s16 sub_80D8B90(s16 y) return x / y; } -s16 sub_80D8BA8(u8 s, s16 y) +s16 MathUtil_Inv16Shift(u8 s, s16 y) { s32 x; @@ -77,7 +77,7 @@ s16 sub_80D8BA8(u8 s, s16 y) return x / y; } -s32 sub_80D8BC8(s32 y) +s32 MathUtil_Inv32(s32 y) { s64 x; diff --git a/src/oak_speech.c b/src/oak_speech.c index 69cb61184..e279091c2 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -1419,8 +1419,8 @@ static void Task_OakSpeech39(u8 taskId) PlaySE(SE_TK_WARPIN); r0 = data[2]; data[2] -= 32; - x = sub_80D8B90(r0 - 8); - y = sub_80D8B90(data[2] - 16); + x = MathUtil_Inv16(r0 - 8); + y = MathUtil_Inv16(data[2] - 16); SetBgAffine(2, 0x7800, 0x5400, 0x78, 0x54, x, y, 0); if (data[2] <= 96) { diff --git a/src/pokemon_jump_2.c b/src/pokemon_jump_2.c index 9f2f9e404..f1f6e2906 100644 --- a/src/pokemon_jump_2.c +++ b/src/pokemon_jump_2.c @@ -1003,12 +1003,12 @@ static bool32 sub_814881C(void) case 2: if (sub_8149804()) { - CreateTask(sub_80DA634, 6); + CreateTask(Task_SaveGame_UpdatedLinkRecords, 6); gUnknown_203F3D4->unk8++; } break; case 3: - if (!FuncIsActiveTask(sub_80DA634)) + if (!FuncIsActiveTask(Task_SaveGame_UpdatedLinkRecords)) { sub_814A6CC(); gUnknown_203F3D4->unk8++; diff --git a/src/save.c b/src/save.c index 3c192c098..d5993182c 100644 --- a/src/save.c +++ b/src/save.c @@ -846,7 +846,7 @@ u32 TryWriteSpecialSaveSection(u8 sector, u8* src) return 1; } -void sub_80DA634(u8 taskId) +void Task_SaveGame_UpdatedLinkRecords(u8 taskId) { switch (gTasks[taskId].data[0]) { diff --git a/src/start_menu.c b/src/start_menu.c index a116ee799..1cc06aa99 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -942,11 +942,11 @@ static void task50_after_link_battle_save(u8 taskId) DestroyTask(taskId); break; case 5: - CreateTask(sub_80DA634, 5); + CreateTask(Task_SaveGame_UpdatedLinkRecords, 5); data[0] = 6; break; case 6: - if (!FuncIsActiveTask(sub_80DA634)) + if (!FuncIsActiveTask(Task_SaveGame_UpdatedLinkRecords)) data[0] = 3; break; } |