diff --git a/asm/non_matching/menu/kinstone_menu/sub_080A3B48.inc b/asm/non_matching/menu/kinstone_menu/sub_080A3B48.inc new file mode 100644 index 00000000..aabfe091 --- /dev/null +++ b/asm/non_matching/menu/kinstone_menu/sub_080A3B48.inc @@ -0,0 +1,24 @@ + .syntax unified + push {lr} + movs r1, #0 + ldr r0, _080A3B6C @ =gSave + ldr r3, _080A3B70 @ =0x0000012B + adds r2, r0, r3 + ldrb r0, [r2] + cmp r0, #0 + beq _080A3B66 +_080A3B58: + adds r1, #1 + cmp r1, #0x12 + bhi _080A3B66 + adds r0, r1, r2 + ldrb r0, [r0] + cmp r0, #0 + bne _080A3B58 +_080A3B66: + adds r0, r1, #0 + pop {pc} + .align 2, 0 +_080A3B6C: .4byte gSave +_080A3B70: .4byte 0x0000012B + .syntax divided diff --git a/asm/staffroll.s b/asm/staffroll.s deleted file mode 100644 index 0e876b9b..00000000 --- a/asm/staffroll.s +++ /dev/null @@ -1,716 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start StaffrollTask -StaffrollTask: @ 0x080A35E0 - push {lr} - ldr r1, _080A35FC @ =gRoomTransition - ldr r0, [r1] - adds r0, #1 - str r0, [r1] - ldr r1, _080A3600 @ =gUnk_08127D00 - ldr r0, _080A3604 @ =gMain - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_080A35FC: .4byte gRoomTransition -_080A3600: .4byte gUnk_08127D00 -_080A3604: .4byte gMain - - thumb_func_start sub_080A3608 -sub_080A3608: @ 0x080A3608 - push {r4, r5, lr} - ldr r0, _080A3640 @ =gSave - movs r5, #0 - movs r4, #1 - strb r4, [r0, #6] - movs r0, #0x55 - bl SetGlobalFlag - ldr r0, _080A3644 @ =gMain - strb r4, [r0, #3] - ldr r2, _080A3648 @ =gMenu - strb r5, [r2, #5] - movs r1, #0 - movs r0, #0xb4 - strh r0, [r2, #8] - movs r0, #5 - strb r0, [r2, #0x16] - movs r0, #4 - strb r0, [r2, #0x17] - strb r1, [r2, #0x1a] - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #7] - cmp r0, #1 - bls _080A3650 - ldr r0, _080A364C @ =gUnk_08127998 - b _080A365E - .align 2, 0 -_080A3640: .4byte gSave -_080A3644: .4byte gMain -_080A3648: .4byte gMenu -_080A364C: .4byte gUnk_08127998 -_080A3650: - cmp r0, #1 - bne _080A365C - ldr r0, _080A3658 @ =gUnk_08127644 - b _080A365E - .align 2, 0 -_080A3658: .4byte gUnk_08127644 -_080A365C: - ldr r0, _080A36B0 @ =gUnk_081272F0 -_080A365E: - str r0, [r2, #0xc] - movs r0, #0 - bl DispReset - movs r0, #0xb - bl LoadPaletteGroup - movs r0, #0xc - bl LoadPaletteGroup - movs r0, #0 - movs r1, #0 - bl SetColor - ldr r2, _080A36B4 @ =gScreen - movs r0, #0xc8 - lsls r0, r0, #3 - strh r0, [r2] - adds r1, r2, #0 - adds r1, #0x66 - ldr r0, _080A36B8 @ =0x00002442 - strh r0, [r1] - adds r1, #2 - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r1] - ldr r0, _080A36BC @ =0x00001E4D - strh r0, [r2, #0x14] - subs r0, #0x8a - strh r0, [r2, #0x20] - bl InitSoundPlayingInfo - bl ResetSystemPriority - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl SetFade - pop {r4, r5, pc} - .align 2, 0 -_080A36B0: .4byte gUnk_081272F0 -_080A36B4: .4byte gScreen -_080A36B8: .4byte 0x00002442 -_080A36BC: .4byte 0x00001E4D - - thumb_func_start sub_080A36C0 -sub_080A36C0: @ 0x080A36C0 - push {lr} - ldr r1, _080A36D4 @ =gUnk_08127D10 - ldr r0, _080A36D8 @ =gMenu - ldrb r0, [r0, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_080A36D4: .4byte gUnk_08127D10 -_080A36D8: .4byte gMenu - - thumb_func_start sub_080A36DC -sub_080A36DC: @ 0x080A36DC - push {lr} - ldr r1, _080A36F4 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _080A36F0 - bl sub_080A3954 -_080A36F0: - pop {pc} - .align 2, 0 -_080A36F4: .4byte gMenu - - thumb_func_start sub_080A36F8 -sub_080A36F8: @ 0x080A36F8 - push {r4, r5, lr} - ldr r0, _080A3754 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A3752 - ldr r5, _080A3758 @ =gMenu - movs r0, #0x10 - ldrsh r4, [r5, r0] - lsls r4, r4, #1 - ldr r0, _080A375C @ =gUnk_08127CEC - adds r4, r4, r0 - ldrb r0, [r4] - bl LoadPaletteGroup - ldrb r0, [r4, #1] - bl LoadGfxGroup - ldr r0, _080A3760 @ =gBG1Buffer - movs r1, #0x80 - lsls r1, r1, #4 - bl MemClear - ldr r1, _080A3764 @ =gScreen - movs r2, #0 - movs r0, #1 - strh r0, [r1, #0x1a] - ldrh r0, [r5, #0x12] - strh r0, [r1, #0x22] - adds r1, #0x68 - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r1] - strb r2, [r5, #5] - ldrb r0, [r5, #0x1a] - cmp r0, #0 - bne _080A374A - movs r0, #1 - strb r0, [r5, #0x1a] - movs r0, #9 - bl SoundReq -_080A374A: - movs r0, #4 - movs r1, #8 - bl SetFade -_080A3752: - pop {r4, r5, pc} - .align 2, 0 -_080A3754: .4byte gFadeControl -_080A3758: .4byte gMenu -_080A375C: .4byte gUnk_08127CEC -_080A3760: .4byte gBG1Buffer -_080A3764: .4byte gScreen - - thumb_func_start sub_080A3768 -sub_080A3768: @ 0x080A3768 - push {r4, lr} - ldr r4, _080A377C @ =gMenu - ldrb r1, [r4, #6] - cmp r1, #1 - beq _080A37C4 - cmp r1, #1 - bgt _080A3780 - cmp r1, #0 - beq _080A378A - b _080A384C - .align 2, 0 -_080A377C: .4byte gMenu -_080A3780: - cmp r1, #2 - beq _080A3804 - cmp r1, #3 - beq _080A3812 - b _080A384C -_080A378A: - ldr r0, _080A37B8 @ =gBG1Buffer - movs r1, #0x80 - lsls r1, r1, #4 - bl MemClear - movs r1, #0x10 - ldrsh r0, [r4, r1] - ldr r2, _080A37BC @ =gUnk_081272E0 - ldrb r1, [r4, #0x19] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl sub_0805F46C - ldr r1, _080A37C0 @ =gScreen - movs r2, #0 - movs r0, #1 - strh r0, [r1, #0x1a] - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - strb r2, [r4, #0x18] - b _080A385E - .align 2, 0 -_080A37B8: .4byte gBG1Buffer -_080A37BC: .4byte gUnk_081272E0 -_080A37C0: .4byte gScreen -_080A37C4: - ldr r0, _080A37F8 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A385E - ldr r0, _080A37FC @ =gRoomTransition - ldr r0, [r0] - ands r0, r1 - cmp r0, #0 - bne _080A385E - ldrb r1, [r4, #0x18] - adds r1, #1 - strb r1, [r4, #0x18] - lsls r0, r1, #0x18 - lsrs r3, r0, #0x18 - ldr r2, _080A3800 @ =gScreen - movs r0, #0x10 - subs r0, r0, r3 - lsls r0, r0, #8 - orrs r0, r3 - adds r2, #0x68 - strh r0, [r2] - lsls r1, r1, #0x18 - lsrs r1, r1, #0x18 - cmp r1, #0xf - bls _080A385E - b _080A383C - .align 2, 0 -_080A37F8: .4byte gFadeControl -_080A37FC: .4byte gRoomTransition -_080A3800: .4byte gScreen -_080A3804: - ldrh r0, [r4, #8] - subs r0, #1 - strh r0, [r4, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _080A385E - b _080A383C -_080A3812: - ldr r0, _080A3844 @ =gRoomTransition - ldr r0, [r0] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - bne _080A385E - ldrb r1, [r4, #0x18] - subs r1, #1 - strb r1, [r4, #0x18] - lsls r0, r1, #0x18 - lsrs r3, r0, #0x18 - ldr r2, _080A3848 @ =gScreen - movs r0, #0x10 - subs r0, r0, r3 - lsls r0, r0, #8 - orrs r0, r3 - adds r2, #0x68 - strh r0, [r2] - lsls r1, r1, #0x18 - cmp r1, #0 - bne _080A385E -_080A383C: - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - b _080A385E - .align 2, 0 -_080A3844: .4byte gRoomTransition -_080A3848: .4byte gScreen -_080A384C: - ldr r1, _080A3860 @ =gFadeControl - ldrb r0, [r1] - cmp r0, #0 - bne _080A385E - movs r0, #1 - rsbs r0, r0, #0 - str r0, [r1, #4] - bl sub_080A3954 -_080A385E: - pop {r4, pc} - .align 2, 0 -_080A3860: .4byte gFadeControl - - thumb_func_start sub_080A3864 -sub_080A3864: @ 0x080A3864 - push {lr} - ldr r1, _080A3884 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _080A3880 - bl sub_080A3954 - movs r0, #5 - movs r1, #8 - bl SetFade -_080A3880: - pop {pc} - .align 2, 0 -_080A3884: .4byte gMenu - - thumb_func_start sub_080A3888 -sub_080A3888: @ 0x080A3888 - push {lr} - ldr r1, _080A38A8 @ =gFadeControl - ldr r0, _080A38AC @ =0xFFFF7FFF - str r0, [r1, #4] - movs r0, #5 - movs r1, #4 - bl SetFade - ldr r0, _080A38B0 @ =gMenu - ldrh r0, [r0, #8] - bl SetFadeProgress - bl sub_080A3954 - pop {pc} - .align 2, 0 -_080A38A8: .4byte gFadeControl -_080A38AC: .4byte 0xFFFF7FFF -_080A38B0: .4byte gMenu - - thumb_func_start sub_080A38B4 -sub_080A38B4: @ 0x080A38B4 - push {lr} - movs r0, #4 - movs r1, #4 - bl SetFade - ldr r0, _080A38CC @ =gMenu - ldrh r0, [r0, #8] - bl SetFadeProgress - bl sub_080A3954 - pop {pc} - .align 2, 0 -_080A38CC: .4byte gMenu - - thumb_func_start sub_080A38D0 -sub_080A38D0: @ 0x080A38D0 - push {r4, r5, r6, lr} - mov r6, r8 - push {r6} - ldr r0, _080A391C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A3914 - ldr r0, _080A3920 @ =gBG1Buffer - movs r6, #0x80 - lsls r6, r6, #4 - adds r1, r6, #0 - bl MemClear - ldr r4, _080A3924 @ =gScreen - movs r0, #0 - mov r8, r0 - movs r5, #1 - strh r5, [r4, #0x1a] - ldr r0, _080A3928 @ =gBG2Buffer - adds r1, r6, #0 - bl MemClear - strh r5, [r4, #0x26] - adds r4, #0x68 - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r4] - ldr r0, _080A392C @ =gMenu - mov r1, r8 - strb r1, [r0, #5] - movs r0, #4 - movs r1, #8 - bl SetFade -_080A3914: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, pc} - .align 2, 0 -_080A391C: .4byte gFadeControl -_080A3920: .4byte gBG1Buffer -_080A3924: .4byte gScreen -_080A3928: .4byte gBG2Buffer -_080A392C: .4byte gMenu - - thumb_func_start sub_080A3930 -sub_080A3930: @ 0x080A3930 - push {lr} - ldr r0, _080A394C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A3948 - movs r0, #7 - movs r1, #8 - bl SetFade - ldr r1, _080A3950 @ =gMain - movs r0, #2 - strb r0, [r1, #3] -_080A3948: - pop {pc} - .align 2, 0 -_080A394C: .4byte gFadeControl -_080A3950: .4byte gMain - - thumb_func_start sub_080A3954 -sub_080A3954: @ 0x080A3954 - ldr r2, _080A397C @ =gMenu - ldr r1, [r2, #0xc] - ldrb r0, [r1] - movs r3, #0 - strb r0, [r2, #5] - strb r3, [r2, #6] - ldrh r0, [r1, #6] - strh r0, [r2, #0x10] - ldrh r0, [r1, #4] - strh r0, [r2, #8] - ldrh r0, [r1, #8] - strh r0, [r2, #0x12] - ldrh r0, [r1, #0xa] - strh r0, [r2, #0x14] - ldrb r0, [r1, #1] - strb r0, [r2, #0x19] - adds r1, #0xc - str r1, [r2, #0xc] - bx lr - .align 2, 0 -_080A397C: .4byte gMenu - - thumb_func_start sub_080A3980 -sub_080A3980: @ 0x080A3980 - push {lr} - ldr r0, _080A3990 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A398E - bl DoSoftReset -_080A398E: - pop {pc} - .align 2, 0 -_080A3990: .4byte gFadeControl - - thumb_func_start sub_080A3994 -sub_080A3994: @ 0x080A3994 - push {r4, r5, lr} - ldr r0, _080A39AC @ =gMenu - ldrb r1, [r0, #6] - adds r2, r0, #0 - cmp r1, #4 - bls _080A39A2 - b _080A3B14 -_080A39A2: - lsls r0, r1, #2 - ldr r1, _080A39B0 @ =_080A39B4 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080A39AC: .4byte gMenu -_080A39B0: .4byte _080A39B4 -_080A39B4: @ jump table - .4byte _080A39C8 @ case 0 - .4byte _080A3A38 @ case 1 - .4byte _080A3AB8 @ case 2 - .4byte _080A3AEE @ case 3 - .4byte _080A3B14 @ case 4 -_080A39C8: - movs r5, #1 - strb r5, [r2, #6] - movs r4, #0 - movs r0, #0x1e - strh r0, [r2, #8] - strb r4, [r2, #3] - movs r0, #1 - bl DispReset - bl InitSoundPlayingInfo - bl sub_080A4D34 - movs r0, #0xa - bl LoadPaletteGroup - movs r0, #0 - movs r1, #0 - bl SetColor - movs r0, #4 - bl LoadGfxGroup - movs r0, #0xc0 - lsls r0, r0, #0x13 - movs r1, #0x20 - bl MemClear - movs r0, #0 - movs r1, #0 - bl SetPopupState - ldr r2, _080A3A2C @ =gScreen - ldrh r0, [r2] - movs r3, #0xc0 - lsls r3, r3, #3 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r0, _080A3A30 @ =0x00001C01 - strh r0, [r2, #0x14] - ldr r0, _080A3A34 @ =0x00001D05 - strh r0, [r2, #0x20] - strh r5, [r2, #0x26] - movs r0, #4 - movs r1, #8 - bl SetFade - b _080A3B36 - .align 2, 0 -_080A3A2C: .4byte gScreen -_080A3A30: .4byte 0x00001C01 -_080A3A34: .4byte 0x00001D05 -_080A3A38: - ldr r0, _080A3A50 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - beq _080A3A42 - b _080A3B36 -_080A3A42: - ldrh r0, [r2, #8] - cmp r0, #0 - beq _080A3A54 - subs r0, #1 - strh r0, [r2, #8] - b _080A3B36 - .align 2, 0 -_080A3A50: .4byte gFadeControl -_080A3A54: - ldrb r4, [r2, #3] - ldr r0, _080A3A68 @ =gInput - ldrh r0, [r0, #2] - cmp r0, #0x40 - beq _080A3A72 - cmp r0, #0x40 - bgt _080A3A6C - cmp r0, #1 - beq _080A3A7A - b _080A3A9A - .align 2, 0 -_080A3A68: .4byte gInput -_080A3A6C: - cmp r0, #0x80 - beq _080A3A76 - b _080A3A9A -_080A3A72: - movs r4, #0 - b _080A3A9A -_080A3A76: - movs r4, #1 - b _080A3A9A -_080A3A7A: - cmp r4, #0 - beq _080A3A82 - movs r0, #4 - b _080A3A8C -_080A3A82: - movs r0, #8 - movs r1, #0 - bl CreateDialogBox - movs r0, #2 -_080A3A8C: - ldr r1, _080A3AB4 @ =gMenu - strb r0, [r1, #6] - movs r0, #0x3c - strh r0, [r1, #8] - movs r0, #0x6a - bl SoundReq -_080A3A9A: - ldr r1, _080A3AB4 @ =gMenu - ldrb r0, [r1, #3] - cmp r0, r4 - beq _080A3B36 - strb r4, [r1, #3] - movs r0, #0 - adds r1, r4, #0 - bl SetPopupState - movs r0, #0x69 - bl SoundReq - b _080A3B36 - .align 2, 0 -_080A3AB4: .4byte gMenu -_080A3AB8: - movs r0, #0 - bl HandleSave - adds r1, r0, #0 - ldr r4, _080A3AD8 @ =gMenu - strb r1, [r4] - movs r0, #1 - rsbs r0, r0, #0 - cmp r1, r0 - beq _080A3ADC - cmp r1, #1 - bne _080A3B36 - movs r0, #4 - strb r0, [r4, #6] - b _080A3B36 - .align 2, 0 -_080A3AD8: .4byte gMenu -_080A3ADC: - movs r0, #0x3c - strh r0, [r4, #8] - movs r0, #9 - movs r1, #0 - bl CreateDialogBox - movs r0, #3 - strb r0, [r4, #6] - b _080A3B36 -_080A3AEE: - adds r1, r2, #0 - ldrh r0, [r1, #8] - cmp r0, #0 - beq _080A3AFC - subs r0, #1 - strh r0, [r1, #8] - b _080A3B36 -_080A3AFC: - ldr r0, _080A3B10 @ =gInput - ldrh r1, [r0, #2] - movs r0, #0xb - ands r0, r1 - cmp r0, #0 - beq _080A3B36 - movs r0, #1 - strb r0, [r2, #6] - b _080A3B36 - .align 2, 0 -_080A3B10: .4byte gInput -_080A3B14: - ldr r2, _080A3B38 @ =gScreen - ldrh r1, [r2] - ldr r0, _080A3B3C @ =0x0000FDFF - ands r0, r1 - movs r4, #0 - strh r0, [r2] - bl sub_08050384 - movs r0, #7 - movs r1, #8 - bl SetFade - ldr r1, _080A3B40 @ =gMain - movs r0, #3 - strb r0, [r1, #3] - ldr r0, _080A3B44 @ =gMenu - strb r4, [r0, #6] -_080A3B36: - pop {r4, r5, pc} - .align 2, 0 -_080A3B38: .4byte gScreen -_080A3B3C: .4byte 0x0000FDFF -_080A3B40: .4byte gMain -_080A3B44: .4byte gMenu - - thumb_func_start sub_080A3B48 -sub_080A3B48: @ 0x080A3B48 - push {lr} - movs r1, #0 - ldr r0, _080A3B6C @ =gSave - ldr r3, _080A3B70 @ =0x0000012B - adds r2, r0, r3 - ldrb r0, [r2] - cmp r0, #0 - beq _080A3B66 -_080A3B58: - adds r1, #1 - cmp r1, #0x12 - bhi _080A3B66 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, #0 - bne _080A3B58 -_080A3B66: - adds r0, r1, #0 - pop {pc} - .align 2, 0 -_080A3B6C: .4byte gSave -_080A3B70: .4byte 0x0000012B - - thumb_func_start sub_080A3B74 -sub_080A3B74: @ 0x080A3B74 - ldr r0, _080A3B80 @ =gMenu - adds r0, #0x2f - movs r1, #0 - strb r1, [r0] - bx lr - .align 2, 0 -_080A3B80: .4byte gMenu diff --git a/assets/assets.json b/assets/assets.json index 72b7e899..b4fea800 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -25987,11 +25987,6 @@ "size": 5, "type": "animation" }, - { - "path": "flyingPot/gUnk_080CF290.bin", - "start": 848528, - "size": 4 - }, { "path": "animations/gSpriteAnimations_Gibdo_0.bin", "start": 848592, @@ -45339,26 +45334,6 @@ "DEMO_USA": 2640 } }, - { - "path": "data_08127280/gUnk_08127280.bin", - "start": 1208960, - "size": 24 - }, - { - "path": "data_08127280/gUnk_08127298.bin", - "start": 1208984, - "size": 24 - }, - { - "path": "data_08127280/gUnk_081272B0.bin", - "start": 1209008, - "size": 24 - }, - { - "path": "data_08127280/gUnk_081272C8.bin", - "start": 1209032, - "size": 24 - }, { "path": "data_08127280/gUnk_081272F0.bin", "start": 1209072, diff --git a/data/data_08127280.s b/data/data_08127280.s index cc57aa11..26384a3d 100644 --- a/data/data_08127280.s +++ b/data/data_08127280.s @@ -4,23 +4,7 @@ .section .rodata .align 2 -gUnk_08127280:: @ 08127280 - .incbin "data_08127280/gUnk_08127280.bin" - -gUnk_08127298:: @ 08127298 - .incbin "data_08127280/gUnk_08127298.bin" - -gUnk_081272B0:: @ 081272B0 - .incbin "data_08127280/gUnk_081272B0.bin" - -gUnk_081272C8:: @ 081272C8 - .incbin "data_08127280/gUnk_081272C8.bin" - -gUnk_081272E0:: @ 081272E0 - .4byte gUnk_08127280 - .4byte gUnk_08127298 - .4byte gUnk_081272B0 - .4byte gUnk_081272C8 +@ staffroll rodata gUnk_081272F0:: @ 081272F0 .incbin "data_08127280/gUnk_081272F0.bin" @@ -35,20 +19,23 @@ gUnk_08127CEC:: @ 08127CEC .incbin "data_08127280/gUnk_08127CEC.bin" gUnk_08127D00:: @ 08127D00 - .4byte sub_080A3608 - .4byte sub_080A36C0 - .4byte sub_080A3994 - .4byte sub_080A3980 + .4byte StaffrollTask_State0 + .4byte StaffrollTask_State1 + .4byte StaffrollTask_State2 + .4byte StaffrollTask_State3 gUnk_08127D10:: @ 08127D10 - .4byte sub_080A36DC - .4byte sub_080A36F8 - .4byte sub_080A3768 - .4byte sub_080A3864 - .4byte sub_080A3888 - .4byte sub_080A38B4 - .4byte sub_080A38D0 - .4byte sub_080A3930 + .4byte StaffrollTask_State1MenuType0 + .4byte StaffrollTask_State1MenuType1 + .4byte StaffrollTask_State1MenuType2 + .4byte StaffrollTask_State1MenuType3 + .4byte StaffrollTask_State1MenuType4 + .4byte StaffrollTask_State1MenuType5 + .4byte StaffrollTask_State1MenuType6 + .4byte StaffrollTask_State1MenuType7 + +@ End of staffroll + gAreaMetadata:: @ 08127D30 .ifdef EU diff --git a/include/fileselect.h b/include/fileselect.h index 31d75ea5..2d4d1122 100644 --- a/include/fileselect.h +++ b/include/fileselect.h @@ -33,12 +33,6 @@ typedef struct { u8* unk8; } struct_02036540; -typedef struct { - u8 filler0[0x10]; - u16 unk10; - u8 filler12[0x6]; -} struct_080FC844; - extern struct_020227E8 gUnk_020227E8[]; typedef struct { @@ -57,7 +51,7 @@ extern struct_02019EE0 gMapDataBottomSpecial; // TODO size: 0x8000 from ClearTilemaps? extern void sub_08056FEC(u32, struct_020227E8*); -extern void sub_0805F46C(u32, void*); +extern void sub_0805F46C(u32, Font*); extern void RecoverUI(u32 bottomPt, u32 topPt); extern void ClearTilemaps(void); extern void sub_0805194C(u32); @@ -67,8 +61,9 @@ extern void sub_0805F300(struct_02036540*); extern void sub_08050A64(u32); extern void sub_08050AFC(u32); extern void sub_08050384(); +extern void CreateDialogBox(u32, u32); -extern const struct_080FC844 gUnk_080FC844; +extern const Font gUnk_080FC844; extern const u16 gUnk_080FC85C[][3]; extern void (*const gUnk_080FC908[])(void); extern const u8 gGlobalGfxAndPalettes[]; diff --git a/include/structures.h b/include/structures.h index 12d15690..cfa85d7f 100644 --- a/include/structures.h +++ b/include/structures.h @@ -296,4 +296,22 @@ typedef struct { extern SpritePtr gSpritePtrs[]; +typedef struct { + u16* dest; + void* gfx_dest; + void* buffer_loc; + u32 _c; + u16 gfx_src; + u8 width; + u8 right_align : 1; + u8 sm_border : 1; + u8 unused : 1; + u8 draw_border : 1; + u8 border_type : 4; + u8 fill_type; + u8 _15; + u8 _16; + u8 stylized; +} Font; + #endif diff --git a/linker.ld b/linker.ld index 06492e9c..e24e01ae 100644 --- a/linker.ld +++ b/linker.ld @@ -827,7 +827,7 @@ SECTIONS { src/demo.o(.text); #endif src/sound.o(.text); - asm/staffroll.o(.text); + src/staffroll.o(.text); src/menu/kinstone_menu.o(.text); src/menu/figurine_menu.o(.text); src/menu/pause_menu.o(.text); @@ -1580,6 +1580,7 @@ SECTIONS { #ifdef DEMO_USA data/const/demo.o(.rodata); #endif + src/staffroll.o(.rodata); data/data_08127280.o(.rodata); src/menu/kinstone_menu.o(.rodata); src/menu/figurine_menu.o(.rodata); diff --git a/src/demo.c b/src/demo.c index 04d7baff..9b7b4356 100644 --- a/src/demo.c +++ b/src/demo.c @@ -216,7 +216,7 @@ void sub_080A3198(u32 param_1, u32 param_2) { MemClear(gUnk_08127C98 - 0x1e, 0x180); if (r4 != 0) { - sub_0805F46C(r4, &gUnk_08127C98); + sub_0805F46C(r4, (Font*)&gUnk_08127C98); // TODO } gScreen.bg0.updated = 1; diff --git a/src/fileselect.c b/src/fileselect.c index 93355380..4d7268a1 100644 --- a/src/fileselect.c +++ b/src/fileselect.c @@ -106,12 +106,12 @@ void sub_08051458(void); void CreateDialogBox(u32 arg0, u32 arg1) { u32 sfx; - struct_080FC844 var0; + Font var0; sub_08050384(); MemCopy(&gUnk_080FC844, &var0, sizeof(gUnk_080FC844)); sub_08056FEC(arg1, gUnk_020227E8); - var0.unk10 |= gUnk_080FC85C[arg0][0] << 0xC; + var0.gfx_src |= gUnk_080FC85C[arg0][0] << 0xC; sub_0805F46C(gUnk_080FC85C[arg0][1], &var0); sfx = gUnk_080FC85C[arg0][2]; if (sfx) { diff --git a/src/game.c b/src/game.c index b4465752..1cc4624b 100644 --- a/src/game.c +++ b/src/game.c @@ -85,7 +85,6 @@ extern void* gUnk_080B755C[]; extern void** gExitLists[]; extern void** gAreaTable[]; -extern void CreateDialogBox(u32, u32); extern void FinalizeSave(void); extern void ClearArmosData(void); extern void ClearRoomMemory(void); @@ -168,24 +167,6 @@ typedef struct { } struct_08127F94; extern struct_08127F94 gUnk_08127F94[]; -typedef struct { - u16* dest; - void* gfx_dest; - void* buffer_loc; - u32 _c; - u16 gfx_src; - u8 width; - u8 right_align : 1; - u8 sm_border : 1; - u8 unused : 1; - u8 draw_border : 1; - u8 border_type : 4; - u8 fill_type; - u8 _15; - u8 _16; - u8 stylized; -} Font; - typedef struct { u8 dest_off[8]; u8 _8; diff --git a/src/menu/kinstone_menu.c b/src/menu/kinstone_menu.c index 2643eb57..b9d9ca2a 100644 --- a/src/menu/kinstone_menu.c +++ b/src/menu/kinstone_menu.c @@ -74,6 +74,13 @@ Subtask KinstoneMenu_Type2; Subtask KinstoneMenu_Type3; Subtask KinstoneMenu_Type4; Subtask KinstoneMenu_Type5; + +ASM_FUNC("asm/non_matching/menu/kinstone_menu/sub_080A3B48.inc", s32 sub_080A3B48(void)) + +void sub_080A3B74(void) { + gKinstoneMenu.unk2f = 0; +} + void Subtask_KinstoneMenu(void) { static Subtask* const kinstoneMenuTypes[] = { KinstoneMenu_Type0, KinstoneMenu_Type1, KinstoneMenu_Type2, diff --git a/src/npc/phonograph.c b/src/npc/phonograph.c index dd731979..8643cf95 100644 --- a/src/npc/phonograph.c +++ b/src/npc/phonograph.c @@ -12,7 +12,7 @@ void sub_0806EABC(Entity* this); void sub_0806EABC(Entity* this, u32 param); #endif -extern u32 gUnk_081146B8; +extern Font gUnk_081146B8; extern s8 gUnk_081145E4[]; void Phonograph(Entity* this) { diff --git a/src/object/figurineDevice.c b/src/object/figurineDevice.c index 22c63ddc..a9efe80c 100644 --- a/src/object/figurineDevice.c +++ b/src/object/figurineDevice.c @@ -417,9 +417,9 @@ void sub_080882A8(FigurineDeviceEntity* this) { sub_08057044(this->unk_83, &gUnk_020227E8[1], 0x202020); ptr = (u8*)0x02000000; if (ptr[7] == 0) { - sub_0805F46C((u32)gUnk_08120AE4[super->type2], &gUnk_08120AB4); + sub_0805F46C((u32)gUnk_08120AE4[super->type2], (Font*)&gUnk_08120AB4); // TODO convert data } else { - sub_0805F46C((u32)gUnk_08120AE4[super->type2], &gUnk_08120ACC); + sub_0805F46C((u32)gUnk_08120AE4[super->type2], (Font*)&gUnk_08120ACC); // TODO convert data } gScreen.bg0.updated = 1; } diff --git a/src/staffroll.c b/src/staffroll.c new file mode 100644 index 00000000..2a9077b4 --- /dev/null +++ b/src/staffroll.c @@ -0,0 +1,326 @@ +#include "global.h" +#include "room.h" +#include "main.h" +#include "save.h" +#include "flags.h" +#include "fileselect.h" +#include "screen.h" +#include "common.h" +#include "menu.h" +#include "game.h" +#include "subtask.h" + +typedef struct { + /*0x00*/ Menu base; + s16 unk_10; + u16 unk_12; + u16 unk_14; + u8 unk_16; + u8 unk_17; + u8 unk_18; + u8 unk_19; + u8 bgmMusicStarted; + u8 unk_1b[0x14]; + u8 unk_2f; +} StaffrollMenu; +#define gStaffrollMenu (*(StaffrollMenu*)&gMenu) + +const Font gUnk_08127280 = { + (u16*)0x02021f72, (void*)0x0600c400, gTextGfxBuffer, 0, 61472, 240, 0, 0, 0, 0, 0, 5, 0, 1, 0 +}; +const Font gUnk_08127298 = { + (u16*)0x02021f90, (void*)0x0600c400, gTextGfxBuffer, 0, 61472, 240, 0, 0, 0, 0, 0, 5, 0, 1, 0 +}; +const Font gUnk_081272B0 = { + (u16*)0x0202204e, (void*)0x0600c400, gTextGfxBuffer, 0, 61472, 240, 1, 0, 0, 0, 0, 5, 0, 1, 0 +}; +const Font gUnk_081272C8 = { + (u16*)0x020222ce, (void*)0x0600c400, gTextGfxBuffer, 0, 61472, 240, 1, 0, 0, 0, 0, 5, 0, 1, 0 +}; + +const Font* const gUnk_081272E0[] = { + &gUnk_08127280, + &gUnk_08127298, + &gUnk_081272B0, + &gUnk_081272C8, +}; + +// TODO figure out structure of gStaffrollMenu.base.field_0xc +extern u8 gUnk_081272F0[]; +extern u8 gUnk_08127644[]; +extern u8 gUnk_08127998[]; +extern const u8 gUnk_08127CEC[]; +extern void (*const gUnk_08127D00[])(void); +extern void (*const gUnk_08127D10[])(void); + +void sub_080A3954(void); + +void StaffrollTask(void) { + gRoomTransition.frameCount += 1; + gUnk_08127D00[gMain.state](); +} + +void StaffrollTask_State0(void) { + gSave.unk6 = 1; + SetGlobalFlag(GAMECLEAR); + gMain.state = 1; + gStaffrollMenu.base.menuType = 0; + gStaffrollMenu.base.transitionTimer = 0xb4; + gStaffrollMenu.unk_16 = 5; + gStaffrollMenu.unk_17 = 4; + gStaffrollMenu.bgmMusicStarted = 0; + if (gSaveHeader->language >= 2) { + gStaffrollMenu.base.field_0xc = gUnk_08127998; + } else { + if (gSaveHeader->language == 1) { + gStaffrollMenu.base.field_0xc = gUnk_08127644; + } else { + gStaffrollMenu.base.field_0xc = gUnk_081272F0; + } + } + DispReset(0); + LoadPaletteGroup(0xb); + LoadPaletteGroup(0xc); + SetColor(0, 0); + gScreen.lcd.displayControl = 0x640; + gScreen.controls.layerFXControl = 0x2442; + gScreen.controls.alphaBlend = 0x1000; + gScreen.bg1.control = 0x1e4d; + gScreen.bg2.control = 0x1dc3; + InitSoundPlayingInfo(); + ResetSystemPriority(); + SetFade(5, 0x100); +} + +void StaffrollTask_State1(void) { + gUnk_08127D10[gMenu.menuType](); +} + +void StaffrollTask_State1MenuType0(void) { + gMenu.transitionTimer -= 1; + if (gMenu.transitionTimer == 0) { + sub_080A3954(); + } +} + +void StaffrollTask_State1MenuType1(void) { + if (gFadeControl.active == 0) { + const u8* ptr = &gUnk_08127CEC[gStaffrollMenu.unk_10 * 2]; + LoadPaletteGroup(ptr[0]); + LoadGfxGroup(ptr[1]); + MemClear(&gBG1Buffer, 0x800); + gScreen.bg1.updated = 1; + gScreen.bg2.xOffset = gStaffrollMenu.unk_12; + gScreen.controls.alphaBlend = 0x1000; + gStaffrollMenu.base.menuType = 0; + if (gStaffrollMenu.bgmMusicStarted == 0) { + gStaffrollMenu.bgmMusicStarted = 1; + SoundReq(BGM_CREDITS); + } + SetFade(4, 8); + } +} + +void StaffrollTask_State1MenuType2(void) { + u8 tmp; + switch (gStaffrollMenu.base.overlayType) { + case 0: + MemClear(&gBG1Buffer, 0x800); + sub_0805F46C(gStaffrollMenu.unk_10, (Font*)gUnk_081272E0[gStaffrollMenu.unk_19]); + gScreen.bg1.updated = 1; + gStaffrollMenu.base.overlayType++; + gStaffrollMenu.unk_18 = 0; + break; + case 1: + if (gFadeControl.active != 0) { + return; + } + if ((gRoomTransition.frameCount & 1) != 0) { + return; + } + tmp = ++gStaffrollMenu.unk_18; + gScreen.controls.alphaBlend = (0x10 - tmp) * 0x100 | tmp; + if (gStaffrollMenu.unk_18 >= 0x10) { + gStaffrollMenu.base.overlayType++; + } + break; + case 2: + gStaffrollMenu.base.transitionTimer--; + if (gStaffrollMenu.base.transitionTimer == 0) { + gStaffrollMenu.base.overlayType++; + } + break; + case 3: + if ((gRoomTransition.frameCount & 1) != 0) { + return; + } + tmp = --gStaffrollMenu.unk_18; + gScreen.controls.alphaBlend = (0x10 - tmp) * 0x100 | tmp; + if (gStaffrollMenu.unk_18 == 0) { + gStaffrollMenu.base.overlayType++; + } + break; + default: + if (gFadeControl.active == 0) { + gFadeControl.mask = 0xffffffff; + sub_080A3954(); + } + break; + } +} + +void StaffrollTask_State1MenuType3(void) { + gMenu.transitionTimer--; + if (gMenu.transitionTimer == 0) { + sub_080A3954(); + SetFade(5, 8); + } +} + +void StaffrollTask_State1MenuType4(void) { + gFadeControl.mask = 0xffff7fff; + SetFade(5, 4); + SetFadeProgress(gMenu.transitionTimer); + sub_080A3954(); +} + +void StaffrollTask_State1MenuType5(void) { + SetFade(4, 4); + SetFadeProgress(gMenu.transitionTimer); + sub_080A3954(); +} + +void StaffrollTask_State1MenuType6(void) { + if (gFadeControl.active == 0) { + MemClear(&gBG1Buffer, 0x800); + gScreen.bg1.updated = 1; + MemClear(&gBG2Buffer, 0x800); + gScreen.bg2.updated = 1; + gScreen.controls.alphaBlend = 0x1000; + gMenu.menuType = 0; + SetFade(4, 8); + } +} + +void StaffrollTask_State1MenuType7(void) { + if (gFadeControl.active == 0) { + SetFade(7, 8); + gMain.state = 2; + } +} + +void sub_080A3954(void) { + u16* puVar1; + u16* puVar2; + u16* puVar3; + u8* pbVar4; + + puVar1 = (u16*)(gStaffrollMenu.base.field_0xc + 6); + puVar2 = (u16*)(gStaffrollMenu.base.field_0xc + 8); + puVar3 = (u16*)(gStaffrollMenu.base.field_0xc + 10); + pbVar4 = gStaffrollMenu.base.field_0xc + 1; + gStaffrollMenu.base.menuType = *gStaffrollMenu.base.field_0xc; + gStaffrollMenu.base.overlayType = 0; + gStaffrollMenu.unk_10 = *puVar1; + gStaffrollMenu.base.transitionTimer = *(u16*)(gStaffrollMenu.base.field_0xc + 4); + gStaffrollMenu.unk_12 = *puVar2; + gStaffrollMenu.unk_14 = *puVar3; + gStaffrollMenu.unk_19 = *pbVar4; + gStaffrollMenu.base.field_0xc += 0xc; +} + +void StaffrollTask_State3(void) { + if (gFadeControl.active == 0) { + DoSoftReset(); + } +} + +void StaffrollTask_State2(void) { + SaveResult saveResult; + u32 choice; + u32 tmp; + switch (gStaffrollMenu.base.overlayType) { + case 0: + gStaffrollMenu.base.overlayType = 1; + gStaffrollMenu.base.transitionTimer = 0x1e; + gStaffrollMenu.base.field_0x3 = 0; + DispReset(1); + InitSoundPlayingInfo(); + sub_080A4D34(); + LoadPaletteGroup(10); + SetColor(0, 0); + LoadGfxGroup(4); + MemClear((void*)VRAM, 0x20); + SetPopupState(0, 0); + gScreen.lcd.displayControl |= 0x600; + gScreen.bg1.control = 0x1c01; + gScreen.bg2.control = 0x1d05; + gScreen.bg2.updated = 1; + SetFade(4, 8); + break; + case 1: + if (gFadeControl.active == 0) { + if (gStaffrollMenu.base.transitionTimer != 0) { + gStaffrollMenu.base.transitionTimer--; + } else { + choice = gStaffrollMenu.base.field_0x3; + switch (gInput.newKeys) { + case 0x40: + choice = 0; + break; + case 0x80: + choice = 1; + break; + case 1: + if (choice != 0) { + tmp = 4; + } else { + CreateDialogBox(8, 0); + tmp = 2; + } + gStaffrollMenu.base.overlayType = tmp; + gStaffrollMenu.base.transitionTimer = 0x3c; + SoundReq(SFX_TEXTBOX_SELECT); + break; + } + if (gStaffrollMenu.base.field_0x3 != choice) { + gStaffrollMenu.base.field_0x3 = choice; + SetPopupState(0, choice); + SoundReq(SFX_TEXTBOX_CHOICE); + } + } + } + break; + case 2: + saveResult = HandleSave(0); + gStaffrollMenu.base.field_0x0 = saveResult; + switch (saveResult) { + case SAVE_OK: + gStaffrollMenu.base.overlayType = 4; + break; + case SAVE_ERROR: + gStaffrollMenu.base.transitionTimer = 0x3c; + CreateDialogBox(9, 0); + gStaffrollMenu.base.overlayType = 3; + break; + } + break; + case 3: + if (gStaffrollMenu.base.transitionTimer != 0) { + gStaffrollMenu.base.transitionTimer--; + } else { + if ((gInput.newKeys & 0xb) != 0) { + gStaffrollMenu.base.overlayType = 1; + } + } + break; + case 4: + default: + gScreen.lcd.displayControl &= 0xfdff; + sub_08050384(); + SetFade(7, 8); + gMain.state = 3; + gStaffrollMenu.base.overlayType = 0; + break; + } +} diff --git a/src/subtask2.c b/src/subtask2.c index 47542862..f27faf5e 100644 --- a/src/subtask2.c +++ b/src/subtask2.c @@ -11,8 +11,6 @@ #include "main.h" #include "message.h" -extern void CreateDialogBox(u32, u32); - extern u8 gUnk_08128D38[]; extern u8 gUnk_08128D43[];