mirror of
https://github.com/pret/pokepinballrs.git
synced 2026-03-21 17:24:13 -05:00
271 lines
7.8 KiB
C
271 lines
7.8 KiB
C
#include "global.h"
|
|
#include "m4a.h"
|
|
#include "main.h"
|
|
#include "constants/bg_music.h"
|
|
|
|
extern struct SpriteGroup gMain_spriteGroups_12;
|
|
extern struct SpriteGroup gMain_spriteGroups_14;
|
|
|
|
extern const u8 gUnknown_0813A854[];
|
|
extern const u8 gUnknown_0813C874[];
|
|
extern const u8 gUnknown_0813E894[];
|
|
extern const u8 gUnknown_081408B4[];
|
|
|
|
void sub_350F0(void)
|
|
{
|
|
gCurrentPinballGame->unk1100 = 1;
|
|
switch (gCurrentPinballGame->unk17)
|
|
{
|
|
case 0:
|
|
gCurrentPinballGame->unk18 = 65;
|
|
gCurrentPinballGame->unk17 = 1;
|
|
gMain.blendControl = 0x9F;
|
|
break;
|
|
case 1:
|
|
if (gCurrentPinballGame->unk18)
|
|
{
|
|
gCurrentPinballGame->unk18--;
|
|
gMain.blendBrightness = 16 - gCurrentPinballGame->unk18 / 4;
|
|
if (gCurrentPinballGame->unk18 == 0)
|
|
gCurrentPinballGame->unk17++;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (gCurrentPinballGame->unk18 < 30)
|
|
{
|
|
gCurrentPinballGame->unk18++;
|
|
}
|
|
else
|
|
{
|
|
gCurrentPinballGame->unk18 = 0;
|
|
gCurrentPinballGame->unk17 = 0;
|
|
gMain.spriteGroups[6].available = 0;
|
|
gMain.spriteGroups[5].available = 0;
|
|
if (gMain.unk5 != gMain.selectedField)
|
|
{
|
|
sub_357B8();
|
|
}
|
|
else
|
|
{
|
|
ResetSomeGraphicsRelatedStuff();
|
|
gCurrentPinballGame->unk1D = 2;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void sub_351A8(void)
|
|
{
|
|
s16 i;
|
|
struct SpriteGroup *group;
|
|
struct OamDataSimple *oamSimple;
|
|
s16 var0;
|
|
int var1;
|
|
s16 sp0[8];
|
|
s16 var2;
|
|
|
|
var0 = 8;
|
|
var1 = 0;
|
|
group = &gMain.spriteGroups[6];
|
|
if (gCurrentPinballGame->unk394 > 0)
|
|
{
|
|
gCurrentPinballGame->unk394 -= 6;
|
|
if (gCurrentPinballGame->unk394 < 0)
|
|
gCurrentPinballGame->unk394 = 0;
|
|
}
|
|
|
|
switch (gMain.selectedField)
|
|
{
|
|
case FIELD_DUSCLOPS:
|
|
if (gCurrentPinballGame->unk13 == 5 && gCurrentPinballGame->unk18 < 180)
|
|
var0 = (gCurrentPinballGame->unk18 % 24) / 12 + 8;
|
|
var1 = 30000000;
|
|
break;
|
|
case FIELD_KECLEON:
|
|
if (gCurrentPinballGame->unk13 == 3 && gCurrentPinballGame->unk18 < 180)
|
|
var0 = (gCurrentPinballGame->unk18 % 24) / 12 + 8;
|
|
var1 = 30000000;
|
|
break;
|
|
case FIELD_KYOGRE:
|
|
if (gCurrentPinballGame->unk13 == 3 && gCurrentPinballGame->unk18 < 180)
|
|
var0 = (gCurrentPinballGame->unk18 % 24) / 12 + 8;
|
|
var1 = 50000000;
|
|
break;
|
|
case FIELD_GROUDON:
|
|
if (gCurrentPinballGame->unk13 == 3 && gCurrentPinballGame->unk18 < 180)
|
|
var0 = (gCurrentPinballGame->unk18 % 24) / 12 + 8;
|
|
var1 = 50000000;
|
|
break;
|
|
case FIELD_RAYQUAZA:
|
|
if (gCurrentPinballGame->unk13 == 3 && gCurrentPinballGame->unk18 < 180)
|
|
var0 = (gCurrentPinballGame->unk18 % 24) / 12 + 8;
|
|
var1 = 99999999;
|
|
break;
|
|
}
|
|
|
|
DmaCopy16(3, gUnknown_02031520.unk14.unk2C[0] + var0 * 0x20, (void *)0x05000300, 0x20);
|
|
|
|
if (group->available)
|
|
{
|
|
group->baseX = 120;
|
|
group->baseY = gCurrentPinballGame->unk394 + 50;
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
oamSimple = &group->oam[i];
|
|
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
|
|
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
|
|
}
|
|
|
|
group = &gMain.spriteGroups[5];
|
|
group->baseX = 120;
|
|
group->baseY = gCurrentPinballGame->unk394 + 50;
|
|
for (i = 0; i < 18; i++)
|
|
{
|
|
oamSimple = &group->oam[i];
|
|
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
|
|
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
|
|
}
|
|
}
|
|
|
|
sp0[0] = (var1 / 10000000);
|
|
sp0[1] = (var1 % 10000000) / 1000000;
|
|
sp0[2] = (var1 % 1000000) / 100000;
|
|
sp0[3] = (var1 % 100000) / 10000;
|
|
sp0[4] = (var1 % 10000) / 1000;
|
|
sp0[5] = (var1 % 1000) / 100;
|
|
sp0[6] = (var1 % 100) / 10;
|
|
sp0[7] = (var1 % 10);
|
|
|
|
switch (gMain.selectedField)
|
|
{
|
|
case FIELD_DUSCLOPS:
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
DmaCopy16(3, &gUnknown_08138834[(sp0[i] + 0x70) * 0x40], (void *)0x06017000 + ((i * 2) + 12) * 0x20, 0x40);
|
|
}
|
|
var2 = gCurrentPinballGame->ballUpgradeType + 0x71;
|
|
DmaCopy16(3, &gUnknown_08138834[var2 * 0x40], (void *)0x06017380, 0x40);
|
|
break;
|
|
case FIELD_KECLEON:
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
DmaCopy16(3, &gUnknown_0813A854[(sp0[i] + 0x70) * 0x40], (void *)0x06017000 + ((i * 2) + 12) * 0x20, 0x40);
|
|
}
|
|
var2 = gCurrentPinballGame->ballUpgradeType + 0x71;
|
|
DmaCopy16(3, &gUnknown_0813A854[var2 * 0x40], (void *)0x06017380, 0x40);
|
|
break;
|
|
case FIELD_KYOGRE:
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
DmaCopy16(3, &gUnknown_0813C874[(sp0[i] + 0x70) * 0x40], (void *)0x06017000 + ((i * 2) + 12) * 0x20, 0x40);
|
|
}
|
|
var2 = gCurrentPinballGame->ballUpgradeType + 0x71;
|
|
DmaCopy16(3, &gUnknown_0813C874[var2 * 0x40], (void *)0x06017380, 0x40);
|
|
break;
|
|
case FIELD_GROUDON:
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
DmaCopy16(3, &gUnknown_0813E894[(sp0[i] + 0x70) * 0x40], (void *)0x06017000 + ((i * 2) + 12) * 0x20, 0x40);
|
|
}
|
|
var2 = gCurrentPinballGame->ballUpgradeType + 0x71;
|
|
DmaCopy16(3, &gUnknown_0813E894[var2* 0x40], (void *)0x06017380, 0x40);
|
|
break;
|
|
case FIELD_RAYQUAZA:
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
DmaCopy16(3, &gUnknown_081408B4[(sp0[i] + 0x70) * 0x40], (void *)0x06017000 + ((i * 2) + 12) * 0x20, 0x40);
|
|
}
|
|
var2 = gCurrentPinballGame->ballUpgradeType + 0x71;
|
|
DmaCopy16(3, &gUnknown_081408B4[var2 * 0x40], (void *)0x06017380, 0x40);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void sub_356A0(void)
|
|
{
|
|
s16 i;
|
|
struct SpriteGroup *group;
|
|
struct OamDataSimple *oamSimple;
|
|
|
|
group = &gMain_spriteGroups_14;
|
|
switch (gCurrentPinballGame->unk3DC)
|
|
{
|
|
case 0:
|
|
case 1:
|
|
case 8:
|
|
if (!group->available)
|
|
break;
|
|
|
|
group->baseX = 240;
|
|
group->baseY = 160;
|
|
|
|
oamSimple = &group->oam[0];
|
|
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + 240;
|
|
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
|
|
break;
|
|
case 2:
|
|
if (gCurrentPinballGame->unk3E6 <= 0)
|
|
break;
|
|
|
|
if (!group->available)
|
|
break;
|
|
|
|
group->baseX = 240;
|
|
group->baseY = 160;
|
|
|
|
oamSimple = &group->oam[0];
|
|
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + 240;
|
|
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
|
|
break;
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
case 6:
|
|
case 7:
|
|
break;
|
|
}
|
|
|
|
group = &gMain_spriteGroups_12;
|
|
if (!group->available)
|
|
return;
|
|
|
|
group->baseX = 240;
|
|
group->baseY = 160;
|
|
for (i = 0; i < 2; i++)
|
|
{
|
|
oamSimple = &group->oam[i];
|
|
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
|
|
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
|
|
}
|
|
}
|
|
|
|
void sub_357B8(void)
|
|
{
|
|
u8 temp;
|
|
|
|
m4aMPlayAllStop();
|
|
sub_0D10();
|
|
|
|
temp = gMain.unk5;
|
|
gMain.unk5 = gMain.selectedField;
|
|
gMain.selectedField = temp;
|
|
gMain.unk6 = 0;
|
|
gMain.unkF = 0;
|
|
gCurrentPinballGame->eventTimer = 0;
|
|
gCurrentPinballGame->unk294 = 0;
|
|
if (gCurrentPinballGame->numCompletedBonusStages > 4)
|
|
gMain.eReaderBonuses[EREADER_ENCOUNTER_RATE_UP_CARD] = 1;
|
|
|
|
gMain.subState = 0;
|
|
gCurrentPinballGame->unk15 = 3;
|
|
gCurrentPinballGame->unk13 = 1;
|
|
gCurrentPinballGame->unk16 = 0;
|
|
gCurrentPinballGame->unk5FA = 0;
|
|
gCurrentPinballGame->unkE6 = 0;
|
|
sub_1C7F4(0, 0);
|
|
gCurrentPinballGame->unk6C4 = 0;
|
|
if (gCurrentPinballGame->unk714)
|
|
gCurrentPinballGame->unk6EE = 120;
|
|
}
|