From be427ea3c88e7c4bf8b2ff2fd3ef044abc99bcb3 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 10 Aug 2025 18:10:35 -0500 Subject: [PATCH] sub_39A40 --- asm/rom_3219C.s | 2317 ------------------------------------- expected_objs/sub_39A40.o | Bin 14972 -> 0 bytes include/global.h | 13 +- src/rom_49A34.c | 490 ++++++++ 4 files changed, 500 insertions(+), 2320 deletions(-) delete mode 100644 expected_objs/sub_39A40.o diff --git a/asm/rom_3219C.s b/asm/rom_3219C.s index 2696df0..244c2a7 100644 --- a/asm/rom_3219C.s +++ b/asm/rom_3219C.s @@ -5556,2320 +5556,3 @@ _08039A2C: bx r0 .align 2, 0 _08039A3C: .4byte gCurrentPinballGame - - thumb_func_start sub_39A40 -sub_39A40: @ 0x08039A40 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x40 - movs r0, #0 - str r0, [sp, #4] - ldr r1, _08039A84 @ =gMain+0xA28 @gMain.spriteGroups[10] - str r1, [sp] - ldrh r0, [r1] - movs r2, #0x8a - lsls r2, r2, #3 - adds r1, r1, r2 - mov ip, r1 - cmp r0, #0 - bne _08039A64 - b _08039BF8 -_08039A64: - ldr r0, _08039A88 @ =gCurrentPinballGame - ldr r1, [r0] - ldr r3, _08039A8C @ =0x000006C4 - adds r1, r1, r3 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - cmp r1, #3 - bne _08039A90 - movs r0, #0xf0 - ldr r4, [sp] - strh r0, [r4, #2] - movs r0, #0xb4 - strh r0, [r4, #4] - b _08039A9A - .align 2, 0 -_08039A84: .4byte gMain+0xA28 @gMain.spriteGroups[10] -_08039A88: .4byte gCurrentPinballGame -_08039A8C: .4byte 0x000006C4 -_08039A90: - movs r0, #0x60 - ldr r5, [sp] - strh r0, [r5, #2] - movs r0, #0x37 - strh r0, [r5, #4] -_08039A9A: - ldr r6, _08039C24 @ =gCurrentPinballGame - ldr r1, [r6] - ldr r7, [sp] - ldrh r2, [r7, #2] - ldr r3, _08039C28 @ =0x000006E4 - adds r0, r1, r3 - strh r2, [r0] - ldrh r0, [r7, #4] - ldr r4, _08039C2C @ =0x000006E6 - adds r1, r1, r4 - strh r0, [r1] - movs r5, #4 - ldrsh r0, [r7, r5] - cmp r0, #0xc7 - ble _08039ABC - movs r0, #0xc8 - strh r0, [r7, #4] -_08039ABC: - movs r2, #0 - ldr r6, _08039C30 @ =gMain+0x970 @gMain.spriteGroups[9] - mov sl, r6 - movs r7, #0xa1 - lsls r7, r7, #3 - add r7, sl - mov ip, r7 - ldr r5, _08039C34 @ =gOamBuffer - movs r0, #3 - mov r8, r0 - movs r1, #0xd - rsbs r1, r1, #0 - mov sb, r1 -_08039AD6: - lsls r4, r2, #0x10 - asrs r4, r4, #0x10 - lsls r0, r4, #3 - adds r0, #8 - ldr r2, [sp] - 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 r7, _08039C24 @ =gCurrentPinballGame - ldr r0, [r7] - ldr r1, _08039C38 @ =0x000006DB - adds r0, r0, r1 - ldrb r1, [r0] - mov r2, r8 - ands r1, r2 - lsls r1, r1, #2 - ldrb r2, [r3, #5] - mov r0, sb - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #5] - ldrh r3, [r6] - lsls r3, r3, #3 - adds r3, r3, r5 - movs r7, #2 - ldrsh r1, [r6, r7] - ldr r2, [sp] - movs r7, #2 - ldrsh r0, [r2, r7] - adds r1, r1, r0 - ldr r2, _08039C3C @ =0x000001FF - adds r0, r2, #0 - ands r1, r0 - ldrh r2, [r3, #2] - ldr r0, _08039C40 @ =0xFFFFFE00 - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r6] - lsls r1, r1, #3 - adds r1, r1, r5 - ldr r3, [sp] - 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 _08039AD6 - mov r4, sl - str r4, [sp] - ldr r5, _08039C24 @ =gCurrentPinballGame - ldr r0, [r5] - ldr r6, _08039C28 @ =0x000006E4 - adds r0, r0, r6 - ldrh r0, [r0] - subs r0, #8 - strh r0, [r4, #2] - ldr r0, [r5] - ldr r7, _08039C2C @ =0x000006E6 - adds r0, r0, r7 - ldrh r0, [r0] - subs r0, #8 - strh r0, [r4, #4] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0xc7 - ble _08039B7C - movs r0, #0xc8 - strh r0, [r4, #4] -_08039B7C: - movs r2, #0 - ldr r5, _08039C34 @ =gOamBuffer - movs r0, #3 - mov r8, r0 - movs r1, #0xd - rsbs r1, r1, #0 - mov sb, r1 - ldr r3, _08039C40 @ =0xFFFFFE00 - mov sl, r3 -_08039B8E: - lsls r4, r2, #0x10 - asrs r4, r4, #0x10 - lsls r0, r4, #3 - adds r0, #8 - ldr r7, [sp] - adds r6, r7, r0 - ldrh r3, [r6] - lsls r3, r3, #3 - adds r3, r3, r5 - ldr r1, _08039C24 @ =gCurrentPinballGame - ldr r0, [r1] - ldr r2, _08039C38 @ =0x000006DB - adds r0, r0, r2 - ldrb r1, [r0] - mov r7, r8 - ands r1, r7 - lsls r1, r1, #2 - ldrb r2, [r3, #5] - mov r0, sb - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #5] - ldrh r3, [r6] - lsls r3, r3, #3 - adds r3, r3, r5 - movs r0, #2 - ldrsh r1, [r6, r0] - ldr r2, [sp] - movs r7, #2 - ldrsh r0, [r2, r7] - adds r1, r1, r0 - ldr r2, _08039C3C @ =0x000001FF - adds r0, r2, #0 - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, sl - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r6] - lsls r1, r1, #3 - adds r1, r1, r5 - ldr r3, [sp] - 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 _08039B8E -_08039BF8: - mov r4, ip - str r4, [sp] - ldrh r0, [r4] - cmp r0, #0 - bne _08039C04 - b _0803A14E -_08039C04: - ldr r1, _08039C24 @ =gCurrentPinballGame - ldr r0, [r1] - ldr r5, _08039C44 @ =0x00000445 - adds r0, r0, r5 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #7 - bls _08039C18 - b _08039EBA -_08039C18: - lsls r0, r0, #2 - ldr r1, _08039C48 @ =_08039C4C - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08039C24: .4byte gCurrentPinballGame -_08039C28: .4byte 0x000006E4 -_08039C2C: .4byte 0x000006E6 -_08039C30: .4byte gMain+0x970 @gMain.spriteGroups[9] -_08039C34: .4byte gOamBuffer -_08039C38: .4byte 0x000006DB -_08039C3C: .4byte 0x000001FF -_08039C40: .4byte 0xFFFFFE00 -_08039C44: .4byte 0x00000445 -_08039C48: .4byte _08039C4C -_08039C4C: @ jump table - .4byte _08039C6C @ case 0 - .4byte _08039CFC @ case 1 - .4byte _08039D30 @ case 2 - .4byte _08039D90 @ case 3 - .4byte _08039DC0 @ case 4 - .4byte _08039E20 @ case 5 - .4byte _08039E50 @ case 6 - .4byte _08039EB0 @ case 7 -_08039C6C: - ldr r6, _08039CD0 @ =gCurrentPinballGame - ldr r0, [r6] - ldr r7, _08039CD4 @ =0x00000449 - adds r0, r0, r7 - movs r2, #0 - strb r2, [r0] - ldr r0, [r6] - ldr r1, _08039CD8 @ =0x00000446 - adds r0, r0, r1 - movs r1, #5 - strb r1, [r0] - ldr r0, [r6] - ldr r3, _08039CDC @ =0x00000447 - adds r0, r0, r3 - movs r1, #1 - strb r1, [r0] - ldr r0, [r6] - ldr r4, _08039CE0 @ =0x0000044A - adds r0, r0, r4 - strb r2, [r0] - ldr r1, [r6] - ldr r5, _08039CE4 @ =0x0000044E - adds r0, r1, r5 - strh r2, [r0] - movs r6, #0x89 - lsls r6, r6, #3 - adds r0, r1, r6 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #2 - beq _08039CAE - b _08039EBA -_08039CAE: - ldr r2, _08039CE8 @ =0x040000D4 - ldr r7, _08039CEC @ =0x000005F6 - adds r0, r1, r7 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #8 - lsls r0, r0, #5 - ldr r1, _08039CF0 @ =gUnknown_08137E14 - adds r0, r0, r1 - str r0, [r2] - ldr r0, _08039CF4 @ =0x05000220 - str r0, [r2, #4] - ldr r0, _08039CF8 @ =0x80000010 - str r0, [r2, #8] - ldr r0, [r2, #8] - b _08039EBA - .align 2, 0 -_08039CD0: .4byte gCurrentPinballGame -_08039CD4: .4byte 0x00000449 -_08039CD8: .4byte 0x00000446 -_08039CDC: .4byte 0x00000447 -_08039CE0: .4byte 0x0000044A -_08039CE4: .4byte 0x0000044E -_08039CE8: .4byte 0x040000D4 -_08039CEC: .4byte 0x000005F6 -_08039CF0: .4byte gUnknown_08137E14 -_08039CF4: .4byte 0x05000220 -_08039CF8: .4byte 0x80000010 -_08039CFC: - ldr r1, _08039D20 @ =gCurrentPinballGame - ldr r0, [r1] - ldr r2, _08039D24 @ =0x0000044A - adds r0, r0, r2 - movs r1, #4 - strb r1, [r0] - ldr r3, _08039D20 @ =gCurrentPinballGame - ldr r1, [r3] - ldr r4, _08039D28 @ =0x0000044E - adds r2, r1, r4 - movs r0, #0x5a - strh r0, [r2] - ldr r5, _08039D2C @ =0x00000445 - adds r1, r1, r5 - movs r0, #2 - strb r0, [r1] - b _08039EBA - .align 2, 0 -_08039D20: .4byte gCurrentPinballGame -_08039D24: .4byte 0x0000044A -_08039D28: .4byte 0x0000044E -_08039D2C: .4byte 0x00000445 -_08039D30: - ldr r0, _08039D78 @ =gCurrentPinballGame - ldr r1, [r0] - ldrh r0, [r1, #4] - cmp r0, #0 - beq _08039D54 - ldr r6, _08039D7C @ =0x0000044E - adds r1, r1, r6 - ldrh r0, [r1] - subs r0, #0x5a - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bge _08039D4E - movs r0, #0 - strh r0, [r1] -_08039D4E: - ldr r0, _08039D80 @ =0x00000111 - bl m4aSongNumStart -_08039D54: - ldr r2, _08039D78 @ =gCurrentPinballGame - ldr r0, [r2] - ldr r7, _08039D84 @ =0x00000449 - adds r0, r0, r7 - movs r1, #5 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _08039D88 @ =0x00000446 - adds r0, r0, r1 - movs r1, #9 - strb r1, [r0] - ldr r0, [r2] - ldr r3, _08039D8C @ =0x00000447 - adds r0, r0, r3 - movs r1, #3 - strb r1, [r0] - b _08039EBA - .align 2, 0 -_08039D78: .4byte gCurrentPinballGame -_08039D7C: .4byte 0x0000044E -_08039D80: .4byte 0x00000111 -_08039D84: .4byte 0x00000449 -_08039D88: .4byte 0x00000446 -_08039D8C: .4byte 0x00000447 -_08039D90: - ldr r4, _08039DB0 @ =gCurrentPinballGame - ldr r0, [r4] - ldr r5, _08039DB4 @ =0x0000044A - adds r0, r0, r5 - movs r3, #4 - strb r3, [r0] - ldr r0, [r4] - ldr r6, _08039DB8 @ =0x0000044E - adds r2, r0, r6 - movs r1, #0x5a - strh r1, [r2] - ldr r7, _08039DBC @ =0x00000445 - adds r0, r0, r7 - strb r3, [r0] - b _08039EBA - .align 2, 0 -_08039DB0: .4byte gCurrentPinballGame -_08039DB4: .4byte 0x0000044A -_08039DB8: .4byte 0x0000044E -_08039DBC: .4byte 0x00000445 -_08039DC0: - ldr r0, _08039E08 @ =gCurrentPinballGame - ldr r1, [r0] - ldrh r0, [r1, #4] - cmp r0, #0 - beq _08039DE4 - ldr r0, _08039E0C @ =0x0000044E - adds r1, r1, r0 - ldrh r0, [r1] - subs r0, #0x5a - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bge _08039DDE - movs r0, #0 - strh r0, [r1] -_08039DDE: - ldr r0, _08039E10 @ =0x00000111 - bl m4aSongNumStart -_08039DE4: - ldr r2, _08039E08 @ =gCurrentPinballGame - ldr r0, [r2] - ldr r1, _08039E14 @ =0x00000449 - adds r0, r0, r1 - movs r1, #9 - strb r1, [r0] - ldr r0, [r2] - ldr r3, _08039E18 @ =0x00000446 - adds r0, r0, r3 - movs r1, #0xd - strb r1, [r0] - ldr r0, [r2] - ldr r4, _08039E1C @ =0x00000447 - adds r0, r0, r4 - movs r1, #5 - strb r1, [r0] - b _08039EBA - .align 2, 0 -_08039E08: .4byte gCurrentPinballGame -_08039E0C: .4byte 0x0000044E -_08039E10: .4byte 0x00000111 -_08039E14: .4byte 0x00000449 -_08039E18: .4byte 0x00000446 -_08039E1C: .4byte 0x00000447 -_08039E20: - ldr r5, _08039E40 @ =gCurrentPinballGame - ldr r0, [r5] - ldr r6, _08039E44 @ =0x0000044A - adds r0, r0, r6 - movs r1, #0 - strb r1, [r0] - ldr r1, [r5] - ldr r7, _08039E48 @ =0x0000044E - adds r2, r1, r7 - movs r0, #0x5a - strh r0, [r2] - ldr r0, _08039E4C @ =0x00000445 - adds r1, r1, r0 - movs r0, #6 - strb r0, [r1] - b _08039EBA - .align 2, 0 -_08039E40: .4byte gCurrentPinballGame -_08039E44: .4byte 0x0000044A -_08039E48: .4byte 0x0000044E -_08039E4C: .4byte 0x00000445 -_08039E50: - ldr r0, _08039E98 @ =gCurrentPinballGame - ldr r1, [r0] - ldrh r0, [r1, #4] - cmp r0, #0 - beq _08039E74 - ldr r2, _08039E9C @ =0x0000044E - adds r1, r1, r2 - ldrh r0, [r1] - subs r0, #0x5a - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bge _08039E6E - movs r0, #0 - strh r0, [r1] -_08039E6E: - ldr r0, _08039EA0 @ =0x00000111 - bl m4aSongNumStart -_08039E74: - ldr r2, _08039E98 @ =gCurrentPinballGame - ldr r0, [r2] - ldr r3, _08039EA4 @ =0x00000449 - adds r0, r0, r3 - movs r1, #0xd - strb r1, [r0] - ldr r0, [r2] - ldr r4, _08039EA8 @ =0x00000446 - adds r0, r0, r4 - movs r1, #0x13 - strb r1, [r0] - ldr r0, [r2] - ldr r5, _08039EAC @ =0x00000447 - adds r0, r0, r5 - movs r1, #7 - strb r1, [r0] - b _08039EBA - .align 2, 0 -_08039E98: .4byte gCurrentPinballGame -_08039E9C: .4byte 0x0000044E -_08039EA0: .4byte 0x00000111 -_08039EA4: .4byte 0x00000449 -_08039EA8: .4byte 0x00000446 -_08039EAC: .4byte 0x00000447 -_08039EB0: - ldr r0, _08039EE0 @ =gMain - ldr r6, _08039EE4 @ =0x00000E78 - adds r0, r0, r6 - movs r1, #0 - strh r1, [r0] -_08039EBA: - ldr r7, _08039EE8 @ =gCurrentPinballGame - ldr r4, [r7] - ldr r0, _08039EEC @ =0x0000044E - adds r1, r4, r0 - ldrh r2, [r1] - movs r3, #0 - ldrsh r0, [r1, r3] - cmp r0, #0 - ble _08039EF4 - subs r0, r2, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - beq _08039ED8 - b _08039FF4 -_08039ED8: - ldr r0, _08039EF0 @ =0x00000111 - bl m4aSongNumStart - b _08039FF4 - .align 2, 0 -_08039EE0: .4byte gMain -_08039EE4: .4byte 0x00000E78 -_08039EE8: .4byte gCurrentPinballGame -_08039EEC: .4byte 0x0000044E -_08039EF0: .4byte 0x00000111 -_08039EF4: - ldr r2, _08039F20 @ =gUnknown_086AEE5E - movs r5, #0x89 - lsls r5, r5, #3 - adds r3, r4, r5 - movs r1, #0 - ldrsb r1, [r3, r1] - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #1 - adds r2, #2 - adds r0, r0, r2 - movs r6, #0 - ldrsh r0, [r0, r6] - ldr r7, _08039F24 @ =0x00000454 - adds r1, r4, r7 - ldrh r2, [r1] - cmp r0, r2 - ble _08039F28 - adds r0, r2, #1 - strh r0, [r1] - b _08039FF4 - .align 2, 0 -_08039F20: .4byte gUnknown_086AEE5E -_08039F24: .4byte 0x00000454 -_08039F28: - movs r0, #0 - strh r0, [r1] - ldrb r0, [r3] - adds r0, #1 - strb r0, [r3] - ldr r0, _08039F74 @ =gCurrentPinballGame - ldr r2, [r0] - movs r1, #0x89 - lsls r1, r1, #3 - adds r3, r2, r1 - ldr r4, _08039F78 @ =0x00000446 - adds r0, r2, r4 - movs r1, #0 - ldrsb r1, [r3, r1] - ldrb r4, [r0] - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r1, r0 - bne _08039FA4 - ldr r5, _08039F7C @ =0x0000044A - adds r0, r2, r5 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _08039F84 - ldr r6, _08039F80 @ =0x00000449 - adds r0, r2, r6 - ldrb r0, [r0] - strb r0, [r3] - ldr r7, _08039F74 @ =gCurrentPinballGame - ldr r1, [r7] - adds r1, r1, r5 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - b _08039F98 - .align 2, 0 -_08039F74: .4byte gCurrentPinballGame -_08039F78: .4byte 0x00000446 -_08039F7C: .4byte 0x0000044A -_08039F80: .4byte 0x00000449 -_08039F84: - subs r0, r4, #1 - strb r0, [r3] - ldr r1, _0803A028 @ =gCurrentPinballGame - ldr r0, [r1] - ldr r2, _0803A02C @ =0x00000447 - adds r1, r0, r2 - ldrb r1, [r1] - ldr r3, _0803A030 @ =0x00000445 - adds r0, r0, r3 - strb r1, [r0] -_08039F98: - ldr r4, _0803A028 @ =gCurrentPinballGame - ldr r0, [r4] - ldr r5, _0803A034 @ =0x0000044E - adds r0, r0, r5 - movs r1, #0x5a - strh r1, [r0] -_08039FA4: - ldr r5, _0803A028 @ =gCurrentPinballGame - ldr r0, [r5] - movs r4, #0x89 - lsls r4, r4, #3 - adds r0, r0, r4 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #1 - bne _08039FC0 - movs r0, #0x88 - lsls r0, r0, #1 - bl m4aSongNumStart -_08039FC0: - ldr r1, [r5] - adds r0, r1, r4 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0xf - bne _08039FF4 - ldr r2, _0803A038 @ =0x040000D4 - ldr r6, _0803A03C @ =0x000005F6 - adds r0, r1, r6 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - lsls r0, r0, #5 - ldr r1, _0803A040 @ =gUnknown_08137E14 - adds r0, r0, r1 - str r0, [r2] - ldr r0, _0803A044 @ =0x05000220 - str r0, [r2, #4] - ldr r0, _0803A048 @ =0x80000010 - str r0, [r2, #8] - ldr r0, [r2, #8] - movs r0, #0x89 - lsls r0, r0, #1 - bl m4aSongNumStart -_08039FF4: - ldr r0, _0803A028 @ =gCurrentPinballGame - ldr r3, [r0] - movs r7, #0x89 - lsls r7, r7, #3 - adds r1, r3, r7 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - cmp r1, #0x11 - bgt _0803A054 - ldr r0, _0803A04C @ =0x00000383 - adds r1, r3, r0 - movs r2, #0 - movs r0, #1 - strb r0, [r1] - ldr r1, _0803A028 @ =gCurrentPinballGame - ldr r0, [r1] - ldr r3, _0803A050 @ =0x0000132C - adds r0, r0, r3 - ldr r1, [r0] - strh r2, [r1, #0x30] - ldr r1, [r0] - strh r2, [r1, #0x32] - ldr r0, [r0] - strh r2, [r0, #6] - b _0803A05C - .align 2, 0 -_0803A028: .4byte gCurrentPinballGame -_0803A02C: .4byte 0x00000447 -_0803A030: .4byte 0x00000445 -_0803A034: .4byte 0x0000044E -_0803A038: .4byte 0x040000D4 -_0803A03C: .4byte 0x000005F6 -_0803A040: .4byte gUnknown_08137E14 -_0803A044: .4byte 0x05000220 -_0803A048: .4byte 0x80000010 -_0803A04C: .4byte 0x00000383 -_0803A050: .4byte 0x0000132C -_0803A054: - ldr r4, _0803A194 @ =0x00000383 - adds r1, r3, r4 - movs r0, #0 - strb r0, [r1] -_0803A05C: - ldr r5, _0803A198 @ =gCurrentPinballGame - ldr r0, [r5] - ldr r6, _0803A19C @ =0x0000132C - adds r0, r0, r6 - ldr r1, [r0] - ldrh r1, [r1, #0x24] - ldr r7, [sp] - strh r1, [r7, #2] - ldr r0, [r0] - ldrh r0, [r0, #0x26] - strh r0, [r7, #4] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0xc7 - ble _0803A07E - movs r0, #0xc8 - strh r0, [r7, #4] -_0803A07E: - ldr r4, _0803A1A0 @ =gUnknown_086AEE5E - ldr r1, _0803A198 @ =gCurrentPinballGame - ldr r0, [r1] - movs r3, #0x89 - lsls r3, r3, #3 - adds r0, r0, r3 - movs r1, #0 - ldrsb r1, [r0, r1] - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #1 - adds r1, r4, #4 - adds r0, r0, r1 - ldr r2, _0803A1A4 @ =0x040000D4 - ldrh r5, [r0] - str r5, [sp, #4] - movs r6, #0 - ldrsh r1, [r0, r6] - lsls r0, r1, #4 - subs r0, r0, r1 - lsls r0, r0, #6 - ldr r1, _0803A1A8 @ =gUnknown_083C1A6C - adds r0, r0, r1 - str r0, [r2] - ldr r0, _0803A1AC @ =0x060124E0 - str r0, [r2, #4] - ldr r0, _0803A1B0 @ =0x800001E0 - str r0, [r2, #8] - ldr r0, [r2, #8] - ldr r7, _0803A198 @ =gCurrentPinballGame - ldr r0, [r7] - adds r0, r0, r3 - movs r1, #0 - ldrsb r1, [r0, r1] - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #1 - adds r0, r0, r4 - movs r2, #0 - ldr r1, _0803A1B4 @ =gUnknown_086B91AC - mov sb, r1 - ldr r5, _0803A1B8 @ =gOamBuffer - movs r3, #0 - ldrsh r1, [r0, r3] - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #3 - mov sl, r0 - ldr r4, _0803A1BC @ =0xFFFFFE00 - mov r8, r4 -_0803A0E2: - lsls r3, r2, #0x10 - asrs r3, r3, #0x10 - lsls r0, r3, #3 - adds r0, #8 - ldr r7, [sp] - adds r6, r7, r0 - ldrh r2, [r6] - lsls r2, r2, #3 - adds r2, r2, r5 - lsls r0, r3, #1 - adds r0, r0, r3 - lsls r0, r0, #1 - add r0, sb - add r0, sl - ldrh r1, [r0] - strh r1, [r2] - adds r0, #2 - adds r2, #2 - ldrh r1, [r0] - strh r1, [r2] - ldrh r0, [r0, #2] - strh r0, [r2, #2] - ldrh r2, [r6] - lsls r2, r2, #3 - adds r2, r2, r5 - ldrh r4, [r2, #2] - lsls r1, r4, #0x17 - lsrs r1, r1, #0x17 - mov ip, r1 - movs r1, #2 - ldrsh r0, [r7, r1] - mov r7, ip - adds r1, r7, r0 - ldr r7, _0803A1C0 @ =0x000001FF - adds r0, r7, #0 - ands r1, r0 - 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 r2, [sp] - 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, #3 - ble _0803A0E2 -_0803A14E: - movs r2, #0 -_0803A150: @ 0x0803A150, bl-ed to but not subroutine? - lsls r2, r2, #0x10 - asrs r3, r2, #0x10 - movs r0, #0xb8 - adds r1, r3, #0 - muls r1, r0, r1 - ldr r0, _0803A1C4 @ =gMain+0x12C8 @gMain.spriteGroups[22] - adds r1, r1, r0 - str r1, [sp] - ldr r5, _0803A1C8 @ =0xFFFFED38 - adds r0, r0, r5 - ldrb r1, [r0, #0xf] - movs r0, #0x80 - ands r0, r1 - str r2, [sp, #0x3c] - cmp r0, #0 - beq _0803A174 - bl _0803A9A6 -_0803A174: - ldr r0, _0803A198 @ =gCurrentPinballGame - ldr r0, [r0] - ldr r6, _0803A1CC @ =0x00000441 - adds r0, r0, r6 - adds r0, r0, r3 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #5 - bls _0803A18A - b _0803A8A2 -_0803A18A: - lsls r0, r0, #2 - ldr r1, _0803A1D0 @ =_0803A1D4 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803A194: .4byte 0x00000383 -_0803A198: .4byte gCurrentPinballGame -_0803A19C: .4byte 0x0000132C -_0803A1A0: .4byte gUnknown_086AEE5E -_0803A1A4: .4byte 0x040000D4 -_0803A1A8: .4byte gUnknown_083C1A6C -_0803A1AC: .4byte 0x060124E0 -_0803A1B0: .4byte 0x800001E0 -_0803A1B4: .4byte gUnknown_086B91AC -_0803A1B8: .4byte gOamBuffer -_0803A1BC: .4byte 0xFFFFFE00 -_0803A1C0: .4byte 0x000001FF -_0803A1C4: .4byte gMain+0x12C8 @gMain.spriteGroups[22] -_0803A1C8: .4byte 0xFFFFED38 -_0803A1CC: .4byte 0x00000441 -_0803A1D0: .4byte _0803A1D4 -_0803A1D4: @ jump table - .4byte _0803A1EC @ case 0 - .4byte _0803A218 @ case 1 - .4byte _0803A2E4 @ case 2 - .4byte _0803A4F0 @ case 3 - .4byte _0803A6B8 @ case 4 - .4byte _0803A860 @ case 5 -_0803A1EC: - movs r7, #0 - str r7, [sp, #4] - ldr r0, _0803A20C @ =gCurrentPinballGame - ldr r1, [r0] - ldr r2, [sp, #0x3c] - asrs r0, r2, #0xe - adds r1, r1, r0 - ldr r3, _0803A210 @ =0x0000045C - adds r0, r1, r3 - strh r7, [r0] - ldr r5, _0803A214 @ =0x0000045E - adds r1, r1, r5 - mov r6, sp - ldrh r6, [r6, #4] - strh r6, [r1] - b _0803A8A2 - .align 2, 0 -_0803A20C: .4byte gCurrentPinballGame -_0803A210: .4byte 0x0000045C -_0803A214: .4byte 0x0000045E -_0803A218: - ldr r7, _0803A248 @ =gCurrentPinballGame - mov r8, r7 - mov r0, r8 - ldr r6, [r0] - ldr r1, [sp, #0x3c] - asrs r7, r1, #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, #9 - bl __udivsi3 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - str r0, [sp, #4] - cmp r4, #0x61 - bhi _0803A24C - adds r0, r4, #1 - strh r0, [r5] - b _0803A2AA - .align 2, 0 -_0803A248: .4byte gCurrentPinballGame -_0803A24C: - movs r0, #0 - strh r0, [r5] - ldr r3, _0803A2C4 @ =0x00000441 - adds r0, r6, r3 - adds r0, r0, r7 - movs r1, #2 - strb r1, [r0] - bl Random - mov r4, r8 - ldr r5, [r4] - ldr r6, _0803A2C8 @ =0x00000443 - adds r5, r5, r6 - adds r5, r5, r7 - lsls r4, r7, #3 - subs r4, r4, r7 - ldr r1, _0803A2CC @ =gMain - ldr r1, [r1, #0x4c] - adds r0, r0, r1 - movs r1, #7 - bl __umodsi3 - adds r4, r4, r0 - strb r4, [r5] - mov r5, r8 - ldr r1, [r5] - lsls r3, r7, #2 - adds r3, r1, r3 - ldr r4, _0803A2D0 @ =gUnknown_086AEDE8 - adds r1, r1, r6 - adds r1, r1, r7 - movs r0, #0 - ldrsb r0, [r1, r0] - lsls r0, r0, #2 - adds r0, r0, r4 - ldrh r2, [r0] - adds r6, #0x21 - adds r0, r3, r6 - strh r2, [r0] - movs r0, #0 - ldrsb r0, [r1, r0] - lsls r0, r0, #2 - adds r0, r0, r4 - ldrh r0, [r0, #2] - ldr r7, _0803A2D4 @ =0x00000466 - adds r3, r3, r7 - strh r0, [r3] -_0803A2AA: - ldr r0, _0803A2D8 @ =gCurrentPinballGame - ldr r1, [r0] - ldr r2, [sp, #0x3c] - asrs r0, r2, #0xe - adds r1, r1, r0 - ldr r3, _0803A2DC @ =0x0000045C - adds r0, r1, r3 - movs r2, #0 - strh r2, [r0] - ldr r4, _0803A2E0 @ =0x0000045E - adds r1, r1, r4 - strh r2, [r1] - b _0803A8A2 - .align 2, 0 -_0803A2C4: .4byte 0x00000441 -_0803A2C8: .4byte 0x00000443 -_0803A2CC: .4byte gMain -_0803A2D0: .4byte gUnknown_086AEDE8 -_0803A2D4: .4byte 0x00000466 -_0803A2D8: .4byte gCurrentPinballGame -_0803A2DC: .4byte 0x0000045C -_0803A2E0: .4byte 0x0000045E -_0803A2E4: - ldr r5, _0803A4AC @ =gCurrentPinballGame - mov sl, r5 - ldr r7, [r5] - ldr r6, [sp, #0x3c] - asrs r6, r6, #0x10 - mov sb, r6 - lsls r6, r6, #1 - str r6, [sp, #0x20] - movs r1, #0x8b - lsls r1, r1, #3 - adds r0, r7, r1 - adds r0, r0, r6 - ldrh r0, [r0] - movs r1, #0x28 - bl __umodsi3 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x13 - adds r0, #6 - str r0, [sp, #4] - ldr r2, _0803A4B0 @ =0x00000441 - adds r0, r7, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #2 - ble _0803A31C - b _0803A48A -_0803A31C: - ldr r3, _0803A4B4 @ =0x00000442 - adds r0, r7, r3 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #2 - ble _0803A32C - b _0803A48A -_0803A32C: - ldr r4, _0803A4B8 @ =0x0000132C - adds r0, r7, r4 - ldr r6, [r0] - movs r5, #0x10 - ldrsh r4, [r6, r5] - subs r4, #0x78 - mov r0, sb - lsls r0, r0, #2 - str r0, [sp, #0x24] - adds r5, r7, r0 - ldr r1, _0803A4BC @ =0x0000045C - adds r0, r5, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - movs r1, #0xa - bl __divsi3 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - subs r0, r4, r0 - str r0, [sp, #0x10] - movs r3, #0x12 - ldrsh r4, [r6, r3] - subs r4, #0x90 - ldr r6, _0803A4C0 @ =0x0000045E - adds r5, r5, r6 - movs r1, #0 - ldrsh r0, [r5, r1] - movs r1, #0xa - bl __divsi3 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - subs r0, r4, r0 - str r0, [sp, #0x14] - ldr r2, [sp, #0x10] - adds r1, r2, #0 - muls r1, r2, r1 - adds r3, r0, #0 - adds r0, r3, #0 - muls r0, r3, r0 - adds r1, r1, r0 - mov r8, r1 - ldr r4, _0803A4C4 @ =0x00000383 - adds r0, r7, r4 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - bne _0803A48A - movs r5, #0xe2 - lsls r5, r5, #2 - adds r0, r7, r5 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - bne _0803A48A - ldr r1, _0803A4C8 @ =0x00000385 - adds r0, r7, r1 - movs r2, #0xe1 - lsls r2, r2, #2 - adds r1, r7, r2 - movs r2, #0 - ldrsb r2, [r0, r2] - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r2, r0 - bge _0803A48A - ldr r3, _0803A4CC @ =0x00000452 - adds r0, r7, r3 - ldrh r5, [r0] - cmp r5, #0 - bne _0803A48A - ldr r0, _0803A4D0 @ =0x0000018F - cmp r8, r0 - bgt _0803A48A - subs r0, #0x7c - bl m4aSongNumStart - movs r0, #0xc - bl sub_11B0 - mov r4, sl - ldr r0, [r4] - movs r2, #1 - strb r2, [r0, #0x1f] - ldr r1, [r4] - movs r7, #0x8b - lsls r7, r7, #3 - adds r0, r1, r7 - ldr r3, [sp, #0x20] - adds r0, r0, r3 - strh r5, [r0] - ldr r4, _0803A4B0 @ =0x00000441 - adds r1, r1, r4 - add r1, sb - movs r0, #3 - strb r0, [r1] - mov r5, sl - ldr r0, [r5] - ldr r7, _0803A4D4 @ =0x000005FA - adds r0, r0, r7 - strb r2, [r0] - ldr r5, [r5] - ldr r0, [sp, #0x24] - adds r4, r5, r0 - ldr r1, _0803A4BC @ =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, #0x78 - str r0, [sp, #8] - adds r4, r4, r6 - movs r3, #0 - ldrsh r0, [r4, r3] - movs r1, #0xa - bl __divsi3 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r0, #0x90 - str r0, [sp, #0xc] - ldr r4, [sp, #8] - lsls r1, r4, #8 - ldr r6, _0803A4B8 @ =0x0000132C - adds r0, r5, r6 - ldr r2, [r0] - ldr r0, [r2, #0x34] - subs r0, r1, r0 - str r0, [sp, #0x10] - ldr r7, [sp, #0xc] - lsls r1, r7, #8 - ldr r0, [r2, #0x38] - subs r0, r1, r0 - str r0, [sp, #0x14] - ldr r4, _0803A4D8 @ =0x000005AC - adds r5, r5, r4 - ldr r1, [sp, #0x10] - adds r0, r1, #0 - muls r0, r1, r0 - ldr r2, [sp, #0x14] - 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, #0x10] - rsbs r0, r4, #0 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - ldr r5, [sp, #0x14] - lsls r1, r5, #0x10 - asrs r1, r1, #0x10 - bl ArcTan2 - mov r6, sl - ldr r1, [r6] - movs r7, #0xb6 - lsls r7, r7, #3 - adds r1, r1, r7 - strh r0, [r1] -_0803A48A: - ldr r0, _0803A4AC @ =gCurrentPinballGame - ldr r3, [r0] - ldr r0, [sp, #0x3c] - asrs r4, r0, #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, _0803A4C4 @ =0x00000383 - cmp r2, r0 - bhi _0803A4DC - adds r0, r2, #1 - strh r0, [r1] - b _0803A8A2 - .align 2, 0 -_0803A4AC: .4byte gCurrentPinballGame -_0803A4B0: .4byte 0x00000441 -_0803A4B4: .4byte 0x00000442 -_0803A4B8: .4byte 0x0000132C -_0803A4BC: .4byte 0x0000045C -_0803A4C0: .4byte 0x0000045E -_0803A4C4: .4byte 0x00000383 -_0803A4C8: .4byte 0x00000385 -_0803A4CC: .4byte 0x00000452 -_0803A4D0: .4byte 0x0000018F -_0803A4D4: .4byte 0x000005FA -_0803A4D8: .4byte 0x000005AC -_0803A4DC: - movs r0, #0 - strh r0, [r1] - ldr r5, _0803A4EC @ =0x00000441 - adds r0, r3, r5 - adds r0, r0, r4 - movs r1, #5 - b _0803A8A0 - .align 2, 0 -_0803A4EC: .4byte 0x00000441 -_0803A4F0: - ldr r6, _0803A668 @ =gCurrentPinballGame - ldr r4, [r6] - ldr r7, [sp, #0x3c] - asrs r7, r7, #0x10 - str r7, [sp, #0x28] - lsls r0, r7, #1 - str r0, [sp, #0x2c] - movs r1, #0x8b - lsls r1, r1, #3 - adds r0, r4, r1 - ldr r2, [sp, #0x2c] - adds r6, r0, r2 - ldrh r5, [r6] - adds r0, r5, #0 - movs r1, #0x28 - bl __umodsi3 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x13 - adds r0, #6 - str r0, [sp, #4] - ldrh r0, [r4, #4] - cmp r0, #0 - beq _0803A526 - adds r0, r5, #0 - adds r0, #8 - strh r0, [r6] -_0803A526: - ldr r3, _0803A668 @ =gCurrentPinballGame - ldr r7, [r3] - movs r4, #0x8b - lsls r4, r4, #3 - adds r0, r7, r4 - ldr r5, [sp, #0x2c] - adds r0, r0, r5 - 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 _0803A546 - movs r4, #0xa -_0803A546: - movs r6, #0xb6 - lsls r6, r6, #3 - adds r5, r7, r6 - 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 r6, _0803A66C @ =0x0000132C - adds r0, r7, r6 - ldr r1, [r0] - ldr r2, _0803A670 @ =0xFFFFE000 - adds r0, r2, #0 - ldrh r3, [r1, #0xa] - adds r0, r0, r3 - strh r0, [r1, #0xa] - ldr r1, _0803A674 @ =0x000005AC - adds r0, r7, r1 - ldr r0, [r0] - muls r0, r4, r0 - movs r1, #0x1e - bl __divsi3 - mov sl, r0 - ldr r2, [sp, #0x28] - lsls r4, r2, #2 - adds r4, r7, r4 - ldr r3, _0803A678 @ =0x0000045C - adds r0, r4, r3 - movs r7, #0 - ldrsh r0, [r0, r7] - movs r1, #0xa - bl __divsi3 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r0, #0x78 - str r0, [sp, #8] - ldr r0, _0803A67C @ =0x0000045E - adds r4, r4, r0 - movs r1, #0 - ldrsh r0, [r4, r1] - movs r1, #0xa - bl __divsi3 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r0, #0x90 - str r0, [sp, #0xc] - ldrh r0, [r5] - bl Cos - ldr r2, _0803A668 @ =gCurrentPinballGame - ldr r5, [r2] - adds r1, r5, r6 - ldr r1, [r1] - mov r8, r1 - ldr r3, [sp, #8] - lsls r4, r3, #8 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - mov r7, sl - muls r7, r0, r7 - adds r0, r7, #0 - ldr r1, _0803A680 @ =0x00004E20 - mov sb, r1 - bl __divsi3 - adds r4, r4, r0 - mov r2, r8 - str r4, [r2, #0x34] - movs r3, #0xb6 - lsls r3, r3, #3 - adds r5, r5, r3 - ldrh r0, [r5] - bl Sin - ldr r4, _0803A668 @ =gCurrentPinballGame - ldr r7, [r4] - adds r6, r7, r6 - ldr r5, [r6] - ldr r1, [sp, #0xc] - lsls r4, r1, #8 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - mov r2, sl - muls r2, r0, r2 - adds r0, r2, #0 - mov r1, sb - bl __divsi3 - subs r4, r4, r0 - str r4, [r5, #0x38] - ldr r4, [r6] - movs r3, #0x30 - ldrsh r0, [r4, r3] - lsls r0, r0, #2 - movs r1, #5 - bl __divsi3 - strh r0, [r4, #0x30] - ldr r4, [r6] - movs r5, #0x32 - ldrsh r0, [r4, r5] - lsls r0, r0, #2 - movs r1, #5 - bl __divsi3 - strh r0, [r4, #0x32] - movs r6, #0x8b - lsls r6, r6, #3 - adds r0, r7, r6 - ldr r2, [sp, #0x2c] - adds r1, r0, r2 - ldrh r2, [r1] - ldr r0, _0803A684 @ =0x000001DF - cmp r2, r0 - bhi _0803A688 - adds r0, r2, #1 - strh r0, [r1] - ldrh r0, [r1] - movs r1, #9 - bl __umodsi3 - lsls r0, r0, #0x10 - cmp r0, #0 - beq _0803A65E - b _0803A8A2 -_0803A65E: - movs r0, #0xc - bl sub_11B0 - b _0803A8A2 - .align 2, 0 -_0803A668: .4byte gCurrentPinballGame -_0803A66C: .4byte 0x0000132C -_0803A670: .4byte 0xFFFFE000 -_0803A674: .4byte 0x000005AC -_0803A678: .4byte 0x0000045C -_0803A67C: .4byte 0x0000045E -_0803A680: .4byte 0x00004E20 -_0803A684: .4byte 0x000001DF -_0803A688: - movs r3, #0 - strh r3, [r1] - ldr r4, _0803A6AC @ =0x00000441 - adds r0, r7, r4 - ldr r5, [sp, #0x28] - adds r0, r0, r5 - movs r1, #4 - strb r1, [r0] - ldr r6, _0803A6B0 @ =gCurrentPinballGame - ldr r2, [r6] - ldr r7, _0803A6B4 @ =0x000005AC - adds r2, r2, r7 - ldr r0, [r2] - lsrs r1, r0, #0x1f - adds r0, r0, r1 - asrs r0, r0, #1 - str r0, [r2] - b _0803A8A2 - .align 2, 0 -_0803A6AC: .4byte 0x00000441 -_0803A6B0: .4byte gCurrentPinballGame -_0803A6B4: .4byte 0x000005AC -_0803A6B8: - ldr r0, _0803A7EC @ =gCurrentPinballGame - ldr r5, [r0] - ldr r1, [sp, #0x3c] - asrs r1, r1, #0x10 - str r1, [sp, #0x30] - lsls r2, r1, #1 - str r2, [sp, #0x34] - movs r3, #0x8b - lsls r3, r3, #3 - adds r0, r5, r3 - adds r0, r0, r2 - ldrh r2, [r0] - lsrs r1, r2, #3 - movs r0, #5 - subs r0, r0, r1 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - str r0, [sp, #4] - movs r4, #0x2f - subs r4, r4, r2 - movs r7, #0xb6 - lsls r7, r7, #3 - adds r6, r5, r7 - lsls r4, r4, #0x10 - asrs r4, r4, #0x10 - lsls r0, r4, #0xc - movs r1, #0x2f - 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, [r6] - subs r1, r1, r0 - strh r1, [r6] - ldr r0, _0803A7F0 @ =0x0000132C - mov sb, r0 - adds r0, r5, r0 - ldr r1, [r0] - ldr r2, _0803A7F4 @ =0xFFFFE000 - adds r0, r2, #0 - ldrh r3, [r1, #0xa] - adds r0, r0, r3 - strh r0, [r1, #0xa] - ldr r1, _0803A7F8 @ =0x000005AC - adds r0, r5, r1 - ldr r0, [r0] - muls r0, r4, r0 - movs r1, #0x2f - bl __divsi3 - mov sl, r0 - ldr r2, [sp, #0x30] - lsls r0, r2, #2 - adds r5, r5, r0 - ldr r3, _0803A7FC @ =0x0000045C - adds r0, r5, r3 - movs r4, #0 - ldrsh r0, [r0, r4] - movs r1, #0xa - bl __divsi3 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r0, #0x78 - str r0, [sp, #8] - ldr r0, _0803A800 @ =0x0000045E - adds r5, r5, r0 - movs r1, #0 - ldrsh r0, [r5, r1] - movs r1, #0xa - bl __divsi3 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r0, #0x90 - str r0, [sp, #0xc] - ldrh r0, [r6] - bl Cos - ldr r2, _0803A7EC @ =gCurrentPinballGame - ldr r5, [r2] - mov r3, sb - adds r1, r5, r3 - ldr r6, [r1] - ldr r1, [sp, #8] - lsls r4, r1, #8 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - mov r2, sl - muls r2, r0, r2 - adds r0, r2, #0 - ldr r3, _0803A804 @ =0x00004E20 - mov r8, r3 - mov r1, r8 - bl __divsi3 - adds r4, r4, r0 - str r4, [r6, #0x34] - adds r5, r5, r7 - ldrh r0, [r5] - bl Sin - ldr r4, _0803A7EC @ =gCurrentPinballGame - ldr r7, [r4] - mov r5, sb - adds r6, r7, r5 - ldr r5, [r6] - ldr r1, [sp, #0xc] - lsls r4, r1, #8 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - mov r2, sl - muls r2, r0, r2 - adds r0, r2, #0 - mov r1, r8 - bl __divsi3 - subs r4, r4, r0 - str r4, [r5, #0x38] - ldr r4, [r6] - movs r3, #0x30 - ldrsh r0, [r4, r3] - lsls r0, r0, #2 - movs r1, #5 - bl __divsi3 - strh r0, [r4, #0x30] - ldr r4, [r6] - movs r5, #0x32 - ldrsh r0, [r4, r5] - lsls r0, r0, #2 - movs r1, #5 - bl __divsi3 - strh r0, [r4, #0x32] - movs r0, #0x8b - lsls r0, r0, #3 - adds r0, r7, r0 - str r0, [sp, #0x38] - ldr r2, [sp, #0x34] - adds r1, r0, r2 - ldrh r0, [r1] - cmp r0, #0x2e - bhi _0803A808 - adds r0, #1 - strh r0, [r1] - b _0803A8A2 - .align 2, 0 -_0803A7EC: .4byte gCurrentPinballGame -_0803A7F0: .4byte 0x0000132C -_0803A7F4: .4byte 0xFFFFE000 -_0803A7F8: .4byte 0x000005AC -_0803A7FC: .4byte 0x0000045C -_0803A800: .4byte 0x0000045E -_0803A804: .4byte 0x00004E20 -_0803A808: - movs r3, #0 - strh r3, [r1] - ldr r3, [r6] - ldr r0, _0803A84C @ =gMain - ldr r2, [r0, #0x4c] - movs r0, #1 - ands r2, r0 - lsls r1, r2, #2 - adds r1, r1, r2 - lsls r0, r1, #4 - subs r0, r0, r1 - lsls r0, r0, #2 - ldr r4, _0803A850 @ =0x0000FF6A - adds r0, r0, r4 - strh r0, [r3, #0x30] - ldr r1, [r6] - movs r0, #0x96 - lsls r0, r0, #1 - strh r0, [r1, #0x32] - movs r5, #0 - strb r5, [r7, #0x1f] - ldr r6, _0803A854 @ =gCurrentPinballGame - ldr r0, [r6] - ldr r7, _0803A858 @ =0x00000441 - adds r0, r0, r7 - ldr r1, [sp, #0x30] - adds r0, r0, r1 - strb r5, [r0] - ldr r0, [r6] - ldr r2, _0803A85C @ =0x000005FA - adds r0, r0, r2 - strb r5, [r0] - b _0803A8A2 - .align 2, 0 -_0803A84C: .4byte gMain -_0803A850: .4byte 0x0000FF6A -_0803A854: .4byte gCurrentPinballGame -_0803A858: .4byte 0x00000441 -_0803A85C: .4byte 0x000005FA -_0803A860: - ldr r0, _0803A890 @ =gCurrentPinballGame - ldr r6, [r0] - ldr r3, [sp, #0x3c] - asrs r7, r3, #0x10 - lsls r1, r7, #1 - movs r4, #0x8b - lsls r4, r4, #3 - adds r0, r6, r4 - adds r5, r0, r1 - ldrh r4, [r5] - adds r0, r4, #0 - movs r1, #6 - bl __udivsi3 - movs r1, #5 - subs r1, r1, r0 - lsls r1, r1, #0x10 - lsrs r1, r1, #0x10 - str r1, [sp, #4] - cmp r4, #0x23 - bhi _0803A894 - adds r0, r4, #1 - strh r0, [r5] - b _0803A8A2 - .align 2, 0 -_0803A890: .4byte gCurrentPinballGame -_0803A894: - movs r1, #0 - movs r0, #0 - strh r0, [r5] - ldr r5, _0803AA20 @ =0x00000441 - adds r0, r6, r5 - adds r0, r0, r7 -_0803A8A0: - strb r1, [r0] -_0803A8A2: - ldr r6, _0803AA24 @ =gCurrentPinballGame - mov sl, r6 - ldr r1, [r6] - ldr r0, [sp, #0x3c] - asrs r7, r0, #0x10 - ldr r2, _0803AA20 @ =0x00000441 - adds r0, r1, r2 - adds r0, r0, r7 - ldrb r0, [r0] - subs r0, #2 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bhi _0803A9A6 - lsls r3, r7, #2 - mov sb, r3 - add r1, sb - ldr r4, _0803AA28 @ =0x00000464 - adds r0, r1, r4 - movs r5, #0 - ldrsh r2, [r0, r5] - ldr r5, _0803AA2C @ =0x0000045C - adds r0, r1, r5 - movs r6, #0 - ldrsh r0, [r0, r6] - subs r0, r2, r0 - str r0, [sp, #0x10] - ldr r2, _0803AA30 @ =0x00000466 - adds r0, r1, r2 - movs r3, #0 - ldrsh r2, [r0, r3] - ldr r6, _0803AA34 @ =0x0000045E - adds r1, r1, r6 - movs r4, #0 - ldrsh r0, [r1, r4] - subs r0, r2, r0 - str r0, [sp, #0x14] - ldr r0, [sp, #0x10] - adds r1, r0, #0 - muls r1, r0, r1 - ldr r2, [sp, #0x14] - adds r0, r2, #0 - muls r0, r2, r0 - adds r1, r1, r0 - mov r8, r1 - ldr r3, [sp, #0x10] - lsls r0, r3, #0x10 - asrs r0, r0, #0x10 - rsbs r1, r2, #0 - lsls r1, r1, #0x10 - asrs r1, r1, #0x10 - bl ArcTan2 - adds r4, r0, #0 - lsls r4, r4, #0x10 - lsrs r4, r4, #0x10 - adds r0, r4, #0 - bl Cos - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - ldr r1, _0803AA38 @ =0x00001388 - bl __divsi3 - str r0, [sp, #0x18] - adds r0, r4, #0 - bl Sin - lsls r0, r0, #0x10 - asrs r0, r0, #0xe - rsbs r0, r0, #0 - ldr r1, _0803AA3C @ =0x00004E20 - bl __divsi3 - str r0, [sp, #0x1c] - mov r4, sl - ldr r1, [r4] - add r1, sb - adds r5, r1, r5 - ldrh r0, [r5] - ldr r2, [sp, #0x18] - adds r0, r2, r0 - strh r0, [r5] - adds r1, r1, r6 - ldrh r0, [r1] - ldr r3, [sp, #0x1c] - adds r0, r3, r0 - strh r0, [r1] - ldr r0, _0803AA40 @ =0x000009C3 - cmp r8, r0 - bgt _0803A9A6 - bl Random - ldr r5, [r4] - subs r6, #0x1b - adds r5, r5, r6 - adds r5, r5, r7 - lsls r4, r7, #3 - subs r4, r4, r7 - ldr r1, _0803AA44 @ =gMain - ldr r1, [r1, #0x4c] - adds r0, r0, r1 - movs r1, #7 - bl __umodsi3 - adds r4, r4, r0 - strb r4, [r5] - mov r4, sl - ldr r1, [r4] - mov r5, sb - adds r3, r1, r5 - ldr r4, _0803AA48 @ =gUnknown_086AEDE8 - adds r1, r1, r6 - adds r1, r1, r7 - movs r0, #0 - ldrsb r0, [r1, r0] - lsls r0, r0, #2 - adds r0, r0, r4 - ldrh r2, [r0] - adds r6, #0x21 - adds r0, r3, r6 - strh r2, [r0] - movs r0, #0 - ldrsb r0, [r1, r0] - lsls r0, r0, #2 - adds r0, r0, r4 - ldrh r0, [r0, #2] - ldr r7, _0803AA30 @ =0x00000466 - adds r3, r3, r7 - strh r0, [r3] -_0803A9A6: - ldr r2, _0803AA4C @ =0x040000D4 - ldr r1, [sp, #4] - lsls r0, r1, #0x10 - asrs r0, r0, #7 - ldr r1, _0803AA50 @ =gUnknown_084FF90C - adds r0, r0, r1 - str r0, [r2] - ldr r3, [sp, #0x3c] - asrs r4, r3, #0x10 - lsls r0, r4, #9 - ldr r5, _0803AA54 @ =0x06011520 - adds r0, r0, r5 - str r0, [r2, #4] - ldr r0, _0803AA58 @ =0x80000100 - str r0, [r2, #8] - ldr r0, [r2, #8] - ldr r6, [sp] - ldrh r0, [r6] - cmp r0, #0 - beq _0803AA9E - ldr r0, _0803AA24 @ =gCurrentPinballGame - ldr r5, [r0] - ldr r7, _0803AA20 @ =0x00000441 - adds r0, r5, r7 - adds r0, r0, r4 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _0803AA5C - lsls r4, r4, #2 - adds r4, r5, r4 - ldr r1, _0803AA2C @ =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 r1, #0x68 - subs r0, r0, r1 - strh r0, [r6, #2] - ldr r3, _0803AA34 @ =0x0000045E - adds r4, r4, r3 - movs r6, #0 - ldrsh r0, [r4, r6] - movs r1, #0xa - bl __divsi3 - adds r1, r5, #0 - adds r1, #0x5a - ldrh r1, [r1] - subs r1, #0x80 - subs r0, r0, r1 - ldr r7, [sp] - strh r0, [r7, #4] - b _0803AA66 - .align 2, 0 -_0803AA20: .4byte 0x00000441 -_0803AA24: .4byte gCurrentPinballGame -_0803AA28: .4byte 0x00000464 -_0803AA2C: .4byte 0x0000045C -_0803AA30: .4byte 0x00000466 -_0803AA34: .4byte 0x0000045E -_0803AA38: .4byte 0x00001388 -_0803AA3C: .4byte 0x00004E20 -_0803AA40: .4byte 0x000009C3 -_0803AA44: .4byte gMain -_0803AA48: .4byte gUnknown_086AEDE8 -_0803AA4C: .4byte 0x040000D4 -_0803AA50: .4byte gUnknown_084FF90C -_0803AA54: .4byte 0x06011520 -_0803AA58: .4byte 0x80000100 -_0803AA5C: - movs r0, #0xf0 - ldr r1, [sp] - strh r0, [r1, #2] - movs r0, #0xb4 - strh r0, [r1, #4] -_0803AA66: - ldr r6, [sp] - adds r6, #8 - ldr r4, _0803AB38 @ =gOamBuffer - ldr r2, [sp] - ldrh r3, [r2, #8] - lsls r3, r3, #3 - adds r3, r3, r4 - movs r5, #2 - ldrsh r1, [r6, r5] - movs r7, #2 - ldrsh r0, [r2, r7] - adds r1, r1, r0 - ldr r2, _0803AB3C @ =0x000001FF - adds r0, r2, #0 - ands r1, r0 - ldrh r2, [r3, #2] - ldr r0, _0803AB40 @ =0xFFFFFE00 - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldr r3, [sp] - ldrh r1, [r3, #8] - lsls r1, r1, #3 - adds r1, r1, r4 - ldrb r0, [r3, #4] - ldrb r6, [r6, #4] - adds r0, r0, r6 - strb r0, [r1] -_0803AA9E: - ldr r4, [sp, #0x3c] - movs r5, #0x80 - lsls r5, r5, #9 - adds r0, r4, r5 - lsrs r2, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #1 - bgt _0803AAB2 - bl _0803A150 -_0803AAB2: - ldr r6, _0803AB44 @ =gMain+0x1438 @gMain.spriteGroups[24] - str r6, [sp] - ldrh r0, [r6] - cmp r0, #0 - bne _0803AABE - b _0803AD44 -_0803AABE: - ldr r0, _0803AB48 @ =gCurrentPinballGame - ldr r1, [r0] - ldr r7, _0803AB4C @ =0x00000456 - adds r3, r1, r7 - ldrh r1, [r3] - cmp r1, #0x23 - bhi _0803AB7C - adds r0, r1, #0 - lsls r0, r0, #9 - movs r1, #0x23 - bl __divsi3 - adds r0, #0x10 - lsls r0, r0, #0x10 - lsrs r6, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #2 - cmp r0, r1 - ble _0803AAE8 - adds r6, r1, #0 -_0803AAE8: - lsls r5, r6, #0x10 - asrs r5, r5, #0x10 - adds r0, r5, #0 - adds r1, r5, #0 - movs r2, #1 - bl SetMatrixScale - rsbs r4, r5, #0 - lsls r4, r4, #0x10 - asrs r4, r4, #0x10 - adds r0, r4, #0 - adds r1, r5, #0 - movs r2, #2 - bl SetMatrixScale - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #3 - bl SetMatrixScale - adds r0, r4, #0 - adds r1, r4, #0 - movs r2, #4 - bl SetMatrixScale - ldr r1, _0803AB48 @ =gCurrentPinballGame - ldr r0, [r1] - adds r1, r0, r7 - ldrh r0, [r1] - cmp r0, #0x1e - bls _0803AB50 - subs r0, #0x1e - movs r1, #0xb - muls r0, r1, r0 - movs r1, #5 - bl __divsi3 - movs r1, #0xc - b _0803AB5C - .align 2, 0 -_0803AB38: .4byte gOamBuffer -_0803AB3C: .4byte 0x000001FF -_0803AB40: .4byte 0xFFFFFE00 -_0803AB44: .4byte gMain+0x1438 @gMain.spriteGroups[24] -_0803AB48: .4byte gCurrentPinballGame -_0803AB4C: .4byte 0x00000456 -_0803AB50: - ldrh r0, [r1] - lsls r0, r0, #2 - movs r1, #0x1e - bl __divsi3 - movs r1, #0x10 -_0803AB5C: - subs r1, r1, r0 - lsls r1, r1, #0x10 - lsrs r4, r1, #0x10 - ldr r2, _0803AB74 @ =gCurrentPinballGame - ldr r1, [r2] - ldr r3, _0803AB78 @ =0x00000456 - adds r1, r1, r3 - ldrh r0, [r1] - adds r0, #1 - strh r0, [r1] - b _0803AB86 - .align 2, 0 -_0803AB74: .4byte gCurrentPinballGame -_0803AB78: .4byte 0x00000456 -_0803AB7C: - movs r6, #0x80 - lsls r6, r6, #1 - movs r4, #0 - ldr r5, [sp] - strh r4, [r5] -_0803AB86: - ldr r7, _0803AD54 @ =gCurrentPinballGame - ldr r1, [r7] - lsls r0, r6, #0x10 - asrs r5, r0, #0x10 - adds r0, r5, #0 - cmp r5, #0 - bge _0803AB96 - adds r0, r5, #7 -_0803AB96: - asrs r3, r0, #3 - movs r0, #0x20 - subs r2, r0, r3 - ldr r6, _0803AD58 @ =0x0000046C - adds r0, r1, r6 - strh r2, [r0] - adds r3, #0x20 - movs r7, #0x8e - lsls r7, r7, #3 - adds r0, r1, r7 - strh r3, [r0] - ldr r6, _0803AD5C @ =0x00000474 - adds r0, r1, r6 - strh r2, [r0] - movs r7, #0x8f - lsls r7, r7, #3 - adds r0, r1, r7 - strh r3, [r0] - ldr r6, _0803AD60 @ =0x0000046E - adds r0, r1, r6 - strh r2, [r0] - ldr r7, _0803AD64 @ =0x00000472 - adds r0, r1, r7 - strh r2, [r0] - ldr r2, _0803AD68 @ =0x00000476 - adds r0, r1, r2 - strh r3, [r0] - ldr r5, _0803AD6C @ =0x0000047A - adds r0, r1, r5 - strh r3, [r0] - ldr r2, _0803AD70 @ =gMain - ldrb r1, [r2, #0xf] - movs r0, #0xc0 - ands r0, r1 - mov sb, r2 - cmp r0, #0 - bne _0803ABF6 - ldrh r0, [r2, #0x38] - ldr r0, _0803AD74 @ =0x00001E10 - strh r0, [r2, #0x38] - movs r0, #0x10 - lsls r1, r4, #0x10 - asrs r1, r1, #0x10 - subs r0, r0, r1 - lsls r0, r0, #8 - orrs r0, r1 - ldrh r1, [r2, #0x3a] - strh r0, [r2, #0x3a] -_0803ABF6: - ldr r6, [sp] - ldrh r0, [r6] - cmp r0, #0 - beq _0803ACAE - ldr r7, _0803AD54 @ =gCurrentPinballGame - ldr r1, [r7] - adds r0, r1, #0 - adds r0, #0x58 - ldrh r2, [r0] - movs r0, #0x17 - subs r0, r0, r2 - strh r0, [r6, #2] - adds r1, #0x5a - ldrh r1, [r1] - movs r0, #0x1e - subs r0, r0, r1 - strh r0, [r6, #4] - movs r2, #0 - ldr r7, _0803AD78 @ =gOamBuffer - ldr r0, _0803AD7C @ =0xFFFFFE00 - mov sl, r0 - movs r1, #0xf - rsbs r1, r1, #0 - mov r8, r1 -_0803AC26: - lsls r5, r2, #0x10 - asrs r5, r5, #0x10 - lsls r0, r5, #3 - adds r0, #8 - ldr r2, [sp] - adds r6, r2, r0 - ldrh r3, [r6] - lsls r3, r3, #3 - adds r3, r3, r7 - movs r4, #2 - ldrsh r1, [r6, r4] - movs r4, #2 - ldrsh r0, [r2, r4] - adds r1, r1, r0 - ldr r0, _0803AD54 @ =gCurrentPinballGame - ldr r4, [r0] - lsls r0, r5, #2 - adds r4, r4, r0 - ldr r2, _0803AD58 @ =0x0000046C - adds r0, r4, r2 - movs r2, #0 - ldrsh r0, [r0, r2] - adds r1, r1, r0 - ldr r2, _0803AD80 @ =0x000001FF - adds r0, r2, #0 - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, sl - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r2, [r6] - lsls r2, r2, #3 - adds r2, r2, r7 - ldr r3, [sp] - ldrb r1, [r3, #4] - ldrb r0, [r6, #4] - adds r1, r1, r0 - ldr r3, _0803AD60 @ =0x0000046E - adds r4, r4, r3 - ldrb r0, [r4] - adds r0, r0, r1 - strb r0, [r2] - ldrh r2, [r6] - lsls r2, r2, #3 - adds r2, r2, r7 - ldrb r0, [r2, #1] - movs r1, #3 - orrs r0, r1 - strb r0, [r2, #1] - ldrh r3, [r6] - lsls r3, r3, #3 - adds r3, r3, r7 - adds r5, #1 - movs r0, #7 - adds r1, r5, #0 - ands r1, r0 - lsls r1, r1, #1 - ldrb r2, [r3, #3] - mov r0, r8 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #3] - lsls r5, r5, #0x10 - lsrs r2, r5, #0x10 - asrs r5, r5, #0x10 - cmp r5, #3 - ble _0803AC26 -_0803ACAE: - ldr r4, _0803AD54 @ =gCurrentPinballGame - ldr r3, [r4] - ldr r5, _0803AD84 @ =0x00000456 - adds r4, r3, r5 - ldrh r0, [r4] - cmp r0, #0x1d - bhi _0803AD30 - ldr r6, _0803AD88 @ =0x0000132C - adds r0, r3, r6 - ldr r1, [r0] - movs r7, #0x10 - ldrsh r0, [r1, r7] - subs r0, #0x77 - str r0, [sp, #0x10] - movs r2, #0x12 - ldrsh r0, [r1, r2] - subs r0, #0x7f - str r0, [sp, #0x14] - ldr r5, [sp, #0x10] - adds r1, r5, #0 - muls r1, r5, r1 - adds r6, r0, #0 - adds r0, r6, #0 - muls r0, r6, r0 - adds r1, r1, r0 - mov r8, r1 - movs r7, #0xe2 - lsls r7, r7, #2 - adds r0, r3, r7 - movs r2, #0 - ldrsb r2, [r0, r2] - cmp r2, #0 - bne _0803AD30 - ldr r0, _0803AD8C @ =gUnknown_086AEE20 - ldrh r1, [r4] - lsls r1, r1, #1 - adds r1, r1, r0 - movs r4, #0 - ldrsh r0, [r1, r4] - cmp r8, r0 - bge _0803AD30 - ldr r5, _0803AD90 @ =0x00000445 - adds r0, r3, r5 - strb r2, [r0] - ldr r6, _0803AD54 @ =gCurrentPinballGame - ldr r0, [r6] - adds r7, #0xc0 - adds r0, r0, r7 - strb r2, [r0] - ldr r0, [r6] - ldr r1, _0803AD94 @ =0x00000454 - adds r0, r0, r1 - strh r2, [r0] - ldr r5, _0803AD70 @ =gMain - ldr r2, _0803AD98 @ =0x00000E78 - adds r4, r5, r2 - ldrh r0, [r4] - cmp r0, #0 - bne _0803AD2A - movs r0, #8 - bl sub_11B0 -_0803AD2A: - movs r0, #1 - strh r0, [r4] - mov sb, r5 -_0803AD30: - mov r3, sb - ldrb r1, [r3, #0xf] - movs r0, #0xc0 - ands r0, r1 - cmp r0, #0 - beq _0803AD44 - ldr r1, _0803AD9C @ =0x00001438 - add r1, sb - movs r0, #0 - strh r0, [r1] -_0803AD44: - add sp, #0x40 - 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 -_0803AD54: .4byte gCurrentPinballGame -_0803AD58: .4byte 0x0000046C -_0803AD5C: .4byte 0x00000474 -_0803AD60: .4byte 0x0000046E -_0803AD64: .4byte 0x00000472 -_0803AD68: .4byte 0x00000476 -_0803AD6C: .4byte 0x0000047A -_0803AD70: .4byte gMain -_0803AD74: .4byte 0x00001E10 -_0803AD78: .4byte gOamBuffer -_0803AD7C: .4byte 0xFFFFFE00 -_0803AD80: .4byte 0x000001FF -_0803AD84: .4byte 0x00000456 -_0803AD88: .4byte 0x0000132C -_0803AD8C: .4byte gUnknown_086AEE20 -_0803AD90: .4byte 0x00000445 -_0803AD94: .4byte 0x00000454 -_0803AD98: .4byte 0x00000E78 -_0803AD9C: .4byte 0x00001438 diff --git a/expected_objs/sub_39A40.o b/expected_objs/sub_39A40.o deleted file mode 100644 index 9cb8a0a0416e2a319476b047a53a30194e7b33e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14972 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 diff --git a/include/global.h b/include/global.h index b47bad2..2c9ed3f 100644 --- a/include/global.h +++ b/include/global.h @@ -433,11 +433,18 @@ struct PinballGame /*0x440*/ u8 filler440[0x1]; /*0x441*/ s8 unk441[2]; /*0x443*/ s8 unk443[2]; - /*0x445*/ u8 filler445[0x7]; + /*0x445*/ s8 unk445; + /*0x446*/ s8 unk446; + /*0x447*/ s8 unk447; + /*0x448*/ s8 unk448; + /*0x449*/ s8 unk449; + /*0x44A*/ s8 unk44A; + /*0x44B*/ u8 filler44B[0x1]; /*0x44C*/ u16 unk44C; - /*0x44E*/ u8 filler44E[0x4]; + /*0x44E*/ s16 unk44E; + /*0x450*/ u8 filler450[0x2]; /*0x452*/ u16 unk452; - /*0x454*/ u8 filler454[0x2]; + /*0x454*/ u16 unk454; /*0x456*/ u16 unk456; /*0x458*/ u16 unk458[2]; /*0x45C*/ struct Vector16 unk45C[2]; diff --git a/src/rom_49A34.c b/src/rom_49A34.c index 24017b8..d4edc92 100644 --- a/src/rom_49A34.c +++ b/src/rom_49A34.c @@ -123,6 +123,7 @@ extern const s16 gUnknown_086AF3BE[]; extern const u16 gUnknown_086AF3C6[]; extern const u16 gUnknown_086B63AA[][2][3]; extern const u16 gUnknown_086B65EA[][19][3]; +extern const u16 gUnknown_086B91AC[][4][3]; extern const u16 gUnknown_086B6512[][6][3]; extern const u16 gUnknown_086B63F2[][4][3]; extern const u16 gUnknown_086B8AE0[][10][3]; @@ -145,6 +146,10 @@ extern const s16 gUnknown_086AEF04[]; extern const s16 gUnknown_086AEEE6[]; extern const s16 gUnknown_086AEEDE[]; extern const u16 gUnknown_086AEEFE[]; +extern const s16 gUnknown_086AEE5E[][3]; +extern const u8 gUnknown_083C1A6C[][0x3C0]; +extern const struct Vector16 gUnknown_086AEDE8[]; +extern const u8 gUnknown_084FF90C[][0x200]; struct Unk_086AFAC0 { @@ -173,6 +178,491 @@ extern u8 gUnknown_0200FBB0[]; extern u8 gUnknown_020030A0[]; +void sub_39A40(void) +{ + s16 i, j; + s16 var4; + int var5; + s16 var0; + struct SpriteGroup *group; + struct OamDataSimple *oamSimple; + u16 *dst; + const u16 *src; + s16 index; + int xx, yy; + u16 angle; + int squaredMagnitude; + struct Vector32 tempVector2; + struct Vector32 tempVector; + struct Vector32 tempVector3; + + index = 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 (i = 0; i < 6; i++) + { + oamSimple = &group->oam[i]; + 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 (i = 0; i < 6; i++) + { + oamSimple = &group->oam[i]; + 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[16]; + if (group->available) + { + switch (gCurrentPinballGame->unk445) + { + case 0: + gCurrentPinballGame->unk449 = 0; + gCurrentPinballGame->unk446 = 5; + gCurrentPinballGame->unk447 = 1; + gCurrentPinballGame->unk44A = 0; + gCurrentPinballGame->unk44E = 0; + if (gCurrentPinballGame->unk448 == 2) + { + int a; // force addition of 8 instead of offsetting the global constant + DmaCopy16(3, &gUnknown_08137E14[a = gCurrentPinballGame->unk5F6 + 8], (void *)0x05000220, 0x20); + } + break; + case 1: + gCurrentPinballGame->unk44A = 4; + gCurrentPinballGame->unk44E = 90; + gCurrentPinballGame->unk445 = 2; + break; + case 2: + if (gCurrentPinballGame->newButtonActions[0] || gCurrentPinballGame->newButtonActions[1]) + { + gCurrentPinballGame->unk44E -= 90; + if (gCurrentPinballGame->unk44E < 0) + gCurrentPinballGame->unk44E = 0; + + m4aSongNumStart(SE_UNKNOWN_0x111); + } + + gCurrentPinballGame->unk449 = 5; + gCurrentPinballGame->unk446 = 9; + gCurrentPinballGame->unk447 = 3; + break; + case 3: + gCurrentPinballGame->unk44A = 4; + gCurrentPinballGame->unk44E = 90; + gCurrentPinballGame->unk445 = 4; + break; + case 4: + if (gCurrentPinballGame->newButtonActions[0] || gCurrentPinballGame->newButtonActions[1]) + { + gCurrentPinballGame->unk44E -= 90; + if (gCurrentPinballGame->unk44E < 0) + gCurrentPinballGame->unk44E = 0; + + m4aSongNumStart(SE_UNKNOWN_0x111); + } + + gCurrentPinballGame->unk449 = 9; + gCurrentPinballGame->unk446 = 13; + gCurrentPinballGame->unk447 = 5; + break; + case 5: + gCurrentPinballGame->unk44A = 0; + gCurrentPinballGame->unk44E = 90; + gCurrentPinballGame->unk445 = 6; + break; + case 6: + if (gCurrentPinballGame->newButtonActions[0] || gCurrentPinballGame->newButtonActions[1]) + { + gCurrentPinballGame->unk44E -= 90; + if (gCurrentPinballGame->unk44E < 0) + gCurrentPinballGame->unk44E = 0; + + m4aSongNumStart(SE_UNKNOWN_0x111); + } + + gCurrentPinballGame->unk449 = 13; + gCurrentPinballGame->unk446 = 19; + gCurrentPinballGame->unk447 = 7; + break; + case 7: + gMain.spriteGroups[16].available = 0; + break; + } + + if (gCurrentPinballGame->unk44E > 0) + { + gCurrentPinballGame->unk44E--; + if (gCurrentPinballGame->unk44E == 0) + m4aSongNumStart(SE_UNKNOWN_0x111); + } + else + { + if (gUnknown_086AEE5E[gCurrentPinballGame->unk448][1] > gCurrentPinballGame->unk454) + { + gCurrentPinballGame->unk454++; + } + else + { + gCurrentPinballGame->unk454 = 0; + gCurrentPinballGame->unk448++; + if (gCurrentPinballGame->unk448 == gCurrentPinballGame->unk446) + { + if (gCurrentPinballGame->unk44A > 0) + { + gCurrentPinballGame->unk448 = gCurrentPinballGame->unk449; + gCurrentPinballGame->unk44A--; + } + else + { + gCurrentPinballGame->unk448 = gCurrentPinballGame->unk446 - 1; + gCurrentPinballGame->unk445 = gCurrentPinballGame->unk447; + } + + gCurrentPinballGame->unk44E = 90; + } + + if (gCurrentPinballGame->unk448 == 1) + m4aSongNumStart(SE_UNKNOWN_0x110); + + if (gCurrentPinballGame->unk448 == 15) + { + DmaCopy16(3, gUnknown_08137E14[gCurrentPinballGame->unk5F6], (void *)0x05000220, 0x20); + m4aSongNumStart(SE_UNKNOWN_0x112); + } + } + } + + if (gCurrentPinballGame->unk448 < 18) + { + gCurrentPinballGame->unk383 = 1; + gCurrentPinballGame->ball->velocity.x = 0; + gCurrentPinballGame->ball->velocity.y = 0; + gCurrentPinballGame->ball->unk6 = 0; + } + else + { + gCurrentPinballGame->unk383 = 0; + } + + group->baseX = gCurrentPinballGame->ball->unk24; + group->baseY = gCurrentPinballGame->ball->unk26; + if (group->baseY >= 200) + group->baseY = 200; + + index = gUnknown_086AEE5E[gCurrentPinballGame->unk448][2]; + DmaCopy16(3, gUnknown_083C1A6C[index], (void *)0x060124E0, 0x3C0); + var0 = gUnknown_086AEE5E[gCurrentPinballGame->unk448][0]; + for (i = 0; i < 4; i++) + { + oamSimple = &group->oam[i]; + dst = (u16*)&gOamBuffer[oamSimple->oamId]; + src = gUnknown_086B91AC[var0][i]; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + + gOamBuffer[oamSimple->oamId].x += group->baseX; + gOamBuffer[oamSimple->oamId].y += group->baseY; + } + } + + for (i = 0; i < 2; i++) + { + group = &gMain.spriteGroups[22 + i]; + if ((gMain.unkF & 0x80) == 0) + { + switch (gCurrentPinballGame->unk441[i]) { + case 0: + index = 0; + gCurrentPinballGame->unk45C[i].x = 0; + gCurrentPinballGame->unk45C[i].y = 0; + break; + case 1: + index = gCurrentPinballGame->unk458[i] / 9; + if (gCurrentPinballGame->unk458[i] < 98) + { + gCurrentPinballGame->unk458[i]++; + } + else + { + gCurrentPinballGame->unk458[i] = 0; + gCurrentPinballGame->unk441[i] = 2; + gCurrentPinballGame->unk443[i] = i * 7 + ((Random() + gMain.systemFrameCount) % 7); + gCurrentPinballGame->unk464[i].x = gUnknown_086AEDE8[gCurrentPinballGame->unk443[i]].x; + gCurrentPinballGame->unk464[i].y = gUnknown_086AEDE8[gCurrentPinballGame->unk443[i]].y; + } + + gCurrentPinballGame->unk45C[i].x = 0; + gCurrentPinballGame->unk45C[i].y = 0; + break; + case 2: + index = ((gCurrentPinballGame->unk458[i] % 40) / 8) + 6; + if (gCurrentPinballGame->unk441[0] < 3 && gCurrentPinballGame->unk441[1] < 3) + { + int xoff = 120; + int yoff = 144; + tempVector.x = (gCurrentPinballGame->ball->positionQ0.x - xoff) - (gCurrentPinballGame->unk45C[i].x / 10); + tempVector.y = (gCurrentPinballGame->ball->positionQ0.y - yoff) - (gCurrentPinballGame->unk45C[i].y / 10); + 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 < 400) + { + m4aSongNumStart(SE_UNKNOWN_0x113); + sub_11B0(12); + gCurrentPinballGame->unk1F = 1; + gCurrentPinballGame->unk458[i] = 0; + gCurrentPinballGame->unk441[i] = 3; + gCurrentPinballGame->unk5FA = 1; + tempVector2.x = gCurrentPinballGame->unk45C[i].x / 10 + 120; + tempVector2.y = gCurrentPinballGame->unk45C[i].y / 10 + 144; + 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); + } + } + + if (gCurrentPinballGame->unk458[i] < 900) + { + gCurrentPinballGame->unk458[i]++; + } + else + { + gCurrentPinballGame->unk458[i] = 0; + gCurrentPinballGame->unk441[i] = 5; + } + break; + case 3: + index = ((gCurrentPinballGame->unk458[i] % 40) / 8) + 6; + if (gCurrentPinballGame->newButtonActions[0] || gCurrentPinballGame->newButtonActions[1]) + gCurrentPinballGame->unk458[i] += 8; + + 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 + 120; + tempVector2.y = gCurrentPinballGame->unk45C[i].y / 10 + 144; + 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->unk458[i] < 480) + { + gCurrentPinballGame->unk458[i]++; + if (gCurrentPinballGame->unk458[i] % 9 == 0) + sub_11B0(12); + } + else + { + gCurrentPinballGame->unk458[i] = 0; + gCurrentPinballGame->unk441[i] = 4; + gCurrentPinballGame->unk5AC /= 2; + } + break; + case 4: + index = 5 - gCurrentPinballGame->unk458[i] / 8; + var4 = 47 - gCurrentPinballGame->unk458[i]; + gCurrentPinballGame->unk5B0 -= ((0x2000 - (var4 * 0x1000) / 47) * 2) / 5; + gCurrentPinballGame->ball->unkA -= 0x2000; + var5 = (gCurrentPinballGame->unk5AC * var4) / 47; + tempVector2.x = gCurrentPinballGame->unk45C[i].x / 10 + 120; + tempVector2.y = gCurrentPinballGame->unk45C[i].y / 10 + 144; + 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->unk458[i] < 47) + { + gCurrentPinballGame->unk458[i]++; + } + else + { + gCurrentPinballGame->unk458[i] = 0; + gCurrentPinballGame->ball->velocity.x = -150 + (gMain.systemFrameCount % 2) * 300; + gCurrentPinballGame->ball->velocity.y = 300; + gCurrentPinballGame->unk1F = 0; + gCurrentPinballGame->unk441[i] = 0; + gCurrentPinballGame->unk5FA = 0; + } + break; + case 5: + index = 5 - gCurrentPinballGame->unk458[i] / 6; + if (gCurrentPinballGame->unk458[i] < 36) + { + gCurrentPinballGame->unk458[i]++; + } + else + { + gCurrentPinballGame->unk458[i] = 0; + gCurrentPinballGame->unk441[i] = 0; + } + break; + } + + if (gCurrentPinballGame->unk441[i] >= 2 && gCurrentPinballGame->unk441[i] < 4) + { + tempVector.x = gCurrentPinballGame->unk464[i].x - gCurrentPinballGame->unk45C[i].x; + tempVector.y = gCurrentPinballGame->unk464[i].y - gCurrentPinballGame->unk45C[i].y; + xx = tempVector.x * tempVector.x; + yy = tempVector.y * tempVector.y; + squaredMagnitude = xx + yy; + angle = ArcTan2(tempVector.x, -tempVector.y); + tempVector3.x = (Cos(angle) * 4) / 20000; + tempVector3.y = -(Sin(angle) * 4) / 20000; + gCurrentPinballGame->unk45C[i].x += tempVector3.x; + gCurrentPinballGame->unk45C[i].y += tempVector3.y; + if (squaredMagnitude < 2500) + { + gCurrentPinballGame->unk443[i] = i * 7 + ((Random() + gMain.systemFrameCount) % 7); + gCurrentPinballGame->unk464[i].x = gUnknown_086AEDE8[gCurrentPinballGame->unk443[i]].x; + gCurrentPinballGame->unk464[i].y = gUnknown_086AEDE8[gCurrentPinballGame->unk443[i]].y; + } + } + } + + DmaCopy16(3, gUnknown_084FF90C[index], (void *)0x06011520 + i * 0x200, 0x200); + if (group->available) + { + if (gCurrentPinballGame->unk441[i] > 0) + { + group->baseX = gCurrentPinballGame->unk45C[i].x / 10 - (gCurrentPinballGame->unk58 - 104u); + group->baseY = gCurrentPinballGame->unk45C[i].y / 10 - (gCurrentPinballGame->unk5A - 128u); + } + else + { + group->baseX = 240; + group->baseY = 180; + } + + oamSimple = &group->oam[0]; + gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX; + gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY; + } + } + + group = &gMain.spriteGroups[24]; + if (group->available) + { + s16 scale; + s16 var6; + + if (gCurrentPinballGame->unk456 < 36) + { + scale = (gCurrentPinballGame->unk456 * 0x200) / 35 + 0x10; + if (scale > 0x200) + scale = 0x200; + + SetMatrixScale(scale, scale, 1); + SetMatrixScale(-scale, scale, 2); + SetMatrixScale(scale, -scale, 3); + SetMatrixScale(-scale, -scale, 4); + if (gCurrentPinballGame->unk456 > 30) + var6 = 12 - ((gCurrentPinballGame->unk456 - 30) * 11) / 5; + else + var6 = 16 - (gCurrentPinballGame->unk456 * 4) / 30; + + gCurrentPinballGame->unk456++; + } + else + { + scale = 0x100; + var6 = 0; + group->available = 0; + } + + gCurrentPinballGame->unk46C[0].x = 0x20 - scale / 8; + gCurrentPinballGame->unk46C[1].x = 0x20 + scale / 8; + gCurrentPinballGame->unk46C[2].x = 0x20 - scale / 8; + gCurrentPinballGame->unk46C[3].x = 0x20 + scale / 8; + gCurrentPinballGame->unk46C[0].y = 0x20 - scale / 8; + gCurrentPinballGame->unk46C[1].y = 0x20 - scale / 8; + gCurrentPinballGame->unk46C[2].y = 0x20 + scale / 8; + gCurrentPinballGame->unk46C[3].y = 0x20 + scale / 8; + + if ((gMain.unkF & 0xC0) == 0) + { + gMain.blendControl = 0x1E10; + gMain.blendAlpha = BLDALPHA_BLEND(var6, 16 - var6); + } + + if (group->available) + { + group->baseX = 23 - gCurrentPinballGame->unk58; + group->baseY = 30 - gCurrentPinballGame->unk5A; + for (i = 0; i < 4; i++) + { + oamSimple = &group->oam[i]; + gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX + gCurrentPinballGame->unk46C[i].x; + gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY + gCurrentPinballGame->unk46C[i].y; + gOamBuffer[oamSimple->oamId].affineMode = ST_OAM_AFFINE_DOUBLE; + gOamBuffer[oamSimple->oamId].matrixNum = 1 + i; + } + } + + if (gCurrentPinballGame->unk456 < 30) + { + tempVector.x = gCurrentPinballGame->ball->positionQ0.x - 119; + tempVector.y = gCurrentPinballGame->ball->positionQ0.y - 127; + xx = tempVector.x * tempVector.x; + yy = tempVector.y * tempVector.y; + squaredMagnitude = xx + yy; + if (gCurrentPinballGame->unk388 == 0 && squaredMagnitude < gUnknown_086AEE20[gCurrentPinballGame->unk456]) + { + gCurrentPinballGame->unk445 = 0; + gCurrentPinballGame->unk448 = 0; + gCurrentPinballGame->unk454 = 0; + if (!gMain.spriteGroups[16].available) + sub_11B0(8); + + gMain.spriteGroups[16].available = 1; + } + } + + if (gMain.unkF & 0xC0) + gMain.spriteGroups[24].available = 0; + } +} + void sub_3ADA0(void) { s16 i;