match a bunch of functions

This commit is contained in:
Marcus Huderle 2025-08-13 20:10:13 -05:00
parent 5f937600b1
commit 84946c9e72
20 changed files with 591 additions and 1777 deletions

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -668,30 +668,30 @@ extern void sub_4E9F0(s8);
//extern ? sub_4EE74();
//extern ? sub_4EF38();
//extern ? sub_4F028();
//extern ? sub_4F0F0();
extern void sub_4F0F0(void);
extern void sub_4F258(void);
//extern ? sub_4F2B8();
extern void sub_4F2B8(void);
//extern ? sub_4F30C();
//extern ? sub_4F4B4();
//extern ? sub_4F660();
extern void sub_4F814();
//extern ? sub_4F95C();
//extern ? sub_4F9F0();
//extern ? sub_4FAC0();
//extern ? sub_4FB08();
//extern ? sub_4FBA4();
//extern ? sub_4FC7C();
//extern ? sub_4FD88();
//extern ? sub_4FE6C();
//extern ? sub_50000();
//extern ? sub_500B4();
//extern ? sub_50154();
//extern ? sub_5030C();
//extern ? sub_504C0();
//extern ? sub_505A4();
//extern ? sub_506B0();
//extern ? sub_50710();
//extern ? sub_507D4();
extern void sub_4F814(void);
extern void sub_4F95C(void);
extern void sub_4F9F0(void);
extern void sub_4FAC0(void);
extern void sub_4FB08(void);
extern void sub_4FBA4(void);
extern void sub_4FC7C(void);
extern void sub_4FD88(void);
extern void sub_4FE6C(void);
extern void sub_50000(void);
extern void sub_500B4(void);
extern void sub_50154(void);
extern void sub_5030C(void);
extern void sub_504C0(void);
extern void sub_505A4(void);
extern void sub_506B0(void);
extern void sub_50710(void);
extern void sub_507D4(void);
extern void RubyBoardProcess_0A_50848(void);
//extern ? RubyBoardProcess_0B_50918();
extern void SapphireBoardProcess_0A_50AD4(void);

View File

@ -317,13 +317,14 @@ struct PinballGame
/*0x2DB*/ u8 filler2DB[0x10];
/*0x2EC*/ u16 unk2EC;
/*0x2EE*/ u16 unk2EE;
/*0x2F0*/ u8 filler2F0[0x1];
/*0x2F0*/ u8 unk2F0;
/*0x2F1*/ u8 unk2F1;
/*0x2F2*/ u8 filler2F2[0x2];
/*0x2F4*/ u8 unk2F4;
/*0x2F5*/ s8 unk2F5;
/*0x2F6*/ u16 unk2F6;
/*0x2F8*/ u8 filler2F8[0x8];
/*0x2F8*/ s8 unk2F8;
/*0x2F9*/ u8 filler2F9[0x7];
/*0x300*/ u8 unk300;
/*0x301*/ u8 unk301;
/*0x302*/ u8 filler302[0x4];
@ -613,12 +614,16 @@ struct PinballGame
/*0x710*/ s8 holeIndicators[4]; // 'HOLE' light indicators in Ruby/Sapphire field
/*0x714*/ s8 unk714;
/*0x715*/ u8 unk715;
/*0x716*/ s8 unk716;
/*0x716*/ u8 unk716;
/*0x717*/ u8 unk717;
/*0x718*/ s8 ballPowerUpLight[3];
/*0x71B*/ u8 unk71B;
/*0x71B*/ s8 unk71B;
/*0x71C*/ u8 unk71C;
/*0x71D*/ u8 filler71D[0x7];
/*0x71D*/ s8 unk71D[3];
/*0x720*/ u8 unk720;
/*0x721*/ s8 unk721;
/*0x722*/ s8 unk722;
/*0x723*/ u8 filler723[0x1];
/*0x724*/ u16 unk724;
/*0x726*/ s8 unk726;
/*0x727*/ u8 filler727[0x1];
@ -626,10 +631,10 @@ struct PinballGame
/*0x729*/ s8 unk729;
/*0x72A*/ s8 unk72A;
/*0x72B*/ s8 unk72B;
/*0x72C*/ u8 filler72C[0x2];
/*0x72C*/ u16 unk72C;
/*0x72E*/ s8 unk72E;
/*0x72F*/ s8 unk72F;
/*0x730*/ u8 unk730;
/*0x730*/ s8 unk730;
/*0x731*/ s8 unk731;
/*0x732*/ u8 filler732[0x2];
/*0x734*/ s16 unk734;

