diff --git a/asm/rom_3219C.s b/asm/rom_3219C.s index a503309..31737f9 100644 --- a/asm/rom_3219C.s +++ b/asm/rom_3219C.s @@ -7933,362 +7933,3 @@ _0803AE04: .4byte gMain+0x1438 @gMain.spriteGroups[24] _0803AE08: .4byte gOamBuffer _0803AE0C: .4byte 0xFFFFFE00 _0803AE10: .4byte 0x000001FF - - thumb_func_start sub_3AE14 -sub_3AE14: @ 0x0803AE14 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - ldr r0, _0803AE80 @ =gCurrentPinballGame - ldr r5, [r0] - movs r1, #0x13 - ldrsb r1, [r5, r1] - cmp r1, #0 - bne _0803AEA8 - ldrh r1, [r5, #0x18] - ldr r0, _0803AE84 @ =0x00000257 - cmp r1, r0 - bhi _0803AEA8 - ldr r4, _0803AE88 @ =gUnknown_086AEF04 - adds r0, r1, #0 - movs r1, #0xf0 - bl __umodsi3 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - movs r1, #0x18 - bl __udivsi3 - lsls r0, r0, #0x10 - lsrs r0, r0, #0xf - adds r0, r0, r4 - ldr r1, _0803AE8C @ =0x040000D4 - movs r3, #0 - ldrsh r2, [r0, r3] - lsls r2, r2, #5 - ldr r0, _0803AE90 @ =gUnknown_083529D8 - adds r0, r2, r0 - str r0, [r1] - ldr r0, _0803AE94 @ =0x05000340 - str r0, [r1, #4] - ldr r3, _0803AE98 @ =0x80000010 - str r3, [r1, #8] - ldr r0, [r1, #8] - ldr r0, _0803AE9C @ =gUnknown_0833FF58 - adds r2, r2, r0 - str r2, [r1] - ldr r0, _0803AEA0 @ =0x050002A0 - str r0, [r1, #4] - str r3, [r1, #8] - ldr r0, [r1, #8] - movs r6, #2 - ldr r0, _0803AEA4 @ =0x0000044C - adds r1, r5, r0 - movs r0, #0 - strh r0, [r1] - b _0803AED2 - .align 2, 0 -_0803AE80: .4byte gCurrentPinballGame -_0803AE84: .4byte 0x00000257 -_0803AE88: .4byte gUnknown_086AEF04 -_0803AE8C: .4byte 0x040000D4 -_0803AE90: .4byte gUnknown_083529D8 -_0803AE94: .4byte 0x05000340 -_0803AE98: .4byte 0x80000010 -_0803AE9C: .4byte gUnknown_0833FF58 -_0803AEA0: .4byte 0x050002A0 -_0803AEA4: .4byte 0x0000044C -_0803AEA8: - ldr r6, _0803B0C4 @ =gUnknown_086AEEE6 - ldr r1, _0803B0C8 @ =gCurrentPinballGame - ldr r5, [r1] - ldr r2, _0803B0CC @ =0x0000044C - adds r5, r5, r2 - ldrh r4, [r5] - adds r0, r4, #0 - movs r1, #0x60 - bl __umodsi3 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - movs r1, #0x18 - bl __udivsi3 - lsls r0, r0, #0x10 - lsrs r0, r0, #0xf - adds r0, r0, r6 - ldrh r6, [r0] - adds r4, #1 - strh r4, [r5] -_0803AED2: - ldr r4, _0803B0D0 @ =gUnknown_086AEED6 - ldr r3, _0803B0C8 @ =gCurrentPinballGame - ldr r0, [r3] - movs r1, #0xa4 - lsls r1, r1, #2 - adds r0, r0, r1 - ldr r0, [r0] - movs r1, #0x60 - bl __umodsi3 - movs r1, #0x18 - bl __udivsi3 - lsls r0, r0, #1 - adds r0, r0, r4 - movs r2, #0 - ldr r3, _0803B0D4 @ =gUnknown_03006C00 - mov r8, r3 - ldr r1, _0803B0D8 @ =gUnknown_086AEEDE - mov sl, r1 - lsls r6, r6, #0x10 - mov sb, r6 - ldr r7, _0803B0DC @ =0xFFFFF000 - add r7, r8 - ldr r6, _0803B0E0 @ =gUnknown_08333004 - movs r3, #0 - ldrsh r0, [r0, r3] - lsls r3, r0, #2 - ldr r5, _0803B0E4 @ =0x000003FF - movs r4, #0x80 - lsls r4, r4, #4 -_0803AF10: - lsls r1, r2, #0x10 - asrs r1, r1, #0x10 - adds r2, r1, r4 - lsls r2, r2, #1 - adds r2, r2, r7 - lsls r0, r1, #1 - adds r0, r0, r6 - ldrh r0, [r0] - adds r0, r0, r3 - strh r0, [r2] - adds r1, #1 - lsls r1, r1, #0x10 - lsrs r2, r1, #0x10 - asrs r1, r1, #0x10 - cmp r1, r5 - ble _0803AF10 - ldr r4, _0803B0E8 @ =0x040000D4 - mov r0, r8 - str r0, [r4] - movs r0, #0xc0 - lsls r0, r0, #0x13 - str r0, [r4, #4] - ldr r0, _0803B0EC @ =0x80000400 - str r0, [r4, #8] - ldr r0, [r4, #8] - ldr r1, _0803B0F0 @ =gMain - ldr r0, [r1, #0x4c] - movs r1, #0x60 - bl __umodsi3 - movs r1, #0x18 - bl __udivsi3 - lsls r0, r0, #1 - add r0, sl - ldr r2, _0803B0C8 @ =gCurrentPinballGame - ldr r1, [r2] - ldr r3, _0803B0F4 @ =0x00000382 - adds r1, r1, r3 - movs r2, #0 - ldrsb r2, [r1, r2] - lsls r2, r2, #2 - ldr r1, _0803B0F8 @ =gUnknown_086AEAE0 - adds r2, r2, r1 - movs r3, #0 - ldrsh r1, [r0, r3] - lsls r1, r1, #5 - ldr r0, [r2] - adds r0, r0, r1 - str r0, [r4] - ldr r0, _0803B0FC @ =0x05000060 - str r0, [r4, #4] - ldr r0, _0803B100 @ =0x80000010 - str r0, [r4, #8] - ldr r0, [r4, #8] - movs r3, #0 - ldr r7, _0803B104 @ =gOamBuffer - mov r0, sb - asrs r0, r0, #0xd - mov r8, r0 - ldr r1, _0803B108 @ =gUnknown_086AEEFE - mov sb, r1 - ldr r2, _0803B10C @ =0xFFFFFC00 - mov sl, r2 -_0803AF90: - lsls r3, r3, #0x10 - asrs r1, r3, #0x10 - movs r0, #0xb8 - muls r0, r1, r0 - ldr r1, _0803B110 @ =gMain+0xAE0 @gMain.spriteGroups[11] - adds r6, r0, r1 - ldr r2, _0803B0C8 @ =gCurrentPinballGame - ldr r1, [r2] - adds r0, r1, #0 - adds r0, #0x58 - ldrh r2, [r0] - movs r0, #0x78 - subs r0, r0, r2 - strh r0, [r6, #2] - adds r1, #0x5a - ldrh r1, [r1] - movs r0, #0x80 - subs r0, r0, r1 - strh r0, [r6, #4] - movs r2, #0 - mov ip, r3 -_0803AFBA: - lsls r4, r2, #0x10 - asrs r4, r4, #0x10 - lsls r0, r4, #3 - adds r0, #8 - adds r5, r6, r0 - ldrh r2, [r5] - lsls r2, r2, #3 - adds r2, r2, r7 - movs r3, #2 - ldrsh r1, [r5, r3] - movs r3, #2 - ldrsh r0, [r6, r3] - adds r1, r1, r0 - ldr r3, _0803B114 @ =0x000001FF - adds r0, r3, #0 - ands r1, r0 - ldrh r3, [r2, #2] - ldr r0, _0803B118 @ =0xFFFFFE00 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, #2] - ldrh r1, [r5] - lsls r1, r1, #3 - adds r1, r1, r7 - ldrb r0, [r6, #4] - ldrb r2, [r5, #4] - adds r0, r0, r2 - strb r0, [r1] - ldrh r2, [r5] - lsls r2, r2, #3 - adds r2, r2, r7 - lsls r0, r4, #1 - add r0, sb - ldrh r1, [r0] - add r1, r8 - ldr r3, _0803B0E4 @ =0x000003FF - adds r0, r3, #0 - ands r1, r0 - ldrh r3, [r2, #4] - mov r0, sl - ands r0, r3 - orrs r0, r1 - strh r0, [r2, #4] - adds r4, #1 - lsls r4, r4, #0x10 - lsrs r2, r4, #0x10 - asrs r4, r4, #0x10 - cmp r4, #2 - ble _0803AFBA - movs r0, #0x80 - lsls r0, r0, #9 - add r0, ip - lsrs r3, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #3 - ble _0803AF90 - ldr r6, _0803B11C @ =gMain+0xDC0 @gMain.spriteGroups[15] - ldrh r0, [r6] - cmp r0, #0 - beq _0803B0B4 - ldr r1, _0803B0C8 @ =gCurrentPinballGame - ldr r0, [r1] - adds r0, #0x58 - ldrh r1, [r0] - movs r0, #0x78 - subs r0, r0, r1 - strh r0, [r6, #2] - ldr r2, _0803B0C8 @ =gCurrentPinballGame - ldr r0, [r2] - adds r0, #0x5a - ldrh r1, [r0] - movs r0, #0x80 - subs r0, r0, r1 - strh r0, [r6, #4] - movs r2, #0 - ldr r7, _0803B104 @ =gOamBuffer - ldr r3, _0803B118 @ =0xFFFFFE00 - mov r8, r3 -_0803B056: - lsls r4, r2, #0x10 - asrs r4, r4, #0x10 - lsls r0, r4, #3 - adds r0, #8 - adds r5, r6, r0 - ldrh r3, [r5] - lsls r3, r3, #3 - adds r3, r3, r7 - movs r0, #2 - ldrsh r1, [r5, r0] - movs r2, #2 - ldrsh r0, [r6, r2] - adds r1, r1, r0 - ldr r2, _0803B114 @ =0x000001FF - adds r0, r2, #0 - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, r8 - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r5] - lsls r1, r1, #3 - adds r1, r1, r7 - ldrb r0, [r6, #4] - ldrb r5, [r5, #4] - adds r0, r0, r5 - strb r0, [r1] - adds r4, #1 - lsls r4, r4, #0x10 - lsrs r2, r4, #0x10 - asrs r4, r4, #0x10 - cmp r4, #7 - ble _0803B056 - ldr r3, _0803B0C8 @ =gCurrentPinballGame - ldr r0, [r3] - ldrh r1, [r0, #0x18] - movs r0, #0xf0 - lsls r0, r0, #1 - cmp r1, r0 - bne _0803B0B4 - ldr r0, _0803B0F0 @ =gMain - movs r2, #0xdc - lsls r2, r2, #4 - adds r1, r0, r2 - movs r0, #0 - strh r0, [r1] -_0803B0B4: - 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 -_0803B0C4: .4byte gUnknown_086AEEE6 -_0803B0C8: .4byte gCurrentPinballGame -_0803B0CC: .4byte 0x0000044C -_0803B0D0: .4byte gUnknown_086AEED6 -_0803B0D4: .4byte gUnknown_03006C00 -_0803B0D8: .4byte gUnknown_086AEEDE -_0803B0DC: .4byte 0xFFFFF000 -_0803B0E0: .4byte gUnknown_08333004 -_0803B0E4: .4byte 0x000003FF -_0803B0E8: .4byte 0x040000D4 -_0803B0EC: .4byte 0x80000400 -_0803B0F0: .4byte gMain -_0803B0F4: .4byte 0x00000382 -_0803B0F8: .4byte gUnknown_086AEAE0 -_0803B0FC: .4byte 0x05000060 -_0803B100: .4byte 0x80000010 -_0803B104: .4byte gOamBuffer -_0803B108: .4byte gUnknown_086AEEFE -_0803B10C: .4byte 0xFFFFFC00 -_0803B110: .4byte gMain+0xAE0 @gMain.spriteGroups[11] -_0803B114: .4byte 0x000001FF -_0803B118: .4byte 0xFFFFFE00 -_0803B11C: .4byte gMain+0xDC0 @gMain.spriteGroups[15] diff --git a/include/global.h b/include/global.h index 20e7580..b47bad2 100644 --- a/include/global.h +++ b/include/global.h @@ -433,7 +433,9 @@ struct PinballGame /*0x440*/ u8 filler440[0x1]; /*0x441*/ s8 unk441[2]; /*0x443*/ s8 unk443[2]; - /*0x445*/ u8 filler445[0xD]; + /*0x445*/ u8 filler445[0x7]; + /*0x44C*/ u16 unk44C; + /*0x44E*/ u8 filler44E[0x4]; /*0x452*/ u16 unk452; /*0x454*/ u8 filler454[0x2]; /*0x456*/ u16 unk456; diff --git a/include/variables.h b/include/variables.h index 7a22e6c..8d97bf3 100644 --- a/include/variables.h +++ b/include/variables.h @@ -59,7 +59,7 @@ extern u16 gUnknown_03000000[]; extern u8 gUnknown_03001800[3][0x800]; //extern ? gOamBuffer; //extern ? IntrMain_Buffer; -extern u16 gUnknown_03005C00[0x800]; +extern u16 gUnknown_03005C00[]; //extern ? SoundMainRAM_Buffer; extern u16 sGbPlayerCurKeys; extern u16 sGbPlayerPrevKeys; diff --git a/src/rom_49A34.c b/src/rom_49A34.c index d72229a..dd97c20 100644 --- a/src/rom_49A34.c +++ b/src/rom_49A34.c @@ -68,7 +68,6 @@ extern const u8 gUnknown_08327994[]; extern const u8 gUnknown_084675EC[]; extern const u8 gUnknown_0832A194[]; extern const u8 gUnknown_0833E044[]; -extern const u8 gUnknown_08333004[]; extern const u8 gUnknown_0833D844[]; extern const u8 gUnknown_0846A40C[]; extern const u8 gUnknown_08332E04[]; @@ -138,6 +137,14 @@ extern const u16 gUnknown_086AEF40[][31]; extern const u16 gUnknown_086AF0B4[]; extern const u8 gUnknown_0813E894[]; extern const u8 gUnknown_0849F1CC[]; +extern const u8 gUnknown_083529D8[][0x20]; +extern const u8 gUnknown_0833FF58[][0x20]; +extern const u16 gUnknown_08333004[]; +extern const u8 *gUnknown_086AEAE0[]; +extern const s16 gUnknown_086AEF04[]; +extern const s16 gUnknown_086AEEE6[]; +extern const s16 gUnknown_086AEEDE[]; +extern const u16 gUnknown_086AEEFE[]; struct Unk_086AFAC0 { @@ -166,6 +173,68 @@ extern u8 gUnknown_0200FBB0[]; extern u8 gUnknown_020030A0[]; +void sub_3AE14(void) +{ + s16 i, j; + struct SpriteGroup *group; + struct OamDataSimple *oamSimple; + s16 var0; + s16 index; + + if (gCurrentPinballGame->unk13 == 0 && gCurrentPinballGame->unk18 < 600) + { + index = gUnknown_086AEF04[(gCurrentPinballGame->unk18 % 240) / 24]; + DmaCopy16(3, gUnknown_083529D8[index], (void *)0x05000340, 0x20); + DmaCopy16(3, gUnknown_0833FF58[index], (void *)0x050002A0, 0x20); + var0 = 2; + index = 0; + gCurrentPinballGame->unk44C = index; + } + else + { + var0 = gUnknown_086AEEE6[(gCurrentPinballGame->unk44C % 96) / 24]; + gCurrentPinballGame->unk44C++; + } + + index = gUnknown_086AEED6[(gCurrentPinballGame->unk290 % 96) / 24]; + for (i = 0; i < 0x400; i++) + gUnknown_03005C00[0x800 + i] = gUnknown_08333004[i] + index * 4; + + DmaCopy16(3, &gUnknown_03005C00[0x800], (void *)0x06000000, 0x800); + index = gUnknown_086AEEDE[(gMain.systemFrameCount % 96) / 24]; + DmaCopy16(3, &gUnknown_086AEAE0[gCurrentPinballGame->unk382][index * 0x20], (void *)0x05000060, 0x20); + + for (j = 0; j < 4; j++) + { + group = &gMain.spriteGroups[11 + j]; + group->baseX = 120 - gCurrentPinballGame->unk58; + group->baseY = 128 - gCurrentPinballGame->unk5A; + for (i = 0; i < 3; i++) + { + oamSimple = &group->oam[i]; + gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX; + gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY; + gOamBuffer[oamSimple->oamId].tileNum = gUnknown_086AEEFE[i] + var0 * 8; + } + } + + group = &gMain.spriteGroups[15]; + if (group->available) + { + group->baseX = 120 - gCurrentPinballGame->unk58; + group->baseY = 128 - gCurrentPinballGame->unk5A; + for (i = 0; i < 8; i++) + { + oamSimple = &group->oam[i]; + gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX; + gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY; + } + + if (gCurrentPinballGame->unk18 == 480) + gMain.spriteGroups[15].available = 0; + } +} + void sub_3B120(void) { s16 i;