diff --git a/asm/rom_11B9C.s b/asm/rom_11B9C.s index 3a6a676..893d6de 100644 --- a/asm/rom_11B9C.s +++ b/asm/rom_11B9C.s @@ -4,265 +4,6 @@ .syntax unified - .text - .section .text1333C - - thumb_func_start sub_13B28 -sub_13B28: @ 0x08013B28 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x14 - mov r8, r0 - str r1, [sp, #8] - movs r3, #0 - ldrsh r1, [r0, r3] - lsls r1, r1, #0x17 - movs r4, #2 - ldrsh r0, [r0, r4] - lsls r0, r0, #0x17 - lsrs r5, r1, #0x10 - orrs r5, r0 - ldr r6, [sp, #8] - ldrh r1, [r6, #2] - lsls r1, r1, #0x10 - ldrh r0, [r6] - orrs r0, r1 - str r0, [sp, #4] - lsls r2, r2, #0x10 - mov sb, r2 - mov r0, sb - asrs r0, r0, #0x10 - mov sl, r0 - b _08013C4E -_08013B60: - ldr r2, _08013C04 @ =0xFFFFF500 - adds r1, r5, r2 - lsls r1, r1, #0x10 - asrs r0, r5, #0x10 - ldr r3, _08013C08 @ =0xFFFFE800 - adds r0, r0, r3 - lsls r0, r0, #0x10 - lsrs r7, r1, #0x10 - orrs r7, r0 - lsls r0, r7, #0x10 - asrs r0, r0, #0x10 - adds r1, r0, #0 - muls r1, r0, r1 - asrs r0, r7, #0x10 - adds r6, r0, #0 - muls r6, r0, r6 - adds r0, r6, #0 - adds r1, r1, r0 - ldr r2, _08013C0C @ =0xFFDC0000 - adds r0, r1, r2 - lsls r0, r0, #2 - bl Sqrt - lsls r0, r0, #0x10 - lsrs r0, r0, #0x11 - mov r3, sb - asrs r1, r3, #0x10 - add r2, sp, #4 - adds r3, r4, #0 - bl sub_14B84 - add r0, sp, #4 - movs r4, #0 - ldrsh r2, [r0, r4] - movs r1, #0xe1 - lsls r1, r1, #1 - cmp r2, r1 - bgt _08013BB2 - ldr r1, _08013C10 @ =0xFFFFFE3E - cmp r2, r1 - bge _08013BB4 -_08013BB2: - strh r1, [r0] -_08013BB4: - ldrh r0, [r0] - adds r0, r0, r5 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - ldr r1, _08013C14 @ =0xFFFF0000 - ands r5, r1 - orrs r5, r0 - asrs r2, r5, #0x10 - add r0, sp, #4 - ldrh r1, [r0, #2] - adds r1, r1, r2 - lsls r1, r1, #0x10 - ldr r0, _08013C18 @ =0x0000FFFF - ands r5, r0 - orrs r5, r1 - lsls r0, r5, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0 - bge _08013BDC - adds r0, #0x7f -_08013BDC: - asrs r1, r0, #7 - mov r6, r8 - strh r1, [r6] - asrs r0, r5, #0x10 - cmp r0, #0 - bge _08013BEA - adds r0, #0x7f -_08013BEA: - asrs r0, r0, #7 - mov r2, r8 - strh r0, [r2, #2] - movs r3, #0 - str r3, [sp, #0x10] - cmp r1, #0x31 - bgt _08013BFA - b _08013CF0 -_08013BFA: - ldr r0, _08013C1C @ =gCurrentPinballGame - ldr r0, [r0] - ldrb r0, [r0, #0x1e] - b _08013C22 - .align 2, 0 -_08013C04: .4byte 0xFFFFF500 -_08013C08: .4byte 0xFFFFE800 -_08013C0C: .4byte 0xFFDC0000 -_08013C10: .4byte 0xFFFFFE3E -_08013C14: .4byte 0xFFFF0000 -_08013C18: .4byte 0x0000FFFF -_08013C1C: .4byte gCurrentPinballGame -_08013C20: - lsrs r0, r4, #0x10 -_08013C22: - lsls r0, r0, #0x10 - asrs r1, r0, #0x10 - cmp r1, #3 - bgt _08013C48 - mov r4, r8 - ldr r0, [r4] - adds r1, #1 - lsls r4, r1, #0x10 - asrs r1, r4, #0x10 - mov r2, sp - mov r6, sb - asrs r3, r6, #0x10 - bl sub_14AF4 - lsls r0, r0, #0x10 - cmp r0, #0 - beq _08013C20 - movs r0, #1 - str r0, [sp, #0x10] -_08013C48: - ldr r1, [sp, #0x10] - cmp r1, #0 - beq _08013CF0 -_08013C4E: - ldr r0, _08013CAC @ =gCurrentPinballGame - ldr r1, [r0] - mov r2, sl - lsls r0, r2, #1 - add r0, sl - lsls r0, r0, #2 - adds r3, r1, r0 - ldr r4, _08013CB0 @ =0x000013BC - adds r0, r3, r4 - movs r1, #0 - ldrsb r1, [r0, r1] - ldr r6, _08013CB4 @ =0x000013BD - adds r0, r3, r6 - movs r2, #0 - ldrsb r2, [r0, r2] - adds r4, #8 - adds r0, r3, r4 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - subs r1, r1, r2 - muls r0, r1, r0 - lsls r0, r0, #0x10 - lsrs r6, r0, #0x10 - str r6, [sp, #0xc] - cmp r0, #0 - ble _08013CF0 - ldr r1, _08013CB8 @ =0x000013BE - adds r0, r3, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #6 - bgt _08013CC4 - ldr r2, _08013CBC @ =0x000013C1 - adds r0, r3, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - subs r0, #1 - lsls r0, r0, #2 - ldr r3, _08013CC0 @ =gUnknown_086ACD84 - adds r0, r0, r3 - movs r4, #0x80 - lsls r4, r4, #7 - adds r1, r4, #0 - b _08013CDC - .align 2, 0 -_08013CAC: .4byte gCurrentPinballGame -_08013CB0: .4byte 0x000013BC -_08013CB4: .4byte 0x000013BD -_08013CB8: .4byte 0x000013BE -_08013CBC: .4byte 0x000013C1 -_08013CC0: .4byte gUnknown_086ACD84 -_08013CC4: - ldr r6, _08013CE8 @ =0x000013C1 - adds r0, r3, r6 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, #1 - lsls r0, r0, #2 - ldr r1, _08013CEC @ =gUnknown_086ACD86 - adds r0, r0, r1 - movs r2, #0xc0 - lsls r2, r2, #8 - adds r1, r2, #0 -_08013CDC: - ldrh r0, [r0] - adds r1, r1, r0 - lsls r1, r1, #0x10 - lsrs r4, r1, #0x10 - b _08013B60 - .align 2, 0 -_08013CE8: .4byte 0x000013C1 -_08013CEC: .4byte gUnknown_086ACD86 -_08013CF0: - ldr r3, [sp, #0xc] - lsls r0, r3, #0x10 - cmp r0, #0 - bgt _08013D08 - ldr r0, _08013D04 @ =gCurrentPinballGame - ldr r0, [r0] - adds r0, #0x22 - movs r1, #5 - strb r1, [r0] - b _08013D14 - .align 2, 0 -_08013D04: .4byte gCurrentPinballGame -_08013D08: - add r0, sp, #4 - ldrh r1, [r0] - ldr r4, [sp, #8] - strh r1, [r4] - ldrh r0, [r0, #2] - strh r0, [r4, #2] -_08013D14: - add sp, #0x14 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - - .section .text14488 thumb_func_start sub_14488 diff --git a/expected_objs/sub_13B28.o b/expected_objs/sub_13B28.o deleted file mode 100644 index 27ad2d0..0000000 Binary files a/expected_objs/sub_13B28.o and /dev/null differ diff --git a/include/global.h b/include/global.h index 81a9eb3..fe59c3a 100644 --- a/include/global.h +++ b/include/global.h @@ -102,9 +102,12 @@ struct BallState struct UnkPinballGame13BC { /*0x00*/ s8 unk0; - /*0x01*/ u8 filler1[0x3]; + /*0x01*/ s8 unk1; + /*0x02*/ s8 unk2; + /*0x03*/ s8 filler3[0x1]; /*0x04*/ s8 unk4; - /*0x05*/ u8 filler5[0x3]; + /*0x05*/ s8 unk5; + /*0x05*/ u8 filler6[0x2]; /*0x08*/ s8 unk8; /*0x09*/ u8 filler9[0x3]; }; diff --git a/ld_script.txt b/ld_script.txt index 7b62347..b7c55a6 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -45,7 +45,6 @@ SECTIONS src/titlescreen.o(.text); src/rom_11B9C.o(.text); src/rom_1332C.o(.text); - asm/rom_11B9C.o(.text1333C); src/rom_13D24.o(.text); asm/rom_11B9C.o(.text14488); src/rom_17634.o(.text); diff --git a/src/rom_1332C.c b/src/rom_1332C.c index ad3d077..8f4d077 100644 --- a/src/rom_1332C.c +++ b/src/rom_1332C.c @@ -1,11 +1,14 @@ #include "global.h" +extern u16 gUnknown_086ACD84[][2]; u16 sub_13824(struct Vector16*); void sub_13D24(u16,struct Vector16*, struct Vector16*); void sub_13934(struct Vector16 *arg0, struct Vector16 *arg1, u16 angle); void sub_1493C(void); u16 sub_14488(struct Vector16*, struct Vector16); +u16 sub_14AF4(struct Vector16 r0, s16 r1, s16 *r2 /* s16 or u16 */, s16 r3); +void sub_14B84(u32 r0, s16 r1, struct Vector16 *r2, u16 r3); void sub_1332C() { @@ -249,3 +252,79 @@ void sub_13934(struct Vector16 *arg0, struct Vector16 *arg1, u16 angle) gCurrentPinballGame->unk123 = 0; } } + +void sub_13B28(struct Vector16* arg0, struct Vector16* arg1, s16 arg2) +{ + struct Vector16 r7; + u16 r4; + s16 sp0; + s16 sp12; + bool32 flag; + s16 i; + int temp; + int xx, yy; + struct Vector16 r5 = { arg0->x * 128, arg0->y * 128 }; + struct Vector16 sp4 = { arg1->x, arg1->y }; + + for (;;) + { + sp12 = gCurrentPinballGame->unk13BC[arg2].unk0 - gCurrentPinballGame->unk13BC[arg2].unk1; + + if ((sp12 *= gCurrentPinballGame->unk13BC[arg2].unk8) > 0) + { + if (gCurrentPinballGame->unk13BC[arg2].unk2 < 7) + r4 = gUnknown_086ACD84[gCurrentPinballGame->unk13BC[arg2].unk5 - 1][0] + 0x4000; + else + r4 = gUnknown_086ACD84[gCurrentPinballGame->unk13BC[arg2].unk5 + 1][1] + -0x4000; // This changes compilation, apparently + } + else + { + break; + } + + r7.x = r5.x - 22 * 128; + r7.y = r5.y - 48 * 128; + + xx = r7.x * r7.x; + yy = r7.y * r7.y; + temp = xx + yy - 0x240000; + temp = Sqrt(temp * 4) / 2; + sub_14B84(temp, arg2, &sp4, r4); + + if (sp4.x > 0x1C2) + sp4.x = 0x1C2; + else if (sp4.x < -0x1C2) + sp4.x = -0x1C2; + + r5.x += sp4.x; + r5.y += sp4.y; + arg0->x = r5.x / 128; + arg0->y = r5.y / 128; + flag = FALSE; + + if (arg0->x < 50) + break; + + for (i = gCurrentPinballGame->unk1E; i < 4; i++) + { + if (sub_14AF4(*arg0, i + 1, &sp0, arg2)) + { + flag = TRUE; + break; + } + } + + if (!flag) + break; + } + + if (sp12 <= 0) + { + gCurrentPinballGame->unk22 = 5; + } + else + { + arg1->x = sp4.x; + arg1->y = sp4.y; + } +}