diff --git a/asm/rom_2E6AC.s b/asm/rom_2E6AC.s index ff2ea67..d4c3c86 100644 --- a/asm/rom_2E6AC.s +++ b/asm/rom_2E6AC.s @@ -6,151 +6,6 @@ .text - thumb_func_start sub_2F140 -sub_2F140: @ 0x0802F140 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - ldr r0, _0802F240 @ =gCurrentPinballGame - ldr r5, [r0] - movs r1, #0xa4 - lsls r1, r1, #2 - adds r0, r5, r1 - ldr r0, [r0] - movs r1, #0x1f - ands r0, r1 - lsrs r4, r0, #4 - ldr r6, _0802F244 @ =gMain+0x38E0 @gMain.spriteGroups[75] - movs r2, #0xbd - lsls r2, r2, #2 - adds r1, r5, r2 - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - beq _0802F170 - lsls r0, r0, #0x10 - lsrs r4, r0, #0x10 -_0802F170: - ldr r2, _0802F248 @ =gUnknown_086AE462 - lsls r0, r4, #0x10 - asrs r0, r0, #0xe - adds r1, r0, r2 - ldrh r3, [r1] - adds r2, #2 - adds r0, r0, r2 - ldrh r4, [r0] - adds r0, r5, #0 - adds r0, #0x58 - ldrh r1, [r0] - movs r0, #0xa4 - subs r0, r0, r1 - strh r0, [r6, #2] - adds r0, r5, #0 - adds r0, #0x5a - ldrh r1, [r0] - movs r0, #0xa6 - subs r0, r0, r1 - strh r0, [r6, #4] - ldr r2, _0802F24C @ =0x040000D4 - lsls r1, r4, #0x10 - asrs r1, r1, #0x10 - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #8 - ldr r1, _0802F250 @ =gUnknown_083FFD8C - adds r0, r0, r1 - str r0, [r2] - ldr r0, _0802F254 @ =0x06012720 - str r0, [r2, #4] - ldr r0, _0802F258 @ =0x80000180 - str r0, [r2, #8] - ldr r0, [r2, #8] - movs r1, #0 - ldr r7, _0802F25C @ =gUnknown_086B4A72 - mov sb, r7 - ldr r0, _0802F260 @ =gOamBuffer - mov sl, r0 - lsls r3, r3, #0x10 - asrs r3, r3, #0x10 - lsls r0, r3, #1 - adds r0, r0, r3 - lsls r0, r0, #2 - mov ip, r0 - ldr r2, _0802F264 @ =0xFFFFFE00 - mov r8, r2 -_0802F1CE: - lsls r3, r1, #0x10 - asrs r3, r3, #0x10 - lsls r4, r3, #3 - adds r4, #8 - adds r4, r6, r4 - ldrh r2, [r4] - lsls r2, r2, #3 - add r2, sl - lsls r0, r3, #1 - adds r0, r0, r3 - lsls r0, r0, #1 - add r0, sb - add r0, ip - ldrh r1, [r0] - strh r1, [r2] - adds r0, #2 - adds r2, #2 - ldrh r1, [r0] - strh r1, [r2] - ldrh r0, [r0, #2] - strh r0, [r2, #2] - ldrh r2, [r4] - lsls r2, r2, #3 - add r2, sl - ldrh r5, [r2, #2] - lsls r1, r5, #0x17 - lsrs r1, r1, #0x17 - movs r7, #2 - ldrsh r0, [r6, r7] - adds r1, r1, r0 - ldr r7, _0802F268 @ =0x000001FF - adds r0, r7, #0 - ands r1, r0 - mov r0, r8 - ands r0, r5 - orrs r0, r1 - strh r0, [r2, #2] - ldrh r1, [r4] - 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 r1, r3, #0x10 - asrs r3, r3, #0x10 - cmp r3, #1 - ble _0802F1CE - 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 -_0802F240: .4byte gCurrentPinballGame -_0802F244: .4byte gMain+0x38E0 @gMain.spriteGroups[75] -_0802F248: .4byte gUnknown_086AE462 -_0802F24C: .4byte 0x040000D4 -_0802F250: .4byte gUnknown_083FFD8C -_0802F254: .4byte 0x06012720 -_0802F258: .4byte 0x80000180 -_0802F25C: .4byte gUnknown_086B4A72 -_0802F260: .4byte gOamBuffer -_0802F264: .4byte 0xFFFFFE00 -_0802F268: .4byte 0x000001FF - thumb_func_start sub_2F26C sub_2F26C: @ 0x0802F26C push {r4, r5, r6, lr} diff --git a/expected_objs/sub_2F140.o b/expected_objs/sub_2F140.o deleted file mode 100644 index 84c545f..0000000 Binary files a/expected_objs/sub_2F140.o and /dev/null differ diff --git a/include/global.h b/include/global.h index a312043..540bd6d 100644 --- a/include/global.h +++ b/include/global.h @@ -366,7 +366,7 @@ struct PinballGame /*0x2F0*/ u8 unk2F0; /*0x2F1*/ u8 unk2F1; /*0x2F2*/ u8 filler2F2[0x2]; - /*0x2F4*/ u8 unk2F4; + /*0x2F4*/ s8 unk2F4; /*0x2F5*/ s8 unk2F5; /*0x2F6*/ u16 unk2F6; /*0x2F8*/ s8 unk2F8; diff --git a/src/rom_2E67C.c b/src/rom_2E67C.c index 6a4e9fe..d3ceab4 100644 --- a/src/rom_2E67C.c +++ b/src/rom_2E67C.c @@ -8,6 +8,9 @@ extern const s16 gUnknown_086AE3DC[][3]; extern const s8 gUnknown_08137CBC[][2]; extern const u8 gUnknown_084BB16C[][0x480]; extern const u16 gUnknown_086B3EF6[][4][3]; +extern const s16 gUnknown_086AE462[][2]; +extern const u8 gUnknown_083FFD8C[][0x300]; +extern const u16 gUnknown_086B4A72[][2][3]; extern struct SongHeader gUnknown_086A11A4; @@ -319,3 +322,37 @@ void sub_2E6AC(void) } } } + +void sub_2F140(void) +{ + s16 i; + struct SpriteGroup *group; + struct OamDataSimple *oamSimple; + u16 *dst; + const u16 *src; + s16 index; + s16 var0; + + index = (gCurrentPinballGame->unk290 % 32) / 16; + group = &gMain.spriteGroups[75]; + if (gCurrentPinballGame->unk2F4) + index = gCurrentPinballGame->unk2F4; + + var0 = gUnknown_086AE462[index][0]; + index = gUnknown_086AE462[index][1]; + group->baseX = 164 - gCurrentPinballGame->unk58; + group->baseY = 166 - gCurrentPinballGame->unk5A; + DmaCopy16(3, gUnknown_083FFD8C[index], (void *)0x06012720, 0x300); + for (i = 0; i < 2; i++) + { + oamSimple = &group->oam[i]; + dst = (u16*)&gOamBuffer[oamSimple->oamId]; + src = gUnknown_086B4A72[var0][i]; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + + gOamBuffer[oamSimple->oamId].x += group->baseX; + gOamBuffer[oamSimple->oamId].y += group->baseY; + } +}