Match sub_8022250

This commit is contained in:
GriffinR
2020-05-21 12:47:16 -04:00
committed by huderlem
parent cfc47e642f
commit b29c7554ea
+54 -58
View File
@@ -322,7 +322,7 @@ static const u8 sBerryCrushTextColorTable[][3] =
}; };
static const struct WindowTemplate gUnknown_082F32EC = static const struct WindowTemplate sWindowTemplate_BerryCrushRankings =
{ {
.bg = 0, .bg = 0,
.tilemapLeft = 3, .tilemapLeft = 3,
@@ -421,7 +421,7 @@ static const u8 gUnknown_082F3344[][4] =
{12, 14, 15, 16}, {12, 14, 15, 16},
}; };
static const u32 gUnknown_082F334C[] = static const u32 sPressingSpeedConversionTable[] =
{ {
50000000 / (1 << 0), 50000000 / (1 << 0),
50000000 / (1 << 1), 50000000 / (1 << 1),
@@ -1388,7 +1388,7 @@ void sub_8021944(struct BerryCrushGame_138 *arg0, u16 arg1)
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
if ((r3 >> (7 - i)) & 1) if ((r3 >> (7 - i)) & 1)
r7 += gUnknown_082F334C[i]; r7 += sPressingSpeedConversionTable[i];
} }
arg0->unk8 = r7 / 1000000; 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; r7 = sp24->as_four_players.unk00.unk0C[sp10][r8] & 15;
for (r2 = 0; r2 < 4; ++r2) for (r2 = 0; r2 < 4; ++r2)
if ((r7 >> (3 - r2)) & 1) if ((r7 >> (3 - r2)) & 1)
r3 += gUnknown_082F334C[r2]; r3 += sPressingSpeedConversionTable[r2];
r7 = r3 / 1000000u; r7 = r3 / 1000000u;
ConvertIntToDecimalStringN(gStringVar2, r7, STR_CONV_MODE_LEADING_ZEROS, 2); ConvertIntToDecimalStringN(gStringVar2, r7, STR_CONV_MODE_LEADING_ZEROS, 2);
StringExpandPlaceholders(gStringVar4, gUnknown_082F43B4[sp10]); 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); AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_TimesPerSec);
for (; r10 < 8; ++r10) for (; r10 < 8; ++r10)
if (((u8)r8->unk16 >> (7 - r10)) & 1) 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(gStringVar1, r8->unk16 >> 8, STR_CONV_MODE_RIGHT_ALIGN, 3);
ConvertIntToDecimalStringN(gStringVar2, sp0C / 1000000, STR_CONV_MODE_LEADING_ZEROS, 2); ConvertIntToDecimalStringN(gStringVar2, sp0C / 1000000, STR_CONV_MODE_LEADING_ZEROS, 2);
StringExpandPlaceholders(gStringVar4, gText_XDotY3); StringExpandPlaceholders(gStringVar4, gText_XDotY3);
@@ -1580,93 +1580,89 @@ void sub_802222C(struct BerryCrushGame *r4)
sub_8022600(r4); sub_8022600(r4);
} }
void sub_8022250(u8 r4) static void Task_ShowBerryCrushRankings(u8 taskId)
{ {
u8 r9 = 0, r2, r7, r10; u8 i = 0, j, xPos, yPos;
u32 sp0C = 0; u32 score = 0;
s16 *r6 = gTasks[r4].data; s16 *data = gTasks[taskId].data;
const u8 *r10_; // turn r5/sl register swap into r8/sl u8 *str;
switch (r6[0]) switch (data[0])
{ {
case 0: case 0:
r6[1] = AddWindow(&gUnknown_082F32EC); data[1] = AddWindow(&sWindowTemplate_BerryCrushRankings);
PutWindowTilemap((u8)r6[1]); PutWindowTilemap(data[1]);
FillWindowPixelBuffer((u8)r6[1], PIXEL_FILL(0)); FillWindowPixelBuffer(data[1], PIXEL_FILL(0));
LoadUserWindowBorderGfx_((u8)r6[1], 541, 208); LoadUserWindowBorderGfx_(data[1], 541, 208);
DrawStdFrameWithCustomTileAndPalette((u8)r6[1], 0, 541, 13); DrawStdFrameWithCustomTileAndPalette(data[1], 0, 541, 13);
break; break;
case 1: case 1:
r10_ = gText_BerryCrush2; xPos = 96 - GetStringWidth(1, gText_BerryCrush2, -1) / 2u;
++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;
AddTextPrinterParameterized3( AddTextPrinterParameterized3(
(u8)r6[1], data[1],
1, 1,
r7, xPos,
1, 1,
sBerryCrushTextColorTable[3], sBerryCrushTextColorTable[3],
0, 0,
r10_ gText_BerryCrush2
); );
r10_ = gText_PressingSpeedRankings; xPos = 96 - GetStringWidth(1, gText_PressingSpeedRankings, -1) / 2u;
r7 = 96 - GetStringWidth(1, r10_, -1) / 2u;
AddTextPrinterParameterized3( AddTextPrinterParameterized3(
(u8)r6[1], data[1],
1, 1,
r7, xPos,
17, 17,
sBerryCrushTextColorTable[3], sBerryCrushTextColorTable[3],
0, 0,
r10_ gText_PressingSpeedRankings
); );
r10 = 41; yPos = 41;
for (; r9 < 4; ++r9) 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); StringExpandPlaceholders(gStringVar4, gText_Var1Players);
AddTextPrinterParameterized3( AddTextPrinterParameterized3(
(u8)r6[1], data[1],
1, 1,
0, 0,
r10, yPos,
sBerryCrushTextColorTable[0], sBerryCrushTextColorTable[0],
0, 0,
gStringVar4 gStringVar4
); );
r7 = 192 - (u8)GetStringWidth(1, gText_TimesPerSec, -1); xPos = 192 - (u8)GetStringWidth(1, gText_TimesPerSec, -1);
AddTextPrinterParameterized3( AddTextPrinterParameterized3(
(u8)r6[1], data[1],
1, 1,
r7, xPos,
r10, yPos,
sBerryCrushTextColorTable[0], sBerryCrushTextColorTable[0],
0, 0,
gText_TimesPerSec gText_TimesPerSec
); );
for (r2 = 0; r2 < 8; ++r2) for (j = 0; j < 8; ++j)
if (((u8)r6[r9 + 2] >> (7 - r2)) & 1) {
sp0C += gUnknown_082F334C[r2]; if (((data[i + 2] & 0xFF) >> (7 - j)) & 1)
ConvertIntToDecimalStringN(gStringVar1, (u16)r6[r9 + 2] >> 8, STR_CONV_MODE_RIGHT_ALIGN, 3); score += sPressingSpeedConversionTable[j];
ConvertIntToDecimalStringN(gStringVar2, sp0C / 1000000, STR_CONV_MODE_LEADING_ZEROS, 2); }
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); StringExpandPlaceholders(gStringVar4, gText_XDotY3);
r7 -= GetStringWidth(1, gStringVar4, -1); xPos -= GetStringWidth(1, gStringVar4, -1);
AddTextPrinterParameterized3( AddTextPrinterParameterized3(
(u8)r6[1], data[1],
1, 1,
r7, xPos,
r10, yPos,
sBerryCrushTextColorTable[0], sBerryCrushTextColorTable[0],
0, 0,
gStringVar4 gStringVar4
); );
r10 += 16; yPos += 16;
sp0C = 0; score = 0;
} }
CopyWindowToVram((u8)r6[1], 3); CopyWindowToVram(data[1], 3);
break; break;
case 2: case 2:
if (gMain.newKeys & (A_BUTTON | B_BUTTON)) if (gMain.newKeys & (A_BUTTON | B_BUTTON))
@@ -1674,16 +1670,16 @@ void sub_8022250(u8 r4)
else else
return; return;
case 3: case 3:
ClearStdWindowAndFrameToTransparent((u8)r6[1], 1); ClearStdWindowAndFrameToTransparent(data[1], 1);
ClearWindowTilemap((u8)r6[1]); ClearWindowTilemap(data[1]);
RemoveWindow((u8)r6[1]); RemoveWindow(data[1]);
DestroyTask(r4); DestroyTask(taskId);
EnableBothScriptContexts(); EnableBothScriptContexts();
ScriptContext2_Disable(); ScriptContext2_Disable();
r6[0] = 0; data[0] = 0;
return; return;
} }
++r6[0]; ++data[0];
} }
void ShowBerryCrushRankings(void) void ShowBerryCrushRankings(void)
@@ -1691,7 +1687,7 @@ void ShowBerryCrushRankings(void)
u8 taskId; u8 taskId;
ScriptContext2_Enable(); ScriptContext2_Enable();
taskId = CreateTask(sub_8022250, 0); taskId = CreateTask(Task_ShowBerryCrushRankings, 0);
gTasks[taskId].data[2] = gSaveBlock2Ptr->berryCrush.berryCrushResults[0]; gTasks[taskId].data[2] = gSaveBlock2Ptr->berryCrush.berryCrushResults[0];
gTasks[taskId].data[3] = gSaveBlock2Ptr->berryCrush.berryCrushResults[1]; gTasks[taskId].data[3] = gSaveBlock2Ptr->berryCrush.berryCrushResults[1];
gTasks[taskId].data[4] = gSaveBlock2Ptr->berryCrush.berryCrushResults[2]; gTasks[taskId].data[4] = gSaveBlock2Ptr->berryCrush.berryCrushResults[2];