diff --git a/asm/rom_11B9C.s b/asm/rom_11B9C.s index 2514a20..10616fe 100644 --- a/asm/rom_11B9C.s +++ b/asm/rom_11B9C.s @@ -5914,407 +5914,7 @@ _08017628: .4byte 0x000003AB _0801762C: .4byte 0x000003DA _08017630: .4byte 0x000003A2 - .section .text17C1C - - thumb_func_start sub_17C1C -sub_17C1C: @ 0x08017C1C - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - sub sp, #4 - adds r3, r0, #0 - ldr r0, _08017CF8 @ =gCurrentPinballGame - ldr r1, [r0] - movs r2, #0xfe - lsls r2, r2, #2 - adds r1, r1, r2 - movs r2, #1 - strb r2, [r1] - movs r1, #0 - ldrsh r4, [r3, r1] - adds r1, r4, #0 - mov ip, r0 - cmp r4, #0 - bge _08017C42 - adds r1, r4, #7 -_08017C42: - asrs r1, r1, #3 - lsls r0, r1, #0x10 - lsrs r0, r0, #0x10 - ldr r2, _08017CFC @ =0xFFFF0000 - mov r8, r2 - ands r6, r2 - orrs r6, r0 - movs r0, #2 - ldrsh r3, [r3, r0] - adds r0, r3, #0 - cmp r3, #0 - bge _08017C5C - adds r0, r3, #7 -_08017C5C: - asrs r0, r0, #3 - lsls r2, r0, #0x10 - ldr r5, _08017D00 @ =0x0000FFFF - ands r6, r5 - lsls r1, r1, #3 - subs r1, r4, r1 - lsls r1, r1, #0x10 - lsrs r1, r1, #0x10 - mov r4, r8 - ands r7, r4 - orrs r7, r1 - lsls r0, r0, #3 - subs r0, r3, r0 - lsls r0, r0, #0x10 - ands r7, r5 - orrs r7, r0 - orrs r6, r2 - asrs r4, r2, #0x10 - adds r2, r4, #0 - cmp r4, #0 - bge _08017C88 - adds r2, #0x3f -_08017C88: - asrs r2, r2, #6 - mov r0, ip - ldr r0, [r0] - mov r8, r0 - adds r0, #0x24 - movs r3, #0 - ldrsb r3, [r0, r3] - lsls r1, r2, #6 - subs r1, r4, r1 - lsls r1, r1, #0x10 - ands r6, r5 - ldr r4, _08017D04 @ =gUnknown_02031520 - adds r3, r3, r2 - lsls r3, r3, #2 - adds r2, r4, #0 - adds r2, #0x38 - adds r2, r3, r2 - lsls r0, r6, #0x10 - asrs r0, r0, #0x10 - asrs r1, r1, #0xa - adds r1, r1, r0 - ldr r0, [r2] - lsls r1, r1, #1 - adds r1, r1, r0 - movs r0, #0 - ldrsh r2, [r1, r0] - asrs r1, r7, #0x10 - lsls r0, r7, #0x10 - asrs r0, r0, #0x10 - lsls r1, r1, #3 - lsls r2, r2, #6 - adds r1, r1, r2 - adds r1, r1, r0 - adds r4, #0x58 - adds r3, r3, r4 - ldr r0, [r3] - adds r0, r0, r1 - ldrb r1, [r0] - lsrs r1, r1, #4 - movs r0, #0x80 - lsls r0, r0, #3 - add r0, r8 - ldrh r3, [r0] - ldr r2, _08017D08 @ =0x00000402 - add r2, r8 - ldrh r4, [r2] - adds r0, r1, #0 - subs r0, #8 - cmp r0, #4 - bls _08017CEE - b _08017F18 -_08017CEE: - lsls r0, r0, #2 - ldr r1, _08017D0C @ =_08017D10 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08017CF8: .4byte gCurrentPinballGame -_08017CFC: .4byte 0xFFFF0000 -_08017D00: .4byte 0x0000FFFF -_08017D04: .4byte gUnknown_02031520 -_08017D08: .4byte 0x00000402 -_08017D0C: .4byte _08017D10 -_08017D10: @ jump table - .4byte _08017D24 @ case 0 - .4byte _08017D74 @ case 1 - .4byte _08017DBE @ case 2 - .4byte _08017E9C @ case 3 - .4byte _08017EEC @ case 4 -_08017D24: - lsls r0, r3, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x72 - bgt _08017D50 - lsls r0, r4, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x38 - bgt _08017D40 - mov r3, ip - ldr r0, [r3] - ldr r4, _08017D3C @ =0x0000041C - b _08017F0A - .align 2, 0 -_08017D3C: .4byte 0x0000041C -_08017D40: - mov r1, ip - ldr r0, [r1] - ldr r2, _08017D4C @ =0x0000041D - adds r1, r0, r2 - b _08017F0C - .align 2, 0 -_08017D4C: .4byte 0x0000041D -_08017D50: - lsls r0, r4, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x63 - bgt _08017D64 - mov r3, ip - ldr r0, [r3] - ldr r4, _08017D60 @ =0x0000041F - b _08017F0A - .align 2, 0 -_08017D60: .4byte 0x0000041F -_08017D64: - mov r1, ip - ldr r0, [r1] - ldr r2, _08017D70 @ =0x0000041E - adds r1, r0, r2 - b _08017F0C - .align 2, 0 -_08017D70: .4byte 0x0000041E -_08017D74: - lsls r0, r3, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x72 - bgt _08017DA0 - lsls r0, r4, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x45 - bgt _08017D90 - mov r3, ip - ldr r0, [r3] - ldr r4, _08017D8C @ =0x00000427 - b _08017F0A - .align 2, 0 -_08017D8C: .4byte 0x00000427 -_08017D90: - mov r1, ip - ldr r0, [r1] - ldr r2, _08017D9C @ =0x00000425 - adds r1, r0, r2 - b _08017F0C - .align 2, 0 -_08017D9C: .4byte 0x00000425 -_08017DA0: - lsls r0, r4, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x45 - bgt _08017DB2 - mov r3, ip - ldr r0, [r3] - movs r4, #0x85 - lsls r4, r4, #3 - b _08017F0A -_08017DB2: - mov r1, ip - ldr r0, [r1] - movs r2, #0x84 - lsls r2, r2, #3 - adds r1, r0, r2 - b _08017F0C -_08017DBE: - mov r3, ip - ldr r0, [r3] - movs r4, #0xfe - lsls r4, r4, #2 - adds r0, r0, r4 - movs r1, #0 - strb r1, [r0] - ldr r2, [r3] - ldr r1, _08017E10 @ =0x00000412 - adds r0, r2, r1 - movs r3, #0 - ldrsh r0, [r0, r3] - cmp r0, #0 - bne _08017E18 - adds r4, #8 - adds r0, r2, r4 - ldr r1, [r0] - ldr r3, _08017E14 @ =0x00000434 - adds r0, r2, r3 - ldr r0, [r0] - cmp r1, r0 - bne _08017DEC - b _08017F18 -_08017DEC: - adds r4, #0x2e - adds r1, r2, r4 - movs r0, #0x11 - strb r0, [r1] - mov r0, ip - ldr r1, [r0] - movs r2, #0x80 - lsls r2, r2, #3 - adds r0, r1, r2 - ldrh r2, [r0] - adds r0, r1, r3 - strh r2, [r0] - subs r3, #0x32 - adds r0, r1, r3 - ldrh r0, [r0] - adds r4, #8 - b _08017E90 - .align 2, 0 -_08017E10: .4byte 0x00000412 -_08017E14: .4byte 0x00000434 -_08017E18: - cmp r0, #8 - bne _08017E58 - movs r1, #0x80 - lsls r1, r1, #3 - adds r0, r2, r1 - ldr r1, [r0] - movs r3, #0x87 - lsls r3, r3, #3 - adds r0, r2, r3 - ldr r0, [r0] - cmp r1, r0 - beq _08017F18 - ldr r4, _08017E54 @ =0x0000042F - adds r1, r2, r4 - movs r0, #0x11 - strb r0, [r1] - mov r0, ip - ldr r1, [r0] - movs r2, #0x80 - lsls r2, r2, #3 - adds r0, r1, r2 - ldrh r2, [r0] - adds r0, r1, r3 - strh r2, [r0] - subs r3, #0x36 - adds r0, r1, r3 - ldrh r0, [r0] - adds r4, #0xb - b _08017E90 - .align 2, 0 -_08017E54: .4byte 0x0000042F -_08017E58: - cmp r0, #0x10 - bne _08017F18 - movs r1, #0x80 - lsls r1, r1, #3 - adds r0, r2, r1 - ldr r1, [r0] - ldr r3, _08017E98 @ =0x0000043C - adds r0, r2, r3 - ldr r0, [r0] - cmp r1, r0 - beq _08017F18 - movs r4, #0x86 - lsls r4, r4, #3 - adds r1, r2, r4 - movs r0, #0x11 - strb r0, [r1] - mov r0, ip - ldr r1, [r0] - movs r2, #0x80 - lsls r2, r2, #3 - adds r0, r1, r2 - ldrh r2, [r0] - adds r0, r1, r3 - strh r2, [r0] - subs r3, #0x3a - adds r0, r1, r3 - ldrh r0, [r0] - adds r4, #0xe -_08017E90: - adds r1, r1, r4 - strh r0, [r1] - b _08017F18 - .align 2, 0 -_08017E98: .4byte 0x0000043C -_08017E9C: - lsls r0, r3, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x72 - bgt _08017EC8 - lsls r0, r4, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x45 - bgt _08017EBC - mov r1, ip - ldr r0, [r1] - ldr r2, _08017EB8 @ =0x00000429 - adds r1, r0, r2 - b _08017F0C - .align 2, 0 -_08017EB8: .4byte 0x00000429 -_08017EBC: - mov r3, ip - ldr r0, [r3] - ldr r4, _08017EC4 @ =0x00000422 - b _08017F0A - .align 2, 0 -_08017EC4: .4byte 0x00000422 -_08017EC8: - lsls r0, r4, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x45 - bgt _08017EE0 - mov r1, ip - ldr r0, [r1] - ldr r2, _08017EDC @ =0x00000426 - adds r1, r0, r2 - b _08017F0C - .align 2, 0 -_08017EDC: .4byte 0x00000426 -_08017EE0: - mov r3, ip - ldr r0, [r3] - ldr r4, _08017EE8 @ =0x00000421 - b _08017F0A - .align 2, 0 -_08017EE8: .4byte 0x00000421 -_08017EEC: - lsls r0, r3, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x72 - bgt _08017F04 - mov r1, ip - ldr r0, [r1] - ldr r2, _08017F00 @ =0x00000424 - adds r1, r0, r2 - b _08017F0C - .align 2, 0 -_08017F00: .4byte 0x00000424 -_08017F04: - mov r3, ip - ldr r0, [r3] - ldr r4, _08017F24 @ =0x00000423 -_08017F0A: - adds r1, r0, r4 -_08017F0C: - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - bgt _08017F18 - movs r0, #0x18 - strb r0, [r1] -_08017F18: - add sp, #4 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_08017F24: .4byte 0x00000423 + .section .text17F28 thumb_func_start sub_17F28 sub_17F28: @ 0x08017F28 diff --git a/expected_objs/sub_179D0.o b/expected_objs/sub_179D0.o deleted file mode 100644 index 8bf272a..0000000 Binary files a/expected_objs/sub_179D0.o and /dev/null differ diff --git a/expected_objs/sub_17C1C.o b/expected_objs/sub_17C1C.o deleted file mode 100644 index 659ba29..0000000 Binary files a/expected_objs/sub_17C1C.o and /dev/null differ diff --git a/include/global.h b/include/global.h index dcfc520..3289b49 100644 --- a/include/global.h +++ b/include/global.h @@ -393,8 +393,7 @@ struct PinballGame /*0x3FA*/ s16 unk3FA; /*0x3FC*/ s16 unk3FC; /*0x3FE*/ u8 filler3FE[0x2]; - /*0x400*/ s16 unk400; - /*0x402*/ s16 unk402; + /*0x400*/ struct Vector16 unk400; /*0x404*/ s8 unk404; /*0x405*/ u8 unk405; /*0x406*/ s8 unk406; @@ -410,7 +409,11 @@ struct PinballGame /*0x41C*/ s8 unk41C[4]; /*0x420*/ s8 unk420[10]; /*0x42A*/ u8 unk42A[7]; - /*0x431*/ u8 filler431[0x21]; + /*0x431*/ u8 filler431[0x3]; + /*0x434*/ struct Vector16 unk434; + /*0x438*/ struct Vector16 unk438; + /*0x43C*/ struct Vector16 unk43C; + /*0x440*/ u8 filler440[0x12]; /*0x452*/ u16 unk452; /*0x454*/ u8 filler454[0xD8]; /*0x52C*/ s8 unk52C; diff --git a/ld_script.txt b/ld_script.txt index 0ec1bcb..6cc3034 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -48,7 +48,7 @@ SECTIONS src/rom_13D24.o(.text); asm/rom_11B9C.o(.text); src/rom_17634.o(.text); - asm/rom_11B9C.o(.text17C1C); + asm/rom_11B9C.o(.text17F28); 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 f1c96b7..816e0a1 100644 --- a/src/rom_17634.c +++ b/src/rom_17634.c @@ -286,4 +286,155 @@ void sub_179D0(u8 arg0, u16 *arg1, u16 *arg2) } break; } +} + +void sub_17C1C(struct Vector16 *arg0) +{ + struct Vector16 vec1; + struct Vector16 vec2; + s16 x, y; + u16 sp00; + u8 sp02; + s16 unk0; + s32 unk1; + s32 unk2; + u32 some_enum; + + gCurrentPinballGame->unk3F8 = 1; + 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.unk14.unk38[unk2 + unk1][vec1.y * 64 + vec1.x]; + sp00 = gUnknown_02031520.unk14.unk48[unk2 + unk1][unk0 * 64 + vec2.y * 8 + vec2.x]; + sp02 = gUnknown_02031520.unk14.unk58[unk2 + unk1][unk0 * 64 + vec2.y * 8 + vec2.x]; + + some_enum = (sp02 >> 2) >> 2; + + x = gCurrentPinballGame->unk400.x; + y = gCurrentPinballGame->unk400.y; + + switch (some_enum) + { + case 8: + if (x <= 0x72) + { + if (y <= 0x38) + { + if (gCurrentPinballGame->unk41C[0] <= 0) + gCurrentPinballGame->unk41C[0] = 0x18; + } + else + { + if (gCurrentPinballGame->unk41C[1] <= 0) + gCurrentPinballGame->unk41C[1] = 0x18; + } + } + else if (y <= 0x63) + { + if (gCurrentPinballGame->unk41C[3] <= 0) + gCurrentPinballGame->unk41C[3] = 0x18; + } + else + { + if (gCurrentPinballGame->unk41C[2] <= 0) + gCurrentPinballGame->unk41C[2] = 0x18; + } + break; + case 9: + if (x <= 0x72) + { + if (y <= 0x45) + { + if (gCurrentPinballGame->unk420[7] <= 0) + gCurrentPinballGame->unk420[7] = 0x18; + } + else + { + if (gCurrentPinballGame->unk420[5] <= 0) + gCurrentPinballGame->unk420[5] = 0x18; + } + } + else if (y <= 0x45) + { + if (gCurrentPinballGame->unk420[8] <= 0) + gCurrentPinballGame->unk420[8] = 0x18; + } + else + { + if (gCurrentPinballGame->unk420[0] <= 0) + gCurrentPinballGame->unk420[0] = 0x18; + } + break; + case 10: + gCurrentPinballGame->unk3F8 = 0; + if (gCurrentPinballGame->unk412 == 0) + { + if (gCurrentPinballGame->unk400.x != gCurrentPinballGame->unk434.x || gCurrentPinballGame->unk400.y != gCurrentPinballGame->unk434.y) + { + gCurrentPinballGame->unk42A[4] = 0x11; + gCurrentPinballGame->unk434.x = gCurrentPinballGame->unk400.x; + gCurrentPinballGame->unk434.y = gCurrentPinballGame->unk400.y; + } + } + else if (gCurrentPinballGame->unk412 == 8) + { + if (gCurrentPinballGame->unk400.x != gCurrentPinballGame->unk438.x || gCurrentPinballGame->unk400.y != gCurrentPinballGame->unk438.y) + { + gCurrentPinballGame->unk42A[5] = 0x11; + gCurrentPinballGame->unk438.x = gCurrentPinballGame->unk400.x; + gCurrentPinballGame->unk438.y = gCurrentPinballGame->unk400.y; + } + } + else if (gCurrentPinballGame->unk412 == 16) + { + if (gCurrentPinballGame->unk400.x != gCurrentPinballGame->unk43C.x || gCurrentPinballGame->unk400.y != gCurrentPinballGame->unk43C.y) + { + gCurrentPinballGame->unk42A[6] = 0x11; + gCurrentPinballGame->unk43C.x = gCurrentPinballGame->unk400.x; + gCurrentPinballGame->unk43C.y = gCurrentPinballGame->unk400.y; + } + } + break; + case 11: + if (x <= 0x72) + { + if (y <= 0x45) + { + if (gCurrentPinballGame->unk420[9] <= 0) + gCurrentPinballGame->unk420[9] = 0x18; + } + else + { + if (gCurrentPinballGame->unk420[2] <= 0) + gCurrentPinballGame->unk420[2] = 0x18; + } + } + else if (y <= 0x45) + { + if (gCurrentPinballGame->unk420[6] <= 0) + gCurrentPinballGame->unk420[6] = 0x18; + } + else + { + if (gCurrentPinballGame->unk420[1] <= 0) + gCurrentPinballGame->unk420[1] = 0x18; + } + break; + case 12: + if (x <= 0x72) + { + if (gCurrentPinballGame->unk420[4] <= 0) + gCurrentPinballGame->unk420[4] = 0x18; + } + else + { + if (gCurrentPinballGame->unk420[3] <= 0) + gCurrentPinballGame->unk420[3] = 0x18; + } + break; + } } \ No newline at end of file diff --git a/src/rom_356A0.c b/src/rom_356A0.c index aa3779a..9a1bb04 100644 --- a/src/rom_356A0.c +++ b/src/rom_356A0.c @@ -183,7 +183,7 @@ void sub_35860(void) gCurrentPinballGame->unk42A[i] = 0; gCurrentPinballGame->unk1A = 0; - gCurrentPinballGame->unk402 = gCurrentPinballGame->unk3EA / 10 + 58; + gCurrentPinballGame->unk400.y = gCurrentPinballGame->unk3EA / 10 + 58; sub_38218(); gCurrentPinballGame->unk387 = 1; sub_35D54(); @@ -892,8 +892,8 @@ void sub_36CB4(void) gCurrentPinballGame->unk387 = 1; } - gCurrentPinballGame->unk400 = (gCurrentPinballGame->unk3E8 / 10) + 120; - gCurrentPinballGame->unk402 = (gCurrentPinballGame->unk3EA / 10) + 58; + gCurrentPinballGame->unk400.x = (gCurrentPinballGame->unk3E8 / 10) + 120; + gCurrentPinballGame->unk400.y = (gCurrentPinballGame->unk3EA / 10) + 58; if (gCurrentPinballGame->unk40E > 7) gCurrentPinballGame->unk3F7 = 1; else if (gCurrentPinballGame->unk3FA > 15)