diff --git a/asm/rom_2E6AC.s b/asm/rom_2E6AC.s index 183dd27..60f124f 100644 --- a/asm/rom_2E6AC.s +++ b/asm/rom_2E6AC.s @@ -6,326 +6,6 @@ .text - thumb_func_start sub_2F504 -sub_2F504: @ 0x0802F504 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - ldr r6, _0802F700 @ =gMain+0x15A8 @gMain.spriteGroups[26] - ldrh r0, [r6] - movs r1, #0xb8 - adds r1, r1, r6 - mov sl, r1 - cmp r0, #0 - beq _0802F5EC - ldr r3, _0802F704 @ =gCurrentPinballGame - ldr r0, [r3] - adds r0, #0x58 - ldrh r1, [r0] - movs r0, #0xc6 - subs r0, r0, r1 - strh r0, [r6, #2] - ldr r1, [r3] - movs r4, #0xe0 - lsls r4, r4, #2 - adds r2, r1, r4 - movs r7, #0x8e - lsls r7, r7, #1 - adds r0, r7, #0 - ldrh r2, [r2] - adds r0, r0, r2 - adds r1, #0x5a - ldrh r1, [r1] - subs r0, r0, r1 - strh r0, [r6, #4] - ldr r3, [r3] - ldr r1, _0802F708 @ =0x00000379 - adds r0, r3, r1 - ldr r2, _0802F70C @ =0x040000D4 - movs r1, #0 - ldrsb r1, [r0, r1] - lsls r0, r1, #3 - subs r0, r0, r1 - lsls r0, r0, #7 - ldr r1, _0802F710 @ =gUnknown_08512C4C - adds r0, r0, r1 - str r0, [r2] - ldr r0, _0802F714 @ =0x06012A20 - str r0, [r2, #4] - ldr r0, _0802F718 @ =0x800001C0 - str r0, [r2, #8] - ldr r0, [r2, #8] - ldr r2, _0802F71C @ =0x0000037A - adds r3, r3, r2 - movs r2, #0 - ldr r4, _0802F720 @ =gUnknown_086B3CA4 - mov sb, r4 - movs r1, #0 - ldrsb r1, [r3, r1] - lsls r0, r1, #3 - adds r0, r0, r1 - lsls r0, r0, #1 - mov ip, r0 - ldr r7, _0802F724 @ =0xFFFFFE00 - mov r8, r7 -_0802F580: - lsls r3, r2, #0x10 - asrs r3, r3, #0x10 - lsls r0, r3, #3 - adds r0, #8 - adds r5, r6, r0 - ldrh r0, [r5] - lsls r0, r0, #3 - ldr r1, _0802F728 @ =gOamBuffer - adds r2, r0, r1 - lsls r0, r3, #1 - adds r0, r0, r3 - lsls r0, r0, #1 - add r0, sb - mov r4, ip - adds r1, r4, r0 - ldrh r0, [r1] - strh r0, [r2] - adds r1, #2 - adds r2, #2 - ldrh r0, [r1] - strh r0, [r2] - ldrh r0, [r1, #2] - strh r0, [r2, #2] - ldrh r2, [r5] - lsls r2, r2, #3 - ldr r7, _0802F728 @ =gOamBuffer - adds r2, r2, r7 - ldrh r4, [r2, #2] - lsls r1, r4, #0x17 - lsrs r1, r1, #0x17 - movs r7, #2 - ldrsh r0, [r6, r7] - adds r1, r1, r0 - ldr r7, _0802F72C @ =0x000001FF - adds r0, r7, #0 - ands r1, r0 - mov r0, r8 - ands r0, r4 - orrs r0, r1 - strh r0, [r2, #2] - ldrh r1, [r5] - lsls r1, r1, #3 - ldr r0, _0802F728 @ =gOamBuffer - adds r1, r1, r0 - ldrb r0, [r6, #4] - ldrb r2, [r1] - adds r0, r0, r2 - strb r0, [r1] - adds r3, #1 - lsls r3, r3, #0x10 - lsrs r2, r3, #0x10 - asrs r3, r3, #0x10 - cmp r3, #2 - ble _0802F580 -_0802F5EC: - mov r6, sl - ldrh r0, [r6] - cmp r0, #0 - beq _0802F69A - ldr r2, _0802F704 @ =gCurrentPinballGame - ldr r0, [r2] - adds r0, #0x58 - ldrh r1, [r0] - movs r0, #0xc6 - subs r0, r0, r1 - strh r0, [r6, #2] - ldr r0, [r2] - adds r0, #0x5a - ldrh r1, [r0] - movs r3, #0x8e - lsls r3, r3, #1 - adds r0, r3, #0 - subs r0, r0, r1 - strh r0, [r6, #4] - ldr r0, [r2] - ldr r4, _0802F730 @ =0x0000037B - adds r0, r0, r4 - movs r2, #0 - ldr r7, _0802F734 @ =gUnknown_086B3B7E - mov sb, r7 - ldr r1, _0802F728 @ =gOamBuffer - mov sl, r1 - movs r1, #0 - ldrsb r1, [r0, r1] - movs r0, #0x2a - adds r3, r1, #0 - muls r3, r0, r3 - mov ip, r3 - ldr r4, _0802F724 @ =0xFFFFFE00 - mov r8, r4 -_0802F632: - lsls r3, r2, #0x10 - asrs r3, r3, #0x10 - lsls r0, r3, #3 - adds r0, #8 - adds r5, r6, r0 - ldrh r0, [r5] - lsls r0, r0, #3 - mov r7, sl - adds r2, r0, r7 - lsls r0, r3, #1 - adds r0, r0, r3 - lsls r0, r0, #1 - add r0, sb - mov r4, ip - adds r1, r4, r0 - ldrh r0, [r1] - strh r0, [r2] - adds r1, #2 - adds r2, #2 - ldrh r0, [r1] - strh r0, [r2] - ldrh r0, [r1, #2] - strh r0, [r2, #2] - ldrh r2, [r5] - lsls r2, r2, #3 - add r2, sl - ldrh r4, [r2, #2] - lsls r1, r4, #0x17 - lsrs r1, r1, #0x17 - movs r7, #2 - ldrsh r0, [r6, r7] - adds r1, r1, r0 - ldr r7, _0802F72C @ =0x000001FF - adds r0, r7, #0 - ands r1, r0 - mov r0, r8 - ands r0, r4 - orrs r0, r1 - strh r0, [r2, #2] - ldrh r1, [r5] - lsls r1, r1, #3 - add r1, sl - ldrb r0, [r6, #4] - ldrb r2, [r1] - adds r0, r0, r2 - strb r0, [r1] - adds r3, #1 - lsls r3, r3, #0x10 - lsrs r2, r3, #0x10 - asrs r3, r3, #0x10 - cmp r3, #6 - ble _0802F632 -_0802F69A: - ldr r6, _0802F738 @ =gMain+0x3548 @gMain.spriteGroups[70] - ldrh r0, [r6] - cmp r0, #0 - beq _0802F780 - ldr r2, _0802F704 @ =gCurrentPinballGame - ldr r0, [r2] - adds r0, #0x58 - ldrh r1, [r0] - movs r0, #0xce - subs r0, r0, r1 - strh r0, [r6, #2] - ldr r1, [r2] - movs r3, #0xdf - lsls r3, r3, #2 - adds r0, r1, r3 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _0802F748 - adds r0, r1, #0 - adds r0, #0x5a - ldrh r1, [r0] - movs r4, #0x82 - lsls r4, r4, #1 - adds r0, r4, #0 - subs r0, r0, r1 - strh r0, [r6, #4] - ldr r0, [r2] - movs r7, #0xa4 - lsls r7, r7, #2 - adds r0, r0, r7 - ldr r0, [r0] - movs r1, #0x32 - bl __umodsi3 - movs r1, #0x19 - bl __udivsi3 - ldr r2, _0802F70C @ =0x040000D4 - lsls r0, r0, #0x10 - asrs r0, r0, #7 - ldr r1, _0802F73C @ =gUnknown_084ED6CC - adds r0, r0, r1 - str r0, [r2] - ldr r0, _0802F740 @ =0x06014FA0 - str r0, [r2, #4] - ldr r0, _0802F744 @ =0x80000100 - str r0, [r2, #8] - ldr r0, [r2, #8] - b _0802F74C - .align 2, 0 -_0802F700: .4byte gMain+0x15A8 @gMain.spriteGroups[26] -_0802F704: .4byte gCurrentPinballGame -_0802F708: .4byte 0x00000379 -_0802F70C: .4byte 0x040000D4 -_0802F710: .4byte gUnknown_08512C4C -_0802F714: .4byte 0x06012A20 -_0802F718: .4byte 0x800001C0 -_0802F71C: .4byte 0x0000037A -_0802F720: .4byte gUnknown_086B3CA4 -_0802F724: .4byte 0xFFFFFE00 -_0802F728: .4byte gOamBuffer -_0802F72C: .4byte 0x000001FF -_0802F730: .4byte 0x0000037B -_0802F734: .4byte gUnknown_086B3B7E -_0802F738: .4byte gMain+0x3548 @gMain.spriteGroups[70] -_0802F73C: .4byte gUnknown_084ED6CC -_0802F740: .4byte 0x06014FA0 -_0802F744: .4byte 0x80000100 -_0802F748: - movs r0, #0xc8 - strh r0, [r6, #4] -_0802F74C: - adds r5, r6, #0 - adds r5, #8 - ldr r4, _0802F790 @ =gOamBuffer - ldrh r2, [r6, #8] - lsls r2, r2, #3 - adds r2, r2, r4 - movs r0, #2 - ldrsh r1, [r5, r0] - movs r3, #2 - ldrsh r0, [r6, r3] - adds r1, r1, r0 - ldr r7, _0802F794 @ =0x000001FF - adds r0, r7, #0 - ands r1, r0 - ldrh r3, [r2, #2] - ldr r0, _0802F798 @ =0xFFFFFE00 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, #2] - ldrh r1, [r6, #8] - lsls r1, r1, #3 - adds r1, r1, r4 - ldrb r0, [r6, #4] - ldrb r5, [r5, #4] - adds r0, r0, r5 - strb r0, [r1] -_0802F780: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_0802F790: .4byte gOamBuffer -_0802F794: .4byte 0x000001FF -_0802F798: .4byte 0xFFFFFE00 - thumb_func_start sub_2F79C sub_2F79C: @ 0x0802F79C push {r4, r5, r6, r7, lr} diff --git a/expected_objs/sub_2F504.o b/expected_objs/sub_2F504.o deleted file mode 100644 index e64d86d..0000000 Binary files a/expected_objs/sub_2F504.o and /dev/null differ diff --git a/include/global.h b/include/global.h index 0c88a6b..486ec66 100644 --- a/include/global.h +++ b/include/global.h @@ -429,7 +429,7 @@ struct PinballGame /*0x37C*/ s8 unk37C; /*0x37D*/ s8 unk37D; /*0x37E*/ u16 unk37E; - /*0x380*/ u8 filler380[0x2]; + /*0x380*/ u16 unk380; /*0x382*/ s8 unk382; /*0x383*/ s8 unk383; /*0x384*/ s8 unk384; diff --git a/src/rom_2E67C.c b/src/rom_2E67C.c index 1f030bf..3b42382 100644 --- a/src/rom_2E67C.c +++ b/src/rom_2E67C.c @@ -13,6 +13,10 @@ extern const u8 gUnknown_083FFD8C[][0x300]; extern const u16 gUnknown_086B4A72[][2][3]; extern const u8 gUnknown_08526DCC[]; extern const s16 gUnknown_086AE496[][3]; +extern const u8 gUnknown_08512C4C[][0x380]; +extern const u16 gUnknown_086B3CA4[][3][3]; +extern const u16 gUnknown_086B3B7E[][7][3]; +extern const u8 gUnknown_084ED6CC[][0x200]; extern struct SongHeader gUnknown_086A11A4; @@ -438,3 +442,75 @@ void sub_2F26C(void) break; } } + +void sub_2F504(void) +{ + s16 i; + struct SpriteGroup *group; + struct OamDataSimple *oamSimple; + u16 *dst; + const u16 *src; + s16 index; + + group = &gMain.spriteGroups[26]; + if (group->available) + { + group->baseX = 198 - gCurrentPinballGame->unk58; + group->baseY = gCurrentPinballGame->unk380 + 284 - gCurrentPinballGame->unk5A; + index = gCurrentPinballGame->unk379; + DmaCopy16(3, gUnknown_08512C4C[index], (void *)0x06012A20, 0x380); + index = gCurrentPinballGame->unk37A; + for (i = 0; i < 3; i++) + { + oamSimple = &group->oam[i]; + dst = (u16*)&gOamBuffer[oamSimple->oamId]; + src = gUnknown_086B3CA4[index][i]; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + + gOamBuffer[oamSimple->oamId].x += group->baseX; + gOamBuffer[oamSimple->oamId].y += group->baseY; + } + } + + group = &gMain.spriteGroups[27]; + if (group->available) + { + group->baseX = 198 - gCurrentPinballGame->unk58; + group->baseY = 284 - gCurrentPinballGame->unk5A; + index = gCurrentPinballGame->unk37B; + for (i = 0; i < 7; i++) + { + oamSimple = &group->oam[i]; + dst = (u16*)&gOamBuffer[oamSimple->oamId]; + src = gUnknown_086B3B7E[index][i]; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + + gOamBuffer[oamSimple->oamId].x += group->baseX; + gOamBuffer[oamSimple->oamId].y += group->baseY; + } + } + + group = &gMain.spriteGroups[70]; + if (group->available) + { + group->baseX = 206 - gCurrentPinballGame->unk58; + if (gCurrentPinballGame->unk37C) + { + group->baseY = 260 - gCurrentPinballGame->unk5A; + index = (gCurrentPinballGame->unk290 % 50) / 25; + DmaCopy16(3, &gUnknown_084ED6CC[index], (void *)0x06014FA0, 0x200); + } + else + { + group->baseY = 200; + } + + oamSimple = &group->oam[0]; + gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX; + gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY; + } +}