diff --git a/asm/rom_3219C.s b/asm/rom_3219C.s index 45be09b..7ac5d52 100644 --- a/asm/rom_3219C.s +++ b/asm/rom_3219C.s @@ -18227,2331 +18227,3 @@ _08040278: .4byte 0x000021E0 _0804027C: .4byte 0x00002070 _08040280: .4byte 0x00002350 _08040284: .4byte 0x00001210 - - thumb_func_start sub_40288 -sub_40288: @ 0x08040288 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x44 - movs r0, #0 - str r0, [sp, #8] - movs r1, #0 - str r1, [sp, #4] - movs r7, #0 - movs r2, #0 - str r2, [sp] - ldr r3, _080402CC @ =gMain+0xA28 @gMain.spriteGroups[10] - str r3, [sp, #0x10] - ldrh r0, [r3] - cmp r0, #0 - bne _080402AE - b _08040444 -_080402AE: - ldr r0, _080402D0 @ =gCurrentPinballGame - ldr r1, [r0] - ldr r4, _080402D4 @ =0x000006C4 - adds r1, r1, r4 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - cmp r1, #3 - bne _080402D8 - movs r0, #0xf0 - strh r0, [r3, #2] - movs r0, #0xb4 - strh r0, [r3, #4] - b _080402E2 - .align 2, 0 -_080402CC: .4byte gMain+0xA28 @gMain.spriteGroups[10] -_080402D0: .4byte gCurrentPinballGame -_080402D4: .4byte 0x000006C4 -_080402D8: - movs r0, #0x60 - ldr r5, [sp, #0x10] - strh r0, [r5, #2] - movs r0, #0x37 - strh r0, [r5, #4] -_080402E2: - ldr r0, _08040468 @ =gCurrentPinballGame - ldr r1, [r0] - ldr r3, [sp, #0x10] - ldrh r2, [r3, #2] - ldr r4, _0804046C @ =0x000006E4 - adds r0, r1, r4 - strh r2, [r0] - ldrh r0, [r3, #4] - ldr r5, _08040470 @ =0x000006E6 - adds r1, r1, r5 - strh r0, [r1] - movs r1, #4 - ldrsh r0, [r3, r1] - cmp r0, #0xc7 - ble _08040304 - movs r0, #0xc8 - strh r0, [r3, #4] -_08040304: - movs r2, #0 - ldr r3, _08040474 @ =gMain+0x970 @gMain.spriteGroups[9] - mov ip, r3 - ldr r5, _08040478 @ =gOamBuffer - movs r4, #3 - mov sb, r4 - movs r0, #0xd - rsbs r0, r0, #0 - mov sl, r0 - ldr r1, _0804047C @ =0xFFFFFE00 - mov r8, r1 -_0804031A: - lsls r4, r2, #0x10 - asrs r4, r4, #0x10 - lsls r0, r4, #3 - adds r0, #8 - ldr r2, [sp, #0x10] - adds r6, r2, r0 - ldrh r2, [r6] - lsls r2, r2, #3 - adds r2, r2, r5 - ldrb r1, [r2, #5] - movs r0, #0xf - ands r0, r1 - movs r1, #0xd0 - orrs r0, r1 - strb r0, [r2, #5] - ldrh r3, [r6] - lsls r3, r3, #3 - adds r3, r3, r5 - ldr r1, _08040468 @ =gCurrentPinballGame - ldr r0, [r1] - ldr r2, _08040480 @ =0x000006DB - adds r0, r0, r2 - ldrb r1, [r0] - mov r0, sb - ands r1, r0 - lsls r1, r1, #2 - ldrb r2, [r3, #5] - mov r0, sl - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #5] - ldrh r3, [r6] - lsls r3, r3, #3 - adds r3, r3, r5 - movs r2, #2 - ldrsh r1, [r6, r2] - str r1, [sp, #0x3c] - ldr r1, [sp, #0x10] - movs r2, #2 - ldrsh r0, [r1, r2] - ldr r2, [sp, #0x3c] - adds r1, r2, r0 - ldr r2, _08040484 @ =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, [r6] - lsls r1, r1, #3 - adds r1, r1, r5 - ldr r3, [sp, #0x10] - ldrb r0, [r3, #4] - ldrb r6, [r6, #4] - adds r0, r0, r6 - strb r0, [r1] - adds r4, #1 - lsls r4, r4, #0x10 - lsrs r2, r4, #0x10 - asrs r4, r4, #0x10 - cmp r4, #5 - ble _0804031A - mov r4, ip - str r4, [sp, #0x10] - ldr r5, _08040468 @ =gCurrentPinballGame - ldr r0, [r5] - ldr r1, _0804046C @ =0x000006E4 - adds r0, r0, r1 - ldrh r0, [r0] - subs r0, #8 - strh r0, [r4, #2] - ldr r0, [r5] - ldr r2, _08040470 @ =0x000006E6 - adds r0, r0, r2 - ldrh r0, [r0] - subs r0, #8 - strh r0, [r4, #4] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0xc7 - ble _080403C4 - movs r0, #0xc8 - strh r0, [r4, #4] -_080403C4: - movs r2, #0 - ldr r5, _08040478 @ =gOamBuffer - movs r3, #3 - mov sb, r3 - movs r4, #0xd - rsbs r4, r4, #0 - mov sl, r4 - ldr r0, _0804047C @ =0xFFFFFE00 - mov r8, r0 -_080403D6: - lsls r4, r2, #0x10 - asrs r4, r4, #0x10 - lsls r0, r4, #3 - adds r0, #8 - ldr r1, [sp, #0x10] - adds r6, r1, r0 - ldrh r3, [r6] - lsls r3, r3, #3 - adds r3, r3, r5 - ldr r2, _08040468 @ =gCurrentPinballGame - ldr r0, [r2] - ldr r1, _08040480 @ =0x000006DB - adds r0, r0, r1 - ldrb r1, [r0] - mov r2, sb - ands r1, r2 - lsls r1, r1, #2 - ldrb r2, [r3, #5] - mov r0, sl - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #5] - ldrh r3, [r6] - lsls r3, r3, #3 - adds r3, r3, r5 - movs r1, #2 - ldrsh r0, [r6, r1] - mov ip, r0 - ldr r2, [sp, #0x10] - movs r1, #2 - ldrsh r0, [r2, r1] - mov r2, ip - adds r1, r2, r0 - ldr r2, _08040484 @ =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, [r6] - lsls r1, r1, #3 - adds r1, r1, r5 - ldr r3, [sp, #0x10] - ldrb r0, [r3, #4] - ldrb r6, [r6, #4] - adds r0, r0, r6 - strb r0, [r1] - adds r4, #1 - lsls r4, r4, #0x10 - lsrs r2, r4, #0x10 - asrs r4, r4, #0x10 - cmp r4, #5 - ble _080403D6 -_08040444: - bl sub_41580 - ldr r0, _08040468 @ =gCurrentPinballGame - ldr r0, [r0] - ldr r4, _08040488 @ =0x00000507 - adds r0, r0, r4 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #4 - bls _0804045C - b _08040802 -_0804045C: - lsls r0, r0, #2 - ldr r1, _0804048C @ =_08040490 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08040468: .4byte gCurrentPinballGame -_0804046C: .4byte 0x000006E4 -_08040470: .4byte 0x000006E6 -_08040474: .4byte gMain+0x970 @gMain.spriteGroups[9] -_08040478: .4byte gOamBuffer -_0804047C: .4byte 0xFFFFFE00 -_08040480: .4byte 0x000006DB -_08040484: .4byte 0x000001FF -_08040488: .4byte 0x00000507 -_0804048C: .4byte _08040490 -_08040490: @ jump table - .4byte _080404A4 @ case 0 - .4byte _080404C4 @ case 1 - .4byte _080405E8 @ case 2 - .4byte _080406C0 @ case 3 - .4byte _080407EC @ case 4 -_080404A4: - ldr r0, _080404C0 @ =gCurrentPinballGame - ldr r0, [r0] - movs r5, #0xa2 - lsls r5, r5, #3 - adds r0, r0, r5 - movs r1, #0 - strh r1, [r0] - movs r7, #7 - movs r0, #0xc - str r0, [sp, #4] - movs r1, #5 - str r1, [sp, #8] - b _08040802 - .align 2, 0 -_080404C0: .4byte gCurrentPinballGame -_080404C4: - ldr r5, _08040548 @ =gCurrentPinballGame - ldr r0, [r5] - movs r4, #0xa2 - lsls r4, r4, #3 - adds r0, r0, r4 - ldrh r0, [r0] - cmp r0, #0 - bne _080404DC - movs r0, #0x94 - lsls r0, r0, #1 - bl m4aSongNumStart -_080404DC: - ldr r0, [r5] - adds r0, r0, r4 - ldrh r0, [r0] - cmp r0, #8 - bne _080404EE - movs r0, #0x94 - lsls r0, r0, #1 - bl m4aSongNumStop -_080404EE: - ldr r0, [r5] - adds r0, r0, r4 - ldrh r0, [r0] - cmp r0, #0x18 - bne _08040500 - movs r0, #0x94 - lsls r0, r0, #1 - bl m4aSongNumStart -_08040500: - ldr r0, [r5] - adds r0, r0, r4 - ldrh r0, [r0] - cmp r0, #0x24 - bne _08040512 - movs r0, #0x94 - lsls r0, r0, #1 - bl m4aSongNumStop -_08040512: - ldr r0, [r5] - adds r0, r0, r4 - ldrh r0, [r0] - cmp r0, #0x32 - bne _08040524 - movs r0, #0x94 - lsls r0, r0, #1 - bl m4aSongNumStart -_08040524: - ldr r0, [r5] - adds r0, r0, r4 - ldrh r0, [r0] - cmp r0, #0x38 - bne _08040536 - movs r0, #0x94 - lsls r0, r0, #1 - bl m4aSongNumStop -_08040536: - ldr r0, [r5] - adds r0, r0, r4 - ldrh r1, [r0] - cmp r1, #0xd - bhi _0804054C - adds r0, r1, #0 - lsrs r7, r0, #1 - b _0804056E - .align 2, 0 -_08040548: .4byte gCurrentPinballGame -_0804054C: - cmp r1, #0x29 - bls _0804055E - cmp r1, #0x37 - bhi _0804055A - ldrh r0, [r0] - subs r0, #0x2a - b _08040566 -_0804055A: - cmp r1, #0x3c - bhi _08040562 -_0804055E: - movs r7, #7 - b _0804056E -_08040562: - ldrh r0, [r0] - subs r0, #0x3d -_08040566: - lsrs r1, r0, #0x1f - adds r0, r0, r1 - lsls r0, r0, #0xf - lsrs r7, r0, #0x10 -_0804056E: - ldr r0, _08040588 @ =gCurrentPinballGame - ldr r0, [r0] - movs r2, #0xa2 - lsls r2, r2, #3 - adds r0, r0, r2 - ldrh r1, [r0] - cmp r1, #7 - bhi _0804058C - adds r0, r1, #0 - lsrs r0, r0, #1 - str r0, [sp, #4] - b _080405B2 - .align 2, 0 -_08040588: .4byte gCurrentPinballGame -_0804058C: - cmp r1, #0x2f - bhi _08040596 - movs r3, #0xc - str r3, [sp, #4] - b _080405B2 -_08040596: - cmp r1, #0x3f - bhi _080405AE - ldrh r0, [r0] - subs r0, #0x30 - lsrs r1, r0, #0x1f - adds r0, r0, r1 - asrs r0, r0, #1 - adds r0, #4 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - str r0, [sp, #4] - b _080405B2 -_080405AE: - movs r4, #0xc - str r4, [sp, #4] -_080405B2: - movs r5, #5 - str r5, [sp, #8] - ldr r0, _080405E0 @ =gCurrentPinballGame - ldr r1, [r0] - movs r0, #0xa2 - lsls r0, r0, #3 - adds r2, r1, r0 - ldrh r0, [r2] - adds r0, #1 - strh r0, [r2] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0x4b - beq _080405D0 - b _08040802 -_080405D0: - movs r0, #0 - strh r0, [r2] - ldr r2, _080405E4 @ =0x00000507 - adds r1, r1, r2 - movs r0, #2 - strb r0, [r1] - b _08040802 - .align 2, 0 -_080405E0: .4byte gCurrentPinballGame -_080405E4: .4byte 0x00000507 -_080405E8: - movs r7, #7 - movs r3, #0xc - str r3, [sp, #4] - movs r4, #5 - str r4, [sp, #8] - ldr r5, _0804065C @ =gCurrentPinballGame - ldr r3, [r5] - movs r0, #0xa2 - lsls r0, r0, #3 - adds r1, r3, r0 - ldrh r0, [r1] - cmp r0, #0x21 - bhi _080406A4 - adds r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0x1c - beq _08040610 - b _08040802 -_08040610: - movs r1, #0xe2 - lsls r1, r1, #2 - adds r0, r3, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _08040670 - bl Random - ldr r4, [r5] - movs r1, #0xa0 - bl __umodsi3 - movs r1, #0xc8 - subs r1, r1, r0 - ldr r2, _08040660 @ =0x0000051C - adds r4, r4, r2 - strh r1, [r4] - bl Random - ldr r5, [r5] - ldr r3, _08040664 @ =0x0000132C - adds r1, r5, r3 - ldr r1, [r1] - ldr r2, _08040668 @ =0xFFFFFEA5 - adds r4, r2, #0 - ldrh r1, [r1, #0x12] - adds r4, r4, r1 - movs r1, #0x50 - bl __umodsi3 - subs r4, r4, r0 - ldr r3, _0804066C @ =0x0000051E - adds r5, r5, r3 - strh r4, [r5] - b _08040802 - .align 2, 0 -_0804065C: .4byte gCurrentPinballGame -_08040660: .4byte 0x0000051C -_08040664: .4byte 0x0000132C -_08040668: .4byte 0xFFFFFEA5 -_0804066C: .4byte 0x0000051E -_08040670: - ldr r4, _08040694 @ =0x0000132C - adds r2, r3, r4 - ldr r0, [r2] - ldrh r0, [r0, #0x10] - subs r0, #0xd - ldr r5, _08040698 @ =0x0000051C - adds r1, r3, r5 - strh r0, [r1] - ldr r1, [r2] - ldr r2, _0804069C @ =0xFFFFFEA5 - adds r0, r2, #0 - ldrh r1, [r1, #0x12] - adds r0, r0, r1 - ldr r4, _080406A0 @ =0x0000051E - adds r1, r3, r4 - strh r0, [r1] - b _08040802 - .align 2, 0 -_08040694: .4byte 0x0000132C -_08040698: .4byte 0x0000051C -_0804069C: .4byte 0xFFFFFEA5 -_080406A0: .4byte 0x0000051E -_080406A4: - movs r0, #0 - strh r0, [r1] - ldr r5, _080406B8 @ =0x00000507 - adds r1, r3, r5 - movs r0, #3 - strb r0, [r1] - ldr r0, _080406BC @ =0x00000129 - bl m4aSongNumStart - b _08040802 - .align 2, 0 -_080406B8: .4byte 0x00000507 -_080406BC: .4byte 0x00000129 -_080406C0: - movs r7, #7 - movs r0, #0xc - str r0, [sp, #4] - ldr r4, _080406DC @ =gCurrentPinballGame - ldr r3, [r4] - movs r1, #0xa2 - lsls r1, r1, #3 - adds r0, r3, r1 - ldrh r1, [r0] - cmp r1, #1 - bhi _080406E0 - adds r0, r1, #0 - str r0, [sp, #8] - b _080407D0 - .align 2, 0 -_080406DC: .4byte gCurrentPinballGame -_080406E0: - cmp r1, #9 - bhi _080407C4 - ldrh r0, [r0] - subs r0, #2 - lsrs r1, r0, #0x1f - adds r0, r0, r1 - asrs r0, r0, #1 - adds r0, #2 - lsls r0, r0, #0x10 - movs r2, #0xa1 - lsls r2, r2, #3 - adds r1, r3, r2 - mov r5, sp - ldrh r5, [r5, #4] - strh r5, [r1] - lsrs r1, r0, #0x10 - str r1, [sp, #8] - asrs r0, r0, #0x10 - cmp r0, #2 - bne _080407D0 - ldr r2, _080407A0 @ =0x0000132C - adds r0, r3, r2 - ldr r2, [r0] - movs r5, #0x10 - ldrsh r0, [r2, r5] - subs r0, #0xd - ldr r5, _080407A4 @ =0x0000051C - adds r1, r3, r5 - movs r5, #0 - ldrsh r1, [r1, r5] - subs r1, r0, r1 - str r1, [sp, #0x1c] - movs r1, #0x12 - ldrsh r0, [r2, r1] - ldr r2, _080407A8 @ =0xFFFFFEA5 - adds r0, r0, r2 - ldr r5, _080407AC @ =0x0000051E - adds r1, r3, r5 - movs r2, #0 - ldrsh r1, [r1, r2] - subs r1, r0, r1 - str r1, [sp, #0x20] - ldr r3, [sp, #0x1c] - adds r1, r3, #0 - muls r1, r3, r1 - ldr r5, [sp, #0x20] - adds r0, r5, #0 - muls r0, r5, r0 - adds r5, r1, r0 - movs r0, #8 - bl sub_11B0 - ldr r2, [r4] - ldr r1, _080407B0 @ =0x00000441 - adds r0, r2, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #2 - bgt _080407D0 - ldr r3, _080407B4 @ =0x00000442 - adds r0, r2, r3 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #2 - bgt _080407D0 - movs r4, #0xe2 - lsls r4, r4, #2 - adds r0, r2, r4 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - bne _080407D0 - cmp r5, #0xc7 - bgt _080407D0 - ldr r0, _080407B8 @ =gMain - ldr r5, _080407BC @ =0x00001CD8 - adds r0, r0, r5 - movs r1, #1 - strh r1, [r0] - ldr r0, _080407C0 @ =0x00000486 - adds r1, r2, r0 - movs r0, #0x96 - lsls r0, r0, #2 - strh r0, [r1] - movs r0, #0x95 - lsls r0, r0, #1 - bl m4aSongNumStart - movs r0, #9 - bl sub_11B0 - b _080407D0 - .align 2, 0 -_080407A0: .4byte 0x0000132C -_080407A4: .4byte 0x0000051C -_080407A8: .4byte 0xFFFFFEA5 -_080407AC: .4byte 0x0000051E -_080407B0: .4byte 0x00000441 -_080407B4: .4byte 0x00000442 -_080407B8: .4byte gMain -_080407BC: .4byte 0x00001CD8 -_080407C0: .4byte 0x00000486 -_080407C4: - movs r1, #5 - str r1, [sp, #8] - ldr r2, _080407E4 @ =0x00000507 - adds r1, r3, r2 - movs r0, #4 - strb r0, [r1] -_080407D0: - ldr r0, _080407E8 @ =gCurrentPinballGame - ldr r1, [r0] - movs r3, #0xa2 - lsls r3, r3, #3 - adds r1, r1, r3 - ldrh r0, [r1] - adds r0, #1 - strh r0, [r1] - b _08040802 - .align 2, 0 -_080407E4: .4byte 0x00000507 -_080407E8: .4byte gCurrentPinballGame -_080407EC: - ldr r0, _08040A88 @ =gCurrentPinballGame - ldr r1, [r0] - movs r4, #0xa2 - lsls r4, r4, #3 - adds r2, r1, r4 - movs r3, #0 - movs r0, #0 - strh r0, [r2] - ldr r5, _08040A8C @ =0x00000507 - adds r1, r1, r5 - strb r3, [r1] -_08040802: - ldr r0, _08040A90 @ =gMain+0xF30 @gMain.spriteGroups[17] - str r0, [sp, #0x10] - ldrh r0, [r0] - cmp r0, #0 - beq _080408F0 - ldr r1, _08040A88 @ =gCurrentPinballGame - ldr r4, [r1] - movs r2, #0xfa - lsls r2, r2, #2 - adds r0, r4, r2 - movs r3, #0 - ldrsh r0, [r0, r3] - movs r1, #0xa - bl __divsi3 - adds r4, #0x58 - ldrh r1, [r4] - subs r1, #0x58 - subs r0, r0, r1 - ldr r4, [sp, #0x10] - strh r0, [r4, #2] - ldr r5, _08040A88 @ =gCurrentPinballGame - ldr r4, [r5] - ldr r1, _08040A94 @ =0x000003EA - adds r0, r4, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - movs r1, #0xa - bl __divsi3 - adds r4, #0x5a - ldrh r1, [r4] - subs r0, r0, r1 - adds r0, #0x60 - ldr r3, [sp, #0x10] - strh r0, [r3, #4] - movs r2, #0 - lsls r1, r7, #0x10 - ldr r4, _08040A98 @ =gUnknown_086B609E - mov sl, r4 - ldr r5, _08040A9C @ =gOamBuffer - mov ip, r5 - asrs r1, r1, #0x10 - lsls r0, r1, #3 - adds r0, r0, r1 - lsls r0, r0, #1 - mov r8, r0 - ldr r7, _08040AA0 @ =0xFFFFFE00 - mov sb, r7 -_08040864: - lsls r3, r2, #0x10 - asrs r3, r3, #0x10 - lsls r0, r3, #3 - adds r0, #8 - ldr r1, [sp, #0x10] - adds r6, r1, r0 - ldrh r0, [r6] - lsls r0, r0, #3 - mov r2, ip - adds r5, r0, r2 - lsls r0, r3, #1 - adds r0, r0, r3 - lsls r0, r0, #1 - add r0, sl - mov r4, r8 - adds r1, r4, r0 - ldrh r0, [r1] - strh r0, [r5] - adds r1, #2 - adds r5, #2 - ldrh r0, [r1] - strh r0, [r5] - ldrh r0, [r1, #2] - strh r0, [r5, #2] - ldrh r2, [r6] - lsls r2, r2, #3 - add r2, ip - ldrh r4, [r2, #2] - lsls r1, r4, #0x17 - lsrs r1, r1, #0x17 - ldr r5, [sp, #0x10] - movs r7, #2 - ldrsh r0, [r5, r7] - adds r1, r1, r0 - ldr r5, _08040AA4 @ =0x000001FF - adds r0, r5, #0 - ands r1, r0 - mov r0, sb - ands r0, r4 - orrs r0, r1 - strh r0, [r2, #2] - ldrh r1, [r6] - lsls r1, r1, #3 - add r1, ip - ldr r7, [sp, #0x10] - ldrb r0, [r7, #4] - ldrb r2, [r1] - adds r0, r0, r2 - strb r0, [r1] - adds r3, #1 - lsls r3, r3, #0x10 - lsrs r2, r3, #0x10 - asrs r3, r3, #0x10 - cmp r3, #2 - ble _08040864 - ldr r3, _08040A88 @ =gCurrentPinballGame - ldr r0, [r3] - ldr r4, _08040A8C @ =0x00000507 - adds r0, r0, r4 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #4 - bne _080408F0 - ldr r0, _08040AA8 @ =gMain - movs r5, #0xf3 - lsls r5, r5, #4 - adds r0, r0, r5 - movs r1, #0 - strh r1, [r0] -_080408F0: - ldr r7, _08040AAC @ =gMain+0xFE8 @gMain.spriteGroups[18] - str r7, [sp, #0x10] - adds r1, r7, #0 - ldrh r0, [r1] - cmp r0, #0 - beq _080409DC - ldr r2, _08040A88 @ =gCurrentPinballGame - ldr r4, [r2] - movs r3, #0xfa - lsls r3, r3, #2 - adds r0, r4, r3 - movs r5, #0 - ldrsh r0, [r0, r5] - movs r1, #0xa - bl __divsi3 - adds r4, #0x58 - ldrh r1, [r4] - subs r1, #0x58 - subs r0, r0, r1 - strh r0, [r7, #2] - ldr r0, _08040A88 @ =gCurrentPinballGame - ldr r4, [r0] - ldr r1, _08040A94 @ =0x000003EA - adds r0, r4, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - movs r1, #0xa - bl __divsi3 - adds r4, #0x5a - ldrh r1, [r4] - subs r0, r0, r1 - adds r0, #0x60 - strh r0, [r7, #4] - movs r2, #0 - ldr r3, [sp, #4] - lsls r1, r3, #0x10 - ldr r4, _08040AB0 @ =gUnknown_086B5ECA - mov sl, r4 - ldr r5, _08040A9C @ =gOamBuffer - mov ip, r5 - asrs r1, r1, #0x10 - lsls r0, r1, #3 - adds r0, r0, r1 - lsls r0, r0, #2 - mov r8, r0 - ldr r7, _08040AA0 @ =0xFFFFFE00 - mov sb, r7 -_08040952: - lsls r3, r2, #0x10 - asrs r3, r3, #0x10 - lsls r0, r3, #3 - adds r0, #8 - ldr r1, [sp, #0x10] - adds r6, r1, r0 - ldrh r0, [r6] - lsls r0, r0, #3 - mov r2, ip - adds r5, r0, r2 - lsls r0, r3, #1 - adds r0, r0, r3 - lsls r0, r0, #1 - add r0, sl - mov r4, r8 - adds r1, r4, r0 - ldrh r0, [r1] - strh r0, [r5] - adds r1, #2 - adds r5, #2 - ldrh r0, [r1] - strh r0, [r5] - ldrh r0, [r1, #2] - strh r0, [r5, #2] - ldrh r2, [r6] - lsls r2, r2, #3 - add r2, ip - ldrh r4, [r2, #2] - lsls r1, r4, #0x17 - lsrs r1, r1, #0x17 - ldr r5, [sp, #0x10] - movs r7, #2 - ldrsh r0, [r5, r7] - adds r1, r1, r0 - ldr r5, _08040AA4 @ =0x000001FF - adds r0, r5, #0 - ands r1, r0 - mov r0, sb - ands r0, r4 - orrs r0, r1 - strh r0, [r2, #2] - ldrh r1, [r6] - lsls r1, r1, #3 - add r1, ip - ldr r7, [sp, #0x10] - ldrb r0, [r7, #4] - ldrb r2, [r1] - adds r0, r0, r2 - strb r0, [r1] - adds r3, #1 - lsls r3, r3, #0x10 - lsrs r2, r3, #0x10 - asrs r3, r3, #0x10 - cmp r3, #5 - ble _08040952 - ldr r3, _08040A88 @ =gCurrentPinballGame - ldr r0, [r3] - ldr r4, _08040A8C @ =0x00000507 - adds r0, r0, r4 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #4 - bne _080409DC - ldr r0, _08040AA8 @ =gMain - ldr r5, _08040AB4 @ =0x00000FE8 - adds r0, r0, r5 - movs r1, #0 - strh r1, [r0] -_080409DC: - ldr r7, _08040AB8 @ =gMain+0x10A0 @gMain.spriteGroups[19] - str r7, [sp, #0x10] - adds r1, r7, #0 - ldrh r0, [r1] - cmp r0, #0 - bne _080409EA - b _08040B26 -_080409EA: - ldr r2, _08040A88 @ =gCurrentPinballGame - ldr r1, [r2] - ldr r3, _08040ABC @ =0x0000051C - adds r0, r1, r3 - adds r1, #0x58 - ldrh r0, [r0] - ldrh r1, [r1] - subs r0, r0, r1 - adds r4, r7, #0 - strh r0, [r4, #2] - ldr r1, [r2] - ldr r5, _08040AC0 @ =0x0000051E - adds r0, r1, r5 - adds r1, #0x5a - ldrh r0, [r0] - ldrh r1, [r1] - subs r0, r0, r1 - strh r0, [r4, #4] - movs r2, #0 - ldr r7, _08040A9C @ =gOamBuffer - mov r8, r7 - ldr r0, [sp, #8] - lsls r1, r0, #0x10 - ldr r3, _08040AC4 @ =gUnknown_086B5DCE - mov sl, r3 - mov ip, r8 - asrs r1, r1, #0x10 - movs r0, #0x2a - adds r4, r1, #0 - muls r4, r0, r4 - mov sb, r4 - ldr r4, _08040AA0 @ =0xFFFFFE00 -_08040A2A: - lsls r2, r2, #0x10 - asrs r1, r2, #0x10 - lsls r0, r1, #3 - adds r0, #8 - ldr r5, [sp, #0x10] - adds r6, r5, r0 - ldrh r0, [r6] - lsls r0, r0, #3 - mov r7, ip - adds r5, r0, r7 - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #1 - add r0, sl - mov r3, sb - adds r1, r3, r0 - ldrh r0, [r1] - strh r0, [r5] - adds r1, #2 - adds r5, #2 - ldrh r0, [r1] - strh r0, [r5] - ldrh r0, [r1, #2] - strh r0, [r5, #2] - ldrh r0, [r6] - lsls r0, r0, #3 - adds r5, r0, r7 - movs r1, #0 - ldrsb r1, [r5, r1] - ldr r7, [sp, #0x10] - movs r3, #4 - ldrsh r0, [r7, r3] - adds r1, r1, r0 - ldr r0, _08040AC8 @ =0xFFFFFED4 - str r2, [sp, #0x40] - cmp r1, r0 - bge _08040ACC - ldrh r1, [r5, #2] - adds r0, r4, #0 - ands r0, r1 - strh r0, [r5, #2] - ldrh r0, [r6] - lsls r0, r0, #3 - add r0, r8 - movs r1, #0xb4 - strb r1, [r0] - b _08040AF8 - .align 2, 0 -_08040A88: .4byte gCurrentPinballGame -_08040A8C: .4byte 0x00000507 -_08040A90: .4byte gMain+0xF30 @gMain.spriteGroups[17] -_08040A94: .4byte 0x000003EA -_08040A98: .4byte gUnknown_086B609E -_08040A9C: .4byte gOamBuffer -_08040AA0: .4byte 0xFFFFFE00 -_08040AA4: .4byte 0x000001FF -_08040AA8: .4byte gMain -_08040AAC: .4byte gMain+0xFE8 @gMain.spriteGroups[18] -_08040AB0: .4byte gUnknown_086B5ECA -_08040AB4: .4byte 0x00000FE8 -_08040AB8: .4byte gMain+0x10A0 @gMain.spriteGroups[19] -_08040ABC: .4byte 0x0000051C -_08040AC0: .4byte 0x0000051E -_08040AC4: .4byte gUnknown_086B5DCE -_08040AC8: .4byte 0xFFFFFED4 -_08040ACC: - ldrh r2, [r5, #2] - lsls r1, r2, #0x17 - lsrs r1, r1, #0x17 - ldr r7, [sp, #0x10] - movs r3, #2 - ldrsh r0, [r7, r3] - adds r1, r1, r0 - ldr r7, _08040C70 @ =0x000001FF - adds r0, r7, #0 - ands r1, r0 - adds r0, r4, #0 - ands r0, r2 - orrs r0, r1 - strh r0, [r5, #2] - ldrh r1, [r6] - lsls r1, r1, #3 - add r1, r8 - ldr r2, [sp, #0x10] - ldrb r0, [r2, #4] - ldrb r3, [r1] - adds r0, r0, r3 - strb r0, [r1] -_08040AF8: - ldr r5, [sp, #0x40] - movs r7, #0x80 - lsls r7, r7, #9 - adds r0, r5, r7 - lsrs r2, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #6 - ble _08040A2A - ldr r1, _08040C74 @ =gCurrentPinballGame - ldr r0, [r1] - ldr r2, _08040C78 @ =0x00000507 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #4 - bne _08040B26 - ldr r0, _08040C7C @ =gMain - movs r3, #0x85 - lsls r3, r3, #5 - adds r0, r0, r3 - movs r1, #0 - strh r1, [r0] -_08040B26: - ldr r4, _08040C80 @ =gMain+0x12C8 @gMain.spriteGroups[22] - str r4, [sp, #0x10] - ldrh r0, [r4] - cmp r0, #0 - beq _08040BBC - ldr r5, _08040C74 @ =gCurrentPinballGame - ldr r4, [r5] - ldr r7, _08040C84 @ =0x00000524 - adds r0, r4, r7 - movs r1, #0 - ldrsh r0, [r0, r1] - movs r1, #0xa - bl __divsi3 - adds r4, #0x58 - ldrh r1, [r4] - adds r1, #0x78 - subs r0, r0, r1 - ldr r2, [sp, #0x10] - strh r0, [r2, #2] - ldr r4, [r5] - ldr r3, _08040C88 @ =0x00000526 - adds r0, r4, r3 - movs r5, #0 - ldrsh r0, [r0, r5] - movs r1, #0xa - bl __divsi3 - adds r4, #0x5a - ldrh r1, [r4] - subs r1, #0x80 - subs r0, r0, r1 - ldr r7, [sp, #0x10] - strh r0, [r7, #4] - movs r2, #0 - ldr r5, _08040C8C @ =gOamBuffer - ldr r0, _08040C90 @ =0xFFFFFE00 - mov r8, r0 -_08040B72: - lsls r4, r2, #0x10 - asrs r4, r4, #0x10 - lsls r0, r4, #3 - adds r0, #8 - ldr r1, [sp, #0x10] - adds r6, r1, r0 - ldrh r3, [r6] - lsls r3, r3, #3 - adds r3, r3, r5 - movs r2, #2 - ldrsh r1, [r6, r2] - ldr r7, [sp, #0x10] - movs r2, #2 - ldrsh r0, [r7, r2] - adds r1, r1, r0 - ldr r7, _08040C70 @ =0x000001FF - adds r0, r7, #0 - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, r8 - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r6] - lsls r1, r1, #3 - adds r1, r1, r5 - ldr r2, [sp, #0x10] - ldrb r0, [r2, #4] - ldrb r6, [r6, #4] - adds r0, r0, r6 - strb r0, [r1] - adds r4, #1 - lsls r4, r4, #0x10 - lsrs r2, r4, #0x10 - asrs r4, r4, #0x10 - cmp r4, #0x11 - ble _08040B72 -_08040BBC: - ldr r3, _08040C94 @ =gMain+0x1380 @gMain.spriteGroups[23] - str r3, [sp, #0x10] - ldrh r0, [r3] - cmp r0, #0 - beq _08040C54 - ldr r5, _08040C74 @ =gCurrentPinballGame - ldr r4, [r5] - ldr r7, _08040C84 @ =0x00000524 - adds r0, r4, r7 - movs r1, #0 - ldrsh r0, [r0, r1] - movs r1, #0xa - bl __divsi3 - adds r4, #0x58 - ldr r2, _08040C98 @ =0xFFFFFE98 - adds r1, r2, #0 - ldrh r4, [r4] - adds r1, r1, r4 - subs r0, r0, r1 - ldr r3, [sp, #0x10] - strh r0, [r3, #2] - ldr r4, [r5] - ldr r5, _08040C88 @ =0x00000526 - adds r0, r4, r5 - movs r7, #0 - ldrsh r0, [r0, r7] - movs r1, #0xa - bl __divsi3 - adds r4, #0x5a - ldrh r1, [r4] - subs r1, #0x80 - subs r0, r0, r1 - ldr r1, [sp, #0x10] - strh r0, [r1, #4] - movs r2, #0 - ldr r5, _08040C8C @ =gOamBuffer - ldr r3, _08040C90 @ =0xFFFFFE00 - mov r8, r3 -_08040C0C: - lsls r4, r2, #0x10 - asrs r4, r4, #0x10 - lsls r0, r4, #3 - adds r0, #8 - ldr r7, [sp, #0x10] - adds r6, r7, r0 - ldrh r3, [r6] - lsls r3, r3, #3 - adds r3, r3, r5 - movs r0, #2 - ldrsh r1, [r6, r0] - movs r2, #2 - ldrsh r0, [r7, r2] - adds r1, r1, r0 - ldr r7, _08040C70 @ =0x000001FF - adds r0, r7, #0 - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, r8 - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r6] - lsls r1, r1, #3 - adds r1, r1, r5 - ldr r2, [sp, #0x10] - ldrb r0, [r2, #4] - ldrb r6, [r6, #4] - adds r0, r0, r6 - strb r0, [r1] - adds r4, #1 - lsls r4, r4, #0x10 - lsrs r2, r4, #0x10 - asrs r4, r4, #0x10 - cmp r4, #0x11 - ble _08040C0C -_08040C54: - ldr r0, _08040C74 @ =gCurrentPinballGame - ldr r1, [r0] - movs r3, #0xe3 - lsls r3, r3, #2 - adds r0, r1, r3 - movs r4, #0 - ldrsh r0, [r0, r4] - cmp r0, #0 - ble _08040CA0 - ldr r5, _08040C9C @ =0x0000132C - adds r0, r1, r5 - ldr r1, [r0] - movs r0, #1 - b _08040CA8 - .align 2, 0 -_08040C70: .4byte 0x000001FF -_08040C74: .4byte gCurrentPinballGame -_08040C78: .4byte 0x00000507 -_08040C7C: .4byte gMain -_08040C80: .4byte gMain+0x12C8 @gMain.spriteGroups[22] -_08040C84: .4byte 0x00000524 -_08040C88: .4byte 0x00000526 -_08040C8C: .4byte gOamBuffer -_08040C90: .4byte 0xFFFFFE00 -_08040C94: .4byte gMain+0x1380 @gMain.spriteGroups[23] -_08040C98: .4byte 0xFFFFFE98 -_08040C9C: .4byte 0x0000132C -_08040CA0: - ldr r7, _08040CE4 @ =0x0000132C - adds r0, r1, r7 - ldr r1, [r0] - movs r0, #2 -_08040CA8: - strb r0, [r1, #1] - movs r0, #0 - str r0, [sp, #0xc] -_08040CAE: - ldr r1, [sp, #0xc] - lsls r3, r1, #0x10 - asrs r2, r3, #0x10 - movs r0, #0xb8 - adds r1, r2, #0 - muls r1, r0, r1 - ldr r0, _08040CE8 @ =gMain+0xDC0 @gMain.spriteGroups[15] - adds r1, r1, r0 - str r1, [sp, #0x10] - ldr r1, _08040CEC @ =gCurrentPinballGame - ldr r0, [r1] - ldr r4, _08040CF0 @ =0x00000441 - adds r0, r0, r4 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - str r3, [sp, #0x34] - cmp r0, #5 - bls _08040CD8 - b _0804131A -_08040CD8: - lsls r0, r0, #2 - ldr r1, _08040CF4 @ =_08040CF8 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08040CE4: .4byte 0x0000132C -_08040CE8: .4byte gMain+0xDC0 @gMain.spriteGroups[15] -_08040CEC: .4byte gCurrentPinballGame -_08040CF0: .4byte 0x00000441 -_08040CF4: .4byte _08040CF8 -_08040CF8: @ jump table - .4byte _08040D10 @ case 0 - .4byte _08040D3C @ case 1 - .4byte _08040D7C @ case 2 - .4byte _0804103C @ case 3 - .4byte _0804120C @ case 4 - .4byte _080412D8 @ case 5 -_08040D10: - movs r5, #0 - str r5, [sp] - ldr r0, _08040D30 @ =gCurrentPinballGame - ldr r1, [r0] - ldr r7, [sp, #0x34] - asrs r0, r7, #0xe - adds r1, r1, r0 - ldr r2, _08040D34 @ =0x0000045C - adds r0, r1, r2 - strh r5, [r0] - ldr r4, _08040D38 @ =0x0000045E - adds r1, r1, r4 - mov r5, sp - ldrh r5, [r5] - strh r5, [r1] - b _0804131A - .align 2, 0 -_08040D30: .4byte gCurrentPinballGame -_08040D34: .4byte 0x0000045C -_08040D38: .4byte 0x0000045E -_08040D3C: - ldr r0, _08040D74 @ =gCurrentPinballGame - ldr r6, [r0] - ldr r0, [sp, #0x34] - asrs r7, r0, #0x10 - lsls r1, r7, #1 - movs r2, #0x8b - lsls r2, r2, #3 - adds r0, r6, r2 - adds r5, r0, r1 - ldrh r4, [r5] - adds r0, r4, #0 - movs r1, #5 - bl __udivsi3 - adds r0, #1 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - str r0, [sp] - cmp r4, #0xd - bhi _08040D66 - b _08041300 -_08040D66: - movs r0, #0 - strh r0, [r5] - ldr r3, _08040D78 @ =0x00000441 - adds r0, r6, r3 - adds r0, r0, r7 - movs r1, #2 - b _08041318 - .align 2, 0 -_08040D74: .4byte gCurrentPinballGame -_08040D78: .4byte 0x00000441 -_08040D7C: - ldr r4, _08040FE0 @ =gCurrentPinballGame - ldr r0, [r4] - ldr r5, [sp, #0x34] - asrs r1, r5, #0xf - movs r7, #0x8b - lsls r7, r7, #3 - adds r0, r0, r7 - adds r0, r0, r1 - ldrh r1, [r0] - movs r0, #0xf - ands r1, r0 - movs r0, #4 - str r0, [sp] - cmp r1, #3 - ble _08040DA6 - movs r2, #6 - str r2, [sp] - cmp r1, #9 - bgt _08040DA6 - movs r3, #5 - str r3, [sp] -_08040DA6: - ldr r4, _08040FE0 @ =gCurrentPinballGame - mov sl, r4 - ldr r0, [r4] - ldr r5, [sp, #0x34] - asrs r5, r5, #0x10 - mov sb, r5 - ldr r7, _08040FE4 @ =0x00000441 - adds r0, r0, r7 - add r0, sb - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #2 - ble _08040DC4 - b _08040FC0 -_08040DC4: - ldr r0, _08040FE8 @ =gMain - lsls r1, r5, #4 - subs r1, r1, r5 - lsls r1, r1, #3 - ldr r0, [r0, #0x4c] - adds r0, r0, r1 - movs r1, #0xf0 - bl __umodsi3 - lsls r0, r0, #0x10 - movs r1, #0xf0 - bl __udivsi3 - adds r5, r0, #0 - lsls r5, r5, #0x10 - lsrs r5, r5, #0x10 - adds r0, r5, #0 - bl Cos - ldr r4, [r4] - mov r1, sb - lsls r1, r1, #2 - str r1, [sp, #0x24] - adds r4, r4, r1 - ldr r2, _08040FEC @ =0x00000464 - adds r6, r4, r2 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r3, #0xfa - lsls r3, r3, #1 - mov r8, r3 - mov r1, r8 - bl __divsi3 - ldrh r1, [r6] - adds r1, r1, r0 - adds r7, #0x1b - adds r4, r4, r7 - strh r1, [r4] - adds r0, r5, #0 - bl Sin - mov r1, sl - ldr r7, [r1] - ldr r2, [sp, #0x24] - adds r5, r7, r2 - ldr r3, _08040FF0 @ =0x00000466 - adds r4, r5, r3 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - mov r1, r8 - bl __divsi3 - ldrh r1, [r4] - adds r1, r1, r0 - ldr r4, _08040FF4 @ =0x0000045E - mov r8, r4 - adds r2, r5, r4 - strh r1, [r2] - ldr r1, _08040FF8 @ =0x0000132C - adds r0, r7, r1 - ldr r6, [r0] - movs r3, #0x10 - ldrsh r4, [r6, r3] - ldr r0, _08040FFC @ =0x0000045C - adds r5, r5, r0 - movs r1, #0 - ldrsh r0, [r5, r1] - movs r1, #0xa - str r2, [sp, #0x38] - bl __divsi3 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - subs r4, r4, r0 - subs r4, #0x10 - str r4, [sp, #0x1c] - movs r3, #0x12 - ldrsh r4, [r6, r3] - ldr r2, [sp, #0x38] - movs r5, #0 - ldrsh r0, [r2, r5] - movs r1, #0xa - bl __divsi3 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - subs r4, r4, r0 - subs r4, #0x20 - str r4, [sp, #0x20] - ldr r0, [sp, #0x1c] - adds r1, r0, #0 - muls r1, r0, r1 - adds r0, r4, #0 - muls r0, r4, r0 - adds r5, r1, r0 - ldr r1, _08041000 @ =0x00000383 - adds r0, r7, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _08040E94 - b _08040FC0 -_08040E94: - movs r2, #0xe2 - lsls r2, r2, #2 - adds r0, r7, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _08040EA6 - b _08040FC0 -_08040EA6: - ldr r3, _08041004 @ =0x00000385 - adds r0, r7, r3 - movs r4, #0xe1 - lsls r4, r4, #2 - adds r1, r7, r4 - movs r2, #0 - ldrsb r2, [r0, r2] - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r2, r0 - blt _08040EBE - b _08040FC0 -_08040EBE: - ldr r1, _08041008 @ =0x00000452 - adds r0, r7, r1 - ldrh r4, [r0] - cmp r4, #0 - bne _08040FC0 - ldr r6, _0804100C @ =0x0000012B - cmp r5, r6 - bgt _08040FC0 - ldr r2, _08041010 @ =0x00000486 - adds r1, r7, r2 - movs r0, #6 - strh r0, [r1] - movs r3, #1 - strb r3, [r7, #0x1f] - mov r5, sl - ldr r1, [r5] - mov r7, sb - lsls r2, r7, #1 - movs r5, #0x8b - lsls r5, r5, #3 - adds r0, r1, r5 - adds r0, r0, r2 - strh r4, [r0] - ldr r7, _08040FE4 @ =0x00000441 - adds r1, r1, r7 - add r1, sb - movs r0, #3 - strb r0, [r1] - mov r1, sl - ldr r0, [r1] - ldr r2, _08041014 @ =0x000005FA - adds r0, r0, r2 - strb r3, [r0] - ldr r5, [r1] - ldr r3, [sp, #0x24] - adds r4, r5, r3 - adds r7, #0x1b - adds r0, r4, r7 - movs r1, #0 - ldrsh r0, [r0, r1] - movs r1, #0xa - bl __divsi3 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r0, #0x10 - str r0, [sp, #0x14] - add r4, r8 - movs r2, #0 - ldrsh r0, [r4, r2] - movs r1, #0xa - bl __divsi3 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r0, #0x20 - str r0, [sp, #0x18] - ldr r3, [sp, #0x14] - lsls r1, r3, #8 - ldr r4, _08040FF8 @ =0x0000132C - adds r0, r5, r4 - ldr r2, [r0] - ldr r0, [r2, #0x34] - subs r0, r1, r0 - str r0, [sp, #0x1c] - ldr r7, [sp, #0x18] - lsls r1, r7, #8 - ldr r0, [r2, #0x38] - subs r0, r1, r0 - str r0, [sp, #0x20] - ldr r4, _08041018 @ =0x000005AC - adds r5, r5, r4 - ldr r1, [sp, #0x1c] - adds r0, r1, #0 - muls r0, r1, r0 - ldr r2, [sp, #0x20] - adds r1, r2, #0 - muls r1, r2, r1 - adds r0, r0, r1 - str r0, [r5] - lsls r0, r0, #2 - bl Sqrt - mov r3, sl - ldr r1, [r3] - adds r1, r1, r4 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x11 - str r0, [r1] - ldr r4, [sp, #0x1c] - rsbs r0, r4, #0 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - ldr r5, [sp, #0x20] - lsls r1, r5, #0x10 - asrs r1, r1, #0x10 - bl ArcTan2 - mov r7, sl - ldr r2, [r7] - movs r3, #0xb6 - lsls r3, r3, #3 - adds r1, r2, r3 - strh r0, [r1] - ldr r0, [sp, #0xc] - adds r0, #1 - ldr r4, _0804101C @ =0x00000505 - adds r2, r2, r4 - strb r0, [r2] - ldr r2, [r7] - ldr r5, [sp, #0x24] - adds r1, r2, r5 - ldr r7, _08040FFC @ =0x0000045C - adds r0, r1, r7 - ldrh r3, [r0] - adds r4, #0x1b - adds r0, r2, r4 - strh r3, [r0] - add r1, r8 - ldrh r0, [r1] - ldr r5, _08041020 @ =0x00000522 - adds r2, r2, r5 - strh r0, [r2] - adds r0, r6, #0 - bl m4aSongNumStart - movs r0, #0xd - bl sub_11B0 -_08040FC0: - ldr r0, _08040FE0 @ =gCurrentPinballGame - ldr r3, [r0] - ldr r7, [sp, #0x34] - asrs r4, r7, #0x10 - lsls r1, r4, #1 - movs r2, #0x8b - lsls r2, r2, #3 - adds r0, r3, r2 - adds r1, r0, r1 - ldrh r2, [r1] - ldr r0, _08041024 @ =0x00000347 - cmp r2, r0 - bhi _08041028 - adds r0, r2, #1 - strh r0, [r1] - b _0804131A - .align 2, 0 -_08040FE0: .4byte gCurrentPinballGame -_08040FE4: .4byte 0x00000441 -_08040FE8: .4byte gMain -_08040FEC: .4byte 0x00000464 -_08040FF0: .4byte 0x00000466 -_08040FF4: .4byte 0x0000045E -_08040FF8: .4byte 0x0000132C -_08040FFC: .4byte 0x0000045C -_08041000: .4byte 0x00000383 -_08041004: .4byte 0x00000385 -_08041008: .4byte 0x00000452 -_0804100C: .4byte 0x0000012B -_08041010: .4byte 0x00000486 -_08041014: .4byte 0x000005FA -_08041018: .4byte 0x000005AC -_0804101C: .4byte 0x00000505 -_08041020: .4byte 0x00000522 -_08041024: .4byte 0x00000347 -_08041028: - movs r0, #0 - strh r0, [r1] - ldr r5, _08041038 @ =0x00000441 - adds r0, r3, r5 - adds r0, r0, r4 - movs r1, #5 - b _08041318 - .align 2, 0 -_08041038: .4byte 0x00000441 -_0804103C: - ldr r7, _080411E4 @ =gCurrentPinballGame - ldr r0, [r7] - ldr r2, [sp, #0x34] - asrs r1, r2, #0xf - movs r3, #0x8b - lsls r3, r3, #3 - adds r0, r0, r3 - adds r0, r0, r1 - ldrh r1, [r0] - movs r0, #0xf - ands r1, r0 - movs r4, #4 - str r4, [sp] - cmp r1, #3 - ble _08041066 - movs r5, #6 - str r5, [sp] - cmp r1, #9 - bgt _08041066 - movs r7, #5 - str r7, [sp] -_08041066: - ldr r0, _080411E4 @ =gCurrentPinballGame - ldr r6, [r0] - ldr r1, [sp, #0x34] - asrs r1, r1, #0x10 - str r1, [sp, #0x28] - lsls r2, r1, #1 - str r2, [sp, #0x2c] - movs r3, #0x8b - lsls r3, r3, #3 - adds r0, r6, r3 - adds r0, r0, r2 - ldrh r1, [r0] - movs r0, #0x1d - subs r0, r0, r1 - lsls r0, r0, #0x10 - lsrs r4, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #9 - bgt _0804108E - movs r4, #0xa -_0804108E: - movs r5, #0xb6 - lsls r5, r5, #3 - mov sl, r5 - adds r5, r6, r5 - lsls r4, r4, #0x10 - asrs r4, r4, #0x10 - lsls r0, r4, #0xd - movs r1, #0x1e - bl __divsi3 - adds r1, r0, #0 - movs r0, #0x80 - lsls r0, r0, #6 - subs r0, r0, r1 - lsls r0, r0, #1 - movs r1, #5 - bl __divsi3 - ldrh r1, [r5] - subs r1, r1, r0 - strh r1, [r5] - ldr r7, _080411E8 @ =0x0000132C - adds r0, r6, r7 - ldr r1, [r0] - ldr r2, _080411EC @ =0xFFFFE000 - adds r0, r2, #0 - ldrh r3, [r1, #0xa] - adds r0, r0, r3 - strh r0, [r1, #0xa] - ldr r7, _080411F0 @ =0x000005AC - adds r0, r6, r7 - ldr r0, [r0] - muls r0, r4, r0 - movs r1, #0x1e - bl __divsi3 - mov sb, r0 - ldr r0, [sp, #0x28] - lsls r4, r0, #2 - adds r4, r6, r4 - ldr r1, _080411F4 @ =0x0000045C - adds r0, r4, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - movs r1, #0xa - bl __divsi3 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r0, #0x10 - str r0, [sp, #0x14] - ldr r3, _080411F8 @ =0x0000045E - adds r4, r4, r3 - movs r7, #0 - ldrsh r0, [r4, r7] - movs r1, #0xa - bl __divsi3 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r0, #0x20 - str r0, [sp, #0x18] - ldrh r0, [r5] - bl Cos - ldr r1, _080411E4 @ =gCurrentPinballGame - ldr r5, [r1] - ldr r2, _080411E8 @ =0x0000132C - adds r1, r5, r2 - ldr r6, [r1] - ldr r3, [sp, #0x14] - lsls r4, r3, #8 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - mov r7, sb - muls r7, r0, r7 - adds r0, r7, #0 - ldr r1, _080411FC @ =0x00004E20 - mov r8, r1 - bl __divsi3 - adds r4, r4, r0 - str r4, [r6, #0x34] - add r5, sl - ldrh r0, [r5] - bl Sin - ldr r2, _080411E4 @ =gCurrentPinballGame - ldr r7, [r2] - ldr r3, _080411E8 @ =0x0000132C - adds r5, r7, r3 - ldr r6, [r5] - ldr r1, [sp, #0x18] - lsls r4, r1, #8 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - mov r2, sb - muls r2, r0, r2 - adds r0, r2, #0 - mov r1, r8 - bl __divsi3 - subs r4, r4, r0 - str r4, [r6, #0x38] - ldr r4, [r5] - movs r3, #0x30 - ldrsh r0, [r4, r3] - lsls r0, r0, #2 - movs r1, #5 - bl __divsi3 - strh r0, [r4, #0x30] - ldr r4, [r5] - movs r5, #0x32 - ldrsh r0, [r4, r5] - lsls r0, r0, #2 - movs r1, #5 - bl __divsi3 - strh r0, [r4, #0x32] - movs r0, #0xe3 - lsls r0, r0, #2 - adds r2, r7, r0 - movs r3, #0 - ldrsh r1, [r2, r3] - ldr r0, _08041200 @ =0x00000707 - cmp r1, r0 - bgt _0804119C - ldr r4, _08041204 @ =0x0000038A - adds r0, r7, r4 - movs r5, #0 - strh r5, [r0] - ldrh r0, [r2] - adds r0, #0x20 - strh r0, [r2] -_0804119C: - ldr r7, _080411E4 @ =gCurrentPinballGame - ldr r2, [r7] - movs r1, #0x8b - lsls r1, r1, #3 - adds r0, r2, r1 - ldr r3, [sp, #0x2c] - adds r1, r0, r3 - ldrh r0, [r1] - cmp r0, #0xb3 - bhi _080411B2 - b _080412BE -_080411B2: - movs r4, #0 - strh r4, [r1] - ldr r5, _08041208 @ =0x00000441 - adds r0, r2, r5 - ldr r7, [sp, #0x28] - adds r0, r0, r7 - movs r1, #4 - strb r1, [r0] - ldr r0, _080411E4 @ =gCurrentPinballGame - ldr r2, [r0] - ldr r1, _080411F0 @ =0x000005AC - adds r3, r2, r1 - ldr r0, [r3] - lsrs r1, r0, #0x1f - adds r0, r0, r1 - asrs r0, r0, #1 - str r0, [r3] - ldr r3, _080411E8 @ =0x0000132C - adds r2, r2, r3 - ldr r1, [r2] - movs r0, #0xa5 - lsls r0, r0, #8 - str r0, [r1, #0x38] - b _0804131A - .align 2, 0 -_080411E4: .4byte gCurrentPinballGame -_080411E8: .4byte 0x0000132C -_080411EC: .4byte 0xFFFFE000 -_080411F0: .4byte 0x000005AC -_080411F4: .4byte 0x0000045C -_080411F8: .4byte 0x0000045E -_080411FC: .4byte 0x00004E20 -_08041200: .4byte 0x00000707 -_08041204: .4byte 0x0000038A -_08041208: .4byte 0x00000441 -_0804120C: - ldr r4, _080412C4 @ =gCurrentPinballGame - mov sl, r4 - ldr r0, [r4] - ldr r5, [sp, #0x34] - asrs r5, r5, #0x10 - str r5, [sp, #0x30] - lsls r7, r5, #1 - movs r1, #0x8b - lsls r1, r1, #3 - adds r0, r0, r1 - adds r0, r0, r7 - ldrh r0, [r0] - cmp r0, #0x81 - bhi _0804131A - cmp r0, #0xa - bne _08041234 - movs r0, #0x96 - lsls r0, r0, #1 - bl m4aSongNumStart -_08041234: - mov r2, sl - ldr r6, [r2] - ldr r4, _080412C8 @ =0x0000038A - adds r3, r6, r4 - ldrh r1, [r3] - subs r1, #1 - movs r5, #0 - mov sb, r5 - movs r0, #0 - mov r8, r0 - strh r1, [r3] - adds r4, #2 - adds r2, r6, r4 - ldrh r0, [r2] - adds r0, r0, r1 - strh r0, [r2] - lsls r0, r0, #0x10 - cmp r0, #0 - bgt _080412B0 - mov r5, r8 - strh r5, [r2] - ldr r4, _080412CC @ =0x0000132C - adds r0, r6, r4 - ldr r5, [r0] - movs r1, #0 - ldrsh r0, [r3, r1] - lsls r0, r0, #7 - movs r1, #0xa - bl __divsi3 - rsbs r0, r0, #0 - lsrs r1, r0, #0x1f - adds r0, r0, r1 - asrs r0, r0, #1 - strh r0, [r5, #0x32] - mov r2, sb - strb r2, [r6, #0x1f] - mov r3, sl - ldr r1, [r3] - movs r5, #0x8b - lsls r5, r5, #3 - adds r0, r1, r5 - adds r0, r0, r7 - mov r2, r8 - strh r2, [r0] - adds r4, r1, r4 - ldr r0, [r4] - strh r2, [r0, #0x30] - ldr r3, _080412D0 @ =0x00000441 - adds r1, r1, r3 - ldr r4, [sp, #0x30] - adds r1, r1, r4 - mov r5, sb - strb r5, [r1] - mov r1, sl - ldr r0, [r1] - ldr r2, _080412D4 @ =0x000005FA - adds r0, r0, r2 - strb r5, [r0] - movs r0, #8 - bl sub_11B0 -_080412B0: - mov r3, sl - ldr r1, [r3] - movs r4, #0x8b - lsls r4, r4, #3 - adds r1, r1, r4 - adds r1, r1, r7 - ldrh r0, [r1] -_080412BE: - adds r0, #1 - strh r0, [r1] - b _0804131A - .align 2, 0 -_080412C4: .4byte gCurrentPinballGame -_080412C8: .4byte 0x0000038A -_080412CC: .4byte 0x0000132C -_080412D0: .4byte 0x00000441 -_080412D4: .4byte 0x000005FA -_080412D8: - ldr r0, _08041308 @ =gCurrentPinballGame - ldr r6, [r0] - ldr r5, [sp, #0x34] - asrs r7, r5, #0x10 - lsls r1, r7, #1 - movs r2, #0x8b - lsls r2, r2, #3 - adds r0, r6, r2 - adds r5, r0, r1 - ldrh r4, [r5] - adds r0, r4, #0 - movs r1, #6 - bl __udivsi3 - adds r0, #7 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - str r0, [sp] - cmp r4, #0xa - bhi _0804130C -_08041300: - adds r0, r4, #1 - strh r0, [r5] - b _0804131A - .align 2, 0 -_08041308: .4byte gCurrentPinballGame -_0804130C: - movs r1, #0 - movs r0, #0 - strh r0, [r5] - ldr r3, _08041540 @ =0x00000441 - adds r0, r6, r3 - adds r0, r0, r7 -_08041318: - strb r1, [r0] -_0804131A: - ldr r4, [sp, #0x10] - ldrh r0, [r4] - cmp r0, #0 - beq _08041400 - ldr r2, _08041544 @ =0x040000D4 - ldr r5, [sp] - lsls r1, r5, #0x10 - asrs r1, r1, #0x10 - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #7 - ldr r1, _08041548 @ =gUnknown_084A6EEC - adds r0, r0, r1 - str r0, [r2] - ldr r0, _0804154C @ =0x06011EA0 - str r0, [r2, #4] - ldr r0, _08041550 @ =0x80000140 - str r0, [r2, #8] - ldr r0, [r2, #8] - ldr r0, _08041554 @ =gCurrentPinballGame - ldr r5, [r0] - ldr r7, [sp, #0x34] - asrs r4, r7, #0xe - adds r4, r5, r4 - ldr r1, _08041558 @ =0x0000045C - adds r0, r4, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - movs r1, #0xa - bl __divsi3 - adds r1, r5, #0 - adds r1, #0x58 - ldrh r1, [r1] - subs r0, r0, r1 - ldr r3, [sp, #0x10] - strh r0, [r3, #2] - ldr r7, _0804155C @ =0x0000045E - adds r4, r4, r7 - movs r1, #0 - ldrsh r0, [r4, r1] - movs r1, #0xa - bl __divsi3 - adds r5, #0x5a - ldrh r1, [r5] - subs r0, r0, r1 - ldr r2, [sp, #0x10] - strh r0, [r2, #4] - movs r2, #0 - ldr r5, _08041560 @ =gOamBuffer - ldr r3, _08041564 @ =0xFFFFFE00 - mov r8, r3 -_08041384: - lsls r3, r2, #0x10 - asrs r3, r3, #0x10 - lsls r0, r3, #3 - adds r0, #8 - ldr r4, [sp, #0x10] - adds r6, r4, r0 - ldrh r2, [r6] - lsls r2, r2, #3 - adds r2, r2, r5 - movs r7, #2 - ldrsh r1, [r6, r7] - movs r7, #2 - ldrsh r0, [r4, r7] - adds r1, r1, r0 - ldr r4, _08041568 @ =0x000001FF - adds r0, r4, #0 - ands r1, r0 - ldrh r4, [r2, #2] - mov r0, r8 - ands r0, r4 - orrs r0, r1 - strh r0, [r2, #2] - ldrh r1, [r6] - lsls r1, r1, #3 - adds r1, r1, r5 - ldr r7, [sp, #0x10] - ldrb r0, [r7, #4] - ldrb r6, [r6, #4] - adds r0, r0, r6 - strb r0, [r1] - adds r3, #1 - lsls r3, r3, #0x10 - lsrs r2, r3, #0x10 - asrs r3, r3, #0x10 - cmp r3, #1 - ble _08041384 - ldr r1, _08041554 @ =gCurrentPinballGame - ldr r0, [r1] - ldr r3, [sp, #0x34] - asrs r2, r3, #0x10 - ldr r4, _08041540 @ =0x00000441 - adds r0, r0, r4 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - bne _080413E6 - strh r0, [r7] -_080413E6: - ldr r0, [r1] - ldr r5, _0804156C @ =0x00000505 - adds r1, r0, r5 - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - beq _08041400 - subs r0, #1 - cmp r2, r0 - bne _08041400 - movs r0, #0 - ldr r7, [sp, #0x10] - strh r0, [r7] -_08041400: - ldr r1, [sp, #0x34] - movs r2, #0x80 - lsls r2, r2, #9 - adds r0, r1, r2 - lsrs r3, r0, #0x10 - str r3, [sp, #0xc] - asrs r0, r0, #0x10 - cmp r0, #1 - bgt _08041414 - b _08040CAE -_08041414: - bl sub_417F8 - ldr r4, _08041570 @ =gMain+0x1158 @gMain.spriteGroups[20] - str r4, [sp, #0x10] - ldrh r0, [r4] - cmp r0, #0 - beq _0804150E - ldr r5, _08041554 @ =gCurrentPinballGame - ldr r4, [r5] - movs r7, #0xa4 - lsls r7, r7, #3 - adds r0, r4, r7 - movs r1, #0 - ldrsh r0, [r0, r1] - movs r1, #0xa - bl __divsi3 - adds r4, #0x58 - ldrh r1, [r4] - subs r0, r0, r1 - ldr r2, [sp, #0x10] - strh r0, [r2, #2] - ldr r4, [r5] - ldr r3, _08041574 @ =0x00000522 - adds r0, r4, r3 - movs r7, #0 - ldrsh r0, [r0, r7] - movs r1, #0xa - bl __divsi3 - adds r4, #0x5a - ldrh r1, [r4] - subs r0, r0, r1 - ldr r1, [sp, #0x10] - strh r0, [r1, #4] - ldr r0, [r5] - ldr r2, _08041578 @ =0x0000050E - adds r0, r0, r2 - ldrh r0, [r0] - movs r1, #5 - bl __udivsi3 - movs r2, #0 - ldr r3, _0804157C @ =gUnknown_086B5CC0 - mov sl, r3 - ldr r4, _08041560 @ =gOamBuffer - mov ip, r4 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - lsls r1, r0, #4 - subs r1, r1, r0 - lsls r1, r1, #1 - mov r8, r1 - ldr r5, _08041564 @ =0xFFFFFE00 - mov sb, r5 -_08041482: - lsls r3, r2, #0x10 - asrs r3, r3, #0x10 - lsls r0, r3, #3 - adds r0, #8 - ldr r7, [sp, #0x10] - adds r6, r7, r0 - ldrh r0, [r6] - lsls r0, r0, #3 - mov r1, ip - adds r5, r0, r1 - lsls r0, r3, #1 - adds r0, r0, r3 - lsls r0, r0, #1 - add r0, sl - mov r2, r8 - adds r1, r2, r0 - ldrh r0, [r1] - strh r0, [r5] - adds r1, #2 - adds r5, #2 - ldrh r0, [r1] - strh r0, [r5] - ldrh r0, [r1, #2] - strh r0, [r5, #2] - ldrh r2, [r6] - lsls r2, r2, #3 - add r2, ip - ldrh r4, [r2, #2] - lsls r1, r4, #0x17 - lsrs r1, r1, #0x17 - movs r5, #2 - ldrsh r0, [r7, r5] - adds r1, r1, r0 - ldr r7, _08041568 @ =0x000001FF - adds r0, r7, #0 - ands r1, r0 - mov r0, sb - ands r0, r4 - orrs r0, r1 - strh r0, [r2, #2] - ldrh r1, [r6] - lsls r1, r1, #3 - add r1, ip - ldr r2, [sp, #0x10] - ldrb r0, [r2, #4] - ldrb r4, [r1] - adds r0, r0, r4 - strb r0, [r1] - adds r3, #1 - lsls r3, r3, #0x10 - lsrs r2, r3, #0x10 - asrs r3, r3, #0x10 - cmp r3, #4 - ble _08041482 - ldr r0, _08041554 @ =gCurrentPinballGame - ldr r0, [r0] - ldr r5, _08041578 @ =0x0000050E - adds r1, r0, r5 - ldrh r0, [r1] - cmp r0, #0x18 - bhi _0804150E - adds r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0x19 - bne _0804150E - movs r0, #0 - ldr r7, [sp, #0x10] - strh r0, [r7] -_0804150E: - ldr r1, _08041554 @ =gCurrentPinballGame - ldr r0, [r1] - ldr r3, _0804156C @ =0x00000505 - adds r2, r0, r3 - movs r0, #0 - ldrsb r0, [r2, r0] - cmp r0, #0 - beq _08041530 - movs r0, #0 - strb r0, [r2] - ldr r1, [r1] - ldr r4, _08041578 @ =0x0000050E - adds r1, r1, r4 - strh r0, [r1] - movs r0, #1 - ldr r5, [sp, #0x10] - strh r0, [r5] -_08041530: - add sp, #0x44 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_08041540: .4byte 0x00000441 -_08041544: .4byte 0x040000D4 -_08041548: .4byte gUnknown_084A6EEC -_0804154C: .4byte 0x06011EA0 -_08041550: .4byte 0x80000140 -_08041554: .4byte gCurrentPinballGame -_08041558: .4byte 0x0000045C -_0804155C: .4byte 0x0000045E -_08041560: .4byte gOamBuffer -_08041564: .4byte 0xFFFFFE00 -_08041568: .4byte 0x000001FF -_0804156C: .4byte 0x00000505 -_08041570: .4byte gMain+0x1158 @gMain.spriteGroups[20] -_08041574: .4byte 0x00000522 -_08041578: .4byte 0x0000050E -_0804157C: .4byte gUnknown_086B5CC0 diff --git a/expected_objs/sub_40288.o b/expected_objs/sub_40288.o deleted file mode 100644 index 0f6dbb4..0000000 Binary files a/expected_objs/sub_40288.o and /dev/null differ diff --git a/include/functions.h b/include/functions.h index 4b88cde..ac0a8cc 100644 --- a/include/functions.h +++ b/include/functions.h @@ -610,8 +610,8 @@ extern void sub_3E5D0(void); //extern ? sub_3EDF0(); //extern ? sub_3FAE0(); //extern ? sub_40288(); -//extern ? sub_41580(); -//extern ? sub_417F8(); +extern void sub_41580(void); +extern void sub_417F8(void); //extern ? sub_423D8(); //extern ? sub_42E48(); //extern ? sub_43228(); diff --git a/include/global.h b/include/global.h index fa1cac5..6507e2f 100644 --- a/include/global.h +++ b/include/global.h @@ -345,12 +345,13 @@ struct PinballGame /*0x36E*/ u16 unk36E[0x2]; /*0x372*/ u8 filler372[0x11]; /*0x383*/ s8 unk383; - /*0x384*/ u8 unk384; + /*0x384*/ s8 unk384; /*0x385*/ s8 unk385; /*0x386*/ s8 unk386; /*0x387*/ s8 unk387; /*0x388*/ s8 unk388; - /*0x389*/ u8 filler389[0x3]; + /*0x389*/ u8 filler389[0x1]; + /*0x38A*/ s16 unk38A; /*0x38C*/ s16 unk38C; /*0x38E*/ u8 filler38E[0x4]; /*0x392*/ u16 unk392; @@ -415,17 +416,13 @@ struct PinballGame /*0x438*/ struct Vector16 unk438; /*0x43C*/ struct Vector16 unk43C; /*0x440*/ u8 filler440[0x1]; - /*0x441*/ s8 unk441; - /*0x442*/ s8 unk442; + /*0x441*/ s8 unk441[2]; /*0x443*/ u8 filler443[0xF]; /*0x452*/ u16 unk452; /*0x454*/ u8 filler454[0x4]; - /*0x458*/ s16 unk458; - /*0x45A*/ s16 unk45A; - /*0x45C*/ struct Vector16 unk45C; - /*0x460*/ struct Vector16 unk460; - /*0x464*/ struct Vector16 unk464; - /*0x468*/ struct Vector16 unk468; + /*0x458*/ u16 unk458[2]; + /*0x45C*/ struct Vector16 unk45C[2]; + /*0x464*/ struct Vector16 unk464[2]; /*0x46C*/ u8 filler46C[0x13]; /*0x47F*/ s8 unk47F; /*0x480*/ u16 unk480; @@ -441,15 +438,22 @@ struct PinballGame /*0x4D5*/ s8 unk4D5[3]; /*0x4D8*/ u8 filler4D8[0x20]; /*0x4F8*/ struct Vector16 unk4F8[3]; - /*0x504*/ u8 filler504[0x2]; + /*0x504*/ u8 filler504[0x1]; + /*0x505*/ s8 unk505; /*0x506*/ s8 unk506; - /*0x507*/ u8 filler507[0x1]; + /*0x507*/ s8 unk507; /*0x508*/ s16 unk508; - /*0x50A*/ u8 filler50A[0xA]; + /*0x50A*/ u8 filler50A[0x4]; + /*0x50E*/ u16 unk50E; + /*0x510*/ u16 unk510; + /*0x512*/ u8 filler512[0x2]; /*0x514*/ u16 unk514; /*0x516*/ u16 unk516; /*0x518*/ s16 unk518; - /*0x51A*/ u8 filler51A[0xE]; + /*0x51A*/ u8 filler51A[0x2]; + /*0x51C*/ struct Vector16 unk51C; + /*0x520*/ struct Vector16 unk520; + /*0x524*/ struct Vector16 unk524; /*0x528*/ struct Vector16 unk528; /*0x52C*/ s8 unk52C[2]; /*0x52E*/ s8 unk52E[2]; @@ -537,7 +541,7 @@ struct PinballGame /*0x6B4*/ u32 unk6B4; /*0x6B8*/ u32 unk6B8; /*0x6BC*/ u8 filler6BC[0x8]; - /*0x6C4*/ u8 unk6C4; + /*0x6C4*/ s8 unk6C4; /*0x6C5*/ u8 unk6C5; // TODO: unknown type /*0x6C6*/ u8 unk6C6; /*0x6C7*/ u8 unk6C7; @@ -546,7 +550,11 @@ struct PinballGame /*0x6CA*/ u16 unk6CA; /*0x6CC*/ u8 unk6CC; /*0x6CD*/ u8 unk6CD[6]; - /*0x6D3*/ u8 filler6D3[0x1B]; + /*0x6D3*/ u8 filler6D3[0x8]; + /*0x6DB*/ u8 unk6DB; + /*0x6DC*/ u8 filler6DC[0x8]; + /*0x6E4*/ struct Vector16 unk6E4; + /*0x6E8*/ u8 filler6E8[0x6]; /*0x6EE*/ u16 unk6EE; /*0x6F0*/ u8 filler6F0[0x1E]; /*0x70E*/ s8 unk70E; diff --git a/include/m4a.h b/include/m4a.h index 4e6c236..1332a62 100644 --- a/include/m4a.h +++ b/include/m4a.h @@ -10,6 +10,7 @@ void m4aSoundInit(void); void m4aSoundMain(void); void m4aSongNumStart(u16 n); void m4aSongNumStartOrChange(u16 n); +void m4aSongNumStop(u16 n); void m4aMPlayAllStop(void); void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo); void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume); diff --git a/src/rom_49A34.c b/src/rom_49A34.c index a9a77c2..2a71e7f 100644 --- a/src/rom_49A34.c +++ b/src/rom_49A34.c @@ -99,6 +99,10 @@ extern const u16 gUnknown_086AFB2C[][3]; extern const u8 gUnknown_084B046C[][0x120]; extern const u16 gUnknown_086B56D8[][4][3]; extern const u16 gUnknown_086B5D56[][2][3]; +extern const u16 gUnknown_086B609E[][3][3]; +extern const u16 gUnknown_086B5ECA[][6][3]; +extern const u16 gUnknown_086B5DCE[][7][3]; +extern const u16 gUnknown_086B5CC0[][5][3]; extern const u16 gUnknown_086AFAE2[][2]; extern const u16 gUnknown_086AFAE0[][2]; extern const u8 gUnknown_084B47EC[][0x800]; @@ -107,6 +111,7 @@ extern const s16 gUnknown_086AF784[]; extern const struct Vector16 gUnknown_086AF744[32]; extern const s16 gUnknown_086AEF28[]; extern const s16 gUnknown_08137D48[]; +extern const u8 gUnknown_084A6EEC[][0x280]; struct Unk_086AFAC0 { @@ -130,6 +135,524 @@ extern u8 gUnknown_0200FBB0[]; extern u8 gUnknown_020030A0[]; +void sub_40288(void) +{ + s16 sp0; + s16 sp4; + s16 sp8; + s16 i, j; + struct SpriteGroup *group; + struct Vector32 tempVector2; + struct Vector32 tempVector; + s16 var0; + int x, y; + int xx, yy; + int squaredMagnitude; + u16 *dst; + const u16 *src; + struct OamDataSimple *oamSimple; + + sp8 = 0; + sp4 = 0; + var0 = 0; + sp0 = 0; + group = &gMain.spriteGroups[10]; + if (group->available) + { + if (gCurrentPinballGame->unk6C4 == 3) + { + group->baseX = 240; + group->baseY = 180; + } + else + { + group->baseX = 96; + group->baseY = 55; + } + + gCurrentPinballGame->unk6E4.x = group->baseX; + gCurrentPinballGame->unk6E4.y = group->baseY; + if (group->baseY >= 200) + group->baseY = 200; + + for (j = 0; j < 6; j++) + { + oamSimple = &group->oam[j]; + gOamBuffer[oamSimple->oamId].paletteNum = 13; + gOamBuffer[oamSimple->oamId].priority = gCurrentPinballGame->unk6DB; + gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX; + gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY; + } + + group = &gMain.spriteGroups[9]; + group->baseX = gCurrentPinballGame->unk6E4.x - 8; + group->baseY = gCurrentPinballGame->unk6E4.y - 8; + if (group->baseY >= 200) + group->baseY = 200; + + for (j = 0; j < 6; j++) + { + oamSimple = &group->oam[j]; + gOamBuffer[oamSimple->oamId].priority = gCurrentPinballGame->unk6DB; + gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX; + gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY; + } + } + + sub_41580(); + switch (gCurrentPinballGame->unk507) + { + case 0: + gCurrentPinballGame->unk510 = 0; + var0 = 7; + sp4 = 12; + sp8 = 5; + break; + case 1: + if (gCurrentPinballGame->unk510 == 0) + m4aSongNumStart(SE_UNKNOWN_0x128); + + if (gCurrentPinballGame->unk510 == 8) + m4aSongNumStop(SE_UNKNOWN_0x128); + + if (gCurrentPinballGame->unk510 == 24) + m4aSongNumStart(SE_UNKNOWN_0x128); + + if (gCurrentPinballGame->unk510 == 36) + m4aSongNumStop(SE_UNKNOWN_0x128); + + if (gCurrentPinballGame->unk510 == 50) + m4aSongNumStart(SE_UNKNOWN_0x128); + + if (gCurrentPinballGame->unk510 == 56) + m4aSongNumStop(SE_UNKNOWN_0x128); + + if (gCurrentPinballGame->unk510 < 14) + var0 = gCurrentPinballGame->unk510 / 2; + else if (gCurrentPinballGame->unk510 < 42) + var0 = 7; + else if (gCurrentPinballGame->unk510 < 56) + var0 = (gCurrentPinballGame->unk510 - 42) / 2; + else if (gCurrentPinballGame->unk510 < 61) + var0 = 7; + else + var0 = (gCurrentPinballGame->unk510 - 61) / 2; + + if (gCurrentPinballGame->unk510 < 8) + sp4 = gCurrentPinballGame->unk510 / 2; + else if (gCurrentPinballGame->unk510 < 48) + sp4 = 12; + else if (gCurrentPinballGame->unk510 < 64) + sp4 = (gCurrentPinballGame->unk510 - 48) / 2 + 4; + else + sp4 = 12; + + sp8 = 5; + gCurrentPinballGame->unk510++; + if (gCurrentPinballGame->unk510 == 75) + { + gCurrentPinballGame->unk510 = 0; + gCurrentPinballGame->unk507 = 2; + } + break; + case 2: + var0 = 7; + sp4 = 12; + sp8 = 5; + if (gCurrentPinballGame->unk510 < 34) + { + gCurrentPinballGame->unk510++; + if (gCurrentPinballGame->unk510 == 28) + { + if (gCurrentPinballGame->unk388) + { + gCurrentPinballGame->unk51C.x = 200 - (Random() % 160); + gCurrentPinballGame->unk51C.y = gCurrentPinballGame->ball->positionQ0.y - 347 - (Random() % 80); + } + else + { + gCurrentPinballGame->unk51C.x = gCurrentPinballGame->ball->positionQ0.x - 13; + gCurrentPinballGame->unk51C.y = gCurrentPinballGame->ball->positionQ0.y - 347; + } + } + } + else + { + gCurrentPinballGame->unk510 = 0; + gCurrentPinballGame->unk507 = 3; + m4aSongNumStart(SE_UNKNOWN_0x129); + } + break; + case 3: + var0 = 7; + sp4 = 12; + if (gCurrentPinballGame->unk510 < 2) + { + sp8 = gCurrentPinballGame->unk510; + } + else if (gCurrentPinballGame->unk510 < 10) + { + sp8 = (gCurrentPinballGame->unk510 - 2) / 2 + 2; + gCurrentPinballGame->unk508 = sp4; + if (sp8 == 2) + { + int a = 13; + int b = 347; + tempVector.x = gCurrentPinballGame->ball->positionQ0.x - a - gCurrentPinballGame->unk51C.x; + tempVector.y = gCurrentPinballGame->ball->positionQ0.y - b - gCurrentPinballGame->unk51C.y; + xx = tempVector.x * tempVector.x; + yy = tempVector.y * tempVector.y; + squaredMagnitude = xx + yy; + + sub_11B0(8); + if (gCurrentPinballGame->unk441[0] < 3 && gCurrentPinballGame->unk441[1] < 3 && + gCurrentPinballGame->unk388 == 0 && squaredMagnitude < 200) + { + gMain.spriteGroups[36].available = 1; + gCurrentPinballGame->unk486 = 600; + m4aSongNumStart(SE_UNKNOWN_0x12A); + sub_11B0(9); + } + } + } + else + { + sp8 = 5; + gCurrentPinballGame->unk507 = 4; + } + + gCurrentPinballGame->unk510++; + break; + case 4: + gCurrentPinballGame->unk510 = 0; + gCurrentPinballGame->unk507 = 0; + break; + } + + group = &gMain.spriteGroups[17]; + if (group->available) + { + // ! odd behavior in the assembly with the addition and subtraction + group->baseX = gCurrentPinballGame->unk3E8 / 10 - (gCurrentPinballGame->unk58 - 88); + group->baseY = gCurrentPinballGame->unk3EA / 10 - gCurrentPinballGame->unk5A + 96; + for (j = 0; j < 3; j++) + { + oamSimple = &group->oam[j]; + dst = (u16*)&gOamBuffer[oamSimple->oamId]; + src = gUnknown_086B609E[var0][j]; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + + gOamBuffer[oamSimple->oamId].x += group->baseX; + gOamBuffer[oamSimple->oamId].y += group->baseY; + } + + if (gCurrentPinballGame->unk507 == 4) + gMain.spriteGroups[17].available = 0; + } + + group = &gMain.spriteGroups[18]; + if (group->available) + { + group->baseX = gCurrentPinballGame->unk3E8 / 10 - (gCurrentPinballGame->unk58 - 88); + group->baseY = gCurrentPinballGame->unk3EA / 10 - gCurrentPinballGame->unk5A + 96; + for (j = 0; j < 6; j++) + { + oamSimple = &group->oam[j]; + dst = (u16*)&gOamBuffer[oamSimple->oamId]; + src = gUnknown_086B5ECA[sp4][j]; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + + gOamBuffer[oamSimple->oamId].x += group->baseX; + gOamBuffer[oamSimple->oamId].y += group->baseY; + } + + if (gCurrentPinballGame->unk507 == 4) + gMain.spriteGroups[18].available = 0; + } + + group = &gMain.spriteGroups[19]; + if (group->available) + { + group->baseX = gCurrentPinballGame->unk51C.x - gCurrentPinballGame->unk58; + group->baseY = gCurrentPinballGame->unk51C.y - gCurrentPinballGame->unk5A; + for (j = 0; j < 7; j++) + { + oamSimple = &group->oam[j]; + dst = (u16*)&gOamBuffer[oamSimple->oamId]; + src = gUnknown_086B5DCE[sp8][j]; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + + if ((s8)gOamBuffer[oamSimple->oamId].y + group->baseY < -300) + { + gOamBuffer[oamSimple->oamId].x = 0; + gOamBuffer[oamSimple->oamId].y = 180; + } + else + { + gOamBuffer[oamSimple->oamId].x += group->baseX; + gOamBuffer[oamSimple->oamId].y += group->baseY; + } + } + + if (gCurrentPinballGame->unk507 == 4) + gMain.spriteGroups[19].available = 0; + } + + group = &gMain.spriteGroups[22]; + if (group->available) + { + group->baseX = gCurrentPinballGame->unk524.x / 10 - (gCurrentPinballGame->unk58 + 120); + group->baseY = gCurrentPinballGame->unk524.y / 10 - (gCurrentPinballGame->unk5A - 128); + for (j = 0; j < 18; j++) + { + oamSimple = &group->oam[j]; + gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX; + gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY; + } + } + + group = &gMain.spriteGroups[23]; + if (group->available) + { + group->baseX = gCurrentPinballGame->unk524.x / 10 - (gCurrentPinballGame->unk58 - 360); + group->baseY = gCurrentPinballGame->unk524.y / 10 - (gCurrentPinballGame->unk5A - 128); + for (j = 0; j < 18; j++) + { + oamSimple = &group->oam[j]; + gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX; + gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY; + } + } + + if (gCurrentPinballGame->unk38C > 0) + gCurrentPinballGame->ball->unk1 = 1; + else + gCurrentPinballGame->ball->unk1 = 2; + + for (i = 0; i < 2; i++) + { + group = &gMain.spriteGroups[15 + i]; + switch (gCurrentPinballGame->unk441[i]) + { + case 0: + sp0 = 0; + gCurrentPinballGame->unk45C[i].x = 0; + gCurrentPinballGame->unk45C[i].y = 0; + break; + case 1: + sp0 = gCurrentPinballGame->unk458[i] / 5 + 1; + if (gCurrentPinballGame->unk458[i] < 14) + { + gCurrentPinballGame->unk458[i]++; + } + else + { + gCurrentPinballGame->unk458[i] = 0; + gCurrentPinballGame->unk441[i] = 2; + } + break; + case 2: + sp0 = gCurrentPinballGame->unk458[i] % 16; + if (sp0 < 4) + sp0 = 4; + else if (sp0 < 10) + sp0 = 5; + else + sp0 = 6; + + if (gCurrentPinballGame->unk441[i] < 3) + { + + s16 angle = (((gMain.systemFrameCount + 120 * i) % 240) << 0x10) / 240; + gCurrentPinballGame->unk45C[i].x = gCurrentPinballGame->unk464[i].x + (Cos(angle) * 4) / 2000; + gCurrentPinballGame->unk45C[i].y = gCurrentPinballGame->unk464[i].y + (Sin(angle) * 4) / 2000; + + tempVector.x = gCurrentPinballGame->ball->positionQ0.x - (gCurrentPinballGame->unk45C[i].x / 10) - 16; + tempVector.y = gCurrentPinballGame->ball->positionQ0.y - (gCurrentPinballGame->unk45C[i].y / 10) - 32;; + xx = tempVector.x * tempVector.x; + yy = tempVector.y * tempVector.y; + squaredMagnitude = xx + yy; + if (gCurrentPinballGame->unk383 == 0 && gCurrentPinballGame->unk388 == 0 && + gCurrentPinballGame->unk385 < gCurrentPinballGame->unk384 && + gCurrentPinballGame->unk452 == 0 && squaredMagnitude < 300) + { + gCurrentPinballGame->unk486 = 6; + gCurrentPinballGame->unk1F = 1; + gCurrentPinballGame->unk458[i] = 0; + gCurrentPinballGame->unk441[i] = 3; + gCurrentPinballGame->unk5FA = 1; + + tempVector2.x = gCurrentPinballGame->unk45C[i].x / 10 + 16; + tempVector2.y = gCurrentPinballGame->unk45C[i].y / 10 + 32; + tempVector.x = (tempVector2.x << 8) - gCurrentPinballGame->ball->positionQ8.x; + tempVector.y = (tempVector2.y << 8) - gCurrentPinballGame->ball->positionQ8.y; + gCurrentPinballGame->unk5AC = (tempVector.x * tempVector.x) + (tempVector.y * tempVector.y); + gCurrentPinballGame->unk5AC = Sqrt(gCurrentPinballGame->unk5AC * 4) / 2; + gCurrentPinballGame->unk5B0 = ArcTan2(-tempVector.x, tempVector.y); + + gCurrentPinballGame->unk505 = i + 1; + gCurrentPinballGame->unk520.x = gCurrentPinballGame->unk45C[i].x; + gCurrentPinballGame->unk520.y = gCurrentPinballGame->unk45C[i].y; + m4aSongNumStart(SE_UNKNOWN_0x12B); + sub_11B0(13); + } + } + + if (gCurrentPinballGame->unk458[i] < 840) + { + gCurrentPinballGame->unk458[i]++; + } + else + { + gCurrentPinballGame->unk458[i] = 0; + gCurrentPinballGame->unk441[i] = 5; + } + break; + case 3: { + s16 var4; + int var5; + + sp0 = gCurrentPinballGame->unk458[i] % 16; + if (sp0 < 4) + sp0 = 4; + else if (sp0 < 10) + sp0 = 5; + else + sp0 = 6; + + var4 = 29 - gCurrentPinballGame->unk458[i]; + if (var4 < 10) + var4 = 10; + + gCurrentPinballGame->unk5B0 -= ((0x2000 - (var4 * 0x2000) / 30) * 2) / 5; + gCurrentPinballGame->ball->unkA -= 0x2000; + var5 = (gCurrentPinballGame->unk5AC * var4) / 30; + tempVector2.x = gCurrentPinballGame->unk45C[i].x / 10 + 16; + tempVector2.y = gCurrentPinballGame->unk45C[i].y / 10 + 32; + gCurrentPinballGame->ball->positionQ8.x = (tempVector2.x << 8) + ((Cos(gCurrentPinballGame->unk5B0) * var5) / 20000); + gCurrentPinballGame->ball->positionQ8.y = (tempVector2.y << 8) - ((Sin(gCurrentPinballGame->unk5B0) * var5) / 20000); + gCurrentPinballGame->ball->velocity.x = (gCurrentPinballGame->ball->velocity.x * 4) / 5; + gCurrentPinballGame->ball->velocity.y = (gCurrentPinballGame->ball->velocity.y * 4) / 5; + + if (gCurrentPinballGame->unk38C < 1800) + { + gCurrentPinballGame->unk38A = 0; + gCurrentPinballGame->unk38C += 32; + } + + if (gCurrentPinballGame->unk458[i] < 180) + { + gCurrentPinballGame->unk458[i]++; + } + else + { + gCurrentPinballGame->unk458[i] = 0; + gCurrentPinballGame->unk441[i] = 4; + gCurrentPinballGame->unk5AC /= 2; + gCurrentPinballGame->ball->positionQ8.y = 0xA500; + } + break; + } + case 4: + if (gCurrentPinballGame->unk458[i] < 130) + { + if (gCurrentPinballGame->unk458[i] == 10) + m4aSongNumStart(SE_UNKNOWN_0x12C); + + gCurrentPinballGame->unk38A--; + gCurrentPinballGame->unk38C += gCurrentPinballGame->unk38A; + if (gCurrentPinballGame->unk38C <= 0) + { + gCurrentPinballGame->unk38C = 0; + gCurrentPinballGame->ball->velocity.y = -((gCurrentPinballGame->unk38A * 0x80) / 10) / 2; + gCurrentPinballGame->unk1F = 0; + gCurrentPinballGame->unk458[i] = 0; + gCurrentPinballGame->ball->velocity.x = 0; + gCurrentPinballGame->unk441[i] = 0; + gCurrentPinballGame->unk5FA = 0; + sub_11B0(8); + } + + gCurrentPinballGame->unk458[i]++; + } + break; + case 5: + sp0 = gCurrentPinballGame->unk458[i] / 6 + 7; + if (gCurrentPinballGame->unk458[i] < 11) + { + gCurrentPinballGame->unk458[i]++; + } + else + { + gCurrentPinballGame->unk458[i] = 0; + gCurrentPinballGame->unk441[i] = 0; + } + break; + } + + if (group->available) + { + DmaCopy16(3, gUnknown_084A6EEC[sp0], (void *)0x06011EA0, 0x280); + group->baseX = gCurrentPinballGame->unk45C[i].x / 10 - gCurrentPinballGame->unk58; + group->baseY = gCurrentPinballGame->unk45C[i].y / 10 - gCurrentPinballGame->unk5A; + for (j = 0; j < 2; j++) + { + oamSimple = &group->oam[j]; + gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX; + gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY; + } + + if (gCurrentPinballGame->unk441[i] == 0) + group->available = 0; + + if (gCurrentPinballGame->unk505 && i == (gCurrentPinballGame->unk505 - 1)) + group->available = 0; + } + } + + sub_417F8(); + group = &gMain.spriteGroups[20]; + if (group->available) + { + s16 a; + group->baseX = gCurrentPinballGame->unk520.x / 10 - gCurrentPinballGame->unk58; + group->baseY = gCurrentPinballGame->unk520.y / 10 - gCurrentPinballGame->unk5A; + a = gCurrentPinballGame->unk50E / 5; + for (j = 0; j < 5; j++) + { + oamSimple = &group->oam[j]; + dst = (u16*)&gOamBuffer[oamSimple->oamId]; + src = gUnknown_086B5CC0[a][j]; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + + gOamBuffer[oamSimple->oamId].x += group->baseX; + gOamBuffer[oamSimple->oamId].y += group->baseY; + } + + if (gCurrentPinballGame->unk50E < 25) + { + gCurrentPinballGame->unk50E++; + if (gCurrentPinballGame->unk50E == 25) + group->available = 0; + } + } + + if (gCurrentPinballGame->unk505) + { + gCurrentPinballGame->unk505 = 0; + gCurrentPinballGame->unk50E = 0; + group->available = 1; + } +} + void sub_41580(void) { s16 i; @@ -375,7 +898,7 @@ void sub_417F8(void) gMain.spriteGroups[25].available = 0; gMain.spriteGroups[26].available = 1; gMain.spriteGroups[27].available = 1; - if (gCurrentPinballGame->unk441 < 3 && gCurrentPinballGame->unk442 < 3 && gCurrentPinballGame->unk388 == 0) + if (gCurrentPinballGame->unk441[0] < 3 && gCurrentPinballGame->unk441[1] < 3 && gCurrentPinballGame->unk388 == 0) { gCurrentPinballGame->ball->velocity.x += 500; sub_11B0(13); @@ -404,7 +927,7 @@ void sub_417F8(void) gMain.spriteGroups[31].available = 0; gMain.spriteGroups[32].available = 1; gMain.spriteGroups[33].available = 1; - if (gCurrentPinballGame->unk441 < 3 && gCurrentPinballGame->unk442 < 3 && gCurrentPinballGame->unk388 == 0) + if (gCurrentPinballGame->unk441[0] < 3 && gCurrentPinballGame->unk441[1] < 3 && gCurrentPinballGame->unk388 == 0) { gCurrentPinballGame->ball->velocity.x -= 500; sub_11B0(13); @@ -428,34 +951,34 @@ void sub_417F8(void) if (gCurrentPinballGame->unk514 == 10) { - if (gCurrentPinballGame->unk441 < 3) + if (gCurrentPinballGame->unk441[0] < 3) { - gCurrentPinballGame->unk458 = 0; - gCurrentPinballGame->unk441 = 1; + gCurrentPinballGame->unk458[0] = 0; + gCurrentPinballGame->unk441[0] = 1; gMain.spriteGroups[15].available = 1; rand = Random() % 8; var0 = ((gMain.systemFrameCount % 240) << 0x10) / 240; - gCurrentPinballGame->unk464.x = gUnknown_086AF744[rand].x; - gCurrentPinballGame->unk464.y = gUnknown_086AF744[rand].y; - gCurrentPinballGame->unk45C.x = gCurrentPinballGame->unk464.x + (Cos(var0) * 4) / 2000; - gCurrentPinballGame->unk45C.y = gCurrentPinballGame->unk464.y + (Sin(var0) * 4) / 2000; + gCurrentPinballGame->unk464[0].x = gUnknown_086AF744[rand].x; + gCurrentPinballGame->unk464[0].y = gUnknown_086AF744[rand].y; + gCurrentPinballGame->unk45C[0].x = gCurrentPinballGame->unk464[0].x + (Cos(var0) * 4) / 2000; + gCurrentPinballGame->unk45C[0].y = gCurrentPinballGame->unk464[0].y + (Sin(var0) * 4) / 2000; m4aSongNumStart(SE_UNKNOWN_0x12D); } } if (gCurrentPinballGame->unk514 == 16) { - if (gCurrentPinballGame->unk442 < 3) + if (gCurrentPinballGame->unk441[1] < 3) { - gCurrentPinballGame->unk45A = 0; - gCurrentPinballGame->unk442 = 1; + gCurrentPinballGame->unk458[1] = 0; + gCurrentPinballGame->unk441[1] = 1; gMain.spriteGroups[16].available = 1; rand = (Random() % 8 + 8) % 32; // Force 8 to be added to r1 var0 = (((gMain.systemFrameCount + 120) % 240) << 0x10) / 240; - gCurrentPinballGame->unk468.x = gUnknown_086AF744[rand].x; - gCurrentPinballGame->unk468.y = gUnknown_086AF744[rand].y; - gCurrentPinballGame->unk460.x = gCurrentPinballGame->unk468.x + (Cos(var0) * 4) / 2000; - gCurrentPinballGame->unk460.y = gCurrentPinballGame->unk468.y + (Sin(var0) * 4) / 2000; + gCurrentPinballGame->unk464[1].x = gUnknown_086AF744[rand].x; + gCurrentPinballGame->unk464[1].y = gUnknown_086AF744[rand].y; + gCurrentPinballGame->unk45C[1].x = gCurrentPinballGame->unk464[1].x + (Cos(var0) * 4) / 2000; + gCurrentPinballGame->unk45C[1].y = gCurrentPinballGame->unk464[1].y + (Sin(var0) * 4) / 2000; m4aSongNumStart(SE_UNKNOWN_0x12D); } }