sub_3EB2C

This commit is contained in:
Marcus Huderle 2025-08-03 08:18:41 -05:00
parent 05ecf34d9b
commit 0989eeb17f
5 changed files with 127 additions and 338 deletions

View File

@ -15387,333 +15387,3 @@ _0803EB1C: .4byte 0x80000430
_0803EB20: .4byte gUnknown_081B36A4
_0803EB24: .4byte 0x05000320
_0803EB28: .4byte 0x80000010
thumb_func_start sub_3EB2C
sub_3EB2C: @ 0x0803EB2C
push {r4, r5, lr}
ldr r0, _0803EB48 @ =gCurrentPinballGame
ldr r0, [r0]
ldrb r0, [r0, #0x13]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #6
bls _0803EB3E
b _0803ED6C
_0803EB3E:
lsls r0, r0, #2
ldr r1, _0803EB4C @ =_0803EB50
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0803EB48: .4byte gCurrentPinballGame
_0803EB4C: .4byte _0803EB50
_0803EB50: @ jump table
.4byte _0803EB6C @ case 0
.4byte _0803ED6C @ case 1
.4byte _0803EBA4 @ case 2
.4byte _0803EC0C @ case 3
.4byte _0803EC8C @ case 4
.4byte _0803ECE8 @ case 5
.4byte _0803ED54 @ case 6
_0803EB6C:
ldr r3, _0803EB98 @ =gCurrentPinballGame
ldr r0, [r3]
ldr r1, _0803EB9C @ =0x000005F7
adds r0, r0, r1
movs r4, #0
movs r1, #1
strb r1, [r0]
ldr r1, [r3]
ldr r2, _0803EBA0 @ =0x00000506
adds r0, r1, r2
movs r2, #0
ldrsb r2, [r0, r2]
cmp r2, #1
beq _0803EB8A
b _0803ED6C
_0803EB8A:
adds r0, r1, #0
adds r0, #0xe6
strh r4, [r0]
strb r2, [r1, #0x13]
ldr r0, [r3]
strh r4, [r0, #0x18]
b _0803ED6C
.align 2, 0
_0803EB98: .4byte gCurrentPinballGame
_0803EB9C: .4byte 0x000005F7
_0803EBA0: .4byte 0x00000506
_0803EBA4:
ldr r2, _0803EBF0 @ =gCurrentPinballGame
ldr r1, [r2]
movs r3, #0
movs r0, #3
strb r0, [r1, #0x13]
ldr r2, [r2]
strh r3, [r2, #0x18]
ldr r3, _0803EBF4 @ =gMain
movs r4, #0xe9
lsls r4, r4, #3
adds r0, r3, r4
movs r4, #1
movs r1, #1
strh r1, [r0]
movs r5, #0xd2
lsls r5, r5, #3
adds r0, r3, r5
strh r1, [r0]
ldr r1, _0803EBF8 @ =0x040000D4
ldr r0, _0803EBFC @ =gUnknown_081408B4
str r0, [r1]
ldr r0, _0803EC00 @ =0x06015800
str r0, [r1, #4]
ldr r0, _0803EC04 @ =0x80001000
str r0, [r1, #8]
ldr r0, [r1, #8]
movs r0, #0xe5
lsls r0, r0, #2
adds r1, r2, r0
movs r0, #0x88
strh r0, [r1]
movs r0, #0x80
strb r0, [r3, #0xf]
ldr r1, _0803EC08 @ =0x000005FA
adds r2, r2, r1
strb r4, [r2]
b _0803ED6C
.align 2, 0
_0803EBF0: .4byte gCurrentPinballGame
_0803EBF4: .4byte gMain
_0803EBF8: .4byte 0x040000D4
_0803EBFC: .4byte gUnknown_081408B4
_0803EC00: .4byte 0x06015800
_0803EC04: .4byte 0x80001000
_0803EC08: .4byte 0x000005FA
_0803EC0C:
bl sub_351A8
ldr r4, _0803EC54 @ =gCurrentPinballGame
ldr r1, [r4]
ldrb r0, [r1, #0x1c]
cmp r0, #0
beq _0803EC1E
movs r0, #0xb5
strh r0, [r1, #0x18]
_0803EC1E:
ldr r1, [r4]
ldrh r0, [r1, #0x18]
cmp r0, #0xb4
bne _0803EC34
movs r0, #1
strb r0, [r1, #0x1c]
ldr r1, [r4]
ldr r0, _0803EC58 @ =0x00061A80
str r0, [r1, #0x38]
ldr r0, _0803EC5C @ =0x05F5E0FF
str r0, [r1, #0x3c]
_0803EC34:
ldr r1, [r4]
ldrh r0, [r1, #0x18]
cmp r0, #0xef
bhi _0803EC60
cmp r0, #0x14
bne _0803EC4A
bl m4aMPlayAllStop
movs r0, MUS_SUCCESS3
bl m4aSongNumStart
_0803EC4A:
ldr r1, [r4]
ldrh r0, [r1, #0x18]
adds r0, #1
strh r0, [r1, #0x18]
b _0803EC74
.align 2, 0
_0803EC54: .4byte gCurrentPinballGame
_0803EC58: .4byte 0x00061A80
_0803EC5C: .4byte 0x05F5E0FF
_0803EC60:
movs r0, #0
strh r0, [r1, #0x18]
movs r0, #6
strb r0, [r1, #0x13]
ldr r1, [r4]
ldr r2, _0803EC80 @ =0x00000283
adds r1, r1, r2
ldrb r0, [r1]
adds r0, #1
strb r0, [r1]
_0803EC74:
ldr r0, _0803EC84 @ =gCurrentPinballGame
ldr r0, [r0]
ldr r4, _0803EC88 @ =0x000005FA
adds r0, r0, r4
movs r1, #1
b _0803ED6A
.align 2, 0
_0803EC80: .4byte 0x00000283
_0803EC84: .4byte gCurrentPinballGame
_0803EC88: .4byte 0x000005FA
_0803EC8C:
ldr r2, _0803ECD0 @ =gCurrentPinballGame
ldr r1, [r2]
movs r0, #5
strb r0, [r1, #0x13]
ldr r2, [r2]
movs r0, #0x8c
strh r0, [r2, #0x18]
ldr r3, _0803ECD4 @ =gMain
movs r5, #0xe9
lsls r5, r5, #3
adds r0, r3, r5
movs r1, #1
strh r1, [r0]
movs r4, #0xd2
lsls r4, r4, #3
adds r0, r3, r4
strh r1, [r0]
ldr r1, _0803ECD8 @ =0x040000D4
ldr r0, _0803ECDC @ =gUnknown_081408B4
str r0, [r1]
ldr r0, _0803ECE0 @ =0x06015800
str r0, [r1, #4]
ldr r0, _0803ECE4 @ =0x80001000
str r0, [r1, #8]
ldr r0, [r1, #8]
movs r5, #0xe5
lsls r5, r5, #2
adds r2, r2, r5
movs r0, #0x88
strh r0, [r2]
movs r0, #0x80
strb r0, [r3, #0xf]
b _0803ED6C
.align 2, 0
_0803ECD0: .4byte gCurrentPinballGame
_0803ECD4: .4byte gMain
_0803ECD8: .4byte 0x040000D4
_0803ECDC: .4byte gUnknown_081408B4
_0803ECE0: .4byte 0x06015800
_0803ECE4: .4byte 0x80001000
_0803ECE8:
bl sub_351A8
ldr r3, _0803ED20 @ =gCurrentPinballGame
ldr r1, [r3]
ldrb r0, [r1, #0x1c]
cmp r0, #0
beq _0803ECFA
movs r0, #0xb5
strh r0, [r1, #0x18]
_0803ECFA:
ldr r1, [r3]
ldrh r0, [r1, #0x18]
cmp r0, #0xb4
bne _0803ED10
movs r0, #1
strb r0, [r1, #0x1c]
ldr r1, [r3]
ldr r0, _0803ED24 @ =0x00061A80
str r0, [r1, #0x38]
ldr r0, _0803ED28 @ =0x05F5E0FF
str r0, [r1, #0x3c]
_0803ED10:
ldr r1, [r3]
ldrh r0, [r1, #0x18]
cmp r0, #0xef
bhi _0803ED2C
adds r0, #1
strh r0, [r1, #0x18]
b _0803ED6C
.align 2, 0
_0803ED20: .4byte gCurrentPinballGame
_0803ED24: .4byte 0x00061A80
_0803ED28: .4byte 0x05F5E0FF
_0803ED2C:
movs r2, #0
movs r0, #0
strh r0, [r1, #0x18]
movs r0, #6
strb r0, [r1, #0x13]
ldr r1, [r3]
ldr r0, _0803ED4C @ =0x00000283
adds r1, r1, r0
ldrb r0, [r1]
adds r0, #1
strb r0, [r1]
ldr r0, [r3]
ldr r1, _0803ED50 @ =0x000001AF
adds r0, r0, r1
strb r2, [r0]
b _0803ED6C
.align 2, 0
_0803ED4C: .4byte 0x00000283
_0803ED50: .4byte 0x000001AF
_0803ED54:
bl sub_351A8
ldr r2, _0803EDDC @ =gCurrentPinballGame
ldr r0, [r2]
ldr r4, _0803EDE0 @ =0x00000386
adds r0, r0, r4
movs r1, #1
strb r1, [r0]
ldr r0, [r2]
ldr r5, _0803EDE4 @ =0x000005FA
adds r0, r0, r5
_0803ED6A:
strb r1, [r0]
_0803ED6C:
bl sub_423D8
bl sub_40288
bl sub_3EDF0
bl sub_3FAE0
ldr r0, _0803EDDC @ =gCurrentPinballGame
ldr r1, [r0]
movs r2, #0xa5
lsls r2, r2, #2
adds r0, r1, r2
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
beq _0803EDB4
ldr r4, _0803EDE8 @ =0x00000296
adds r0, r1, r4
ldrh r0, [r0]
cmp r0, #1
bhi _0803EDB4
ldr r4, _0803EDEC @ =gMain
ldrb r0, [r4, #0xf]
cmp r0, #0
bne _0803EDB4
bl m4aMPlayAllStop
movs r0, MUS_END_OF_BALL3
bl m4aSongNumStart
ldrb r1, [r4, #0xf]
movs r0, #0x40
orrs r0, r1
strb r0, [r4, #0xf]
_0803EDB4:
ldr r0, _0803EDDC @ =gCurrentPinballGame
ldr r1, [r0]
ldr r5, _0803EDE0 @ =0x00000386
adds r0, r1, r5
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
beq _0803EDD2
ldr r0, _0803EDE4 @ =0x000005FA
adds r1, r1, r0
movs r0, #1
strb r0, [r1]
bl sub_350F0
_0803EDD2:
bl sub_472E4
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
_0803EDDC: .4byte gCurrentPinballGame
_0803EDE0: .4byte 0x00000386
_0803EDE4: .4byte 0x000005FA
_0803EDE8: .4byte 0x00000296
_0803EDEC: .4byte gMain

Binary file not shown.

View File

@ -607,12 +607,12 @@ extern void sub_3E5D0(void);
//extern ? sub_3E644();
//extern ? sub_3E79C();
//extern ? sub_3EB2C();
//extern ? sub_3EDF0();
//extern ? sub_3FAE0();
//extern ? sub_40288();
extern void sub_3EDF0(void);
extern void sub_3FAE0(void);
extern void sub_40288(void);
extern void sub_41580(void);
extern void sub_417F8(void);
//extern ? sub_423D8();
extern void sub_423D8(void);
//extern ? sub_42E48();
//extern ? sub_43228();
extern void sub_43500(void);

View File

@ -230,7 +230,9 @@ struct PinballGame
/*0x195*/ u8 filler195[0x10];
/*0x1A5*/ s8 unk1A5;
/*0x1A6*/ s8 unk1A6;
/*0x1A7*/ u8 filler1A7[0xD];
/*0x1A7*/ u8 filler1A7[0x8];
/*0x1AF*/ s8 unk1AF;
/*0x1B0*/ u8 filler1B0[0x4];
/*0x1B4*/ u16 unk1B4;
/*0x1B6*/ u8 filler1B6[0x4];
/*0x1BA*/ u16 unk1BA;
@ -340,9 +342,9 @@ struct PinballGame
/*0x345*/ s8 unk345;
/*0x346*/ s8 unk346;
/*0x347*/ u8 filler347[0x23];
/*0x36A*/ u8 unk36A[0x2];
/*0x36C*/ u8 unk36C[0x2];
/*0x36E*/ u16 unk36E[0x2];
/*0x36A*/ u8 unk36A[2];
/*0x36C*/ u8 unk36C[2];
/*0x36E*/ u16 unk36E[2];
/*0x372*/ u8 filler372[0x11];
/*0x383*/ s8 unk383;
/*0x384*/ s8 unk384;

View File

@ -117,6 +117,7 @@ extern const u8 gUnknown_084A6EEC[][0x280];
extern const u8 gUnknown_084AA9EC[][0x800];
extern const u8 gUnknown_084A856C[];
extern const u8 gUnknown_084AA18C[];
extern const u8 gUnknown_081408B4[];
struct Unk_086AFAC0
{
@ -140,6 +141,122 @@ extern u8 gUnknown_0200FBB0[];
extern u8 gUnknown_020030A0[];
void sub_3EB2C(void)
{
switch (gCurrentPinballGame->unk13)
{
case 0:
gCurrentPinballGame->unk5F7 = 1;
if (gCurrentPinballGame->unk506 == 1)
{
gCurrentPinballGame->unkE6 = 0;
gCurrentPinballGame->unk13 = 1;
gCurrentPinballGame->unk18 = 0;
}
break;
case 1:
break;
case 2:
gCurrentPinballGame->unk13 = 3;
gCurrentPinballGame->unk18 = 0;
gMain.spriteGroups[6].available = 1;
gMain.spriteGroups[5].available = 1;
DmaCopy16(3, gUnknown_081408B4, (void *)0x06015800, 0x2000);
gCurrentPinballGame->unk394 = 136;
gMain.unkF = 0x80;
gCurrentPinballGame->unk5FA = 1;
break;
case 3:
sub_351A8();
if (gCurrentPinballGame->unk1C)
gCurrentPinballGame->unk18 = 181;
if (gCurrentPinballGame->unk18 == 180)
{
gCurrentPinballGame->unk1C = 1;
gCurrentPinballGame->unk38 = 400000;
gCurrentPinballGame->unk3C = 99999999;
}
if (gCurrentPinballGame->unk18 < 240)
{
if (gCurrentPinballGame->unk18 == 20)
{
m4aMPlayAllStop();
m4aSongNumStart(MUS_SUCCESS3);
}
gCurrentPinballGame->unk18++;
}
else
{
gCurrentPinballGame->unk18 = 0;
gCurrentPinballGame->unk13 = 6;
gCurrentPinballGame->numCompletedBonusStages++;
}
gCurrentPinballGame->unk5FA = 1;
break;
case 4:
gCurrentPinballGame->unk13 = 5;
gCurrentPinballGame->unk18 = 140;
gMain.spriteGroups[6].available = 1;
gMain.spriteGroups[5].available = 1;
DmaCopy16(3, gUnknown_081408B4, (void *)0x06015800, 0x2000);
gCurrentPinballGame->unk394 = 136;
gMain.unkF = 0x80;
break;
case 5:
sub_351A8();
if (gCurrentPinballGame->unk1C)
gCurrentPinballGame->unk18 = 181;
if (gCurrentPinballGame->unk18 == 180)
{
gCurrentPinballGame->unk1C = 1;
gCurrentPinballGame->unk38 = 400000;
gCurrentPinballGame->unk3C = 99999999;
}
if (gCurrentPinballGame->unk18 < 240)
{
gCurrentPinballGame->unk18++;
}
else
{
gCurrentPinballGame->unk18 = 0;
gCurrentPinballGame->unk13 = 6;
gCurrentPinballGame->numCompletedBonusStages++;
gCurrentPinballGame->unk1AF = 0;
}
break;
case 6:
sub_351A8();
gCurrentPinballGame->unk386 = 1;
gCurrentPinballGame->unk5FA = 1;
break;
}
sub_423D8();
sub_40288();
sub_3EDF0();
sub_3FAE0();
if (gCurrentPinballGame->unk294 && gCurrentPinballGame->eventTimer < 2 && gMain.unkF == 0)
{
m4aMPlayAllStop();
m4aSongNumStart(MUS_END_OF_BALL3);
gMain.unkF |= 0x40;
}
if (gCurrentPinballGame->unk386)
{
gCurrentPinballGame->unk5FA = 1;
sub_350F0();
}
sub_472E4();
}
void sub_3EDF0(void)
{
if (gCurrentPinballGame->unk452)