diff --git a/asm/rom_1D5D8.s b/asm/rom_1D5D8.s index 6cc5687..de3a605 100644 --- a/asm/rom_1D5D8.s +++ b/asm/rom_1D5D8.s @@ -4026,457 +4026,3 @@ _0801F688: .4byte 0x80000090 _0801F68C: .4byte gOamBuffer _0801F690: .4byte 0xFFFFFE00 _0801F694: .4byte 0x000001FF - - thumb_func_start sub_1F698 -sub_1F698: @ 0x0801F698 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - movs r2, #0 - ldr r7, _0801F6EC @ =gMain+0xD08 @gMain.spriteGroups[14] - ldr r0, _0801F6F0 @ =gCurrentPinballGame - ldr r4, [r0] - movs r1, #0xaf - lsls r1, r1, #2 - adds r3, r4, r1 - ldrh r1, [r3] - mov sb, r0 - cmp r1, #0x3b - bhi _0801F712 - adds r0, r1, #0 - subs r0, #0x1b - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0x13 - bhi _0801F704 - ldrh r0, [r3] - subs r0, #0x1b - movs r1, #5 - bl __divsi3 - ldr r2, _0801F6F4 @ =0x040000D4 - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, _0801F6F8 @ =gUnknown_083C562C - adds r0, r0, r1 - str r0, [r2] - ldr r0, _0801F6FC @ =0x06014280 - str r0, [r2, #4] - ldr r0, _0801F700 @ =0x80000080 - str r0, [r2, #8] - ldr r0, [r2, #8] - adds r0, r4, #0 - adds r0, #0x58 - ldrh r1, [r0] - movs r0, #0xb0 - b _0801F760 - .align 2, 0 -_0801F6EC: .4byte gMain+0xD08 @gMain.spriteGroups[14] -_0801F6F0: .4byte gCurrentPinballGame -_0801F6F4: .4byte 0x040000D4 -_0801F6F8: .4byte gUnknown_083C562C -_0801F6FC: .4byte 0x06014280 -_0801F700: .4byte 0x80000080 -_0801F704: - strh r2, [r7] - mov r2, sb - ldr r0, [r2] - adds r0, #0x58 - ldrh r1, [r0] - movs r0, #0xb0 - b _0801F760 -_0801F712: - adds r0, r1, #0 - subs r0, #0x64 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0x13 - bhi _0801F754 - ldrh r0, [r3] - subs r0, #0x64 - movs r1, #5 - bl __divsi3 - ldr r2, _0801F744 @ =0x040000D4 - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, _0801F748 @ =gUnknown_083C562C - adds r0, r0, r1 - str r0, [r2] - ldr r0, _0801F74C @ =0x06014280 - str r0, [r2, #4] - ldr r0, _0801F750 @ =0x80000080 - str r0, [r2, #8] - ldr r0, [r2, #8] - adds r0, r4, #0 - b _0801F75A - .align 2, 0 -_0801F744: .4byte 0x040000D4 -_0801F748: .4byte gUnknown_083C562C -_0801F74C: .4byte 0x06014280 -_0801F750: .4byte 0x80000080 -_0801F754: - strh r2, [r7] - mov r3, sb - ldr r0, [r3] -_0801F75A: - adds r0, #0x58 - ldrh r1, [r0] - movs r0, #0x20 -_0801F760: - subs r0, r0, r1 - strh r0, [r7, #2] - ldrh r0, [r7] - ldr r1, _0801F880 @ =gMain+0xC50 @gMain.spriteGroups[13] - mov r8, r1 - cmp r0, #0 - beq _0801F7D8 - mov r2, sb - ldr r0, [r2] - adds r0, #0x5a - ldrh r1, [r0] - movs r3, #0x94 - lsls r3, r3, #1 - adds r0, r3, #0 - subs r0, r0, r1 - strh r0, [r7, #4] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0xb4 - ble _0801F78C - movs r0, #0xb4 - strh r0, [r7, #4] -_0801F78C: - movs r0, #0 - ldr r6, _0801F884 @ =gOamBuffer - ldr r1, _0801F888 @ =0xFFFFFE00 - mov ip, r1 -_0801F794: - lsls r4, r0, #0x10 - asrs r4, r4, #0x10 - lsls r0, r4, #3 - adds r0, #8 - adds r5, r7, r0 - ldrh r3, [r5] - lsls r3, r3, #3 - adds r3, r3, r6 - movs r2, #2 - ldrsh r1, [r5, r2] - movs r2, #2 - ldrsh r0, [r7, r2] - adds r1, r1, r0 - ldr r2, _0801F88C @ =0x000001FF - adds r0, r2, #0 - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, ip - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r5] - lsls r1, r1, #3 - adds r1, r1, r6 - ldrb r0, [r7, #4] - ldrb r5, [r5, #4] - adds r0, r0, r5 - strb r0, [r1] - adds r4, #1 - lsls r4, r4, #0x10 - lsrs r0, r4, #0x10 - asrs r4, r4, #0x10 - cmp r4, #1 - ble _0801F794 -_0801F7D8: - mov r7, r8 - ldrh r0, [r7] - cmp r0, #0 - bne _0801F7E2 - b _0801FA26 -_0801F7E2: - mov r0, sb - ldr r3, [r0] - movs r6, #0xaf - lsls r6, r6, #2 - adds r1, r3, r6 - ldrh r0, [r1] - cmp r0, #0x77 - bls _0801F7F4 - b _0801F990 -_0801F7F4: - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _0801F802 - movs r0, 0xC6 @=SE_UNKNOWN_0xC6 - bl m4aSongNumStart -_0801F802: - mov r1, sb - ldr r0, [r1] - adds r0, r0, r6 - ldrh r0, [r0] - movs r1, #0xf - ands r0, r1 - ldr r2, _0801F890 @ =0x040000D4 - lsrs r0, r0, #2 - lsls r0, r0, #7 - ldr r1, _0801F894 @ =gUnknown_083C542C - adds r0, r0, r1 - str r0, [r2] - ldr r0, _0801F898 @ =0x06014200 - str r0, [r2, #4] - ldr r0, _0801F89C @ =0x80000040 - str r0, [r2, #8] - ldr r0, [r2, #8] - mov r2, sb - ldr r4, [r2] - adds r5, r4, r6 - ldrh r0, [r5] - lsls r0, r0, #0x10 - movs r1, #0x5a - bl __divsi3 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 - movs r3, #0xae - lsls r3, r3, #2 - adds r0, r4, r3 - ldrh r1, [r0] - subs r1, #2 - strh r1, [r0] - movs r0, #0xad - lsls r0, r0, #2 - adds r4, r4, r0 - ldrh r0, [r4] - adds r0, r0, r1 - strh r0, [r4] - ldrh r0, [r5] - cmp r0, #0x1d - bhi _0801F8A8 - adds r0, r2, #0 - bl Sin - adds r1, r0, #0 - mov r2, sb - ldr r4, [r2] - adds r5, r4, r6 - lsls r1, r1, #0x10 - asrs r1, r1, #0x10 - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #3 - ldr r1, _0801F8A0 @ =0x00004E20 - bl __divsi3 - ldrh r1, [r5] - adds r1, r1, r0 - ldr r3, _0801F8A4 @ =0x000002B6 - adds r4, r4, r3 - strh r1, [r4] - b _0801F8CC - .align 2, 0 -_0801F880: .4byte gMain+0xC50 @gMain.spriteGroups[13] -_0801F884: .4byte gOamBuffer -_0801F888: .4byte 0xFFFFFE00 -_0801F88C: .4byte 0x000001FF -_0801F890: .4byte 0x040000D4 -_0801F894: .4byte gUnknown_083C542C -_0801F898: .4byte 0x06014200 -_0801F89C: .4byte 0x80000040 -_0801F8A0: .4byte 0x00004E20 -_0801F8A4: .4byte 0x000002B6 -_0801F8A8: - adds r0, r2, #0 - bl Sin - adds r1, r0, #0 - mov r0, sb - ldr r4, [r0] - lsls r1, r1, #0x10 - asrs r1, r1, #0x10 - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #3 - ldr r1, _0801F910 @ =0x00004E20 - bl __divsi3 - adds r0, #0x1e - ldr r1, _0801F914 @ =0x000002B6 - adds r4, r4, r1 - strh r0, [r4] -_0801F8CC: - ldr r2, _0801F918 @ =gCurrentPinballGame - ldr r1, [r2] - movs r3, #0xaf - lsls r3, r3, #2 - adds r1, r1, r3 - ldrh r0, [r1] - adds r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - mov sb, r2 - cmp r0, #0x1b - bne _0801F934 - ldr r0, _0801F91C @ =gMain - ldr r1, _0801F920 @ =0x00000D08 - adds r0, r0, r1 - movs r1, #1 - strh r1, [r0] - movs r0, 0xC7 @=SE_UNKNOWN_0xC7 - bl m4aSongNumStart - mov r2, sb - ldr r0, [r2] - movs r3, #0xb9 - lsls r3, r3, #2 - adds r1, r0, r3 - ldrb r2, [r1] - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - ble _0801F924 - adds r0, r2, #1 - strb r0, [r1] - b _0801F934 - .align 2, 0 -_0801F910: .4byte 0x00004E20 -_0801F914: .4byte 0x000002B6 -_0801F918: .4byte gCurrentPinballGame -_0801F91C: .4byte gMain -_0801F920: .4byte 0x00000D08 -_0801F924: - movs r0, #2 - strb r0, [r1] - mov r1, sb - ldr r0, [r1] - ldr r2, _0801F96C @ =0x000002EA - adds r0, r0, r2 - movs r1, #0xbe - strh r1, [r0] -_0801F934: - mov r3, sb - ldr r0, [r3] - movs r1, #0xaf - lsls r1, r1, #2 - adds r0, r0, r1 - ldrh r0, [r0] - cmp r0, #0x64 - bne _0801F9B6 - ldr r0, _0801F970 @ =gMain - ldr r2, _0801F974 @ =0x00000D08 - adds r0, r0, r2 - movs r1, #1 - strh r1, [r0] - movs r0, 0xC7 @=SE_UNKNOWN_0xC7 - bl m4aSongNumStart - mov r3, sb - ldr r0, [r3] - ldr r2, _0801F978 @ =0x000002E3 - adds r1, r0, r2 - ldrb r2, [r1] - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - ble _0801F97C - adds r0, r2, #1 - strb r0, [r1] - b _0801F9B6 - .align 2, 0 -_0801F96C: .4byte 0x000002EA -_0801F970: .4byte gMain -_0801F974: .4byte 0x00000D08 -_0801F978: .4byte 0x000002E3 -_0801F97C: - movs r0, #2 - strb r0, [r1] - mov r3, sb - ldr r0, [r3] - movs r1, #0xba - lsls r1, r1, #2 - adds r0, r0, r1 - movs r1, #0xbe - strh r1, [r0] - b _0801F9B6 -_0801F990: - movs r2, #0 - strh r2, [r1] - movs r1, #0xad - lsls r1, r1, #2 - adds r0, r3, r1 - strh r2, [r0] - ldr r0, _0801FA34 @ =0x000002B6 - adds r1, r3, r0 - movs r0, #0xbe - strh r0, [r1] - movs r0, #0xae - lsls r0, r0, #2 - adds r1, r3, r0 - movs r0, #0x64 - strh r0, [r1] - ldr r1, _0801FA38 @ =0x000002BA - adds r0, r3, r1 - strh r2, [r0] - strh r2, [r7] -_0801F9B6: - mov r2, sb - ldr r4, [r2] - movs r3, #0xad - lsls r3, r3, #2 - adds r0, r4, r3 - movs r1, #0 - ldrsh r0, [r0, r1] - movs r1, #0x14 - bl __divsi3 - adds r0, #0x47 - adds r1, r4, #0 - adds r1, #0x58 - ldrh r1, [r1] - subs r0, r0, r1 - strh r0, [r7, #2] - ldr r2, _0801FA34 @ =0x000002B6 - adds r0, r4, r2 - ldrh r0, [r0] - adds r0, #0xf8 - adds r4, #0x5a - ldrh r1, [r4] - subs r0, r0, r1 - strh r0, [r7, #4] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0xbe - ble _0801F9F2 - movs r0, #0xbe - strh r0, [r7, #4] -_0801F9F2: - adds r5, r7, #0 - adds r5, #8 - ldr r4, _0801FA3C @ =gOamBuffer - ldrh r2, [r7, #8] - lsls r2, r2, #3 - adds r2, r2, r4 - movs r3, #2 - ldrsh r1, [r5, r3] - movs r3, #2 - ldrsh r0, [r7, r3] - adds r1, r1, r0 - ldr r3, _0801FA40 @ =0x000001FF - adds r0, r3, #0 - ands r1, r0 - ldrh r3, [r2, #2] - ldr r0, _0801FA44 @ =0xFFFFFE00 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, #2] - ldrh r1, [r7, #8] - lsls r1, r1, #3 - adds r1, r1, r4 - ldrb r0, [r7, #4] - ldrb r5, [r5, #4] - adds r0, r0, r5 - strb r0, [r1] -_0801FA26: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_0801FA34: .4byte 0x000002B6 -_0801FA38: .4byte 0x000002BA -_0801FA3C: .4byte gOamBuffer -_0801FA40: .4byte 0x000001FF -_0801FA44: .4byte 0xFFFFFE00 diff --git a/expected_objs/sub_1F698.o b/expected_objs/sub_1F698.o deleted file mode 100644 index 1c5eb9a..0000000 Binary files a/expected_objs/sub_1F698.o and /dev/null differ diff --git a/include/global.h b/include/global.h index 00ba1f4..4b90439 100644 --- a/include/global.h +++ b/include/global.h @@ -373,8 +373,8 @@ struct PinballGame /*0x2B0*/ u16 unk2B0; /*0x2B2*/ s8 unk2B2; /*0x2B3*/ u8 filler2B3[0x1]; - /*0x2B4*/ u16 unk2B4; - /*0x2B6*/ u16 unk2B6; + /*0x2B4*/ s16 unk2B4; + /*0x2B6*/ s16 unk2B6; /*0x2B8*/ u16 unk2B8; /*0x2BA*/ u16 unk2BA; /*0x2BC*/ u16 unk2BC; diff --git a/src/rom_201B8.c b/src/rom_201B8.c index d13ad1a..895695e 100644 --- a/src/rom_201B8.c +++ b/src/rom_201B8.c @@ -11,8 +11,134 @@ extern const u16 gUnknown_086B2FC0[][18]; extern const u8 gUnknown_08447A8C[][0x180]; extern const s16 gUnknown_086ADA58[]; extern const u8 gUnknown_083C3C2C[][0x300]; +extern const u8 gUnknown_083C562C[][0x100]; +extern const u8 gUnknown_083C542C[][0x80]; +void sub_1F698(void) +{ + s16 i; + struct SpriteGroup *group; + struct OamDataSimple *oamSimple; + s16 index; + s16 var0; + + index = 0; + group = &gMain.spriteGroups[14]; + if (gCurrentPinballGame->unk2BC < 60) + { + if (gCurrentPinballGame->unk2BC >= 27 && gCurrentPinballGame->unk2BC < 47) + { + index = (gCurrentPinballGame->unk2BC - 27) / 5; + DmaCopy16(3, gUnknown_083C562C[index], (void *)0x06014280, 0x100); + group->baseX = 176 - gCurrentPinballGame->unk58; + } + else + { + group->available = 0; + group->baseX = 176 - gCurrentPinballGame->unk58; + } + } + else + { + if (gCurrentPinballGame->unk2BC >= 100 && gCurrentPinballGame->unk2BC < 120) + { + index = (gCurrentPinballGame->unk2BC - 100) / 5; + DmaCopy16(3, gUnknown_083C562C[index], (void *)0x06014280, 0x100); + group->baseX = 32 - gCurrentPinballGame->unk58; + } + else + { + group->available = 0; + group->baseX = 32 - gCurrentPinballGame->unk58; + } + + } + + if (group->available) + { + group->baseY = 296 - gCurrentPinballGame->unk5A; + if (group->baseY > 180) + group->baseY = 180; + + for (i = 0; i < 2; i++) + { + oamSimple = &group->oam[i]; + gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX; + gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY; + } + } + + group = &gMain.spriteGroups[13]; + if (group->available) + { + if (gCurrentPinballGame->unk2BC < 120) + { + if (gCurrentPinballGame->unk2BC % 8 == 0) + m4aSongNumStart(SE_UNKNOWN_0xC6); + + index = (gCurrentPinballGame->unk2BC % 16) / 4; + DmaCopy16(3, gUnknown_083C542C[index], (void *)0x06014200, 0x80); + var0 = (gCurrentPinballGame->unk2BC << 0x10) / 90; + gCurrentPinballGame->unk2B8 -= 2; + gCurrentPinballGame->unk2B4 += gCurrentPinballGame->unk2B8; + if (gCurrentPinballGame->unk2BC < 30) + gCurrentPinballGame->unk2B6 = gCurrentPinballGame->unk2BC + (Sin(var0) * 24) / 20000; + else + gCurrentPinballGame->unk2B6 = 30 + (Sin(var0) * 24) / 20000; + + gCurrentPinballGame->unk2BC++; + if (gCurrentPinballGame->unk2BC == 27) + { + gMain.spriteGroups[14].available = 1; + m4aSongNumStart(SE_UNKNOWN_0xC7); + if (gCurrentPinballGame->unk2E3[1] > 0) + { + gCurrentPinballGame->unk2E3[1]++; + } + else + { + gCurrentPinballGame->unk2E3[1] = 2; + gCurrentPinballGame->unk2E8[1] = 190; + } + } + + if (gCurrentPinballGame->unk2BC == 100) + { + gMain.spriteGroups[14].available = 1; + m4aSongNumStart(SE_UNKNOWN_0xC7); + if (gCurrentPinballGame->unk2E3[0] > 0) + { + gCurrentPinballGame->unk2E3[0]++; + } + else + { + gCurrentPinballGame->unk2E3[0] = 2; + gCurrentPinballGame->unk2E8[0] = 190; + } + } + } + else + { + gCurrentPinballGame->unk2BC = 0; + gCurrentPinballGame->unk2B4 = 0; + gCurrentPinballGame->unk2B6 = 190; + gCurrentPinballGame->unk2B8 = 100; + gCurrentPinballGame->unk2BA = 0; + group->available = 0; + } + + group->baseX = (gCurrentPinballGame->unk2B4 / 20) + 71u - gCurrentPinballGame->unk58; + group->baseY = gCurrentPinballGame->unk2B6 + 248u - gCurrentPinballGame->unk5A; + if (group->baseY > 190) + group->baseY = 190; + + oamSimple = &group->oam[0]; + gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX; + gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY; + } +} + void sub_1FA48(void) { s16 i;