diff --git a/asm/rom_3219C.s b/asm/rom_3219C.s index 3d58301..27047f1 100644 --- a/asm/rom_3219C.s +++ b/asm/rom_3219C.s @@ -36153,253 +36153,3 @@ _08049590: .4byte gOamBuffer _08049594: .4byte 0xFFFFFE00 _08049598: .4byte 0x000001FF _0804959C: .4byte gMain+0x748 @gMain.spriteGroups[6] - - thumb_func_start sub_495A0 -sub_495A0: @ 0x080495A0 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - ldr r4, _080495DC @ =0xFFFFFDFC - add sp, r4 - ldr r2, _080495E0 @ =gCurrentPinballGame - ldr r0, [r2] - ldr r1, _080495E4 @ =0x00001104 - adds r0, r0, r1 - movs r3, #0 - movs r1, #1 - strb r1, [r0] - ldr r1, [r2] - ldr r2, _080495E8 @ =0x0000131C - adds r0, r1, r2 - str r3, [r0] - ldr r2, _080495EC @ =gMPlayInfo_BGM - ldr r0, [r2, #4] - cmp r0, #0 - blt _080495F4 - ldr r5, _080495F0 @ =0x00000F4C - adds r1, r1, r5 - ldr r0, [r2] - str r0, [r1] - adds r0, r2, #0 - bl m4aMPlayStop - b _080495FA - .align 2, 0 -_080495DC: .4byte 0xFFFFFDFC -_080495E0: .4byte gCurrentPinballGame -_080495E4: .4byte 0x00001104 -_080495E8: .4byte 0x0000131C -_080495EC: .4byte gMPlayInfo_BGM -_080495F0: .4byte 0x00000F4C -_080495F4: - ldr r2, _08049628 @ =0x00000F4C - adds r0, r1, r2 - str r3, [r0] -_080495FA: - bl m4aMPlayAllStop - movs r0, SE_UNKNOWN_0xA5 - bl m4aSongNumStart - ldr r2, _0804962C @ =gMain - ldrb r0, [r2, #4] - cmp r0, #1 - bhi _0804963C - ldr r0, _08049630 @ =gCurrentPinballGame - ldr r0, [r0] - adds r1, r0, #0 - adds r1, #0x68 - ldrh r1, [r1] - adds r0, #0x6a - strh r1, [r0] - ldrb r0, [r2, #4] - cmp r0, #0 - bne _08049634 - bl sub_4E814 - b _0804963C - .align 2, 0 -_08049628: .4byte 0x00000F4C -_0804962C: .4byte gMain -_08049630: .4byte gCurrentPinballGame -_08049634: - cmp r0, #1 - bne _0804963C - bl sub_4F814 -_0804963C: - ldr r4, _08049708 @ =gCurrentPinballGame - ldr r2, [r4] - ldr r3, _0804970C @ =gMain - ldrh r1, [r3, #0x38] - ldr r5, _08049710 @ =0x00001106 - adds r0, r2, r5 - ldrh r5, [r0] - strh r1, [r0] - ldrh r1, [r3, #0x3a] - ldr r5, _08049714 @ =0x00001108 - adds r0, r2, r5 - ldrh r5, [r0] - strh r1, [r0] - ldrh r1, [r3, #0x3c] - ldr r5, _08049718 @ =0x0000110A - adds r0, r2, r5 - ldrh r5, [r0] - strh r1, [r0] - ldrh r1, [r3, #0x2c] - ldr r5, _0804971C @ =0x0000110C - adds r0, r2, r5 - strh r1, [r0] - ldrh r1, [r3, #0x26] - adds r5, #2 - adds r0, r2, r5 - strh r1, [r0] - ldr r1, _08049720 @ =0x040000D4 - ldr r0, _08049724 @ =0x05000200 - str r0, [r1] - ldr r0, _08049728 @ =0x0000111A - adds r2, r2, r0 - str r2, [r1, #4] - ldr r0, _0804972C @ =0x80000100 - str r0, [r1, #8] - ldr r0, [r1, #8] - movs r1, #0 - add r6, sp, #0x200 - movs r2, #0x9c - lsls r2, r2, #1 - add r2, sp - mov sl, r2 -_0804968E: - movs r5, #0 - lsls r1, r1, #0x10 - mov sb, r1 - mov r0, sb - asrs r0, r0, #0x10 - mov r8, r0 -_0804969A: - lsls r7, r5, #0x10 - mov r1, r8 - cmp r1, #9 - bne _080496A8 - asrs r0, r7, #0x10 - cmp r0, #0xc - beq _08049730 -_080496A8: - ldr r2, _08049708 @ =gCurrentPinballGame - ldr r4, [r2] - asrs r5, r7, #0xf - mov r1, r8 - lsls r0, r1, #5 - adds r5, r5, r0 - ldr r2, _08049728 @ =0x0000111A - adds r4, r4, r2 - adds r4, r4, r5 - ldrh r1, [r4] - movs r0, #0x1f - ands r0, r1 - lsls r0, r0, #1 - movs r1, #5 - bl __divsi3 - strb r0, [r6] - ldrh r0, [r4] - movs r2, #0xf8 - lsls r2, r2, #2 - adds r1, r2, #0 - ands r0, r1 - lsrs r0, r0, #4 - movs r1, #5 - bl __divsi3 - strb r0, [r6, #1] - ldrh r0, [r4] - movs r2, #0xf8 - lsls r2, r2, #7 - adds r1, r2, #0 - ands r0, r1 - lsrs r0, r0, #9 - movs r1, #5 - bl __divsi3 - strb r0, [r6, #2] - mov r0, sp - adds r2, r0, r5 - ldrb r1, [r6] - ldrb r0, [r6, #1] - lsls r0, r0, #5 - orrs r1, r0 - ldrb r0, [r6, #2] - lsls r0, r0, #0xa - orrs r1, r0 - strh r1, [r2] - b _08049736 - .align 2, 0 -_08049708: .4byte gCurrentPinballGame -_0804970C: .4byte gMain -_08049710: .4byte 0x00001106 -_08049714: .4byte 0x00001108 -_08049718: .4byte 0x0000110A -_0804971C: .4byte 0x0000110C -_08049720: .4byte 0x040000D4 -_08049724: .4byte 0x05000200 -_08049728: .4byte 0x0000111A -_0804972C: .4byte 0x80000100 -_08049730: - ldr r0, _08049770 @ =0x00007FFF - mov r1, sl - strh r0, [r1] -_08049736: - movs r2, #0x80 - lsls r2, r2, #9 - adds r0, r7, r2 - lsrs r5, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0xf - ble _0804969A - adds r0, r2, #0 - add r0, sb - lsrs r1, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0xf - ble _0804968E - ldr r1, _08049774 @ =0x040000D4 - mov r5, sp - str r5, [r1] - ldr r0, _08049778 @ =0x05000200 - str r0, [r1, #4] - ldr r0, _0804977C @ =0x80000100 - str r0, [r1, #8] - ldr r0, [r1, #8] - ldr r0, _08049780 @ =gMain - ldrb r3, [r0, #4] - cmp r3, #1 - bhi _08049784 - bl sub_1D4D0 - b _080497A0 - .align 2, 0 -_08049770: .4byte 0x00007FFF -_08049774: .4byte 0x040000D4 -_08049778: .4byte 0x05000200 -_0804977C: .4byte 0x80000100 -_08049780: .4byte gMain -_08049784: - cmp r3, #2 - bne _0804978E - bl sub_356A0 - b _080497A0 -_0804978E: - cmp r3, #4 - bne _08049798 - bl sub_3ADA0 - b _080497A0 -_08049798: - cmp r3, #5 - bne _080497A0 - bl sub_3E5D0 -_080497A0: - movs r0, #1 - bl sub_11F0 - movs r3, #0x81 - lsls r3, r3, #2 - add sp, r3 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 diff --git a/include/functions.h b/include/functions.h index ab5af21..49974ca 100644 --- a/include/functions.h +++ b/include/functions.h @@ -595,12 +595,14 @@ extern void sub_356A0(); //extern ? sub_395D8(); //extern ? sub_39A40(); //extern ? sub_3A150(); +extern void sub_3ADA0(void); //extern ? sub_3AE14(); //extern ? sub_3B120(); //extern ? sub_3B49C(); //extern ? sub_3B7C4(); //extern ? sub_3C6E0(); //extern ? sub_3CBC4(); +extern void sub_3E5D0(void); //extern ? sub_3E644(); //extern ? sub_3E79C(); //extern ? sub_3EB2C(); @@ -653,7 +655,7 @@ extern void sub_49ED4(void); //extern ? sub_4E2F8(); //extern ? sub_4E468(); extern void sub_4E598(void); -//extern ? sub_4E814(); +extern void sub_4E814(void); //extern ? sub_4E920(); extern void sub_4E9F0(s8); //extern ? sub_4EA44(); diff --git a/include/global.h b/include/global.h index 9ca98ff..d53bdc5 100644 --- a/include/global.h +++ b/include/global.h @@ -509,9 +509,9 @@ struct PinballGame /*0x1103*/u8 unk1103; /*0x1104*/s8 unk1104; /*0x1105*/u8 filler1105[0x1]; - /*0x1106*/u16 unk1106; - /*0x1108*/u16 unk1108; - /*0x110A*/u16 unk110A; + /*0x1106*/volatile u16 unk1106; + /*0x1108*/volatile u16 unk1108; + /*0x110A*/volatile u16 unk110A; /*0x110C*/u16 unk110C; /*0x110E*/u16 unk110E; /*0x1110*/volatile u16 unk1110; @@ -519,7 +519,7 @@ struct PinballGame /*0x1114*/volatile u16 unk1114; /*0x1116*/u16 unk1116; /*0x1118*/u16 unk1118; - /*0x111A*/u8 unk111A[OBJ_PLTT_SIZE]; + /*0x111A*/u16 unk111A[OBJ_PLTT_SIZE / 0x20][0x10]; /*0x131A*/u8 filler131A[0x2]; /*0x131C*/u32 unk131C; /*0x1320*/s16 unk1320; diff --git a/src/pinball_game_main.c b/src/pinball_game_main.c index 8cb2e42..166d059 100644 --- a/src/pinball_game_main.c +++ b/src/pinball_game_main.c @@ -85,9 +85,6 @@ extern const u8 gUnknown_084C0C6C[]; extern u8 *gMonPortraitGroupGfx[]; void sub_1D4D0(void); -void sub_356A0(void); -void sub_3ADA0(void); -void sub_3E5D0(void); void sub_467F4(void); void sub_4A6A0(void); void sub_47110(void); diff --git a/src/rom_19D04.c b/src/rom_19D04.c index 87d9b24..838fed2 100644 --- a/src/rom_19D04.c +++ b/src/rom_19D04.c @@ -21,7 +21,6 @@ extern void sub_239A4(void); extern void sub_23E18(void); extern void sub_2C538(void); extern void sub_2C9A4(void); -extern void sub_4E814(void); void sub_19D04(void) { diff --git a/src/rom_49A34.c b/src/rom_49A34.c index a94b6a2..4a882b7 100644 --- a/src/rom_49A34.c +++ b/src/rom_49A34.c @@ -7,6 +7,72 @@ extern const struct Vector16 gUnknown_08137D78[]; extern const u16 gUnknown_08137DA4[]; extern const u8 gUnknown_08510CAC[][0x20]; +void sub_495A0(void) +{ + s16 i, j; + u16 objPalettes[OBJ_PLTT_SIZE / 0x20][0x10]; + u8 rgb[3]; + + gCurrentPinballGame->unk1104 = 1; + gCurrentPinballGame->unk131C = 0; + if (gMPlayInfo_BGM.status >= 0) + { + gCurrentPinballGame->unkF4C = gMPlayInfo_BGM.songHeader; + m4aMPlayStop(&gMPlayInfo_BGM); + } + else + { + gCurrentPinballGame->unkF4C = NULL; + } + + m4aMPlayAllStop(); + m4aSongNumStart(SE_UNKNOWN_0xA5); + if (gMain.selectedField < MAIN_FIELD_COUNT) + { + gCurrentPinballGame->unk6A = gCurrentPinballGame->unk68; + if (gMain.selectedField == FIELD_RUBY) + sub_4E814(); + else if (gMain.selectedField == FIELD_SAPPHIRE) + sub_4F814(); + } + + gCurrentPinballGame->unk1106 = gMain.blendControl; + gCurrentPinballGame->unk1108 = gMain.blendAlpha; + gCurrentPinballGame->unk110A = gMain.blendBrightness; + gCurrentPinballGame->unk110C = gMain.unk2C; + gCurrentPinballGame->unk110E = gMain.vCount; + DmaCopy16(3, (void *)OBJ_PLTT, gCurrentPinballGame->unk111A, OBJ_PLTT_SIZE); + for (i = 0; i < 16; i++) + { + for (j = 0; j < 16; j++) + { + if (i != 9 || j != 12) + { + rgb[0] = (((gCurrentPinballGame->unk111A[i][j] & 0x001F) >> 0) * 2) / 5; + rgb[1] = (((gCurrentPinballGame->unk111A[i][j] & 0x03E0) >> 5) * 2) / 5; + rgb[2] = (((gCurrentPinballGame->unk111A[i][j] & 0x7C00) >> 10) * 2) / 5; + objPalettes[i][j] = rgb[0] | (rgb[1] << 5) | (rgb[2] << 10); + } + else + { + objPalettes[i][j] = 0x7FFF; + } + } + } + + DmaCopy16(3, objPalettes, (void *)OBJ_PLTT, OBJ_PLTT_SIZE); + if (gMain.selectedField < MAIN_FIELD_COUNT) + sub_1D4D0(); + else if (gMain.selectedField == FIELD_DUSCLOPS) + sub_356A0(); + else if (gMain.selectedField == FIELD_KYOGRE) + sub_3ADA0(); + else if (gMain.selectedField == FIELD_GROUDON) + sub_3E5D0(); + + sub_11F0(1); +} + void sub_497BC(void) { gMain.blendControl = gCurrentPinballGame->unk1106;