decombile sub_2C538 and sub_2C9A4 (#164)

* decombile sub_2C538 and sub_2C9A4

* cleanup

---------

Co-authored-by: Marcus Huderle <huderlem@gmail.com>
This commit is contained in:
Wendy Moniuk 2025-08-30 12:06:00 -04:00 committed by GitHub
parent 07bc8eb561
commit c6749bcf18
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 183 additions and 676 deletions

View File

@ -3,680 +3,8 @@
.include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_2C538
sub_2C538: @ 0x0802C538
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
movs r0, #0
mov sb, r0
ldr r1, _0802C568 @ =gCurrentPinballGame
ldr r0, [r1]
movs r2, #0xc0
lsls r2, r2, #2
adds r0, r0, r2
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
adds r7, r1, #0
cmp r0, #5
bls _0802C55C
b _0802C784
_0802C55C:
lsls r0, r0, #2
ldr r1, _0802C56C @ =_0802C570
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0802C568: .4byte gCurrentPinballGame
_0802C56C: .4byte _0802C570
_0802C570: @ jump table
.4byte _0802C588 @ case 0
.4byte _0802C5BC @ case 1
.4byte _0802C614 @ case 2
.4byte _0802C650 @ case 3
.4byte _0802C6C0 @ case 4
.4byte _0802C708 @ case 5
_0802C588:
ldr r5, [r7]
movs r3, #0xc1
lsls r3, r3, #2
adds r6, r5, r3
ldrh r4, [r6]
adds r0, r4, #0
movs r1, #0x24
bl __umodsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
movs r1, #0x12
bl __udivsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov sb, r0
adds r4, #1
movs r0, #0
strh r4, [r6]
ldr r1, _0802C5B8 @ =0x00000301
adds r5, r5, r1
strb r0, [r5]
b _0802C784
.align 2, 0
_0802C5B8: .4byte 0x00000301
_0802C5BC:
ldr r6, [r7]
movs r2, #0xc1
lsls r2, r2, #2
adds r5, r6, r2
ldrh r4, [r5]
adds r0, r4, #0
movs r1, #0x24
bl __umodsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
movs r1, #0x12
bl __udivsi3
adds r0, #2
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov sb, r0
adds r4, #1
strh r4, [r5]
ldr r2, _0802C610 @ =0x00000301
adds r0, r6, r2
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
beq _0802C608
movs r3, #0xc0
lsls r3, r3, #2
adds r1, r6, r3
movs r0, #2
strb r0, [r1]
ldr r0, [r7]
movs r1, #0xc1
lsls r1, r1, #2
adds r0, r0, r1
movs r1, #0
strh r1, [r0]
_0802C608:
ldr r0, [r7]
adds r0, r0, r2
b _0802C780
.align 2, 0
_0802C610: .4byte 0x00000301
_0802C614:
ldr r6, [r7]
movs r2, #0xc1
lsls r2, r2, #2
adds r5, r6, r2
ldrh r4, [r5]
adds r0, r4, #0
movs r1, #9
bl __umodsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
movs r1, #3
bl __udivsi3
adds r0, #4
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov sb, r0
adds r4, #1
strh r4, [r5]
lsls r4, r4, #0x10
lsrs r4, r4, #0x10
cmp r4, #9
beq _0802C646
b _0802C784
_0802C646:
movs r3, #0xc0
lsls r3, r3, #2
adds r1, r6, r3
movs r0, #3
b _0802C6F8
_0802C650:
ldr r6, [r7]
movs r2, #0xc1
lsls r2, r2, #2
mov r8, r2
adds r5, r6, r2
ldrh r4, [r5]
adds r0, r4, #0
movs r1, #0x24
bl __umodsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
movs r1, #0x12
bl __udivsi3
adds r0, #2
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov sb, r0
adds r4, #1
movs r2, #0
strh r4, [r5]
lsls r4, r4, #0x10
lsrs r4, r4, #0x10
cmp r4, #0x41
bls _0802C698
movs r3, #0xc0
lsls r3, r3, #2
adds r1, r6, r3
movs r0, #1
strb r0, [r1]
ldr r0, [r7]
movs r1, #0xc1
lsls r1, r1, #2
adds r0, r0, r1
strh r2, [r0]
_0802C698:
ldr r1, [r7]
mov r3, r8
adds r0, r1, r3
ldrh r0, [r0]
cmp r0, #6
bls _0802C784
ldr r3, _0802C6BC @ =0x00000301
adds r0, r1, r3
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
beq _0802C784
movs r0, #0xc0
lsls r0, r0, #2
adds r1, r1, r0
movs r0, #4
b _0802C772
.align 2, 0
_0802C6BC: .4byte 0x00000301
_0802C6C0:
ldr r6, [r7]
movs r2, #0xc1
lsls r2, r2, #2
adds r5, r6, r2
ldrh r4, [r5]
adds r0, r4, #0
movs r1, #9
bl __umodsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
movs r1, #3
bl __udivsi3
adds r0, #7
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov sb, r0
adds r4, #1
strh r4, [r5]
lsls r4, r4, #0x10
lsrs r4, r4, #0x10
cmp r4, #9
bne _0802C784
movs r3, #0xc0
lsls r3, r3, #2
adds r1, r6, r3
movs r0, #5
_0802C6F8:
strb r0, [r1]
ldr r0, [r7]
movs r1, #0xc1
lsls r1, r1, #2
adds r0, r0, r1
movs r1, #0
strh r1, [r0]
b _0802C784
_0802C708:
ldr r6, [r7]
movs r2, #0xc1
lsls r2, r2, #2
mov r8, r2
adds r5, r6, r2
ldrh r4, [r5]
adds r0, r4, #0
movs r1, #0x24
bl __umodsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
movs r1, #0x12
bl __udivsi3
adds r0, #2
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov sb, r0
adds r4, #1
movs r2, #0
strh r4, [r5]
lsls r4, r4, #0x10
lsrs r4, r4, #0x10
cmp r4, #0x41
bls _0802C750
movs r3, #0xc0
lsls r3, r3, #2
adds r1, r6, r3
movs r0, #1
strb r0, [r1]
ldr r0, [r7]
movs r1, #0xc1
lsls r1, r1, #2
adds r0, r0, r1
strh r2, [r0]
_0802C750:
ldr r1, [r7]
mov r3, r8
adds r0, r1, r3
ldrh r0, [r0]
cmp r0, #6
bls _0802C784
ldr r3, _0802C7B8 @ =0x00000301
adds r0, r1, r3
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
beq _0802C784
movs r0, #0xc0
lsls r0, r0, #2
adds r1, r1, r0
movs r0, #2
_0802C772:
strb r0, [r1]
ldr r0, [r7]
mov r3, r8
adds r1, r0, r3
strh r2, [r1]
ldr r1, _0802C7B8 @ =0x00000301
adds r0, r0, r1
_0802C780:
movs r1, #0
strb r1, [r0]
_0802C784:
ldr r6, _0802C7BC @ =gMain+0x33D8 @gMain.spriteGroups[68]
ldrh r0, [r6]
cmp r0, #0
beq _0802C83C
ldr r1, [r7]
movs r2, #0xc0
lsls r2, r2, #2
adds r0, r1, r2
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #2
bgt _0802C7C4
adds r0, r1, #0
adds r0, #0x58
ldrh r1, [r0]
movs r0, #0xbc
subs r0, r0, r1
strh r0, [r6, #2]
ldr r0, [r7]
adds r0, #0x5a
ldrh r1, [r0]
ldr r3, _0802C7C0 @ =0x00000119
adds r0, r3, #0
b _0802C7DC
.align 2, 0
_0802C7B8: .4byte 0x00000301
_0802C7BC: .4byte gMain+0x33D8 @gMain.spriteGroups[68]
_0802C7C0: .4byte 0x00000119
_0802C7C4:
adds r0, r1, #0
adds r0, #0x58
ldrh r1, [r0]
movs r0, #0xc0
subs r0, r0, r1
strh r0, [r6, #2]
ldr r0, [r7]
adds r0, #0x5a
ldrh r1, [r0]
movs r2, #0x8b
lsls r2, r2, #1
adds r0, r2, #0
_0802C7DC:
subs r0, r0, r1
strh r0, [r6, #4]
ldr r0, [r7]
ldr r3, _0802C95C @ =0x00000302
adds r1, r0, r3
ldrb r2, [r1]
movs r0, #0
ldrsb r0, [r1, r0]
cmp r0, #0
ble _0802C808
subs r0, r2, #1
strb r0, [r1]
ldr r0, [r7]
adds r0, r0, r3
movs r1, #0
ldrsb r1, [r0, r1]
cmp r1, #0
bne _0802C808
ldr r0, _0802C960 @ =gMain
ldr r2, _0802C964 @ =0x000033D8
adds r0, r0, r2
strh r1, [r0]
_0802C808:
adds r5, r6, #0
adds r5, #8
ldr r4, _0802C968 @ =gOamBuffer
ldrh r2, [r6, #8]
lsls r2, r2, #3
adds r2, r2, r4
movs r3, #2
ldrsh r1, [r5, r3]
movs r3, #2
ldrsh r0, [r6, r3]
adds r1, r1, r0
ldr r3, _0802C96C @ =0x000001FF
adds r0, r3, #0
ands r1, r0
ldrh r3, [r2, #2]
ldr r0, _0802C970 @ =0xFFFFFE00
ands r0, r3
orrs r0, r1
strh r0, [r2, #2]
ldrh r1, [r6, #8]
lsls r1, r1, #3
adds r1, r1, r4
ldrb r0, [r6, #4]
ldrb r5, [r5, #4]
adds r0, r0, r5
strb r0, [r1]
_0802C83C:
ldr r2, [r7]
movs r1, #0xc0
lsls r1, r1, #2
adds r0, r2, r1
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #4
beq _0802C852
cmp r0, #2
bne _0802C8C0
_0802C852:
ldr r4, _0802C974 @ =0x0000132C
adds r0, r2, r4
ldr r0, [r0]
movs r3, #0x10
ldrsh r1, [r0, r3]
subs r1, #0xbe
movs r3, #0x12
ldrsh r0, [r0, r3]
ldr r3, _0802C978 @ =0xFFFFFEE3
adds r0, r0, r3
adds r3, r1, #0
muls r3, r1, r3
adds r1, r3, #0
adds r3, r0, #0
muls r3, r0, r3
adds r0, r3, #0
adds r1, r1, r0
cmp r1, #0x8c
bhi _0802C8C0
ldr r1, _0802C95C @ =0x00000302
adds r0, r2, r1
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
bgt _0802C8C0
movs r0, 0xC5 @=SE_UNKNOWN_0xC5
bl m4aSongNumStart
ldr r1, [r7]
ldr r0, _0802C97C @ =0x00002710
str r0, [r1, #0x3c]
adds r1, r1, r4
ldr r2, [r1]
movs r3, #0
ldr r0, _0802C980 @ =0x0000FDA8
strh r0, [r2, #0x30]
ldr r2, [r1]
ldr r0, _0802C984 @ =0x0000FED4
strh r0, [r2, #0x32]
ldr r0, [r1]
strh r3, [r0, #6]
ldr r0, _0802C960 @ =gMain
ldr r2, _0802C964 @ =0x000033D8
adds r0, r0, r2
movs r1, #1
strh r1, [r0]
ldr r0, [r7]
ldr r3, _0802C95C @ =0x00000302
adds r0, r0, r3
movs r1, #6
strb r1, [r0]
movs r0, #8
bl sub_11B0
_0802C8C0:
ldr r6, _0802C988 @ =gMain+0x2CA8 @gMain.spriteGroups[58]
ldrh r0, [r6]
cmp r0, #0
beq _0802C94E
ldr r2, _0802C98C @ =gCurrentPinballGame
ldr r0, [r2]
adds r0, #0x58
ldrh r1, [r0]
movs r0, #0xb8
subs r0, r0, r1
strh r0, [r6, #2]
ldr r0, [r2]
adds r0, #0x5a
ldrh r1, [r0]
ldr r2, _0802C990 @ =0x00000115
adds r0, r2, #0
subs r0, r0, r1
strh r0, [r6, #4]
ldr r2, _0802C994 @ =0x040000D4
mov r3, sb
lsls r1, r3, #0x10
asrs r1, r1, #0x10
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #8
ldr r1, _0802C998 @ =gUnknown_0847DF0C
adds r0, r0, r1
str r0, [r2]
ldr r0, _0802C99C @ =0x06013580
str r0, [r2, #4]
ldr r0, _0802C9A0 @ =0x80000180
str r0, [r2, #8]
ldr r0, [r2, #8]
movs r0, #0
ldr r7, _0802C968 @ =gOamBuffer
ldr r1, _0802C970 @ =0xFFFFFE00
mov r8, r1
_0802C90A:
lsls r4, r0, #0x10
asrs r4, r4, #0x10
lsls r0, r4, #3
adds r0, #8
adds r5, r6, r0
ldrh r3, [r5]
lsls r3, r3, #3
adds r3, r3, r7
movs r2, #2
ldrsh r1, [r5, r2]
movs r2, #2
ldrsh r0, [r6, r2]
adds r1, r1, r0
ldr r2, _0802C96C @ =0x000001FF
adds r0, r2, #0
ands r1, r0
ldrh r2, [r3, #2]
mov r0, r8
ands r0, r2
orrs r0, r1
strh r0, [r3, #2]
ldrh r1, [r5]
lsls r1, r1, #3
adds r1, r1, r7
ldrb r0, [r6, #4]
ldrb r5, [r5, #4]
adds r0, r0, r5
strb r0, [r1]
adds r4, #1
lsls r4, r4, #0x10
lsrs r0, r4, #0x10
asrs r4, r4, #0x10
cmp r4, #2
ble _0802C90A
_0802C94E:
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0802C95C: .4byte 0x00000302
_0802C960: .4byte gMain
_0802C964: .4byte 0x000033D8
_0802C968: .4byte gOamBuffer
_0802C96C: .4byte 0x000001FF
_0802C970: .4byte 0xFFFFFE00
_0802C974: .4byte 0x0000132C
_0802C978: .4byte 0xFFFFFEE3
_0802C97C: .4byte 0x00002710
_0802C980: .4byte 0x0000FDA8
_0802C984: .4byte 0x0000FED4
_0802C988: .4byte gMain+0x2CA8 @gMain.spriteGroups[58]
_0802C98C: .4byte gCurrentPinballGame
_0802C990: .4byte 0x00000115
_0802C994: .4byte 0x040000D4
_0802C998: .4byte gUnknown_0847DF0C
_0802C99C: .4byte 0x06013580
_0802C9A0: .4byte 0x80000180
thumb_func_start sub_2C9A4
sub_2C9A4: @ 0x0802C9A4
push {r4, r5, r6, lr}
ldr r6, _0802C9E0 @ =gMain+0x3268 @gMain.spriteGroups[66]
ldrh r0, [r6]
cmp r0, #0
beq _0802CA7A
ldr r0, _0802C9E4 @ =gCurrentPinballGame
ldr r2, [r0]
ldr r3, _0802C9E8 @ =0x0000029F
adds r1, r2, r3
ldrb r1, [r1]
lsls r1, r1, #0x18
asrs r1, r1, #0x18
adds r3, r0, #0
cmp r1, #0
beq _0802C9EC
movs r1, #0xa4
lsls r1, r1, #2
adds r0, r2, r1
ldr r1, [r0]
movs r0, #0x1f
ands r1, r0
lsrs r1, r1, #3
adds r0, r2, #0
adds r0, #0x5a
ldrh r0, [r0]
subs r0, #0x34
subs r1, r1, r0
strh r1, [r6, #4]
b _0802C9F0
.align 2, 0
_0802C9E0: .4byte gMain+0x3268 @gMain.spriteGroups[66]
_0802C9E4: .4byte gCurrentPinballGame
_0802C9E8: .4byte 0x0000029F
_0802C9EC:
movs r0, #0xb4
strh r0, [r6, #4]
_0802C9F0:
ldr r2, [r3]
adds r0, r2, #0
adds r0, #0x58
ldrh r1, [r0]
movs r0, #0x78
subs r0, r0, r1
strh r0, [r6, #2]
ldr r3, _0802CA20 @ =0x0000029F
adds r0, r2, r3
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #1
bne _0802CA24
movs r1, #0xa4
lsls r1, r1, #2
adds r0, r2, r1
ldr r0, [r0]
movs r1, #0x1f
ands r0, r1
lsrs r0, r0, #3
adds r0, #4
b _0802CA32
.align 2, 0
_0802CA20: .4byte 0x0000029F
_0802CA24:
movs r3, #0xa4
lsls r3, r3, #2
adds r0, r2, r3
ldr r0, [r0]
movs r1, #0x1f
ands r0, r1
lsrs r0, r0, #3
_0802CA32:
ldr r2, _0802CA80 @ =0x040000D4
lsls r0, r0, #7
ldr r1, _0802CA84 @ =gUnknown_084FEF0C
adds r0, r0, r1
str r0, [r2]
ldr r0, _0802CA88 @ =0x06014B00
str r0, [r2, #4]
ldr r0, _0802CA8C @ =0x80000040
str r0, [r2, #8]
ldr r0, [r2, #8]
adds r5, r6, #0
adds r5, #8
ldr r4, _0802CA90 @ =gOamBuffer
ldrh r2, [r6, #8]
lsls r2, r2, #3
adds r2, r2, r4
movs r0, #2
ldrsh r1, [r5, r0]
movs r3, #2
ldrsh r0, [r6, r3]
adds r1, r1, r0
ldr r3, _0802CA94 @ =0x000001FF
adds r0, r3, #0
ands r1, r0
ldrh r3, [r2, #2]
ldr r0, _0802CA98 @ =0xFFFFFE00
ands r0, r3
orrs r0, r1
strh r0, [r2, #2]
ldrh r1, [r6, #8]
lsls r1, r1, #3
adds r1, r1, r4
ldrb r0, [r6, #4]
ldrb r5, [r5, #4]
adds r0, r0, r5
strb r0, [r1]
_0802CA7A:
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_0802CA80: .4byte 0x040000D4
_0802CA84: .4byte gUnknown_084FEF0C
_0802CA88: .4byte 0x06014B00
_0802CA8C: .4byte 0x80000040
_0802CA90: .4byte gOamBuffer
_0802CA94: .4byte 0x000001FF
_0802CA98: .4byte 0xFFFFFE00
thumb_func_start sub_2CA9C
sub_2CA9C: @ 0x0802CA9C
push {r4, r5, r6, r7, lr}

Binary file not shown.

Binary file not shown.

View File

@ -359,7 +359,7 @@ struct PinballGame
/*0x29A*/ u16 unk29A;
/*0x29C*/ u16 unk29C;
/*0x29E*/ u8 unk29E;
/*0x29F*/ u8 unk29F;
/*0x29F*/ s8 unk29F;
/*0x2A0*/ u16 unk2A0;
/*0x2A2*/ u8 unk2A2;
/*0x2A3*/ u8 filler2A3[0x1];
@ -413,8 +413,10 @@ struct PinballGame
/*0x2F8*/ s8 unk2F8;
/*0x2F9*/ u8 filler2F9[0x7];
/*0x300*/ s8 unk300;
/*0x301*/ u8 unk301;
/*0x302*/ u8 filler302[0x4];
/*0x301*/ s8 unk301;
/*0x302*/ s8 unk302;
/*0x303*/ s8 unk303;
/*0x304*/ u16 unk304;
/*0x306*/ s8 unk306;
/*0x307*/ s8 unk307;
/*0x308*/ u16 unk308;

View File

@ -60,7 +60,8 @@ SECTIONS
asm/rom_203CC.o(.text);
src/rom_27E08.o(.text);
src/rom_27F94.o(.text);
asm/rom_2C538.o(.text);
src/rom_2C538.o(.text);
asm/rom_2CA9C.o(.text);
src/rom_2E67C.o(.text);
src/rom_30480.o(.text);
src/rom_31BE8.o(.text);

176
src/rom_2C538.c Normal file
View File

@ -0,0 +1,176 @@
#include "global.h"
#include "m4a.h"
#include "main.h"
#include "constants/bg_music.h"
extern const u8 gUnknown_0847DF0C[][0x300];
extern const u8 gUnknown_084FEF0C[][0x80];
void sub_2C538(void)
{
s16 i;
struct OamDataSimple *oamSimple;
struct SpriteGroup *group;
int x, y;
int squaredMagnitude;
s16 index;
index = 0;
switch (gCurrentPinballGame->unk300)
{
case 0:
index = (gCurrentPinballGame->unk304 % 36) / 18;
gCurrentPinballGame->unk304++;
gCurrentPinballGame->unk301 = 0;
break;
case 1:
index = (gCurrentPinballGame->unk304 % 36) / 18 + 2;
gCurrentPinballGame->unk304++;
if (gCurrentPinballGame->unk301)
{
gCurrentPinballGame->unk300 = 2;
gCurrentPinballGame->unk304 = 0;
}
gCurrentPinballGame->unk301 = 0;
break;
case 2:
index = (gCurrentPinballGame->unk304 % 9) / 3 + 4;
gCurrentPinballGame->unk304++;
if (gCurrentPinballGame->unk304 == 9)
{
gCurrentPinballGame->unk300 = 3;
gCurrentPinballGame->unk304 = 0;
}
break;
case 3:
index = (gCurrentPinballGame->unk304 % 36) / 18 + 2;
gCurrentPinballGame->unk304++;
if (gCurrentPinballGame->unk304 > 65)
{
gCurrentPinballGame->unk300 = 1;
gCurrentPinballGame->unk304 = 0;
}
if (gCurrentPinballGame->unk304 > 6 && gCurrentPinballGame->unk301)
{
gCurrentPinballGame->unk300 = 4;
gCurrentPinballGame->unk304 = 0;
gCurrentPinballGame->unk301 = 0;
}
break;
case 4:
index = (gCurrentPinballGame->unk304 % 9) / 3 + 7;
gCurrentPinballGame->unk304++;
if (gCurrentPinballGame->unk304 == 9)
{
gCurrentPinballGame->unk300 = 5;
gCurrentPinballGame->unk304 = 0;
}
break;
case 5:
index = (gCurrentPinballGame->unk304 % 36) / 18 + 2;
gCurrentPinballGame->unk304++;
if (gCurrentPinballGame->unk304 > 65)
{
gCurrentPinballGame->unk300 = 1;
gCurrentPinballGame->unk304 = 0;
}
if (gCurrentPinballGame->unk304 > 6 && gCurrentPinballGame->unk301)
{
gCurrentPinballGame->unk300 = 2;
gCurrentPinballGame->unk304 = 0;
gCurrentPinballGame->unk301 = 0;
}
break;
}
group = &gMain.spriteGroups[68];
if (group->available)
{
if (gCurrentPinballGame->unk300 < 3)
{
group->baseX = 188 - gCurrentPinballGame->unk58;
group->baseY = 281 - gCurrentPinballGame->unk5A;
}
else
{
group->baseX = 192 - gCurrentPinballGame->unk58;
group->baseY = 278 - gCurrentPinballGame->unk5A;
}
if (gCurrentPinballGame->unk302 > 0)
{
gCurrentPinballGame->unk302--;
if (gCurrentPinballGame->unk302 == 0)
gMain.spriteGroups[68].available = 0;
}
oamSimple = &group->oam[0];
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
}
if (gCurrentPinballGame->unk300 == 4 || gCurrentPinballGame->unk300 == 2)
{
x = gCurrentPinballGame->ball->positionQ0.x - 190;
y = gCurrentPinballGame->ball->positionQ0.y - 285;
squaredMagnitude = (x * x) + (y * y);
if(squaredMagnitude >= 0 && squaredMagnitude <= 140)
{
if (gCurrentPinballGame->unk302 <= 0)
{
m4aSongNumStart(SE_UNKNOWN_0xC5);
gCurrentPinballGame->unk3C = 10000;
gCurrentPinballGame->ball->velocity.x = -600;
gCurrentPinballGame->ball->velocity.y = -300;
gCurrentPinballGame->ball->unk6 = 0;
gMain.spriteGroups[68].available = 1;
gCurrentPinballGame->unk302 = 6;
sub_11B0(8);
}
}
}
group = &gMain.spriteGroups[58];
if (group->available)
{
group->baseX = 184 - gCurrentPinballGame->unk58;
group->baseY = 277 - gCurrentPinballGame->unk5A;
DmaCopy16(3, gUnknown_0847DF0C[index], (void*) 0x06013580, 0x300);
for (i = 0; i < 3;i++)
{
oamSimple = &group->oam[i];
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
}
}
}
void sub_2C9A4(void)
{
struct OamDataSimple *oamSimple;
struct SpriteGroup *group;
s16 index;
group = &gMain.spriteGroups[66];
if (group->available)
{
if (gCurrentPinballGame->unk29F)
group->baseY = (gCurrentPinballGame->unk290 % 32) / 8 - (gCurrentPinballGame->unk5A - 52);
else
group->baseY = 180;
group->baseX = 120 - gCurrentPinballGame->unk58;
if (gCurrentPinballGame->unk29F == 1)
index = (gCurrentPinballGame->unk290 % 32) / 8 + 4;
else
index = (gCurrentPinballGame->unk290 % 32) / 8;
DmaCopy16(3, gUnknown_084FEF0C[index], (void *) 0x06014B00, 0x80);
oamSimple = &group->oam[0];
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
}
}