sub_3CBC4

This commit is contained in:
Marcus Huderle 2025-08-08 07:25:28 -05:00
parent 51fbb5c15a
commit ce679ef0c7
4 changed files with 744 additions and 3200 deletions

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -424,24 +424,44 @@ struct PinballGame
/*0x443*/ s8 unk443[2];
/*0x445*/ u8 filler445[0xD];
/*0x452*/ u16 unk452;
/*0x454*/ u8 filler454[0x4];
/*0x454*/ u8 filler454[0x2];
/*0x456*/ u16 unk456;
/*0x458*/ u16 unk458[2];
/*0x45C*/ struct Vector16 unk45C[2];
/*0x464*/ struct Vector16 unk464[2];
/*0x46C*/ u8 filler46C[0x13];
/*0x46C*/ struct Vector16 unk46C[4];
/*0x47C*/ u8 filler47C[0x1];
/*0x47D*/ s8 unk47D;
/*0x47E*/ u8 filler47E[0x1];
/*0x47F*/ s8 unk47F;
/*0x480*/ u16 unk480;
/*0x482*/ u8 filler482[0x4];
/*0x482*/ u16 unk482;
/*0x484*/ s16 unk484;
/*0x486*/ s16 unk486;
/*0x488*/ u8 filler488[0x1C];
/*0x488*/ struct Vector16 unk488;
/*0x48C*/ s8 unk48C[4];
/*0x490*/ s8 unk490[4];
/*0x494*/ s8 unk494[4];
/*0x498*/ s8 unk498[4];
/*0x49C*/ s8 unk49C[4];
/*0x4A0*/ s8 unk4A0[4];
/*0x4A4*/ s8 unk4A4[4];
/*0x4A8*/ u8 filler4A8[0xC];
/*0x4A8*/ s8 unk4A8[4];
/*0x4AC*/ u16 unk4AC[4];
/*0x4B4*/ struct Vector16 unk4B4[4];
/*0x4C4*/ u8 filler4C4[0x4];
/*0x4C4*/ u16 unk4C4;
/*0x4C6*/ u8 filler4C6[0x2];
/*0x4C8*/ s8 unk4C8;
/*0x4C9*/ u8 filler4C9[0xC];
/*0x4C9*/ u8 filler4C9[0x3];
/*0x4CC*/ s8 unk4CC[3];
/*0x4CF*/ s8 unk4CF[3];
/*0x4D2*/ s8 unk4D2[3];
/*0x4D5*/ s8 unk4D5[3];
/*0x4D8*/ u8 filler4D8[0x20];
/*0x4D8*/ u16 unk4D8[3];
/*0x4DE*/ s16 unk4DE[3];
/*0x4E4*/ s16 unk4E4[3];
/*0x4EA*/ u8 filler4EA[0x2];
/*0x4EC*/ struct Vector16 unk4EC[3];
/*0x4F8*/ struct Vector16 unk4F8[3];
/*0x504*/ u8 unk504;
/*0x505*/ s8 unk505;

View File

