From f4320b6fcd6b95fe96fabc29b2e7e1d4cf7f2fd4 Mon Sep 17 00:00:00 2001 From: theo3 Date: Wed, 22 Jul 2020 23:35:26 -0700 Subject: [PATCH] Menu struct fixed for good this time --- asm/code_080A3BD0.s | 68 ---------------------------------------- include/functions.h | 7 +++++ include/menu.h | 4 ++- src/introSetTransition.c | 6 ++-- src/sub_080A3B84.c | 40 +++++++++++++++++++++++ 5 files changed, 53 insertions(+), 72 deletions(-) diff --git a/asm/code_080A3BD0.s b/asm/code_080A3BD0.s index 20ecf8e0..3cd69ca3 100644 --- a/asm/code_080A3BD0.s +++ b/asm/code_080A3BD0.s @@ -6,74 +6,6 @@ .text - thumb_func_start sub_080A3BD0 -sub_080A3BD0: @ 0x080A3BD0 - push {r4, lr} - ldr r0, _080A3C54 @ =gMenu - movs r1, #0 - movs r4, #1 - strb r4, [r0, #1] - adds r0, #0x2a - strb r1, [r0] - bl sub_080A4D34 - movs r0, #0xcb - bl LoadPalettesByPaletteGroupIndex - movs r0, #0x75 - bl sub_0801D7EC - bl sub_080A4494 - adds r1, r0, #7 - cmp r1, #0 - bge _080A3BFA - adds r1, #7 -_080A3BFA: - asrs r0, r1, #3 - subs r0, #6 - cmp r0, #0 - bge _080A3C04 - movs r0, #0 -_080A3C04: - cmp r0, #6 - ble _080A3C0A - movs r0, #6 -_080A3C0A: - adds r0, #0x76 - bl sub_0801D7EC - ldr r1, _080A3C58 @ =gScreen - ldrh r2, [r1] - movs r3, #0xf0 - lsls r3, r3, #5 - adds r0, r3, #0 - orrs r0, r2 - strh r0, [r1] - ldr r0, _080A3C5C @ =0x00001C01 - strh r0, [r1, #0x14] - ldr r0, _080A3C60 @ =0x00001D02 - strh r0, [r1, #0x20] - ldr r0, _080A3C64 @ =0x00001E0B - strh r0, [r1, #0x2c] - strh r4, [r1, #0x1a] - strh r4, [r1, #0x26] - strh r4, [r1, #0x32] - bl sub_080A4528 - bl sub_080A4398 - movs r0, #0 - bl sub_0801E738 - ldr r0, _080A3C68 @ =gUnk_081280DC - bl sub_080A70AC - movs r0, #1 - bl sub_080A7114 - movs r0, #6 - movs r1, #8 - bl DoFade - pop {r4, pc} - .align 2, 0 -_080A3C54: .4byte gMenu -_080A3C58: .4byte gScreen -_080A3C5C: .4byte 0x00001C01 -_080A3C60: .4byte 0x00001D02 -_080A3C64: .4byte 0x00001E0B -_080A3C68: .4byte gUnk_081280DC - thumb_func_start sub_080A3C6C sub_080A3C6C: @ 0x080A3C6C push {r4, r5, lr} diff --git a/include/functions.h b/include/functions.h index 2ba8c186..1c316dea 100644 --- a/include/functions.h +++ b/include/functions.h @@ -176,4 +176,11 @@ extern void sub_080A3B74(void); extern void sub_080A4054(void); extern void sub_0801C1D4(void); extern void sub_0801C208(void); +extern void sub_080A4D34(void); +extern u32 sub_080A4494(void); +extern void sub_080A4528(void); +extern void sub_080A4398(void); +extern void sub_0801E738(u32); +extern void sub_080A70AC(void*); +extern void sub_080A7114(u32); #endif diff --git a/include/menu.h b/include/menu.h index 13564462..7da2a591 100644 --- a/include/menu.h +++ b/include/menu.h @@ -19,8 +19,10 @@ typedef struct { typedef struct { u8 field_0x0; - u16 field_0x1; + u8 field_0x1; + u8 field_0x2; u8 field_0x3; + u8 field_0x4; u8 menuType; u8 overlayType; u8 storyPanelIndex; diff --git a/src/introSetTransition.c b/src/introSetTransition.c index 638bf4c6..32bb02c3 100644 --- a/src/introSetTransition.c +++ b/src/introSetTransition.c @@ -117,7 +117,7 @@ void sub_080AD474(void) gMenu.menuType = 1; gMenu.overlayType = 0; gMenu.transitionTimer = 0x1e; - gMenu.field_0x3 = 7; + gMenu.field_0x4 = 7; EraseAllEntities(); sub_080ADD30(sub_0801CFA8(0)); gUnk_02024490 = 1; @@ -191,8 +191,8 @@ void sub_080AD474(void) sub_080ADA14(0x1ff,0); } } - if (gMenu.field_0x3 != ((struct_02000000*)0x2000000)->gameLanguage) { - gMenu.field_0x3 = ((struct_02000000*)0x2000000)->gameLanguage; + if (gMenu.field_0x4 != ((struct_02000000*)0x2000000)->gameLanguage) { + gMenu.field_0x4 = ((struct_02000000*)0x2000000)->gameLanguage; sub_0801D7EC(3); } sub_080AD89C(); diff --git a/src/sub_080A3B84.c b/src/sub_080A3B84.c index 1a605c2a..80eff685 100644 --- a/src/sub_080A3B84.c +++ b/src/sub_080A3B84.c @@ -2,6 +2,7 @@ #include "functions.h" #include "menu.h" #include "structures.h" +#include "screen.h" extern void (*const gUnk_081280C4[])(); @@ -18,4 +19,43 @@ void DrawKinstoneMenu(void) sub_080AD9B0(); sub_080AD918(); gUnk_030010A0.field_0x24[8] = 0; +} + +extern void gUnk_081280DC; + +void sub_080A3BD0(void) +{ + s32 iVar1; + s32 iVar2; + + gMenu.field_0x1 = 1; + gMenu.field_0x12[0x17] = 0; + sub_080A4D34(); + LoadPalettesByPaletteGroupIndex(0xcb); + sub_0801D7EC(0x75); + + iVar1 = sub_080A4494(); + iVar2 = iVar1 + 7; + if (iVar2 < 0) { + iVar2 += 0x7; + } + + iVar1 = (iVar2 >> 3) - 6; + iVar1 = max(iVar1, 0); + iVar1 = min(iVar1, 6); + + sub_0801D7EC(iVar1 + 0x76); + gScreen.lcd.lcdControl2 |= 0x1e00; + gScreen.bg1.unk = 0x1c01; + gScreen.bg2.unk = 0x1d02; + gScreen.affine.unk2 = 0x1e0b; + gScreen.bg2.bg0xOffset = 1; + gScreen.affine.bg2xOffset = 1; + gScreen.affine.bg3xOffset = 1; + sub_080A4528(); + sub_080A4398(); + sub_0801E738(0); + sub_080A70AC(&gUnk_081280DC); + sub_080A7114(1); + DoFade(6, 8); } \ No newline at end of file