sub_29D9C

This commit is contained in:
Marcus Huderle 2025-08-19 16:48:41 -05:00
parent 8ff9d45eda
commit 96294dd02d
4 changed files with 119 additions and 348 deletions

View File

@ -6,351 +6,6 @@
.text
thumb_func_start sub_29D9C
sub_29D9C: @ 0x08029D9C
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
ldr r3, _08029E60 @ =gMain
ldr r0, [r3, #0x44]
ldr r0, [r0, #0x5c]
movs r2, #0
movs r5, #0
movs r1, #1
strh r1, [r0]
ldr r0, [r3, #0x44]
ldr r0, [r0, #0x50]
strh r1, [r0]
ldr r0, [r3, #0x44]
ldr r0, [r0, #0x54]
strh r1, [r0]
ldrh r0, [r3, #0x38]
ldr r0, _08029E64 @ =0x00001C10
strh r0, [r3, #0x38]
ldrh r0, [r3, #0x3a]
movs r0, #0x80
lsls r0, r0, #5
strh r0, [r3, #0x3a]
ldr r4, _08029E68 @ =gCurrentPinballGame
ldr r0, [r4]
movs r1, #0xdd
lsls r1, r1, #3
adds r0, r0, r1
strb r2, [r0]
ldr r1, [r4]
ldr r0, _08029E6C @ =0x000006F2
adds r2, r1, r0
movs r0, #8
strh r0, [r2]
ldr r2, _08029E70 @ =0x000006F4
adds r0, r1, r2
strh r5, [r0]
subs r2, #0x14
adds r0, r1, r2
strh r5, [r0]
ldr r0, _08029E74 @ =0x000006E9
adds r1, r1, r0
movs r0, #0
ldrsb r0, [r1, r0]
mov r8, r3
adds r7, r4, #0
cmp r0, #0x19
bne _08029E02
movs r0, #0xa
strb r0, [r1]
_08029E02:
movs r3, #0
ldr r1, _08029E78 @ =gUnknown_086AD180
mov sb, r1
_08029E08:
ldr r5, [r7]
lsls r3, r3, #0x10
asrs r2, r3, #0xf
movs r1, #0xdf
lsls r1, r1, #3
adds r0, r5, r1
adds r4, r0, r2
subs r1, #0xf
adds r0, r5, r1
movs r1, #0
ldrsb r1, [r0, r1]
lsls r0, r1, #3
subs r0, r0, r1
lsls r0, r0, #1
adds r2, r2, r0
add r2, sb
ldrh r0, [r2]
strh r0, [r4]
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
adds r6, r3, #0
cmp r0, #0x29
beq _08029E38
b _08029F2E
_08029E38:
mov r2, r8
ldrb r0, [r2, #4]
cmp r0, #0
bne _08029EBC
ldr r1, _08029E7C @ =0x00000283
adds r0, r5, r1
ldrb r0, [r0]
movs r1, #5
bl __umodsi3
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #4
bls _08029E56
b _08029F9E
_08029E56:
lsls r0, r0, #2
ldr r1, _08029E80 @ =_08029E84
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08029E60: .4byte gMain
_08029E64: .4byte 0x00001C10
_08029E68: .4byte gCurrentPinballGame
_08029E6C: .4byte 0x000006F2
_08029E70: .4byte 0x000006F4
_08029E74: .4byte 0x000006E9
_08029E78: .4byte gUnknown_086AD180
_08029E7C: .4byte 0x00000283
_08029E80: .4byte _08029E84
_08029E84: @ jump table
.4byte _08029E98 @ case 0
.4byte _08029EAA @ case 1
.4byte _08029E98 @ case 2
.4byte _08029EAA @ case 3
.4byte _08029F1C @ case 4
_08029E98:
ldr r0, [r7]
asrs r1, r6, #0xf
movs r2, #0xdf
lsls r2, r2, #3
adds r0, r0, r2
adds r0, r0, r1
movs r1, #0x2a
strh r1, [r0]
b _08029F9E
_08029EAA:
ldr r0, [r7]
asrs r1, r6, #0xf
movs r2, #0xdf
lsls r2, r2, #3
adds r0, r0, r2
adds r0, r0, r1
movs r1, #0x2c
strh r1, [r0]
b _08029F9E
_08029EBC:
ldr r1, _08029EDC @ =0x00000283
adds r0, r5, r1
ldrb r0, [r0]
movs r1, #5
bl __umodsi3
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #4
bhi _08029F9E
lsls r0, r0, #2
ldr r1, _08029EE0 @ =_08029EE4
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08029EDC: .4byte 0x00000283
_08029EE0: .4byte _08029EE4
_08029EE4: @ jump table
.4byte _08029EF8 @ case 0
.4byte _08029F0A @ case 1
.4byte _08029EF8 @ case 2
.4byte _08029F0A @ case 3
.4byte _08029F1C @ case 4
_08029EF8:
ldr r0, [r7]
asrs r1, r6, #0xf
movs r2, #0xdf
lsls r2, r2, #3
adds r0, r0, r2
adds r0, r0, r1
movs r1, #0x29
strh r1, [r0]
b _08029F9E
_08029F0A:
ldr r0, [r7]
asrs r1, r6, #0xf
movs r2, #0xdf
lsls r2, r2, #3
adds r0, r0, r2
adds r0, r0, r1
movs r1, #0x2b
strh r1, [r0]
b _08029F9E
_08029F1C:
ldr r0, [r7]
asrs r1, r6, #0xf
movs r2, #0xdf
lsls r2, r2, #3
adds r0, r0, r2
adds r0, r0, r1
movs r1, #0x2d
strh r1, [r0]
b _08029F9E
_08029F2E:
cmp r0, #0xa
bne _08029F4C
ldr r0, _08029F44 @ =0x000005F6
adds r1, r5, r0
movs r0, #0
ldrsb r0, [r1, r0]
cmp r0, #2
bgt _08029F48
adds r0, #0xa
b _08029F9C
.align 2, 0
_08029F44: .4byte 0x000005F6
_08029F48:
movs r0, #0xc
b _08029F9C
_08029F4C:
cmp r0, #3
bne _08029F88
movs r1, #0xf1
lsls r1, r1, #1
adds r0, r5, r1
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #2
bne _08029F9E
mov r2, r8
ldr r0, [r2, #0x4c]
movs r1, #1
ands r0, r1
cmp r0, #0
beq _08029F84
ldr r0, _08029F7C @ =0x000005F6
adds r1, r5, r0
movs r0, #0
ldrsb r0, [r1, r0]
cmp r0, #2
bgt _08029F80
adds r0, #0xa
b _08029F9C
.align 2, 0
_08029F7C: .4byte 0x000005F6
_08029F80:
movs r0, #0xc
b _08029F9C
_08029F84:
strh r1, [r4]
b _08029F9E
_08029F88:
cmp r0, #9
bne _08029F9E
ldr r1, _0802A040 @ =0x00000281
adds r0, r5, r1
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
bgt _08029F9E
movs r0, #8
_08029F9C:
strh r0, [r4]
_08029F9E:
movs r2, #0x80
lsls r2, r2, #9
adds r0, r6, r2
lsrs r3, r0, #0x10
asrs r0, r0, #0x10
cmp r0, #5
bgt _08029FAE
b _08029E08
_08029FAE:
ldr r2, [r7]
ldr r0, _0802A044 @ =0x00000704
adds r1, r2, r0
movs r0, #0x15
strh r0, [r1]
ldr r1, _0802A048 @ =0x000006E9
adds r2, r2, r1
ldrb r1, [r2]
movs r0, #0
ldrsb r0, [r2, r0]
cmp r0, #0x18
bgt _08029FCA
adds r0, r1, #1
strb r0, [r2]
_08029FCA:
ldr r0, [r7]
ldr r3, _0802A04C @ =0x000006EA
adds r0, r0, r3
movs r1, #5
strb r1, [r0]
ldr r2, [r7]
adds r0, r2, #0
adds r0, #0x72
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
movs r1, #0xf0
ands r0, r1
cmp r0, #0
bne _08029FFE
adds r0, r2, #0
adds r0, #0x35
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0xb
ble _08029FFE
adds r1, r2, r3
ldrb r0, [r1]
adds r0, #1
strb r0, [r1]
_08029FFE:
ldr r0, [r7]
ldr r2, _0802A050 @ =0x000006EB
adds r0, r0, r2
movs r1, #1
strb r1, [r0]
ldr r0, [r7]
adds r2, #0xd
adds r1, r0, r2
ldrh r1, [r1]
subs r2, #0xc
adds r0, r0, r2
strb r1, [r0]
ldr r0, [r7]
adds r2, #0xe
adds r1, r0, r2
ldrh r1, [r1]
subs r2, #0xd
adds r0, r0, r2
strb r1, [r0]
movs r0, #2
movs r1, #0
bl sub_1C7F4
movs r0, #2
movs r1, #1
bl sub_1C7F4
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0802A040: .4byte 0x00000281
_0802A044: .4byte 0x00000704
_0802A048: .4byte 0x000006E9
_0802A04C: .4byte 0x000006EA
_0802A050: .4byte 0x000006EB
thumb_func_start sub_2A054
sub_2A054: @ 0x0802A054
push {r4, r5, r6, r7, lr}

Binary file not shown.

View File

@ -640,11 +640,24 @@ struct PinballGame
/*0x6D9*/ u8 filler6D9[0x2];
/*0x6DB*/ u8 unk6DB;
/*0x6DC*/ u8 unk6DC;
/*0x6DD*/ u8 filler6DD[0x7];
/*0x6DD*/ u8 filler6DD[0x3];
/*0x6DD*/ u16 unk6E0;
/*0x6E2*/ u8 filler6E2[0x2];
/*0x6E4*/ struct Vector16 unk6E4;
/*0x6E8*/ u8 filler6E8[0x6];
/*0x6E8*/ u8 unk6E8;
/*0x6E9*/ s8 unk6E9;
/*0x6EA*/ s8 unk6EA;
/*0x6EB*/ s8 unk6EB;
/*0x6EC*/ s8 unk6EC;
/*0x6ED*/ s8 unk6ED;
/*0x6EE*/ u16 unk6EE;
/*0x6F0*/ u8 filler6F0[0x1C];
/*0x6F0*/ u8 filler6F0[0x2];
/*0x6F2*/ u16 unk6F2;
/*0x6F4*/ u16 unk6F4;
/*0x6F6*/ u8 filler6F6[0x2];
/*0x6F8*/ u16 unk6F8[6];
/*0x704*/ u16 unk704;
/*0x706*/ u8 filler706[0x6];
/*0x70C*/ u16 unk70C;
/*0x70E*/ s8 unk70E;
/*0x70F*/ s8 unk70F;

View File

@ -28,6 +28,7 @@ extern const s16 gUnknown_086AE234[][16];
extern const u16 gUnknown_086B4E3E[][3];
extern const s16 gUnknown_086AE30C[];
extern const s16 gUnknown_086AE318[];
extern u16 gUnknown_086AD180[][7];
extern struct SongHeader gUnknown_0869F58C;
@ -1002,3 +1003,105 @@ void sub_29A6C(void)
gMain.unk44[12]->available = 0;
}
}
void sub_29D9C(void)
{
s16 i;
gMain.unk44[23]->available = 1;
gMain.unk44[20]->available = 1;
gMain.unk44[21]->available = 1;
gMain.blendControl = 0x1C10;
gMain.blendAlpha = BLDALPHA_BLEND(0, 16);
gCurrentPinballGame->unk6E8 = 0;
gCurrentPinballGame->unk6F2 = 8;
gCurrentPinballGame->unk6F4 = 0;
gCurrentPinballGame->unk6E0 = 0;
if (gCurrentPinballGame->unk6E9 == 25)
gCurrentPinballGame->unk6E9 = 10;
for (i = 0; i < 6; i++)
{
gCurrentPinballGame->unk6F8[i] = gUnknown_086AD180[gCurrentPinballGame->unk6E9][i];
if (gCurrentPinballGame->unk6F8[i] == 41)
{
if (gMain.selectedField == FIELD_RUBY)
{
switch (gCurrentPinballGame->numCompletedBonusStages % 5)
{
case 0:
case 2:
gCurrentPinballGame->unk6F8[i] = 42;
break;
case 1:
case 3:
gCurrentPinballGame->unk6F8[i] = 44;
break;
case 4:
gCurrentPinballGame->unk6F8[i] = 45;
break;
}
}
else
{
switch (gCurrentPinballGame->numCompletedBonusStages % 5)
{
case 0:
case 2:
gCurrentPinballGame->unk6F8[i] = 41;
break;
case 1:
case 3:
gCurrentPinballGame->unk6F8[i] = 43;
break;
case 4:
gCurrentPinballGame->unk6F8[i] = 45;
break;
}
}
}
else if (gCurrentPinballGame->unk6F8[i] == 10)
{
if (gCurrentPinballGame->unk5F6 < 3)
gCurrentPinballGame->unk6F8[i] = gCurrentPinballGame->unk5F6 + 10;
else
gCurrentPinballGame->unk6F8[i] = 12;
}
else if (gCurrentPinballGame->unk6F8[i] == 3)
{
if (gCurrentPinballGame->outLanePikaPosition == 2)
{
if (gMain.systemFrameCount & 1)
{
if (gCurrentPinballGame->unk5F6 < 3)
gCurrentPinballGame->unk6F8[i] = gCurrentPinballGame->unk5F6 + 10;
else
gCurrentPinballGame->unk6F8[i] = 12;
}
else
{
gCurrentPinballGame->unk6F8[i] = 1;
}
}
}
else if (gCurrentPinballGame->unk6F8[i] == 9)
{
if (gCurrentPinballGame->evolvablePartySize <= 0)
gCurrentPinballGame->unk6F8[i] = 8;
}
}
gCurrentPinballGame->unk704 = 21;
if (gCurrentPinballGame->unk6E9 < 25)
gCurrentPinballGame->unk6E9++;
gCurrentPinballGame->unk6EA = 5;
if ((gCurrentPinballGame->unk72 & 0xF0) == 0 && gCurrentPinballGame->area > AREA_WILDERNESS)
gCurrentPinballGame->unk6EA++;
gCurrentPinballGame->unk6EB = 1;
gCurrentPinballGame->unk6EC = gCurrentPinballGame->unk6F8[0];
gCurrentPinballGame->unk6ED = gCurrentPinballGame->unk6F8[1];
sub_1C7F4(2, 0);
sub_1C7F4(2, 1);
}