View File

@ -70,7 +70,6 @@ SECTIONS
src/rom_4E598.o(.text);
asm/rom_4CEA8.o(.text4E598);
src/rom_4F258.o(.text);
asm/rom_4CEA8.o(.text4F258);
src/rom_50AD4.o(.text);
src/rom_50FAC.o(.text);
src/options.o(.text);

View File

@ -1,13 +1,164 @@
#include "global.h"
#include "m4a.h"
#include "main.h"
extern u8* gUnknown_086B0B70[][3];
extern const u8 *gUnknown_086B0B70[][3];
extern const u16 gUnknown_086B0E20[];
extern const u8 *gUnknown_086B0B94[][4];
extern const u8 *gUnknown_086B0B20[][4];
extern const u8 *gUnknown_086B0AF0[][4];
void sub_4F258(void) {
s16 i;
for (i = 0; i < 3; i++) {
u8 ** src = gUnknown_086B0B70[i] + gCurrentPinballGame->ballPowerUpLight[i];
u8 ** dst = gUnknown_086B0B70[i] + 2;
DmaCopy16(3, *src, *dst, 0x40);
extern struct SongHeader gUnknown_0869F664;
void sub_4EE74(void)
{
s16 index;
const u8 **src;
const u8 **dest;
index = 0;
if (gCurrentPinballGame->unk729 > 0)
index = 1 - gCurrentPinballGame->unk734;
src = gUnknown_086B0AF0[index];
dest = gUnknown_086B0AF0[2];
if (gCurrentPinballGame->unk6A > 40)
{
if (gCurrentPinballGame->unk6A < 208)
{
DmaCopy16(3, src[0], dest[0], 0x40);
}
if (gCurrentPinballGame->unk6A < 216)
{
DmaCopy16(3, src[1], dest[1], 0x80);
}
}
if (gCurrentPinballGame->unk6A > 56)
{
if (gCurrentPinballGame->unk6A < 224)
{
DmaCopy16(3, src[2], dest[2], 0x80);
}
DmaCopy16(3, src[3], dest[3], 0x60);
}
}
void sub_4EF38(void)
{
s16 index;
const u8 **src;
const u8 **dest;
index = 0;
if (gCurrentPinballGame->unk2F0 > 2)
gCurrentPinballGame->unk72A = 1;
else if (gCurrentPinballGame->unk13)
gCurrentPinballGame->unk72A = 0;
if (gCurrentPinballGame->unk72A > 0)
index = gCurrentPinballGame->unk1A5 * 2 + 1 - gCurrentPinballGame->unk734;
else
index = gCurrentPinballGame->unk1A5 * 2;
src = gUnknown_086B0B20[index];
dest = gUnknown_086B0B20[4];
if (gCurrentPinballGame->unk6A < 240)
{
DmaCopy16(3, src[0], dest[0], 0xA0);
}
DmaCopy16(3, src[1], dest[1], 0xA0);
DmaCopy16(3, src[2], dest[2], 0xA0);
if (gCurrentPinballGame->unk6A > 88)
{
DmaCopy16(3, src[3], dest[3], 0x60);
}
}
void sub_4F028(void)
{
s16 index;
const u8 **src;
const u8 **dest;
index = 0;
gCurrentPinballGame->unk731 = 0;
if (gCurrentPinballGame->unk72F > 1 && gCurrentPinballGame->unk13 < 3)
gCurrentPinballGame->unk731 = 1;
if (gCurrentPinballGame->unk731 > 0)
index = 1 - gCurrentPinballGame->unk734;
src = gUnknown_086B0B94[index];
dest = gUnknown_086B0B94[2];
if (gCurrentPinballGame->unk6A < 264)
{
DmaCopy16(3, src[0], dest[0], 0x40);
}
DmaCopy16(3, src[1], dest[1], 0x80);
DmaCopy16(3, src[2], dest[2], 0x80);
DmaCopy16(3, src[3], dest[3], 0x80);
}
void sub_4F0F0(void)
{
if (gCurrentPinballGame->unk71B == 0)
return;
if (gCurrentPinballGame->unk71C)
{
if (gCurrentPinballGame->unk2F8 == 0)
{
gCurrentPinballGame->ballPowerUpLight[0] = (gMain.fieldFrameCount % 20) / 10;
gCurrentPinballGame->ballPowerUpLight[1] = gCurrentPinballGame->ballPowerUpLight[0];
gCurrentPinballGame->ballPowerUpLight[2] = gCurrentPinballGame->ballPowerUpLight[0];
}
if (gCurrentPinballGame->unk71C == 28)
{
if (gCurrentPinballGame->unk5F6 < 3)
gCurrentPinballGame->unk5F6++;
gCurrentPinballGame->unk5F8 = 3600;
DmaCopy16(3, gUnknown_08137E14[gCurrentPinballGame->unk5F6], (void *)0x05000220, 0x20);
}
if (gCurrentPinballGame->unk71C == 40)
MPlayStart(&gMPlayInfo_SE1, &gUnknown_0869F664);
if (gCurrentPinballGame->unk71C == 60)
gMain.unk44[43]->available = 1;
gCurrentPinballGame->unk6E = gUnknown_086B0E20[30 - gCurrentPinballGame->unk71C / 2];
gCurrentPinballGame->unk71C--;
}
else
{
gCurrentPinballGame->unk71B = 0;
if (gCurrentPinballGame->unk2F8 == 0)
{
gCurrentPinballGame->ballPowerUpLight[0] =
gCurrentPinballGame->ballPowerUpLight[1] =
gCurrentPinballGame->ballPowerUpLight[2] = 0;
}
gCurrentPinballGame->unk2F8 = 0;
}
}
void sub_4F258(void)
{
s16 i;
const u8 **src;
const u8 **dest;
for (i = 0; i < 3; i++) {
src = &gUnknown_086B0B70[i][gCurrentPinballGame->ballPowerUpLight[i]];
dest = &gUnknown_086B0B70[i][2];
DmaCopy16(3, *src, *dest, 0x40);
}
}

View File

@ -15,8 +15,409 @@ extern const u8 *gUnknown_086B11FC[][4];
extern const u8 *gUnknown_086B13F4[][5][3];
extern const u8 *gUnknown_086B11CC[][4];
extern const u8 *gUnknown_086B1300[][4];
extern const u8 *gUnknown_086B1124[][7][2];
extern const u8 *gUnknown_086B0F4C[][4];
extern const u8 *gUnknown_086B1104[][2];
extern const u16 gUnknown_086B0E60[];
extern const u8 *gUnknown_086B108C[][3][5];
extern const u8 *gUnknown_086B0E9C[][4];
extern const u8 *gUnknown_086B0D6C[][5][3];
extern const u8 *gUnknown_086B0C04[][5][3];
extern const u8 *gUnknown_086B0CB8[][5][3];
extern const s16 gUnknown_086B08C4[];
void sub_4F2B8(void)
{
if (gCurrentPinballGame->unk72B > 0)
{
if (gCurrentPinballGame->unk72C < gUnknown_086B08C4[gCurrentPinballGame->unk72B - 1])
{
gCurrentPinballGame->unk72C = gCurrentPinballGame->unk72C + 1;
}
else
{
gCurrentPinballGame->unk72C = 0;
gCurrentPinballGame->unk72B = gCurrentPinballGame->unk72B - 1;
}
}
}
void sub_4F30C(void)
{
s16 sp0[3];
const u8 **src;
const u8 **dest;
if (gCurrentPinballGame->unk72B == 0)
{
sp0[0] = gCurrentPinballGame->unk734 * 2;
sp0[1] = gCurrentPinballGame->unk734;
sp0[2] = 0;
}
else if (gCurrentPinballGame->unk72B == 1)
{
sp0[0] = 3;
sp0[1] = gCurrentPinballGame->unk734 + 1;
sp0[2] = gCurrentPinballGame->unk734 * 2;
}
else if (gCurrentPinballGame->unk72B == 2)
{
sp0[0] = 3;
sp0[1] = 3;
sp0[2] = gCurrentPinballGame->unk734 + 2;
}
else
{
sp0[0] = 3;
sp0[1] = 3;
sp0[2] = 3;
}
src = gUnknown_086B0CB8[0][sp0[0]];
dest = gUnknown_086B0CB8[0][4];
if (gCurrentPinballGame->unk6A >= 42 && gCurrentPinballGame->unk6A < 208)
{
DmaCopy16(3, src[0], dest[0], 0x60);
}
if (gCurrentPinballGame->unk6A >= 50 && gCurrentPinballGame->unk6A < 216)
{
DmaCopy16(3, src[1], dest[1], 0x60);
}
src = gUnknown_086B0CB8[1][sp0[1]];
dest = gUnknown_086B0CB8[1][4];
if (gCurrentPinballGame->unk6A >= 58 && gCurrentPinballGame->unk6A < 224)
{
DmaCopy16(3, src[0], dest[0], 0x60);
}
if (gCurrentPinballGame->unk6A >= 66 && gCurrentPinballGame->unk6A < 232)
{
DmaCopy16(3, src[1], dest[1], 0x60);
}
src = gUnknown_086B0CB8[2][sp0[2]];
dest = gUnknown_086B0CB8[2][4];
if (gCurrentPinballGame->unk6A >= 74 && gCurrentPinballGame->unk6A < 240)
{
DmaCopy16(3, src[0], dest[0], 0x60);
}
if (gCurrentPinballGame->unk6A >= 82 && gCurrentPinballGame->unk6A < 248)
{
DmaCopy16(3, src[1], dest[1], 0x60);
}
if (gCurrentPinballGame->unk6A >= 90)
{
DmaCopy16(3, src[2], dest[2], 0x60);
}
}
void sub_4F4B4(void)
{
s16 sp0[3];
const u8 **src;
const u8 **dest;
if (gCurrentPinballGame->unk13 < 3)
{
if (gCurrentPinballGame->unk72E == 0)
{
sp0[0] = gCurrentPinballGame->unk734 * 2;
sp0[1] = 0;
sp0[2] = 0;
}
else if (gCurrentPinballGame->unk72E == 1)
{
sp0[0] = 3;
sp0[1] = gCurrentPinballGame->unk734 + 1;
sp0[2] = gCurrentPinballGame->unk734 * 2;
}
else if (gCurrentPinballGame->unk72E == 2)
{
sp0[0] = 3;
sp0[1] = 3;
sp0[2] = gCurrentPinballGame->unk734 + 2;
}
else
{
sp0[0] = 3;
sp0[1] = 3;
sp0[2] = 3;
}
}
else
{
sp0[0] = gCurrentPinballGame->unk739;
sp0[1] = gCurrentPinballGame->unk73A;
sp0[2] = gCurrentPinballGame->unk73B;
}
src = gUnknown_086B0C04[0][sp0[0]];
dest = gUnknown_086B0C04[0][4];
if (gCurrentPinballGame->unk6A < 264)
{
DmaCopy16(3, src[0], dest[0], 0x60);
}
DmaCopy16(3, src[1], dest[1], 0x60);
DmaCopy16(3, src[2], dest[2], 0x60);
if (gCurrentPinballGame->unk6A > 120)
{
src = gUnknown_086B0C04[1][sp0[1]];
dest = gUnknown_086B0C04[1][4];
DmaCopy16(3, src[0], dest[0], 0x60);
DmaCopy16(3, src[1], dest[1], 0x60);
DmaCopy16(3, src[2], dest[2], 0x60);
}
if (gCurrentPinballGame->unk6A > 136)
{
src = gUnknown_086B0C04[2][sp0[2]];
dest = gUnknown_086B0C04[2][4];
DmaCopy16(3, src[0], dest[0], 0x60);
DmaCopy16(3, src[1], dest[1], 0x60);
DmaCopy16(3, src[2], dest[2], 0x60);
}
}
void sub_4F660(void)
{
s16 sp0[3];
const u8 **src;
const u8 **dest;
if (gCurrentPinballGame->unk13 < 3)
{
if (gCurrentPinballGame->unk72F == 0)
{
sp0[0] = gCurrentPinballGame->unk734 * 2;
sp0[1] = 0;
sp0[2] = 0;
}
else if (gCurrentPinballGame->unk72F == 1)
{
sp0[0] = 3;
sp0[1] = gCurrentPinballGame->unk734 + 1;
sp0[2] = gCurrentPinballGame->unk734 * 2;
}
else if (gCurrentPinballGame->unk72F == 2)
{
sp0[0] = 3;
sp0[1] = 3;
sp0[2] = (s16) gCurrentPinballGame->unk734 + 2;
}
else
{
sp0[0] = 3;
sp0[1] = 3;
sp0[2] = 3;
}
}
else
{
sp0[0] = gCurrentPinballGame->unk736;
sp0[1] = gCurrentPinballGame->unk737;
sp0[2] = gCurrentPinballGame->unk738;
}
src = gUnknown_086B0D6C[0][sp0[0]];
dest = gUnknown_086B0D6C[0][4];
if (gCurrentPinballGame->unk6A < 264)
{
DmaCopy16(3, src[0], dest[0], 0x60);
}
DmaCopy16(3, src[1], dest[1], 0x60);
DmaCopy16(3, src[2], dest[2], 0x60);
if (gCurrentPinballGame->unk6A > 120)
{
src = gUnknown_086B0D6C[1][sp0[1]];
dest = gUnknown_086B0D6C[1][4];
DmaCopy16(3, src[0], dest[0], 0x40);
DmaCopy16(3, src[1], dest[1], 0x40);
DmaCopy16(3, src[2], dest[2], 0x60);
}
if (gCurrentPinballGame->unk6A > 136)
{
src = gUnknown_086B0D6C[2][sp0[2]];
dest = gUnknown_086B0D6C[2][4];
DmaCopy16(3, src[0], dest[0], 0x40);
DmaCopy16(3, src[1], dest[1], 0x60);
DmaCopy16(3, src[2], dest[2], 0x60);
}
}
void sub_4F814(void)
{
gCurrentPinballGame->unk734 = (gCurrentPinballGame->unk70C % 40) / 20;
gCurrentPinballGame->unk70C++;
sub_50710();
if (gCurrentPinballGame->unk6A > 83)
sub_50000();
if (gCurrentPinballGame->unk6A > 18)
sub_500B4();
if (gCurrentPinballGame->unk6A >= 56 && gCurrentPinballGame->unk6A < 243)
sub_505A4();
sub_4F0F0();
if (gCurrentPinballGame->unk6A < 112)
sub_506B0();
if (gCurrentPinballGame->unk6A >= 64 && gCurrentPinballGame->unk6A < 254)
sub_504C0();
if (gCurrentPinballGame->unk6A >= 27 && gCurrentPinballGame->unk6A < 211)
{
sub_4FB08();
sub_4F95C();
}
if (gCurrentPinballGame->unk6A > 104)
{
sub_50154();
sub_5030C();
}
if (gCurrentPinballGame->unk6A > 72)
sub_4FE6C();
sub_4F2B8();
if (gCurrentPinballGame->unk6A > 110)
sub_4FAC0();
if (gCurrentPinballGame->unk6A > 178)
{
sub_4FBA4();
sub_4FC7C();
sub_4F9F0();
}
if (gCurrentPinballGame->unk6A > 202)
sub_4FD88();
if (gCurrentPinballGame->unk6A >= 8 && gCurrentPinballGame->unk6A < 182)
sub_507D4();
if (gCurrentPinballGame->unk724 && gCurrentPinballGame->unk25 == 0)
gCurrentPinballGame->unk724--;
}
void sub_4F95C(void)
{
s16 var0, var1;
const u8 **src;
const u8 **dest;
var0 = gCurrentPinballGame->unk70E / 10;
var1 = gCurrentPinballGame->unk70E % 10;
if (gCurrentPinballGame->unk6A > 36)
{
src = gUnknown_086B0E9C[var0];
dest = gUnknown_086B0E9C[10];
DmaCopy16(3, src[0], dest[0], 0x20);
DmaCopy16(3, src[1], dest[1], 0x20);
src = gUnknown_086B0E9C[var1];
DmaCopy16(3, src[2], dest[2], 0x20);
DmaCopy16(3, src[3], dest[3], 0x20);
}
}
void sub_4F9F0(void)
{
s16 var0;
const u8 **src;
const u8 **dest;
var0 = gUnknown_086B0E60[gCurrentPinballGame->unk716];
if (gCurrentPinballGame->unk716)
{
gCurrentPinballGame->unk716--;
if (gCurrentPinballGame->unk716 == 3)
{
m4aSongNumStart(SE_UNKNOWN_0x73);
gCurrentPinballGame->unk3C = 500;
sub_11B0(7);
}
}
src = gUnknown_086B108C[gCurrentPinballGame->unk717][var0];
dest = gUnknown_086B108C[gCurrentPinballGame->unk717][2];
DmaCopy16(3, src[0], dest[0], 0x20);
DmaCopy16(3, src[1], dest[1], 0x40);
DmaCopy16(3, src[2], dest[2], 0x60);
DmaCopy16(3, src[3], dest[3], 0x60);
DmaCopy16(3, src[4], dest[4], 0x40);
}
void sub_4FAC0(void)
{
const u8 **src;
const u8 **dest;
src = gUnknown_086B1104[gCurrentPinballGame->unk730];
dest = gUnknown_086B1104[3];
DmaCopy16(3, src[0], dest[0], 0x40);
DmaCopy16(3, src[1], dest[1], 0x40);
}
void sub_4FB08(void)
{
const u8 **src;
const u8 **dest;
src = gUnknown_086B0F4C[(gMain.systemFrameCount % 64) / 16];
dest = gUnknown_086B0F4C[4];
if (gCurrentPinballGame->unk6A < 192)
{
DmaCopy16(3, src[0], dest[0], 0x40);
}
if (gCurrentPinballGame->unk6A < 200)
{
DmaCopy16(3, src[1], dest[1], 0x80);
}
if (gCurrentPinballGame->unk6A < 208)
{
DmaCopy16(3, src[2], dest[2], 0x60);
}
DmaCopy16(3, src[3], dest[3], 0x60);
}
void sub_4FBA4(void)
{
s16 i;
const u8 **src;
const u8 **dest;
if (gCurrentPinballGame->unk720)
{
gCurrentPinballGame->unk71D[gCurrentPinballGame->unk721] = 1 - (gCurrentPinballGame->unk720 % 36) / 18;
gCurrentPinballGame->unk71D[gCurrentPinballGame->unk722] = gCurrentPinballGame->unk71D[gCurrentPinballGame->unk721];
gCurrentPinballGame->unk720--;
}
for (i = 0; i < 3; i++)
{
src = gUnknown_086B1124[i][gCurrentPinballGame->unk71D[i]];
dest = gUnknown_086B1124[i][6];
DmaCopy16(3, src[0], dest[0], 0x40);
DmaCopy16(3, src[1], dest[1], 0x40);
}
}
void sub_4FC7C(void)
{
s16 i;