mirror of
https://github.com/pret/pokepinballrs.git
synced 2026-03-21 17:24:13 -05:00
parent
60513c50c6
commit
6e79ed0cc5
1344
asm/rom_203CC.s
1344
asm/rom_203CC.s
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
|
@ -461,7 +461,7 @@ extern void sub_1F59C();
|
|||
//extern ? sub_1FF0C();
|
||||
//extern ? sub_201B8();
|
||||
extern void sub_203CC();
|
||||
//extern ? sub_20EC0();
|
||||
extern void sub_20EC0();
|
||||
extern void sub_21238(s16);
|
||||
//extern ? sub_21300();
|
||||
//extern ? sub_21320();
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ struct PinballGame
|
|||
/*0x025*/ s8 unk25;
|
||||
/*0x026*/ u16 unk26;
|
||||
/*0x028*/ u16 unk28;
|
||||
/*0x02A*/ u8 filler2A[0x2];
|
||||
/*0x02A*/ u16 unk2A;
|
||||
/*0x02C*/ int unk2C;
|
||||
/*0x030*/ s8 numLives;
|
||||
/*0x031*/ u8 ballSpeed;
|
||||
|
|
@ -189,7 +189,7 @@ struct PinballGame
|
|||
/*0x0C8*/ u8 fillerC8[0x2];
|
||||
/*0x0CA*/ s16 unkCA;
|
||||
/*0x0CC*/ s16 unkCC;
|
||||
/*0x0CE*/ u8 fillerCE[0x2];
|
||||
/*0x0CE*/ u16 unkCE;
|
||||
/*0x0D0*/ struct Vector16 unkD0[5];
|
||||
/*0x0E4*/ u8 unkE4;
|
||||
/*0x0E6*/ s16 unkE6;
|
||||
|
|
@ -297,9 +297,10 @@ struct PinballGame
|
|||
/*0x1D8*/ u16 unk1D8;
|
||||
/*0x1DA*/ u16 unk1DA;
|
||||
/*0x1DC*/ u16 unk1DC;
|
||||
/*0x1DE*/ u8 filler1DE[0x4];
|
||||
/*0x1DE*/ u16 unk1DE;
|
||||
/*0x1E0*/ u16 unk1E0;
|
||||
/*0x1E2*/ s8 outLanePikaPosition; //Pikachu coverage. 0= left lane, 1=right lane, 2 = both
|
||||
/*0x1E3*/ u8 filler1E3[0x2];
|
||||
/*0x1E3*/ s8 unk1E3[2];
|
||||
/*0x1E5*/ s8 unk1E5;
|
||||
/*0x1E6*/ s8 unk1E6;
|
||||
/*0x1E7*/ u8 filler1E7[0x1];
|
||||
|
|
@ -322,7 +323,7 @@ struct PinballGame
|
|||
/*0x205*/ u8 filler205[0x1];
|
||||
/*0x206*/ u16 unk206;
|
||||
/*0x208*/ u16 unk208;
|
||||
/*0x20A*/ u8 unk20A;
|
||||
/*0x20A*/ s8 unk20A;
|
||||
/*0x20B*/ s8 unk20B;
|
||||
/*0x20C*/ s8 unk20C;
|
||||
/*0x20D*/ u8 filler20D[0x1];
|
||||
|
|
@ -711,7 +712,9 @@ struct PinballGame
|
|||
/*0x618*/ u16 unk618;
|
||||
/*0x61A*/ s16 unk61A;
|
||||
/*0x61C*/ s8 unk61C;
|
||||
/*0x61D*/ u8 filler61D[0x7];
|
||||
/*0x61D*/ u8 filler61D;
|
||||
/*0x61E*/ u16 unk61E;
|
||||
/*0x620*/ struct Vector16 unk620;
|
||||
/*0x624*/ s8 unk624;
|
||||
/*0x625*/ s8 unk625;
|
||||
/*0x626*/ s8 unk626;
|
||||
|
|
@ -973,15 +976,18 @@ extern u8 *gMonPortraitGroupGfx[];
|
|||
extern u8 *gMonPortraitGroupPals[];
|
||||
extern u8 gUnknown_02030760[];
|
||||
extern u8 gUnknown_02031060[];
|
||||
extern const u8 gUnknown_08395A4C[];
|
||||
extern const u8 gUnknown_08397E6C[];
|
||||
extern const u8 gUnknown_083A8EEC[][0x300];
|
||||
extern const u8 gUnknown_083BB16C[][0x80];
|
||||
extern const u8 gUnknown_083BD36C[][0x200];
|
||||
extern const u8 gUnknown_0844838C[][0x300];
|
||||
extern const u8 gUnknown_0848D68C[][0x300];
|
||||
extern const u8 gUnknown_084C00EC[][0x80];
|
||||
extern const s8 gUnknown_084C07EC[];
|
||||
extern const u8 gUnknown_084C07EC[];
|
||||
extern const u8 gUnknown_084FA48C[][0x120];
|
||||
extern const u8 gUnknown_084FD18C[][0x200];
|
||||
extern const u8 *gUnknown_086AD49C[];
|
||||
extern const u16 gUnknown_086AD2EE[][4];
|
||||
|
||||
#endif // GUARD_GLOBAL_H
|
||||
|
|
@ -53,7 +53,6 @@ SECTIONS
|
|||
src/rom_1A0F4.o(.text);
|
||||
src/rom_1A98C.o(.text);
|
||||
src/rom_201B8.o(.text);
|
||||
asm/rom_203CC.o(.text);
|
||||
src/rom_27E08.o(.text);
|
||||
src/rom_27F94.o(.text);
|
||||
src/rom_2C538.o(.text);
|
||||
|
|
|
|||
|
|
@ -24,8 +24,6 @@ extern const VoidFunc gUnknown_086B085C[];
|
|||
extern struct SpriteGroup *gMainFieldSpriteGroups[][60];
|
||||
extern struct SpriteGroup *gBonusFieldSpriteGroups[][30];
|
||||
extern const u8 gUnknown_08158284[];
|
||||
extern const u8 gUnknown_08395A4C[];
|
||||
extern const u8 gUnknown_08397E6C[];
|
||||
extern const u8 gUnknown_083A704C[];
|
||||
extern const u8 gUnknown_0848FD8C[];
|
||||
extern const u8 gUnknown_081428D4[];
|
||||
|
|
|
|||
312
src/rom_201B8.c
312
src/rom_201B8.c
|
|
@ -41,6 +41,13 @@ extern const s16 gUnknown_086AD79C[];
|
|||
extern struct SongHeader gUnknown_0869F2A0;
|
||||
extern struct SongHeader gUnknown_0869F240;
|
||||
extern struct SongHeader gUnknown_086A0F30;
|
||||
extern struct SongHeader gUnknown_086A2FA0;
|
||||
extern struct SongHeader gUnknown_086A0328;
|
||||
extern struct SongHeader gUnknown_086A0368;
|
||||
extern s16 gUnknown_086ADF48[100];
|
||||
extern s16 gUnknown_086ADF8A[3];
|
||||
extern u16 gUnknown_086ADEE0[][2];
|
||||
extern s16 gUnknown_086B4922[][0xC];
|
||||
|
||||
|
||||
void sub_1C7F4(s16 arg0, s16 arg1)
|
||||
|
|
@ -1831,3 +1838,308 @@ void sub_201B8(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_203CC(void)
|
||||
{
|
||||
s16 i;
|
||||
s16 j;
|
||||
s16 r5;
|
||||
s16 tempY;
|
||||
struct SpriteGroup *spriteGroup;
|
||||
struct OamDataSimple *oamSimple;
|
||||
u16 *dst;
|
||||
const u16 *src;
|
||||
|
||||
sub_20EC0();
|
||||
|
||||
if (gCurrentPinballGame->unk1C6 > 167)
|
||||
{
|
||||
gCurrentPinballGame->unk744[0] = gUnknown_086ADF48[(gMain.fieldFrameCount % 160) / 5];
|
||||
if (gCurrentPinballGame->outLanePikaPosition == 2)
|
||||
gCurrentPinballGame->unk744[1] = gCurrentPinballGame->unk744[0] + 6;
|
||||
else
|
||||
gCurrentPinballGame->unk744[1] = gCurrentPinballGame->unk744[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
gCurrentPinballGame->unk744[0] = (gMain.fieldFrameCount % 50) / 25;
|
||||
if (gCurrentPinballGame->outLanePikaPosition == 2)
|
||||
gCurrentPinballGame->unk744[1] = gCurrentPinballGame->unk744[0] + 9;
|
||||
else
|
||||
gCurrentPinballGame->unk744[1] = gCurrentPinballGame->unk744[0];
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->outLanePikaPosition == 2)
|
||||
{
|
||||
gCurrentPinballGame->unk1E3[0] = 1;
|
||||
gCurrentPinballGame->unk1E3[1] = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
gCurrentPinballGame->unk1E3[0 + gCurrentPinballGame->outLanePikaPosition] = 1;
|
||||
gCurrentPinballGame->unk1E3[1 - gCurrentPinballGame->outLanePikaPosition] = 0;
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->unk1C4 != 0)
|
||||
{
|
||||
if (gCurrentPinballGame->unk1C4 == 120)
|
||||
{
|
||||
// gCurrentPinballGame->unk1C2 + gCurrentPinballGame->unk1E2
|
||||
// Note: this can be && chained off of the previous if, once we have this line deciphered.
|
||||
if (gCurrentPinballGame->unk1E3[gCurrentPinballGame->unk1C2 - 1] != 0)
|
||||
{
|
||||
if (gCurrentPinballGame->unk1C6 > 167)
|
||||
{
|
||||
gCurrentPinballGame->unk1F = 1;
|
||||
gCurrentPinballGame->unk61C = 1;
|
||||
gCurrentPinballGame->unk1DE = 120;
|
||||
gCurrentPinballGame->unk1E0 = 120;
|
||||
gCurrentPinballGame->unk61E = gCurrentPinballGame->unk1DE;
|
||||
gCurrentPinballGame->unk5F7 = 1;
|
||||
gCurrentPinballGame->unk208 = 0;
|
||||
gCurrentPinballGame->unk20A = 0;
|
||||
|
||||
if (gCurrentPinballGame->outLanePikaPosition != 2)
|
||||
{
|
||||
gCurrentPinballGame->unk1C6 = 0;
|
||||
gCurrentPinballGame->unk1C8 = 0;
|
||||
gCurrentPinballGame->unk1CC = 0;
|
||||
gCurrentPinballGame->unk1CA = 0;
|
||||
gCurrentPinballGame->unk1D4 = 0;
|
||||
gCurrentPinballGame->unk1D6 = -4;
|
||||
gCurrentPinballGame->unk1D8 = 256;
|
||||
gCurrentPinballGame->unk1DA = 256;
|
||||
gCurrentPinballGame->unk1CE = 0;
|
||||
gCurrentPinballGame->unk1D0 = 0;
|
||||
}
|
||||
|
||||
gCurrentPinballGame->unk620 = gCurrentPinballGame->ball->positionQ1;
|
||||
gCurrentPinballGame->unk3C = 30000;
|
||||
|
||||
if (gCurrentPinballGame->unk62E <= 98)
|
||||
gCurrentPinballGame->unk62E++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gCurrentPinballGame->unk1C4 = 60;
|
||||
MPlayStart(&gMPlayInfo_SE1, &gUnknown_086A2FA0);
|
||||
}
|
||||
|
||||
i = gCurrentPinballGame->unk1C2 - 1;
|
||||
|
||||
if (gCurrentPinballGame->outLanePikaPosition == 2)
|
||||
gCurrentPinballGame->unk744[i] = (i) * 7 + 2;
|
||||
else
|
||||
gCurrentPinballGame->unk744[i] = 2;
|
||||
|
||||
DmaCopy16(3, gUnknown_084C07EC + (gCurrentPinballGame->unk744[i] * 0x180), 0x06010480 + ((i) * 0x180), 0x180);
|
||||
}
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->outLanePikaPosition == 2)
|
||||
gCurrentPinballGame->unk744[gCurrentPinballGame->unk1C2 - 1] = (gCurrentPinballGame->unk1C2 - 1) * 7 + 2;
|
||||
else
|
||||
gCurrentPinballGame->unk744[gCurrentPinballGame->unk1C2 - 1] = 2;
|
||||
|
||||
gCurrentPinballGame->unk1C4--;
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->unk61C != 0)
|
||||
{
|
||||
if (gCurrentPinballGame->unk61E > 1)
|
||||
{
|
||||
r5 = (gCurrentPinballGame->unk1DE * 0x10000) / 10;
|
||||
gCurrentPinballGame->unk61E--;
|
||||
if (gCurrentPinballGame->unk1DE != 0)
|
||||
{
|
||||
gCurrentPinballGame->unk1DE--;
|
||||
if (gCurrentPinballGame->unk1DE == 40 && gCurrentPinballGame->unk61E > 40)
|
||||
{
|
||||
gCurrentPinballGame->unk1DE = 60;
|
||||
}
|
||||
}
|
||||
if (gCurrentPinballGame->unk61E == 116)
|
||||
{
|
||||
if (gCurrentPinballGame->unkE4)
|
||||
gCurrentPinballGame->unk61E = 120;
|
||||
else
|
||||
{
|
||||
gCurrentPinballGame->unkE4 = 1;
|
||||
if (gCurrentPinballGame->outLanePikaPosition == 2)
|
||||
{
|
||||
if (gCurrentPinballGame->unk1C2 == 1)
|
||||
MPlayStart(&gMPlayInfo_SE1, &gUnknown_086A0328);
|
||||
else
|
||||
MPlayStart(&gMPlayInfo_SE1, &gUnknown_086A0368);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x40);
|
||||
}
|
||||
else
|
||||
{
|
||||
MPlayStart(&gMPlayInfo_SE1, &gUnknown_086A0328);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x40);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (gCurrentPinballGame->unk61E == 115 && gCurrentPinballGame->unkE4 == 1)
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_SE1, 0xFFFF, 0x200);
|
||||
|
||||
gCurrentPinballGame->ball->positionQ1.x =
|
||||
gCurrentPinballGame->unk620.x + ((Sin(r5) * 6) / 20000) +
|
||||
((gUnknown_086ADF8A[gCurrentPinballGame->unk1C2 - 1] * 2 - gCurrentPinballGame->unk620.x) * (gCurrentPinballGame->unk1E0 - gCurrentPinballGame->unk1DE)) / gCurrentPinballGame->unk1E0;
|
||||
|
||||
tempY = ((gCurrentPinballGame->unk1E0 - gCurrentPinballGame->unk1DE) * 40) / gCurrentPinballGame->unk1E0;
|
||||
gCurrentPinballGame->ball->positionQ1.y = gCurrentPinballGame->unk620.y - tempY;
|
||||
|
||||
gCurrentPinballGame->ball->positionQ8.x = gCurrentPinballGame->ball->positionQ1.x * 128;
|
||||
gCurrentPinballGame->ball->positionQ8.y = gCurrentPinballGame->ball->positionQ1.y * 128;
|
||||
}
|
||||
else if (gCurrentPinballGame->unk61E == 1)
|
||||
{
|
||||
gCurrentPinballGame->ball->positionQ1.x = gUnknown_086ADF8A[gCurrentPinballGame->unk1C2 - 1] * 2;
|
||||
gCurrentPinballGame->ball->positionQ1.y = 702;
|
||||
gCurrentPinballGame->ball->positionQ8.x = gCurrentPinballGame->ball->positionQ1.x * 128;
|
||||
gCurrentPinballGame->ball->positionQ8.y = gCurrentPinballGame->ball->positionQ1.y * 128;
|
||||
gCurrentPinballGame->ball->velocity.x = 0;
|
||||
// fly me to the moon
|
||||
gCurrentPinballGame->ball->velocity.y = -300;
|
||||
m4aSongNumStart(SE_UNKNOWN_0x7C);
|
||||
gCurrentPinballGame->unk61E = 0;
|
||||
gCurrentPinballGame->unk1F = 0;
|
||||
gCurrentPinballGame->unk5F7 = 0;
|
||||
gCurrentPinballGame->holeIndicators[(gCurrentPinballGame->unk1C2 - 1) * 3] = 1;
|
||||
|
||||
if (gCurrentPinballGame->unk714 == 0 &&
|
||||
(gCurrentPinballGame->holeIndicators[0] &
|
||||
gCurrentPinballGame->holeIndicators[1] &
|
||||
gCurrentPinballGame->holeIndicators[2] &
|
||||
gCurrentPinballGame->holeIndicators[3]))
|
||||
{
|
||||
gCurrentPinballGame->unk714 = 1;
|
||||
gCurrentPinballGame->unk715 = 126;
|
||||
gCurrentPinballGame->unk3C = 4000;
|
||||
}
|
||||
|
||||
sub_11B0(11);
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->unk61E >= 100)
|
||||
{
|
||||
if (gCurrentPinballGame->outLanePikaPosition == 2)
|
||||
gCurrentPinballGame->unk744[gCurrentPinballGame->unk1C2 - 1] = (gCurrentPinballGame->unk1C2 - 1) * 7 + 2;
|
||||
else
|
||||
gCurrentPinballGame->unk744[gCurrentPinballGame->unk1C2 - 1] = 2;
|
||||
|
||||
if (gCurrentPinballGame->unk61E == 100)
|
||||
{
|
||||
gMain.unk44[38]->available = 1;
|
||||
|
||||
if (gCurrentPinballGame->outLanePikaPosition == 2 && gCurrentPinballGame->unk1C2 == 2)
|
||||
{
|
||||
DmaCopy16(3, gUnknown_08395A4C, 0x06015800, 0x2400);
|
||||
}
|
||||
else
|
||||
{
|
||||
DmaCopy16(3, gUnknown_08397E6C, 0x06015800, 0x2400);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gUnknown_086ADEE0[gCurrentPinballGame->unk20A][1] > gCurrentPinballGame->unk208)
|
||||
gCurrentPinballGame->unk208++;
|
||||
else
|
||||
{
|
||||
gCurrentPinballGame->unk208 = 0;
|
||||
gCurrentPinballGame->unk20A++;
|
||||
|
||||
if (gCurrentPinballGame->unk20A == 23)
|
||||
{
|
||||
m4aSongNumStop(SE_UNKNOWN_0x7C);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->unk20A > 25)
|
||||
{
|
||||
gCurrentPinballGame->unk20A = 25;
|
||||
gCurrentPinballGame->unk61C = 0;
|
||||
gMain.unk44[38]->available = 0;
|
||||
gCurrentPinballGame->unkE4 = 0;
|
||||
|
||||
i = gCurrentPinballGame->unk1C2 - 1;
|
||||
if (gCurrentPinballGame->outLanePikaPosition == 2)
|
||||
gCurrentPinballGame->unk744[i] = i * 9;
|
||||
else
|
||||
gCurrentPinballGame->unk744[i] = 0;
|
||||
|
||||
DmaCopy16(3, gUnknown_084C07EC + (gCurrentPinballGame->unk744[i] * 0x180), 0x06010480 + (i * 0x180), 0x180);
|
||||
}
|
||||
}
|
||||
|
||||
if (gCurrentPinballGame->unk20A >= 17 && gCurrentPinballGame->unk20A <= 23)
|
||||
{
|
||||
if ((gMain.systemFrameCount & 3) >> 1)
|
||||
gCurrentPinballGame->unk4C = -3;
|
||||
else
|
||||
gCurrentPinballGame->unk4C = 3;
|
||||
}
|
||||
|
||||
r5 = gUnknown_086ADEE0[gCurrentPinballGame->unk20A][0];
|
||||
i = gCurrentPinballGame->unk1C2 - 1;
|
||||
|
||||
spriteGroup = gMain.unk44[38];
|
||||
spriteGroup->baseX = (i * 177) - (gCurrentPinballGame->unk58 - 16);
|
||||
if (gCurrentPinballGame->unk61C)
|
||||
{
|
||||
spriteGroup->baseY = 380 - gCurrentPinballGame->unk5A;
|
||||
gCurrentPinballGame->unk1E3[i] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
spriteGroup->baseY = 180;
|
||||
gCurrentPinballGame->unk1E3[i] = 1;
|
||||
}
|
||||
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
oamSimple = &spriteGroup->oam[j];
|
||||
dst = (u16 *)&gOamBuffer[oamSimple->oamId];
|
||||
*dst++ = gUnknown_086B4922[r5][j * 3 + 0];
|
||||
*dst++ = gUnknown_086B4922[r5][j * 3 + 1];
|
||||
*dst++ = gUnknown_086B4922[r5][j * 3 + 2];
|
||||
|
||||
gOamBuffer[oamSimple->oamId].x += spriteGroup->baseX;
|
||||
gOamBuffer[oamSimple->oamId].y += spriteGroup->baseY;
|
||||
}
|
||||
}
|
||||
}
|
||||
spriteGroup = gMain.unk44[29];
|
||||
|
||||
if (spriteGroup->available)
|
||||
{
|
||||
for (i = 0; i <= 1; i++)
|
||||
{
|
||||
spriteGroup = gMain.unk44[29 + i];
|
||||
spriteGroup->baseX = (i * 177) - (gCurrentPinballGame->unk58 - 16);
|
||||
if (gCurrentPinballGame->unk1E3[i])
|
||||
{
|
||||
if ((gMain.fieldFrameCount % 5) == 0)
|
||||
{
|
||||
DmaCopy16(3, gUnknown_084C07EC + (gCurrentPinballGame->unk744[i] * 0x180), 0x06010480 + (i * 0x180), 0x180);
|
||||
}
|
||||
|
||||
tempY = 380 - gCurrentPinballGame->unk5A;
|
||||
spriteGroup->baseY = tempY;
|
||||
}
|
||||
else
|
||||
spriteGroup->baseY = 200;
|
||||
|
||||
for (j = 0; j <= 1; j++)
|
||||
{
|
||||
oamSimple = &spriteGroup->oam[j];
|
||||
|
||||
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + spriteGroup->baseX;
|
||||
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + spriteGroup->baseY;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user