@ -122,6 +122,15 @@ extern const u8 gUnknown_083C5A2C[];
extern const s16 gUnknown_086AF3B2[];
extern const s16 gUnknown_086AF3BE[];
extern const u16 gUnknown_086AF3C6[];
extern const u16 gUnknown_086B63AA[][2][3];
extern const u16 gUnknown_086B63F2[][4][3];
extern const u16 gUnknown_086B8AE0[][10][3];
extern const s16 gUnknown_086AF3AC[];
extern const s16 gUnknown_086AF34C[][3];
extern const s8 gUnknown_084A11EC[][0x300];
extern const u16 gUnknown_086AF2DC[][2];
extern const struct Vector16 gUnknown_086AF2CC[];
extern const s16 gUnknown_086AEE20[];
struct Unk_086AFAC0
{
@ -137,6 +146,7 @@ extern struct SongHeader gUnknown_086A2E70;
extern struct SongHeader gUnknown_086A2D28;
extern struct SongHeader gUnknown_086A2EAC;
extern struct SongHeader gUnknown_086A2E90;
extern struct SongHeader gUnknown_086A26A0;
extern s16 gUnknown_02030750[];
extern s16 gUnknown_02031500[];
@ -145,6 +155,712 @@ extern u8 gUnknown_0200FBB0[];
extern u8 gUnknown_020030A0[];
void sub_3CBC4(void)
{
s16 i, j;
struct SpriteGroup *group;
struct OamDataSimple *oamSimple;
u16 *dst;
const u16 *src;
s16 varSL;
int xx, yy;
int squaredMagnitude;
struct Vector32 tempVector;
s8 var0;
varSL = 0;
group = &gMain.spriteGroups[10];
if (group->available)
{
if (gCurrentPinballGame->unk6C4 == 3)
{
group->baseX = 240;
group->baseY = 180;
}
else
{
group->baseX = 96;
group->baseY = 55;
}
gCurrentPinballGame->unk6E4.x = group->baseX;
gCurrentPinballGame->unk6E4.y = group->baseY;
if (group->baseY >= 200)
group->baseY = 200;
for (j = 0; j < 6; j++)
{
oamSimple = &group->oam[j];
gOamBuffer[oamSimple->oamId].paletteNum = 13;
gOamBuffer[oamSimple->oamId].priority = gCurrentPinballGame->unk6DB;
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
}
group = &gMain.spriteGroups[9];
group->baseX = gCurrentPinballGame->unk6E4.x - 8;
group->baseY = gCurrentPinballGame->unk6E4.y - 8;
if (group->baseY >= 200)
group->baseY = 200;
for (j = 0; j < 6; j++)
{
oamSimple = &group->oam[j];
gOamBuffer[oamSimple->oamId].priority = gCurrentPinballGame->unk6DB;
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
}
}
group = &gMain.spriteGroups[24];
if (group->available)
{
gCurrentPinballGame->unk486--;
if (gCurrentPinballGame->unk486 >= 600)
{
varSL = 0;
}
else if (gCurrentPinballGame->unk486 >= 6)
{
varSL = (gCurrentPinballGame->unk486 % 15) / 5 + 1;
if (gCurrentPinballGame->unk47F > 0)
{
if (gCurrentPinballGame->unk47F == 7)
gCurrentPinballGame->ball->positionQ8.x += 0x100;
else if (gCurrentPinballGame->unk47F == 4)
gCurrentPinballGame->ball->positionQ8.x -= 0x200;
else if (gCurrentPinballGame->unk47F == 1)
gCurrentPinballGame->ball->positionQ8.x += 0x100;
gCurrentPinballGame->unk47F--;
}
else if (gCurrentPinballGame->newButtonActions[0] || gCurrentPinballGame->newButtonActions[1])
{
gCurrentPinballGame->unk486 = gCurrentPinballGame->unk486 - 30;
if (gCurrentPinballGame->unk486 < 5)
gCurrentPinballGame->unk486 = 5;
gCurrentPinballGame->unk47F = 7;
m4aSongNumStart(SE_UNKNOWN_0x11E);
}
if (gCurrentPinballGame->unk480)
{
gCurrentPinballGame->unk480--;
if (gCurrentPinballGame->unk480 > 50)
varSL = 4;
else if (gCurrentPinballGame->unk480 > 40)
varSL = 5;
}
else if (gCurrentPinballGame->newButtonActions[0] || gCurrentPinballGame->newButtonActions[1])
{
gCurrentPinballGame->unk480 = 60;
}
}
else
{
varSL = 4;
}
if (gCurrentPinballGame->unk486 == 0)
{
gMain.spriteGroups[24].available = 0;
gCurrentPinballGame->unk480 = 0;
gCurrentPinballGame->unk383 = 0;
}
else
{
gCurrentPinballGame->unk383 = 1;
gCurrentPinballGame->ball->velocity.x = 0;
gCurrentPinballGame->ball->velocity.y = 0;
gCurrentPinballGame->ball->unk6 = 0;
}
group->baseX = gCurrentPinballGame->ball->positionQ0.x - gCurrentPinballGame->unk58 - 8;
group->baseY = gCurrentPinballGame->ball->positionQ0.y - gCurrentPinballGame->unk5A - 8;
for (j = 0; j < 2; j++)
{
oamSimple = &group->oam[j];
dst = (u16*)&gOamBuffer[oamSimple->oamId];
src = gUnknown_086B63AA[varSL][j];
*dst++ = *src++;
*dst++ = *src++;
*dst++ = *src++;
gOamBuffer[oamSimple->oamId].x += group->baseX;
gOamBuffer[oamSimple->oamId].y += group->baseY;
}
}
group = &gMain.spriteGroups[22];
if (group->available)
{
tempVector.x = gCurrentPinballGame->unk488.x / 10 - gCurrentPinballGame->ball->positionQ0.x;
tempVector.y = gCurrentPinballGame->unk488.y / 10 - gCurrentPinballGame->ball->positionQ0.y;
xx = tempVector.x * tempVector.x;
yy = tempVector.y * tempVector.y;
squaredMagnitude = xx + yy;
if (gCurrentPinballGame->unk482)
{
gCurrentPinballGame->unk482--;
if (gCurrentPinballGame->unk482 >= 10)
{
varSL = (gCurrentPinballGame->unk482 % 8) / 4 + gCurrentPinballGame->unk47D * 2;
if (squaredMagnitude <= 240 && gCurrentPinballGame->unk388 == 0 && gCurrentPinballGame->unk486 < 600)
{
MPlayStart(&gMPlayInfo_SE1, &gUnknown_086A26A0);
gCurrentPinballGame->unk482 = 10;
gMain.spriteGroups[24].available = 1;
gCurrentPinballGame->unk486 = 612;
sub_11B0(9);
}
gCurrentPinballGame->unk488.x += (Cos(gCurrentPinballGame->unk484) * 40) / 20000;
gCurrentPinballGame->unk488.y += (Sin(gCurrentPinballGame->unk484) * -40) / 20000;
}
else
{
varSL = (gCurrentPinballGame->unk47D * 2) - ((gCurrentPinballGame->unk482 / 5) - 7);
if (gCurrentPinballGame->unk482 == 9)
{
if (squaredMagnitude <= 240)
{
gCurrentPinballGame->unk488.x = (gCurrentPinballGame->ball->positionQ0.x + 4) * 10;
gCurrentPinballGame->unk488.y = (gCurrentPinballGame->ball->positionQ0.y + 14) * 10;
}
else
{
if (gCurrentPinballGame->unk47D == 0)
{
gCurrentPinballGame->unk488.x += 0;
gCurrentPinballGame->unk488.y += 240;
}
else if (gCurrentPinballGame->unk47D == 1)
{
gCurrentPinballGame->unk488.x -= 120;
gCurrentPinballGame->unk488.y += 240;
}
else
{
gCurrentPinballGame->unk488.x += 120;
gCurrentPinballGame->unk488.y += 240;
}
}
m4aSongNumStart(SE_UNKNOWN_0x120);
}
}
if (gCurrentPinballGame->unk482 == 0)
gMain.spriteGroups[22].available = 0;
}
group->baseX = gCurrentPinballGame->unk488.x / 10 - gCurrentPinballGame->unk58 - 12;
group->baseY = gCurrentPinballGame->unk488.y / 10 - gCurrentPinballGame->unk5A - 22;
for (j = 0; j < 4; j++)
{
oamSimple = &group->oam[j];
dst = (u16*)&gOamBuffer[oamSimple->oamId];
src = gUnknown_086B63F2[varSL][j];
*dst++ = *src++;
*dst++ = *src++;
*dst++ = *src++;
gOamBuffer[oamSimple->oamId].x += group->baseX;
gOamBuffer[oamSimple->oamId].y += group->baseY;
}
if (gCurrentPinballGame->unk5A4 == 2)
{
gMain.spriteGroups[22].available = 0;
gCurrentPinballGame->unk482 = 0;
}
}
for (i = 0; i < 3; i++)
{
group = &gMain.spriteGroups[15 + i];
if (group->available)
{
switch (gCurrentPinballGame->unk4CF[i])
{
case 0:
gCurrentPinballGame->unk4D2[i] = gUnknown_086AF3AC[i];
gCurrentPinballGame->unk4EC[i].x = (((Random() % 101) * 145) / 100 + 30) * 10;
gCurrentPinballGame->unk4CC[i] = Random() % 16;
if (gCurrentPinballGame->unk4CC[i] == gCurrentPinballGame->unk4CC[(i + 1) % 3])
gCurrentPinballGame->unk4CC[i] = (gCurrentPinballGame->unk4CC[i] + 1) % 16;
if (gCurrentPinballGame->unk4CC[i] == gCurrentPinballGame->unk4CC[(i + 2) % 3])
gCurrentPinballGame->unk4CC[i] = (gCurrentPinballGame->unk4CC[i] + 1) % 16;
gCurrentPinballGame->unk4EC[i].x = gUnknown_086AF34C[gCurrentPinballGame->unk4CC[i]][0] * 10;
gCurrentPinballGame->unk4EC[i].y = gUnknown_086AF34C[gCurrentPinballGame->unk4CC[i]][1] * 10;
gCurrentPinballGame->unk4E4[i] = -1200;
gCurrentPinballGame->unk4DE[i] = 0;
gCurrentPinballGame->unk4CF[i] = 1;
gCurrentPinballGame->unk4F8[i].x = 0;
gCurrentPinballGame->unk4F8[i].y = 0;
gCurrentPinballGame->unk4D5[i] = 0;
break;
case 1:
if (gCurrentPinballGame->unk4E4[i] < 0) {
gCurrentPinballGame->unk4DE[i] += 3;
gCurrentPinballGame->unk4E4[i] += gCurrentPinballGame->unk4DE[i];
if (gCurrentPinballGame->unk4E4[i] > 0) {
gCurrentPinballGame->unk4E4[i] = 0;
}
}
if (gCurrentPinballGame->unk4E4[i] >= 0)
{
if (gCurrentPinballGame->unk4D8[i] == 0)
{
m4aSongNumStart(SE_UNKNOWN_0x121);
sub_11B0(7);
}
if (gCurrentPinballGame->unk4D8[i] < 5)
{
gCurrentPinballGame->unk4D2[i] = gUnknown_086AF3AC[i] + 1;
}
else if (gCurrentPinballGame->unk4D8[i] < 10)
{
gCurrentPinballGame->unk4D2[i] = gUnknown_086AF3AC[i] + 2;
}
else
{
gCurrentPinballGame->unk4D8[i] = 0;
gCurrentPinballGame->unk4D2[i] = gUnknown_086AF3AC[i];
gCurrentPinballGame->unk4CF[i] = 2;
}
gCurrentPinballGame->unk4D8[i]++;
}
gCurrentPinballGame->unk4F8[i].x = 0;
gCurrentPinballGame->unk4F8[i].y = 0;
break;
case 2:
gCurrentPinballGame->unk4F8[i].x = (gCurrentPinballGame->unk4EC[i].x / 10) * 2;
gCurrentPinballGame->unk4F8[i].y = (gCurrentPinballGame->unk4EC[i].y / 10) * 2 + 8;
if (gCurrentPinballGame->unk4D5[i])
{
if (gCurrentPinballGame->unk4D8[i] == 1)
{
m4aSongNumStart(SE_UNKNOWN_0x121);
sub_11B0(7);
}
if (gCurrentPinballGame->unk4D8[i] < 5)
{
gCurrentPinballGame->unk4D2[i] = gUnknown_086AF3AC[i] + 3;
}
else if (gCurrentPinballGame->unk4D8[i] < 10)
{
gCurrentPinballGame->unk4D2[i] = gUnknown_086AF3AC[i] + 4;
}
else
{
gCurrentPinballGame->unk4D8[i] = 0;
gCurrentPinballGame->unk4D2[i] = gUnknown_086AF3AC[i] + 5;
gCurrentPinballGame->unk4CF[i] = 3;
gCurrentPinballGame->unk4D5[i] = 0;
}
gCurrentPinballGame->unk4D8[i]++;
}
break;
case 3:
gCurrentPinballGame->unk4F8[i].x = (gCurrentPinballGame->unk4EC[i].x / 10) * 2;
gCurrentPinballGame->unk4F8[i].y = (gCurrentPinballGame->unk4EC[i].y / 10) * 2 + 8;
if (gCurrentPinballGame->unk4D5[i])
{
if (gCurrentPinballGame->unk4D8[i] == 1)
{
m4aSongNumStart(SE_UNKNOWN_0x121);
sub_11B0(7);
}
if (gCurrentPinballGame->unk4D8[i] < 5)
{
gCurrentPinballGame->unk4D2[i] = gUnknown_086AF3AC[i] + 6;
}
else if (gCurrentPinballGame->unk4D8[i] < 10)
{
gCurrentPinballGame->unk4D2[i] = gUnknown_086AF3AC[i] + 7;
}
else
{
gCurrentPinballGame->unk4D8[i] = 0;
gCurrentPinballGame->unk4D2[i] = gUnknown_086AF3AC[i] + 8;
gCurrentPinballGame->unk4CF[i] = 4;
gCurrentPinballGame->unk4D5[i] = 0;
}
gCurrentPinballGame->unk4D8[i]++;
}
break;
case 4:
gCurrentPinballGame->unk4F8[i].x = (gCurrentPinballGame->unk4EC[i].x / 10) * 2;
gCurrentPinballGame->unk4F8[i].y = (gCurrentPinballGame->unk4EC[i].y / 10) * 2 + 8;
if (gCurrentPinballGame->unk4D5[i])
{
if (gCurrentPinballGame->unk4D8[i] == 1)
{
m4aSongNumStart(SE_UNKNOWN_0x121);
sub_11B0(7);
}
if (gCurrentPinballGame->unk4D8[i] < 3)
{
gCurrentPinballGame->unk4D2[i] = 9;
}
else if (gCurrentPinballGame->unk4D8[i] < 8)
{
gCurrentPinballGame->unk4D2[i] = 10;
}
else if (gCurrentPinballGame->unk4D8[i] < 14)
{
gCurrentPinballGame->unk4D2[i] = 11;
}
else if (gCurrentPinballGame->unk4D8[i] < 23)
{
gCurrentPinballGame->unk4D2[i] = 12;
}
else
{
gCurrentPinballGame->unk4D8[i] = 0;
gCurrentPinballGame->unk4D2[i] = 12;
gCurrentPinballGame->unk4CF[i] = 5;
gCurrentPinballGame->unk4D5[i] = 0;
}
gCurrentPinballGame->unk4D8[i]++;
}
break;
case 5:
gCurrentPinballGame->unk4F8[i].x = 0;
gCurrentPinballGame->unk4F8[i].y = 0;
gMain.spriteGroups[15 + i].available = 0;
break;
}
var0 = gCurrentPinballGame->unk4D2[i];
DmaCopy16(3, gUnknown_084A11EC[var0], (void *)0x06010FA0 + i * 0x300, 0x300);
group->baseX = (gCurrentPinballGame->unk4EC[i].x / 10) + i - gCurrentPinballGame->unk58;
group->baseY = (gCurrentPinballGame->unk4E4[i] / 10) + (gCurrentPinballGame->unk4EC[i].y / 10) - gCurrentPinballGame->unk5A;
for (j = 0; j < 3; j++)
{
oamSimple = &group->oam[j];
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
}
if (gCurrentPinballGame->unk4CF[i] >= 2 && gCurrentPinballGame->unk4CF[i] < 5)
{
if (gUnknown_086AF34C[gCurrentPinballGame->unk4CC[i]][2] == gCurrentPinballGame->unk456)
{
gCurrentPinballGame->unk4CF[i] = 4;
gCurrentPinballGame->unk4D5[i] = 1;
gCurrentPinballGame->unk4D8[i] = 0;
}
}
}
}
for (i = 0; i < 4; i++)
{
group = &gMain.spriteGroups[18 + i];
if (group->available)
{
switch(gCurrentPinballGame->unk48C[i])
{
case 0:
gCurrentPinballGame->unk49C[i] = 0;
gCurrentPinballGame->unk490[i] = 8;
gCurrentPinballGame->unk494[i] = 1;
gCurrentPinballGame->unk4A0[i] = 0;
break;
case 1:
gCurrentPinballGame->unk49C[i] = 8;
gCurrentPinballGame->unk490[i] = 12;
gCurrentPinballGame->unk494[i] = 3;
gCurrentPinballGame->unk4A0[i] = 14;
gCurrentPinballGame->unk48C[i] = 2;
break;
case 2:
if (gCurrentPinballGame->unk4A4[i] > 0)
{
gCurrentPinballGame->unk4A4[i]--;
if (gCurrentPinballGame->unk4A4[i] == 7)
{
m4aSongNumStart(SE_UNKNOWN_0x123);
gCurrentPinballGame->unk48C[i] = 3;
sub_11B0(7);
}
}
break;
case 3:
gCurrentPinballGame->unk49C[i] = 12;
gCurrentPinballGame->unk490[i] = 16;
gCurrentPinballGame->unk494[i] = 5;
gCurrentPinballGame->unk4A0[i] = 14;
gCurrentPinballGame->unk48C[i] = 4;
break;
case 4:
if (gCurrentPinballGame->unk4A4[i] > 0)
{
gCurrentPinballGame->unk4A4[i]--;
if (gCurrentPinballGame->unk4A4[i] == 7)
{
m4aSongNumStart(SE_UNKNOWN_0x123);
gCurrentPinballGame->unk48C[i] = 5;
sub_11B0(7);
}
}
break;
case 5:
gCurrentPinballGame->unk49C[i] = 16;
gCurrentPinballGame->unk490[i] = 20;
gCurrentPinballGame->unk494[i] = 7;
gCurrentPinballGame->unk4A0[i] = 14;
gCurrentPinballGame->unk48C[i] = 6;
break;
case 6:
if (gCurrentPinballGame->unk4A4[i] > 0)
{
gCurrentPinballGame->unk4A4[i]--;
if (gCurrentPinballGame->unk4A4[i] == 7)
{
m4aSongNumStart(SE_UNKNOWN_0x123);
gCurrentPinballGame->unk48C[i] = 7;
sub_11B0(7);
}
}
break;
case 7:
gCurrentPinballGame->unk49C[i] = 20;
gCurrentPinballGame->unk490[i] = 24;
gCurrentPinballGame->unk494[i] = 9;
gCurrentPinballGame->unk4A0[i] = 14;
gCurrentPinballGame->unk48C[i] = 8;
gCurrentPinballGame->unk4A8[i] = 0;
break;
case 8:
if (gCurrentPinballGame->unk4A4[i] > 0)
{
gCurrentPinballGame->unk4A4[i]--;
if (gCurrentPinballGame->unk4A4[i] == 7)
{
if (gCurrentPinballGame->unk4A8[i] <= 0)
{
gCurrentPinballGame->unk4A8[i]++;
}
else
{
gCurrentPinballGame->unk4A8[i] = 0;
gCurrentPinballGame->unk48C[i] = 9;
}
m4aSongNumStart(SE_UNKNOWN_0x123);
sub_11B0(7);
}
}
break;
case 9:
gCurrentPinballGame->unk49C[i] = 24;
gCurrentPinballGame->unk490[i] = 27;
gCurrentPinballGame->unk494[i] = 10;
gCurrentPinballGame->unk4A0[i] = 0;
break;
case 10:
gMain.spriteGroups[18 + i].available = 0;
break;
}
if (gUnknown_086AF2DC[gCurrentPinballGame->unk498[i]][1] > gCurrentPinballGame->unk4AC[i])
{
gCurrentPinballGame->unk4AC[i]++;
}
else
{
gCurrentPinballGame->unk4AC[i] = 0;
gCurrentPinballGame->unk498[i]++;
if (gCurrentPinballGame->unk498[i] == gCurrentPinballGame->unk490[i])
{
if (gCurrentPinballGame->unk4A0[i] > 0)
{
gCurrentPinballGame->unk498[i] = gCurrentPinballGame->unk49C[i];
gCurrentPinballGame->unk4A0[i]--;
}
else
{
gCurrentPinballGame->unk498[i] = gCurrentPinballGame->unk490[i] - 1;
gCurrentPinballGame->unk48C[i] = gCurrentPinballGame->unk494[i];
}
}
}
varSL = gUnknown_086AF2DC[gCurrentPinballGame->unk498[i]][0];
// Unsigned integers for matching
group->baseX = gUnknown_086AF2CC[i].x + 65u - gCurrentPinballGame->unk58;
group->baseY = gUnknown_086AF2CC[i].y + 60u - gCurrentPinballGame->unk5A;
if (gCurrentPinballGame->unk48C[i] < 9)
{
gCurrentPinballGame->unk4B4[i].x = (gUnknown_086AF2CC[i].x + 61) * 2;
gCurrentPinballGame->unk4B4[i].y = (gUnknown_086AF2CC[i].y + 96) * 2;
}
if (gCurrentPinballGame->unk4A4[i] > 0)
{
for (j = 0; j < 10; j++)
{
oamSimple = &group->oam[j];
dst = (u16*)&gOamBuffer[oamSimple->oamId];
src = gUnknown_086B8AE0[varSL][j];
*dst++ = *src++;
*dst++ = *src++;
*dst++ = *src++;
gOamBuffer[oamSimple->oamId].x += group->baseX;
gOamBuffer[oamSimple->oamId].y += group->baseY;
gOamBuffer[oamSimple->oamId].paletteNum = 2;
}
}
else
{
for (j = 0; j < 10; j++)
{
oamSimple = &group->oam[j];
dst = (u16*)&gOamBuffer[oamSimple->oamId];
src = gUnknown_086B8AE0[varSL][j];
*dst++ = *src++;
*dst++ = *src++;
*dst++ = *src++;
gOamBuffer[oamSimple->oamId].x += group->baseX;
gOamBuffer[oamSimple->oamId].y += group->baseY;
}
}
}
else
{
gCurrentPinballGame->unk4B4[i].x = 0;
gCurrentPinballGame->unk4B4[i].y = 0;
}
}
if (gCurrentPinballGame->unk4C4)
{
gCurrentPinballGame->unk4C4--;
if (gCurrentPinballGame->unk4C4 == 36)
m4aSongNumStart(SE_UNKNOWN_0x122);
if (gCurrentPinballGame->unk4C4 == 24)
m4aSongNumStart(SE_UNKNOWN_0x122);
if (gCurrentPinballGame->unk4C4 == 12)
m4aSongNumStart(SE_UNKNOWN_0x122);
if (gCurrentPinballGame->unk4C4 == 0)
m4aSongNumStart(SE_UNKNOWN_0x122);
}
group = &gMain.spriteGroups[30];
if (group->available)
{
s16 scale;
s16 var6;
if (gCurrentPinballGame->unk456 <= 35)
{
scale = (gCurrentPinballGame->unk456 * 0x200) / 35 + 0x10;
if (scale > 0x200)
scale = 0x200;
SetMatrixScale(scale, scale, 1);
SetMatrixScale(-scale, scale, 2);
SetMatrixScale(scale, -scale, 3);
SetMatrixScale(-scale, -scale, 4);
if (gCurrentPinballGame->unk456 > 30)
var6 = 12 - ((gCurrentPinballGame->unk456 - 30) * 11) / 5;
else
var6 = 16 - (gCurrentPinballGame->unk456 * 4) / 30;
gCurrentPinballGame->unk456++;
}
else
{
scale = 0x100;
var6 = 0;
group->available = 0;
}
if (gCurrentPinballGame->unk456 == 34)
{
for (i = 0; i < 4; i++)
{
gMain.spriteGroups[i + 18].available = 1;
gCurrentPinballGame->unk48C[i] = 0;
gCurrentPinballGame->unk498[i] = 0;
gCurrentPinballGame->unk4AC[i] = 0;
}
gCurrentPinballGame->unk4C4 = 37;
}
gCurrentPinballGame->unk46C[0].x = 0x20 - scale / 8;
gCurrentPinballGame->unk46C[1].x = 0x20 + scale / 8;
gCurrentPinballGame->unk46C[2].x = 0x20 - scale / 8;
gCurrentPinballGame->unk46C[3].x = 0x20 + scale / 8;
gCurrentPinballGame->unk46C[0].y = 0x20 - scale / 8;
gCurrentPinballGame->unk46C[1].y = 0x20 - scale / 8;
gCurrentPinballGame->unk46C[2].y = 0x20 + scale / 8;
gCurrentPinballGame->unk46C[3].y = 0x20 + scale / 8;
if ((gMain.unkF & 0xC0) == 0)
{
gMain.blendControl = 0x1E10;
gMain.blendAlpha = BLDALPHA_BLEND(var6, 16 - var6);
}
if (group->available)
{
group->baseX = 23 - gCurrentPinballGame->unk58;
group->baseY = 50 - gCurrentPinballGame->unk5A;
for (j = 0; j < 4; j++)
{
oamSimple = &group->oam[j];
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX + gCurrentPinballGame->unk46C[j].x;
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY + gCurrentPinballGame->unk46C[j].y;
gOamBuffer[oamSimple->oamId].affineMode = ST_OAM_AFFINE_DOUBLE;
gOamBuffer[oamSimple->oamId].matrixNum = 1 + j;
}
}
if (gCurrentPinballGame->unk456 < 30)
{
tempVector.x = gCurrentPinballGame->ball->positionQ0.x - 119;
tempVector.y = gCurrentPinballGame->ball->positionQ0.y - 147;
xx = tempVector.x * tempVector.x;
yy = tempVector.y * tempVector.y;
squaredMagnitude = xx + yy;
if (gCurrentPinballGame->unk388 == 0 && squaredMagnitude < gUnknown_086AEE20[gCurrentPinballGame->unk456])
{
gCurrentPinballGame->unk5B0 = ArcTan2(-tempVector.x, tempVector.y);
gCurrentPinballGame->ball->velocity.x = (Cos(gCurrentPinballGame->unk5B0) * -400) / 20000;
gCurrentPinballGame->ball->velocity.y = (Sin(gCurrentPinballGame->unk5B0) * 400) / 20000;
sub_11B0(9);
}
}
if ((gMain.unkF & 0xC0) != 0)
gMain.spriteGroups[30].available = 0;
}
}
void sub_3E5D0(void)
{
s16 i;