diff --git a/asm/pinball_game_main.s b/asm/pinball_game_main.s index 9d9295b0..6843dc53 100644 --- a/asm/pinball_game_main.s +++ b/asm/pinball_game_main.s @@ -6,249 +6,6 @@ .text - thumb_func_start sub_4B000 -sub_4B000: @ 0x0804B000 - push {r4, r5, r6, r7, lr} - bl sub_4B334 - ldr r5, _0804B07C @ =gMain - ldrb r1, [r5, #0xf] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0804B014 - b _0804B15A -_0804B014: - ldr r6, _0804B080 @ =gUnknown_020028D8 - ldr r0, [r6, #4] - bl _call_via_r0 - ldr r0, [r6, #0x14] - bl _call_via_r0 - ldr r0, [r6, #0x1c] - bl _call_via_r0 - ldr r0, [r6, #0x24] - bl _call_via_r0 - ldrb r4, [r5, #0xf] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r4, r0 - cmp r4, #0 - beq _0804B090 - ldr r0, _0804B084 @ =gCurrentPinballGame - ldr r0, [r0] - ldrb r0, [r0, #0x1f] - cmp r0, #0 - beq _0804B046 - b _0804B14C -_0804B046: - movs r4, #0 -_0804B048: - ldr r0, _0804B084 @ =gCurrentPinballGame - ldr r1, [r0] - adds r2, r1, #0 - adds r2, #0x66 - movs r0, #0 - strh r0, [r2] - ldr r0, _0804B088 @ =0x0000132C - adds r2, r1, r0 - ldr r3, _0804B08C @ =0x00001334 - adds r0, r1, r3 - str r0, [r2] - strb r4, [r1, #0x1e] - ldr r0, _0804B080 @ =gUnknown_020028D8 - ldr r0, [r0, #0x34] - bl _call_via_r0 - lsls r0, r4, #0x10 - movs r4, #0x80 - lsls r4, r4, #9 - adds r0, r0, r4 - lsrs r4, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #3 - ble _0804B048 - b _0804B14C - .align 2, 0 -_0804B07C: .4byte gMain -_0804B080: .4byte gUnknown_020028D8 -_0804B084: .4byte gCurrentPinballGame -_0804B088: .4byte 0x0000132C -_0804B08C: .4byte 0x00001334 -_0804B090: - ldr r0, [r5, #0x50] - adds r0, #1 - str r0, [r5, #0x50] - ldr r0, _0804B0C8 @ =gCurrentPinballGame - ldr r3, [r0] - movs r0, #0xa4 - lsls r0, r0, #2 - adds r1, r3, r0 - ldr r0, [r1] - adds r0, #1 - str r0, [r1] - ldrb r0, [r3, #0x1f] - cmp r0, #0 - beq _0804B114 - cmp r0, #2 - bne _0804B0D0 - adds r0, r3, #0 - adds r0, #0x66 - movs r2, #0 - strh r4, [r0] - ldr r4, _0804B0CC @ =0x0000132C - adds r1, r3, r4 - adds r4, #8 - adds r0, r3, r4 - str r0, [r1] - strb r2, [r3, #0x1e] - b _0804B14C - .align 2, 0 -_0804B0C8: .4byte gCurrentPinballGame -_0804B0CC: .4byte 0x0000132C -_0804B0D0: - movs r4, #0 -_0804B0D2: - ldr r0, _0804B104 @ =gCurrentPinballGame - ldr r1, [r0] - adds r2, r1, #0 - adds r2, #0x66 - movs r0, #0 - strh r0, [r2] - ldr r0, _0804B108 @ =0x0000132C - adds r2, r1, r0 - ldr r3, _0804B10C @ =0x00001334 - adds r0, r1, r3 - str r0, [r2] - strb r4, [r1, #0x1e] - ldr r0, _0804B110 @ =gUnknown_020028D8 - ldr r0, [r0, #0x2c] - bl _call_via_r0 - lsls r0, r4, #0x10 - movs r4, #0x80 - lsls r4, r4, #9 - adds r0, r0, r4 - lsrs r4, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #3 - ble _0804B0D2 - b _0804B14C - .align 2, 0 -_0804B104: .4byte gCurrentPinballGame -_0804B108: .4byte 0x0000132C -_0804B10C: .4byte 0x00001334 -_0804B110: .4byte gUnknown_020028D8 -_0804B114: - movs r4, #0 - adds r5, r6, #0 -_0804B118: - ldr r0, _0804B194 @ =gCurrentPinballGame - ldr r1, [r0] - adds r2, r1, #0 - adds r2, #0x66 - movs r0, #0 - strh r0, [r2] - ldr r0, _0804B198 @ =0x0000132C - adds r2, r1, r0 - ldr r3, _0804B19C @ =0x00001334 - adds r0, r1, r3 - str r0, [r2] - strb r4, [r1, #0x1e] - ldr r0, [r5, #0x2c] - bl _call_via_r0 - ldr r0, [r5, #0x34] - bl _call_via_r0 - lsls r0, r4, #0x10 - movs r4, #0x80 - lsls r4, r4, #9 - adds r0, r0, r4 - lsrs r4, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #3 - ble _0804B118 -_0804B14C: - ldr r4, _0804B1A0 @ =gUnknown_020028D8 - ldr r0, [r4, #0x3c] - bl _call_via_r0 - ldr r0, [r4, #0x44] - bl _call_via_r0 -_0804B15A: - ldr r0, _0804B1A4 @ =gMain - ldr r0, [r0, #0x4c] - movs r1, #0x1f - ands r0, r1 - lsrs r0, r0, #4 - cmp r0, #0 - beq _0804B1B8 - movs r4, #0 - ldr r7, _0804B1A8 @ =gUnknown_03006240 - ldr r0, _0804B1AC @ =0xFFFFF9C0 - adds r6, r7, r0 - ldr r5, _0804B1B0 @ =0x0000032B - ldr r1, _0804B1B4 @ =0xFFFFC156 - adds r3, r1, #0 -_0804B176: - lsls r0, r4, #0x10 - asrs r0, r0, #0x10 - adds r1, r0, r5 - lsls r1, r1, #1 - adds r1, r1, r6 - adds r2, r0, r3 - strh r2, [r1] - adds r0, #1 - lsls r0, r0, #0x10 - lsrs r4, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #8 - ble _0804B176 - b _0804B1DC - .align 2, 0 -_0804B194: .4byte gCurrentPinballGame -_0804B198: .4byte 0x0000132C -_0804B19C: .4byte 0x00001334 -_0804B1A0: .4byte gUnknown_020028D8 -_0804B1A4: .4byte gMain -_0804B1A8: .4byte gUnknown_03006240 -_0804B1AC: .4byte 0xFFFFF9C0 -_0804B1B0: .4byte 0x0000032B -_0804B1B4: .4byte 0xFFFFC156 -_0804B1B8: - movs r4, #0 - ldr r7, _0804B1F0 @ =gUnknown_03006240 - ldr r3, _0804B1F4 @ =0xFFFFF9C0 - adds r5, r7, r3 - ldr r3, _0804B1F8 @ =0x0000032B - ldr r2, _0804B1FC @ =0x000001FF -_0804B1C4: - lsls r1, r4, #0x10 - asrs r1, r1, #0x10 - adds r0, r1, r3 - lsls r0, r0, #1 - adds r0, r0, r5 - strh r2, [r0] - adds r1, #1 - lsls r1, r1, #0x10 - lsrs r4, r1, #0x10 - asrs r1, r1, #0x10 - cmp r1, #8 - ble _0804B1C4 -_0804B1DC: - ldr r1, _0804B200 @ =0x040000D4 - str r7, [r1] - ldr r0, _0804B204 @ =0x06002640 - str r0, [r1, #4] - ldr r0, _0804B208 @ =0x80000020 - str r0, [r1, #8] - ldr r0, [r1, #8] - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_0804B1F0: .4byte gUnknown_03006240 -_0804B1F4: .4byte 0xFFFFF9C0 -_0804B1F8: .4byte 0x0000032B -_0804B1FC: .4byte 0x000001FF -_0804B200: .4byte 0x040000D4 -_0804B204: .4byte 0x06002640 -_0804B208: .4byte 0x80000020 - thumb_func_start sub_4B20C sub_4B20C: @ 0x0804B20C push {r4, lr} diff --git a/expected_objs/sub_4B000.o b/expected_objs/sub_4B000.o deleted file mode 100644 index a6401709..00000000 Binary files a/expected_objs/sub_4B000.o and /dev/null differ diff --git a/include/functions.h b/include/functions.h index 3cea27e0..1f39aadb 100644 --- a/include/functions.h +++ b/include/functions.h @@ -642,7 +642,6 @@ extern void sub_472E4(); //extern ? sub_497BC(); //extern ? sub_49850(); //extern ? sub_49A34(); -//extern ? sub_4B000(); //extern ? sub_4B20C(); //extern ? nullsub_19(); //extern ? sub_4B654(); diff --git a/src/pinball_game_main.c b/src/pinball_game_main.c index 7cb72164..5e88db69 100644 --- a/src/pinball_game_main.c +++ b/src/pinball_game_main.c @@ -727,3 +727,81 @@ void sub_4AE8C(void) gUnknown_020028D8[7].unk4(); gUnknown_020028D8[8].unk4(); } + +void sub_4B000(void) +{ + s16 i; + + sub_4B334(); + if (!(gMain.unkF & 0x2)) + { + gUnknown_020028D8[0].unk4(); + gUnknown_020028D8[2].unk4(); + gUnknown_020028D8[3].unk4(); + gUnknown_020028D8[4].unk4(); + if (gMain.unkF & ~0x40) + { + if (!gCurrentPinballGame->unk1F) + { + for (i = 0; i < 4; i++) + { + gCurrentPinballGame->unk66 = 0; + gCurrentPinballGame->unk132c = &gCurrentPinballGame->unk1334[0]; + gCurrentPinballGame->unk1E = i; + gUnknown_020028D8[6].unk4(); + } + } + } + else + { + gMain.fieldFrameCount++; + gCurrentPinballGame->unk290++; + if (gCurrentPinballGame->unk1F) + { + if (gCurrentPinballGame->unk1F == 2) + { + gCurrentPinballGame->unk66 = 0; + gCurrentPinballGame->unk132c = &gCurrentPinballGame->unk1334[0]; + gCurrentPinballGame->unk1E = 0; + } + else + { + for (i = 0; i < 4; i++) + { + gCurrentPinballGame->unk66 = 0; + gCurrentPinballGame->unk132c = &gCurrentPinballGame->unk1334[0]; + gCurrentPinballGame->unk1E = i; + gUnknown_020028D8[5].unk4(); + } + } + } + else + { + for (i = 0; i < 4; i++) + { + gCurrentPinballGame->unk66 = 0; + gCurrentPinballGame->unk132c = &gCurrentPinballGame->unk1334[0]; + gCurrentPinballGame->unk1E = i; + gUnknown_020028D8[5].unk4(); + gUnknown_020028D8[6].unk4(); + } + } + } + + gUnknown_020028D8[7].unk4(); + gUnknown_020028D8[8].unk4(); + } + + if ((gMain.systemFrameCount % 32) / 16 > 0) + { + for (i = 0; i < 9; i++) + gUnknown_03005C00[0x32B + i] = 0xC156 + i; + } + else + { + for (i = 0; i < 9; i++) + gUnknown_03005C00[0x32B + i] = 0x1FF; + } + + DmaCopy16(3, &gUnknown_03005C00[0x320], (void *)0x6002640, 0x40); +}