diff --git a/asm/bird.s b/asm/bird.s index 3ae45e1b..3e5549cb 100644 --- a/asm/bird.s +++ b/asm/bird.s @@ -675,7 +675,7 @@ _0809D454: str r1, [r0, #0x40] movs r0, #9 movs r1, #0 - bl sub_080A7138 + bl MenuFadeIn _0809D478: ldr r4, [r5, #0x54] cmp r4, #0 diff --git a/asm/code_08019444.s b/asm/code_08019444.s index 08153c61..86d0a0d8 100644 --- a/asm/code_08019444.s +++ b/asm/code_08019444.s @@ -434,7 +434,7 @@ sub_080197A0: @ 0x080197A0 push {lr} movs r0, #2 movs r1, #0xb - bl sub_080A7138 + bl MenuFadeIn pop {pc} thumb_func_start sub_080197AC diff --git a/asm/code_0801D79C.s b/asm/code_0801D79C.s index 776ee624..3d2409d6 100644 --- a/asm/code_0801D79C.s +++ b/asm/code_0801D79C.s @@ -1178,7 +1178,7 @@ sub_0801E044: @ 0x0801E044 bne _0801E06A movs r0, #4 movs r1, #0 - bl sub_080A7138 + bl MenuFadeIn ldr r0, _0801E070 @ =gUnk_02022740 movs r1, #4 strb r1, [r0] diff --git a/asm/code_0804AA84.s b/asm/code_0804AA84.s index 73e93d4e..630f8984 100644 --- a/asm/code_0804AA84.s +++ b/asm/code_0804AA84.s @@ -4,127 +4,6 @@ .syntax unified .text - - thumb_func_start sub_0804AA84 -sub_0804AA84: @ 0x0804AA84 - push {lr} - ldr r3, _0804AA98 @ =gArea - ldrb r0, [r3, #0x19] - cmp r0, #0 - bne _0804AA9C - strb r0, [r3, #0x18] - strb r0, [r3, #0x19] - movs r0, #0 - b _0804AAB0 - .align 2, 0 -_0804AA98: .4byte gArea -_0804AA9C: - ldr r2, _0804AAB4 @ =gUnk_03001000 - movs r1, #0 - movs r0, #4 - strb r0, [r2, #4] - strb r1, [r3, #0xe] - strb r1, [r3, #0xf] - strh r1, [r3, #0x10] - bl sub_0805E5A8 - movs r0, #1 -_0804AAB0: - pop {pc} - .align 2, 0 -_0804AAB4: .4byte gUnk_03001000 - - thumb_func_start sub_0804AAB8 -sub_0804AAB8: @ 0x0804AAB8 - push {lr} - ldr r1, _0804AACC @ =gUnk_080D4120 - ldr r0, _0804AAD0 @ =gArea - ldrb r0, [r0, #0xe] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_0804AACC: .4byte gUnk_080D4120 -_0804AAD0: .4byte gArea - - thumb_func_start sub_0804AAD4 -sub_0804AAD4: @ 0x0804AAD4 - push {r4, lr} - ldr r4, _0804AAFC @ =gUnk_02018EB0 - adds r0, r4, #0 - movs r1, #0x28 - bl _DmaZero - movs r0, #0 - str r0, [r4, #0x14] - bl sub_0805E60C - ldr r4, _0804AB00 @ =gArea - ldrb r1, [r4, #0x17] - movs r0, #0x3d - movs r2, #0 - bl CreateObject - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - pop {r4, pc} - .align 2, 0 -_0804AAFC: .4byte gUnk_02018EB0 -_0804AB00: .4byte gArea - - thumb_func_start sub_0804AB04 -sub_0804AB04: @ 0x0804AB04 - push {lr} - bl sub_0805E5C0 - ldr r0, _0804AB20 @ =gArea - ldrh r0, [r0, #0x10] - cmp r0, #0 - beq _0804AB1E - bl sub_080AD90C - bl sub_080AD9B0 - bl sub_080AD918 -_0804AB1E: - pop {pc} - .align 2, 0 -_0804AB20: .4byte gArea - - thumb_func_start sub_0804AB24 -sub_0804AB24: @ 0x0804AB24 - push {r4, r5, lr} - ldr r5, _0804AB48 @ =gUnk_03000FD0 - ldrb r1, [r5] - cmp r1, #0 - bne _0804AB46 - ldr r0, _0804AB4C @ =gScreen - movs r4, #0 - strh r1, [r0] - bl sub_0801E104 - ldr r0, _0804AB50 @ =gArea - strb r4, [r0, #0xe] - movs r0, #6 - movs r1, #0 - bl sub_080A7138 - strb r4, [r5] -_0804AB46: - pop {r4, r5, pc} - .align 2, 0 -_0804AB48: .4byte gUnk_03000FD0 -_0804AB4C: .4byte gScreen -_0804AB50: .4byte gArea - - thumb_func_start sub_0804AB54 -sub_0804AB54: @ 0x0804AB54 - push {lr} - ldr r1, _0804AB68 @ =gUnk_080D412C - ldr r0, _0804AB6C @ =gArea - ldrb r0, [r0, #0xe] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_0804AB68: .4byte gUnk_080D412C -_0804AB6C: .4byte gArea thumb_func_start sub_0804AB70 sub_0804AB70: @ 0x0804AB70 @@ -173,7 +52,7 @@ _0804ABA4: lsls r1, r1, #0xe orrs r0, r1 str r0, [r2] - bl sub_0805E60C + bl EraseAllEntities ldr r1, _0804AC18 @ =gUnk_080D4110 lsls r0, r5, #2 adds r0, r0, r1 diff --git a/asm/code_0804B9F8.s b/asm/code_0804B9F8.s index d5601372..3223f113 100644 --- a/asm/code_0804B9F8.s +++ b/asm/code_0804B9F8.s @@ -3176,7 +3176,7 @@ sub_0804CD48: @ 0x0804CD48 bl SetLocalFlag movs r0, #5 movs r1, #0 - bl sub_080A7138 + bl MenuFadeIn ldr r0, _0804CD94 @ =gUnk_02000070 strb r4, [r0] ldr r0, _0804CD98 @ =gUnk_03000FD0 diff --git a/asm/code_08050038.s b/asm/code_08050038.s index f92dcf2d..e092fda6 100644 --- a/asm/code_08050038.s +++ b/asm/code_08050038.s @@ -634,7 +634,7 @@ sub_080504F4: @ 0x080504F4 movs r1, #0x80 bl _DmaZero bl sub_08056418 - bl sub_0805E60C + bl EraseAllEntities bl sub_08080668 bl sub_080ADD30 movs r0, #0 @@ -3331,7 +3331,7 @@ sub_08051A14: @ 0x08051A14 movs r1, #0xed lsls r1, r1, #2 bl _DmaZero - bl sub_0805E60C + bl EraseAllEntities bl sub_080197AC bl sub_08080668 bl sub_080ADD30 @@ -3881,7 +3881,7 @@ sub_08051F40: @ 0x08051F40 beq _08051F68 lsrs r1, r1, #4 movs r0, #2 - bl sub_080A7138 + bl MenuFadeIn b _08051F76 .align 2, 0 _08051F60: .4byte gUnk_080FCA20 diff --git a/asm/code_080526F8.s b/asm/code_080526F8.s index 0e44f902..656e04d5 100644 --- a/asm/code_080526F8.s +++ b/asm/code_080526F8.s @@ -1712,7 +1712,7 @@ sub_08053434: @ 0x08053434 bl sub_08053460 movs r0, #5 movs r1, #6 - bl sub_080A7138 + bl MenuFadeIn _0805345A: pop {pc} .align 2, 0 diff --git a/asm/code_0805436C.s b/asm/code_0805436C.s index a4ffcf48..34e36be2 100644 --- a/asm/code_0805436C.s +++ b/asm/code_0805436C.s @@ -85,7 +85,7 @@ sub_08054920: @ 0x08054920 ldr r0, _08054950 @ =gUnk_02032EC0 ldrb r1, [r0, #3] movs r0, #0xa - bl sub_080A7138 + bl MenuFadeIn b _08054962 .align 2, 0 _08054948: .4byte gUnk_080C9CBC diff --git a/asm/code_0805E3B0.s b/asm/code_0805E3B0.s index a39b6514..f7c384c4 100644 --- a/asm/code_0805E3B0.s +++ b/asm/code_0805E3B0.s @@ -354,8 +354,8 @@ sub_0805E5F8: @ 0x0805E5F8 .align 2, 0 _0805E608: .4byte gUnk_03005F40 - thumb_func_start sub_0805E60C -sub_0805E60C: @ 0x0805E60C + thumb_func_start EraseAllEntities +EraseAllEntities: @ 0x0805E60C push {lr} bl sub_0805E89C ldr r0, _0805E654 @ =gUnk_03003DC0 diff --git a/asm/code_0807CC3C.s b/asm/code_0807CC3C.s index 6587150f..7c2185ce 100644 --- a/asm/code_0807CC3C.s +++ b/asm/code_0807CC3C.s @@ -5472,7 +5472,7 @@ sub_0807F420: @ 0x0807F420 lsls r2, r2, #0x18 lsrs r2, r2, #0x18 adds r1, r2, #0 - bl sub_080A7138 + bl MenuFadeIn pop {pc} thumb_func_start sub_0807F434 diff --git a/asm/code_080A3BD0.s b/asm/code_080A3BD0.s index 5f35853a..7d23f6c8 100644 --- a/asm/code_080A3BD0.s +++ b/asm/code_080A3BD0.s @@ -264,7 +264,7 @@ sub_080A3DB8: @ 0x080A3DB8 cmp r0, #0 beq _080A3DE8 ldrb r1, [r1, #4] - bl sub_080A7138 + bl MenuFadeIn b _080A3DF8 .align 2, 0 _080A3DDC: .4byte gMenu @@ -2288,7 +2288,7 @@ sub_080A4D88: @ 0x080A4D88 bl _DmaZero movs r0, #1 movs r1, #0 - bl sub_080A7138 + bl MenuFadeIn movs r0, #0x80 bl sub_080A3248 pop {pc} diff --git a/asm/code_080A5574.s b/asm/code_080A5574.s index 780e1fbf..52f0cba2 100644 --- a/asm/code_080A5574.s +++ b/asm/code_080A5574.s @@ -3540,8 +3540,8 @@ sub_080A7124: @ 0x080A7124 .align 2, 0 _080A7134: .4byte gUnk_02032EC0 - thumb_func_start sub_080A7138 -sub_080A7138: @ 0x080A7138 + thumb_func_start MenuFadeIn +MenuFadeIn: @ 0x080A7138 push {r4, r5, r6, lr} adds r5, r0, #0 adds r6, r1, #0 @@ -3608,7 +3608,7 @@ _080A71B8: strb r2, [r3, #0xf] _080A71BA: adds r0, r4, #0 - bl sub_080A7138 + bl MenuFadeIn pop {r4, pc} .align 2, 0 @@ -3617,7 +3617,7 @@ sub_080A71C4: @ 0x080A71C4 push {r4, r5, lr} adds r4, r2, #0 adds r5, r3, #0 - bl sub_080A7138 + bl MenuFadeIn ldr r0, _080A71D8 @ =gUnk_02032EC0 strh r4, [r0, #8] strh r5, [r0, #0xa] diff --git a/asm/figurineDevice.s b/asm/figurineDevice.s index 4dd0b7d1..130eb951 100644 --- a/asm/figurineDevice.s +++ b/asm/figurineDevice.s @@ -173,7 +173,7 @@ _08087CCA: bl SetRoomFlag movs r0, #7 movs r1, #0xff - bl sub_080A7138 + bl MenuFadeIn b _08087D1A _08087CFA: movs r0, #5 @@ -332,7 +332,7 @@ _08087E10: bl SetRoomFlag ldrb r1, [r4, #0xf] movs r0, #7 - bl sub_080A7138 + bl MenuFadeIn b _08087E5A _08087E3C: movs r0, #2 diff --git a/asm/managerF.s b/asm/managerF.s index ab60a229..beda696f 100644 --- a/asm/managerF.s +++ b/asm/managerF.s @@ -199,7 +199,7 @@ _08059034: strb r0, [r4, #0xc] ldrb r1, [r4, #0xd] movs r0, #5 - bl sub_080A7138 + bl MenuFadeIn b _08059060 .align 2, 0 _0805904C: .4byte gLinkEntity diff --git a/asm/stockwell.s b/asm/stockwell.s index 3831cab4..03e0c55a 100644 --- a/asm/stockwell.s +++ b/asm/stockwell.s @@ -382,7 +382,7 @@ sub_08065314: @ 0x08065314 strb r0, [r2, #0xd] movs r0, #3 movs r1, #3 - bl sub_080A7138 + bl MenuFadeIn _08065332: pop {pc} .align 2, 0 diff --git a/asm/sub_080AD474.s b/asm/sub_080AD474.s index 2f07bc46..135ce2f7 100644 --- a/asm/sub_080AD474.s +++ b/asm/sub_080AD474.s @@ -40,7 +40,7 @@ _080AD49C: strh r0, [r5, #8] movs r0, #7 strb r0, [r5, #4] - bl sub_0805E60C + bl EraseAllEntities movs r0, #0 bl sub_0801CFA8 bl sub_080ADD30 diff --git a/include/area.h b/include/area.h index c93ef0c6..3717fba4 100644 --- a/include/area.h +++ b/include/area.h @@ -8,7 +8,9 @@ typedef struct { u8 locationIndex; u8 unk; u16 localFlagOffset; - u8 filler[19]; + u8 filler[10]; + u16 field_0x10; + u8 filler3[7]; u8 fadeOut; u8 filler2[14]; } Area; diff --git a/include/functions.h b/include/functions.h index e9460e9e..7f5e2577 100644 --- a/include/functions.h +++ b/include/functions.h @@ -29,6 +29,8 @@ extern u32 GetFacingDirection(Entity*, Entity*); extern Entity* CreatePlayerItem(u32, u32, u32, u32); extern Entity* GetEmptyEntity(void); extern u32 GetTileTypeByPos(s32 x, s32 y, u32 layer); +extern void _DmaZero(void* src, u32 count); +extern void EraseAllEntities(void); // Unidentified extern void sub_0806ED78(Entity*); @@ -96,4 +98,11 @@ extern void sub_08077F50(ItemBehavior *beh, u32 arg1); extern void sub_0807AA80(Entity*); extern s32 sub_0807887C(Entity*, u32, u32); extern s32 sub_08078904(); +extern void sub_0805E5A8(void); +extern void sub_0805E5C0(void); +extern void sub_080AD90C(void); +extern void sub_080AD9B0(void); +extern void sub_080AD918(void); +extern void sub_0801E104(void); +extern void MenuFadeIn(u32, u32); #endif diff --git a/include/screen.h b/include/screen.h index fd61b5f5..442eee84 100644 --- a/include/screen.h +++ b/include/screen.h @@ -5,6 +5,7 @@ typedef struct { u16 lcdControl2; + u16 unk2; u32 unk; u16 lcdControl1; } LcdControls; diff --git a/linker.ld b/linker.ld index e6d8781b..99b7614a 100644 --- a/linker.ld +++ b/linker.ld @@ -433,7 +433,7 @@ SECTIONS { asm/code_08049CD4.o(.text); asm/sub_0804AA30.o(.text); src/createEnemy.o(.text); - src/sub_0804AA84.o(.text); + src/code_0804AA84.o(.text); asm/code_0804AA84.o(.text); src/loadRoomEntityList.o(.text); asm/createEntity.o(.text); diff --git a/src/code_0804AA84.c b/src/code_0804AA84.c new file mode 100644 index 00000000..5eddfc28 --- /dev/null +++ b/src/code_0804AA84.c @@ -0,0 +1,94 @@ +#include "global.h" +#include "entity.h" +#include "area.h" +#include "functions.h" +#include "screen.h" + +typedef struct { + u8 interruptFlag; + u8 field_0x1; + u8 loadType; + u8 funcIndex; + u8 transition; + u16 field_0x5; + u8 muteAudio; + u8 field_0x8; + u8 countdown; + u8 field_0xa; + u8 field_0xb; + u8 ticks; + u8 field_0xe; + u8 field_0xf; +} Main; + +typedef struct { + u8 filler [18]; + u32 unk; +} struct_02018EB0; + +extern void sub_0805E5A8(); + +extern void (*const gUnk_080D4120[])(); +extern void (*const gUnk_080D412C[])(); + + +extern Main gUnk_03001000; +extern struct_02018EB0 gUnk_02018EB0; +extern u8 gUnk_03000FD0; + +u32 sub_0804AA84(void) +{ + if (gArea.fadeOut != 0) { + gUnk_03001000.transition = 4; + gArea.filler[8] = 0; + gArea.filler[9] = 0; + *(u16*)&gArea.filler[10] = 0; + sub_0805E5A8(); + return 1; + } + else { + gArea.filler[18] = gArea.fadeOut; + *(vu8*)&gArea.fadeOut = gArea.fadeOut; + return 0; + } +} + +void sub_0804AAB8(void) +{ + gUnk_080D4120[gArea.filler[8]](); +} + +void sub_0804AAD4(void) +{ + _DmaZero((void *)&gUnk_02018EB0, 0x28); + gUnk_02018EB0.unk = 0; + EraseAllEntities(); + CreateObject(0x3d, gArea.filler3[5], 0); + gArea.filler[8]++; +} + +void sub_0804AB04(void) +{ + sub_0805E5C0(); + if (gArea.field_0x10 != 0) { + sub_080AD90C(); + sub_080AD9B0(); + sub_080AD918(); + } +} + +void sub_0804AB24(void) +{ + if (gUnk_03000FD0 == 0) { + gScreen.lcd.lcdControl2 = 0; + sub_0801E104(); + gArea.filler[8] = 0; + MenuFadeIn(6, 0); + gUnk_03000FD0 = 0; + } +} + +void sub_0804AB54(void) +{ + gUnk_080D412C[gArea.filler[8]](); +} \ No newline at end of file diff --git a/src/sub_0804AA84.c b/src/sub_0804AA84.c deleted file mode 100644 index b706d4f1..00000000 --- a/src/sub_0804AA84.c +++ /dev/null @@ -1,37 +0,0 @@ -#include "global.h" - -// Very close! - -/* extern void sub_0805E5A8(); - -extern u8 gArea; -extern u8 gUnk_03001000; - -u32 sub_0804AA84(void) - -{ - u8 * r3 = &gArea; - u8 * r2; - u8 r0 = *(u8 *)(r3 + 0x19); - u8 r1; - - if (!r0) { - *(r3 + 0x18) = r0; - *(r3 + 0x19) = r0; - r0 = 0; - } - else { - r2 = &gUnk_03001000; - r1 = 0; - r0 = 4; - *(r2 + 0x4) = r0; - *(r3 + 0xe) = r1; - *(r3 + 0xf) = r1; - *(u16*)(r3 + 0x10) = r1; - sub_0805E5A8(); - r0 = 1; - } - return r0; -} */ - -// void sub_0804AA9C() {