diff --git a/asm/rom_11B9C.s b/asm/rom_11B9C.s index 4b04919..4174156 100644 --- a/asm/rom_11B9C.s +++ b/asm/rom_11B9C.s @@ -6264,243 +6264,7 @@ _08017628: .4byte 0x000003AB _0801762C: .4byte 0x000003DA _08017630: .4byte 0x000003A2 - .section .text176B0 - - thumb_func_start sub_176B0 -sub_176B0: @ 0x080176B0 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #8 - mov r8, r0 - mov sl, r1 - add r2, sp, #4 - movs r1, #0 - strh r1, [r2] - ldr r0, _080177B0 @ =gCurrentPinballGame - ldr r0, [r0] - mov sb, r0 - ldr r0, _080177B4 @ =0x0000132C - add r0, sb - ldr r0, [r0] - strh r1, [r0, #4] - mov r0, r8 - movs r1, #0 - ldrsh r4, [r0, r1] - adds r0, r4, #0 - cmp r4, #0 - bge _080176E2 - adds r0, r4, #7 -_080176E2: - asrs r1, r0, #3 - lsls r0, r1, #0x10 - lsrs r0, r0, #0x10 - ldr r2, _080177B8 @ =0xFFFF0000 - mov ip, r2 - ands r5, r2 - orrs r5, r0 - mov r0, r8 - movs r2, #2 - ldrsh r3, [r0, r2] - adds r0, r3, #0 - cmp r3, #0 - bge _080176FE - adds r0, r3, #7 -_080176FE: - asrs r0, r0, #3 - lsls r2, r0, #0x10 - ldr r7, _080177BC @ =0x0000FFFF - ands r5, r7 - lsls r1, r1, #3 - subs r1, r4, r1 - lsls r1, r1, #0x10 - lsrs r1, r1, #0x10 - mov r4, ip - ands r6, r4 - orrs r6, r1 - lsls r0, r0, #3 - subs r0, r3, r0 - lsls r0, r0, #0x10 - ands r6, r7 - orrs r6, r0 - orrs r5, r2 - asrs r4, r2, #0x10 - adds r2, r4, #0 - cmp r4, #0 - bge _0801772A - adds r2, #0x3f -_0801772A: - asrs r2, r2, #6 - mov r0, sb - adds r0, #0x24 - movs r3, #0 - ldrsb r3, [r0, r3] - lsls r1, r2, #6 - subs r1, r4, r1 - lsls r1, r1, #0x10 - ands r5, r7 - ldr r0, _080177C0 @ =gUnknown_02031520 - mov ip, r0 - adds r3, r3, r2 - lsls r3, r3, #2 - mov r2, ip - adds r2, #0x38 - adds r2, r3, r2 - lsls r0, r5, #0x10 - asrs r0, r0, #0x10 - asrs r1, r1, #0xa - adds r1, r1, r0 - ldr r0, [r2] - lsls r1, r1, #1 - adds r1, r1, r0 - mov r4, ip - adds r4, #0x48 - adds r4, r3, r4 - movs r0, #0 - ldrsh r2, [r1, r0] - asrs r1, r6, #0x10 - lsls r0, r6, #0x10 - asrs r0, r0, #0x10 - lsls r1, r1, #3 - lsls r2, r2, #6 - adds r1, r1, r2 - adds r1, r1, r0 - ldr r2, [r4] - lsls r0, r1, #1 - adds r0, r0, r2 - ldrh r2, [r0] - mov r0, sp - strh r2, [r0] - mov r0, ip - adds r0, #0x58 - adds r3, r3, r0 - ldr r0, [r3] - adds r0, r0, r1 - ldrb r0, [r0] - mov r4, sp - adds r4, #2 - strb r0, [r4] - mov r0, r8 - mov r1, sp - adds r2, r4, #0 - bl sub_17898 - ldrb r0, [r4] - movs r3, #0xf - ands r3, r0 - lsrs r5, r0, #4 - subs r0, r3, #1 - cmp r0, #5 - bhi _08017876 - lsls r0, r0, #2 - ldr r1, _080177C4 @ =_080177C8 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080177B0: .4byte gCurrentPinballGame -_080177B4: .4byte 0x0000132C -_080177B8: .4byte 0xFFFF0000 -_080177BC: .4byte 0x0000FFFF -_080177C0: .4byte gUnknown_02031520 -_080177C4: .4byte _080177C8 -_080177C8: @ jump table - .4byte _080177E0 @ case 0 - .4byte _08017804 @ case 1 - .4byte _08017804 @ case 2 - .4byte _080177E0 @ case 3 - .4byte _08017874 @ case 4 - .4byte _080177E0 @ case 5 -_080177E0: - ldr r2, _08017800 @ =gCurrentPinballGame - ldr r0, [r2] - subs r1, r3, #1 - adds r0, #0x23 - strb r1, [r0] - ldr r0, [r2] - adds r0, #0x22 - movs r1, #1 - strb r1, [r0] - mov r0, sp - ldrh r0, [r0] - mov r2, sl - strh r0, [r2] - mov r4, sp - strh r1, [r4, #4] - b _08017876 - .align 2, 0 -_08017800: .4byte gCurrentPinballGame -_08017804: - ldr r2, _0801785C @ =gCurrentPinballGame - ldr r0, [r2] - adds r0, #0x23 - movs r1, #0 - strb r1, [r0] - ldr r0, [r2] - adds r0, #0x22 - movs r3, #1 - strb r3, [r0] - mov r0, sp - ldrh r1, [r0] - ldr r0, _08017860 @ =0x0000FFF0 - ands r0, r1 - mov r1, sl - strh r0, [r1] - mov r4, sp - strh r3, [r4, #4] - ldr r1, [r2] - ldr r0, _08017864 @ =0x00000404 - adds r3, r1, r0 - movs r0, #0 - ldrsb r0, [r3, r0] - adds r4, r2, #0 - cmp r0, #0 - bne _0801784E - ldr r2, _08017868 @ =0x00000406 - adds r0, r1, r2 - movs r2, #0 - ldrsb r2, [r0, r2] - cmp r2, #0 - bne _0801784E - movs r0, #1 - strb r0, [r3] - ldr r0, [r4] - ldr r1, _0801786C @ =0x0000040A - adds r0, r0, r1 - strh r2, [r0] -_0801784E: - ldr r0, [r4] - ldr r2, _08017870 @ =0x0000040C - adds r0, r0, r2 - movs r1, #0x28 - strh r1, [r0] - b _08017876 - .align 2, 0 -_0801785C: .4byte gCurrentPinballGame -_08017860: .4byte 0x0000FFF0 -_08017864: .4byte 0x00000404 -_08017868: .4byte 0x00000406 -_0801786C: .4byte 0x0000040A -_08017870: .4byte 0x0000040C -_08017874: - movs r5, #4 -_08017876: - adds r0, r5, #0 - add r1, sp, #4 - mov r2, sl - bl sub_179D0 - mov r4, sp - movs r1, #4 - ldrsh r0, [r4, r1] - add sp, #8 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r1} - bx r1 + .section .text17898 thumb_func_start sub_17898 sub_17898: @ 0x08017898 diff --git a/expected_objs/sub_176B0.o b/expected_objs/sub_176B0.o deleted file mode 100644 index 19fb5fb..0000000 Binary files a/expected_objs/sub_176B0.o and /dev/null differ diff --git a/include/functions.h b/include/functions.h index d770e52..ab5af21 100644 --- a/include/functions.h +++ b/include/functions.h @@ -394,8 +394,8 @@ extern void sub_1493C(void); //extern ? sub_173FC(); extern void sub_17634(u8); //extern ? sub_176B0(); -//extern ? sub_17898(); -//extern ? sub_179D0(); +extern void sub_17898(struct Vector16 *, u16 *, u8 *); +extern void sub_179D0(u8, u16 *, u16 *); //extern ? sub_17C1C(); //extern ? sub_17F28(); //extern ? sub_18180(); diff --git a/include/global.h b/include/global.h index c23277b..aecb56b 100644 --- a/include/global.h +++ b/include/global.h @@ -369,9 +369,9 @@ struct PinballGame /*0x3FE*/ u8 filler3FE[0x2]; /*0x400*/ s16 unk400; /*0x402*/ s16 unk402; - /*0x404*/ u8 unk404; + /*0x404*/ s8 unk404; /*0x405*/ u8 unk405; - /*0x406*/ u8 unk406; + /*0x406*/ s8 unk406; /*0x407*/ u8 filler407[0x1]; /*0x408*/ s16 unk408; /*0x40A*/ s16 unk40A; diff --git a/ld_script.txt b/ld_script.txt index 8c19b26..48ee018 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -48,7 +48,7 @@ SECTIONS src/rom_13D24.o(.text); asm/rom_11B9C.o(.text14488); src/rom_17634.o(.text); - asm/rom_11B9C.o(.text176B0); + asm/rom_11B9C.o(.text17898); src/rom_18784.o(.text); src/rom_19B64.o(.text); src/rom_19D04.o(.text); diff --git a/src/rom_17634.c b/src/rom_17634.c index 4a45baa..766e99e 100644 --- a/src/rom_17634.c +++ b/src/rom_17634.c @@ -1,8 +1,8 @@ #include "global.h" -void sub_17634(u8 param) +void sub_17634(u8 arg0) { - switch (param) + switch (arg0) { case 1: case 2: @@ -26,4 +26,72 @@ void sub_17634(u8 param) case 15: break; } -} \ No newline at end of file +} + +s16 sub_176B0(struct Vector16 *arg0, u16 *arg1) +{ + struct Vector16 vec1; + struct Vector16 vec2; + u16 sp00; + u8 sp02; + u16 return_val; + s16 unk0; + s32 unk1; + s32 unk2; + + u32 some_enum; + u32 switch_enum; + + return_val = 0; + gCurrentPinballGame->ball->unk4 = 0; + + vec1.x = arg0->x / 8; + vec1.y = arg0->y / 8; + vec2.x = arg0->x % 8; + vec2.y = arg0->y % 8; + unk1 = vec1.y / 64; + unk2 = gCurrentPinballGame->unk24; + vec1.y %= 64; + unk0 = gUnknown_02031520.unk38[unk2 + unk1][vec1.y * 64 + vec1.x]; + sp00 = gUnknown_02031520.unk48[unk2 + unk1][unk0 * 64 + vec2.y * 8 + vec2.x]; + sp02 = gUnknown_02031520.unk58[unk2 + unk1][unk0 * 64 + vec2.y * 8 + vec2.x]; + + sub_17898(arg0, &sp00, &sp02); + switch_enum = sp02 & 0xF; + some_enum = sp02 >> 4; + + switch (switch_enum) + { + case 1: + case 4: + case 6: + gCurrentPinballGame->unk23 = switch_enum - 1; + gCurrentPinballGame->unk22 = 1; + *arg1 = sp00; + return_val = 1; + break; + case 2: + case 3: + gCurrentPinballGame->unk23 = 0; + gCurrentPinballGame->unk22 = 1; + *arg1 = sp00 & 0x0000FFF0; + return_val = 1; + if (gCurrentPinballGame->unk404 == 0) + { + s32 unk3 = gCurrentPinballGame->unk406; + if (unk3 == 0) + { + gCurrentPinballGame->unk404 = 1; + gCurrentPinballGame->unk40A = unk3; + } + } + gCurrentPinballGame->unk40C = 40; + break; + case 5: + some_enum = 4; + break; + } + + sub_179D0(some_enum, &return_val, arg1); + return return_val; +}