diff --git a/asm/code_08050038.s b/asm/code_08050038.s index 3f48d62d..6a621a70 100644 --- a/asm/code_08050038.s +++ b/asm/code_08050038.s @@ -593,7 +593,7 @@ sub_0805060C: @ 0x0805060C cmp r0, #0 bne _0805061C movs r0, #2 - bl sub_08056010 + bl InitScreen _0805061C: pop {pc} .align 2, 0 @@ -3486,7 +3486,7 @@ sub_08051D2C: @ 0x08051D2C movs r1, #8 bl DoFade movs r0, #3 - bl sub_08056010 + bl InitScreen pop {pc} .align 2, 0 @@ -4270,12 +4270,12 @@ _080523AC: cmp r0, #0 bne _080523C8 movs r0, #2 - bl sub_08056010 + bl InitScreen b _080523CC .align 2, 0 _080523C4: .4byte gUnk_03000FD0 _080523C8: - bl sub_080560A8 + bl DoSoftReset _080523CC: pop {r4, pc} .align 2, 0 diff --git a/asm/code_080526F8.s b/asm/code_080526F8.s index 9e43fbd2..81b19e6a 100644 --- a/asm/code_080526F8.s +++ b/asm/code_080526F8.s @@ -2755,7 +2755,7 @@ sub_08053C60: @ 0x08053C60 ldr r0, _08053C80 @ =0x80100000 bl PlaySFX movs r0, #3 - bl sub_08056010 + bl InitScreen pop {pc} .align 2, 0 _08053C80: .4byte 0x80100000 diff --git a/asm/code_08055FF4.s b/asm/code_08055FF4.s index 2be77ac1..0ce62bc1 100644 --- a/asm/code_08055FF4.s +++ b/asm/code_08055FF4.s @@ -4,107 +4,6 @@ .syntax unified .text - - thumb_func_start sub_08055FF4 -sub_08055FF4: @ 0x08055FF4 - push {lr} - movs r2, #0 - ldr r0, _0805600C @ =gUnk_03000FF0 - ldrh r1, [r0] - movs r0, #0xf - ands r0, r1 - cmp r0, #0xf - bne _08056006 - movs r2, #1 -_08056006: - adds r0, r2, #0 - pop {pc} - .align 2, 0 -_0805600C: .4byte gUnk_03000FF0 - - thumb_func_start sub_08056010 -sub_08056010: @ 0x08056010 - ldr r1, _0805601C @ =gUnk_03001000 - movs r2, #0 - strb r0, [r1, #2] - strb r2, [r1, #3] - strb r2, [r1, #4] - bx lr - .align 2, 0 -_0805601C: .4byte gUnk_03001000 - - thumb_func_start sub_08056020 -sub_08056020: @ 0x08056020 - push {r4, lr} - ldr r2, _08056088 @ =0x04000208 - movs r1, #0 - strh r1, [r2] - ldr r0, _0805608C @ =0x04000200 - strh r1, [r0] - ldr r0, _08056090 @ =0x04000004 - strh r1, [r0] - ldr r0, _08056094 @ =0x04000202 - strh r1, [r0] - strh r1, [r2] - ldr r1, _08056098 @ =0x040000B0 - ldrh r2, [r1, #0xa] - ldr r4, _0805609C @ =0x0000C5FF - adds r0, r4, #0 - ands r0, r2 - strh r0, [r1, #0xa] - ldrh r2, [r1, #0xa] - ldr r3, _080560A0 @ =0x00007FFF - adds r0, r3, #0 - ands r0, r2 - strh r0, [r1, #0xa] - ldrh r0, [r1, #0xa] - adds r1, #0xc - ldrh r2, [r1, #0xa] - adds r0, r4, #0 - ands r0, r2 - strh r0, [r1, #0xa] - ldrh r2, [r1, #0xa] - adds r0, r3, #0 - ands r0, r2 - strh r0, [r1, #0xa] - ldrh r0, [r1, #0xa] - adds r1, #0xc - ldrh r2, [r1, #0xa] - adds r0, r4, #0 - ands r0, r2 - strh r0, [r1, #0xa] - ldrh r2, [r1, #0xa] - adds r0, r3, #0 - ands r0, r2 - strh r0, [r1, #0xa] - ldrh r0, [r1, #0xa] - ldr r0, _080560A4 @ =0x040000D4 - ldrh r1, [r0, #0xa] - ands r4, r1 - strh r4, [r0, #0xa] - ldrh r1, [r0, #0xa] - ands r3, r1 - strh r3, [r0, #0xa] - ldrh r0, [r0, #0xa] - pop {r4, pc} - .align 2, 0 -_08056088: .4byte 0x04000208 -_0805608C: .4byte 0x04000200 -_08056090: .4byte 0x04000004 -_08056094: .4byte 0x04000202 -_08056098: .4byte 0x040000B0 -_0805609C: .4byte 0x0000C5FF -_080560A0: .4byte 0x00007FFF -_080560A4: .4byte 0x040000D4 - - thumb_func_start sub_080560A8 -sub_080560A8: @ 0x080560A8 - push {lr} - bl sub_08056020 - movs r0, #0xde - bl SoftReset - pop {pc} - .align 2, 0 thumb_func_start sub_080560B8 sub_080560B8: @ 0x080560B8 diff --git a/asm/code_0805E744.s b/asm/code_0805E744.s index 5f06dd29..1e196837 100644 --- a/asm/code_0805E744.s +++ b/asm/code_0805E744.s @@ -2771,7 +2771,7 @@ _0805FBC0: .4byte gScreen sub_0805FBC4: @ 0x0805FBC4 push {lr} movs r0, #0 - bl sub_08056010 + bl InitScreen pop {pc} .align 2, 0 diff --git a/asm/code_0807CC3C.s b/asm/code_0807CC3C.s index 87939789..4ff60f5c 100644 --- a/asm/code_0807CC3C.s +++ b/asm/code_0807CC3C.s @@ -6221,7 +6221,7 @@ _0807FB90: .4byte gLinkEntity sub_0807FB94: @ 0x0807FB94 push {lr} movs r0, #4 - bl sub_08056010 + bl InitScreen pop {pc} .align 2, 0 diff --git a/asm/code_080A3480.s b/asm/code_080A3480.s index 4b5ad21e..c629c34d 100644 --- a/asm/code_080A3480.s +++ b/asm/code_080A3480.s @@ -661,7 +661,7 @@ sub_080A3980: @ 0x080A3980 ldrb r0, [r0] cmp r0, #0 bne _080A398E - bl sub_080560A8 + bl DoSoftReset _080A398E: pop {pc} .align 2, 0 diff --git a/asm/non_matching/mainLoop.inc b/asm/non_matching/mainLoop.inc deleted file mode 100644 index 24e3f299..00000000 --- a/asm/non_matching/mainLoop.inc +++ /dev/null @@ -1,115 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - push {r4, r5, r6, lr} - bl sub_08055F70 - bl sub_080A3204 - bl sub_0805616C - bl sub_0807CE90 - bl sub_080560B8 - bl sub_08056208 - ldr r1, _08055EEC @ =gUnk_02000010 - movs r0, #0xc1 - strb r0, [r1, #4] - bl sub_0804FFE4 - ldr r1, _08055EF0 @ =0x040000D4 - movs r0, #0xa0 - lsls r0, r0, #0x13 - str r0, [r1] - ldr r0, _08055EF4 @ =gUnk_020176A0 - str r0, [r1, #4] - ldr r0, _08055EF8 @ =0x84000080 - str r0, [r1, #8] - ldr r0, [r1, #8] - movs r0, #1 - bl sub_0804FF84 - bl sub_08056418 - bl sub_080ADD30 - ldr r1, _08055EFC @ =gRand - ldr r0, _08055F00 @ =0x01234567 - str r0, [r1] - ldr r4, _08055F04 @ =gUnk_03001000 - adds r0, r4, #0 - movs r1, #0x10 - bl _DmaZero - movs r0, #0 - bl sub_08056010 - adds r6, r4, #0 -_08055EC8: - bl ReadKeyInput - bl sub_08055FF4 - cmp r0, #0 - beq _08055ED8 - bl sub_080560A8 -_08055ED8: - ldrb r0, [r6, #1] - ldr r1, _08055F04 @ =gUnk_03001000 - cmp r0, #0 - beq _08055F08 - cmp r0, #1 - bne _08055F08 - bl sub_08056260 - b _08055F64 - .align 2, 0 -_08055EEC: .4byte gUnk_02000010 -_08055EF0: .4byte 0x040000D4 -_08055EF4: .4byte gUnk_020176A0 -_08055EF8: .4byte 0x84000080 -_08055EFC: .4byte gRand -_08055F00: .4byte 0x01234567 -_08055F04: .4byte gUnk_03001000 -_08055F08: - ldrb r0, [r1, #8] - cmp r0, #0 - beq _08055F22 - ldr r4, _08055F34 @ =gUnk_03001000 - movs r5, #0xff -_08055F12: - bl VBlankIntrWait - ldrb r0, [r4, #8] - subs r0, #1 - strb r0, [r4, #8] - ands r0, r5 - cmp r0, #0 - bne _08055F12 -_08055F22: - ldr r1, _08055F34 @ =gUnk_03001000 - ldrb r0, [r1, #9] - cmp r0, #0 - beq _08055F44 - subs r0, #1 - strb r0, [r1, #9] - ldrb r4, [r1, #0xa] - b _08055F3C - .align 2, 0 -_08055F34: .4byte gUnk_03001000 -_08055F38: - bl VBlankIntrWait -_08055F3C: - adds r0, r4, #0 - subs r4, #1 - cmp r0, #0 - bgt _08055F38 -_08055F44: - ldrh r0, [r6, #0xc] - adds r0, #1 - strh r0, [r6, #0xc] - ldr r1, _08055F6C @ =gUnk_08100CBC - ldrb r0, [r6, #2] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - bl sub_08056458 - bl sub_08050154 - bl sub_080A3480 -_08055F64: - bl sub_08016E78 - b _08055EC8 - .align 2, 0 -_08055F6C: .4byte gUnk_08100CBC - .syntax divided \ No newline at end of file diff --git a/asm/object49.s b/asm/object49.s deleted file mode 100644 index 968070dd..00000000 --- a/asm/object49.s +++ /dev/null @@ -1,377 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0808F370 -sub_0808F370: @ 0x0808F370 - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xc] - cmp r1, #0 - bne _0808F388 - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xd] - cmp r0, #1 - bne _0808F3DA - strb r0, [r4, #0xc] - str r1, [r4, #0x70] - b _0808F3CC -_0808F388: - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xd] - subs r0, #1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #4 - bhi _0808F3D4 - ldr r0, [r4, #0x70] - cmp r0, #0 - bne _0808F3C4 - ldr r0, [r4, #0x74] - subs r0, #1 - str r0, [r4, #0x74] - movs r1, #1 - rsbs r1, r1, #0 - cmp r0, r1 - bne _0808F3DA - bl Random - ldr r2, _0808F3C0 @ =gUnk_08121EA0 - movs r1, #1 - ands r1, r0 - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r0, [r1] - str r0, [r4, #0x70] - b _0808F3DA - .align 2, 0 -_0808F3C0: .4byte gUnk_08121EA0 -_0808F3C4: - subs r0, #1 - str r0, [r4, #0x70] - cmp r0, #0 - bne _0808F3DA -_0808F3CC: - adds r0, r4, #0 - bl sub_0808F5EC - b _0808F3DA -_0808F3D4: - movs r0, #0 - strb r0, [r4, #0xc] - str r0, [r4, #0x74] -_0808F3DA: - pop {r4, pc} - - thumb_func_start sub_0808F3DC -sub_0808F3DC: @ 0x0808F3DC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0808F438 - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] - ldrb r1, [r4, #0xa] - adds r1, #1 - adds r0, r4, #0 - bl InitializeAnimation - ldrb r0, [r4, #0xa] - cmp r0, #8 - beq _0808F41A - cmp r0, #7 - bne _0808F42E - ldr r0, [r4, #0x54] - adds r1, r4, #0 - bl sub_0806FAD8 - b _0808F494 -_0808F41A: - ldr r0, [r4, #0x54] - adds r0, #0x3f - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x3f - strb r0, [r1] - ldr r0, [r4, #0x54] - adds r0, #0x3f - movs r1, #0x7e - strb r1, [r0] -_0808F42E: - ldr r0, [r4, #0x54] - adds r1, r4, #0 - bl ResolveEntityOnTop - b _0808F494 -_0808F438: - ldr r0, [r4, #0x50] - ldr r0, [r0, #0x74] - cmp r0, #0 - bne _0808F456 - ldrb r0, [r4, #0xa] - cmp r0, #8 - bne _0808F452 - ldr r0, [r4, #0x54] - adds r1, r4, #0 - adds r1, #0x3f - ldrb r1, [r1] - adds r0, #0x3f - strb r1, [r0] -_0808F452: - bl DeleteThisEntity -_0808F456: - ldrb r0, [r4, #0xa] - cmp r0, #5 - bne _0808F486 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0808F486 - ldr r0, [r4, #0x54] - movs r1, #0x49 - movs r2, #8 - movs r3, #0 - bl CreateObjectWithParent - adds r1, r0, #0 - cmp r1, #0 - beq _0808F486 - ldr r0, [r4, #0x50] - str r0, [r1, #0x50] - ldr r0, [r4, #0x50] - ldr r0, [r0, #0x50] - str r0, [r1, #0x54] -_0808F486: - adds r0, r4, #0 - bl GetNextFrame - ldr r0, [r4, #0x54] - adds r1, r4, #0 - bl CopyPositionAndSpriteOffset -_0808F494: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0808F498 -sub_0808F498: @ 0x0808F498 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xc] - cmp r0, #0 - beq _0808F4EC - adds r0, r5, #0 - bl sub_0806F3E4 - cmp r0, #0 - beq _0808F4C2 - ldr r0, _0808F4E4 @ =gScreenTransition - ldr r0, [r0] - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _0808F4BE - movs r0, #0xef - bl PlaySFX -_0808F4BE: - bl DeleteThisEntity -_0808F4C2: - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _0808F4D4 - bl DeleteThisEntity -_0808F4D4: - ldr r0, _0808F4E8 @ =gLinkState - ldrb r0, [r0, #0x1c] - cmp r0, #1 - beq _0808F550 - bl DeleteThisEntity - b _0808F550 - .align 2, 0 -_0808F4E4: .4byte gScreenTransition -_0808F4E8: .4byte gLinkState -_0808F4EC: - movs r0, #1 - strb r0, [r5, #0xc] - movs r0, #0x40 - strb r0, [r5, #0xe] - ldrb r0, [r5, #0xb] - movs r6, #0x2b - cmp r0, #0 - beq _0808F4FE - movs r6, #0x2c -_0808F4FE: - ldr r0, [r5, #0x50] - ldr r0, [r0, #0x48] - ldrb r1, [r0, #6] - ldrh r0, [r5, #0x2e] - subs r0, r0, r1 - strh r0, [r5, #0x2e] - bl Random - ldr r4, [r5, #0x50] - ldr r1, [r4, #0x48] - ldrb r1, [r1, #6] - lsls r1, r1, #1 - bl __modsi3 - ldrh r1, [r5, #0x2e] - adds r1, r1, r0 - strh r1, [r5, #0x2e] - ldr r0, [r4, #0x48] - ldrb r1, [r0, #7] - ldrh r0, [r5, #0x32] - subs r0, r0, r1 - strh r0, [r5, #0x32] - bl Random - ldr r1, [r5, #0x50] - ldr r1, [r1, #0x48] - ldrb r1, [r1, #7] - lsls r1, r1, #1 - bl __modsi3 - ldrh r1, [r5, #0x32] - adds r1, r1, r0 - strh r1, [r5, #0x32] - adds r0, r5, #0 - adds r1, r6, #0 - bl sub_0801D2B4 - adds r0, r5, #0 - movs r1, #4 - bl InitializeAnimation -_0808F550: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0808F554 -sub_0808F554: @ 0x0808F554 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, [r5, #0x50] - adds r1, r5, #0 - bl CopyPositionAndSpriteOffset - adds r1, r5, #0 - adds r1, #0x63 - ldrb r0, [r1] - subs r0, #0x18 - strb r0, [r1] - ldr r0, [r5, #0x50] - adds r1, r0, #0 - adds r1, #0x62 - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - beq _0808F588 - adds r2, r5, #0 - adds r2, #0x62 - lsrs r1, r0, #0x1f - adds r0, r0, r1 - asrs r0, r0, #1 - ldrb r1, [r2] - adds r0, r0, r1 - strb r0, [r2] -_0808F588: - ldrb r0, [r5, #0xc] - cmp r0, #0 - beq _0808F5AC - adds r1, r5, #0 - adds r1, #0x84 - ldr r0, [r1] - cmp r0, #0 - beq _0808F5A4 - subs r0, #1 - str r0, [r1] - cmp r0, #0 - bne _0808F5A4 - bl DeleteThisEntity -_0808F5A4: - adds r0, r5, #0 - bl GetNextFrame - b _0808F5E8 -_0808F5AC: - movs r0, #1 - strb r0, [r5, #0xc] - ldr r4, [r5, #0x50] - ldrb r2, [r4, #0x19] - lsrs r2, r2, #6 - lsls r2, r2, #6 - ldrb r3, [r5, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r3 - orrs r0, r2 - strb r0, [r5, #0x19] - ldrb r0, [r4, #0x1b] - lsrs r0, r0, #6 - lsls r0, r0, #6 - ldrb r2, [r5, #0x1b] - ands r1, r2 - orrs r1, r0 - strb r1, [r5, #0x1b] - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - adds r0, r5, #0 - movs r1, #3 - bl InitializeAnimation -_0808F5E8: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0808F5EC -sub_0808F5EC: @ 0x0808F5EC - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x54] - movs r1, #0x49 - movs r2, #5 - movs r3, #0 - bl CreateObjectWithParent - adds r1, r0, #0 - cmp r1, #0 - beq _0808F608 - str r4, [r1, #0x50] - ldr r0, [r4, #0x54] - str r0, [r1, #0x54] -_0808F608: - ldr r0, [r4, #0x54] - movs r1, #0x49 - movs r2, #6 - movs r3, #0 - bl CreateObjectWithParent - adds r1, r0, #0 - cmp r1, #0 - beq _0808F620 - str r4, [r1, #0x50] - ldr r0, [r4, #0x54] - str r0, [r1, #0x54] -_0808F620: - ldr r0, [r4, #0x54] - movs r1, #0x49 - movs r2, #7 - movs r3, #0 - bl CreateObjectWithParent - adds r1, r0, #0 - cmp r1, #0 - beq _0808F638 - str r4, [r1, #0x50] - ldr r0, [r4, #0x54] - str r0, [r1, #0x54] -_0808F638: - movs r0, #0x96 - lsls r0, r0, #2 - str r0, [r4, #0x74] - pop {r4, pc} diff --git a/asm/sub_08055F70.s b/asm/sub_08055F70.s deleted file mode 100644 index 5cb4e821..00000000 --- a/asm/sub_08055F70.s +++ /dev/null @@ -1,60 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08055F70 -sub_08055F70: @ 0x08055F70 - push {lr} - bl sub_08056020 - movs r0, #0xfe - bl RegisterRamReset - movs r1, #0xa0 - lsls r1, r1, #0x13 - ldr r2, _08055FC8 @ =0x00007FFF - adds r0, r2, #0 - strh r0, [r1] - ldr r1, _08055FCC @ =0x04000204 - ldr r2, _08055FD0 @ =0x00004014 - adds r0, r2, #0 - strh r0, [r1] - ldr r2, _08055FD4 @ =0x0003FFD0 - ldr r0, _08055FD8 @ =gUnk_02000030 - adds r1, r2, #0 - bl _DmaZero - ldr r0, _08055FDC @ =gUnk_080B2CD8 - ldr r3, _08055FE0 @ =sub_080B197C - subs r2, r0, r3 - cmp r2, #0 - beq _08055FAA - ldr r1, _08055FE4 @ =gUnk_030056F0 - adds r0, r3, #0 - bl sub_0801D66C -_08055FAA: - ldr r0, _08055FE8 @ =gUnk_080B2CD8 - ldr r3, _08055FEC @ =gUnk_080B2CD8 - subs r2, r0, r3 - cmp r2, #0 - beq _08055FBC - ldr r1, _08055FF0 @ =gUnk_02038560 - adds r0, r3, #0 - bl sub_0801D66C -_08055FBC: - movs r0, #0 - bl sub_0801DA90 - bl sub_08016B34 - pop {pc} - .align 2, 0 -_08055FC8: .4byte 0x00007FFF -_08055FCC: .4byte 0x04000204 -_08055FD0: .4byte 0x00004014 -_08055FD4: .4byte 0x0003FFD0 -_08055FD8: .4byte gUnk_02000030 -_08055FDC: .4byte gUnk_080B2CD8 -_08055FE0: .4byte sub_080B197C -_08055FE4: .4byte gUnk_030056F0 -_08055FE8: .4byte gUnk_080B2CD8 -_08055FEC: .4byte gUnk_080B2CD8 -_08055FF0: .4byte gUnk_02038560 diff --git a/data/data_080B2A70.s b/data/data_080B2A70.s index bee9d349..b90f8e8e 100644 --- a/data/data_080B2A70.s +++ b/data/data_080B2A70.s @@ -8,4 +8,6 @@ gUnk_080B2A70:: @ 080B2A70 .incbin "baserom.gba", 0x0B2A70, 0x0000268 gUnk_080B2CD8:: @ 080B2CD8 +gUnk_080B2CD8_2:: @ 080B2CD8 +gUnk_080B2CD8_3:: @ 080B2CD8 .incbin "baserom.gba", 0x0B2CD8, 0x0000010 \ No newline at end of file diff --git a/data/data_08121C58.s b/data/data_08121C58.s index 9c5f3788..a691f57a 100755 --- a/data/data_08121C58.s +++ b/data/data_08121C58.s @@ -19322,7 +19322,16 @@ gUnk_085BD440:: @ 085BD440 .incbin "baserom.gba", 0x5BD440, 0x00000E0 gUnk_085BD520:: @ 085BD520 - .incbin "baserom.gba", 0x5BD520, 0x00029D8 + .incbin "baserom.gba", 0x5BD520, 0x0000100 + +gUnk_085BD620:: @ 085BD620 + .incbin "graphics/intro/capcom.gbapal" + +gUnk_085BD640:: @ 085BD640 + .incbin "graphics/intro/nintendo.gbapal" + +gUnk_085BD660:: @ 085BD660 + .incbin "baserom.gba", 0x5BD660, 0x0002898 gUnk_085BFEF8:: @ 085BFEF8 .incbin "baserom.gba", 0x5BFEF8, 0x000002E @@ -22535,7 +22544,13 @@ gUnk_088C065C:: @ 088C065C .incbin "baserom.gba", 0x8C065C, 0x00002A4 gUnk_088C0900:: @ 088C0900 - .incbin "baserom.gba", 0x8C0900, 0x000598C + .incbin "baserom.gba", 0x8C0900, 0x0001980 + +gUnk_088C2280:: @ 088C2280 + .incbin "graphics/intro/nintendo_capcom.4bpp" + +gUnk_088C31E0:: @ 088C31E0 + .incbin "baserom.gba", 0x8C31E0, 0x00030AC gUnk_088C628C:: @ 088C628C .incbin "baserom.gba", 0x8C628C, 0x00003FC diff --git a/graphics/intro/capcom.pal b/graphics/intro/capcom.pal new file mode 100644 index 00000000..97dc7b18 --- /dev/null +++ b/graphics/intro/capcom.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +41 0 238 +74 115 180 +98 131 123 +139 156 106 +205 164 24 +238 197 49 +255 230 0 +106 139 189 +164 172 197 +213 213 222 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/intro/nintendo.pal b/graphics/intro/nintendo.pal new file mode 100644 index 00000000..32b3f094 --- /dev/null +++ b/graphics/intro/nintendo.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +255 57 0 +255 98 8 +255 131 41 +255 156 74 +255 180 115 +255 205 156 +255 238 213 +255 255 255 +255 156 74 +255 180 115 +255 205 156 +255 238 213 +0 0 0 +0 0 0 +255 222 0 diff --git a/graphics/intro/nintendo_capcom.png b/graphics/intro/nintendo_capcom.png new file mode 100644 index 00000000..15439c4c Binary files /dev/null and b/graphics/intro/nintendo_capcom.png differ diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index e69de29b..6f83b00b 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -0,0 +1,4 @@ +GFXDIR := graphics + +$(GFXDIR)/intro/nintendo_capcom.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 123 diff --git a/include/functions.h b/include/functions.h index 318fe2e1..dcfcf70d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -57,7 +57,7 @@ extern void sub_080791D0(); extern void sub_0805EC9C(); extern void sub_0805EC60(); extern void sub_080873D0(); -extern void sub_080045D4(); +extern u8 sub_080045D4(s16, s16, u16, u16); extern void sub_0806F69C(); extern void sub_0805E3A0(Entity*, u32); extern void sub_0806D0B0(Entity*); @@ -191,7 +191,7 @@ extern void sub_0801E738(u32); extern void sub_080A70AC(void*); extern void sub_080A7114(u32); extern void sub_08001242(void); -extern void sub_08003FC4(Entity*, u32); +extern u32 sub_08003FC4(Entity*, u32); extern u8 sub_080043E8(Entity*); extern void sub_08001290(Entity*, u32); extern void sub_08004488(u32); diff --git a/include/main.h b/include/main.h index 4cceb41e..4a58a344 100644 --- a/include/main.h +++ b/include/main.h @@ -14,16 +14,27 @@ typedef struct { // 0x03001000 u32 spritePriority; } MainStruct; +enum { + SCREEN_INTRO, + SCREEN_CHOOSE_FILE, + SCREEN_GAMEPLAY, + SCREEN_GAME_OVER, + SCREEN_CREDITS, +}; + typedef struct { u8 interruptFlag; u8 field_0x1; + u8 screen; u8 funcIndex; - u8 field_0x3; u8 transition; u8 field_0x5; u8 muteAudio; - u8 field_0x8; + u8 field_0x7; u8 countdown; + u8 field_0x9; + u8 field_0xa; + u16 ticks; } Main; typedef struct { @@ -42,28 +53,23 @@ extern Main gUnk_03001000; extern UI gUnk_02032EC0; +extern void sub_080A3204(void); +extern void sub_0807CE90(void); +extern void sub_080560B8(void); +extern void sub_08056208(void); +extern void sub_0804FFE4(void); +extern void sub_08056418(void); +extern void sub_080ADD30(void); -extern s32 sub_08055F70(); -extern s32 sub_080A3204(s32); -extern s32 sub_0807CE90(s32); -extern s32 sub_080560B8(s32); -extern void sub_08056208(s32); -extern void sub_0804FFE4(); -extern s32 sub_08056418(); -extern void sub_080ADD30(s32); - -extern s32 sub_08056010(s32); -extern s32 sub_08016E78(s32); -extern s32 ReadKeyInput(); -extern s32 sub_08055FF4(u8); -extern void sub_080560A8(); -extern s32 sub_08056260(); +extern void InitScreen(u32); +extern void sub_08016E78(void); +extern void ReadKeyInput(void); +extern void DoSoftReset(void); +extern void sub_08056260(void); extern void VBlankIntrWait(); extern s32 _call_via_r0(s32); -extern s32 sub_08056458(s32); -extern s32 sub_08050154(s32); -extern s32 sub_080A3480(s32); +extern void sub_08056458(void); +extern void sub_08050154(void); +extern void sub_080A3480(void); -extern s32 gRand; -extern s32 gUnk_08100CBC; #endif \ No newline at end of file diff --git a/include/structures.h b/include/structures.h index ff29f0da..f3ca87d5 100644 --- a/include/structures.h +++ b/include/structures.h @@ -25,6 +25,14 @@ typedef struct { #define gUnk_02000000 ((struct_02000000*)(0x2000000)) //extern struct_02000000 gUnk_02000000; +typedef struct { + u8 filler0[0x4]; + u8 field_0x4; + u8 field_0x5; +} struct_02000010; + +extern struct_02000010 gUnk_02000010; + typedef struct { /*0x000*/ u8 filler0[0x6]; /*0x006*/ u8 unk6; @@ -43,8 +51,8 @@ typedef struct { extern struct_02002A40 gUnk_02002A40; typedef struct { - u16 frameCount; // regular frame count? does anything reset it? - u8 field_0x2[6]; + u32 frameCount; // regular frame count? does anything reset it? + u8 field_0x4[0x4]; bool8 transitioningOut; u8 transitionType; // transition when changing areas u8 field_0xa; // seems to be a tile type diff --git a/linker.ld b/linker.ld index de8ed898..024820ac 100644 --- a/linker.ld +++ b/linker.ld @@ -462,7 +462,6 @@ SECTIONS { src/sub_08055E08.o(.text); asm/sub_08055E24.o(.text); src/mainLoop.o(.text); - asm/sub_08055F70.o(.text); asm/code_08055FF4.o(.text); src/textbox.o(.text); asm/code_08056418.o(.text); @@ -748,7 +747,6 @@ SECTIONS { src/object/heartContainer.o(.text); src/object/object48.o(.text); src/object/object49.o(.text); - asm/object49.o(.text); asm/backgroundCloud.o(.text); asm/object4B.o(.text); asm/pushableFurniture.o(.text); diff --git a/src/code_0804AA84.c b/src/code_0804AA84.c index 5eddfc28..f861d4f0 100644 --- a/src/code_0804AA84.c +++ b/src/code_0804AA84.c @@ -1,26 +1,10 @@ #include "global.h" #include "entity.h" #include "area.h" +#include "main.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; @@ -32,7 +16,6 @@ extern void (*const gUnk_080D4120[])(); extern void (*const gUnk_080D412C[])(); -extern Main gUnk_03001000; extern struct_02018EB0 gUnk_02018EB0; extern u8 gUnk_03000FD0; diff --git a/src/enemy/lakitu.c b/src/enemy/lakitu.c index 146523f0..94dbd2f4 100644 --- a/src/enemy/lakitu.c +++ b/src/enemy/lakitu.c @@ -1,12 +1,12 @@ #include "global.h" #include "entity.h" +#include "functions.h" #include "trig.h" #include "random.h" #include "link.h" // Lakitu extern void EnemyFunctionHandler(Entity *, void (*const funcs[])(Entity*)); -extern void SetChildOffset(Entity *, u32, u32, u32); // sub_0803C758 extern void sub_0803CAD0(Entity *); @@ -41,7 +41,6 @@ extern void sub_0803CB64(Entity *); extern void sub_0803CB34(Entity *); // sub_0803CA0C -extern u32 sub_08003FC4(Entity *, u32); extern void sub_0803CC08(Entity *this); // sub_0803CA4C @@ -51,12 +50,7 @@ extern u32 sub_080041A0(Entity *, Entity *, u32, u32); // sub_0803CA84 extern u32 GetFacingDirection(Entity *, Entity *); -// sub_0803CAD0 -extern u8 sub_080045D4(s16, s16, u16, u16); -extern void sub_080AEFE0(Entity *); - // sub_0803CB64 -extern void PositionRelative(Entity *, Entity *, u32, u32); extern void sub_08004488(u32); typedef struct { diff --git a/src/enemy/miniFireballGuy.c b/src/enemy/miniFireballGuy.c index 820381c4..a4c169d7 100644 --- a/src/enemy/miniFireballGuy.c +++ b/src/enemy/miniFireballGuy.c @@ -1,13 +1,11 @@ #include "global.h" #include "entity.h" +#include "functions.h" extern void EnemyFunctionHandler(Entity*, void (*const func[])(Entity*)); -extern void sub_0804AA30(Entity*, void (*const func[][])(Entity*)); extern void sub_0804A7D4(Entity*); extern void sub_0804A720(Entity*); extern void sub_08045678(Entity*); -extern void sub_080AEFE0(void); -extern u32 sub_08003FC4(Entity*, u32); extern void sub_08045678(Entity*); extern void (*const gUnk_080D1868[])(Entity*); @@ -25,7 +23,7 @@ void sub_080455BC(Entity *this) void sub_080455D4(Entity *this) { - sub_0804AA30(this, &gUnk_080D1868); + sub_0804AA30(this, gUnk_080D1868); } void sub_080455E4(Entity *this) @@ -53,7 +51,7 @@ void sub_08045618(Entity *this) void sub_08045654(Entity *this) { - sub_080AEFE0(); + sub_080AEFE0(this); GetNextFrame(this); if (sub_08003FC4(this, 0x1800) == 0) { sub_08045678(this); diff --git a/src/input.c b/src/input.c index 438a6e6b..101a3ac6 100644 --- a/src/input.c +++ b/src/input.c @@ -2,26 +2,23 @@ #include "entity.h" #include "readKeyInput.h" -void StoreKeyInput(Input *pkeyInput, u32 ioKeyInput); +static void StoreKeyInput(Input*, u32); void ReadKeyInput(void) { - u32 reg = ~*(u16*)0x04000130 & 0x3FF; - Input* input = &gUnk_03000FF0; - StoreKeyInput(input, reg); + u32 keyInput = ~REG_KEYINPUT & KEYS_MASK; + StoreKeyInput(&gUnk_03000FF0, keyInput); } -void StoreKeyInput(Input *input, u32 ioKeyInput) +static void StoreKeyInput(Input *input, u32 keyInput) { - u32 difference; - u32 temp = input->heldKeys; - - difference = ioKeyInput & ~temp; + u32 heldKeys = input->heldKeys; + u32 difference = keyInput & ~heldKeys; input->newKeys = difference; - if (ioKeyInput == temp) { + if (keyInput == heldKeys) { if (--input->unk7 == 0) { input->unk7 = 4; - input->unk4 = ioKeyInput; + input->unk4 = keyInput; } else { input->unk4 = 0; @@ -31,5 +28,5 @@ void StoreKeyInput(Input *input, u32 ioKeyInput) input->unk7 = 0x14; input->unk4 = difference; } - input->heldKeys = ioKeyInput; + input->heldKeys = keyInput; } \ No newline at end of file diff --git a/src/introSetTransition.c b/src/introSetTransition.c index 33f0e62c..ea42ecd9 100644 --- a/src/introSetTransition.c +++ b/src/introSetTransition.c @@ -18,17 +18,10 @@ typedef struct { extern struct_03000FD0 gUnk_03000FD0; -typedef struct { - u8 filler[5]; - u8 field_0x5; -} struct_02000010; - -extern struct_02000010 gUnk_02000010; - u32 IntroSetTransition(u32 transition) { gUnk_02032EC0.transitionType = transition; - gUnk_03001000.field_0x3 = 2; + gUnk_03001000.funcIndex = 2; _DmaZero((u32 *)&gMenu, 48); DoFade(7, 8); } @@ -36,7 +29,7 @@ u32 IntroSetTransition(u32 transition) void sub_080AD380() { sub_080AD90C(); - switch (gUnk_03001000.field_0x3) { + switch (gUnk_03001000.funcIndex) { case 0: sub_08056418(); _DmaZero(&gUnk_02032EC0, 0x3b4); @@ -50,7 +43,7 @@ void sub_080AD380() return; } sub_0801DA90(1); - gUnk_03001000.field_0x3 = 1; + gUnk_03001000.funcIndex = 1; break; } sub_080AD918(); @@ -112,7 +105,8 @@ void sub_080AD474(void) gMenu.transitionTimer = 0x1e; gMenu.field_0x4 = 7; EraseAllEntities(); - sub_080ADD30(sub_0801CFA8(0)); + sub_0801CFA8(0); + sub_080ADD30(); gUnk_02024490 = 1; sub_0801D7EC(2); if (((struct_02000000*)0x2000000)->gameLanguage == 0) { diff --git a/src/mainLoop.c b/src/mainLoop.c index 4e07b882..f1c8df1c 100644 --- a/src/mainLoop.c +++ b/src/mainLoop.c @@ -1,58 +1,22 @@ #include "global.h" +#include "functions.h" #include "main.h" +#include "random.h" +#include "readKeyInput.h" -#if 0 - -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; - u16 ticks; - u8 field_0xe; - u8 field_0xf; -} MainStruct; - -extern void sub_08055F70(void); -extern void sub_080A3204(void); -extern void sub_0805616C(void); -extern void sub_0807CE90(void); -extern void sub_080560B8(void); -extern void sub_08056208(void); -extern void sub_0804FFE4(void); extern void sub_0804FF84(u32); -extern void sub_08056418(void); -extern void sub_080ADD30(void); -extern void _DmaZero(void*, u32); -extern void sub_08056010(u32); -extern void ReadKeyInput(); -extern u32 sub_08055FF4(); -extern void sub_080560A8(void); -extern void sub_08056458(void); -extern void sub_08050154(void); -extern void sub_080A3480(void); -extern void sub_08016E78(void); -extern void sub_08056260(void); - -extern u8 gUnk_02000014; extern u32 gUnk_020176A0; -extern u32 gRand; -extern MainStruct gUnk_03001000; -extern void (*gUnk_08100CBC[])(); +extern const void (*gUnk_08100CBC[])(); extern void VBlankInterruptWait(void); +extern void DisableInterruptsAndDMA(void); +extern void sub_0801D66C(void*, u8*, int); +extern void sub_08016B34(void); + +static void sub_08055F70(void); +static bool32 SoftResetKeysPressed(void); void MainLoop(void) { - bool32 codeInputted; - u8 cVar1; - u32 uVar2; - MainStruct *s; + int var0; sub_08055F70(); sub_080A3204(); @@ -60,49 +24,111 @@ void MainLoop(void) { sub_0807CE90(); sub_080560B8(); sub_08056208(); - gUnk_02000014 = 193; + gUnk_02000010.field_0x4 = 193; sub_0804FFE4(); DmaSet(3, 0x5000000U, &gUnk_020176A0, 0x84000080U); sub_0804FF84(1); sub_08056418(); sub_080ADD30(); gRand = 0x1234567; - s = &gUnk_03001000; - _DmaZero(s, 16); - sub_08056010(0); + _DmaZero(&gUnk_03001000, 16); + InitScreen(SCREEN_INTRO); while (1) { ReadKeyInput(); - codeInputted = sub_08055FF4(); - if (codeInputted) { - sub_080560A8(); + if (SoftResetKeysPressed()) { + DoSoftReset(); } - if ((s->field_0x1 != 0) || (s->field_0x1 == 1)) { - sub_08056260(); - } else if (s->field_0x8 != 0) { - while (--s->field_0x8) { - VBlankInterruptWait(); + + switch (gUnk_03001000.field_0x1) { + case 1: + sub_08056260(); + break; + case 0: + default: + if (gUnk_03001000.countdown != 0) { + do { + VBlankIntrWait(); + } while (--gUnk_03001000.countdown); } - } - if (s->countdown != 0) { - s->countdown--; - uVar2 = s->field_0xa; - while (uVar2 > 0) { - VBlankIntrWait(); - uVar2--; + + if (gUnk_03001000.field_0x9 != 0) { + gUnk_03001000.field_0x9--; + var0 = gUnk_03001000.field_0xa; + while (var0-- > 0) { + VBlankIntrWait(); + } } - } - s->ticks++; - gUnk_08100CBC[s->loadType](); - sub_08056458(); - sub_08050154(); - sub_080A3480(); + + gUnk_03001000.ticks++; + gUnk_08100CBC[gUnk_03001000.screen](); + sub_08056458(); + sub_08050154(); + sub_080A3480(); + break; } + sub_08016E78(); + } } -#endif +// Interrupt handlers that are loaded into RAM. +extern u8 sub_080B197C[]; +extern u8 gUnk_030056F0[]; +extern u8 gUnk_02038560[]; +extern u8 gUnk_080B2CD8[]; +extern u8 gUnk_080B2CD8_2[]; +extern u8 gUnk_080B2CD8_3[]; +extern u8 gUnk_02000030[]; -NAKED -void MainLoop(void) { - asm(".include \"asm/non_matching/mainLoop.inc\""); +static void sub_08055F70(void) { + u32 size; + + DisableInterruptsAndDMA(); + RegisterRamReset(RESET_ALL & ~RESET_EWRAM); + *(vu16 *)BG_PLTT = 0x7FFF; + REG_WAITCNT = WAITCNT_PREFETCH_ENABLE | WAITCNT_WS0_S_1 | WAITCNT_WS0_N_3; + size = 0x3FFD0; + _DmaZero(gUnk_02000030, size); + size = (u32)gUnk_080B2CD8 - (u32)sub_080B197C; + if (size != 0) { + sub_0801D66C(sub_080B197C, gUnk_030056F0, size); + } + + size = (u32)gUnk_080B2CD8_2 - (u32)gUnk_080B2CD8_3; + if (size != 0) { + sub_0801D66C(gUnk_080B2CD8_3, gUnk_02038560, size); + } + + sub_0801DA90(0); + sub_08016B34(); +} + +#define SOFT_RESET_KEYS (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON) + +static bool32 SoftResetKeysPressed(void) { + return (gUnk_03000FF0.heldKeys & SOFT_RESET_KEYS) == SOFT_RESET_KEYS; +} + +void InitScreen(u32 screen) { + gUnk_03001000.screen = screen; + gUnk_03001000.funcIndex = 0; + gUnk_03001000.transition = 0; +} + +void DisableInterruptsAndDMA(void) { + REG_IME = 0; + REG_IE = 0; + REG_DISPSTAT = 0; + REG_IF = 0; + REG_IME = 0; + + DmaStop(0); + DmaStop(1); + DmaStop(2); + DmaStop(3); +} + +void DoSoftReset(void) { + DisableInterruptsAndDMA(); + SoftReset(RESET_ALL & ~(RESET_EWRAM | RESET_SIO_REGS)); } diff --git a/src/npc/postman.c b/src/npc/postman.c index 6df8f21b..d920cba8 100644 --- a/src/npc/postman.c +++ b/src/npc/postman.c @@ -1,5 +1,6 @@ #include "global.h" #include "entity.h" +#include "functions.h" #include "npc.h" #include "textbox.h" #include "link.h" @@ -28,7 +29,6 @@ extern void sub_080606D8(Entity*); extern void sub_0807DD94(Entity*, u32); extern void sub_080788E0(Entity*); extern void sub_08004488(u32); -extern void sub_08003FC4(Entity*, u32); extern void sub_080606C0(Entity*); extern void sub_0800451C(Entity*); extern void sub_08078784(Entity*, u32); diff --git a/src/npc/zelda.c b/src/npc/zelda.c index 087e8fe8..43a8e36f 100644 --- a/src/npc/zelda.c +++ b/src/npc/zelda.c @@ -1,5 +1,6 @@ #include "global.h" #include "entity.h" +#include "functions.h" #include "room.h" #include "flags.h" @@ -16,10 +17,8 @@ void DeleteThisEntity(void); extern Entity* GetEntityByType(u32, u32); extern void sub_080686C4(Entity*, Entity*); extern void sub_0806F62C(Entity*, u32, u32); -extern u32 sub_08003FC4(Entity*, u32); extern void PlaySFX(u32); extern void SetTileType(u32, u32, u32); -extern void sub_0807BA8C(u16, u32); extern Entity gLinkEntity; extern RoomControls gRoomControls; diff --git a/src/object/object49.c b/src/object/object49.c index a586e520..925e47ea 100644 --- a/src/object/object49.c +++ b/src/object/object49.c @@ -1,19 +1,22 @@ #include "global.h" #include "entity.h" +#include "functions.h" +#include "position.h" +#include "random.h" +#include "structures.h" + +static void sub_0808F2B0(Entity*); +static void sub_0808F14C(Entity*); +static void sub_0808F244(Entity*); -extern u32 Random(void); -extern void sub_0808F2B0(Entity*); -extern u32 sub_08003FC4(Entity*, u32); -void sub_0808F14C(Entity*); -extern void PlaySFX(u32); extern void sub_0806FCF4(Entity*, u32, u32, u32); -extern void sub_0808F244(Entity*); -extern void sub_0805EC9C(Entity*, u32, u32, u32); +extern void sub_0808F5EC(Entity*); +extern bool32 sub_0806F3E4(Entity *); extern void (*const gUnk_08121E5C[])(Entity*); extern void (*const gUnk_08121E88[])(Entity*); extern void (*const gUnk_08121E98[])(Entity*); - +extern const u16 gUnk_08121EA0[]; void Object49(Entity* this) { gUnk_08121E5C[this->entityType.form](this); @@ -52,7 +55,7 @@ void sub_0808F0D0(Entity* this) { sub_0808F14C(this); } -void sub_0808F14C(Entity* this) { +static void sub_0808F14C(Entity* this) { sub_0808F2B0(this); if (sub_08003FC4(this, 0x2000) == 0) { this->action++; @@ -103,7 +106,7 @@ void sub_0808F1F8(Entity *this) sub_0808F244(this); } -void sub_0808F244(Entity *this) +static void sub_0808F244(Entity *this) { this->spriteSettings.b.draw = this->parent->spriteSettings.b.draw; @@ -119,7 +122,7 @@ void sub_0808F244(Entity *this) } } -void sub_0808F2B0(Entity *this) +static void sub_0808F2B0(Entity *this) { sub_0805EC9C(this, *(u32 *)&this->field_0x74, *(u32 *)&this->field_0x78, this->field_0x70.WORD); } @@ -152,4 +155,144 @@ void sub_0808F2C0(Entity *this) if (this->action == 0xff) { DeleteThisEntity(); } -} \ No newline at end of file +} + +void sub_0808F370(Entity* this) { + if (this->action == 0) { + if (this->parent->previousActionFlag == 1) { + this->action = 1; + this->field_0x70.WORD = 0; + sub_0808F5EC(this); + } + } else { + u8 flag = this->parent->previousActionFlag - 1; + if (flag < 5) { + if (this->field_0x70.WORD == 0) { + if (--(*(u32 *)&this->field_0x74) == -1) { + this->field_0x70.WORD = gUnk_08121EA0[Random() & 1]; + } + } else { + if (--this->field_0x70.WORD == 0) { + sub_0808F5EC(this); + } + } + } else { + this->action = 0; + *(u32 *)&this->field_0x74 = 0; + } + } +} + +void sub_0808F3DC(Entity* this) { + if (this->action == 0) { + this->spriteSettings.b.draw = 1; + this->action = 1; + this->actionDelay = 120; + InitializeAnimation(this, this->entityType.form + 1); + // TODO: This block of code might supposed to be a switch statement. + if (this->entityType.form != 8) { + if (this->entityType.form == 7) { + sub_0806FAD8(this->attachedEntity, this); + return; + } + } else { + this->damageType = this->attachedEntity->damageType; + this->attachedEntity->damageType = 0x7E; + } + ResolveEntityOnTop(this->attachedEntity, this); + } else { + if (*(u32 *)&this->parent->field_0x74 == 0) { + if (this->entityType.form == 8) { + this->attachedEntity->damageType = this->damageType; + } + DeleteThisEntity(); + } + + if (this->entityType.form == 5 && this->frames.b.f0) { + Entity* entity = CreateObjectWithParent(this->attachedEntity, 0x49, 8, 0); + if (entity) { + entity->parent = this->parent; + entity->attachedEntity = this->parent->parent; + } + } + + GetNextFrame(this); + CopyPositionAndSpriteOffset(this->attachedEntity, this); + } +} + +void sub_0808F498(Entity* this) { + u32 var0; + + if (this->action != 0) { + if (sub_0806F3E4(this)) { + if (gScreenTransition.frameCount % 16 == 0) { + PlaySFX(0xEF); + } + DeleteThisEntity(); + } + + if (--this->actionDelay == 0xFF) { + DeleteThisEntity(); + } + + if (gLinkState.field_0x1c != 1) { + DeleteThisEntity(); + } + } else { + this->action = 1; + this->actionDelay = 64; + var0 = this->entityType.parameter != 0 ? 44 : 43; + this->x.HALF.HI -= this->parent->boundingBox->field_0x6; + this->x.HALF.HI += (s32)Random() % (this->parent->boundingBox->field_0x6 * 2); + this->y.HALF.HI -= this->parent->boundingBox->field_0x7; + this->y.HALF.HI += (s32)Random() % (this->parent->boundingBox->field_0x7 * 2); + sub_0801D2B4(this, var0); + InitializeAnimation(this, 4); + } +} + +void sub_0808F554(Entity* this) { + CopyPositionAndSpriteOffset(this->parent, this); + this->spriteOffsetY -= 24; + if ((s8)this->parent->spriteOffsetX != 0) { + this->spriteOffsetX += (s8)this->parent->spriteOffsetX / 2; + } + + if (this->action != 0) { + if (*(u32 *)&this->cutsceneBeh) { + if (--(*(u32 *)&this->cutsceneBeh) == 0) { + DeleteThisEntity(); + } + } + GetNextFrame(this); + } else { + this->action = 1; + this->spriteRendering.b3 = this->parent->spriteRendering.b3; + this->spriteOrientation.flipY = this->parent->spriteOrientation.flipY; + this->spritePriority.b0 = 0; + InitializeAnimation(this, 3); + } +} + +void sub_0808F5EC(Entity* this) { + Entity* entity = CreateObjectWithParent(this->attachedEntity, 0x49, 5, 0); + if (entity) { + entity->parent = this; + entity->attachedEntity = this->attachedEntity; + } + + entity = CreateObjectWithParent(this->attachedEntity, 0x49, 6, 0); + if (entity) { + entity->parent = this; + entity->attachedEntity = this->attachedEntity; + } + + entity = CreateObjectWithParent(this->attachedEntity, 0x49, 7, 0); + if (entity) { + entity->parent = this; + entity->attachedEntity = this->attachedEntity; + } + + *(u32 *)&this->field_0x74 = 600; +} diff --git a/src/sub_080AD834.c b/src/sub_080AD834.c index b7b01918..9b1dd87b 100644 --- a/src/sub_080AD834.c +++ b/src/sub_080AD834.c @@ -1,13 +1,10 @@ #include "global.h" +#include "main.h" -extern void sub_08056010(u32); extern u8 gUnk_03000FD0; -void sub_080AD834(void) - -{ - if (gUnk_03000FD0 == '\0') { - sub_08056010(1); +void sub_080AD834(void) { + if (gUnk_03000FD0 == 0) { + InitScreen(SCREEN_CHOOSE_FILE); } - return; }