sub_495A0
Some checks are pending
CI / build (push) Waiting to run

This commit is contained in:
Marcus Huderle 2025-07-18 19:46:27 -05:00
parent 35527350bb
commit 8bf9ead07d
6 changed files with 73 additions and 259 deletions

View File

@ -36153,253 +36153,3 @@ _08049590: .4byte gOamBuffer
_08049594: .4byte 0xFFFFFE00
_08049598: .4byte 0x000001FF
_0804959C: .4byte gMain+0x748 @gMain.spriteGroups[6]
thumb_func_start sub_495A0
sub_495A0: @ 0x080495A0
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
ldr r4, _080495DC @ =0xFFFFFDFC
add sp, r4
ldr r2, _080495E0 @ =gCurrentPinballGame
ldr r0, [r2]
ldr r1, _080495E4 @ =0x00001104
adds r0, r0, r1
movs r3, #0
movs r1, #1
strb r1, [r0]
ldr r1, [r2]
ldr r2, _080495E8 @ =0x0000131C
adds r0, r1, r2
str r3, [r0]
ldr r2, _080495EC @ =gMPlayInfo_BGM
ldr r0, [r2, #4]
cmp r0, #0
blt _080495F4
ldr r5, _080495F0 @ =0x00000F4C
adds r1, r1, r5
ldr r0, [r2]
str r0, [r1]
adds r0, r2, #0
bl m4aMPlayStop
b _080495FA
.align 2, 0
_080495DC: .4byte 0xFFFFFDFC
_080495E0: .4byte gCurrentPinballGame
_080495E4: .4byte 0x00001104
_080495E8: .4byte 0x0000131C
_080495EC: .4byte gMPlayInfo_BGM
_080495F0: .4byte 0x00000F4C
_080495F4:
ldr r2, _08049628 @ =0x00000F4C
adds r0, r1, r2
str r3, [r0]
_080495FA:
bl m4aMPlayAllStop
movs r0, SE_UNKNOWN_0xA5
bl m4aSongNumStart
ldr r2, _0804962C @ =gMain
ldrb r0, [r2, #4]
cmp r0, #1
bhi _0804963C
ldr r0, _08049630 @ =gCurrentPinballGame
ldr r0, [r0]
adds r1, r0, #0
adds r1, #0x68
ldrh r1, [r1]
adds r0, #0x6a
strh r1, [r0]
ldrb r0, [r2, #4]
cmp r0, #0
bne _08049634
bl sub_4E814
b _0804963C
.align 2, 0
_08049628: .4byte 0x00000F4C
_0804962C: .4byte gMain
_08049630: .4byte gCurrentPinballGame
_08049634:
cmp r0, #1
bne _0804963C
bl sub_4F814
_0804963C:
ldr r4, _08049708 @ =gCurrentPinballGame
ldr r2, [r4]
ldr r3, _0804970C @ =gMain
ldrh r1, [r3, #0x38]
ldr r5, _08049710 @ =0x00001106
adds r0, r2, r5
ldrh r5, [r0]
strh r1, [r0]
ldrh r1, [r3, #0x3a]
ldr r5, _08049714 @ =0x00001108
adds r0, r2, r5
ldrh r5, [r0]
strh r1, [r0]
ldrh r1, [r3, #0x3c]
ldr r5, _08049718 @ =0x0000110A
adds r0, r2, r5
ldrh r5, [r0]
strh r1, [r0]
ldrh r1, [r3, #0x2c]
ldr r5, _0804971C @ =0x0000110C
adds r0, r2, r5
strh r1, [r0]
ldrh r1, [r3, #0x26]
adds r5, #2
adds r0, r2, r5
strh r1, [r0]
ldr r1, _08049720 @ =0x040000D4
ldr r0, _08049724 @ =0x05000200
str r0, [r1]
ldr r0, _08049728 @ =0x0000111A
adds r2, r2, r0
str r2, [r1, #4]
ldr r0, _0804972C @ =0x80000100
str r0, [r1, #8]
ldr r0, [r1, #8]
movs r1, #0
add r6, sp, #0x200
movs r2, #0x9c
lsls r2, r2, #1
add r2, sp
mov sl, r2
_0804968E:
movs r5, #0
lsls r1, r1, #0x10
mov sb, r1
mov r0, sb
asrs r0, r0, #0x10
mov r8, r0
_0804969A:
lsls r7, r5, #0x10
mov r1, r8
cmp r1, #9
bne _080496A8
asrs r0, r7, #0x10
cmp r0, #0xc
beq _08049730
_080496A8:
ldr r2, _08049708 @ =gCurrentPinballGame
ldr r4, [r2]
asrs r5, r7, #0xf
mov r1, r8
lsls r0, r1, #5
adds r5, r5, r0
ldr r2, _08049728 @ =0x0000111A
adds r4, r4, r2
adds r4, r4, r5
ldrh r1, [r4]
movs r0, #0x1f
ands r0, r1
lsls r0, r0, #1
movs r1, #5
bl __divsi3
strb r0, [r6]
ldrh r0, [r4]
movs r2, #0xf8
lsls r2, r2, #2
adds r1, r2, #0
ands r0, r1
lsrs r0, r0, #4
movs r1, #5
bl __divsi3
strb r0, [r6, #1]
ldrh r0, [r4]
movs r2, #0xf8
lsls r2, r2, #7
adds r1, r2, #0
ands r0, r1
lsrs r0, r0, #9
movs r1, #5
bl __divsi3
strb r0, [r6, #2]
mov r0, sp
adds r2, r0, r5
ldrb r1, [r6]
ldrb r0, [r6, #1]
lsls r0, r0, #5
orrs r1, r0
ldrb r0, [r6, #2]
lsls r0, r0, #0xa
orrs r1, r0
strh r1, [r2]
b _08049736
.align 2, 0
_08049708: .4byte gCurrentPinballGame
_0804970C: .4byte gMain
_08049710: .4byte 0x00001106
_08049714: .4byte 0x00001108
_08049718: .4byte 0x0000110A
_0804971C: .4byte 0x0000110C
_08049720: .4byte 0x040000D4
_08049724: .4byte 0x05000200
_08049728: .4byte 0x0000111A
_0804972C: .4byte 0x80000100
_08049730:
ldr r0, _08049770 @ =0x00007FFF
mov r1, sl
strh r0, [r1]
_08049736:
movs r2, #0x80
lsls r2, r2, #9
adds r0, r7, r2
lsrs r5, r0, #0x10
asrs r0, r0, #0x10
cmp r0, #0xf
ble _0804969A
adds r0, r2, #0
add r0, sb
lsrs r1, r0, #0x10
asrs r0, r0, #0x10
cmp r0, #0xf
ble _0804968E
ldr r1, _08049774 @ =0x040000D4
mov r5, sp
str r5, [r1]
ldr r0, _08049778 @ =0x05000200
str r0, [r1, #4]
ldr r0, _0804977C @ =0x80000100
str r0, [r1, #8]
ldr r0, [r1, #8]
ldr r0, _08049780 @ =gMain
ldrb r3, [r0, #4]
cmp r3, #1
bhi _08049784
bl sub_1D4D0
b _080497A0
.align 2, 0
_08049770: .4byte 0x00007FFF
_08049774: .4byte 0x040000D4
_08049778: .4byte 0x05000200
_0804977C: .4byte 0x80000100
_08049780: .4byte gMain
_08049784:
cmp r3, #2
bne _0804978E
bl sub_356A0
b _080497A0
_0804978E:
cmp r3, #4
bne _08049798
bl sub_3ADA0
b _080497A0
_08049798:
cmp r3, #5
bne _080497A0
bl sub_3E5D0
_080497A0:
movs r0, #1
bl sub_11F0
movs r3, #0x81
lsls r3, r3, #2
add sp, r3
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0

View File

@ -595,12 +595,14 @@ extern void sub_356A0();
//extern ? sub_395D8();
//extern ? sub_39A40();
//extern ? sub_3A150();
extern void sub_3ADA0(void);
//extern ? sub_3AE14();
//extern ? sub_3B120();
//extern ? sub_3B49C();
//extern ? sub_3B7C4();
//extern ? sub_3C6E0();
//extern ? sub_3CBC4();
extern void sub_3E5D0(void);
//extern ? sub_3E644();
//extern ? sub_3E79C();
//extern ? sub_3EB2C();
@ -653,7 +655,7 @@ extern void sub_49ED4(void);
//extern ? sub_4E2F8();
//extern ? sub_4E468();
extern void sub_4E598(void);
//extern ? sub_4E814();
extern void sub_4E814(void);
//extern ? sub_4E920();
extern void sub_4E9F0(s8);
//extern ? sub_4EA44();

View File

@ -509,9 +509,9 @@ struct PinballGame
/*0x1103*/u8 unk1103;
/*0x1104*/s8 unk1104;
/*0x1105*/u8 filler1105[0x1];
/*0x1106*/u16 unk1106;
/*0x1108*/u16 unk1108;
/*0x110A*/u16 unk110A;
/*0x1106*/volatile u16 unk1106;
/*0x1108*/volatile u16 unk1108;
/*0x110A*/volatile u16 unk110A;
/*0x110C*/u16 unk110C;
/*0x110E*/u16 unk110E;
/*0x1110*/volatile u16 unk1110;
@ -519,7 +519,7 @@ struct PinballGame
/*0x1114*/volatile u16 unk1114;
/*0x1116*/u16 unk1116;
/*0x1118*/u16 unk1118;
/*0x111A*/u8 unk111A[OBJ_PLTT_SIZE];
/*0x111A*/u16 unk111A[OBJ_PLTT_SIZE / 0x20][0x10];
/*0x131A*/u8 filler131A[0x2];
/*0x131C*/u32 unk131C;
/*0x1320*/s16 unk1320;

View File

@ -85,9 +85,6 @@ extern const u8 gUnknown_084C0C6C[];
extern u8 *gMonPortraitGroupGfx[];
void sub_1D4D0(void);
void sub_356A0(void);
void sub_3ADA0(void);
void sub_3E5D0(void);
void sub_467F4(void);
void sub_4A6A0(void);
void sub_47110(void);

View File

@ -21,7 +21,6 @@ extern void sub_239A4(void);
extern void sub_23E18(void);
extern void sub_2C538(void);
extern void sub_2C9A4(void);
extern void sub_4E814(void);
void sub_19D04(void)
{

View File

@ -7,6 +7,72 @@ extern const struct Vector16 gUnknown_08137D78[];
extern const u16 gUnknown_08137DA4[];
extern const u8 gUnknown_08510CAC[][0x20];
void sub_495A0(void)
{
s16 i, j;
u16 objPalettes[OBJ_PLTT_SIZE / 0x20][0x10];
u8 rgb[3];
gCurrentPinballGame->unk1104 = 1;
gCurrentPinballGame->unk131C = 0;
if (gMPlayInfo_BGM.status >= 0)
{
gCurrentPinballGame->unkF4C = gMPlayInfo_BGM.songHeader;
m4aMPlayStop(&gMPlayInfo_BGM);
}
else
{
gCurrentPinballGame->unkF4C = NULL;
}
m4aMPlayAllStop();
m4aSongNumStart(SE_UNKNOWN_0xA5);
if (gMain.selectedField < MAIN_FIELD_COUNT)
{
gCurrentPinballGame->unk6A = gCurrentPinballGame->unk68;
if (gMain.selectedField == FIELD_RUBY)
sub_4E814();
else if (gMain.selectedField == FIELD_SAPPHIRE)
sub_4F814();
}
gCurrentPinballGame->unk1106 = gMain.blendControl;
gCurrentPinballGame->unk1108 = gMain.blendAlpha;
gCurrentPinballGame->unk110A = gMain.blendBrightness;
gCurrentPinballGame->unk110C = gMain.unk2C;
gCurrentPinballGame->unk110E = gMain.vCount;
DmaCopy16(3, (void *)OBJ_PLTT, gCurrentPinballGame->unk111A, OBJ_PLTT_SIZE);
for (i = 0; i < 16; i++)
{
for (j = 0; j < 16; j++)
{
if (i != 9 || j != 12)
{
rgb[0] = (((gCurrentPinballGame->unk111A[i][j] & 0x001F) >> 0) * 2) / 5;
rgb[1] = (((gCurrentPinballGame->unk111A[i][j] & 0x03E0) >> 5) * 2) / 5;
rgb[2] = (((gCurrentPinballGame->unk111A[i][j] & 0x7C00) >> 10) * 2) / 5;
objPalettes[i][j] = rgb[0] | (rgb[1] << 5) | (rgb[2] << 10);
}
else
{
objPalettes[i][j] = 0x7FFF;
}
}
}
DmaCopy16(3, objPalettes, (void *)OBJ_PLTT, OBJ_PLTT_SIZE);
if (gMain.selectedField < MAIN_FIELD_COUNT)
sub_1D4D0();
else if (gMain.selectedField == FIELD_DUSCLOPS)
sub_356A0();
else if (gMain.selectedField == FIELD_KYOGRE)
sub_3ADA0();
else if (gMain.selectedField == FIELD_GROUDON)
sub_3E5D0();
sub_11F0(1);
}
void sub_497BC(void)
{
gMain.blendControl = gCurrentPinballGame->unk1106;