summaryrefslogtreecommitdiff
path: root/src/berry_crush.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/berry_crush.c')
-rwxr-xr-xsrc/berry_crush.c401
1 files changed, 180 insertions, 221 deletions
diff --git a/src/berry_crush.c b/src/berry_crush.c
index a67d1548e..d753e603c 100755
--- a/src/berry_crush.c
+++ b/src/berry_crush.c
@@ -193,7 +193,7 @@ static void sub_8020F88(void);
static void sub_8020FA0(u8);
void sub_8020FC4(struct BerryCrushGame *);
void sub_8022BEC(u16, u8, u8 *);
-void sub_8024604(u8 *, u32, s32, u32, u32, u32, u32);
+static void BerryCrush_SetPaletteFadeParams(u8 *, bool8, u32, s8, u8, u8, u16);
static int sub_8021450(struct BerryCrushGame *);
void sub_8022588(struct BerryCrushGame *);
void sub_8022600(struct BerryCrushGame *);
@@ -206,7 +206,7 @@ void sub_8022554(struct BerryCrushGame_138 *r0);
void sub_8024578(struct BerryCrushGame *);
void sub_8024644(u8 *, u32, u32, u32, u32);
static void sub_8022A20(struct Sprite *sprite);
-static u32 sub_8022C58(struct BerryCrushGame *r6, u8 *r1);
+static u32 BerryCrushCommand_BeginNormalPaletteFade(struct BerryCrushGame *r6, u8 *r1);
static u32 sub_8022CB0(struct BerryCrushGame *r4, u8 *r5);
static u32 sub_8022D14(struct BerryCrushGame *r7, u8 *r5);
static u32 sub_8022E1C(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1);
@@ -322,7 +322,7 @@ static const u8 sBerryCrushTextColorTable[][3] =
};
-static const struct WindowTemplate gUnknown_082F32EC =
+static const struct WindowTemplate sWindowTemplate_BerryCrushRankings =
{
.bg = 0,
.tilemapLeft = 3,
@@ -421,7 +421,7 @@ static const u8 gUnknown_082F3344[][4] =
{12, 14, 15, 16},
};
-static const u32 gUnknown_082F334C[] =
+static const u32 sPressingSpeedConversionTable[] =
{
50000000 / (1 << 0),
50000000 / (1 << 1),
@@ -767,7 +767,7 @@ static const u8 *const gUnknown_082F43B4[] =
static u32 (*const gUnknown_082F43CC[])(struct BerryCrushGame *, u8 *) =
{
NULL,
- sub_8022C58,
+ BerryCrushCommand_BeginNormalPaletteFade,
sub_8022CB0,
sub_8022D14,
sub_8022E1C,
@@ -825,14 +825,14 @@ u32 sub_8020C0C(MainCallback callback)
if (callback == CB2_ReturnToField)
{
gTextFlags.autoScroll = TRUE;
- PlayNewMapMusic(MUS_POKECEN);
+ PlayNewMapMusic(MUS_POKE_CENTER);
SetMainCallback1(CB1_Overworld);
}
return 0;
}
-void sub_8020C70(MainCallback callback)
+void StartBerryCrush(MainCallback callback)
{
u8 playerCount = 0;
u8 multiplayerId;
@@ -842,7 +842,7 @@ void sub_8020C70(MainCallback callback)
SetMainCallback2(callback);
Rfu.unk_10 = 0;
Rfu.unk_12 = 0;
- Rfu.unk_ee = 1;
+ Rfu.errorState = 1;
return;
}
@@ -853,7 +853,7 @@ void sub_8020C70(MainCallback callback)
SetMainCallback2(callback);
Rfu.unk_10 = 0;
Rfu.unk_12 = 0;
- Rfu.unk_ee = 1;
+ Rfu.errorState = 1;
return;
}
@@ -863,7 +863,7 @@ void sub_8020C70(MainCallback callback)
SetMainCallback2(callback);
Rfu.unk_10 = 0;
Rfu.unk_12 = 0;
- Rfu.unk_ee = 1;
+ Rfu.errorState = 1;
return;
}
@@ -874,7 +874,7 @@ void sub_8020C70(MainCallback callback)
gUnknown_02022C90->unk12 = 1;
gUnknown_02022C90->unkE = 1;
gUnknown_02022C90->unkF = 6;
- sub_8024604(gUnknown_02022C90->unk36, 1, -1, 0, 16, 0, 0);
+ BerryCrush_SetPaletteFadeParams(gUnknown_02022C90->unk36, 1, -1, 0, 16, 0, 0);
sub_8022BEC(4, 1, gUnknown_02022C90->unk36);
SetMainCallback2(sub_8020F88);
gUnknown_02022C90->unkA = CreateTask(sub_8020FA0, 8);
@@ -891,7 +891,7 @@ static void sub_8020D8C(void)
gUnknown_02022C90->unk68.as_four_players.others[gUnknown_02022C90->unk8].unk0 = gSpecialVar_ItemId - FIRST_BERRY_INDEX;
gUnknown_02022C90->unkE = 1;
gUnknown_02022C90->unkF = 9;
- sub_8024604(gUnknown_02022C90->unk36, 0, -1, 0, 16, 0, 0);
+ BerryCrush_SetPaletteFadeParams(gUnknown_02022C90->unk36, 0, -1, 0, 16, 0, 0);
sub_8022BEC(4, 1, gUnknown_02022C90->unk36);
gUnknown_02022C90->unkA = CreateTask(sub_8020FA0, 8);
SetMainCallback2(sub_8020F88);
@@ -900,7 +900,7 @@ static void sub_8020D8C(void)
void sub_8020E1C(void)
{
DestroyTask(gUnknown_02022C90->unkA);
- ChooseBerrySetCallback(sub_8020D8C);
+ ChooseBerryForMachine(sub_8020D8C);
}
static void sub_8020E3C(void)
@@ -918,11 +918,11 @@ void sub_8020E58(void)
u32 var0, var1;
var0 = gUnknown_02022C90->unk68.as_four_players.unk00.unk04;
- var0 <<= 8;
- var0 = sub_81515FC(var0, 60 << 8);
+ var0 = Q_24_8(var0);
+ var0 = MathUtil_Div32(var0, Q_24_8(60));
var1 = gUnknown_02022C90->unk68.as_four_players.unk00.unk0A;
- var1 <<= 8;
- var1 = sub_81515FC(var1, var0) & 0xFFFF;
+ var1 = Q_24_8(var1);
+ var1 = MathUtil_Div32(var1, var0) & 0xFFFF;
gUnknown_02022C90->unk16 = var1;
switch (gUnknown_02022C90->unk9)
{
@@ -1031,7 +1031,7 @@ int sub_802104C(void)
SetHBlankCallback(NULL);
SetGpuReg(REG_OFFSET_DISPCNT, 0);
ScanlineEffect_Stop();
- reset_temp_tile_data_buffers();
+ ResetTempTileDataBuffers();
break;
case 1:
CpuFill16(0, (void *)OAM, OAM_SIZE);
@@ -1069,14 +1069,14 @@ int sub_802104C(void)
CopyBgTilemapBufferToVram(1);
CopyBgTilemapBufferToVram(2);
CopyBgTilemapBufferToVram(3);
- decompress_and_copy_tile_data_to_vram(1, gUnknown_08DE34B8, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, gUnknown_08DE34B8, 0, 0, 0);
break;
case 6:
- if (free_temp_tile_data_buffers_if_possible())
+ if (FreeTempTileDataBuffersIfPossible())
return 0;
InitStandardTextBoxWindows();
- sub_8197200();
+ InitTextBoxGfxAndPrinters();
sub_8022588(var0);
sub_8022600(var0);
gPaletteFade.bufferTransferDisabled = TRUE;
@@ -1125,7 +1125,7 @@ int sub_802130C(void)
switch (var0->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
@@ -1232,12 +1232,12 @@ void sub_80214A8(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1)
var0 *= 128;
var6 = var5 + 32;
var6 = var6 / 2;
- var1 = sub_81515D4(7, 0x3F80, var6);
+ var1 = MathUtil_Div16Shift(7, Q_8_8(63.5), var6);
data[0] = (u16)arg1->unk38[i]->pos1.x * 128;
- data[3] = sub_81515D4(7, var0, var1);
- var1 = sub_8151550(7, var1, 85);
+ data[3] = MathUtil_Div16Shift(7, var0, var1);
+ var1 = MathUtil_Mul16Shift(7, var1, 85);
data[4] = 0;
- data[5] = sub_81515D4(7, 0x3F80, var1);
+ data[5] = MathUtil_Div16Shift(7, Q_8_8(63.5), var1);
data[7] |= 0x8000;
if (arg1->unkC[i]->unk8 < 0)
StartSpriteAffineAnim(arg1->unk38[i], 1);
@@ -1344,9 +1344,9 @@ void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1)
else
{
if (sp4 == 1)
- PlaySE(SE_TOY_DANGO);
+ PlaySE(SE_MUD_BALL);
else
- PlaySE(SE_TOY_KABE);
+ PlaySE(SE_BREAKABLE_DOOR);
arg0->unk25_2 = 1;
}
@@ -1383,12 +1383,12 @@ void sub_8021944(struct BerryCrushGame_138 *arg0, u16 arg1)
arg0->unk4 = arg1 / 3600;
arg0->unk6 = (arg1 % 3600) / 60;
- r3 = sub_8151534((arg1 % 60) << 8, 4);
+ r3 = MathUtil_Mul16(Q_8_8(arg1 % 60), 4);
for (i = 0; i < 8; i++)
{
if ((r3 >> (7 - i)) & 1)
- r7 += gUnknown_082F334C[i];
+ r7 += sPressingSpeedConversionTable[i];
}
arg0->unk8 = r7 / 1000000;
@@ -1442,7 +1442,7 @@ void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18)
r7 = sp24->as_four_players.unk00.unk0C[sp10][r8] & 15;
for (r2 = 0; r2 < 4; ++r2)
if ((r7 >> (3 - r2)) & 1)
- r3 += gUnknown_082F334C[r2];
+ r3 += sPressingSpeedConversionTable[r2];
r7 = r3 / 1000000u;
ConvertIntToDecimalStringN(gStringVar2, r7, STR_CONV_MODE_LEADING_ZEROS, 2);
StringExpandPlaceholders(gStringVar4, gUnknown_082F43B4[sp10]);
@@ -1499,7 +1499,7 @@ void sub_8021D34(struct BerryCrushGame *r8)
AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_TimesPerSec);
for (; r10 < 8; ++r10)
if (((u8)r8->unk16 >> (7 - r10)) & 1)
- sp0C += *(r10 + gUnknown_082F334C); // It's accessed in a different way here for unknown reason
+ sp0C += *(r10 + sPressingSpeedConversionTable); // 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);
StringExpandPlaceholders(gStringVar4, gText_XDotY3);
@@ -1580,93 +1580,89 @@ void sub_802222C(struct BerryCrushGame *r4)
sub_8022600(r4);
}
-void sub_8022250(u8 r4)
+static void Task_ShowBerryCrushRankings(u8 taskId)
{
- u8 r9 = 0, r2, r7, r10;
- u32 sp0C = 0;
- s16 *r6 = gTasks[r4].data;
- const u8 *r10_; // turn r5/sl register swap into r8/sl
+ u8 i = 0, j, xPos, yPos;
+ u32 score = 0;
+ s16 *data = gTasks[taskId].data;
+ u8 *str;
- switch (r6[0])
+ switch (data[0])
{
case 0:
- r6[1] = AddWindow(&gUnknown_082F32EC);
- PutWindowTilemap((u8)r6[1]);
- FillWindowPixelBuffer((u8)r6[1], PIXEL_FILL(0));
- LoadUserWindowBorderGfx_((u8)r6[1], 541, 208);
- DrawStdFrameWithCustomTileAndPalette((u8)r6[1], 0, 541, 13);
+ data[1] = AddWindow(&sWindowTemplate_BerryCrushRankings);
+ PutWindowTilemap(data[1]);
+ FillWindowPixelBuffer(data[1], PIXEL_FILL(0));
+ LoadUserWindowBorderGfx_(data[1], 541, 208);
+ DrawStdFrameWithCustomTileAndPalette(data[1], 0, 541, 13);
break;
case 1:
- r10_ = gText_BerryCrush2;
- ++r10_; --r10_; // swap sb/sl
- #ifndef NONMATCHING
- asm("":::"r8"); // turn r8/sl register swap into sb/sl
- #endif
- r7 = 96 - GetStringWidth(1, r10_, -1) / 2u;
+ xPos = 96 - GetStringWidth(1, gText_BerryCrush2, -1) / 2u;
AddTextPrinterParameterized3(
- (u8)r6[1],
+ data[1],
1,
- r7,
+ xPos,
1,
sBerryCrushTextColorTable[3],
0,
- r10_
+ gText_BerryCrush2
);
- r10_ = gText_PressingSpeedRankings;
- r7 = 96 - GetStringWidth(1, r10_, -1) / 2u;
+ xPos = 96 - GetStringWidth(1, gText_PressingSpeedRankings, -1) / 2u;
AddTextPrinterParameterized3(
- (u8)r6[1],
+ data[1],
1,
- r7,
+ xPos,
17,
sBerryCrushTextColorTable[3],
0,
- r10_
+ gText_PressingSpeedRankings
);
- r10 = 41;
- for (; r9 < 4; ++r9)
+ yPos = 41;
+ for (i = 0; i < 4; ++i)
{
- ConvertIntToDecimalStringN(gStringVar1, r9 + 2, STR_CONV_MODE_LEFT_ALIGN, 1);
+ ConvertIntToDecimalStringN(gStringVar1, i + 2, STR_CONV_MODE_LEFT_ALIGN, 1);
StringExpandPlaceholders(gStringVar4, gText_Var1Players);
AddTextPrinterParameterized3(
- (u8)r6[1],
+ data[1],
1,
0,
- r10,
+ yPos,
sBerryCrushTextColorTable[0],
0,
gStringVar4
);
- r7 = 192 - (u8)GetStringWidth(1, gText_TimesPerSec, -1);
+ xPos = 192 - (u8)GetStringWidth(1, gText_TimesPerSec, -1);
AddTextPrinterParameterized3(
- (u8)r6[1],
+ data[1],
1,
- r7,
- r10,
+ xPos,
+ yPos,
sBerryCrushTextColorTable[0],
0,
gText_TimesPerSec
);
- for (r2 = 0; r2 < 8; ++r2)
- if (((u8)r6[r9 + 2] >> (7 - r2)) & 1)
- sp0C += gUnknown_082F334C[r2];
- ConvertIntToDecimalStringN(gStringVar1, (u16)r6[r9 + 2] >> 8, STR_CONV_MODE_RIGHT_ALIGN, 3);
- ConvertIntToDecimalStringN(gStringVar2, sp0C / 1000000, STR_CONV_MODE_LEADING_ZEROS, 2);
+ for (j = 0; j < 8; ++j)
+ {
+ if (((data[i + 2] & 0xFF) >> (7 - j)) & 1)
+ 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);
StringExpandPlaceholders(gStringVar4, gText_XDotY3);
- r7 -= GetStringWidth(1, gStringVar4, -1);
+ xPos -= GetStringWidth(1, gStringVar4, -1);
AddTextPrinterParameterized3(
- (u8)r6[1],
+ data[1],
1,
- r7,
- r10,
+ xPos,
+ yPos,
sBerryCrushTextColorTable[0],
0,
gStringVar4
);
- r10 += 16;
- sp0C = 0;
+ yPos += 16;
+ score = 0;
}
- CopyWindowToVram((u8)r6[1], 3);
+ CopyWindowToVram(data[1], 3);
break;
case 2:
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
@@ -1674,16 +1670,16 @@ void sub_8022250(u8 r4)
else
return;
case 3:
- ClearStdWindowAndFrameToTransparent((u8)r6[1], 1);
- ClearWindowTilemap((u8)r6[1]);
- RemoveWindow((u8)r6[1]);
- DestroyTask(r4);
+ ClearStdWindowAndFrameToTransparent(data[1], 1);
+ ClearWindowTilemap(data[1]);
+ RemoveWindow(data[1]);
+ DestroyTask(taskId);
EnableBothScriptContexts();
ScriptContext2_Disable();
- r6[0] = 0;
+ data[0] = 0;
return;
}
- ++r6[0];
+ ++data[0];
}
void ShowBerryCrushRankings(void)
@@ -1691,7 +1687,7 @@ void ShowBerryCrushRankings(void)
u8 taskId;
ScriptContext2_Enable();
- taskId = CreateTask(sub_8022250, 0);
+ taskId = CreateTask(Task_ShowBerryCrushRankings, 0);
gTasks[taskId].data[2] = gSaveBlock2Ptr->berryCrush.berryCrushResults[0];
gTasks[taskId].data[3] = gSaveBlock2Ptr->berryCrush.berryCrushResults[1];
gTasks[taskId].data[4] = gSaveBlock2Ptr->berryCrush.berryCrushResults[2];
@@ -1943,12 +1939,12 @@ void sub_8022B28(struct Sprite *sprite)
r7[2] = 32;
r7[7] = 168;
r4 = sprite->pos2.x * 128;
- r5 = sub_81515D4(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_81515D4(7, r4, r5);
- r2 = sub_8151550(7, r5, 85);
+ r7[3] = MathUtil_Div16Shift(7, r4, r5);
+ r2 = MathUtil_Mul16Shift(7, r5, 85);
r7[4] = r8;
- r7[5] = sub_81515D4(7, 0x3F80, r2);
+ r7[5] = MathUtil_Div16Shift(7, Q_8_8(63.5), r2);
r7[6] = sprite->pos2.x / 4;
r7[7] |= 0x8000;
sprite->pos2.y = r8;
@@ -1979,39 +1975,42 @@ void sub_8022BEC(u16 r5, u8 r4, u8 *r7)
}
}
-static u32 sub_8022C58(struct BerryCrushGame *r6, u8 *r1)
+static u32 BerryCrushCommand_BeginNormalPaletteFade(struct BerryCrushGame *game, u8 *params)
{
- u16 r4;
- u32 r0;
-#ifndef NONMATCHING // fake match, nobody can write such code
- register u32 r2 asm("r2");
- register u32 r3 asm("r3");
+ // params points to packed values:
+ // bytes 0-3: selectedPals (bitfield)
+ // byte 4: delay
+ // byte 5: startY
+ // byte 6: stopY
+ // bytes 7-8: fade color
+ // byte 9: if TRUE, communicate on fade complete
- r2 = r1[0];
- r3 = r1[1];
- r3 <<= 8;
- r2 |= r3;
- r3 = r1[2];
- r3 <<= 16;
- r2 |= r3;
- r3 = r1[3];
- r3 <<= 24;
- r0 = r2;
- r0 |= r3;
+ u16 color;
+ u32 selectedPals;
+ selectedPals = ({
+#ifndef NONMATCHING
+ register u32 value asm("r2");
+ register u32 b asm("r3");
#else
- u32 r2;
+ u32 value;
+ u32 b;
+#endif //NONMATCHING
+ value = params[0] << 0;
+ value |= (b = params[1] << 8);
+ value |= (b = params[2] << 16);
+ value |= (b = params[3] << 24);
+ value;
+ });
+
+ params[0] = params[9];
+
+ color = params[8] << 8;
+ color |= params[7] << 0;
- r0 = T1_READ_32(r1);
-#endif
- r2 = r1[9];
- r1[0] = r2;
- r4 = r1[8] << 8;
- r2 = r1[7];
- r4 |= r2;
gPaletteFade.bufferTransferDisabled = FALSE;
- BeginNormalPaletteFade(r0, r1[4], r1[5], r1[6], r4);
+ BeginNormalPaletteFade(selectedPals, params[4], params[5], params[6], color);
UpdatePaletteFade();
- r6->unkE = 2;
+ game->unkE = 2;
return 0;
}
@@ -2028,7 +2027,7 @@ static u32 sub_8022CB0(struct BerryCrushGame *r4, u8 *r5)
r4->unkC = 3;
return 0;
case 1:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
++r4->unkC;
return 0;
case 2:
@@ -2111,12 +2110,12 @@ static u32 sub_8022E5C(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
switch (r4->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (IsLinkTaskFinished())
{
- PlayNewMapMusic(MUS_RG_SLOT);
+ PlayNewMapMusic(MUS_RG_GAME_CORNER);
sub_8022BEC(7, 1, NULL);
r4->unk12 = 3;
r4->unkC = 0;
@@ -2168,7 +2167,7 @@ static u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2)
sub_8022BEC(3, 1, NULL);
return 0;
case 1:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 2:
if (!IsLinkTaskFinished())
@@ -2195,7 +2194,7 @@ static u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2)
}
r5->unk10 = 0;
ResetBlockReceivedFlags();
- r5->unk20 = sub_81515FC(r5->unk18 << 8, 0x2000);
+ r5->unk20 = MathUtil_Div32(Q_24_8(r5->unk18), Q_24_8(32));
break;
case 5:
ClearDialogWindowAndFrame(0, 1);
@@ -2214,7 +2213,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
{
case 0:
sub_80214A8(r4, &r4->unk138);
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
@@ -2227,14 +2226,14 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
case 2:
r4->unk138.unk38[r4->unk138.unk0]->callback = sub_8021608;
r4->unk138.unk38[r4->unk138.unk0]->affineAnimPaused = FALSE;
- PlaySE(SE_NAGERU);
+ PlaySE(SE_BALL_THROW);
break;
case 3:
if (r4->unk138.unk38[r4->unk138.unk0]->callback == sub_8021608)
return 0;
r4->unk138.unk38[r4->unk138.unk0] = NULL;
++r4->unk138.unk0;
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 4:
if (!IsLinkTaskFinished())
@@ -2248,12 +2247,12 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
break;
case 5:
sub_80216A8(r4, &r4->unk138);
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 6:
if (!IsLinkTaskFinished())
return 0;
- PlaySE(SE_RU_HYUU);
+ PlaySE(SE_FALL);
sub_8022BEC(11, 1, NULL);
r4->unk12 = 5;
r4->unkC = 0;
@@ -2275,7 +2274,7 @@ static u32 sub_80231B8(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
r4->unk138.unk1 = 4;
r4->unk138.unk0 = 0;
r4->unk138.unk2 = gUnknown_082F326C[r4->unk138.unk1][0];
- PlaySE(SE_W070);
+ PlaySE(SE_M_STRENGTH);
break;
case 1:
r4->unk2C = gUnknown_082F326C[r4->unk138.unk1][r4->unk138.unk0];
@@ -2296,7 +2295,7 @@ static u32 sub_80231B8(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
SetGpuReg(REG_OFFSET_BG3VOFS, 0);
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 3:
if (!IsLinkTaskFinished())
@@ -2324,7 +2323,7 @@ static u32 sub_80232EC(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
return 0;
// fallthrough
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 3:
if (!IsLinkTaskFinished())
@@ -2358,7 +2357,7 @@ void sub_802339C(struct BerryCrushGame *r4)
for (r7 = 0; r7 < r4->unk9; ++r7)
{
r2 = gRecvCmds[r7];
- if ((r2[0] & 0xFF00) == 0x2F00
+ if ((r2[0] & 0xFF00) == RFUCMD_SEND_PACKET
&& r2[1] == 2)
{
if ((u8)r2[2] & 4)
@@ -2412,9 +2411,9 @@ void sub_802339C(struct BerryCrushGame *r4)
r2_ = r4->unk1A;
if (r0 - r2_ > 0)
{
- r2_ <<= 8;
- r2_ = sub_81515FC(r2_, r4->unk20);
- r2_ >>= 8;
+ r2_ = Q_24_8(r2_);
+ r2_ = MathUtil_Div32(r2_, r4->unk20);
+ r2_ = Q_24_8_TO_INT(r2_);
r4->unk24 = r2_;
}
else
@@ -2560,7 +2559,7 @@ void sub_80236B8(struct BerryCrushGame *r5)
r5->unk5C.unk02_1 = r5->unk25_4;
r5->unk5C.unk0A = r5->unk25_5;
memcpy(r5->unk40.unk2, &r5->unk5C, sizeof(r5->unk40.unk2));
- sub_800FE50(r5->unk40.unk2);
+ Rfu_SendPacket(r5->unk40.unk2);
}
void sub_802385C(struct BerryCrushGame *r5)
@@ -2581,7 +2580,7 @@ void sub_802385C(struct BerryCrushGame *r5)
for (r4 = 0; r4 < r5->unk9; ++r4)
r5->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] = 0;
#endif
- if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00
+ if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET
|| gRecvCmds[0][1] != 2)
{
r5->unk25_2 = 0;
@@ -2668,7 +2667,7 @@ static u32 sub_8023A30(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
{
case 0:
r4->unk12 = 8;
- PlaySE(SE_W070);
+ PlaySE(SE_M_STRENGTH);
BlendPalettes(0xFFFFFFFF, 8, RGB(31, 31, 0));
r4->unk138.unk0 = 2;
break;
@@ -2704,7 +2703,7 @@ static u32 sub_8023A30(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
case 4:
if (!sub_80218D4(r4, &r4->unk138))
return 0;
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
r4->unk10 = 0;
break;
case 5:
@@ -2725,7 +2724,7 @@ static u32 sub_8023BC0(struct BerryCrushGame *r5, u8 *r6)
{
case 0:
r5->unk12 = 9;
- PlaySE(SE_HAZURE);
+ PlaySE(SE_FAILURE);
BlendPalettes(0xFFFFFFFF, 8, RGB(31, 0, 0));
r5->unk138.unk0 = 4;
break;
@@ -2738,7 +2737,7 @@ static u32 sub_8023BC0(struct BerryCrushGame *r5, u8 *r6)
case 2:
if (!sub_80218D4(r5, &r5->unk138))
return 0;
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
r5->unk10 = 0;
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
@@ -2801,14 +2800,14 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1
);
r7->unk68.as_four_players.unk00.unk04 = r7->unk28;
r7->unk68.as_four_players.unk00.unk06 = r7->unk18 / (r7->unk28 / 60);
- r2 = sub_8151574(r7->unk30 << 8, 0x3200);
- r2 = sub_81515FC(r2, r7->unk32 << 8) + 0x3200;
- r2 >>= 8;
+ r2 = MathUtil_Mul32(Q_24_8(r7->unk30), Q_24_8(50));
+ r2 = MathUtil_Div32(r2, Q_24_8(r7->unk32)) + Q_24_8(50);
+ r2 = Q_24_8_TO_INT(r2);
r7->unk68.as_four_players.unk00.unk08 = r2 & 0x7F;
- r2 <<= 8;
- r2 = sub_81515FC(r2, 0x6400);
- r4 = (r7->unk1C * r7->unk9) << 8;
- r4 = sub_8151574(r4, r2);
+ r2 = Q_24_8(r2);
+ r2 = MathUtil_Div32(r2, Q_24_8(100));
+ r4 = Q_24_8(r7->unk1C * r7->unk9);
+ r4 = MathUtil_Mul32(r4, r2);
r7->unk68.as_four_players.unk00.unk00 = r4 >> 8;
r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][7] = Random() % 3;
for (r6 = 0, r8 = 0; r8 < r7->unk9; ++r8)
@@ -2823,11 +2822,11 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1
if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] != 0)
{
r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[2];
- r2 <<= 8;
- r2 = sub_8151574(r2, 0x6400);
+ r2 = Q_24_8(r2);
+ r2 = MathUtil_Mul32(r2, Q_24_8(100));
r4 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3];
- r4 <<= 8;
- r4 = sub_81515FC(r2, r4);
+ r4 = Q_24_8(r4);
+ r4 = MathUtil_Div32(r2, r4);
}
else
{
@@ -2838,11 +2837,11 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1
if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] != 0)
{
r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[4];
- r2 <<= 8;
- r2 = sub_8151574(r2, 0x6400);
+ r2 = Q_24_8(r2);
+ r2 = MathUtil_Mul32(r2, Q_24_8(100));
r4 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3];
- r4 <<= 8;
- r4 = sub_81515FC(r2, r4);
+ r4 = Q_24_8(r4);
+ r4 = MathUtil_Div32(r2, r4);
}
else
{
@@ -2861,11 +2860,11 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1
else
{
r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[5];
- r2 <<= 8;
- r2 = sub_8151574(r2, 0x6400);
+ r2 = Q_24_8(r2);
+ r2 = MathUtil_Mul32(r2, Q_24_8(100));
r4 = r7->unk28;
- r4 <<= 8;
- r4 = sub_81515FC(r2, r4);
+ r4 = Q_24_8(r4);
+ r4 = MathUtil_Div32(r2, r4);
}
break;
}
@@ -3006,7 +3005,7 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4)
r5->unkC = 0;
return 0;
case 1:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 2:
if (!IsLinkTaskFinished())
@@ -3014,10 +3013,10 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4)
DrawDialogueFrame(0, 0);
AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 0, 0, 2, 1, 3);
CopyWindowToVram(0, 3);
- CreateTask(sub_8153688, 0);
+ CreateTask(Task_LinkSave, 0);
break;
case 3:
- if (FuncIsActiveTask(sub_8153688))
+ if (FuncIsActiveTask(Task_LinkSave))
return 0;
break;
case 4:
@@ -3085,7 +3084,7 @@ static u32 sub_80242E0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
switch (r4->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
@@ -3185,12 +3184,12 @@ static u32 sub_8024508(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1
switch (r5->unkC)
{
case 0:
- sub_8010434();
+ Rfu_SetLinkStandbyCallback();
break;
case 1:
if (!IsLinkTaskFinished())
return 0;
- sub_800AC34();
+ SetCloseLinkCallback();
break;
case 2:
if (gReceivedRemoteLinkPlayers != 0)
@@ -3210,6 +3209,11 @@ static u32 sub_8024568(__attribute__((unused)) struct BerryCrushGame *r0, __attr
return 0;
}
+#if MODERN
+// TODO remove this as soon as the code below is understood
+// add a UBFIX if required (code buggy?)
+__attribute__((optimize("no-aggressive-loop-optimizations")))
+#endif
void sub_8024578(struct BerryCrushGame *r4)
{
u8 r5 = 0;
@@ -3251,68 +3255,23 @@ void sub_8024578(struct BerryCrushGame *r4)
}
}
-#ifdef NONMATCHING
-void sub_8024604(u8 *r0, u32 r1, s32 r2, u32 r3, u32 r5, u32 r6, u32 r4)
+static void BerryCrush_SetPaletteFadeParams(u8 *params, bool8 communicateAfter, u32 selectedPals, s8 delay, u8 startY, u8 targetY, u16 palette)
{
- u8 sp[8];
- u8 *p;
-
- 1[(u32 *)sp] = r2;
- 0[(u16 *)sp] = r4;
- p = &sp[4];
- r0[0] = p[0];
- r0[1] = p[1];
- r0[2] = p[2];
- r0[3] = p[3];
- r0[4] = r3;
- r0[5] = r5;
- r0[6] = r6;
- r0[7] = sp[0];
- r0[8] = sp[1];
- r0[9] = r1;
+ params[0] = ((u8 *)&selectedPals)[0];
+ params[1] = ((u8 *)&selectedPals)[1];
+ params[2] = ((u8 *)&selectedPals)[2];
+ params[3] = ((u8 *)&selectedPals)[3];
+ params[4] = delay;
+ params[5] = startY;
+ params[6] = targetY;
+ params[7] = ((u8 *)&palette)[0];
+ params[8] = ((u8 *)&palette)[1];
+ params[9] = communicateAfter;
}
-#else
-NAKED
-void sub_8024604(u8 *r0, u32 r1, s32 r2, u32 r3, u32 r5, u32 r6, u32 r4)
-{
- asm_unified("\n\
- push {r4-r6,lr}\n\
- sub sp, 0x8\n\
- str r2, [sp, 0x4]\n\
- ldr r5, [sp, 0x18]\n\
- ldr r6, [sp, 0x1C]\n\
- ldr r4, [sp, 0x20]\n\
- mov r2, sp\n\
- strh r4, [r2]\n\
- add r4, sp, 0x4\n\
- ldrb r2, [r4]\n\
- strb r2, [r0]\n\
- ldrb r2, [r4, 0x1]\n\
- strb r2, [r0, 0x1]\n\
- ldrb r2, [r4, 0x2]\n\
- strb r2, [r0, 0x2]\n\
- ldrb r2, [r4, 0x3]\n\
- strb r2, [r0, 0x3]\n\
- strb r3, [r0, 0x4]\n\
- strb r5, [r0, 0x5]\n\
- strb r6, [r0, 0x6]\n\
- mov r2, sp\n\
- ldrb r2, [r2]\n\
- strb r2, [r0, 0x7]\n\
- mov r2, sp\n\
- ldrb r2, [r2, 0x1]\n\
- strb r2, [r0, 0x8]\n\
- strb r1, [r0, 0x9]\n\
- add sp, 0x8\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0");
-}
-#endif
void sub_8024644(u8 *r0, u32 r1, u32 r2, u32 r3, u32 r5)
{
- u8 sp[4];
+ u8 sp[2];
0[(u16 *)sp] = r3;
r0[0] = r1;