mirror of
https://github.com/pret/pokepinballrs.git
synced 2026-03-21 17:24:13 -05:00
parent
88be970282
commit
4c810c275e
2328
asm/rom_3219C.s
2328
asm/rom_3219C.s
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
|
@ -610,8 +610,8 @@ extern void sub_3E5D0(void);
|
|||
//extern ? sub_3EDF0();
|
||||
//extern ? sub_3FAE0();
|
||||
//extern ? sub_40288();
|
||||
//extern ? sub_41580();
|
||||
//extern ? sub_417F8();
|
||||
extern void sub_41580(void);
|
||||
extern void sub_417F8(void);
|
||||
//extern ? sub_423D8();
|
||||
//extern ? sub_42E48();
|
||||
//extern ? sub_43228();
|
||||
|
|
|
|||
|
|
@ -345,12 +345,13 @@ struct PinballGame
|
|||
/*0x36E*/ u16 unk36E[0x2];
|
||||
/*0x372*/ u8 filler372[0x11];
|
||||
/*0x383*/ s8 unk383;
|
||||
/*0x384*/ u8 unk384;
|
||||
/*0x384*/ s8 unk384;
|
||||
/*0x385*/ s8 unk385;
|
||||
/*0x386*/ s8 unk386;
|
||||
/*0x387*/ s8 unk387;
|
||||
/*0x388*/ s8 unk388;
|
||||
/*0x389*/ u8 filler389[0x3];
|
||||
/*0x389*/ u8 filler389[0x1];
|
||||
/*0x38A*/ s16 unk38A;
|
||||
/*0x38C*/ s16 unk38C;
|
||||
/*0x38E*/ u8 filler38E[0x4];
|
||||
/*0x392*/ u16 unk392;
|
||||
|
|
@ -415,17 +416,13 @@ struct PinballGame
|
|||
/*0x438*/ struct Vector16 unk438;
|
||||
/*0x43C*/ struct Vector16 unk43C;
|
||||
/*0x440*/ u8 filler440[0x1];
|
||||
/*0x441*/ s8 unk441;
|
||||
/*0x442*/ s8 unk442;
|
||||
/*0x441*/ s8 unk441[2];
|
||||
/*0x443*/ u8 filler443[0xF];
|
||||
/*0x452*/ u16 unk452;
|
||||
/*0x454*/ u8 filler454[0x4];
|
||||
/*0x458*/ s16 unk458;
|
||||
/*0x45A*/ s16 unk45A;
|
||||
/*0x45C*/ struct Vector16 unk45C;
|
||||
/*0x460*/ struct Vector16 unk460;
|
||||
/*0x464*/ struct Vector16 unk464;
|
||||
/*0x468*/ struct Vector16 unk468;
|
||||
/*0x458*/ u16 unk458[2];
|
||||
/*0x45C*/ struct Vector16 unk45C[2];
|
||||
/*0x464*/ struct Vector16 unk464[2];
|
||||
/*0x46C*/ u8 filler46C[0x13];
|
||||
/*0x47F*/ s8 unk47F;
|
||||
/*0x480*/ u16 unk480;
|
||||
|
|
@ -441,15 +438,22 @@ struct PinballGame
|
|||
/*0x4D5*/ s8 unk4D5[3];
|
||||
/*0x4D8*/ u8 filler4D8[0x20];
|
||||
/*0x4F8*/ struct Vector16 unk4F8[3];
|
||||
/*0x504*/ u8 filler504[0x2];
|
||||
/*0x504*/ u8 filler504[0x1];
|
||||
/*0x505*/ s8 unk505;
|
||||
/*0x506*/ s8 unk506;
|
||||
/*0x507*/ u8 filler507[0x1];
|
||||
/*0x507*/ s8 unk507;
|
||||
/*0x508*/ s16 unk508;
|
||||
/*0x50A*/ u8 filler50A[0xA];
|
||||
/*0x50A*/ u8 filler50A[0x4];
|
||||
/*0x50E*/ u16 unk50E;
|
||||
/*0x510*/ u16 unk510;
|
||||
/*0x512*/ u8 filler512[0x2];
|
||||
/*0x514*/ u16 unk514;
|
||||
/*0x516*/ u16 unk516;
|
||||
/*0x518*/ s16 unk518;
|
||||
/*0x51A*/ u8 filler51A[0xE];
|
||||
/*0x51A*/ u8 filler51A[0x2];
|
||||
/*0x51C*/ struct Vector16 unk51C;
|
||||
/*0x520*/ struct Vector16 unk520;
|
||||
/*0x524*/ struct Vector16 unk524;
|
||||
/*0x528*/ struct Vector16 unk528;
|
||||
/*0x52C*/ s8 unk52C[2];
|
||||
/*0x52E*/ s8 unk52E[2];
|
||||
|
|
@ -537,7 +541,7 @@ struct PinballGame
|
|||
/*0x6B4*/ u32 unk6B4;
|
||||
/*0x6B8*/ u32 unk6B8;
|
||||
/*0x6BC*/ u8 filler6BC[0x8];
|
||||
/*0x6C4*/ u8 unk6C4;
|
||||
/*0x6C4*/ s8 unk6C4;
|
||||
/*0x6C5*/ u8 unk6C5; // TODO: unknown type
|
||||
/*0x6C6*/ u8 unk6C6;
|
||||
/*0x6C7*/ u8 unk6C7;
|
||||
|
|
@ -546,7 +550,11 @@ struct PinballGame
|
|||
/*0x6CA*/ u16 unk6CA;
|
||||
/*0x6CC*/ u8 unk6CC;
|
||||
/*0x6CD*/ u8 unk6CD[6];
|
||||
/*0x6D3*/ u8 filler6D3[0x1B];
|
||||
/*0x6D3*/ u8 filler6D3[0x8];
|
||||
/*0x6DB*/ u8 unk6DB;
|
||||
/*0x6DC*/ u8 filler6DC[0x8];
|
||||
/*0x6E4*/ struct Vector16 unk6E4;
|
||||
/*0x6E8*/ u8 filler6E8[0x6];
|
||||
/*0x6EE*/ u16 unk6EE;
|
||||
/*0x6F0*/ u8 filler6F0[0x1E];
|
||||
/*0x70E*/ s8 unk70E;
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ void m4aSoundInit(void);
|
|||
void m4aSoundMain(void);
|
||||
void m4aSongNumStart(u16 n);
|
||||
void m4aSongNumStartOrChange(u16 n);
|
||||
void m4aSongNumStop(u16 n);
|
||||
void m4aMPlayAllStop(void);
|
||||
void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo);
|
||||
void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume);
|
||||
|
|
|
|||
555
src/rom_49A34.c
555
src/rom_49A34.c
|
|
@ -99,6 +99,10 @@ extern const u16 gUnknown_086AFB2C[][3];
|
|||
extern const u8 gUnknown_084B046C[][0x120];
|
||||
extern const u16 gUnknown_086B56D8[][4][3];
|
||||
extern const u16 gUnknown_086B5D56[][2][3];
|
||||
extern const u16 gUnknown_086B609E[][3][3];
|
||||
extern const u16 gUnknown_086B5ECA[][6][3];
|
||||
extern const u16 gUnknown_086B5DCE[][7][3];
|
||||
extern const u16 gUnknown_086B5CC0[][5][3];
|
||||
extern const u16 gUnknown_086AFAE2[][2];
|
||||
extern const u16 gUnknown_086AFAE0[][2];
|
||||
extern const u8 gUnknown_084B47EC[][0x800];
|
||||
|
|
@ -107,6 +111,7 @@ extern const s16 gUnknown_086AF784[];
|
|||
extern const struct Vector16 gUnknown_086AF744[32];
|
||||
extern const s16 gUnknown_086AEF28[];
|
||||
extern const s16 gUnknown_08137D48[];
|
||||
extern const u8 gUnknown_084A6EEC[][0x280];
|
||||
|
||||
struct Unk_086AFAC0
|
||||
{
|
||||
|
|
@ -130,6 +135,524 @@ extern u8 gUnknown_0200FBB0[];
|
|||
extern u8 gUnknown_020030A0[];
|
||||
|
||||
|
||||
void sub_40288(void)
|
||||
{
|
||||
s16 sp0;
|
||||
s16 sp4;
|
||||
s16 sp8;
|
||||
s16 i, j;
|
||||
struct SpriteGroup *group;
|
||||
struct Vector32 tempVector2;
|
||||
struct Vector32 tempVector;
|
||||
s16 var0;
|
||||
int x, y;
|
||||
int xx, yy;
|
||||
int squaredMagnitude;
|
||||
u16 *dst;
|
||||
const u16 *src;
|
||||
struct OamDataSimple *oamSimple;
|
||||
|
||||
sp8 = 0;
|
||||
sp4 = 0;
|
||||
var0 = 0;
|
||||
sp0 = 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;
|
||||
}
|
||||
}
|
||||
|
||||
sub_41580();
|
||||
switch (gCurrentPinballGame->unk507)
|
||||
{
|
||||
case 0:
|
||||
gCurrentPinballGame->unk510 = 0;
|
||||
var0 = 7;
|
||||
sp4 = 12;
|
||||
sp8 = 5;
|
||||
break;
|
||||
case 1:
|
||||
if (gCurrentPinballGame->unk510 == 0)
|
||||
m4aSongNumStart(SE_UNKNOWN_0x128);
|
||||
|
||||
if (gCurrentPinballGame->unk510 == 8)
|
||||
m4aSongNumStop(SE_UNKNOWN_0x128);
|
||||
|
||||
if (gCurrentPinballGame->unk510 == 24)
|
||||
m4aSongNumStart(SE_UNKNOWN_0x128);
|
||||
|
||||
if (gCurrentPinballGame->unk510 == 36)
|
||||
m4aSongNumStop(SE_UNKNOWN_0x128);
|
||||
|
||||
if (gCurrentPinballGame->unk510 == 50)
|
||||
m4aSongNumStart(SE_UNKNOWN_0x128);
|
||||
|
||||
if (gCurrentPinballGame->unk510 == 56)
|
||||
m4aSongNumStop(SE_UNKNOWN_0x128);
|
||||
|
||||
if (gCurrentPinballGame->unk510 < 14)
|
||||
var0 = gCurrentPinballGame->unk510 / 2;
|
||||
else if (gCurrentPinballGame->unk510 < 42)
|
||||
var0 = 7;
|
||||
else if (gCurrentPinballGame->unk510 < 56)
|
||||
var0 = (gCurrentPinballGame->unk510 - 42) / 2;
|
||||
else if (gCurrentPinballGame->unk510 < 61)
|
||||
var0 = 7;
|
||||
else
|
||||
var0 = (gCurrentPinballGame->unk510 - 61) / 2;
|
||||
|
||||
if (gCurrentPinballGame->unk510 < 8)
|
||||
sp4 = gCurrentPinballGame->unk510 / 2;
|
||||
else if (gCurrentPinballGame->unk510 < 48)
|
||||
sp4 = 12;
|
||||
else if (gCurrentPinballGame->unk510 < 64)
|
||||
sp4 = (gCurrentPinballGame->unk510 - 48) / 2 + 4;
|
||||
else
|
||||
sp4 = 12;
|
||||
|
||||
sp8 = 5;
|
||||
gCurrentPinballGame->unk510++;
|
||||
if (gCurrentPinballGame->unk510 == 75)
|
||||
{
|
||||
gCurrentPinballGame->unk510 = 0;
|
||||
gCurrentPinballGame->unk507 = 2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
var0 = 7;
|
||||
sp4 = 12;
|
||||
sp8 = 5;
|
||||
if (gCurrentPinballGame->unk510 < 34)
|
||||
{
|
||||
gCurrentPinballGame->unk510++;
|
||||
if (gCurrentPinballGame->unk510 == 28)
|
||||
{
|
||||
if (gCurrentPinballGame->unk388)
|
||||
{
|
||||
gCurrentPinballGame->unk51C.x = 200 - (Random() % 160);
|
||||
gCurrentPinballGame->unk51C.y = gCurrentPinballGame->ball->positionQ0.y - 347 - (Random() % 80);
|
||||
}
|
||||
else
|
||||
{
|
||||
gCurrentPinballGame->unk51C.x = gCurrentPinballGame->ball->positionQ0.x - 13;
|
||||
gCurrentPinballGame->unk51C.y = gCurrentPinballGame->ball->positionQ0.y - 347;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gCurrentPinballGame->unk510 = 0;
|
||||
gCurrentPinballGame->unk507 = 3;
|
||||
m4aSongNumStart(SE_UNKNOWN_0x129);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
var0 = 7;
|
||||
sp4 = 12;
|
||||
if (gCurrentPinballGame->unk510 < 2)
|
||||
{
|
||||
sp8 = gCurrentPinballGame->unk510;
|
||||
}
|
||||
else if (gCurrentPinballGame->unk510 < 10)
|
||||
{
|
||||
sp8 = (gCurrentPinballGame->unk510 - 2) / 2 + 2;
|
||||
gCurrentPinballGame->unk508 = sp4;
|
||||
if (sp8 == 2)
|
||||
{
|
||||
int a = 13;
|
||||
int b = 347;
|
||||
tempVector.x = gCurrentPinballGame->ball->positionQ0.x - a - gCurrentPinballGame->unk51C.x;
|
||||
tempVector.y = gCurrentPinballGame->ball->positionQ0.y - b - gCurrentPinballGame->unk51C.y;
|
||||
xx = tempVector.x * tempVector.x;
|
||||
yy = tempVector.y * tempVector.y;
|
||||
squaredMagnitude = xx + yy;
|
||||
|
||||
sub_11B0(8);
|
||||
if (gCurrentPinballGame->unk441[0] < 3 && gCurrentPinballGame->unk441[1] < 3 &&
|
||||
gCurrentPinballGame->unk388 == 0 && squaredMagnitude < 200)
|
||||
{
|
||||
gMain.spriteGroups[36].available = 1;
|
||||
gCurrentPinballGame->unk486 = 600;
|
||||
m4aSongNumStart(SE_UNKNOWN_0x12A);
|
||||
sub_11B0(9);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sp8 = 5;
|
||||
gCurrentPinballGame->unk507 = 4;
|
||||
}
|
||||
|
||||
gCurrentPinballGame->unk510++;
|
||||
break;
|
||||
case 4:
|
||||
gCurrentPinballGame->unk510 = 0;
|
||||
gCurrentPinballGame->unk507 = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
group = &gMain.spriteGroups[17];
|
||||
if (group->available)
|
||||
{
|
||||
// ! odd behavior in the assembly with the addition and subtraction
|
||||
group->baseX = gCurrentPinballGame->unk3E8 / 10 - (gCurrentPinballGame->unk58 - 88);
|
||||
group->baseY = gCurrentPinballGame->unk3EA / 10 - gCurrentPinballGame->unk5A + 96;
|
||||
for (j = 0; j < 3; j++)
|
||||
{
|
||||
oamSimple = &group->oam[j];
|
||||
dst = (u16*)&gOamBuffer[oamSimple->oamId];
|
||||
src = gUnknown_086B609E[var0][j];
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
|
||||
gOamBuffer[oamSimple->oamId].x += group->baseX;
|
||||
gOamBuffer[oamSimple->oamId].y += group->baseY;
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->unk507 == 4)
|
||||
gMain.spriteGroups[17].available = 0;
|
||||
}
|
||||
|
||||
group = &gMain.spriteGroups[18];
|
||||
if (group->available)
|
||||
{
|
||||
group->baseX = gCurrentPinballGame->unk3E8 / 10 - (gCurrentPinballGame->unk58 - 88);
|
||||
group->baseY = gCurrentPinballGame->unk3EA / 10 - gCurrentPinballGame->unk5A + 96;
|
||||
for (j = 0; j < 6; j++)
|
||||
{
|
||||
oamSimple = &group->oam[j];
|
||||
dst = (u16*)&gOamBuffer[oamSimple->oamId];
|
||||
src = gUnknown_086B5ECA[sp4][j];
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
|
||||
gOamBuffer[oamSimple->oamId].x += group->baseX;
|
||||
gOamBuffer[oamSimple->oamId].y += group->baseY;
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->unk507 == 4)
|
||||
gMain.spriteGroups[18].available = 0;
|
||||
}
|
||||
|
||||
group = &gMain.spriteGroups[19];
|
||||
if (group->available)
|
||||
{
|
||||
group->baseX = gCurrentPinballGame->unk51C.x - gCurrentPinballGame->unk58;
|
||||
group->baseY = gCurrentPinballGame->unk51C.y - gCurrentPinballGame->unk5A;
|
||||
for (j = 0; j < 7; j++)
|
||||
{
|
||||
oamSimple = &group->oam[j];
|
||||
dst = (u16*)&gOamBuffer[oamSimple->oamId];
|
||||
src = gUnknown_086B5DCE[sp8][j];
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
|
||||
if ((s8)gOamBuffer[oamSimple->oamId].y + group->baseY < -300)
|
||||
{
|
||||
gOamBuffer[oamSimple->oamId].x = 0;
|
||||
gOamBuffer[oamSimple->oamId].y = 180;
|
||||
}
|
||||
else
|
||||
{
|
||||
gOamBuffer[oamSimple->oamId].x += group->baseX;
|
||||
gOamBuffer[oamSimple->oamId].y += group->baseY;
|
||||
}
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->unk507 == 4)
|
||||
gMain.spriteGroups[19].available = 0;
|
||||
}
|
||||
|
||||
group = &gMain.spriteGroups[22];
|
||||
if (group->available)
|
||||
{
|
||||
group->baseX = gCurrentPinballGame->unk524.x / 10 - (gCurrentPinballGame->unk58 + 120);
|
||||
group->baseY = gCurrentPinballGame->unk524.y / 10 - (gCurrentPinballGame->unk5A - 128);
|
||||
for (j = 0; j < 18; j++)
|
||||
{
|
||||
oamSimple = &group->oam[j];
|
||||
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
|
||||
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
|
||||
}
|
||||
}
|
||||
|
||||
group = &gMain.spriteGroups[23];
|
||||
if (group->available)
|
||||
{
|
||||
group->baseX = gCurrentPinballGame->unk524.x / 10 - (gCurrentPinballGame->unk58 - 360);
|
||||
group->baseY = gCurrentPinballGame->unk524.y / 10 - (gCurrentPinballGame->unk5A - 128);
|
||||
for (j = 0; j < 18; j++)
|
||||
{
|
||||
oamSimple = &group->oam[j];
|
||||
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
|
||||
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
|
||||
}
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->unk38C > 0)
|
||||
gCurrentPinballGame->ball->unk1 = 1;
|
||||
else
|
||||
gCurrentPinballGame->ball->unk1 = 2;
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
group = &gMain.spriteGroups[15 + i];
|
||||
switch (gCurrentPinballGame->unk441[i])
|
||||
{
|
||||
case 0:
|
||||
sp0 = 0;
|
||||
gCurrentPinballGame->unk45C[i].x = 0;
|
||||
gCurrentPinballGame->unk45C[i].y = 0;
|
||||
break;
|
||||
case 1:
|
||||
sp0 = gCurrentPinballGame->unk458[i] / 5 + 1;
|
||||
if (gCurrentPinballGame->unk458[i] < 14)
|
||||
{
|
||||
gCurrentPinballGame->unk458[i]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gCurrentPinballGame->unk458[i] = 0;
|
||||
gCurrentPinballGame->unk441[i] = 2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
sp0 = gCurrentPinballGame->unk458[i] % 16;
|
||||
if (sp0 < 4)
|
||||
sp0 = 4;
|
||||
else if (sp0 < 10)
|
||||
sp0 = 5;
|
||||
else
|
||||
sp0 = 6;
|
||||
|
||||
if (gCurrentPinballGame->unk441[i] < 3)
|
||||
{
|
||||
|
||||
s16 angle = (((gMain.systemFrameCount + 120 * i) % 240) << 0x10) / 240;
|
||||
gCurrentPinballGame->unk45C[i].x = gCurrentPinballGame->unk464[i].x + (Cos(angle) * 4) / 2000;
|
||||
gCurrentPinballGame->unk45C[i].y = gCurrentPinballGame->unk464[i].y + (Sin(angle) * 4) / 2000;
|
||||
|
||||
tempVector.x = gCurrentPinballGame->ball->positionQ0.x - (gCurrentPinballGame->unk45C[i].x / 10) - 16;
|
||||
tempVector.y = gCurrentPinballGame->ball->positionQ0.y - (gCurrentPinballGame->unk45C[i].y / 10) - 32;;
|
||||
xx = tempVector.x * tempVector.x;
|
||||
yy = tempVector.y * tempVector.y;
|
||||
squaredMagnitude = xx + yy;
|
||||
if (gCurrentPinballGame->unk383 == 0 && gCurrentPinballGame->unk388 == 0 &&
|
||||
gCurrentPinballGame->unk385 < gCurrentPinballGame->unk384 &&
|
||||
gCurrentPinballGame->unk452 == 0 && squaredMagnitude < 300)
|
||||
{
|
||||
gCurrentPinballGame->unk486 = 6;
|
||||
gCurrentPinballGame->unk1F = 1;
|
||||
gCurrentPinballGame->unk458[i] = 0;
|
||||
gCurrentPinballGame->unk441[i] = 3;
|
||||
gCurrentPinballGame->unk5FA = 1;
|
||||
|
||||
tempVector2.x = gCurrentPinballGame->unk45C[i].x / 10 + 16;
|
||||
tempVector2.y = gCurrentPinballGame->unk45C[i].y / 10 + 32;
|
||||
tempVector.x = (tempVector2.x << 8) - gCurrentPinballGame->ball->positionQ8.x;
|
||||
tempVector.y = (tempVector2.y << 8) - gCurrentPinballGame->ball->positionQ8.y;
|
||||
gCurrentPinballGame->unk5AC = (tempVector.x * tempVector.x) + (tempVector.y * tempVector.y);
|
||||
gCurrentPinballGame->unk5AC = Sqrt(gCurrentPinballGame->unk5AC * 4) / 2;
|
||||
gCurrentPinballGame->unk5B0 = ArcTan2(-tempVector.x, tempVector.y);
|
||||
|
||||
gCurrentPinballGame->unk505 = i + 1;
|
||||
gCurrentPinballGame->unk520.x = gCurrentPinballGame->unk45C[i].x;
|
||||
gCurrentPinballGame->unk520.y = gCurrentPinballGame->unk45C[i].y;
|
||||
m4aSongNumStart(SE_UNKNOWN_0x12B);
|
||||
sub_11B0(13);
|
||||
}
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->unk458[i] < 840)
|
||||
{
|
||||
gCurrentPinballGame->unk458[i]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gCurrentPinballGame->unk458[i] = 0;
|
||||
gCurrentPinballGame->unk441[i] = 5;
|
||||
}
|
||||
break;
|
||||
case 3: {
|
||||
s16 var4;
|
||||
int var5;
|
||||
|
||||
sp0 = gCurrentPinballGame->unk458[i] % 16;
|
||||
if (sp0 < 4)
|
||||
sp0 = 4;
|
||||
else if (sp0 < 10)
|
||||
sp0 = 5;
|
||||
else
|
||||
sp0 = 6;
|
||||
|
||||
var4 = 29 - gCurrentPinballGame->unk458[i];
|
||||
if (var4 < 10)
|
||||
var4 = 10;
|
||||
|
||||
gCurrentPinballGame->unk5B0 -= ((0x2000 - (var4 * 0x2000) / 30) * 2) / 5;
|
||||
gCurrentPinballGame->ball->unkA -= 0x2000;
|
||||
var5 = (gCurrentPinballGame->unk5AC * var4) / 30;
|
||||
tempVector2.x = gCurrentPinballGame->unk45C[i].x / 10 + 16;
|
||||
tempVector2.y = gCurrentPinballGame->unk45C[i].y / 10 + 32;
|
||||
gCurrentPinballGame->ball->positionQ8.x = (tempVector2.x << 8) + ((Cos(gCurrentPinballGame->unk5B0) * var5) / 20000);
|
||||
gCurrentPinballGame->ball->positionQ8.y = (tempVector2.y << 8) - ((Sin(gCurrentPinballGame->unk5B0) * var5) / 20000);
|
||||
gCurrentPinballGame->ball->velocity.x = (gCurrentPinballGame->ball->velocity.x * 4) / 5;
|
||||
gCurrentPinballGame->ball->velocity.y = (gCurrentPinballGame->ball->velocity.y * 4) / 5;
|
||||
|
||||
if (gCurrentPinballGame->unk38C < 1800)
|
||||
{
|
||||
gCurrentPinballGame->unk38A = 0;
|
||||
gCurrentPinballGame->unk38C += 32;
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->unk458[i] < 180)
|
||||
{
|
||||
gCurrentPinballGame->unk458[i]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gCurrentPinballGame->unk458[i] = 0;
|
||||
gCurrentPinballGame->unk441[i] = 4;
|
||||
gCurrentPinballGame->unk5AC /= 2;
|
||||
gCurrentPinballGame->ball->positionQ8.y = 0xA500;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
if (gCurrentPinballGame->unk458[i] < 130)
|
||||
{
|
||||
if (gCurrentPinballGame->unk458[i] == 10)
|
||||
m4aSongNumStart(SE_UNKNOWN_0x12C);
|
||||
|
||||
gCurrentPinballGame->unk38A--;
|
||||
gCurrentPinballGame->unk38C += gCurrentPinballGame->unk38A;
|
||||
if (gCurrentPinballGame->unk38C <= 0)
|
||||
{
|
||||
gCurrentPinballGame->unk38C = 0;
|
||||
gCurrentPinballGame->ball->velocity.y = -((gCurrentPinballGame->unk38A * 0x80) / 10) / 2;
|
||||
gCurrentPinballGame->unk1F = 0;
|
||||
gCurrentPinballGame->unk458[i] = 0;
|
||||
gCurrentPinballGame->ball->velocity.x = 0;
|
||||
gCurrentPinballGame->unk441[i] = 0;
|
||||
gCurrentPinballGame->unk5FA = 0;
|
||||
sub_11B0(8);
|
||||
}
|
||||
|
||||
gCurrentPinballGame->unk458[i]++;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
sp0 = gCurrentPinballGame->unk458[i] / 6 + 7;
|
||||
if (gCurrentPinballGame->unk458[i] < 11)
|
||||
{
|
||||
gCurrentPinballGame->unk458[i]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gCurrentPinballGame->unk458[i] = 0;
|
||||
gCurrentPinballGame->unk441[i] = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (group->available)
|
||||
{
|
||||
DmaCopy16(3, gUnknown_084A6EEC[sp0], (void *)0x06011EA0, 0x280);
|
||||
group->baseX = gCurrentPinballGame->unk45C[i].x / 10 - gCurrentPinballGame->unk58;
|
||||
group->baseY = gCurrentPinballGame->unk45C[i].y / 10 - gCurrentPinballGame->unk5A;
|
||||
for (j = 0; j < 2; j++)
|
||||
{
|
||||
oamSimple = &group->oam[j];
|
||||
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
|
||||
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->unk441[i] == 0)
|
||||
group->available = 0;
|
||||
|
||||
if (gCurrentPinballGame->unk505 && i == (gCurrentPinballGame->unk505 - 1))
|
||||
group->available = 0;
|
||||
}
|
||||
}
|
||||
|
||||
sub_417F8();
|
||||
group = &gMain.spriteGroups[20];
|
||||
if (group->available)
|
||||
{
|
||||
s16 a;
|
||||
group->baseX = gCurrentPinballGame->unk520.x / 10 - gCurrentPinballGame->unk58;
|
||||
group->baseY = gCurrentPinballGame->unk520.y / 10 - gCurrentPinballGame->unk5A;
|
||||
a = gCurrentPinballGame->unk50E / 5;
|
||||
for (j = 0; j < 5; j++)
|
||||
{
|
||||
oamSimple = &group->oam[j];
|
||||
dst = (u16*)&gOamBuffer[oamSimple->oamId];
|
||||
src = gUnknown_086B5CC0[a][j];
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
|
||||
gOamBuffer[oamSimple->oamId].x += group->baseX;
|
||||
gOamBuffer[oamSimple->oamId].y += group->baseY;
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->unk50E < 25)
|
||||
{
|
||||
gCurrentPinballGame->unk50E++;
|
||||
if (gCurrentPinballGame->unk50E == 25)
|
||||
group->available = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->unk505)
|
||||
{
|
||||
gCurrentPinballGame->unk505 = 0;
|
||||
gCurrentPinballGame->unk50E = 0;
|
||||
group->available = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_41580(void)
|
||||
{
|
||||
s16 i;
|
||||
|
|
@ -375,7 +898,7 @@ void sub_417F8(void)
|
|||
gMain.spriteGroups[25].available = 0;
|
||||
gMain.spriteGroups[26].available = 1;
|
||||
gMain.spriteGroups[27].available = 1;
|
||||
if (gCurrentPinballGame->unk441 < 3 && gCurrentPinballGame->unk442 < 3 && gCurrentPinballGame->unk388 == 0)
|
||||
if (gCurrentPinballGame->unk441[0] < 3 && gCurrentPinballGame->unk441[1] < 3 && gCurrentPinballGame->unk388 == 0)
|
||||
{
|
||||
gCurrentPinballGame->ball->velocity.x += 500;
|
||||
sub_11B0(13);
|
||||
|
|
@ -404,7 +927,7 @@ void sub_417F8(void)
|
|||
gMain.spriteGroups[31].available = 0;
|
||||
gMain.spriteGroups[32].available = 1;
|
||||
gMain.spriteGroups[33].available = 1;
|
||||
if (gCurrentPinballGame->unk441 < 3 && gCurrentPinballGame->unk442 < 3 && gCurrentPinballGame->unk388 == 0)
|
||||
if (gCurrentPinballGame->unk441[0] < 3 && gCurrentPinballGame->unk441[1] < 3 && gCurrentPinballGame->unk388 == 0)
|
||||
{
|
||||
gCurrentPinballGame->ball->velocity.x -= 500;
|
||||
sub_11B0(13);
|
||||
|
|
@ -428,34 +951,34 @@ void sub_417F8(void)
|
|||
|
||||
if (gCurrentPinballGame->unk514 == 10)
|
||||
{
|
||||
if (gCurrentPinballGame->unk441 < 3)
|
||||
if (gCurrentPinballGame->unk441[0] < 3)
|
||||
{
|
||||
gCurrentPinballGame->unk458 = 0;
|
||||
gCurrentPinballGame->unk441 = 1;
|
||||
gCurrentPinballGame->unk458[0] = 0;
|
||||
gCurrentPinballGame->unk441[0] = 1;
|
||||
gMain.spriteGroups[15].available = 1;
|
||||
rand = Random() % 8;
|
||||
var0 = ((gMain.systemFrameCount % 240) << 0x10) / 240;
|
||||
gCurrentPinballGame->unk464.x = gUnknown_086AF744[rand].x;
|
||||
gCurrentPinballGame->unk464.y = gUnknown_086AF744[rand].y;
|
||||
gCurrentPinballGame->unk45C.x = gCurrentPinballGame->unk464.x + (Cos(var0) * 4) / 2000;
|
||||
gCurrentPinballGame->unk45C.y = gCurrentPinballGame->unk464.y + (Sin(var0) * 4) / 2000;
|
||||
gCurrentPinballGame->unk464[0].x = gUnknown_086AF744[rand].x;
|
||||
gCurrentPinballGame->unk464[0].y = gUnknown_086AF744[rand].y;
|
||||
gCurrentPinballGame->unk45C[0].x = gCurrentPinballGame->unk464[0].x + (Cos(var0) * 4) / 2000;
|
||||
gCurrentPinballGame->unk45C[0].y = gCurrentPinballGame->unk464[0].y + (Sin(var0) * 4) / 2000;
|
||||
m4aSongNumStart(SE_UNKNOWN_0x12D);
|
||||
}
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->unk514 == 16)
|
||||
{
|
||||
if (gCurrentPinballGame->unk442 < 3)
|
||||
if (gCurrentPinballGame->unk441[1] < 3)
|
||||
{
|
||||
gCurrentPinballGame->unk45A = 0;
|
||||
gCurrentPinballGame->unk442 = 1;
|
||||
gCurrentPinballGame->unk458[1] = 0;
|
||||
gCurrentPinballGame->unk441[1] = 1;
|
||||
gMain.spriteGroups[16].available = 1;
|
||||
rand = (Random() % 8 + 8) % 32; // Force 8 to be added to r1
|
||||
var0 = (((gMain.systemFrameCount + 120) % 240) << 0x10) / 240;
|
||||
gCurrentPinballGame->unk468.x = gUnknown_086AF744[rand].x;
|
||||
gCurrentPinballGame->unk468.y = gUnknown_086AF744[rand].y;
|
||||
gCurrentPinballGame->unk460.x = gCurrentPinballGame->unk468.x + (Cos(var0) * 4) / 2000;
|
||||
gCurrentPinballGame->unk460.y = gCurrentPinballGame->unk468.y + (Sin(var0) * 4) / 2000;
|
||||
gCurrentPinballGame->unk464[1].x = gUnknown_086AF744[rand].x;
|
||||
gCurrentPinballGame->unk464[1].y = gUnknown_086AF744[rand].y;
|
||||
gCurrentPinballGame->unk45C[1].x = gCurrentPinballGame->unk464[1].x + (Cos(var0) * 4) / 2000;
|
||||
gCurrentPinballGame->unk45C[1].y = gCurrentPinballGame->unk464[1].y + (Sin(var0) * 4) / 2000;
|
||||
m4aSongNumStart(SE_UNKNOWN_0x12D);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user